From c03755586e759017fcae9e0f23a41e91fb3030b9 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:25:02 -0700 Subject: [PATCH 001/141] feat: setup project --- .claude/settings.json | 6 + .github/actions/setup-env/action.yaml | 23 + .github/dependabot.yml | 36 + .gitignore | 34 + .npmrc | 1 + .prettierignore | 9 + .prettierrc | 14 + .storybook/main.ts | 14 + .storybook/preview.ts | 23 + .vscode/extensions.json | 8 + .vscode/settings.json | 14 + @types/.gitkeep | 0 README.md | 42 + eslint.config.js | 72 + package.json | 85 + pnpm-lock.yaml | 5885 +++++++++++++++++++++++++ pnpm-workspace.yaml | 19 + src/app.d.ts | 19 + src/app.html | 12 + src/hooks.server.ts | 7 + src/lib/assets/favicon.svg | 1 + src/lib/index.ts | 1 + src/routes/+layout.svelte | 18 + src/routes/+layout.ts | 1 + src/routes/+page.svelte | 2 + static/robots.txt | 3 + svelte.config.ts | 59 + tools/clean-build.ts | 6 + tsconfig.app.json | 10 + tsconfig.base.json | 38 + tsconfig.json | 12 + uno.config.ts | 60 + vite.config.ts | 118 + vitest.shims.d.ts | 1 + wrangler.jsonc | 25 + 35 files changed, 6678 insertions(+) create mode 100644 .claude/settings.json create mode 100644 .github/actions/setup-env/action.yaml create mode 100644 .github/dependabot.yml create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .storybook/main.ts create mode 100644 .storybook/preview.ts create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 @types/.gitkeep create mode 100644 README.md create mode 100644 eslint.config.js create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 src/app.d.ts create mode 100644 src/app.html create mode 100644 src/hooks.server.ts create mode 100644 src/lib/assets/favicon.svg create mode 100644 src/lib/index.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+layout.ts create mode 100644 src/routes/+page.svelte create mode 100644 static/robots.txt create mode 100644 svelte.config.ts create mode 100644 tools/clean-build.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.base.json create mode 100644 tsconfig.json create mode 100644 uno.config.ts create mode 100644 vite.config.ts create mode 100644 vitest.shims.d.ts create mode 100644 wrangler.jsonc diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..9070d57 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/claude-code-settings.json", + "enabledPlugins": { + "svelte@svelte": true + } +} diff --git a/.github/actions/setup-env/action.yaml b/.github/actions/setup-env/action.yaml new file mode 100644 index 0000000..b9f2874 --- /dev/null +++ b/.github/actions/setup-env/action.yaml @@ -0,0 +1,23 @@ +name: Setup Environment +description: Sets up development environment. + +# Required Permissions: +# - contents: read + +runs: + using: 'composite' + + steps: + - name: Install pnpm + uses: pnpm/action-setup@v6 + with: + cache: true + + - name: Set up Node.js + uses: actions/setup-node@v6 + with: + node-version: 'package.json' + + - name: Install dependencies + run: pnpm install + shell: bash diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..dc5e197 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,36 @@ +version: 2 + +updates: + - package-ecosystem: 'github-actions' + directory: '/' + schedule: + interval: 'weekly' + commit-message: + prefix: 'ci' + open-pull-requests-limit: 2 + groups: + security: + applies-to: security-updates + patterns: + - '*' + version: + applies-to: version-updates + patterns: + - '*' + - package-ecosystem: 'npm' + directory: '/' + versioning-strategy: 'increase' + schedule: + interval: 'weekly' + open-pull-requests-limit: 0 + commit-message: + prefix: 'build(deps)' + groups: + security: + applies-to: security-updates + patterns: + - '*' + version: + applies-to: version-updates + patterns: + - '*' diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cbbb584 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build +/static/assets/fonts +worker-configuration.d.ts +*.tsbuildinfo + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +*storybook.log +storybook-static +chromatic.log +chromatic-build-*.xml +chromatic-diagnostics.json + +.claude/settings.local.json diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..7d74fe2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lock +bun.lockb + +# Miscellaneous +/static/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..f78dcf3 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,14 @@ +{ + "useTabs": true, + "singleQuote": true, + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 0000000..5ef0426 --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,14 @@ +import type { StorybookConfig } from '@storybook/sveltekit'; + +const config = { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|ts|svelte)'], + addons: [ + '@storybook/addon-svelte-csf', + '@chromatic-com/storybook', + '@storybook/addon-vitest', + '@storybook/addon-a11y', + '@storybook/addon-docs', + ], + framework: '@storybook/sveltekit', +} satisfies StorybookConfig; +export default config; diff --git a/.storybook/preview.ts b/.storybook/preview.ts new file mode 100644 index 0000000..81ad46e --- /dev/null +++ b/.storybook/preview.ts @@ -0,0 +1,23 @@ +import type { Preview } from '@storybook/sveltekit'; + +import 'virtual:uno.css'; + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + + a11y: { + // 'todo' - show a11y violations in the test UI only + // 'error' - fail CI on a11y violations + // 'off' - skip a11y checks entirely + test: 'todo', + }, + }, +}; + +export default preview; diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..b984b30 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "svelte.svelte-vscode", + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint", + "antfu.unocss" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b5c0b12 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "svelte.plugin.svelte.defaultScriptLanguage": "ts", + "[svelte]": { + "editor.defaultFormatter": "svelte.svelte-vscode" + }, + "debug.javascript.terminalOptions": { + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**", + "**/node_modules/.vite-temp/**" + ] + }, + "js/ts.experimental.useTsgo": false +} diff --git a/@types/.gitkeep b/@types/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa23bb0 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```sh +# create a new project +npx sv create my-app +``` + +To recreate this project with the same configuration: + +```sh +# recreate this project +pnpm dlx sv@0.16.1 create --template minimal --types ts --add prettier eslint vitest="usages:unit,component" sveltekit-adapter="adapter:cloudflare+cfTarget:workers" storybook --install pnpm summer-summit +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```sh +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```sh +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..fa116e4 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,72 @@ +// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format +import storybook from 'eslint-plugin-storybook'; + +import prettier from 'eslint-config-prettier'; +import path from 'node:path'; +import js from '@eslint/js'; +import svelte from 'eslint-plugin-svelte'; +import unocss from '@unocss/eslint-config/flat'; +import { defineConfig, includeIgnoreFile, globalIgnores } from 'eslint/config'; +import globals from 'globals'; +import ts from 'typescript-eslint'; + +const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); + +export default defineConfig( + globalIgnores(['!.storybook'], 'Include Storybook Directory'), + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ts.configs.strictTypeChecked, + ts.configs.stylisticTypeChecked, + svelte.configs.recommended, + unocss, + /** @type {import('eslint/config').Config[]} */ ( + /** @type {unknown} */ (storybook.configs['flat/recommended']) + ), + prettier, + svelte.configs.prettier, + { + languageOptions: { + globals: { ...globals.browser, ...globals.node }, + parserOptions: { + projectService: true, + }, + }, + linterOptions: { + reportUnusedDisableDirectives: 'error', + reportUnusedInlineConfigs: 'error', + }, + rules: { + // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. + // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + 'no-undef': 'off', + }, + }, + { + files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], + languageOptions: { + parserOptions: { + extraFileExtensions: ['.svelte'], + parser: ts.parser, + }, + }, + }, + { + // Override or add rule settings here, such as: + // 'svelte/button-has-type': 'error' + rules: { + '@typescript-eslint/no-unused-vars': [ + 'error', + { + enableAutofixRemoval: { imports: true }, + }, + ], + '@typescript-eslint/no-unnecessary-condition': [ + 'error', + { + checkTypePredicates: true, + }, + ], + }, + }, +); diff --git a/package.json b/package.json new file mode 100644 index 0000000..88f0579 --- /dev/null +++ b/package.json @@ -0,0 +1,85 @@ +{ + "name": "summer-summit", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "prebuild": "node ./tools/clean-build.ts", + "build": "vite build", + "preview": "wrangler dev .svelte-kit/cloudflare/_worker.js --port 4173", + "prepare": "pnpm run gen || echo ''", + "precheck:wrangler": "pnpm run /^gen:wrangler$/", + "check:wrangler": "wrangler types ./@types/worker-configuration.d.ts --check", + "precheck:svelte": "pnpm run /^gen:svelte-kit$/", + "check:svelte": "svelte-check --tsconfig ./tsconfig.app.json", + "check": "pnpm run /^check:.*/", + "watch:svelte": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.app.json --watch", + "lint:prettier": "prettier --check .", + "lint:eslint": "eslint .", + "lint": "pnpm run /^lint:.*/", + "format": "prettier --write .", + "test": "vitest", + "gen:wrangler": "wrangler types ./@types/worker-configuration.d.ts", + "gen:svelte-kit": "svelte-kit sync", + "gen": "pnpm run /^gen:.*/", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + }, + "dependencies": { + "@fontsource-variable/work-sans": "^5.2.8", + "@fontsource/syncopate": "^5.2.8", + "@unocss/reset": "^66.7.2", + "bits-ui": "^2.18.1" + }, + "devDependencies": { + "@chromatic-com/storybook": "^5.2.1", + "@eslint/js": "^10.0.1", + "@storybook/addon-a11y": "^10.4.6", + "@storybook/addon-docs": "^10.4.6", + "@storybook/addon-svelte-csf": "^5.1.2", + "@storybook/addon-vitest": "^10.4.6", + "@storybook/sveltekit": "^10.4.6", + "@sveltejs/adapter-cloudflare": "^7.2.9", + "@sveltejs/enhanced-img": "^0.11.0", + "@sveltejs/kit": "^2.67.0", + "@sveltejs/vite-plugin-svelte": "^7.1.2", + "@types/node": "^24", + "@unocss/eslint-config": "^66.7.2", + "@unocss/extractor-svelte": "^66.7.2", + "@unocss/preset-web-fonts": "^66.7.2", + "@unocss/svelte-scoped": "^66.7.2", + "@vitest/browser-playwright": "^4.1.9", + "@vitest/coverage-v8": "^4.1.9", + "chromatic": "^17.5.0", + "eslint": "^10.5.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-storybook": "^10.4.6", + "eslint-plugin-svelte": "^3.19.0", + "globals": "^17.7.0", + "playwright": "^1.61.1", + "prettier": "^3.8.4", + "prettier-plugin-svelte": "^4.1.1", + "storybook": "^10.4.6", + "svelte": "^5.56.4", + "svelte-check": "^4.7.0", + "type-fest": "^5.7.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.62.0", + "unocss": "^66.7.2", + "unplugin-fonts": "^2.0.0", + "vite": "^8.1.0", + "vite-plugin-devtools-json": "^1.0.0", + "vitest": "^4.1.9", + "vitest-browser-svelte": "^2.1.1", + "wrangler": "^4.104.0" + }, + "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b", + "devEngines": { + "runtime": { + "name": "node", + "version": "^24.18.0", + "onFail": "download" + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..b04d3d9 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5885 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + undici@>=7.0.0 <7.28.0: ^7.28.0 + undici@>=7.23.0 <7.28.0: ^7.28.0 + ws@>=8.0.0 <8.21.0: ^8.21.0 + +importers: + + .: + dependencies: + '@fontsource-variable/work-sans': + specifier: ^5.2.8 + version: 5.2.8 + '@fontsource/syncopate': + specifier: ^5.2.8 + version: 5.2.8 + '@unocss/reset': + specifier: ^66.7.2 + version: 66.7.2 + bits-ui: + specifier: ^2.18.1 + version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + devDependencies: + '@chromatic-com/storybook': + specifier: ^5.2.1 + version: 5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + '@eslint/js': + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) + '@storybook/addon-a11y': + specifier: ^10.4.6 + version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + '@storybook/addon-docs': + specifier: ^10.4.6 + version: 10.4.6(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/addon-svelte-csf': + specifier: ^5.1.2 + version: 5.1.2(@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)))(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/addon-vitest': + specifier: ^10.4.6 + version: 10.4.6(@vitest/browser-playwright@4.1.9)(@vitest/browser@4.1.9)(@vitest/runner@4.1.9)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.9) + '@storybook/sveltekit': + specifier: ^10.4.6 + version: 10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/adapter-cloudflare': + specifier: ^7.2.9 + version: 7.2.9(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0) + '@sveltejs/enhanced-img': + specifier: ^0.11.0 + version: 0.11.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/kit': + specifier: ^2.67.0 + version: 2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/vite-plugin-svelte': + specifier: ^7.1.2 + version: 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@types/node': + specifier: ^24 + version: 24.13.2 + '@unocss/eslint-config': + specifier: ^66.7.2 + version: 66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@unocss/extractor-svelte': + specifier: ^66.7.2 + version: 66.7.2 + '@unocss/preset-web-fonts': + specifier: ^66.7.2 + version: 66.7.2 + '@unocss/svelte-scoped': + specifier: ^66.7.2 + version: 66.7.2 + '@vitest/browser-playwright': + specifier: ^4.1.9 + version: 4.1.9(playwright@1.61.1)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) + '@vitest/coverage-v8': + specifier: ^4.1.9 + version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + chromatic: + specifier: ^17.5.0 + version: 17.5.0 + eslint: + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-storybook: + specifier: ^10.4.6 + version: 10.4.6(eslint@10.5.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) + eslint-plugin-svelte: + specifier: ^3.19.0 + version: 3.19.0(eslint@10.5.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + globals: + specifier: ^17.7.0 + version: 17.7.0 + node: + specifier: runtime:^24.18.0 + version: runtime:24.18.0 + playwright: + specifier: ^1.61.1 + version: 1.61.1 + prettier: + specifier: ^3.8.4 + version: 3.8.4 + prettier-plugin-svelte: + specifier: ^4.1.1 + version: 4.1.1(prettier@3.8.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + storybook: + specifier: ^10.4.6 + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: + specifier: ^5.56.4 + version: 5.56.4(@typescript-eslint/types@8.62.0) + svelte-check: + specifier: ^4.7.0 + version: 4.7.0(picomatch@4.0.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3) + type-fest: + specifier: ^5.7.0 + version: 5.7.0 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.62.0 + version: 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + unocss: + specifier: ^66.7.2 + version: 66.7.2(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + unplugin-fonts: + specifier: ^2.0.0 + version: 2.0.0(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + vite: + specifier: ^8.1.0 + version: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite-plugin-devtools-json: + specifier: ^1.0.0 + version: 1.0.0(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + vitest: + specifier: ^4.1.9 + version: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + vitest-browser-svelte: + specifier: ^2.1.1 + version: 2.1.1(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vitest@4.1.9) + wrangler: + specifier: ^4.104.0 + version: 4.104.0 + +packages: + + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + + '@blazediff/core@1.9.1': + resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + + '@capsizecss/unpack@4.0.1': + resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==} + engines: {node: '>=18'} + + '@chromatic-com/storybook@5.2.1': + resolution: {integrity: sha512-z6I7NJk/0VngA64y5TNYaB4Hc2X8+90n4op6lBt9PvWk5TmIlFLDqdX33rlrwbNRkkYijVgA/wO04rVYXi5Mlg==} + engines: {node: '>=20.0.0', yarn: '>=1.22.18'} + peerDependencies: + storybook: ^0.0.0-0 || ^10.1.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0 || ^10.5.0-0 || ^10.6.0-0 + + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} + + '@cloudflare/unenv-preset@2.16.1': + resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} + peerDependencies: + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20260623.1': + resolution: {integrity: sha512-MvDoIsRTsUJRzAl1/4hDXL839piyyjCeYatBHWgMc12Go7nHxkgbRih+1GJImEiKACSentu410bOupcutqFbpg==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20260623.1': + resolution: {integrity: sha512-sNqHQvHPMOj5/BJOadtEZekRPSG5qQ0/ulC30ZRHRLnmx6tj5O4Wb3Nf0oznnI0pmjXhbv6b7+TOpDkaFMjbBg==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20260623.1': + resolution: {integrity: sha512-XYTWqTlZlCXqG+Po6awjXtlxw73hb3C39B/PP0sb4H9NI3V0eynq8Q7rXNe7DHJs2pWRfDJihQzpayQvpwf5wQ==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20260623.1': + resolution: {integrity: sha512-PC5UDKA8oQB3Gek/Y+ysovdHNjp55CihOQZd7F9xPwpkv9qTBB0mhyHnfoG2YHtW1bb9CNhuwiThaNxegpE4mg==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20260623.1': + resolution: {integrity: sha512-OTHLCVYyN0pEfrajpjjnrGg5zA1GDnpNYmMz3x2ESFtH/oXRODsUQBllP7oJpJvMURF3rXSYwAhMojaftGry8w==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cloudflare/workers-types@4.20260613.1': + resolution: {integrity: sha512-1mrgjE6epolwBhroeGAp5ud5H6Vyi6tl1o/NP0T4rXJ8bmEjmhHnbCzAhHTDHV0PIeip43wcuzHKJarvaGTaUA==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@fontsource-variable/work-sans@5.2.8': + resolution: {integrity: sha512-8uWtTt0/B5NxGie9xUVD5y5Ch4Q+Hy7kFYKtUpwYbzSAgJEoaMxT8rMnfnK7zfAYSLC8GnGO1/tXrFtKIYYQVQ==} + + '@fontsource/syncopate@5.2.8': + resolution: {integrity: sha512-8r+Qyb9nmwfBiR1GWZeCOskoF9pw7ZZ8g/eOswocew2H3REt+UNItmxcOUoVbpXVALG+SdRvdqDpxC4sBskaxA==} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.3': + resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@internationalized/date@3.12.2': + resolution: {integrity: sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@neoconfetti/react@1.0.0': + resolution: {integrity: sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@oxc-parser/binding-android-arm-eabi@0.127.0': + resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm-eabi@0.131.0': + resolution: {integrity: sha512-t2xicr9pfzkSRYx5aPqZqlLaayIwJTqgQ81Jor31Xep2nGyL2Aq3d0K5wOfeR7VevaSdxaS9dzSQP9xDwn8fDg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.127.0': + resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-android-arm64@0.131.0': + resolution: {integrity: sha512-nlGIod6gw75x1aEDgLS+srj+JRGY0HHm9MI9YgzE/B64l6d6+H3MSP9NOgp0+HTg8tp4vV9rVfgQGgd+TfVZcA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.127.0': + resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-arm64@0.131.0': + resolution: {integrity: sha512-jukuV6xe5RbQKFo7QD34NDCLDZp4PSOm8rmckhNdH/60ymG5zXbDzGBEyc+nTkuLQNama2aSGCt+CPfpjNTqyw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.127.0': + resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.131.0': + resolution: {integrity: sha512-g3JOo4khe9rslHm5WYaVDWb0HS/M1MLR3I9S8560MkKIcC96VQY00QjOlsuRyfSj/JDXj8i9T7ryPO2RidiXVg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.127.0': + resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-freebsd-x64@0.131.0': + resolution: {integrity: sha512-1hziITDTxjMePnX+dR9ocVT+EuZkQ8wm4FPAbmbEiKG+Phbo73J1ZnPAA6Y/aGsWF3McOFnQuZIktAFwalkfJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': + resolution: {integrity: sha512-9uRxfXwyKG9+MwmGQBo2ncPNwZH5HTmCETFM2WiuDBNDCW4NC5ttSQkwCAMrTAWgwMzVBH1CP8pM0v7nebCWXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': + resolution: {integrity: sha512-mgbLvzRShXOLBdWGInf08Af4q+pfj1xD8hSgLClDZ9of/BXkB6+LIhTH7fihiDUipqB3yoSkKBWaZ3Ejlf5Yag==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-gnu@0.131.0': + resolution: {integrity: sha512-OPT8++4aN6j2GJ8+3IZHS/byXoZP4aSBn+FoG6rgBJ2fKwPKXWF3MqrFMNW7NKHM28FLY579xYLxJSfgobEqPA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-arm64-musl@0.131.0': + resolution: {integrity: sha512-vtPiwmfVTAXzaxDKsOXG+LwgRAA7WEnaeHzhS5z0GE89gAK18KSXnly7Z6saXXq6L3dVMyK44uoTI03zKxrpmw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': + resolution: {integrity: sha512-8AW8L7w5cGHSdZPcyZX2yR0+GUODsT15rbRjfdD54rv6DMbtuEB19ysLOpKJlRGfH6UNYNpCHaU1uJWgTWf1/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': + resolution: {integrity: sha512-vvpjkjEOUsPcsYf8evE4MO3aGx9+3wodXEBOicGNnOwTuAik8eBONNkgSdhkGsAblQmfVHJyanRnpxglddTXIA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-riscv64-musl@0.131.0': + resolution: {integrity: sha512-AqmcNC3fClXX+fxQ6VGEN1667xVFiRBkY0CZmDMSiaeFUsv1+UkBPYYi48IUKcA9/ivvoKNRzQl2I4//kT9F/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-s390x-gnu@0.131.0': + resolution: {integrity: sha512-7d3jOMKy7RSQCcDLIci+ySll2FgsOMl/GiRux4q2JNv0zg4EdhFISa9idvrdN/HEUIQQJNg6dmveUeJl2YErGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.131.0': + resolution: {integrity: sha512-JHK/h95qVqVQ+ITER837kcTdwBDFpFaNnOTYGCP0zdUSX/mLKC7tXOoyrTb6vG7iRPwGlcgBil3v2IjYw1FqJA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-musl@0.127.0': + resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-x64-musl@0.131.0': + resolution: {integrity: sha512-b2BO82O8azXAyf7EUgOPKu145nWypbNyk07HbU09fkzhm9lEA5oPvaN/M8Nlo7tOErVTa2WOgS4QbOnxAPXdDQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-openharmony-arm64@0.127.0': + resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-openharmony-arm64@0.131.0': + resolution: {integrity: sha512-GHO9glZaX7LkX/OGfluEPf1yjg+ehiFbUdowbX6uNWOQhmwKWU4m4+nZ9FJkrHNKuxyI1KKertMdGjVKCApKWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.127.0': + resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@oxc-parser/binding-wasm32-wasi@0.131.0': + resolution: {integrity: sha512-3SkikPaEFoih1N83qLVEDLRLeY4nYsf6JT9SnWiMCQ5lGQdKup6bEuKCqkRiG9dD1IIaFeYz9RjlciPmYoFIWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-arm64-msvc@0.131.0': + resolution: {integrity: sha512-Os5bEhryeA2jkH+ZrnZyAC1EP5gs+X4YB1Fjqml7UPD5kU7ecsK1MPEVMfCrdt/GDNpDbavYXiOXOdyJ5b3OPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.131.0': + resolution: {integrity: sha512-m+jNz9EuF0NXoiptc6B9h5yompZQVW/a5MJeOu5zojfH5yWk82tvF2ccrHkfhgtrS9h9DD5l1Qv8dWlfY7Nz8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.131.0': + resolution: {integrity: sha512-o14Hk8dAyiEUMFEWEgmAwFZvBt1RzAYLM3xeQ+5315JXgVYhoemivgYcbYVRbsFkS71ShMGlAFE0kPnr460rww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + + '@oxc-project/types@0.131.0': + resolution: {integrity: sha512-PgnWDfV0h+b16XNKbXU7Daib/BFSt/J2mEzfYIBu6JB/wNdlU+kVYXCkGA1A9fWkTbOgbjh4e6NhPeQOYvFhEA==} + + '@oxc-project/types@0.137.0': + resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} + + '@oxc-resolver/binding-android-arm-eabi@11.20.0': + resolution: {integrity: sha512-IjfWOXRgJFNdORDl+Uf1aibNgZY2guOD3zmOhx1BGVb/MIiqlFTdmjpQNplSN58lhWehnX4UNqC3QwpUo8pjJg==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.20.0': + resolution: {integrity: sha512-QqslZAuFQG8Q9xm7JuIn8JUbvywhSBMVhuQHtYW+auirZJloS41oxUUaBXk7uUhZJgp44c5zQLeVvmFaDQB+2Q==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.20.0': + resolution: {integrity: sha512-MUcavykj2ewlR+kc5arpg4tC2RvzJkUxWtNv74pf7lcNk00GpIpN43vXMj+j6r4eMmfZhlb8hueKoIb8e9kAGQ==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.20.0': + resolution: {integrity: sha512-BGB16nRUK5Etiv//ihPyzj8Lj1px0mhh4YIfe0FDf045ywknfSm0GEbiRESpr6Q4K82AvnyaRIhhluHByvS4bg==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.20.0': + resolution: {integrity: sha512-JZgtePaqj3qmD5XFHJaSLWzHRxQu0LaPkdoM1KJXYADvAaa83ijXHclV3ej3CueeW0wxfIAbGCZVP45J0CA7uQ==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.20.0': + resolution: {integrity: sha512-hOQ/p3ry3v3SchUBXicrrnszaI/UmYzM4wtS4RGfwgVUX7a+HbyQSzJ5aOzu+o6XZkFkS3ZXN4PZAzhOb77OSg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.20.0': + resolution: {integrity: sha512-2ArPksaw0AqeuGBfoS715VF+JvJQAhD2niWgjE5hVO+L+nAfikVQopvngCMX9x4BD8itWoQ3dnikrQyl5Ho5Jg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.20.0': + resolution: {integrity: sha512-0bJnmYFp62JdZ4nVMDUZ/C58BCZOCcqgKtnUlp7L9Ojf/czIN+3j72YlLPeWLkzlr6SlYvIQA4SGV/HyO0d+qg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-arm64-musl@11.20.0': + resolution: {integrity: sha512-wKHHzPKZo7Ufhv/Bt6yxT7FOgnIgW4gwXcJUipkShGp68W3wGVqvr1Sr0fY65lN0Oy6y41+g2kIDvkgZaMMUkw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': + resolution: {integrity: sha512-RN8goF7Ie0B79L4i4G6OeBocTgSC56vJbQ65VJje+oXnldVpLnOU7j/AQ/dP94TcCS+Yh6WG8u3Qt4ETteXFNQ==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': + resolution: {integrity: sha512-5l1yU6/xQEqLZRzxqmMxJfWPslpwCmBsdDGaBvABPehxquCXDC7dd7oraNdKSJUMDXSM7VvVj8H2D2FTjU7oWw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': + resolution: {integrity: sha512-xHEvkbgz6UC+A3JOyDQy76LkUaxsNSfIr3/GV8slwZsnuooJiIB34gzJfsyvR4JdCYNUUPsRJc/w/oWkODu+hg==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': + resolution: {integrity: sha512-aWPDUUmSeyHvlW+SoEUd+JIJsQhVhu6a5tBpDRMu058naPAchTgAVGCFy35zjbnFlt0i8hLWziff6HX0D3LU4g==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.20.0': + resolution: {integrity: sha512-x2YeSimvhJjKLVD8KSu8f/rqU1potcdEMkApIPJqjZWN7c2Fpt4g2X32WDg1p+XDAmyT7nuQGe0vnhvXeLbH+g==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-musl@11.20.0': + resolution: {integrity: sha512-kcRLEIxpZefeYfLChjpgFf3ilBzRDZ+yobMrpRsQlSrxuFGtm3U6PMU7AaEpMqo3NfDGVyJJseAjnRLzMFHjwQ==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-openharmony-arm64@11.20.0': + resolution: {integrity: sha512-HHcfnApSZGtKhTiHqe8OZruOZe5XuFQH5/E0Yhj3u8fnFvzkM4/k6WjacUf4SvA0SPEAbfbgYmVPuo0VX/fIBQ==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.20.0': + resolution: {integrity: sha512-Tn0y1XOFYHNfK1wp1Z5QK8Rcld/bsOwRISQXfqAZ5IBpv8Gz1IvV39fUWNprqNdRizgcvFhOzWwFun2zkJsyBg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': + resolution: {integrity: sha512-qPi25YNPe4YenS8MgsQU2+bIFHxxpLx1LVna2444cEHqNPhNjvWf9zqj4aWE43H9LpAsTmkkAlA3eL5ElBU3mA==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.20.0': + resolution: {integrity: sha512-Wb14jWEW8huH6It9F6sXd9vrYmIS7pMrgkU6sxpLxkP+9z+wRgs71hUEhRpcn8FOXAFa27FVWfY2tRpbfTzfLw==} + cpu: [x64] + os: [win32] + + '@pkgr/core@0.3.6': + resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} + engines: {node: ^14.18.0 || >=16.0.0} + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + + '@quansync/fs@1.0.0': + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + + '@rolldown/binding-android-arm64@1.1.2': + resolution: {integrity: sha512-2cZ+7xRS+DBcuJBJKnfzsbleumJhBqSlJVpuzHC0nTqfd3QQ7Vx2/x5YR/D7cBamKSeWplwo82Fn9lqYUDEMfA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.1.2': + resolution: {integrity: sha512-RkPMJnygxsgOYdkfqgpwY0/Fzm8d0VQe6HGU2/B00Xa9eqdLbrII+DOKAodbJAn3ZL1AJxGHkZRPYazgGY6Ljw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.2': + resolution: {integrity: sha512-Uiczh6vFhwyfd7WNe7Q7mCA4KxAiLdz7jPE/WGizfRpIieoyFuNVMmM8HqZ9HwudTkY6/AeMQwlNJ9NJijguWw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.1.2': + resolution: {integrity: sha512-+TpdtTRgHiJFjCVFbw311SuLk3KfytPOQQn+VlAEv+gBxYPtL7E6JS9e/tk+8CwxhIZvemJKo4rTKgfWNsKkkA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.2': + resolution: {integrity: sha512-4lv1/tkmi7ueIVHnyreaOeUpiZP26BH9rRy6hoYfR9310A2B9nUEVRDvBx69vx64Nr3eTPPRkyciqJJs+j9Jmw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.1.2': + resolution: {integrity: sha512-gBSUVO0eaWgw1JMjK3gB8BMlX2Mk148s2lTiVT3e9vjVxbl7UDfMWWY8CfIaaqiXuM9fVTMxIpUz6CAo/B6Vlw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.1.2': + resolution: {integrity: sha512-LjQP/iZLBu8o8PjIfk4x3At0/mT6h282pvz8Z5LAyhGbu/kDezyO7ea62rF5uoqmgnIYqbN/MqJ3Si3Aymi7xQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.1.2': + resolution: {integrity: sha512-X/7bVLWelEsbyWDUSXt7zVsTniLLPIY2n1rH58qr78l9i7MNbbxBWD8gI2vRfBWf4NUXJCUuQnfZDsp32LqsfQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.1.2': + resolution: {integrity: sha512-gb6dYKW/1KDorGXyy48glEBJs/sxVSC5pcVrox/pFGV4mvwSFeg2sK5L2tRkVsVlh7kueqOgg4GEcuipJcGuKg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.1.2': + resolution: {integrity: sha512-JY4w85pU3iAiJVMh5nuk4/Mh9GjMsupe8MrIN53rwxAZW64GKrWeJBuN6SxQg9QTU5uB1cxyhDzW8jqRn1EABw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.1.2': + resolution: {integrity: sha512-xvpA7o5KCYLB0Rwscmuylb1/zHHSUx4g4xilm4prC5jP76pEUlzBmMbgpbh7bVDbId4NcfT96gN5i6mE6UDaiw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.1.2': + resolution: {integrity: sha512-p/ts6KBLjuk49Bp21XH77poQGt02iNz7ChgHep7tudPOaLinR/De/RHdxF8w8Yj4r/bF/bqXwH6PZrB2sA+Nvw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.1.2': + resolution: {integrity: sha512-VMu/wmrZ9hJzYlRhbw7jK5PODlugyKZ5mOdX78+lS8OvuFkWNQdz1pFLrI2p3P0pjXOmUZ7B48o5VnMH9QOGtg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.1.2': + resolution: {integrity: sha512-xtUJqs8qEkuSviS0n1tsohaPuz3a1SPhZywOji4Oo+sgrJs8daEDMZ0QtqL0OS7dx8PoVpg2J/ZZycPY5I2+Zg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.2': + resolution: {integrity: sha512-85YiLQqjUKgSO/Zjnf9e0XIn5Ymrh1fLDWBeAkZqpuBR/3R8TpfoHXuyblqyQrftSSgWO9qpcHN8mkyKsLraoA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} + + '@speed-highlight/core@1.2.17': + resolution: {integrity: sha512-Z92FwKpCtfaW1V0jTU/fh3QzYEZN8wDwrzRIBoADCJfn4mJCNcJN/XegifX7BDrQ8/h9Xh/JnbyMchL0FqXrkg==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@storybook/addon-a11y@10.4.6': + resolution: {integrity: sha512-XCJy+f0DFOiCgUU9knRDlLDxVFI+AAQ3/wE/NF85zB9iDPPS2DwkSN+mas3zDgHt66zhN8Cq3/UiyCDUweV9Zw==} + peerDependencies: + storybook: ^10.4.6 + + '@storybook/addon-docs@10.4.6': + resolution: {integrity: sha512-aWAfP5JMiT5a3zBJizwroCRzOCqZwDTJmvsYvwMD3ilIEa/kT1vhf6Xrbk4XIPhDwbh8Hpb/Gfnka1xBYEISWg==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.4.6 + peerDependenciesMeta: + '@types/react': + optional: true + + '@storybook/addon-svelte-csf@5.1.2': + resolution: {integrity: sha512-NpImknEb48J7yr/ArTYpvhDSvGUrgm5Nuybu9PCicjSKTACsXX7cln2R19572ORtns399RTE+t20BBOKxSPm2g==} + peerDependencies: + '@storybook/svelte': ^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0 + '@sveltejs/vite-plugin-svelte': ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + storybook: ^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0 + svelte: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/addon-vitest@10.4.6': + resolution: {integrity: sha512-VvskHge0GZy86LG6kcY5Ww34z8rDV8JBxqSdUpcJVsWfIvyX6MfAbqI76LlereSyBIJGZJZsqaLwRXsQoVY+0Q==} + peerDependencies: + '@vitest/browser': ^3.0.0 || ^4.0.0 + '@vitest/browser-playwright': ^4.0.0 + '@vitest/runner': ^3.0.0 || ^4.0.0 + storybook: ^10.4.6 + vitest: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/runner': + optional: true + vitest: + optional: true + + '@storybook/builder-vite@10.4.6': + resolution: {integrity: sha512-BHBtD81HiXUiDQz/CaFynLtWmm7AFUQn8VnXuHipZ8KlnUANopa4yqdVuy/Gwz8ub254uFI5NMZsW/KlgWNgNg==} + peerDependencies: + storybook: ^10.4.6 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/csf-plugin@10.4.6': + resolution: {integrity: sha512-NILLxDqpA/JR/AazGWpsz+4fadJwRU4uhHephGtYpVOWnQA/DkJfKT6zpcJVq8+QA8A2zKMLX3GVKsXIrxjuDA==} + peerDependencies: + esbuild: '*' + rollup: '*' + storybook: ^10.4.6 + vite: '*' + webpack: '*' + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + + '@storybook/csf@0.1.13': + resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/icons@2.0.2': + resolution: {integrity: sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@storybook/react-dom-shim@10.4.6': + resolution: {integrity: sha512-iGNmKzrq9vgl2PDrYAnZKI+yvac3Ym+lJXXuQaqlFRS23zA5MNm4EBX+rAG7WulqchoK6NaZ0KQOs2mAgEpTMg==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.4.6 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@storybook/svelte-vite@10.4.6': + resolution: {integrity: sha512-zyFg12tksWb0gLK29ucyZO5oNh4veu4biMeJgAEPEALjHw8HysP7mTA4547JYprk3JzORpwSqQ7Y9TPPB0ZwFA==} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + storybook: ^10.4.6 + svelte: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/svelte@10.4.6': + resolution: {integrity: sha512-U73tDy/2vgY83Zjjy7Q5Lz0ElpZZjGQHZHZd1rrD0gv1+Zas/7aTnRjRqIUrBNqHBx1S8VA5Tzp5YI0FkM1IOw==} + peerDependencies: + storybook: ^10.4.6 + svelte: ^5.0.0 + + '@storybook/sveltekit@10.4.6': + resolution: {integrity: sha512-DAbNFUr3B/XiUUUZak2TcjxCxB7eRCCgt4P0MSm9LdFTyePBdU13jybuArUfHqp6lgwqNgbFIjv1nazPjHq51g==} + peerDependencies: + storybook: ^10.4.6 + svelte: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@sveltejs/acorn-typescript@1.0.10': + resolution: {integrity: sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/adapter-cloudflare@7.2.9': + resolution: {integrity: sha512-LEfLRYKZIiNYBPYk9Cu4dFCCIX37NO96jESNRDv7yr3vvblKU4Yh05FPUMRSrOWFKtG6bJcGIvdG/M2DSf4D1w==} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + wrangler: ^4.0.0 + + '@sveltejs/enhanced-img@0.11.0': + resolution: {integrity: sha512-TN7VzGoqwFqvA4Faj1brUPHLtcEkyFa08nrn9bfm98yVrzr0g4bOZHjlBoPYHHX+sZNGE+cxznhTVgarECPQsA==} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^6.0.0 || ^7.0.0 + svelte: ^5.0.0 + vite: ^6.3.0 || >=7.0.0 + + '@sveltejs/kit@2.67.0': + resolution: {integrity: sha512-JXHbsDwRes1Wgyof3q5ApzzpbCWvinKXMQCiV67TFO6xlZPYLoK0fq3xQMqSicDMgCtFGqLkrQXkseOcASdZ8A==} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: ^5.3.3 || ^6.0.0 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + typescript: + optional: true + + '@sveltejs/load-config@0.2.0': + resolution: {integrity: sha512-1LgZ/qUqSoq+QorD83lk2hka79Px0wXNW2q5V1nZlxGhQgw1jrsIbVz5YiCeucVLo4XvFLjXukUaQjIiqowkcg==} + engines: {node: '>= 18.0.0'} + + '@sveltejs/vite-plugin-svelte@7.1.2': + resolution: {integrity: sha512-DrUBA2UXRfDmUX/ZTiEopd3X40yavsJF1FX2RygcuIScHL7o5YX1fMvoYnDhjeJQC4weCOklirpNWlcb2NiSeA==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + svelte: ^5.46.4 + vite: ^8.0.0-beta.7 || ^8.0.0 + + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/svelte-core@1.0.0': + resolution: {integrity: sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ==} + engines: {node: '>=16'} + peerDependencies: + svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + + '@types/node@24.13.2': + resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==} + + '@types/react@19.2.17': + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@typescript-eslint/eslint-plugin@8.62.0': + resolution: {integrity: sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.62.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.62.0': + resolution: {integrity: sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.62.0': + resolution: {integrity: sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.62.0': + resolution: {integrity: sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.62.0': + resolution: {integrity: sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.62.0': + resolution: {integrity: sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.62.0': + resolution: {integrity: sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.62.0': + resolution: {integrity: sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.62.0': + resolution: {integrity: sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.62.0': + resolution: {integrity: sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unocss/cli@66.7.2': + resolution: {integrity: sha512-50vBptZyiyYzm5CBNSVs1WYIFX+7IKYFwLNrm6pVCOjHfrBmmpfvyCznPMzUcGEFKvP2VsyB2hf3k57GBCSS9Q==} + hasBin: true + + '@unocss/config@66.7.2': + resolution: {integrity: sha512-m8LZUZOFHBesViFOnC1MzMMQ1ovYbZ/F2ntkKSIWzLO/VvEYo2/HK8qhBhtI/FyL27+gvePL4sZ6a5ZChyl0Ug==} + + '@unocss/core@66.7.2': + resolution: {integrity: sha512-NNnhm9IVPEZ34drwztREP+mq1rio0L4Tp0u247qBKxJJWYec1+I+FTRsw7EvtukZKvr56YAxFA1qbBV+LjyV+Q==} + + '@unocss/eslint-config@66.7.2': + resolution: {integrity: sha512-QeNPeQiNe0eE3VADM+cDXQ2CoXEyJSf3ZovbJ2x7nXAOHJ58x0BNclFI0TOorPevc1k7C/NNIb40m0akLsTYRg==} + + '@unocss/eslint-plugin@66.7.2': + resolution: {integrity: sha512-kdWkoEMkDXiuGzgjKkgmnmseJjTP9Ydj2qMcwphdaR0nAs4ZXXdkfW6ZIc0lnLMOU+7UjQ8BN7Y0ch4sGSQSpg==} + + '@unocss/extractor-arbitrary-variants@66.7.2': + resolution: {integrity: sha512-1R+ntws4zhi9gCsyovYeNCiAYGSceN6Rsy/4kyaw3npr1UBWhBJdQZtacxvqOssPfbbqq2vpatcuQ4rfZZYWFQ==} + + '@unocss/extractor-svelte@66.7.2': + resolution: {integrity: sha512-Mu2Mtd+EII2Wr1yybCuNlrq1yOx58Imy+vpF0KTab2wT5OGOjam0PraH5is/Gf5lzYVl94lv7M4i+VYAzYdaUA==} + + '@unocss/inspector@66.7.2': + resolution: {integrity: sha512-fvZ8w9dTnu61ZwbXjVMQopxxrQOnFOBN2I6KVPJtoUSMsatrpEYyJHDA9pfLes1a3C4eEJZaSADURHKkON09CA==} + + '@unocss/preset-attributify@66.7.2': + resolution: {integrity: sha512-JnnoRUgOL4O565+jNi8BfzTQDElEny1reaMhrdYQR4P4I7cfdRV89R5DsmND0H2mGtwJjP/gL4cWd1FSX9ShrA==} + + '@unocss/preset-icons@66.7.2': + resolution: {integrity: sha512-C05oM7j8jFuxjbPaRFUbcwxHPXvBtmJOhaE2M3YstVR/L9IBsQ6Ts/PT1vxVAVDmX19MudRRTnQ0x5XzUM3P7A==} + + '@unocss/preset-mini@66.7.2': + resolution: {integrity: sha512-2DLS20vj+eoZI/r7U8eTxd+HTfMYamhx03mJyeadNu+efVJZrfEEMwjILgFywVAthYINmdeB4sYpc8Qfef4Vww==} + + '@unocss/preset-tagify@66.7.2': + resolution: {integrity: sha512-46V3ibNqKEyeSNnplsOKiYiBdNZ348JgjhnGDWHigVYIfZkEqn6WJdGAX9tVZpjI/rS9px8jQA0lm6ubKoc8iQ==} + + '@unocss/preset-typography@66.7.2': + resolution: {integrity: sha512-6nTRoZiHTkDV87omRlEn8RZhakMYrIJtzazfj0rdF8msvjM1LnTT6K6qDlmxqb6NBIakljNb0bryubr6bWzK9A==} + + '@unocss/preset-uno@66.7.2': + resolution: {integrity: sha512-XiSGtnh04sGHCRUnlxhePBhRF8zfOQlCfYkKByQcp/pvhmFMIWwzVL68R5LwxBmBwBVY4hfQAIx0Sz/FbA3Ojg==} + + '@unocss/preset-web-fonts@66.7.2': + resolution: {integrity: sha512-Tx6YJWxD29NoG6t8hpbnectdL8KkBVEzEYwBcJlEa200O6/KXNpGJ8tk4l5+EK1dwTxWkUqsG+60fzXzTpe5Gg==} + + '@unocss/preset-wind3@66.7.2': + resolution: {integrity: sha512-3WUmNZ3ibNotel6PAm1AgdK8BP2RqThRvEYU+svZgxsCX8E/RtVM68BFPOwzsEtuMD/R3Up6rHXqZsJvUQsg+A==} + + '@unocss/preset-wind4@66.7.2': + resolution: {integrity: sha512-yP1Np15QKm+zh945lBmpNC2FnD4oyd0eq9qA6j8r15uvhz7AF98t9dGqqzV5WrjX+IZpwg08nP3son1IjAerLw==} + + '@unocss/preset-wind@66.7.2': + resolution: {integrity: sha512-porNxph4xfr67e0LpFis813rKk9+psUJMw0nPL4sZoHovhmR/hA5XlWb6fLCl7t4Lls20I/n8F8KKgkqkxnk8Q==} + + '@unocss/reset@66.7.2': + resolution: {integrity: sha512-dKRbpBicfchatvqK2wqfX8gtNTCf+2pFdXBNDC0Cl2PZ8QCVMtCaHTOTSyruM0Pw7aqST4SlPkF5f8x7aZZL0w==} + + '@unocss/rule-utils@66.7.2': + resolution: {integrity: sha512-EGi2m9I87hluz2zgjVpXM4PWFn996RInNcx4PGF6Qw9Z0W78ROXEto0SM1IltpJ4R7+at4EhssU0IbHiT0snEw==} + + '@unocss/svelte-scoped@66.7.2': + resolution: {integrity: sha512-J00Rg3GD6WvHKNFADR8pOmbLqNBmE4pnDhooIAq+7+0e5Yv1Mmiu5QFG4rTHPecXUkKsDyMiHJCRq1jD0ZTbOA==} + + '@unocss/transformer-attributify-jsx@66.7.2': + resolution: {integrity: sha512-lb5y4lwHCjZm+9L3k6c/fq9O75+mQcxBp2Dq+a3DS+vOQpPce+hOyLFFkiHVRNKp9chEHS9gnq58SBVxJbhR2A==} + + '@unocss/transformer-compile-class@66.7.2': + resolution: {integrity: sha512-/vdgxgUI9vp7NOGfuOCY44/Ja2YbR0m+sWCGHq8K8/53a3Dk+4AvXPePv/EI/Oo6z8bhSGZHCSes8pBEY8Mr8A==} + + '@unocss/transformer-directives@66.7.2': + resolution: {integrity: sha512-9xr5Tiy+urutRBcyKJUAOOpW3LSuSM59sKowdTStzZdBUMs/L9cmjfsjNFt8rm5tptUR25wGZ8xLR5hhVDAiBQ==} + + '@unocss/transformer-variant-group@66.7.2': + resolution: {integrity: sha512-CO0CoYRn96wLm+cIICuNrv96cfzEkBHc/OmTYcHzlheyZRfGWPWlPpazMr2rlm5bve986akAxe2HSBqdaRf04w==} + + '@unocss/vite@66.7.2': + resolution: {integrity: sha512-KZL8LFNcoOjAaF8AKSUJznxrjcmuQKPSAmwvndL5RjEWtbyunV66YvOuoBPN3F0tR7MhY5NWKJjwmaYyetcM1Q==} + peerDependencies: + vite: ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 + + '@vitest/browser-playwright@4.1.9': + resolution: {integrity: sha512-Bq1rOGf9waevzG3EOkO/dene6bvKTUsZMVg8S1i+WH3JcMjuXEjiahP9rAqZRELUqjBySOJsvvSWqK/B3wjKQw==} + peerDependencies: + playwright: '*' + vitest: 4.1.9 + + '@vitest/browser@4.1.9': + resolution: {integrity: sha512-j1BKtWmPcqpMhmx/L9EPLgAJpCb0zKfwoWLmqBbxaogCXHjOwHFSEoHCBfnGtx93xKQwilZ26m+UOsHqHMkRNg==} + peerDependencies: + vitest: 4.1.9 + + '@vitest/coverage-v8@4.1.9': + resolution: {integrity: sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==} + peerDependencies: + '@vitest/browser': 4.1.9 + vitest: 4.1.9 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/expect@4.1.9': + resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} + + '@vitest/mocker@4.1.9': + resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/pretty-format@4.1.9': + resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} + + '@vitest/runner@4.1.9': + resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} + + '@vitest/snapshot@4.1.9': + resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/spy@4.1.9': + resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + '@vitest/utils@4.1.9': + resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.1: + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} + engines: {node: '>= 0.4'} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + ast-v8-to-istanbul@1.0.4: + resolution: {integrity: sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA==} + + axe-core@4.12.1: + resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + bits-ui@2.18.1: + resolution: {integrity: sha512-KkemzKFH4T3gt3H+P86JcnAWExjByv/6vlwjm/BoCwTPHu03yiCdxbghdJLvFReQTe0acCAiRcKfmixxD6XvlA==} + engines: {node: '>=20'} + peerDependencies: + '@internationalized/date': ^3.8.1 + svelte: ^5.33.0 + + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + cac@7.0.0: + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} + engines: {node: '>=20.19.0'} + + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + chromatic@16.10.0: + resolution: {integrity: sha512-nFsztmnu7rFiGafUJgXvLUNpqmRylz92eNvzBoJNTKKQj4EQUyxznwnfpf1dTs7hXtWD8JwcH92jADydaHA1sw==} + hasBin: true + peerDependencies: + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 + '@chromatic-com/vitest': ^0.*.* || ^1.0.0 + peerDependenciesMeta: + '@chromatic-com/cypress': + optional: true + '@chromatic-com/playwright': + optional: true + '@chromatic-com/vitest': + optional: true + + chromatic@17.5.0: + resolution: {integrity: sha512-jYtXDaY1VeaNaWMom4HewLQTL574s4wTtkg5Kryov9Cj7D6i8Pe7twpLsetG7apxD0aITWUhx6KiqfN6p380rw==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 + '@chromatic-com/vitest': ^0.*.* || ^1.0.0 + peerDependenciesMeta: + '@chromatic-com/cypress': + optional: true + '@chromatic-com/playwright': + optional: true + '@chromatic-com/vitest': + optional: true + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + 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'} + + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + + es-toolkit@1.47.1: + resolution: {integrity: sha512-5RAqEwf4P4E17p+W75KLOWw/nOvKZzSQpxM32IpI2KZLaVonjTrZ0Ai5ghMaVI9eKC2p8eoQgcBdkEDgzFk6+Q==} + + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-storybook@10.4.6: + resolution: {integrity: sha512-CfGSXn6zFspeYTU8R7v797MOmJFj8xc6MWf/oGuRwbKeMoSwnliR+OlXSjMZYM1D6gfmwiuH1VX58LSHdn+ZPg==} + peerDependencies: + eslint: '>=8' + storybook: ^10.4.6 + + eslint-plugin-svelte@3.19.0: + resolution: {integrity: sha512-t3rNaZeXz4d2gG4uJyMEYfJCFKf22+SWbSizIIXIWKu4wM+XPLiMWuSSr/C5821JmFeN9ogK+eExbG+z+twyxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + 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-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.5.0: + resolution: {integrity: sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrap@1.2.2: + resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==} + + esrap@1.4.9: + resolution: {integrity: sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==} + + esrap@2.2.12: + resolution: {integrity: sha512-On0QbLyaiAkVC4eXtgnXK9Kh2opit+3rcUSOc45DqJ2s/X2eXAHsGOKRSJ6IDagQEW5vPyivANfXUiqgXC67Rw==} + peerDependencies: + '@typescript-eslint/types': ^8.2.0 + peerDependenciesMeta: + '@typescript-eslint/types': + optional: true + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + 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==} + engines: {node: '>=0.10.0'} + + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + fontaine@0.8.0: + resolution: {integrity: sha512-eek1GbzOdWIj9FyQH/emqW1aEdfC3lYRCHepzwlFCm5T77fBSRSyNRKE6/antF1/B1M+SfJXVRQTY9GAr7lnDg==} + engines: {node: '>=18.12.0'} + + fontkitten@1.0.3: + resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} + engines: {node: '>=20'} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + + globals@17.7.0: + resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} + engines: {node: '>=18'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + imagetools-core@9.1.0: + resolution: {integrity: sha512-xQjs+2vrxLnAjCq+omuNkd5UQTld9/bP8+YT0LyYTlKfuSQtgUBvqhUwGugzSAh6sCdN+LnROMuLswn5hZ9Fhg==} + engines: {node: '>=20.0.0'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + + 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.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-regexp@0.10.0: + resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + miniflare@4.20260623.0: + resolution: {integrity: sha512-p2YTeH01jMiMOjO4v9hb/+GJndja5LCxecGOWCaT9F414PRXgdddLDsK6MnqhGBB5tlU/WoBYIG1XZte5pQzOQ==} + engines: {node: '>=22.0.0'} + hasBin: true + + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node@runtime:24.18.0: + resolution: + type: variations + variants: + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-ZGOiNzn2sjAOvsXM1gJ14TjjhY/Br8bo+bxOT2pLdvo= + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-aix-ppc64.tar.gz + targets: + - cpu: ppc64 + os: aix + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-4al+FMmcgD6WxzOUAyguoFpJnDL42D3v6e9exm+XntE= + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-darwin-arm64.tar.gz + targets: + - cpu: arm64 + os: darwin + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-39Db0+chUDQ033tyBecZ9hs6OjGyvPlym4uR/qJA8IA= + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-darwin-x64.tar.gz + targets: + - cpu: x64 + os: darwin + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-a0SEwhkCdBdd+aqPKOLXWKgZyxwf5qtIHi+VtGOrhQg= + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-arm64.tar.gz + targets: + - cpu: arm64 + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-/hM4ly95KDxrwh5h2/RXa76MBa3tKZnUHIZDrTAmUUI= + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-ppc64le.tar.gz + targets: + - cpu: ppc64le + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-Nx68E5RfwWlJPnUvLdr6+rbs2My0Ubz/RuCfacXdjHo= + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-s390x.tar.gz + targets: + - cpu: s390x + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-eDEwmElj23upy9AQierywu+wVcfBaTyUMXS5Z7MFDLg= + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-x64.tar.gz + targets: + - cpu: x64 + os: linux + - resolution: + archive: zip + bin: + node: node.exe + integrity: sha256-8nRmmtuTsf0Pv48h/QeGCencyEMz1PJxjS3eP5oWGgE= + prefix: node-v24.18.0-win-arm64 + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-win-arm64.zip + targets: + - cpu: arm64 + os: win32 + - resolution: + archive: zip + bin: + node: node.exe + integrity: sha256-CuaEBrQtdyVmHal5sUA+yZJtogXGdwgn8zqsnY8m6CE= + prefix: node-v24.18.0-win-x64 + type: binary + url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-win-x64.zip + targets: + - cpu: x64 + os: win32 + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-scbC3DG0bdj7IyL0/nWwfndcUSC8NyUd7uoo9SnUVns= + type: binary + url: https://unofficial-builds.nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-arm64-musl.tar.gz + targets: + - cpu: arm64 + os: linux + libc: musl + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-6lhAmRHhQexrGdkXjvotkYWhMpUAWxy/VSGzFX7tHZU= + type: binary + url: https://unofficial-builds.nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-x64-musl.tar.gz + targets: + - cpu: x64 + os: linux + libc: musl + version: 24.18.0 + hasBin: true + + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} + + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + oxc-parser@0.127.0: + resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-parser@0.131.0: + resolution: {integrity: sha512-SJ3/7ZPbgie8dr5Z9BI/M51zZbpXba+hRSG0MDzVwMW5CRQg2fjYE0jHGlLX4eeiibGgC/mzoDFKSDHwVZEHRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + + oxc-resolver@11.20.0: + resolution: {integrity: sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==} + + oxc-walker@0.7.0: + resolution: {integrity: sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==} + peerDependencies: + oxc-parser: '>=0.98.0' + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + playwright-core@1.61.1: + resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.61.1: + resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} + engines: {node: '>=18'} + hasBin: true + + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + + 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-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@7.1.4: + resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} + engines: {node: '>=4'} + + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-svelte@4.1.1: + resolution: {integrity: sha512-wXvbXMjSvb4C9ENWTHXyd+ihakKCsJ6rJhLP6/8HFNj4GkZr48jqL9PoKsl2sk7SyCZRTnJ7O2TTowUpOxP/KA==} + engines: {node: '>=20'} + peerDependencies: + prettier: ^3.0.0 + svelte: ^5.0.0 + + prettier@3.8.4: + resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==} + 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} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + quansync@1.0.0: + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} + peerDependencies: + react: ^19.2.7 + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} + engines: {node: '>=0.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexparam@3.0.0: + resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} + engines: {node: '>=8'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rolldown@1.1.2: + resolution: {integrity: sha512-x0CrQQqCXWGeI8dTvFfN/Dnv3yMKT9hv5jFjlOreKAx9wqLq9wz7VvLLHyaAXC90/CpggTu9SisSbsJJTPSjNQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + runed@0.35.1: + resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==} + peerDependencies: + '@sveltejs/kit': ^2.21.0 + svelte: ^5.7.0 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@3.1.0: + resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + + storybook@10.4.6: + resolution: {integrity: sha512-6wkA6LxfDSSilloITsrFOJfsnw0mDUP2h8Ls+lRt8oRsudtz2RWFhLv+Toiwg6NW7hUpdTDc2hzR7DztJid6+A==} + hasBin: true + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + prettier: ^2 || ^3 + vite-plus: ^0.1.15 + peerDependenciesMeta: + '@types/react': + optional: true + prettier: + optional: true + vite-plus: + optional: true + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + svelte-ast-print@0.4.2: + resolution: {integrity: sha512-hRHHufbJoArFmDYQKCpCvc0xUuIEfwYksvyLYEQyH+1xb5LD5sM/IthfooCdXZQtOIqXz6xm7NmaqdfwG4kh6w==} + engines: {node: '>=18'} + peerDependencies: + svelte: ^5.0.0 + + svelte-check@4.7.0: + resolution: {integrity: sha512-XChCqdDg29UWOWai2I1s2Ss003piZ9mae2y2KXwoOX01W75mg7/fwLLnx9Yruk9asHkxHPDdSfEfsJh5tr9JvQ==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + + svelte-eslint-parser@1.8.0: + resolution: {integrity: sha512-mikR1qwIVy3t5WthUoAXkMwxkXvabZP9FJgdx35Ei7EbGWmctva1Pih16Koeor/bdNNq8NXHlwKGS6NkYTawLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.34.1} + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + svelte-parse-markup@0.1.5: + resolution: {integrity: sha512-T6mqZrySltPCDwfKXWQ6zehipVLk4GWfH1zCMGgRtLlOIFPuw58ZxVYxVvotMJgJaurKi1i14viB2GIRKXeJTQ==} + peerDependencies: + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.1 + + svelte-toolbelt@0.10.6: + resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.30.2 + + svelte2tsx@0.7.56: + resolution: {integrity: sha512-NTvqqL+goYlW8gWNajk81L07+uu7jw5V2m1Az5MZbYm3GEydcHXh+uTrLHM9SuGuaqCtF90vlMXkOVBotfH94g==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 + + svelte@5.56.4: + resolution: {integrity: sha512-/d0QHehmRuJW8gVz395MTkPcPozxzdjBMBE8oEYGz8O3b9KTMzzQ9ZHJQLuFKOHOPQbU6kx/X4iid/EBBzH7iw==} + engines: {node: '>=18'} + + synckit@0.11.13: + resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} + engines: {node: ^14.18.0 || >=16.0.0} + + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + engines: {node: '>=6.10'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@5.7.0: + resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} + engines: {node: '>=20'} + + type-level-regexp@0.1.17: + resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} + + typescript-eslint@8.62.0: + resolution: {integrity: sha512-8QxXi+ZACKX0kaqO4gY8kn0RSD9gFfaHDWwjqtEN48aWCBkX4MJaufWN+c3BzlrXLOxfywDL8CaoqUwcRq4j4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + unconfig-core@7.5.0: + resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} + + unconfig@7.5.0: + resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==} + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + undici@7.28.0: + resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + engines: {node: '>=20.18.1'} + + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unocss@66.7.2: + resolution: {integrity: sha512-yB0yOpJTtlyGH/HAe4QdnjgjSP6z9ItTdrObvagc8ZEwRY1D2GbfUABwDKyZzXs19gXebqThMG9f+W0hPhDIPA==} + peerDependencies: + '@unocss/astro': 66.7.2 + '@unocss/postcss': 66.7.2 + '@unocss/webpack': 66.7.2 + peerDependenciesMeta: + '@unocss/astro': + optional: true + '@unocss/postcss': + optional: true + '@unocss/webpack': + optional: true + + unplugin-fonts@2.0.0: + resolution: {integrity: sha512-MjyPgq9UVXYSQlcqG5Y/tYFCJvK0unURtT8+PdhrYV7u/8uwycqqLj5ouwpZ+oNQXRvemYqgnSLxGUv00r984g==} + peerDependencies: + '@nuxt/kit': ^3.0.0 || ^4.0.0 + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + + unplugin@3.0.0: + resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + engines: {node: ^20.19.0 || >=22.12.0} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@11.1.1: + resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} + hasBin: true + + vite-imagetools@9.0.3: + resolution: {integrity: sha512-FwjApRNZyN+RucPW9Z9kf0dyzyi3r3zlDfrTnzHXNaYpmT3pZ5w//d6QkApy1iypbDm+3fq+Gwfv+PYA4j4uYw==} + engines: {node: '>=20.0.0'} + + vite-plugin-devtools-json@1.0.0: + resolution: {integrity: sha512-MobvwqX76Vqt/O4AbnNMNWoXWGrKUqZbphCUle/J2KXH82yKQiunOeKnz/nqEPosPsoWWPP9FtNuPBSYpiiwkw==} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + + vite@8.1.0: + resolution: {integrity: sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.3.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.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 + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + vitest-browser-svelte@2.1.1: + resolution: {integrity: sha512-qbunYRSm+N92r9bfTkdDTpBZESLmp4QFz2SluV3n/x8U7ysosfeXYJZ4vXbJ0Y0LzoqqDnV5LHprmFgn4Eo+Ug==} + peerDependencies: + svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 + vitest: ^4.0.0 + + vitest@4.1.9: + resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.9 + '@vitest/browser-preview': 4.1.9 + '@vitest/browser-webdriverio': 4.1.9 + '@vitest/coverage-istanbul': 4.1.9 + '@vitest/coverage-v8': 4.1.9 + '@vitest/ui': 4.1.9 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + workerd@1.20260623.1: + resolution: {integrity: sha512-9SJsdTSsehhqc26TUJIzyi1XgyYeqFym4hinZnWoAP1BkhEoMQ5Ygz7Xw9T+2ecU+y409JBEScBgWTdZ06mBrg==} + engines: {node: '>=16'} + hasBin: true + + worktop@0.8.0-next.18: + resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} + engines: {node: '>=12'} + + wrangler@4.104.0: + resolution: {integrity: sha512-xCfbg2Oj93Bc7EMryFaSeRGDgV96dzrWoaK5q2q5XLEvumO4mysNP/1MDue0GUozEJAI6Z6vrGyYPLmfET/0sg==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20260623.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} + engines: {node: '>= 6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + +snapshots: + + '@adobe/css-tools@4.5.0': {} + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.6.0 + tinyexec: 1.2.4 + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/runtime@7.29.7': {} + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@bcoe/v8-coverage@1.0.2': {} + + '@blazediff/core@1.9.1': {} + + '@capsizecss/unpack@4.0.1': + dependencies: + fontkitten: 1.0.3 + + '@chromatic-com/storybook@5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + dependencies: + '@neoconfetti/react': 1.0.0 + chromatic: 16.10.0 + jsonfile: 6.2.1 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + strip-ansi: 7.2.0 + transitivePeerDependencies: + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + - '@chromatic-com/vitest' + + '@cloudflare/kv-asset-handler@0.5.0': {} + + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260623.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260623.1 + + '@cloudflare/workerd-darwin-64@1.20260623.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20260623.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20260623.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20260623.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20260623.1': + optional: true + + '@cloudflare/workers-types@4.20260613.1': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.28.1': + optional: true + + '@esbuild/android-arm64@0.28.1': + optional: true + + '@esbuild/android-arm@0.28.1': + optional: true + + '@esbuild/android-x64@0.28.1': + optional: true + + '@esbuild/darwin-arm64@0.28.1': + optional: true + + '@esbuild/darwin-x64@0.28.1': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': + optional: true + + '@esbuild/freebsd-x64@0.28.1': + optional: true + + '@esbuild/linux-arm64@0.28.1': + optional: true + + '@esbuild/linux-arm@0.28.1': + optional: true + + '@esbuild/linux-ia32@0.28.1': + optional: true + + '@esbuild/linux-loong64@0.28.1': + optional: true + + '@esbuild/linux-mips64el@0.28.1': + optional: true + + '@esbuild/linux-ppc64@0.28.1': + optional: true + + '@esbuild/linux-riscv64@0.28.1': + optional: true + + '@esbuild/linux-s390x@0.28.1': + optional: true + + '@esbuild/linux-x64@0.28.1': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': + optional: true + + '@esbuild/netbsd-x64@0.28.1': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': + optional: true + + '@esbuild/openbsd-x64@0.28.1': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': + optional: true + + '@esbuild/sunos-x64@0.28.1': + optional: true + + '@esbuild/win32-arm64@0.28.1': + optional: true + + '@esbuild/win32-ia32@0.28.1': + optional: true + + '@esbuild/win32-x64@0.28.1': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@10.5.0(jiti@2.7.0))': + dependencies: + eslint: 10.5.0(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.3 + minimatch: 10.2.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.6.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/js@10.0.1(eslint@10.5.0(jiti@2.7.0))': + optionalDependencies: + eslint: 10.5.0(jiti@2.7.0) + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.2': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/utils@0.2.11': {} + + '@fontsource-variable/work-sans@5.2.8': {} + + '@fontsource/syncopate@5.2.8': {} + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.3': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.11.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@internationalized/date@3.12.2': + dependencies: + '@swc/helpers': 0.5.23 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@mdx-js/react@3.1.1(@types/react@19.2.17)(react@19.2.7)': + dependencies: + '@types/mdx': 2.0.14 + '@types/react': 19.2.17 + react: 19.2.7 + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@neoconfetti/react@1.0.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@oxc-parser/binding-android-arm-eabi@0.127.0': + optional: true + + '@oxc-parser/binding-android-arm-eabi@0.131.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.131.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.131.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.127.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.131.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.127.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.131.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.131.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.131.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.127.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.131.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.127.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.131.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.127.0': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.131.0': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.131.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.131.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.131.0': + optional: true + + '@oxc-project/types@0.127.0': {} + + '@oxc-project/types@0.131.0': {} + + '@oxc-project/types@0.137.0': {} + + '@oxc-resolver/binding-android-arm-eabi@11.20.0': + optional: true + + '@oxc-resolver/binding-android-arm64@11.20.0': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.20.0': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.20.0': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.20.0': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.20.0': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.20.0': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.20.0': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.20.0': + optional: true + + '@pkgr/core@0.3.6': {} + + '@polka/url@1.0.0-next.29': {} + + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + + '@poppinss/exception@1.2.3': {} + + '@quansync/fs@1.0.0': + dependencies: + quansync: 1.0.0 + + '@rolldown/binding-android-arm64@1.1.2': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.2': + optional: true + + '@rolldown/binding-darwin-x64@1.1.2': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.2': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.2': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.2': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.2': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.2': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.2': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.2': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.2': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.2': + optional: true + + '@rolldown/binding-wasm32-wasi@1.1.2': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.2': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.2': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@rollup/pluginutils@5.4.0': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.4 + + '@sindresorhus/is@7.2.0': {} + + '@speed-highlight/core@1.2.17': {} + + '@standard-schema/spec@1.1.0': {} + + '@storybook/addon-a11y@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + dependencies: + '@storybook/global': 5.0.0 + axe-core: 4.12.1 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + + '@storybook/addon-docs@10.4.6(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) + '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@storybook/react-dom-shim': 10.4.6(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + ts-dedent: 2.3.0 + optionalDependencies: + '@types/react': 19.2.17 + transitivePeerDependencies: + - '@types/react-dom' + - esbuild + - rollup + - vite + - webpack + + '@storybook/addon-svelte-csf@5.1.2(@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)))(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@storybook/csf': 0.1.13 + '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + dedent: 1.7.2 + es-toolkit: 1.47.1 + esrap: 1.4.9 + magic-string: 0.30.21 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte-ast-print: 0.4.2(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + zimmerframe: 1.1.4 + transitivePeerDependencies: + - babel-plugin-macros + + '@storybook/addon-vitest@10.4.6(@vitest/browser-playwright@4.1.9)(@vitest/browser@4.1.9)(@vitest/runner@4.1.9)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.9)': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + optionalDependencies: + '@vitest/browser': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) + '@vitest/browser-playwright': 4.1.9(playwright@1.61.1)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) + '@vitest/runner': 4.1.9 + vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + transitivePeerDependencies: + - react + - react-dom + + '@storybook/builder-vite@10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + ts-dedent: 2.3.0 + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + '@storybook/csf-plugin@10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.28.1 + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + + '@storybook/csf@0.1.13': + dependencies: + type-fest: 2.19.0 + + '@storybook/global@5.0.0': {} + + '@storybook/icons@2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + '@storybook/react-dom-shim@10.4.6(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + optionalDependencies: + '@types/react': 19.2.17 + + '@storybook/svelte-vite@10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + magic-string: 0.30.21 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte2tsx: 0.7.56(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@5.9.3) + typescript: 5.9.3 + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + '@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))': + dependencies: + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + ts-dedent: 2.3.0 + type-fest: 5.7.0 + + '@storybook/sveltekit@10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + '@storybook/svelte-vite': 10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + transitivePeerDependencies: + - '@sveltejs/vite-plugin-svelte' + - esbuild + - rollup + - webpack + + '@sveltejs/acorn-typescript@1.0.10(acorn@8.17.0)': + dependencies: + acorn: 8.17.0 + + '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0)': + dependencies: + '@cloudflare/workers-types': 4.20260613.1 + '@sveltejs/kit': 2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + worktop: 0.8.0-next.18 + wrangler: 4.104.0 + + '@sveltejs/enhanced-img@0.11.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + magic-string: 0.30.21 + sharp: 0.34.5 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte-parse-markup: 0.1.5(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite-imagetools: 9.0.3 + zimmerframe: 1.1.4 + transitivePeerDependencies: + - rollup + + '@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@standard-schema/spec': 1.1.0 + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@types/cookie': 0.6.0 + acorn: 8.17.0 + cookie: 0.6.0 + devalue: 5.8.1 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + set-cookie-parser: 3.1.0 + sirv: 3.0.2 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + optionalDependencies: + typescript: 6.0.3 + + '@sveltejs/load-config@0.2.0': {} + + '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + deepmerge: 4.3.1 + magic-string: 0.30.21 + obug: 2.1.3 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vitefu: 1.1.3(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + + '@swc/helpers@0.5.23': + dependencies: + tslib: 2.8.1 + + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/runtime': 7.29.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.5.0 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/svelte-core@1.0.0(svelte@5.56.4(@typescript-eslint/types@8.62.0))': + dependencies: + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/aria-query@5.0.4': {} + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/cookie@0.6.0': {} + + '@types/deep-eql@4.0.2': {} + + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@types/mdx@2.0.14': {} + + '@types/node@24.13.2': + dependencies: + undici-types: 7.18.2 + + '@types/react@19.2.17': + dependencies: + csstype: 3.2.3 + + '@types/trusted-types@2.0.7': {} + + '@typescript-eslint/eslint-plugin@8.62.0(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.62.0 + '@typescript-eslint/type-utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.62.0 + eslint: 10.5.0(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.62.0 + '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.62.0 + debug: 4.4.3 + eslint: 10.5.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.62.0(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@6.0.3) + '@typescript-eslint/types': 8.62.0 + debug: 4.4.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.62.0': + dependencies: + '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/visitor-keys': 8.62.0 + + '@typescript-eslint/tsconfig-utils@8.62.0(typescript@6.0.3)': + dependencies: + typescript: 6.0.3 + + '@typescript-eslint/type-utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + debug: 4.4.3 + eslint: 10.5.0(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.62.0': {} + + '@typescript-eslint/typescript-estree@8.62.0(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.62.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@6.0.3) + '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/visitor-keys': 8.62.0 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.62.0 + '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) + eslint: 10.5.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.62.0': + dependencies: + '@typescript-eslint/types': 8.62.0 + eslint-visitor-keys: 5.0.1 + + '@unocss/cli@66.7.2': + dependencies: + '@jridgewell/remapping': 2.3.5 + '@unocss/config': 66.7.2 + '@unocss/core': 66.7.2 + '@unocss/preset-wind3': 66.7.2 + '@unocss/preset-wind4': 66.7.2 + '@unocss/transformer-directives': 66.7.2 + cac: 7.0.0 + chokidar: 5.0.0 + colorette: 2.0.20 + consola: 3.4.2 + magic-string: 0.30.21 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + tinyglobby: 0.2.17 + unplugin-utils: 0.3.1 + + '@unocss/config@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + colorette: 2.0.20 + consola: 3.4.2 + unconfig: 7.5.0 + + '@unocss/core@66.7.2': {} + + '@unocss/eslint-config@66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@unocss/eslint-plugin': 66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@unocss/eslint-plugin@66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@unocss/config': 66.7.2 + '@unocss/core': 66.7.2 + '@unocss/rule-utils': 66.7.2 + magic-string: 0.30.21 + synckit: 0.11.13 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@unocss/extractor-arbitrary-variants@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + + '@unocss/extractor-svelte@66.7.2': {} + + '@unocss/inspector@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + '@unocss/rule-utils': 66.7.2 + colorette: 2.0.20 + gzip-size: 6.0.0 + sirv: 3.0.2 + + '@unocss/preset-attributify@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + + '@unocss/preset-icons@66.7.2': + dependencies: + '@iconify/utils': 3.1.3 + '@unocss/core': 66.7.2 + ofetch: 1.5.1 + + '@unocss/preset-mini@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + '@unocss/extractor-arbitrary-variants': 66.7.2 + '@unocss/rule-utils': 66.7.2 + + '@unocss/preset-tagify@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + + '@unocss/preset-typography@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + '@unocss/rule-utils': 66.7.2 + + '@unocss/preset-uno@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + '@unocss/preset-wind3': 66.7.2 + + '@unocss/preset-web-fonts@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + ofetch: 1.5.1 + + '@unocss/preset-wind3@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + '@unocss/preset-mini': 66.7.2 + '@unocss/rule-utils': 66.7.2 + + '@unocss/preset-wind4@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + '@unocss/extractor-arbitrary-variants': 66.7.2 + '@unocss/rule-utils': 66.7.2 + + '@unocss/preset-wind@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + '@unocss/preset-wind3': 66.7.2 + + '@unocss/reset@66.7.2': {} + + '@unocss/rule-utils@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + magic-string: 0.30.21 + + '@unocss/svelte-scoped@66.7.2': + dependencies: + '@unocss/config': 66.7.2 + '@unocss/core': 66.7.2 + '@unocss/preset-uno': 66.7.2 + '@unocss/preset-wind3': 66.7.2 + '@unocss/reset': 66.7.2 + acorn: 8.17.0 + css-tree: 3.2.1 + magic-string: 0.30.21 + pathe: 2.0.3 + zimmerframe: 1.1.4 + + '@unocss/transformer-attributify-jsx@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + oxc-parser: 0.131.0 + oxc-walker: 0.7.0(oxc-parser@0.131.0) + + '@unocss/transformer-compile-class@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + + '@unocss/transformer-directives@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + '@unocss/rule-utils': 66.7.2 + css-tree: 3.2.1 + + '@unocss/transformer-variant-group@66.7.2': + dependencies: + '@unocss/core': 66.7.2 + + '@unocss/vite@66.7.2(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@jridgewell/remapping': 2.3.5 + '@unocss/config': 66.7.2 + '@unocss/core': 66.7.2 + '@unocss/inspector': 66.7.2 + chokidar: 5.0.0 + magic-string: 0.30.21 + pathe: 2.0.3 + tinyglobby: 0.2.17 + unplugin-utils: 0.3.1 + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + + '@vitest/browser-playwright@4.1.9(playwright@1.61.1)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9)': + dependencies: + '@vitest/browser': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) + '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + playwright: 1.61.1 + tinyrainbow: 3.1.0 + vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9)': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@vitest/utils': 4.1.9 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.0 + vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/coverage-v8@4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.1.9 + ast-v8-to-istanbul: 1.0.4 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.3 + obug: 2.1.3 + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + optionalDependencies: + '@vitest/browser': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) + + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/expect@4.1.9': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + dependencies: + '@vitest/spy': 4.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@4.1.9': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.9': + dependencies: + '@vitest/utils': 4.1.9 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.9': + dependencies: + '@vitest/pretty-format': 4.1.9 + '@vitest/utils': 4.1.9 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + + '@vitest/spy@4.1.9': {} + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + '@vitest/utils@4.1.9': + dependencies: + '@vitest/pretty-format': 4.1.9 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + '@webcontainer/env@1.1.1': {} + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn@8.17.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@5.2.0: {} + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.1: {} + + aria-query@5.3.2: {} + + assertion-error@2.0.1: {} + + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + + ast-v8-to-istanbul@1.0.4: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + + axe-core@4.12.1: {} + + axobject-query@4.1.0: {} + + balanced-match@4.0.4: {} + + bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/dom': 1.7.6 + '@internationalized/date': 3.12.2 + esm-env: 1.2.2 + runed: 0.35.1(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + tabbable: 6.4.0 + transitivePeerDependencies: + - '@sveltejs/kit' + + blake3-wasm@2.1.5: {} + + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + cac@7.0.0: {} + + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + + chai@6.2.2: {} + + check-error@2.1.3: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + chromatic@16.10.0: + dependencies: + semver: 7.8.5 + + chromatic@17.5.0: + dependencies: + semver: 7.8.5 + + clsx@2.1.1: {} + + colorette@2.0.20: {} + + confbox@0.1.8: {} + + consola@3.4.2: {} + + convert-source-map@2.0.0: {} + + cookie@0.6.0: {} + + cookie@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + + css.escape@1.5.1: {} + + cssesc@3.0.0: {} + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + dedent-js@1.0.1: {} + + dedent@1.7.2: {} + + deep-eql@5.0.2: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + + defu@6.1.7: {} + + dequal@2.0.3: {} + + destr@2.0.5: {} + + detect-libc@2.1.2: {} + + devalue@5.8.1: {} + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + + duplexer@0.1.2: {} + + error-stack-parser-es@1.0.5: {} + + es-module-lexer@2.1.0: {} + + es-toolkit@1.47.1: {} + + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)): + dependencies: + eslint: 10.5.0(jiti@2.7.0) + + eslint-plugin-storybook@10.4.6(eslint@10.5.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3): + dependencies: + '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.5.0(jiti@2.7.0) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-svelte@3.19.0(eslint@10.5.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@jridgewell/sourcemap-codec': 1.5.5 + eslint: 10.5.0(jiti@2.7.0) + esutils: 2.0.3 + globals: 16.5.0 + known-css-properties: 0.37.0 + postcss: 8.5.15 + postcss-load-config: 3.1.4(postcss@8.5.15) + postcss-safe-parser: 7.0.1(postcss@8.5.15) + semver: 7.8.5 + svelte-eslint-parser: 1.8.0(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + optionalDependencies: + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + transitivePeerDependencies: + - ts-node + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.5.0(jiti@2.7.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + esm-env@1.2.2: {} + + espree@10.4.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 4.2.1 + + espree@11.2.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 5.0.1 + + esprima@4.0.1: {} + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrap@1.2.2: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@types/estree': 1.0.9 + + esrap@1.4.9: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + esrap@2.2.12(@typescript-eslint/types@8.62.0): + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + optionalDependencies: + '@typescript-eslint/types': 8.62.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + esutils@2.0.3: {} + + expect-type@1.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + + fontaine@0.8.0: + dependencies: + '@capsizecss/unpack': 4.0.1 + css-tree: 3.2.1 + magic-regexp: 0.10.0 + magic-string: 0.30.21 + pathe: 2.0.3 + ufo: 1.6.4 + unplugin: 2.3.11 + + fontkitten@1.0.3: + dependencies: + tiny-inflate: 1.0.3 + + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@16.5.0: {} + + globals@17.7.0: {} + + graceful-fs@4.2.11: + optional: true + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + has-flag@4.0.0: {} + + html-escaper@2.0.2: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + imagetools-core@9.1.0: {} + + import-meta-resolve@4.2.0: {} + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + inline-style-parser@0.2.7: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-number@7.0.0: {} + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jiti@2.7.0: {} + + js-tokens@10.0.0: {} + + js-tokens@4.0.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@4.1.5: {} + + known-css-properties@0.37.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lilconfig@2.1.0: {} + + locate-character@3.0.0: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + loupe@3.2.1: {} + + lz-string@1.5.0: {} + + magic-regexp@0.10.0: + dependencies: + estree-walker: 3.0.3 + magic-string: 0.30.21 + mlly: 1.8.2 + regexp-tree: 0.1.27 + type-level-regexp: 0.1.17 + ufo: 1.6.4 + unplugin: 2.3.11 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magicast@0.5.3: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.8.5 + + mdn-data@2.27.1: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + min-indent@1.0.1: {} + + miniflare@4.20260623.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.34.5 + undici: 7.28.0 + workerd: 1.20260623.1 + ws: 8.21.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.6 + + mlly@1.8.2: + dependencies: + acorn: 8.17.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + + mri@1.2.0: {} + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.12: {} + + natural-compare@1.4.0: {} + + node-fetch-native@1.6.7: {} + + node@runtime:24.18.0: {} + + obug@2.1.3: {} + + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.4 + + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + oxc-parser@0.127.0: + dependencies: + '@oxc-project/types': 0.127.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.127.0 + '@oxc-parser/binding-android-arm64': 0.127.0 + '@oxc-parser/binding-darwin-arm64': 0.127.0 + '@oxc-parser/binding-darwin-x64': 0.127.0 + '@oxc-parser/binding-freebsd-x64': 0.127.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.127.0 + '@oxc-parser/binding-linux-arm64-musl': 0.127.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.127.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-musl': 0.127.0 + '@oxc-parser/binding-openharmony-arm64': 0.127.0 + '@oxc-parser/binding-wasm32-wasi': 0.127.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.127.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 + '@oxc-parser/binding-win32-x64-msvc': 0.127.0 + + oxc-parser@0.131.0: + dependencies: + '@oxc-project/types': 0.131.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.131.0 + '@oxc-parser/binding-android-arm64': 0.131.0 + '@oxc-parser/binding-darwin-arm64': 0.131.0 + '@oxc-parser/binding-darwin-x64': 0.131.0 + '@oxc-parser/binding-freebsd-x64': 0.131.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.131.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.131.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.131.0 + '@oxc-parser/binding-linux-arm64-musl': 0.131.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.131.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.131.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.131.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.131.0 + '@oxc-parser/binding-linux-x64-gnu': 0.131.0 + '@oxc-parser/binding-linux-x64-musl': 0.131.0 + '@oxc-parser/binding-openharmony-arm64': 0.131.0 + '@oxc-parser/binding-wasm32-wasi': 0.131.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.131.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.131.0 + '@oxc-parser/binding-win32-x64-msvc': 0.131.0 + + oxc-resolver@11.20.0: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.20.0 + '@oxc-resolver/binding-android-arm64': 11.20.0 + '@oxc-resolver/binding-darwin-arm64': 11.20.0 + '@oxc-resolver/binding-darwin-x64': 11.20.0 + '@oxc-resolver/binding-freebsd-x64': 11.20.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.20.0 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.20.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.20.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.20.0 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.20.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.20.0 + '@oxc-resolver/binding-linux-riscv64-musl': 11.20.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.20.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.20.0 + '@oxc-resolver/binding-linux-x64-musl': 11.20.0 + '@oxc-resolver/binding-openharmony-arm64': 11.20.0 + '@oxc-resolver/binding-wasm32-wasi': 11.20.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.20.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.20.0 + + oxc-walker@0.7.0(oxc-parser@0.131.0): + dependencies: + magic-regexp: 0.10.0 + oxc-parser: 0.131.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-manager-detector@1.6.0: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-to-regexp@6.3.0: {} + + pathe@2.0.3: {} + + pathval@2.0.1: {} + + perfect-debounce@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.4: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + playwright-core@1.61.1: {} + + playwright@1.61.1: + dependencies: + playwright-core: 1.61.1 + optionalDependencies: + fsevents: 2.3.2 + + pngjs@7.0.0: {} + + postcss-load-config@3.1.4(postcss@8.5.15): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.3 + optionalDependencies: + postcss: 8.5.15 + + postcss-safe-parser@7.0.1(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + + postcss-scss@4.0.9(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + + postcss-selector-parser@7.1.4: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-plugin-svelte@4.1.1(prettier@3.8.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + dependencies: + prettier: 3.8.4 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + + prettier@3.8.4: {} + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + punycode@2.3.1: {} + + quansync@1.0.0: {} + + queue-microtask@1.2.3: {} + + react-dom@19.2.7(react@19.2.7): + dependencies: + react: 19.2.7 + scheduler: 0.27.0 + + react-is@17.0.2: {} + + react@19.2.7: {} + + readdirp@4.1.2: {} + + readdirp@5.0.0: {} + + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + regexp-tree@0.1.27: {} + + regexparam@3.0.0: {} + + reusify@1.1.0: {} + + rolldown@1.1.2: + dependencies: + '@oxc-project/types': 0.137.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.2 + '@rolldown/binding-darwin-arm64': 1.1.2 + '@rolldown/binding-darwin-x64': 1.1.2 + '@rolldown/binding-freebsd-x64': 1.1.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.2 + '@rolldown/binding-linux-arm64-gnu': 1.1.2 + '@rolldown/binding-linux-arm64-musl': 1.1.2 + '@rolldown/binding-linux-ppc64-gnu': 1.1.2 + '@rolldown/binding-linux-s390x-gnu': 1.1.2 + '@rolldown/binding-linux-x64-gnu': 1.1.2 + '@rolldown/binding-linux-x64-musl': 1.1.2 + '@rolldown/binding-openharmony-arm64': 1.1.2 + '@rolldown/binding-wasm32-wasi': 1.1.2 + '@rolldown/binding-win32-arm64-msvc': 1.1.2 + '@rolldown/binding-win32-x64-msvc': 1.1.2 + + run-applescript@7.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + runed@0.35.1(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + dependencies: + dequal: 2.0.3 + esm-env: 1.2.2 + lz-string: 1.5.0 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + optionalDependencies: + '@sveltejs/kit': 2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + scheduler@0.27.0: {} + + scule@1.3.0: {} + + semver@7.8.5: {} + + set-cookie-parser@3.1.0: {} + + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + source-map@0.6.1: {} + + stackback@0.0.2: {} + + std-env@4.1.0: {} + + storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + '@webcontainer/env': 1.1.1 + esbuild: 0.28.1 + open: 10.2.0 + oxc-parser: 0.127.0 + oxc-resolver: 11.20.0 + recast: 0.23.11 + semver: 7.8.5 + use-sync-external-store: 1.6.0(react@19.2.7) + ws: 8.21.0 + optionalDependencies: + '@types/react': 19.2.17 + prettier: 3.8.4 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - react + - react-dom + - utf-8-validate + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + supports-color@10.2.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + svelte-ast-print@0.4.2(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + dependencies: + esrap: 1.2.2 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + zimmerframe: 1.1.2 + + svelte-check@4.7.0(picomatch@4.0.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@sveltejs/load-config': 0.2.0 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + typescript: 6.0.3 + transitivePeerDependencies: + - picomatch + + svelte-eslint-parser@1.8.0(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + dependencies: + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + postcss: 8.5.15 + postcss-scss: 4.0.9(postcss@8.5.15) + postcss-selector-parser: 7.1.4 + semver: 7.8.5 + optionalDependencies: + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + + svelte-parse-markup@0.1.5(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + dependencies: + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + + svelte-toolbelt@0.10.6(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + dependencies: + clsx: 2.1.1 + runed: 0.35.1(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + style-to-object: 1.0.14 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + transitivePeerDependencies: + - '@sveltejs/kit' + + svelte2tsx@0.7.56(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@5.9.3): + dependencies: + dedent-js: 1.0.1 + scule: 1.3.0 + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + typescript: 5.9.3 + + svelte@5.56.4(@typescript-eslint/types@8.62.0): + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) + '@types/estree': 1.0.9 + '@types/trusted-types': 2.0.7 + acorn: 8.17.0 + aria-query: 5.3.1 + axobject-query: 4.1.0 + clsx: 2.1.1 + devalue: 5.8.1 + esm-env: 1.2.2 + esrap: 2.2.12(@typescript-eslint/types@8.62.0) + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' + + synckit@0.11.13: + dependencies: + '@pkgr/core': 0.3.6 + + tabbable@6.4.0: {} + + tagged-tag@1.0.0: {} + + tiny-inflate@1.0.3: {} + + tiny-invariant@1.3.3: {} + + tinybench@2.9.0: {} + + tinyexec@1.2.4: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinyrainbow@2.0.0: {} + + tinyrainbow@3.1.0: {} + + tinyspy@4.0.4: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + totalist@3.0.1: {} + + ts-api-utils@2.5.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + + ts-dedent@2.3.0: {} + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@2.19.0: {} + + type-fest@5.7.0: + dependencies: + tagged-tag: 1.0.0 + + type-level-regexp@0.1.17: {} + + typescript-eslint@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.62.0(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.5.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + typescript@6.0.3: {} + + ufo@1.6.4: {} + + unconfig-core@7.5.0: + dependencies: + '@quansync/fs': 1.0.0 + quansync: 1.0.0 + + unconfig@7.5.0: + dependencies: + '@quansync/fs': 1.0.0 + defu: 6.1.7 + jiti: 2.7.0 + quansync: 1.0.0 + unconfig-core: 7.5.0 + + undici-types@7.18.2: {} + + undici@7.28.0: {} + + unenv@2.0.0-rc.24: + dependencies: + pathe: 2.0.3 + + universalify@2.0.1: {} + + unocss@66.7.2(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + dependencies: + '@unocss/cli': 66.7.2 + '@unocss/core': 66.7.2 + '@unocss/preset-attributify': 66.7.2 + '@unocss/preset-icons': 66.7.2 + '@unocss/preset-mini': 66.7.2 + '@unocss/preset-tagify': 66.7.2 + '@unocss/preset-typography': 66.7.2 + '@unocss/preset-uno': 66.7.2 + '@unocss/preset-web-fonts': 66.7.2 + '@unocss/preset-wind': 66.7.2 + '@unocss/preset-wind3': 66.7.2 + '@unocss/preset-wind4': 66.7.2 + '@unocss/transformer-attributify-jsx': 66.7.2 + '@unocss/transformer-compile-class': 66.7.2 + '@unocss/transformer-directives': 66.7.2 + '@unocss/transformer-variant-group': 66.7.2 + '@unocss/vite': 66.7.2(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + transitivePeerDependencies: + - vite + + unplugin-fonts@2.0.0(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + dependencies: + css-tree: 3.2.1 + fast-glob: 3.3.3 + fontaine: 0.8.0 + magic-string: 0.30.21 + pathe: 2.0.3 + unplugin: 3.0.0 + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.4 + + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.17.0 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + + unplugin@3.0.0: + dependencies: + '@jridgewell/remapping': 2.3.5 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-sync-external-store@1.6.0(react@19.2.7): + dependencies: + react: 19.2.7 + + util-deprecate@1.0.2: {} + + uuid@11.1.1: {} + + vite-imagetools@9.0.3: + dependencies: + '@rollup/pluginutils': 5.4.0 + imagetools-core: 9.1.0 + sharp: 0.34.5 + transitivePeerDependencies: + - rollup + + vite-plugin-devtools-json@1.0.0(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + dependencies: + uuid: 11.1.1 + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + + vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.1.2 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.13.2 + esbuild: 0.28.1 + fsevents: 2.3.3 + jiti: 2.7.0 + + vitefu@1.1.3(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + optionalDependencies: + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + + vitest-browser-svelte@2.1.1(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vitest@4.1.9): + dependencies: + '@testing-library/svelte-core': 1.0.0(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + svelte: 5.56.4(@typescript-eslint/types@8.62.0) + vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + + vitest@4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + dependencies: + '@vitest/expect': 4.1.9 + '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@vitest/pretty-format': 4.1.9 + '@vitest/runner': 4.1.9 + '@vitest/snapshot': 4.1.9 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.3 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.13.2 + '@vitest/browser-playwright': 4.1.9(playwright@1.61.1)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) + '@vitest/coverage-v8': 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + transitivePeerDependencies: + - msw + + webpack-virtual-modules@0.6.2: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + workerd@1.20260623.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260623.1 + '@cloudflare/workerd-darwin-arm64': 1.20260623.1 + '@cloudflare/workerd-linux-64': 1.20260623.1 + '@cloudflare/workerd-linux-arm64': 1.20260623.1 + '@cloudflare/workerd-windows-64': 1.20260623.1 + + worktop@0.8.0-next.18: + dependencies: + mrmime: 2.0.1 + regexparam: 3.0.0 + + wrangler@4.104.0: + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260623.1) + blake3-wasm: 2.1.5 + esbuild: 0.28.1 + miniflare: 4.20260623.0 + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.24 + workerd: 1.20260623.1 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ws@8.21.0: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + + yaml@1.10.3: {} + + yocto-queue@0.1.0: {} + + youch-core@0.3.3: + dependencies: + '@poppinss/exception': 1.2.3 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.10: + dependencies: + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.17 + cookie: 1.1.1 + youch-core: 0.3.3 + + zimmerframe@1.1.2: {} + + zimmerframe@1.1.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..e0e50c7 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,19 @@ +minimumReleaseAge: 1440 +trustPolicy: no-downgrade +trustPolicyExclude: + - 'chokidar@4.0.3' +onlyBuiltDependencies: + - workerd + - sharp + - esbuild +allowBuilds: + esbuild: true + sharp: true + workerd: true +overrides: + undici@>=7.0.0 <7.28.0: ^7.28.0 + undici@>=7.23.0 <7.28.0: ^7.28.0 + ws@>=8.0.0 <8.21.0: ^8.21.0 +minimumReleaseAgeExclude: + - ws@8.21.0 + - undici@7.28.0 diff --git a/src/app.d.ts b/src/app.d.ts new file mode 100644 index 0000000..b8283d8 --- /dev/null +++ b/src/app.d.ts @@ -0,0 +1,19 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + interface Platform { + env: Env; + ctx: ExecutionContext; + caches: CacheStorage; + cf?: IncomingRequestCfProperties; + } + + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + } +} + +export {}; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..6a2bb58 --- /dev/null +++ b/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/src/hooks.server.ts b/src/hooks.server.ts new file mode 100644 index 0000000..460b054 --- /dev/null +++ b/src/hooks.server.ts @@ -0,0 +1,7 @@ +import type { Handle } from '@sveltejs/kit'; + +export const handle: Handle = ({ event, resolve }) => + resolve(event, { + preload: ({ type, path }) => + type === 'css' || type === 'js' || (type === 'font' && /-latin-(?!ext-)/.test(path)), + }); diff --git a/src/lib/assets/favicon.svg b/src/lib/assets/favicon.svg new file mode 100644 index 0000000..cc5dc66 --- /dev/null +++ b/src/lib/assets/favicon.svg @@ -0,0 +1 @@ +svelte-logo \ No newline at end of file diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..b7b89e4 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,18 @@ + + + + {#each links as link (link.attrs?.['href'])} + + {/each} + + + +{@render children()} diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts new file mode 100644 index 0000000..6492aab --- /dev/null +++ b/src/routes/+layout.ts @@ -0,0 +1 @@ +export const prerender = 'auto'; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..cc88df0 --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,2 @@ +

Welcome to SvelteKit

+

Visit svelte.dev/docs/kit to read the documentation

diff --git a/static/robots.txt b/static/robots.txt new file mode 100644 index 0000000..b6dd667 --- /dev/null +++ b/static/robots.txt @@ -0,0 +1,3 @@ +# allow crawling everything by default +User-agent: * +Disallow: diff --git a/svelte.config.ts b/svelte.config.ts new file mode 100644 index 0000000..5d622c8 --- /dev/null +++ b/svelte.config.ts @@ -0,0 +1,59 @@ +import type { ConfigEnv } from 'vite'; + +import type { Config, KitConfig } from '@sveltejs/kit'; +import adapter from '@sveltejs/adapter-cloudflare'; + +import type { TsConfigJson, OmitIndexSignature } from 'type-fest'; + +export type ConfigFn = (env: ConfigEnv) => OmitIndexSignature; + +const config: ConfigFn = ({ mode }) => { + const isDev = mode == 'development'; + + const cspDirectives = { + 'default-src': ['self'], + 'connect-src': ['self'], + 'font-src': ['self', 'data:'], + 'img-src': ['self', 'data:'], + 'object-src': ['none'], + 'base-uri': ['none'], + 'frame-ancestors': ['none'], + 'form-action': ['self'], + 'script-src': ['self', 'strict-dynamic'], + 'style-src': ['self', 'unsafe-inline'], + 'worker-src': isDev ? ['self', 'blob:'] : ['self'], + 'upgrade-insecure-requests': true, + } satisfies NonNullable['directives']; + + return { + compilerOptions: { + // Force runes mode for the project, except for libraries. Can be removed in svelte 6. + runes: ({ filename }) => + filename.split(/[/\\]/).includes('node_modules') ? undefined : true, + experimental: { + async: true, + }, + }, + kit: { + adapter: adapter(), + typescript: { + config(tsconfig: TsConfigJson) { + // exclude tooling from app `tsconfig.json` + const dropFromApp = [/vite\.config\.(c|m)?[jt]s$/]; + tsconfig.include = (tsconfig.include ?? []).filter( + (p) => !dropFromApp.some((re) => re.test(p)), + ); + + tsconfig.include.push('../.storybook/preview.ts'); + + return tsconfig; + }, + }, + csp: { + directives: cspDirectives, + }, + }, + }; +}; + +export default config; diff --git a/tools/clean-build.ts b/tools/clean-build.ts new file mode 100644 index 0000000..6212264 --- /dev/null +++ b/tools/clean-build.ts @@ -0,0 +1,6 @@ +// Used to workaround bug where Cloudflare's workerd holds a lock on the .svelte-kit/cloudflare directory, preventing `vite build` from replacing it. + +import { rm } from 'node:fs/promises'; +import { normalize } from 'node:path'; + +await rm(normalize('./.svelte-kit/cloudflare'), { recursive: true, force: true }); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..0f9200b --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,10 @@ +{ + "extends": ["./tsconfig.base.json", "./.svelte-kit/tsconfig.json"], + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "sourceMap": true, + "noEmit": false, + "typeRoots": ["./@types", "./node_modules/@types", "./node_modules"], + "types": ["node", "unplugin-fonts/client"] + } +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..b3c30ef --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,38 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "lib": ["ESNext"], + "moduleResolution": "Bundler", + "verbatimModuleSyntax": true, + "isolatedModules": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "moduleDetection": "force", + "erasableSyntaxOnly": true, + + "skipLibCheck": true, + "noErrorTruncation": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitOverride": true, + "noFallthroughCasesInSwitch": true, + "allowUnusedLabels": false, + "allowUnreachableCode": false, + "noUncheckedSideEffectImports": true, + + // Handled by @typescript-eslint + "noUnusedLocals": false, + "noUnusedParameters": false, + + "rewriteRelativeImportExtensions": true, + "sourceMap": true, + "noEmit": true, + "composite": true, + + "outDir": "./node_modules/.cache/tsc/", + + "types": [] + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7248b42 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +// Tools +{ + "extends": ["./.svelte-kit/tsconfig.json", "./tsconfig.base.json"], + "compilerOptions": { + "checkJs": true, + "types": ["node"] + }, + + "include": ["./*", "./.storybook/**/*", "./tools/**/*", "@types/**/*"], + "exclude": ["./.storybook/preview.ts"], + "references": [{ "path": "./tsconfig.app.json" }] +} diff --git a/uno.config.ts b/uno.config.ts new file mode 100644 index 0000000..08c3a98 --- /dev/null +++ b/uno.config.ts @@ -0,0 +1,60 @@ +import { + defineConfig, + presetIcons, + presetTypography, + presetWebFonts, + transformerVariantGroup, + transformerDirectives, + transformerCompileClass, + presetWind4, +} from 'unocss'; +import extractorSvelte from '@unocss/extractor-svelte'; + +export default defineConfig({ + presets: [ + presetWind4({ + preflights: { + reset: true, + }, + }), + presetIcons(), + presetTypography(), + presetWebFonts({ + provider: 'none', // handled by unplugin-font with vite + fonts: { sans: 'Work Sans Variable', hero: 'Syncopate' }, + }), + ], + transformers: [transformerVariantGroup(), transformerDirectives(), transformerCompileClass()], + extractors: [extractorSvelte()], + theme: { + colors: { + primary: { + 100: 'oklch(90.03% 0.0551 283.77)', + 225: 'oklch(75.03% 0.1465 285.63)', + 375: 'oklch(63.78% 0.2218 286.67)', + 500: 'oklch(51.20% 0.2529 286.36)', + 625: 'oklch(37.27% 0.1841 286.40)', + 775: 'oklch(24.11% 0.1192 286.50)', + 900: 'oklch(9.93% 0.0465 288.17)', + }, + secondary: { + 100: 'oklch(82.70% 0.2088 122.87)', + 225: 'oklch(75.82% 0.2039 122.84)', + 375: 'oklch(63.03% 0.1695 122.65)', + 500: 'oklch(49.55% 0.1327 122.36)', + 625: 'oklch(36.34% 0.0983 123.01)', + 775: 'oklch(23.41% 0.0631 123.86)', + 900: 'oklch(10.12% 0.0181 122.88)', + }, + text: { + 100: 'oklch(90.11% 0.0108 271.21)', + 225: 'oklch(76.62% 0.0319 272.63)', + 375: 'oklch(63.50% 0.0518 271.60)', + 500: 'oklch(51.67% 0.0714 272.43)', + 625: 'oklch(36.52% 0.0567 273.04)', + 775: 'oklch(23.57% 0.0361 271.39)', + 900: 'oklch(10.12% 0.0157 283.23)', + }, + }, + }, +}); diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..529665a --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,118 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { defineConfig } from 'vitest/config'; +import { playwright } from '@vitest/browser-playwright'; + +import { storybookTest } from '@storybook/addon-vitest/vitest-plugin'; + +import { sveltekit } from '@sveltejs/kit/vite'; +import { enhancedImages } from '@sveltejs/enhanced-img'; + +import UnoCSS from 'unocss/vite'; + +import Unfonts from 'unplugin-fonts/vite'; + +import devtoolsJson from 'vite-plugin-devtools-json'; + +import svkitCfgFn from './svelte.config.ts'; + +const dirname = + typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url)); + +// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon +export default defineConfig((env) => { + const svkitCfg = svkitCfgFn(env); + + return { + plugins: [ + devtoolsJson(), + UnoCSS(), + enhancedImages(), + sveltekit({ + ...Object.fromEntries(Object.entries(svkitCfg).filter(([key]) => key !== 'kit')), + ...svkitCfg.kit, + }), + Unfonts({ + inlineFontFace: true, + fontsource: { + families: [ + { + name: 'Syncopate', + weights: [700], + fallback: { + category: 'sans-serif', + }, + }, + { + name: 'Work Sans', + variable: { + wght: true, + }, + fallback: { + category: 'sans-serif', + }, + }, + ], + }, + }), + ], + test: { + expect: { + requireAssertions: true, + }, + projects: [ + { + extends: './vite.config.ts', + test: { + name: 'client', + browser: { + enabled: true, + provider: playwright(), + instances: [ + { + browser: 'chromium', + headless: true, + }, + ], + }, + include: ['src/**/*.svelte.{test,spec}.{js,ts}'], + exclude: ['src/lib/server/**'], + }, + }, + { + extends: './vite.config.ts', + test: { + name: 'server', + environment: 'node', + include: ['src/**/*.{test,spec}.{js,ts}'], + exclude: ['src/**/*.svelte.{test,spec}.{js,ts}'], + }, + }, + { + extends: true, + plugins: [ + // The plugin will run tests for the stories defined in your Storybook config + // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest + storybookTest({ + configDir: path.join(dirname, '.storybook'), + }), + ], + test: { + name: 'storybook', + browser: { + enabled: true, + headless: true, + provider: playwright(), + instances: [ + { + browser: 'chromium', + }, + ], + }, + }, + }, + ], + }, + }; +}); diff --git a/vitest.shims.d.ts b/vitest.shims.d.ts new file mode 100644 index 0000000..7782f28 --- /dev/null +++ b/vitest.shims.d.ts @@ -0,0 +1 @@ +/// \ No newline at end of file diff --git a/wrangler.jsonc b/wrangler.jsonc new file mode 100644 index 0000000..c958998 --- /dev/null +++ b/wrangler.jsonc @@ -0,0 +1,25 @@ +{ + "$schema": "./node_modules/wrangler/config-schema.json", + "name": "summer-summit", + "compatibility_date": "2026-06-16", + "compatibility_flags": ["nodejs_compat", "nodejs_als"], + "main": ".svelte-kit/cloudflare/_worker.js", + "assets": { + "binding": "ASSETS", + "directory": ".svelte-kit/cloudflare", + }, + "workers_dev": true, + "preview_urls": true, + "observability": { + "enabled": true, + }, + "routes": [ + { + "pattern": "summersummit.dev", + "custom_domain": true, + }, + ], + "build": { + "command": "pnpm run build", + }, +} From f33d441b0629add2355d4a6257cba5af6828307e Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:09:41 -0700 Subject: [PATCH 002/141] build: remove useless `.npmrc` --- .npmrc | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .npmrc diff --git a/.npmrc b/.npmrc deleted file mode 100644 index b6f27f1..0000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true From c48a6fafb705821dc30bb04410ca1f048b31a51c Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:12:14 -0700 Subject: [PATCH 003/141] build: add missing `import 'unfonts.css' in storybook preview` --- .storybook/preview.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 81ad46e..6a8267d 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -1,5 +1,6 @@ import type { Preview } from '@storybook/sveltekit'; +import 'unfonts.css'; import 'virtual:uno.css'; const preview: Preview = { From 5443f0345025cca19ba31571499a1bec39f1549d Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:12:44 -0700 Subject: [PATCH 004/141] docs: enable autodocs for all stories --- .storybook/preview.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 6a8267d..bee372a 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -4,6 +4,8 @@ import 'unfonts.css'; import 'virtual:uno.css'; const preview: Preview = { + tags: ['autodocs'], + parameters: { controls: { matchers: { From eed6199dfc69f79b0e5ba198f8915409c419d68b Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:13:08 -0700 Subject: [PATCH 005/141] build: center storybook preview --- .storybook/preview.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.storybook/preview.ts b/.storybook/preview.ts index bee372a..2890767 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -7,6 +7,8 @@ const preview: Preview = { tags: ['autodocs'], parameters: { + layout: 'centered', + controls: { matchers: { color: /(background|color)$/i, From 29034c7d5e1e283f69598ffb71409dace72aca12 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:14:19 -0700 Subject: [PATCH 006/141] build: warn when icons specified aren't installed --- uno.config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/uno.config.ts b/uno.config.ts index 08c3a98..c547667 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -17,7 +17,9 @@ export default defineConfig({ reset: true, }, }), - presetIcons(), + presetIcons({ + warn: true, + }), presetTypography(), presetWebFonts({ provider: 'none', // handled by unplugin-font with vite From c2da868a7472ed06a5fcebd52eef1b5c1309b14a Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:14:53 -0700 Subject: [PATCH 007/141] refactor: improve naming of classes for brand colors --- uno.config.ts | 54 ++++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/uno.config.ts b/uno.config.ts index c547667..8422287 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -30,32 +30,34 @@ export default defineConfig({ extractors: [extractorSvelte()], theme: { colors: { - primary: { - 100: 'oklch(90.03% 0.0551 283.77)', - 225: 'oklch(75.03% 0.1465 285.63)', - 375: 'oklch(63.78% 0.2218 286.67)', - 500: 'oklch(51.20% 0.2529 286.36)', - 625: 'oklch(37.27% 0.1841 286.40)', - 775: 'oklch(24.11% 0.1192 286.50)', - 900: 'oklch(9.93% 0.0465 288.17)', - }, - secondary: { - 100: 'oklch(82.70% 0.2088 122.87)', - 225: 'oklch(75.82% 0.2039 122.84)', - 375: 'oklch(63.03% 0.1695 122.65)', - 500: 'oklch(49.55% 0.1327 122.36)', - 625: 'oklch(36.34% 0.0983 123.01)', - 775: 'oklch(23.41% 0.0631 123.86)', - 900: 'oklch(10.12% 0.0181 122.88)', - }, - text: { - 100: 'oklch(90.11% 0.0108 271.21)', - 225: 'oklch(76.62% 0.0319 272.63)', - 375: 'oklch(63.50% 0.0518 271.60)', - 500: 'oklch(51.67% 0.0714 272.43)', - 625: 'oklch(36.52% 0.0567 273.04)', - 775: 'oklch(23.57% 0.0361 271.39)', - 900: 'oklch(10.12% 0.0157 283.23)', + brand: { + primary: { + 100: 'oklch(90.03% 0.0551 283.77)', + 225: 'oklch(75.03% 0.1465 285.63)', + 375: 'oklch(63.78% 0.2218 286.67)', + 500: 'oklch(51.20% 0.2529 286.36)', + 625: 'oklch(37.27% 0.1841 286.40)', + 775: 'oklch(24.11% 0.1192 286.50)', + 900: 'oklch(9.93% 0.0465 288.17)', + }, + secondary: { + 100: 'oklch(82.70% 0.2088 122.87)', + 225: 'oklch(75.82% 0.2039 122.84)', + 375: 'oklch(63.03% 0.1695 122.65)', + 500: 'oklch(49.55% 0.1327 122.36)', + 625: 'oklch(36.34% 0.0983 123.01)', + 775: 'oklch(23.41% 0.0631 123.86)', + 900: 'oklch(10.12% 0.0181 122.88)', + }, + shade: { + 100: 'oklch(90.11% 0.0108 271.21)', + 225: 'oklch(76.62% 0.0319 272.63)', + 375: 'oklch(63.50% 0.0518 271.60)', + 500: 'oklch(51.67% 0.0714 272.43)', + 625: 'oklch(36.52% 0.0567 273.04)', + 775: 'oklch(23.57% 0.0361 271.39)', + 900: 'oklch(10.12% 0.0157 283.23)', + }, }, }, }, From da5f2d04ba90aee1db4cadf65034bd884d408079 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:15:48 -0700 Subject: [PATCH 008/141] build: workaround wrangler running build when generating types --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 88f0579..591adc5 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "dev": "vite dev", "prebuild": "node ./tools/clean-build.ts", - "build": "vite build", + "build": "node -e \"if (process.env.WRANGLER_COMMAND !== 'types'){process.exit(1)} \" || vite build", "preview": "wrangler dev .svelte-kit/cloudflare/_worker.js --port 4173", "prepare": "pnpm run gen || echo ''", "precheck:wrangler": "pnpm run /^gen:wrangler$/", From 5f285adbf3a99d69c7d09e3f51e1e720d0a3897c Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:23:57 -0700 Subject: [PATCH 009/141] build: bump deps --- package.json | 6 +++--- pnpm-lock.yaml | 52 +++++++++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 591adc5..be51910 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@storybook/sveltekit": "^10.4.6", "@sveltejs/adapter-cloudflare": "^7.2.9", "@sveltejs/enhanced-img": "^0.11.0", - "@sveltejs/kit": "^2.67.0", + "@sveltejs/kit": "^2.68.0", "@sveltejs/vite-plugin-svelte": "^7.1.2", "@types/node": "^24", "@unocss/eslint-config": "^66.7.2", @@ -51,7 +51,7 @@ "@unocss/svelte-scoped": "^66.7.2", "@vitest/browser-playwright": "^4.1.9", "@vitest/coverage-v8": "^4.1.9", - "chromatic": "^17.5.0", + "chromatic": "^17.6.0", "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-storybook": "^10.4.6", @@ -62,7 +62,7 @@ "prettier-plugin-svelte": "^4.1.1", "storybook": "^10.4.6", "svelte": "^5.56.4", - "svelte-check": "^4.7.0", + "svelte-check": "^4.7.1", "type-fest": "^5.7.0", "typescript": "^6.0.3", "typescript-eslint": "^8.62.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b04d3d9..6549ee5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,7 +24,7 @@ importers: version: 66.7.2 bits-ui: specifier: ^2.18.1 - version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) devDependencies: '@chromatic-com/storybook': specifier: ^5.2.1 @@ -49,13 +49,13 @@ importers: version: 10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) '@sveltejs/adapter-cloudflare': specifier: ^7.2.9 - version: 7.2.9(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0) + version: 7.2.9(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0) '@sveltejs/enhanced-img': specifier: ^0.11.0 version: 0.11.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) '@sveltejs/kit': - specifier: ^2.67.0 - version: 2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + specifier: ^2.68.0 + version: 2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 version: 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) @@ -81,8 +81,8 @@ importers: specifier: ^4.1.9 version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) chromatic: - specifier: ^17.5.0 - version: 17.5.0 + specifier: ^17.6.0 + version: 17.6.0 eslint: specifier: ^10.5.0 version: 10.5.0(jiti@2.7.0) @@ -117,8 +117,8 @@ importers: specifier: ^5.56.4 version: 5.56.4(@typescript-eslint/types@8.62.0) svelte-check: - specifier: ^4.7.0 - version: 4.7.0(picomatch@4.0.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3) + specifier: ^4.7.1 + version: 4.7.1(picomatch@4.0.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3) type-fest: specifier: ^5.7.0 version: 5.7.0 @@ -1344,8 +1344,8 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || >=7.0.0 - '@sveltejs/kit@2.67.0': - resolution: {integrity: sha512-JXHbsDwRes1Wgyof3q5ApzzpbCWvinKXMQCiV67TFO6xlZPYLoK0fq3xQMqSicDMgCtFGqLkrQXkseOcASdZ8A==} + '@sveltejs/kit@2.68.0': + resolution: {integrity: sha512-PdKiWsqinAoubVsSiRgVFkg3MHzGhQPnwQ8VxnGQKpZYijpapZ3UHHBje0GeByt2TvfjHPw+kxV+dNK2RIZg9g==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1754,8 +1754,8 @@ packages: '@chromatic-com/vitest': optional: true - chromatic@17.5.0: - resolution: {integrity: sha512-jYtXDaY1VeaNaWMom4HewLQTL574s4wTtkg5Kryov9Cj7D6i8Pe7twpLsetG7apxD0aITWUhx6KiqfN6p380rw==} + chromatic@17.6.0: + resolution: {integrity: sha512-fj0y0rRxlnpMfQlTNjjtn+xbTWvwkl4R3fg3vt5SSSxL/zEJFjs24E1n54/faiHo2mjss5oVOPf1knmf94eA1w==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: @@ -2787,8 +2787,8 @@ packages: peerDependencies: svelte: ^5.0.0 - svelte-check@4.7.0: - resolution: {integrity: sha512-XChCqdDg29UWOWai2I1s2Ss003piZ9mae2y2KXwoOX01W75mg7/fwLLnx9Yruk9asHkxHPDdSfEfsJh5tr9JvQ==} + svelte-check@4.7.1: + resolution: {integrity: sha512-FGUOmAqxXdN/H9Zm8slrqO7SLtFisXRB7rfOsHNJ3MLTD2po/+Stg8XyErkpumPHbuUiYTcqrEIzxpVWKTLqtg==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: @@ -4021,10 +4021,10 @@ snapshots: dependencies: acorn: 8.17.0 - '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0)': + '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0)': dependencies: '@cloudflare/workers-types': 4.20260613.1 - '@sveltejs/kit': 2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/kit': 2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) worktop: 0.8.0-next.18 wrangler: 4.104.0 @@ -4041,7 +4041,7 @@ snapshots: transitivePeerDependencies: - rollup - '@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) @@ -4552,15 +4552,15 @@ snapshots: balanced-match@4.0.4: {} - bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/dom': 1.7.6 '@internationalized/date': 3.12.2 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + runed: 0.35.1(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) svelte: 5.56.4(@typescript-eslint/types@8.62.0) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -4605,7 +4605,7 @@ snapshots: dependencies: semver: 7.8.5 - chromatic@17.5.0: + chromatic@17.6.0: dependencies: semver: 7.8.5 @@ -5404,14 +5404,14 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.35.1(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + runed@0.35.1(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 svelte: 5.56.4(@typescript-eslint/types@8.62.0) optionalDependencies: - '@sveltejs/kit': 2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/kit': 2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) sade@1.8.1: dependencies: @@ -5529,7 +5529,7 @@ snapshots: svelte: 5.56.4(@typescript-eslint/types@8.62.0) zimmerframe: 1.1.2 - svelte-check@4.7.0(picomatch@4.0.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3): + svelte-check@4.7.1(picomatch@4.0.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 '@sveltejs/load-config': 0.2.0 @@ -5558,10 +5558,10 @@ snapshots: dependencies: svelte: 5.56.4(@typescript-eslint/types@8.62.0) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.67.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + runed: 0.35.1(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) style-to-object: 1.0.14 svelte: 5.56.4(@typescript-eslint/types@8.62.0) transitivePeerDependencies: From dcb569f0bcafa489b27a8dd5ceaf7c821dfb74b5 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:26:43 -0700 Subject: [PATCH 010/141] build: add peer dep override for `vite-plugin-devtools-json` The vite version it specifies doesn't include the latest vite even though it's compatible in testing. --- pnpm-workspace.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e0e50c7..c0e81ea 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,3 +17,6 @@ overrides: minimumReleaseAgeExclude: - ws@8.21.0 - undici@7.28.0 +peerDependencyRules: + allowedVersions: + 'vite-plugin-devtools-json>vite': '8' From 71ba6e50cc92a093be60be25e9deb5d68c96b488 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:28:01 -0700 Subject: [PATCH 011/141] build: fix autodocs+vitest complaining about unresolved deps --- pnpm-workspace.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c0e81ea..e59864e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -20,3 +20,6 @@ minimumReleaseAgeExclude: peerDependencyRules: allowedVersions: 'vite-plugin-devtools-json>vite': '8' +publicHoistPattern: + - 'react' + - 'react-dom' From 0f85fc1bdf1f67de120a76463c3d0a8288b3a25a Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:33:23 -0700 Subject: [PATCH 012/141] chore: enable figma claude-code plugin --- .claude/settings.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.claude/settings.json b/.claude/settings.json index 9070d57..c531696 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -1,6 +1,7 @@ { - "$schema": "https://json.schemastore.org/claude-code-settings.json", - "enabledPlugins": { - "svelte@svelte": true - } + "$schema": "https://json.schemastore.org/claude-code-settings.json", + "enabledPlugins": { + "svelte@svelte": true, + "figma@claude-plugins-official": true + } } From bdb4ba147b0d45950fbb87c9acee556801e78db1 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 17:31:31 -0700 Subject: [PATCH 013/141] ci: add chromatic workflow --- .github/workflows/chromatic.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/chromatic.yml diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml new file mode 100644 index 0000000..60a3ecf --- /dev/null +++ b/.github/workflows/chromatic.yml @@ -0,0 +1,24 @@ +name: 'Chromatic' + +on: push + +jobs: + chromatic: + name: Run Chromatic + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Setup Environment + uses: ./.github/actions/setup-env + + - name: Run Chromatic + uses: chromaui/action@latest + with: + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + onlyChanged: true + exitOnceUploaded: true + skip: 'production' From 84cb487ad9a4c247a4a9232db2f1ed2de0da2d44 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 17:51:18 -0700 Subject: [PATCH 014/141] chore: don't auto-open browser with `pnpm run storybook` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index be51910..1595ad7 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "gen:wrangler": "wrangler types ./@types/worker-configuration.d.ts", "gen:svelte-kit": "svelte-kit sync", "gen": "pnpm run /^gen:.*/", - "storybook": "storybook dev -p 6006", + "storybook": "storybook dev --no-open -p 6006", "build-storybook": "storybook build" }, "dependencies": { From 0f6fdcf24d00b7043ef17b017707c045338952da Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 18:22:43 -0700 Subject: [PATCH 015/141] ci: fix node version file specified incorrectly in `setup-env` action --- .github/actions/setup-env/action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup-env/action.yaml b/.github/actions/setup-env/action.yaml index b9f2874..fbb9f30 100644 --- a/.github/actions/setup-env/action.yaml +++ b/.github/actions/setup-env/action.yaml @@ -16,7 +16,7 @@ runs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: 'package.json' + node-version-file: 'package.json' - name: Install dependencies run: pnpm install From d0c419acb80cbb84d7e01c1e594c2e2514f7e20f Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 19:48:35 -0700 Subject: [PATCH 016/141] build(storybook): add storybook-addon-pseudo-states --- .storybook/main.ts | 1 + package.json | 1 + pnpm-lock.yaml | 12 ++++++++++++ 3 files changed, 14 insertions(+) diff --git a/.storybook/main.ts b/.storybook/main.ts index 5ef0426..6b48685 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -8,6 +8,7 @@ const config = { '@storybook/addon-vitest', '@storybook/addon-a11y', '@storybook/addon-docs', + 'storybook-addon-pseudo-states', ], framework: '@storybook/sveltekit', } satisfies StorybookConfig; diff --git a/package.json b/package.json index 1595ad7..23f7dcf 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "prettier": "^3.8.4", "prettier-plugin-svelte": "^4.1.1", "storybook": "^10.4.6", + "storybook-addon-pseudo-states": "^10.4.6", "svelte": "^5.56.4", "svelte-check": "^4.7.1", "type-fest": "^5.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6549ee5..8b6a8e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -113,6 +113,9 @@ importers: storybook: specifier: ^10.4.6 version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook-addon-pseudo-states: + specifier: ^10.4.6 + version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) svelte: specifier: ^5.56.4 version: 5.56.4(@typescript-eslint/types@8.62.0) @@ -2747,6 +2750,11 @@ packages: std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + storybook-addon-pseudo-states@10.4.6: + resolution: {integrity: sha512-yP6GgUTj2uju34ZLKzrFJz9uS+9Nn6uH3Wprei5x/KS6CSbLOuXf3pBhAfi+ur2y4Qm3l/thGyHYVcoACCbgIg==} + peerDependencies: + storybook: ^10.4.6 + storybook@10.4.6: resolution: {integrity: sha512-6wkA6LxfDSSilloITsrFOJfsnw0mDUP2h8Ls+lRt8oRsudtz2RWFhLv+Toiwg6NW7hUpdTDc2hzR7DztJid6+A==} hasBin: true @@ -5478,6 +5486,10 @@ snapshots: std-env@4.1.0: {} + storybook-addon-pseudo-states@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)): + dependencies: + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: '@storybook/global': 5.0.0 From af8864bef1c19114c1a8f2fed197a7f900c9c014 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 28 Jun 2026 05:24:00 -0700 Subject: [PATCH 017/141] refactor: move design tokens out of build config so other tooling can reuse them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The brand palette and font names were inlined in uno.config.ts, where only UnoCSS could see them at build time. Storybook needs the same source of truth to document the design system, so lift them into src/lib/tokens.ts and import them back. Pure extraction — the generated theme is unchanged. --- src/lib/tokens.ts | 36 ++++++++++++++++++++++++++++++++++++ uno.config.ts | 34 ++++------------------------------ 2 files changed, 40 insertions(+), 30 deletions(-) create mode 100644 src/lib/tokens.ts diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts new file mode 100644 index 0000000..5ee36b5 --- /dev/null +++ b/src/lib/tokens.ts @@ -0,0 +1,36 @@ +// Design tokens + +export const brand = { + primary: { + 100: 'oklch(90.03% 0.0551 283.77)', + 225: 'oklch(75.03% 0.1465 285.63)', + 375: 'oklch(63.78% 0.2218 286.67)', + 500: 'oklch(51.20% 0.2529 286.36)', + 625: 'oklch(37.27% 0.1841 286.40)', + 775: 'oklch(24.11% 0.1192 286.50)', + 900: 'oklch(9.93% 0.0465 288.17)', + }, + secondary: { + 100: 'oklch(82.70% 0.2088 122.87)', + 225: 'oklch(75.82% 0.2039 122.84)', + 375: 'oklch(63.03% 0.1695 122.65)', + 500: 'oklch(49.55% 0.1327 122.36)', + 625: 'oklch(36.34% 0.0983 123.01)', + 775: 'oklch(23.41% 0.0631 123.86)', + 900: 'oklch(10.12% 0.0181 122.88)', + }, + shade: { + 100: 'oklch(90.11% 0.0108 271.21)', + 225: 'oklch(76.62% 0.0319 272.63)', + 375: 'oklch(63.50% 0.0518 271.60)', + 500: 'oklch(51.67% 0.0714 272.43)', + 625: 'oklch(36.52% 0.0567 273.04)', + 775: 'oklch(23.57% 0.0361 271.39)', + 900: 'oklch(10.12% 0.0157 283.23)', + }, +} as const; + +export const fonts = { + sans: 'Work Sans Variable', + hero: 'Syncopate', +} as const; diff --git a/uno.config.ts b/uno.config.ts index 8422287..b142077 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -10,6 +10,8 @@ import { } from 'unocss'; import extractorSvelte from '@unocss/extractor-svelte'; +import { brand, fonts } from './src/lib/tokens'; + export default defineConfig({ presets: [ presetWind4({ @@ -23,42 +25,14 @@ export default defineConfig({ presetTypography(), presetWebFonts({ provider: 'none', // handled by unplugin-font with vite - fonts: { sans: 'Work Sans Variable', hero: 'Syncopate' }, + fonts, }), ], transformers: [transformerVariantGroup(), transformerDirectives(), transformerCompileClass()], extractors: [extractorSvelte()], theme: { colors: { - brand: { - primary: { - 100: 'oklch(90.03% 0.0551 283.77)', - 225: 'oklch(75.03% 0.1465 285.63)', - 375: 'oklch(63.78% 0.2218 286.67)', - 500: 'oklch(51.20% 0.2529 286.36)', - 625: 'oklch(37.27% 0.1841 286.40)', - 775: 'oklch(24.11% 0.1192 286.50)', - 900: 'oklch(9.93% 0.0465 288.17)', - }, - secondary: { - 100: 'oklch(82.70% 0.2088 122.87)', - 225: 'oklch(75.82% 0.2039 122.84)', - 375: 'oklch(63.03% 0.1695 122.65)', - 500: 'oklch(49.55% 0.1327 122.36)', - 625: 'oklch(36.34% 0.0983 123.01)', - 775: 'oklch(23.41% 0.0631 123.86)', - 900: 'oklch(10.12% 0.0181 122.88)', - }, - shade: { - 100: 'oklch(90.11% 0.0108 271.21)', - 225: 'oklch(76.62% 0.0319 272.63)', - 375: 'oklch(63.50% 0.0518 271.60)', - 500: 'oklch(51.67% 0.0714 272.43)', - 625: 'oklch(36.52% 0.0567 273.04)', - 775: 'oklch(23.57% 0.0361 271.39)', - 900: 'oklch(10.12% 0.0157 283.23)', - }, - }, + brand, }, }, }); From 17d68268619729d8a09451e5b569b1709cfb4a85 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 28 Jun 2026 05:29:07 -0700 Subject: [PATCH 018/141] feat: interpolate full color ramps from a few anchor stops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hand-tuning seven oklch stops per scale is laborious and the stops drift apart over time. Keep only a handful of deliberately chosen anchors per scale and interpolate a standard 50–900 ramp through them with a monotone spline (culori), so the in-between shades stay perceptually even and a new scale just needs its anchors picked. --- package.json | 4 +++- pnpm-lock.yaml | 17 +++++++++++++++++ src/lib/tokens.ts | 32 ++++++++++++++++++++++++++++++++ uno.config.ts | 4 ++-- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 23f7dcf..8de4ed8 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "@fontsource-variable/work-sans": "^5.2.8", "@fontsource/syncopate": "^5.2.8", "@unocss/reset": "^66.7.2", - "bits-ui": "^2.18.1" + "bits-ui": "^2.18.1", + "culori": "^4.0.2" }, "devDependencies": { "@chromatic-com/storybook": "^5.2.1", @@ -44,6 +45,7 @@ "@sveltejs/enhanced-img": "^0.11.0", "@sveltejs/kit": "^2.68.0", "@sveltejs/vite-plugin-svelte": "^7.1.2", + "@types/culori": "^4.0.1", "@types/node": "^24", "@unocss/eslint-config": "^66.7.2", "@unocss/extractor-svelte": "^66.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b6a8e0..5179762 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,6 +25,9 @@ importers: bits-ui: specifier: ^2.18.1 version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + culori: + specifier: ^4.0.2 + version: 4.0.2 devDependencies: '@chromatic-com/storybook': specifier: ^5.2.1 @@ -59,6 +62,9 @@ importers: '@sveltejs/vite-plugin-svelte': specifier: ^7.1.2 version: 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@types/culori': + specifier: ^4.0.1 + version: 4.0.1 '@types/node': specifier: ^24 version: 24.13.2 @@ -1409,6 +1415,9 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/culori@4.0.1': + resolution: {integrity: sha512-43M51r/22CjhbOXyGT361GZ9vncSVQ39u62x5eJdBQFviI8zWp2X5jzqg7k4M6PVgDQAClpy2bUe2dtwEgEDVQ==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -1817,6 +1826,10 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + culori@4.0.2: + resolution: {integrity: sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -4126,6 +4139,8 @@ snapshots: '@types/cookie@0.6.0': {} + '@types/culori@4.0.1': {} + '@types/deep-eql@4.0.2': {} '@types/esrecurse@4.3.1': {} @@ -4648,6 +4663,8 @@ snapshots: csstype@3.2.3: {} + culori@4.0.2: {} + debug@4.4.3: dependencies: ms: 2.1.3 diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index 5ee36b5..d568c22 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -1,7 +1,12 @@ // Design tokens +import { interpolate, interpolatorSplineMonotone2, formatCss } from 'culori'; + +const colorStops = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const; + export const brand = { primary: { + 50: 'oklch(95.20% 0.0250 283.50)', 100: 'oklch(90.03% 0.0551 283.77)', 225: 'oklch(75.03% 0.1465 285.63)', 375: 'oklch(63.78% 0.2218 286.67)', @@ -11,6 +16,7 @@ export const brand = { 900: 'oklch(9.93% 0.0465 288.17)', }, secondary: { + 50: 'oklch(90.50% 0.1300 122.90)', 100: 'oklch(82.70% 0.2088 122.87)', 225: 'oklch(75.82% 0.2039 122.84)', 375: 'oklch(63.03% 0.1695 122.65)', @@ -20,6 +26,7 @@ export const brand = { 900: 'oklch(10.12% 0.0181 122.88)', }, shade: { + 50: 'oklch(95.30% 0.0060 271.00)', 100: 'oklch(90.11% 0.0108 271.21)', 225: 'oklch(76.62% 0.0319 272.63)', 375: 'oklch(63.50% 0.0518 271.60)', @@ -30,6 +37,31 @@ export const brand = { }, } as const; +type ColorScale = Record<(typeof colorStops)[number], string>; + +// Expand a hand-picked ramp into a full 10-stop scale. +function generateColors(colors: Record): ColorScale { + const stops = Object.entries(colors).map( + ([key, color]) => [color, Number(key) / 1000] as [string, number], + ); + const interpolator = interpolate( + stops, + 'oklch', + // @ts-expect-error - bad types + interpolatorSplineMonotone2, + ); + + return Object.fromEntries( + colorStops.map((stop) => [stop, formatCss(interpolator(stop / 1000))]), + ) as ColorScale; +} + +export const brandColors = { + primary: generateColors(brand.primary), + secondary: generateColors(brand.secondary), + shade: generateColors(brand.shade), +}; + export const fonts = { sans: 'Work Sans Variable', hero: 'Syncopate', diff --git a/uno.config.ts b/uno.config.ts index b142077..8ffbed3 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -10,7 +10,7 @@ import { } from 'unocss'; import extractorSvelte from '@unocss/extractor-svelte'; -import { brand, fonts } from './src/lib/tokens'; +import { brandColors, fonts } from './src/lib/tokens'; export default defineConfig({ presets: [ @@ -32,7 +32,7 @@ export default defineConfig({ extractors: [extractorSvelte()], theme: { colors: { - brand, + brand: brandColors, }, }, }); From dc0c0fa9e28f63f0cee58ce9bf2f933f09c7a0eb Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 28 Jun 2026 05:32:02 -0700 Subject: [PATCH 019/141] feat: expose the Wind4 text scale as a token Typography docs and any consumer that wants the font sizes shouldn't keep a hand-copied list that silently rots when the scale changes. Re-export Wind4's text scale from tokens.ts so the sizes are read from the same source the `text-*` utilities are generated from. --- package.json | 1 + pnpm-lock.yaml | 32 ++++++++++++++++++++++++++++++++ src/lib/tokens.ts | 5 +++++ 3 files changed, 38 insertions(+) diff --git a/package.json b/package.json index 8de4ed8..43d19ab 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "dependencies": { "@fontsource-variable/work-sans": "^5.2.8", "@fontsource/syncopate": "^5.2.8", + "@unocss/preset-wind4": "^66.7.3", "@unocss/reset": "^66.7.2", "bits-ui": "^2.18.1", "culori": "^4.0.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5179762..35a3767 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,6 +19,9 @@ importers: '@fontsource/syncopate': specifier: ^5.2.8 version: 5.2.8 + '@unocss/preset-wind4': + specifier: ^66.7.3 + version: 66.7.3 '@unocss/reset': specifier: ^66.7.2 version: 66.7.2 @@ -1511,6 +1514,9 @@ packages: '@unocss/core@66.7.2': resolution: {integrity: sha512-NNnhm9IVPEZ34drwztREP+mq1rio0L4Tp0u247qBKxJJWYec1+I+FTRsw7EvtukZKvr56YAxFA1qbBV+LjyV+Q==} + '@unocss/core@66.7.3': + resolution: {integrity: sha512-UBfEXpW8NKACeEeUddvPDRuuroDtByO3ZHocs/SqqOEybs5Qb9oWdMJMj1DSe960RvzucLPDtOeCFL2gilzRVA==} + '@unocss/eslint-config@66.7.2': resolution: {integrity: sha512-QeNPeQiNe0eE3VADM+cDXQ2CoXEyJSf3ZovbJ2x7nXAOHJ58x0BNclFI0TOorPevc1k7C/NNIb40m0akLsTYRg==} @@ -1520,6 +1526,9 @@ packages: '@unocss/extractor-arbitrary-variants@66.7.2': resolution: {integrity: sha512-1R+ntws4zhi9gCsyovYeNCiAYGSceN6Rsy/4kyaw3npr1UBWhBJdQZtacxvqOssPfbbqq2vpatcuQ4rfZZYWFQ==} + '@unocss/extractor-arbitrary-variants@66.7.3': + resolution: {integrity: sha512-Ps3p/nvT2nNQ8NHwHAewG/q90PZcYzGvoZhikCMuIMWrvZ2lVZM+q6+EaKSX6ZyUGJRVGh5CyU3GV3Fojp7zqQ==} + '@unocss/extractor-svelte@66.7.2': resolution: {integrity: sha512-Mu2Mtd+EII2Wr1yybCuNlrq1yOx58Imy+vpF0KTab2wT5OGOjam0PraH5is/Gf5lzYVl94lv7M4i+VYAzYdaUA==} @@ -1553,6 +1562,9 @@ packages: '@unocss/preset-wind4@66.7.2': resolution: {integrity: sha512-yP1Np15QKm+zh945lBmpNC2FnD4oyd0eq9qA6j8r15uvhz7AF98t9dGqqzV5WrjX+IZpwg08nP3son1IjAerLw==} + '@unocss/preset-wind4@66.7.3': + resolution: {integrity: sha512-fTPwgOdQB7ckGYggFYSEQ/9j901i+R62c0yuV4WIf2imV9vkbHkFrCXnz75MDhLKU2RA8KXfVVYNQTg5veD+tw==} + '@unocss/preset-wind@66.7.2': resolution: {integrity: sha512-porNxph4xfr67e0LpFis813rKk9+psUJMw0nPL4sZoHovhmR/hA5XlWb6fLCl7t4Lls20I/n8F8KKgkqkxnk8Q==} @@ -1562,6 +1574,9 @@ packages: '@unocss/rule-utils@66.7.2': resolution: {integrity: sha512-EGi2m9I87hluz2zgjVpXM4PWFn996RInNcx4PGF6Qw9Z0W78ROXEto0SM1IltpJ4R7+at4EhssU0IbHiT0snEw==} + '@unocss/rule-utils@66.7.3': + resolution: {integrity: sha512-DKg1Rr/pxc5owCbFTpF1hXGoSqZjX7EzgfOkgO9R0VDnsufXIf776xUw7I3PWKXMMdC3SLnY6jT9bhlnZ6aM7w==} + '@unocss/svelte-scoped@66.7.2': resolution: {integrity: sha512-J00Rg3GD6WvHKNFADR8pOmbLqNBmE4pnDhooIAq+7+0e5Yv1Mmiu5QFG4rTHPecXUkKsDyMiHJCRq1jD0ZTbOA==} @@ -4279,6 +4294,8 @@ snapshots: '@unocss/core@66.7.2': {} + '@unocss/core@66.7.3': {} + '@unocss/eslint-config@66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@unocss/eslint-plugin': 66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) @@ -4304,6 +4321,10 @@ snapshots: dependencies: '@unocss/core': 66.7.2 + '@unocss/extractor-arbitrary-variants@66.7.3': + dependencies: + '@unocss/core': 66.7.3 + '@unocss/extractor-svelte@66.7.2': {} '@unocss/inspector@66.7.2': @@ -4361,6 +4382,12 @@ snapshots: '@unocss/extractor-arbitrary-variants': 66.7.2 '@unocss/rule-utils': 66.7.2 + '@unocss/preset-wind4@66.7.3': + dependencies: + '@unocss/core': 66.7.3 + '@unocss/extractor-arbitrary-variants': 66.7.3 + '@unocss/rule-utils': 66.7.3 + '@unocss/preset-wind@66.7.2': dependencies: '@unocss/core': 66.7.2 @@ -4373,6 +4400,11 @@ snapshots: '@unocss/core': 66.7.2 magic-string: 0.30.21 + '@unocss/rule-utils@66.7.3': + dependencies: + '@unocss/core': 66.7.3 + magic-string: 0.30.21 + '@unocss/svelte-scoped@66.7.2': dependencies: '@unocss/config': 66.7.2 diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index d568c22..f144642 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -1,5 +1,6 @@ // Design tokens +import { theme } from '@unocss/preset-wind4/theme'; import { interpolate, interpolatorSplineMonotone2, formatCss } from 'culori'; const colorStops = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const; @@ -66,3 +67,7 @@ export const fonts = { sans: 'Work Sans Variable', hero: 'Syncopate', } as const; + +export type SizeName = string; +export type TextScale = Record; +export const textScale: TextScale = theme.text; From 0f5ec636e83cee0842a6c716d8e5cce7382451b7 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 28 Jun 2026 05:32:27 -0700 Subject: [PATCH 020/141] docs: add Storybook pages for the color and type tokens The palette and type scale had no rendered reference, so reviewing them meant reading raw oklch strings. Add Storybook docs that render straight from tokens.ts, giving a browsable swatch grid and type specimen that can never disagree with what actually ships. --- src/docs/Colors.mdx | 15 +++++++++++++++ src/docs/Typography.mdx | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/docs/Colors.mdx create mode 100644 src/docs/Typography.mdx diff --git a/src/docs/Colors.mdx b/src/docs/Colors.mdx new file mode 100644 index 0000000..340f0c0 --- /dev/null +++ b/src/docs/Colors.mdx @@ -0,0 +1,15 @@ +import { Meta, ColorPalette, ColorItem } from '@storybook/addon-docs/blocks'; +import { brandColors } from '$lib/tokens'; + + + +# Brand Colors + +The `brand` palette. Use as UnoCSS utilities, e.g. +`bg-brand-primary-500`, `text-brand-shade-900`. + + + + + + diff --git a/src/docs/Typography.mdx b/src/docs/Typography.mdx new file mode 100644 index 0000000..65bf740 --- /dev/null +++ b/src/docs/Typography.mdx @@ -0,0 +1,39 @@ +import { Meta, Typeset } from '@storybook/addon-docs/blocks'; +import { fonts, textScale } from '$lib/tokens'; + + + +# Typography + +Two font families, sized with UnoCSS's `text-*` scale (Wind4). Use as utilities: +`font-sans` / `font-hero` for family, and `text-xs … text-9xl` for size. The sizes below +are read directly from that scale. + +export const sizes = Object.values(textScale).map((t) => t.fontSize); +export const sample = 'The quick brown fox jumps over the lazy dog'; + +## UI and Prose + +**Font:** {fonts.sans} + +**Weights:** Variable + + + +## Hero + +**Font:** {fonts.hero} + +**Weights:** 700 + + From f97debe4df6c1d0d13b9c507bc649dca02b6a403 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 28 Jun 2026 21:53:15 -0700 Subject: [PATCH 021/141] build(storybook): integrate with visual test addon --- .github/workflows/chromatic.yml | 2 +- chromatic.config.json | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 chromatic.config.json diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 60a3ecf..6ef416d 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -19,6 +19,6 @@ jobs: uses: chromaui/action@latest with: projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - onlyChanged: true + autoAcceptChanges: 'main' exitOnceUploaded: true skip: 'production' diff --git a/chromatic.config.json b/chromatic.config.json new file mode 100644 index 0000000..7ddfc8c --- /dev/null +++ b/chromatic.config.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://www.chromatic.com/config-file.schema.json", + "onlyChanged": true, + "projectId": "Project:6a32172276e4b7b57bdf6b4e", + "zip": true +} From 36e64aa2f32040bb341d208047499707e23caaaa Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 28 Jun 2026 21:59:16 -0700 Subject: [PATCH 022/141] build(lint): use same `extraFileExtensions` across all files for performance See: https://typescript-eslint.io/troubleshooting/typed-linting/performance#changes-to-extrafileextensions-with-projectservice --- eslint.config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eslint.config.js b/eslint.config.js index fa116e4..45dd1fa 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -11,6 +11,7 @@ import globals from 'globals'; import ts from 'typescript-eslint'; const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); +const extraFileExtensions = ['.svelte']; export default defineConfig( globalIgnores(['!.storybook'], 'Include Storybook Directory'), @@ -30,6 +31,7 @@ export default defineConfig( globals: { ...globals.browser, ...globals.node }, parserOptions: { projectService: true, + extraFileExtensions, }, }, linterOptions: { @@ -48,6 +50,7 @@ export default defineConfig( parserOptions: { extraFileExtensions: ['.svelte'], parser: ts.parser, + extraFileExtensions, }, }, }, From 3fbc9b1d036e358baf48e6cce3873c92fe83c5e0 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 28 Jun 2026 22:00:37 -0700 Subject: [PATCH 023/141] build(lint): fix svelte eslint parser not loading config --- eslint.config.js | 5 ++++- svelte.config.ts | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 45dd1fa..0419f3f 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -10,6 +10,8 @@ import { defineConfig, includeIgnoreFile, globalIgnores } from 'eslint/config'; import globals from 'globals'; import ts from 'typescript-eslint'; +import svelteConfig from './svelte.config.ts'; + const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); const extraFileExtensions = ['.svelte']; @@ -48,8 +50,9 @@ export default defineConfig( files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], languageOptions: { parserOptions: { - extraFileExtensions: ['.svelte'], parser: ts.parser, + projectService: true, + svelteConfig: svelteConfig({ mode: 'development' }), extraFileExtensions, }, }, diff --git a/svelte.config.ts b/svelte.config.ts index 5d622c8..756a39c 100644 --- a/svelte.config.ts +++ b/svelte.config.ts @@ -5,7 +5,7 @@ import adapter from '@sveltejs/adapter-cloudflare'; import type { TsConfigJson, OmitIndexSignature } from 'type-fest'; -export type ConfigFn = (env: ConfigEnv) => OmitIndexSignature; +export type ConfigFn = (env: Partial) => OmitIndexSignature; const config: ConfigFn = ({ mode }) => { const isDev = mode == 'development'; From cf9d26c98398a1d243cab70d0ee1aed0b888dfc5 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 29 Jun 2026 04:03:11 -0700 Subject: [PATCH 024/141] ci: add test workflow --- .github/workflows/test.yml | 35 +++ commitlint.config.ts | 5 + package.json | 5 +- pnpm-lock.yaml | 550 +++++++++++++++++++++++++++++++++++++ 4 files changed, 594 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/test.yml create mode 100644 commitlint.config.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..9512223 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,35 @@ +name: 'Test' + +on: pull_request + +permissions: + contents: read + +jobs: + test: + name: Run Tests + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Setup Environment + uses: ./.github/actions/setup-env + + - parallel: + - name: Svelte Check + run: pnpm run check:svelte --fail-on-warnings + + - name: ESLint + run: pnpm run lint:eslint + + - name: Prettier + run: pnpm run lint:prettier + + - name: Vitest + run: pnpm exec playwright install --with-deps && pnpm run test --project client --project server + + - name: Commit Message + run: pnpm exec commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose diff --git a/commitlint.config.ts b/commitlint.config.ts new file mode 100644 index 0000000..94b2b92 --- /dev/null +++ b/commitlint.config.ts @@ -0,0 +1,5 @@ +import type { UserConfig } from '@commitlint/types'; + +const config: UserConfig = { extends: ['@commitlint/config-conventional'] }; + +export default config; diff --git a/package.json b/package.json index 43d19ab..924a0ac 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "check": "pnpm run /^check:.*/", "watch:svelte": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.app.json --watch", "lint:prettier": "prettier --check .", - "lint:eslint": "eslint .", + "lint:eslint": "eslint --max-warnings=0 .", "lint": "pnpm run /^lint:.*/", "format": "prettier --write .", "test": "vitest", @@ -36,6 +36,9 @@ }, "devDependencies": { "@chromatic-com/storybook": "^5.2.1", + "@commitlint/cli": "^21.1.0", + "@commitlint/config-conventional": "^21.1.0", + "@commitlint/types": "^21.1.0", "@eslint/js": "^10.0.1", "@storybook/addon-a11y": "^10.4.6", "@storybook/addon-docs": "^10.4.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 35a3767..5fc7ccc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,15 @@ importers: '@chromatic-com/storybook': specifier: ^5.2.1 version: 5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + '@commitlint/cli': + specifier: ^21.1.0 + version: 21.1.0(@types/node@24.13.2)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + '@commitlint/config-conventional': + specifier: ^21.1.0 + version: 21.1.0 + '@commitlint/types': + specifier: ^21.1.0 + version: 21.1.0 '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) @@ -258,6 +267,87 @@ packages: '@cloudflare/workers-types@4.20260613.1': resolution: {integrity: sha512-1mrgjE6epolwBhroeGAp5ud5H6Vyi6tl1o/NP0T4rXJ8bmEjmhHnbCzAhHTDHV0PIeip43wcuzHKJarvaGTaUA==} + '@commitlint/cli@21.1.0': + resolution: {integrity: sha512-CVwY6TxGv5naEaWxBdgNHko1xgL95Mb4WcIqp9iik33H0ctVqRv6YtekCntayhEP0T/apuiGvHu5HcCwFuVxEA==} + engines: {node: '>=22.12.0'} + hasBin: true + + '@commitlint/config-conventional@21.1.0': + resolution: {integrity: sha512-BIFl8xM+3SLy3jrblUC3wmQLCVbLty+++6o859BDCmybVrQdXmIWO+dlkGIbv/M2bBoC55wGuh0zGiw3TPjL1g==} + engines: {node: '>=22.12.0'} + + '@commitlint/config-validator@21.1.0': + resolution: {integrity: sha512-gHczt1xqQSwfNqBmOI3HjejtTljkiBEUneExMmTBLD0WwTC78lAqDvNMyydbySt3DhpH0F9oX7Vvuks6s5XPFw==} + engines: {node: '>=22.12.0'} + + '@commitlint/ensure@21.1.0': + resolution: {integrity: sha512-/S8Mo3Q1NtQUYDQjDmyQVPxfIwtnxq+guzMOkuGk8OSdwlzanm1WB9wDPIuuzlbMDDnBNbiAuBEUCcCNlfjrTQ==} + engines: {node: '>=22.12.0'} + + '@commitlint/execute-rule@21.0.1': + resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} + engines: {node: '>=22.12.0'} + + '@commitlint/format@21.1.0': + resolution: {integrity: sha512-ySymqKYBfjNrQ5N4W/l1iF2ISW1W7Eu/Oi/wRxlri31N0yjNyzUyUzQwyuZLDzTXIlMs4IZ7hIOfAZx8lO18gA==} + engines: {node: '>=22.12.0'} + + '@commitlint/is-ignored@21.1.0': + resolution: {integrity: sha512-RoRh1/YI+fYH+aid5lMQ2UD0vZ3p3Vf1KeUWT1ir3H/p/7T/6SFv1OiXLgLwUT8dP72EVWeEIyOfkiSWLZYVvw==} + engines: {node: '>=22.12.0'} + + '@commitlint/lint@21.1.0': + resolution: {integrity: sha512-0DbfVVUjAWBfixW6v7CXXWVxMcj6Ukf/oB7O8NAbouP3jxmqUaC4eVQphxl3B3M0ii3cCQiR3sRAYxICwU2gAA==} + engines: {node: '>=22.12.0'} + + '@commitlint/load@21.1.0': + resolution: {integrity: sha512-juiClVEcoreNB0TNVkseO2EmNcpEs/Yhnmgbnm/hQAKBFRynKwIaoNIljXkx/3yvZcMO0EE8I2XOEI7d5KZG8Q==} + engines: {node: '>=22.12.0'} + + '@commitlint/message@21.0.2': + resolution: {integrity: sha512-5n4aqHGD/FNnom/D5L8i7cYtV+xjuXcBL832C3w9VglEsZzIsoHpJsvxzJ7cgiOsOdc/2jU4t5+7qMHh7GBX3g==} + engines: {node: '>=22.12.0'} + + '@commitlint/parse@21.1.0': + resolution: {integrity: sha512-HdAqbbjQS8eEtbR74Ysg2VNmbvAfeWLVYMkip/lHibNrtjRsC/97XAYN3/H5P0pEJtDfyTb3iLs8x6y0eu4OYA==} + engines: {node: '>=22.12.0'} + + '@commitlint/read@21.1.0': + resolution: {integrity: sha512-ID7m79aw8d0dMlxuXHD2QGxEX3Fhl/mUPA80WwEW5VgeOpUHNahhwWJefDdoBDVZcDfbHuf429NrcK0gxQsQjA==} + engines: {node: '>=22.12.0'} + + '@commitlint/resolve-extends@21.1.0': + resolution: {integrity: sha512-SANYkxJDfMl3TvnyALWHEaiF5nc6FFaOnh7VvfxjT4X2vD4i2gVHhmfMm1fsrBwDRX98/XyM1XDo5sAd/KXcyQ==} + engines: {node: '>=22.12.0'} + + '@commitlint/rules@21.1.0': + resolution: {integrity: sha512-fOPEYSmKn1ZJptjLmCEjJfYqz0PUYr8ng6VY2ZW26sB7KtENR90CmAXHEmScBbOIZip+d/+OwqK12DFBuHTqsQ==} + engines: {node: '>=22.12.0'} + + '@commitlint/to-lines@21.0.1': + resolution: {integrity: sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==} + engines: {node: '>=22.12.0'} + + '@commitlint/top-level@21.0.2': + resolution: {integrity: sha512-s9KKM+e+mXgFeIh4n7KmOGAVT3mkJ3Fp1bBYHIK5pjeUwlEMzp/tZfb5u0Poa680AsQTXMEMRxZi1vQ9m2X5ug==} + engines: {node: '>=22.12.0'} + + '@commitlint/types@21.1.0': + resolution: {integrity: sha512-YodnnnH1Cp+08nP8HGNJAIuB6L3/vdCTHVRTfF8Ik/wRCLOTsU9zwv3yO1cSPQRDa9CLYtE+UJ2K67r7CwMSFw==} + engines: {node: '>=22.12.0'} + + '@conventional-changelog/git-client@2.7.0': + resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==} + engines: {node: '>=18'} + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.4.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1216,6 +1306,14 @@ packages: rollup: optional: true + '@simple-libs/child-process-utils@1.0.2': + resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} + engines: {node: '>=18'} + + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} + engines: {node: '>=18'} + '@sindresorhus/is@7.2.0': resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} @@ -1674,6 +1772,9 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1686,6 +1787,13 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} @@ -1697,6 +1805,9 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -1746,6 +1857,10 @@ packages: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} @@ -1797,6 +1912,10 @@ packages: '@chromatic-com/vitest': optional: true + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -1804,6 +1923,9 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -1811,6 +1933,19 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + conventional-changelog-angular@8.3.1: + resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} + engines: {node: '>=18'} + + conventional-changelog-conventionalcommits@9.3.1: + resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==} + engines: {node: '>=18'} + + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} + engines: {node: '>=18'} + hasBin: true + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1822,6 +1957,23 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} + cosmiconfig-typescript-loader@6.3.0: + resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@9.0.2: + resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1911,9 +2063,23 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} @@ -1928,6 +2094,10 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2053,6 +2223,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -2102,6 +2275,20 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + + git-raw-commits@5.0.1: + resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} + engines: {node: '>=18'} + deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. + hasBin: true + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2110,6 +2297,10 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + global-directory@5.0.0: + resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} + engines: {node: '>=20'} + globals@16.5.0: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} @@ -2144,6 +2335,10 @@ packages: resolution: {integrity: sha512-xQjs+2vrxLnAjCq+omuNkd5UQTld9/bP8+YT0LyYTlKfuSQtgUBvqhUwGugzSAh6sCdN+LnROMuLswn5hZ9Fhg==} engines: {node: '>=20.0.0'} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -2155,9 +2350,16 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2180,6 +2382,14 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} @@ -2202,6 +2412,10 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -2212,12 +2426,22 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2316,6 +2540,9 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -2346,6 +2573,10 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2555,6 +2786,14 @@ packages: package-manager-detector@1.6.0: resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2702,6 +2941,18 @@ packages: resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} engines: {node: '>=8'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2798,6 +3049,10 @@ packages: vite-plus: optional: true + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + strip-ansi@7.2.0: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} @@ -3170,6 +3425,10 @@ packages: '@cloudflare/workers-types': optional: true + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + ws@8.21.0: resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} @@ -3186,10 +3445,22 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yaml@1.10.3: resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -3281,6 +3552,123 @@ snapshots: '@cloudflare/workers-types@4.20260613.1': {} + '@commitlint/cli@21.1.0(@types/node@24.13.2)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + dependencies: + '@commitlint/config-conventional': 21.1.0 + '@commitlint/format': 21.1.0 + '@commitlint/lint': 21.1.0 + '@commitlint/load': 21.1.0(@types/node@24.13.2)(typescript@6.0.3) + '@commitlint/read': 21.1.0(conventional-commits-parser@6.4.0) + '@commitlint/types': 21.1.0 + tinyexec: 1.2.4 + yargs: 18.0.0 + transitivePeerDependencies: + - '@types/node' + - conventional-commits-filter + - conventional-commits-parser + - typescript + + '@commitlint/config-conventional@21.1.0': + dependencies: + '@commitlint/types': 21.1.0 + conventional-changelog-conventionalcommits: 9.3.1 + + '@commitlint/config-validator@21.1.0': + dependencies: + '@commitlint/types': 21.1.0 + ajv: 8.20.0 + + '@commitlint/ensure@21.1.0': + dependencies: + '@commitlint/types': 21.1.0 + es-toolkit: 1.47.1 + + '@commitlint/execute-rule@21.0.1': {} + + '@commitlint/format@21.1.0': + dependencies: + '@commitlint/types': 21.1.0 + picocolors: 1.1.1 + + '@commitlint/is-ignored@21.1.0': + dependencies: + '@commitlint/types': 21.1.0 + semver: 7.8.5 + + '@commitlint/lint@21.1.0': + dependencies: + '@commitlint/is-ignored': 21.1.0 + '@commitlint/parse': 21.1.0 + '@commitlint/rules': 21.1.0 + '@commitlint/types': 21.1.0 + + '@commitlint/load@21.1.0(@types/node@24.13.2)(typescript@6.0.3)': + dependencies: + '@commitlint/config-validator': 21.1.0 + '@commitlint/execute-rule': 21.0.1 + '@commitlint/resolve-extends': 21.1.0 + '@commitlint/types': 21.1.0 + cosmiconfig: 9.0.2(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@24.13.2)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3) + es-toolkit: 1.47.1 + is-plain-obj: 4.1.0 + picocolors: 1.1.1 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@21.0.2': {} + + '@commitlint/parse@21.1.0': + dependencies: + '@commitlint/types': 21.1.0 + conventional-changelog-angular: 8.3.1 + conventional-commits-parser: 6.4.0 + + '@commitlint/read@21.1.0(conventional-commits-parser@6.4.0)': + dependencies: + '@commitlint/top-level': 21.0.2 + '@commitlint/types': 21.1.0 + git-raw-commits: 5.0.1(conventional-commits-parser@6.4.0) + tinyexec: 1.2.4 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser + + '@commitlint/resolve-extends@21.1.0': + dependencies: + '@commitlint/config-validator': 21.1.0 + '@commitlint/types': 21.1.0 + es-toolkit: 1.47.1 + global-directory: 5.0.0 + resolve-from: 5.0.0 + + '@commitlint/rules@21.1.0': + dependencies: + '@commitlint/ensure': 21.1.0 + '@commitlint/message': 21.0.2 + '@commitlint/to-lines': 21.0.1 + '@commitlint/types': 21.1.0 + + '@commitlint/to-lines@21.0.1': {} + + '@commitlint/top-level@21.0.2': + dependencies: + escalade: 3.2.0 + + '@commitlint/types@21.1.0': + dependencies: + conventional-commits-parser: 6.4.0 + picocolors: 1.1.1 + + '@conventional-changelog/git-client@2.7.0(conventional-commits-parser@6.4.0)': + dependencies: + '@simple-libs/child-process-utils': 1.0.2 + '@simple-libs/stream-utils': 1.2.0 + semver: 7.8.5 + optionalDependencies: + conventional-commits-parser: 6.4.0 + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 @@ -3916,6 +4304,12 @@ snapshots: estree-walker: 2.0.2 picomatch: 4.0.4 + '@simple-libs/child-process-utils@1.0.2': + dependencies: + '@simple-libs/stream-utils': 1.2.0 + + '@simple-libs/stream-utils@1.2.0': {} + '@sindresorhus/is@7.2.0': {} '@speed-highlight/core@1.2.17': {} @@ -4575,12 +4969,23 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} + + argparse@2.0.1: {} + aria-query@5.3.0: dependencies: dequal: 2.0.3 @@ -4589,6 +4994,8 @@ snapshots: aria-query@5.3.2: {} + array-ify@1.0.0: {} + assertion-error@2.0.1: {} ast-types@0.16.1: @@ -4636,6 +5043,8 @@ snapshots: cac@7.0.0: {} + callsites@3.1.0: {} + chai@5.3.3: dependencies: assertion-error: 2.0.1 @@ -4664,20 +5073,60 @@ snapshots: dependencies: semver: 7.8.5 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + clsx@2.1.1: {} colorette@2.0.20: {} + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + confbox@0.1.8: {} consola@3.4.2: {} + conventional-changelog-angular@8.3.1: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@9.3.1: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@6.4.0: + dependencies: + '@simple-libs/stream-utils': 1.2.0 + meow: 13.2.0 + convert-source-map@2.0.0: {} cookie@0.6.0: {} cookie@1.1.1: {} + cosmiconfig-typescript-loader@6.3.0(@types/node@24.13.2)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3): + dependencies: + '@types/node': 24.13.2 + cosmiconfig: 9.0.2(typescript@6.0.3) + jiti: 2.6.1 + typescript: 6.0.3 + + cosmiconfig@9.0.2(typescript@6.0.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.3.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 6.0.3 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -4734,8 +5183,20 @@ snapshots: dom-accessibility-api@0.6.3: {} + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + duplexer@0.1.2: {} + emoji-regex@10.6.0: {} + + env-paths@2.2.1: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + error-stack-parser-es@1.0.5: {} es-module-lexer@2.1.0: {} @@ -4771,6 +5232,8 @@ snapshots: '@esbuild/win32-ia32': 0.28.1 '@esbuild/win32-x64': 0.28.1 + escalade@3.2.0: {} + escape-string-regexp@4.0.0: {} eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)): @@ -4924,6 +5387,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.1.2: {} + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -4972,6 +5437,18 @@ snapshots: fsevents@2.3.3: optional: true + get-caller-file@2.0.5: {} + + get-east-asian-width@1.6.0: {} + + git-raw-commits@5.0.1(conventional-commits-parser@6.4.0): + dependencies: + '@conventional-changelog/git-client': 2.7.0(conventional-commits-parser@6.4.0) + meow: 13.2.0 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -4980,6 +5457,10 @@ snapshots: dependencies: is-glob: 4.0.3 + global-directory@5.0.0: + dependencies: + ini: 6.0.0 + globals@16.5.0: {} globals@17.7.0: {} @@ -5001,14 +5482,23 @@ snapshots: imagetools-core@9.1.0: {} + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + import-meta-resolve@4.2.0: {} imurmurhash@0.1.4: {} indent-string@4.0.0: {} + ini@6.0.0: {} + inline-style-parser@0.2.7: {} + is-arrayish@0.2.1: {} + is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -5023,6 +5513,10 @@ snapshots: is-number@7.0.0: {} + is-obj@2.0.0: {} + + is-plain-obj@4.1.0: {} + is-reference@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -5046,16 +5540,26 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + jiti@2.6.1: {} + jiti@2.7.0: {} js-tokens@10.0.0: {} js-tokens@4.0.0: {} + js-yaml@4.3.0: + dependencies: + argparse: 2.0.1 + json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} jsonfile@6.2.1: @@ -5128,6 +5632,8 @@ snapshots: lilconfig@2.1.0: {} + lines-and-columns@1.2.4: {} + locate-character@3.0.0: {} locate-path@6.0.0: @@ -5164,6 +5670,8 @@ snapshots: mdn-data@2.27.1: {} + meow@13.2.0: {} + merge2@1.4.1: {} micromatch@4.0.8: @@ -5321,6 +5829,17 @@ snapshots: package-manager-detector@1.6.0: {} + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.7 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -5432,6 +5951,12 @@ snapshots: regexparam@3.0.0: {} + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + reusify@1.1.0: {} rolldown@1.1.2: @@ -5566,6 +6091,12 @@ snapshots: - react-dom - utf-8-validate + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -5918,14 +6449,33 @@ snapshots: - bufferutil - utf-8-validate + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + ws@8.21.0: {} wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 + y18n@5.0.8: {} + yaml@1.10.3: {} + yargs-parser@22.0.0: {} + + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yocto-queue@0.1.0: {} youch-core@0.3.3: From 1eb711f5d46d5568c072e09d4f821710953cc341 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 29 Jun 2026 04:05:27 -0700 Subject: [PATCH 025/141] chore: add claude hook to auto-deny `npx *` and `npm *` usage --- .claude/settings.json | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/.claude/settings.json b/.claude/settings.json index c531696..e30ed64 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -1,7 +1,26 @@ { - "$schema": "https://json.schemastore.org/claude-code-settings.json", - "enabledPlugins": { - "svelte@svelte": true, - "figma@claude-plugins-official": true - } + "$schema": "https://json.schemastore.org/claude-code-settings.json", + "enabledPlugins": { + "svelte@svelte": true, + "figma@claude-plugins-official": true + }, + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { + "if": "Bash(npm *)", + "type": "command", + "command": "echo '{ \"hookSpecificOutput\": { \"hookEventName\": \"PreToolUse\", \"permissionDecision\": \"deny\", \"permissionDecisionReason\": \"Use pnpm instead\" } }'" + }, + { + "if": "Bash(npx *)", + "type": "command", + "command": "echo '{ \"hookSpecificOutput\": { \"hookEventName\": \"PreToolUse\", \"permissionDecision\": \"deny\", \"permissionDecisionReason\": \"Use pnpm dlx instead\" } }'" + } + ] + } + ] + } } From f93969c64348b6a7e040c2c7d89cf166cdfb7979 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 29 Jun 2026 05:00:40 -0700 Subject: [PATCH 026/141] build: support inline tests --- tsconfig.app.json | 2 +- vite.config.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tsconfig.app.json b/tsconfig.app.json index 0f9200b..279edba 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -5,6 +5,6 @@ "sourceMap": true, "noEmit": false, "typeRoots": ["./@types", "./node_modules/@types", "./node_modules"], - "types": ["node", "unplugin-fonts/client"] + "types": ["node", "unplugin-fonts/client", "vitest/importMeta"] } } diff --git a/vite.config.ts b/vite.config.ts index 529665a..b813762 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -57,7 +57,12 @@ export default defineConfig((env) => { }, }), ], + define: { + // Allow vite to strip out tests in production + 'import.meta.vitest': 'undefined', + }, test: { + includeSource: ['src/**/*.{js,ts}'], expect: { requireAssertions: true, }, From 6fc416960c3429ffce4f21d29af2ad5926202f44 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 29 Jun 2026 05:02:10 -0700 Subject: [PATCH 027/141] test: test `generateColors()` --- src/lib/tokens.ts | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index f144642..55a0d93 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -1,7 +1,7 @@ // Design tokens import { theme } from '@unocss/preset-wind4/theme'; -import { interpolate, interpolatorSplineMonotone2, formatCss } from 'culori'; +import { interpolate, interpolatorSplineMonotone2, formatCss, oklch } from 'culori'; const colorStops = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const; @@ -71,3 +71,37 @@ export const fonts = { export type SizeName = string; export type TextScale = Record; export const textScale: TextScale = theme.text; + +if (import.meta.vitest) { + const { describe, it, expect } = import.meta.vitest; + + describe('generateColors', () => { + const ramps = Object.entries(brand) as [string, Record][]; + // Narrow away culori's `| undefined` so downstream reads are non-nullable. + const parse = (color: string) => { + const parsed = oklch(color); + if (!parsed) throw new Error(`unparseable color: ${color}`); + return parsed; + }; + + it.each(ramps)('preserves %s anchors that coincide with output stops', (_, ramp) => { + const scale = generateColors(ramp); + for (const stop of colorStops) { + const anchor = ramp[stop]; + if (anchor === undefined) continue; + const got = parse(scale[stop]); + const want = parse(anchor); + expect(got.l).toBeCloseTo(want.l, 5); + expect(got.c).toBeCloseTo(want.c, 5); + expect(got.h ?? 0).toBeCloseTo(want.h ?? 0, 3); + } + }); + + it.each(ramps)('ramps %s from light to dark monotonically', (_, ramp) => { + const scale = generateColors(ramp); + const lightness = colorStops.map((stop) => parse(scale[stop]).l); + const descending = lightness.every((l, i) => i === 0 || l < (lightness[i - 1] ?? Infinity)); + expect(descending).toBe(true); + }); + }); +} From bf4ca6489f6caa48e062e7c29621a56a90518ca5 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 29 Jun 2026 05:16:18 -0700 Subject: [PATCH 028/141] chore: prettify all --- .github/actions/setup-env/action.yaml | 46 +++++----- .github/dependabot.yml | 72 ++++++++-------- .github/workflows/chromatic.yml | 48 +++++------ .storybook/preview.ts | 56 ++++++------ .vscode/settings.json | 28 +++--- commitlint.config.ts | 10 +-- src/routes/+layout.ts | 2 +- svelte.config.ts | 118 +++++++++++++------------- tools/clean-build.ts | 12 +-- tsconfig.app.json | 20 ++--- tsconfig.base.json | 76 ++++++++--------- uno.config.ts | 76 ++++++++--------- vitest.shims.d.ts | 2 +- 13 files changed, 283 insertions(+), 283 deletions(-) diff --git a/.github/actions/setup-env/action.yaml b/.github/actions/setup-env/action.yaml index fbb9f30..3bce496 100644 --- a/.github/actions/setup-env/action.yaml +++ b/.github/actions/setup-env/action.yaml @@ -1,23 +1,23 @@ -name: Setup Environment -description: Sets up development environment. - -# Required Permissions: -# - contents: read - -runs: - using: 'composite' - - steps: - - name: Install pnpm - uses: pnpm/action-setup@v6 - with: - cache: true - - - name: Set up Node.js - uses: actions/setup-node@v6 - with: - node-version-file: 'package.json' - - - name: Install dependencies - run: pnpm install - shell: bash +name: Setup Environment +description: Sets up development environment. + +# Required Permissions: +# - contents: read + +runs: + using: 'composite' + + steps: + - name: Install pnpm + uses: pnpm/action-setup@v6 + with: + cache: true + + - name: Set up Node.js + uses: actions/setup-node@v6 + with: + node-version-file: 'package.json' + + - name: Install dependencies + run: pnpm install + shell: bash diff --git a/.github/dependabot.yml b/.github/dependabot.yml index dc5e197..adea0fc 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,36 +1,36 @@ -version: 2 - -updates: - - package-ecosystem: 'github-actions' - directory: '/' - schedule: - interval: 'weekly' - commit-message: - prefix: 'ci' - open-pull-requests-limit: 2 - groups: - security: - applies-to: security-updates - patterns: - - '*' - version: - applies-to: version-updates - patterns: - - '*' - - package-ecosystem: 'npm' - directory: '/' - versioning-strategy: 'increase' - schedule: - interval: 'weekly' - open-pull-requests-limit: 0 - commit-message: - prefix: 'build(deps)' - groups: - security: - applies-to: security-updates - patterns: - - '*' - version: - applies-to: version-updates - patterns: - - '*' +version: 2 + +updates: + - package-ecosystem: 'github-actions' + directory: '/' + schedule: + interval: 'weekly' + commit-message: + prefix: 'ci' + open-pull-requests-limit: 2 + groups: + security: + applies-to: security-updates + patterns: + - '*' + version: + applies-to: version-updates + patterns: + - '*' + - package-ecosystem: 'npm' + directory: '/' + versioning-strategy: 'increase' + schedule: + interval: 'weekly' + open-pull-requests-limit: 0 + commit-message: + prefix: 'build(deps)' + groups: + security: + applies-to: security-updates + patterns: + - '*' + version: + applies-to: version-updates + patterns: + - '*' diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 6ef416d..bd56f09 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -1,24 +1,24 @@ -name: 'Chromatic' - -on: push - -jobs: - chromatic: - name: Run Chromatic - runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v7 - with: - fetch-depth: 0 - - - name: Setup Environment - uses: ./.github/actions/setup-env - - - name: Run Chromatic - uses: chromaui/action@latest - with: - projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - autoAcceptChanges: 'main' - exitOnceUploaded: true - skip: 'production' +name: 'Chromatic' + +on: push + +jobs: + chromatic: + name: Run Chromatic + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Setup Environment + uses: ./.github/actions/setup-env + + - name: Run Chromatic + uses: chromaui/action@latest + with: + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + autoAcceptChanges: 'main' + exitOnceUploaded: true + skip: 'production' diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 2890767..17ef383 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -1,28 +1,28 @@ -import type { Preview } from '@storybook/sveltekit'; - -import 'unfonts.css'; -import 'virtual:uno.css'; - -const preview: Preview = { - tags: ['autodocs'], - - parameters: { - layout: 'centered', - - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/i, - }, - }, - - a11y: { - // 'todo' - show a11y violations in the test UI only - // 'error' - fail CI on a11y violations - // 'off' - skip a11y checks entirely - test: 'todo', - }, - }, -}; - -export default preview; +import type { Preview } from '@storybook/sveltekit'; + +import 'unfonts.css'; +import 'virtual:uno.css'; + +const preview: Preview = { + tags: ['autodocs'], + + parameters: { + layout: 'centered', + + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + + a11y: { + // 'todo' - show a11y violations in the test UI only + // 'error' - fail CI on a11y violations + // 'off' - skip a11y checks entirely + test: 'todo', + }, + }, +}; + +export default preview; diff --git a/.vscode/settings.json b/.vscode/settings.json index b5c0b12..286067d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,14 +1,14 @@ -{ - "svelte.plugin.svelte.defaultScriptLanguage": "ts", - "[svelte]": { - "editor.defaultFormatter": "svelte.svelte-vscode" - }, - "debug.javascript.terminalOptions": { - "resolveSourceMapLocations": [ - "${workspaceFolder}/**", - "!**/node_modules/**", - "**/node_modules/.vite-temp/**" - ] - }, - "js/ts.experimental.useTsgo": false -} +{ + "svelte.plugin.svelte.defaultScriptLanguage": "ts", + "[svelte]": { + "editor.defaultFormatter": "svelte.svelte-vscode" + }, + "debug.javascript.terminalOptions": { + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**", + "**/node_modules/.vite-temp/**" + ] + }, + "js/ts.experimental.useTsgo": false +} diff --git a/commitlint.config.ts b/commitlint.config.ts index 94b2b92..9338159 100644 --- a/commitlint.config.ts +++ b/commitlint.config.ts @@ -1,5 +1,5 @@ -import type { UserConfig } from '@commitlint/types'; - -const config: UserConfig = { extends: ['@commitlint/config-conventional'] }; - -export default config; +import type { UserConfig } from '@commitlint/types'; + +const config: UserConfig = { extends: ['@commitlint/config-conventional'] }; + +export default config; diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts index 6492aab..df46931 100644 --- a/src/routes/+layout.ts +++ b/src/routes/+layout.ts @@ -1 +1 @@ -export const prerender = 'auto'; +export const prerender = 'auto'; diff --git a/svelte.config.ts b/svelte.config.ts index 756a39c..7997e4e 100644 --- a/svelte.config.ts +++ b/svelte.config.ts @@ -1,59 +1,59 @@ -import type { ConfigEnv } from 'vite'; - -import type { Config, KitConfig } from '@sveltejs/kit'; -import adapter from '@sveltejs/adapter-cloudflare'; - -import type { TsConfigJson, OmitIndexSignature } from 'type-fest'; - -export type ConfigFn = (env: Partial) => OmitIndexSignature; - -const config: ConfigFn = ({ mode }) => { - const isDev = mode == 'development'; - - const cspDirectives = { - 'default-src': ['self'], - 'connect-src': ['self'], - 'font-src': ['self', 'data:'], - 'img-src': ['self', 'data:'], - 'object-src': ['none'], - 'base-uri': ['none'], - 'frame-ancestors': ['none'], - 'form-action': ['self'], - 'script-src': ['self', 'strict-dynamic'], - 'style-src': ['self', 'unsafe-inline'], - 'worker-src': isDev ? ['self', 'blob:'] : ['self'], - 'upgrade-insecure-requests': true, - } satisfies NonNullable['directives']; - - return { - compilerOptions: { - // Force runes mode for the project, except for libraries. Can be removed in svelte 6. - runes: ({ filename }) => - filename.split(/[/\\]/).includes('node_modules') ? undefined : true, - experimental: { - async: true, - }, - }, - kit: { - adapter: adapter(), - typescript: { - config(tsconfig: TsConfigJson) { - // exclude tooling from app `tsconfig.json` - const dropFromApp = [/vite\.config\.(c|m)?[jt]s$/]; - tsconfig.include = (tsconfig.include ?? []).filter( - (p) => !dropFromApp.some((re) => re.test(p)), - ); - - tsconfig.include.push('../.storybook/preview.ts'); - - return tsconfig; - }, - }, - csp: { - directives: cspDirectives, - }, - }, - }; -}; - -export default config; +import type { ConfigEnv } from 'vite'; + +import type { Config, KitConfig } from '@sveltejs/kit'; +import adapter from '@sveltejs/adapter-cloudflare'; + +import type { TsConfigJson, OmitIndexSignature } from 'type-fest'; + +export type ConfigFn = (env: Partial) => OmitIndexSignature; + +const config: ConfigFn = ({ mode }) => { + const isDev = mode == 'development'; + + const cspDirectives = { + 'default-src': ['self'], + 'connect-src': ['self'], + 'font-src': ['self', 'data:'], + 'img-src': ['self', 'data:'], + 'object-src': ['none'], + 'base-uri': ['none'], + 'frame-ancestors': ['none'], + 'form-action': ['self'], + 'script-src': ['self', 'strict-dynamic'], + 'style-src': ['self', 'unsafe-inline'], + 'worker-src': isDev ? ['self', 'blob:'] : ['self'], + 'upgrade-insecure-requests': true, + } satisfies NonNullable['directives']; + + return { + compilerOptions: { + // Force runes mode for the project, except for libraries. Can be removed in svelte 6. + runes: ({ filename }) => + filename.split(/[/\\]/).includes('node_modules') ? undefined : true, + experimental: { + async: true, + }, + }, + kit: { + adapter: adapter(), + typescript: { + config(tsconfig: TsConfigJson) { + // exclude tooling from app `tsconfig.json` + const dropFromApp = [/vite\.config\.(c|m)?[jt]s$/]; + tsconfig.include = (tsconfig.include ?? []).filter( + (p) => !dropFromApp.some((re) => re.test(p)), + ); + + tsconfig.include.push('../.storybook/preview.ts'); + + return tsconfig; + }, + }, + csp: { + directives: cspDirectives, + }, + }, + }; +}; + +export default config; diff --git a/tools/clean-build.ts b/tools/clean-build.ts index 6212264..8a28271 100644 --- a/tools/clean-build.ts +++ b/tools/clean-build.ts @@ -1,6 +1,6 @@ -// Used to workaround bug where Cloudflare's workerd holds a lock on the .svelte-kit/cloudflare directory, preventing `vite build` from replacing it. - -import { rm } from 'node:fs/promises'; -import { normalize } from 'node:path'; - -await rm(normalize('./.svelte-kit/cloudflare'), { recursive: true, force: true }); +// Used to workaround bug where Cloudflare's workerd holds a lock on the .svelte-kit/cloudflare directory, preventing `vite build` from replacing it. + +import { rm } from 'node:fs/promises'; +import { normalize } from 'node:path'; + +await rm(normalize('./.svelte-kit/cloudflare'), { recursive: true, force: true }); diff --git a/tsconfig.app.json b/tsconfig.app.json index 279edba..8e99402 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -1,10 +1,10 @@ -{ - "extends": ["./tsconfig.base.json", "./.svelte-kit/tsconfig.json"], - "compilerOptions": { - "lib": ["DOM", "ESNext"], - "sourceMap": true, - "noEmit": false, - "typeRoots": ["./@types", "./node_modules/@types", "./node_modules"], - "types": ["node", "unplugin-fonts/client", "vitest/importMeta"] - } -} +{ + "extends": ["./tsconfig.base.json", "./.svelte-kit/tsconfig.json"], + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "sourceMap": true, + "noEmit": false, + "typeRoots": ["./@types", "./node_modules/@types", "./node_modules"], + "types": ["node", "unplugin-fonts/client", "vitest/importMeta"] + } +} diff --git a/tsconfig.base.json b/tsconfig.base.json index b3c30ef..d0dc448 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,38 +1,38 @@ -{ - "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "lib": ["ESNext"], - "moduleResolution": "Bundler", - "verbatimModuleSyntax": true, - "isolatedModules": true, - "resolveJsonModule": true, - "forceConsistentCasingInFileNames": true, - "moduleDetection": "force", - "erasableSyntaxOnly": true, - - "skipLibCheck": true, - "noErrorTruncation": true, - "noUncheckedIndexedAccess": true, - "exactOptionalPropertyTypes": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitOverride": true, - "noFallthroughCasesInSwitch": true, - "allowUnusedLabels": false, - "allowUnreachableCode": false, - "noUncheckedSideEffectImports": true, - - // Handled by @typescript-eslint - "noUnusedLocals": false, - "noUnusedParameters": false, - - "rewriteRelativeImportExtensions": true, - "sourceMap": true, - "noEmit": true, - "composite": true, - - "outDir": "./node_modules/.cache/tsc/", - - "types": [] - } -} +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "lib": ["ESNext"], + "moduleResolution": "Bundler", + "verbatimModuleSyntax": true, + "isolatedModules": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "moduleDetection": "force", + "erasableSyntaxOnly": true, + + "skipLibCheck": true, + "noErrorTruncation": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitOverride": true, + "noFallthroughCasesInSwitch": true, + "allowUnusedLabels": false, + "allowUnreachableCode": false, + "noUncheckedSideEffectImports": true, + + // Handled by @typescript-eslint + "noUnusedLocals": false, + "noUnusedParameters": false, + + "rewriteRelativeImportExtensions": true, + "sourceMap": true, + "noEmit": true, + "composite": true, + + "outDir": "./node_modules/.cache/tsc/", + + "types": [] + } +} diff --git a/uno.config.ts b/uno.config.ts index 8ffbed3..a791734 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -1,38 +1,38 @@ -import { - defineConfig, - presetIcons, - presetTypography, - presetWebFonts, - transformerVariantGroup, - transformerDirectives, - transformerCompileClass, - presetWind4, -} from 'unocss'; -import extractorSvelte from '@unocss/extractor-svelte'; - -import { brandColors, fonts } from './src/lib/tokens'; - -export default defineConfig({ - presets: [ - presetWind4({ - preflights: { - reset: true, - }, - }), - presetIcons({ - warn: true, - }), - presetTypography(), - presetWebFonts({ - provider: 'none', // handled by unplugin-font with vite - fonts, - }), - ], - transformers: [transformerVariantGroup(), transformerDirectives(), transformerCompileClass()], - extractors: [extractorSvelte()], - theme: { - colors: { - brand: brandColors, - }, - }, -}); +import { + defineConfig, + presetIcons, + presetTypography, + presetWebFonts, + transformerVariantGroup, + transformerDirectives, + transformerCompileClass, + presetWind4, +} from 'unocss'; +import extractorSvelte from '@unocss/extractor-svelte'; + +import { brandColors, fonts } from './src/lib/tokens'; + +export default defineConfig({ + presets: [ + presetWind4({ + preflights: { + reset: true, + }, + }), + presetIcons({ + warn: true, + }), + presetTypography(), + presetWebFonts({ + provider: 'none', // handled by unplugin-font with vite + fonts, + }), + ], + transformers: [transformerVariantGroup(), transformerDirectives(), transformerCompileClass()], + extractors: [extractorSvelte()], + theme: { + colors: { + brand: brandColors, + }, + }, +}); diff --git a/vitest.shims.d.ts b/vitest.shims.d.ts index 7782f28..03b1801 100644 --- a/vitest.shims.d.ts +++ b/vitest.shims.d.ts @@ -1 +1 @@ -/// \ No newline at end of file +/// From 938e6082929e9c789d98d44ff8e259285c394b58 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 29 Jun 2026 19:25:24 -0700 Subject: [PATCH 029/141] build(storybook): add PaddingDecorator to prevent clipping of visuals outside box model --- .storybook/PaddingDecorator.svelte | 19 +++++++++++++++++++ svelte.config.ts | 4 ++++ 2 files changed, 23 insertions(+) create mode 100644 .storybook/PaddingDecorator.svelte diff --git a/.storybook/PaddingDecorator.svelte b/.storybook/PaddingDecorator.svelte new file mode 100644 index 0000000..bbf414f --- /dev/null +++ b/.storybook/PaddingDecorator.svelte @@ -0,0 +1,19 @@ + + +
+ {@render children?.()} +
+ + diff --git a/svelte.config.ts b/svelte.config.ts index 7997e4e..7bfea6d 100644 --- a/svelte.config.ts +++ b/svelte.config.ts @@ -36,6 +36,9 @@ const config: ConfigFn = ({ mode }) => { }, kit: { adapter: adapter(), + alias: { + $storybook: '.storybook/*', + }, typescript: { config(tsconfig: TsConfigJson) { // exclude tooling from app `tsconfig.json` @@ -45,6 +48,7 @@ const config: ConfigFn = ({ mode }) => { ); tsconfig.include.push('../.storybook/preview.ts'); + tsconfig.include.push('../.storybook/**/*.svelte'); return tsconfig; }, From bc84b61b72b02633f7ff75728ad7a2ac50b61ef4 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 29 Jun 2026 19:39:57 -0700 Subject: [PATCH 030/141] chore: add `.gitattributes` to ensure correct line endings --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf From 690aa7c1af2a249ac8f21df7d8f406e35b737efd Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 29 Jun 2026 20:52:47 -0700 Subject: [PATCH 031/141] build: refactor `tsconfig`s into solution style svelte language tools doesn't support project references properly --- .github/workflows/test.yml | 2 +- package.json | 4 ++-- svelte.config.ts | 2 ++ tsconfig.app.json | 2 -- tsconfig.base.json | 3 ++- tsconfig.json | 12 ++---------- tsconfig.tools.json | 11 +++++++++++ 7 files changed, 20 insertions(+), 16 deletions(-) create mode 100644 tsconfig.tools.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9512223..c66307a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,7 @@ jobs: - parallel: - name: Svelte Check - run: pnpm run check:svelte --fail-on-warnings + run: pnpm run check --fail-on-warnings - name: ESLint run: pnpm run lint:eslint diff --git a/package.json b/package.json index 924a0ac..5f9ded9 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,9 @@ "preview": "wrangler dev .svelte-kit/cloudflare/_worker.js --port 4173", "prepare": "pnpm run gen || echo ''", "precheck:wrangler": "pnpm run /^gen:wrangler$/", - "check:wrangler": "wrangler types ./@types/worker-configuration.d.ts --check", "precheck:svelte": "pnpm run /^gen:svelte-kit$/", - "check:svelte": "svelte-check --tsconfig ./tsconfig.app.json", + "check:app": "svelte-check --tsconfig ./tsconfig.app.json", + "check:tools": "svelte-check --tsconfig ./tsconfig.tools.json", "check": "pnpm run /^check:.*/", "watch:svelte": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.app.json --watch", "lint:prettier": "prettier --check .", diff --git a/svelte.config.ts b/svelte.config.ts index 7bfea6d..d7cf70b 100644 --- a/svelte.config.ts +++ b/svelte.config.ts @@ -50,6 +50,8 @@ const config: ConfigFn = ({ mode }) => { tsconfig.include.push('../.storybook/preview.ts'); tsconfig.include.push('../.storybook/**/*.svelte'); + delete tsconfig.compilerOptions?.noEmit; + return tsconfig; }, }, diff --git a/tsconfig.app.json b/tsconfig.app.json index 8e99402..dff8504 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -2,8 +2,6 @@ "extends": ["./tsconfig.base.json", "./.svelte-kit/tsconfig.json"], "compilerOptions": { "lib": ["DOM", "ESNext"], - "sourceMap": true, - "noEmit": false, "typeRoots": ["./@types", "./node_modules/@types", "./node_modules"], "types": ["node", "unplugin-fonts/client", "vitest/importMeta"] } diff --git a/tsconfig.base.json b/tsconfig.base.json index d0dc448..1edb38c 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -28,8 +28,9 @@ "rewriteRelativeImportExtensions": true, "sourceMap": true, - "noEmit": true, + "declarationMap": true, "composite": true, + "noEmit": false, "outDir": "./node_modules/.cache/tsc/", diff --git a/tsconfig.json b/tsconfig.json index 7248b42..736284c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,4 @@ -// Tools { - "extends": ["./.svelte-kit/tsconfig.json", "./tsconfig.base.json"], - "compilerOptions": { - "checkJs": true, - "types": ["node"] - }, - - "include": ["./*", "./.storybook/**/*", "./tools/**/*", "@types/**/*"], - "exclude": ["./.storybook/preview.ts"], - "references": [{ "path": "./tsconfig.app.json" }] + "files": [], + "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.tools.json" }] } diff --git a/tsconfig.tools.json b/tsconfig.tools.json new file mode 100644 index 0000000..609c8a7 --- /dev/null +++ b/tsconfig.tools.json @@ -0,0 +1,11 @@ +{ + "extends": ["./.svelte-kit/tsconfig.json", "./tsconfig.base.json"], + "compilerOptions": { + "checkJs": true, + "types": ["node"] + }, + + "include": ["./*", "./.storybook/**/*", "./tools/**/*", "@types/**/*"], + "exclude": ["./.storybook/preview.ts", "./.storybook/**/*.svelte"], + "references": [{ "path": "./tsconfig.app.json" }] +} From 0e1990cf8f1bd47c1684978ed5571e704d15d6d9 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 26 Jun 2026 04:43:47 -0700 Subject: [PATCH 032/141] feat: impl button --- package.json | 1 + pnpm-lock.yaml | 10 +++++ src/lib/Button/Button.stories.svelte | 60 ++++++++++++++++++++++++++++ src/lib/Button/Button.svelte | 22 ++++++++++ src/lib/index.ts | 1 + 5 files changed, 94 insertions(+) create mode 100644 src/lib/Button/Button.stories.svelte create mode 100644 src/lib/Button/Button.svelte diff --git a/package.json b/package.json index 5f9ded9..9563008 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@commitlint/config-conventional": "^21.1.0", "@commitlint/types": "^21.1.0", "@eslint/js": "^10.0.1", + "@iconify-json/mdi": "^1.2.3", "@storybook/addon-a11y": "^10.4.6", "@storybook/addon-docs": "^10.4.6", "@storybook/addon-svelte-csf": "^5.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fc7ccc..8e25151 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) + '@iconify-json/mdi': + specifier: ^1.2.3 + version: 1.2.3 '@storybook/addon-a11y': specifier: ^10.4.6 version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) @@ -606,6 +609,9 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@iconify-json/mdi@1.2.3': + resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==} + '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -3859,6 +3865,10 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@iconify-json/mdi@1.2.3': + dependencies: + '@iconify/types': 2.0.0 + '@iconify/types@2.0.0': {} '@iconify/utils@3.1.3': diff --git a/src/lib/Button/Button.stories.svelte b/src/lib/Button/Button.stories.svelte new file mode 100644 index 0000000..6a302d8 --- /dev/null +++ b/src/lib/Button/Button.stories.svelte @@ -0,0 +1,60 @@ + + +{#snippet bell()} + +{/snippet} + +{#snippet template(args: Args)} +
+
+ + Default +
+
+ + Hover +
+
+ + Active +
+
+ + Focus Visible +
+
+{/snippet} + + + + + + diff --git a/src/lib/Button/Button.svelte b/src/lib/Button/Button.svelte new file mode 100644 index 0000000..275cb39 --- /dev/null +++ b/src/lib/Button/Button.svelte @@ -0,0 +1,22 @@ + + + + {@render icon?.()} + {@render children?.()} + diff --git a/src/lib/index.ts b/src/lib/index.ts index 856f2b6..8a00082 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1 +1,2 @@ // place files you want to import through the `$lib` alias in this folder. +export { default as Button } from './Button/Button.svelte'; From 72437f584ec57af72383ba1a7be384e6b8053a49 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sat, 4 Jul 2026 18:18:37 -0700 Subject: [PATCH 033/141] build: bump `pnpm` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9563008..a54d3de 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "vitest-browser-svelte": "^2.1.1", "wrangler": "^4.104.0" }, - "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b", + "packageManager": "pnpm@11.10.0+sha512.0b7f8b98060031904c017e3a41eb187a16d40eeb829b95c4f8cb03681761fc4ab53dd219115b9b447f4dce1a05a214764461e7d3703392a9f32f9511ce8c86c8", "devEngines": { "runtime": { "name": "node", From a99d09fbd25f951ac4c3207e5cd415807a50ee8f Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 5 Jul 2026 00:16:21 -0700 Subject: [PATCH 034/141] chore: add more eslint rules --- eslint.config.js | 78 ------------------------- eslint.config.ts | 148 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + pnpm-lock.yaml | 19 ++++++ 4 files changed, 168 insertions(+), 78 deletions(-) delete mode 100644 eslint.config.js create mode 100644 eslint.config.ts diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index 0419f3f..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,78 +0,0 @@ -// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format -import storybook from 'eslint-plugin-storybook'; - -import prettier from 'eslint-config-prettier'; -import path from 'node:path'; -import js from '@eslint/js'; -import svelte from 'eslint-plugin-svelte'; -import unocss from '@unocss/eslint-config/flat'; -import { defineConfig, includeIgnoreFile, globalIgnores } from 'eslint/config'; -import globals from 'globals'; -import ts from 'typescript-eslint'; - -import svelteConfig from './svelte.config.ts'; - -const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); -const extraFileExtensions = ['.svelte']; - -export default defineConfig( - globalIgnores(['!.storybook'], 'Include Storybook Directory'), - includeIgnoreFile(gitignorePath), - js.configs.recommended, - ts.configs.strictTypeChecked, - ts.configs.stylisticTypeChecked, - svelte.configs.recommended, - unocss, - /** @type {import('eslint/config').Config[]} */ ( - /** @type {unknown} */ (storybook.configs['flat/recommended']) - ), - prettier, - svelte.configs.prettier, - { - languageOptions: { - globals: { ...globals.browser, ...globals.node }, - parserOptions: { - projectService: true, - extraFileExtensions, - }, - }, - linterOptions: { - reportUnusedDisableDirectives: 'error', - reportUnusedInlineConfigs: 'error', - }, - rules: { - // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. - // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors - 'no-undef': 'off', - }, - }, - { - files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], - languageOptions: { - parserOptions: { - parser: ts.parser, - projectService: true, - svelteConfig: svelteConfig({ mode: 'development' }), - extraFileExtensions, - }, - }, - }, - { - // Override or add rule settings here, such as: - // 'svelte/button-has-type': 'error' - rules: { - '@typescript-eslint/no-unused-vars': [ - 'error', - { - enableAutofixRemoval: { imports: true }, - }, - ], - '@typescript-eslint/no-unnecessary-condition': [ - 'error', - { - checkTypePredicates: true, - }, - ], - }, - }, -); diff --git a/eslint.config.ts b/eslint.config.ts new file mode 100644 index 0000000..4bc5bb7 --- /dev/null +++ b/eslint.config.ts @@ -0,0 +1,148 @@ +// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format +import storybook from 'eslint-plugin-storybook'; + +import prettier from 'eslint-config-prettier'; +import path from 'node:path'; +import js from '@eslint/js'; +import svelte from 'eslint-plugin-svelte'; +import unocss from '@unocss/eslint-config/flat'; +import { defineConfig, includeIgnoreFile, globalIgnores, type Config } from 'eslint/config'; +import globals from 'globals'; +import ts, { type CompatibleConfigArray } from 'typescript-eslint'; +import stylistic from '@stylistic/eslint-plugin'; + +import svelteConfig from './svelte.config.ts'; + +const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); +const extraFileExtensions = ['.svelte']; + +function stripFileFilter(...configs: CompatibleConfigArray[]): Config[] { + // Split each config's `rules` into a `files`-less object so they apply to every + // file, while the original keeps its plugin/parser registration scoped as-is. + return configs.flat().flatMap(({ rules, ...config }) => (rules ? [config, { rules }] : [config])); +} + +export default defineConfig( + globalIgnores(['!.storybook'], 'Include Storybook Directory'), + includeIgnoreFile(gitignorePath), + js.configs.recommended, + stripFileFilter(ts.configs.strictTypeChecked, ts.configs.stylisticTypeChecked), + svelte.configs.recommended, + unocss, + storybook.configs['flat/recommended'] as unknown as Config[], + prettier, + svelte.configs.prettier, + { + plugins: { + '@stylistic': stylistic, + }, + languageOptions: { + globals: { ...globals.browser, ...globals.node }, + parserOptions: { + projectService: true, + extraFileExtensions, + }, + }, + linterOptions: { + reportUnusedDisableDirectives: 'error', + reportUnusedInlineConfigs: 'error', + }, + rules: { + // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. + // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + 'no-undef': 'off', + }, + }, + { + files: ['**/*.svelte', '**/*.svelte.?({mc}){tj}s'], + languageOptions: { + parserOptions: { + parser: ts.parser, + projectService: true, + svelteConfig: svelteConfig({ mode: 'development' }), + extraFileExtensions, + }, + }, + rules: { + 'prefer-const': 'off', // covered by svelte plugin + }, + }, + { + // Override or add rule settings here, such as: + // 'svelte/button-has-type': 'error' + rules: { + // --- Possible Problems --- + 'array-callback-return': ['error', { allowImplicit: true }], + 'no-constructor-return': 'error', + 'no-promise-executor-return': 'error', + 'no-self-compare': 'error', + 'no-unmodified-loop-condition': 'error', + 'no-unreachable-loop': 'error', + 'require-atomic-updates': 'error', + 'no-implicit-coercion': 'error', + + // --- Security / correctness --- + eqeqeq: ['error', 'always', { null: 'ignore' }], + 'no-new-wrappers': 'error', + 'no-object-constructor': 'error', + 'no-return-assign': ['error', 'always'], + 'no-sequences': 'error', + 'no-new': 'error', + 'no-octal-escape': 'error', + 'no-proto': 'error', + 'no-iterator': 'error', + 'no-caller': 'error', + 'no-extend-native': 'error', + 'no-multi-str': 'error', + 'no-div-regex': 'error', + 'no-label-var': 'error', + 'no-extra-label': 'error', + 'no-labels': 'error', // safe in runes mode (no `$:`) + 'guard-for-in': 'error', + radix: 'error', + 'symbol-description': 'error', + yoda: 'error', + 'no-undef-init': 'error', + + // --- Modernization / cleanup --- + 'object-shorthand': ['error', 'always'], + 'prefer-template': 'error', + 'prefer-arrow-callback': ['error', { allowNamedFunctions: true }], + 'prefer-object-has-own': 'error', + 'prefer-object-spread': 'error', + 'prefer-exponentiation-operator': 'error', + 'prefer-numeric-literals': 'error', + 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }], + 'logical-assignment-operators': ['error', 'always'], + 'operator-assignment': ['error', 'always'], + 'no-useless-call': 'error', + 'no-useless-computed-key': 'error', + 'no-useless-concat': 'error', + 'no-useless-rename': 'error', + 'no-useless-return': 'error', + 'no-lone-blocks': 'error', + 'no-lonely-if': 'error', + 'no-unneeded-ternary': 'error', + 'no-else-return': ['error', { allowElseIf: false }], + 'no-extra-bind': 'error', + 'no-multi-assign': 'error', + 'default-case-last': 'error', + 'grouped-accessor-pairs': 'error', + 'func-name-matching': 'error', + + '@stylistic/quotes': ['error', 'single', { avoidEscape: true, ignoreStringLiterals: true }], + '@typescript-eslint/no-unused-vars': [ + 'error', + { + enableAutofixRemoval: { imports: true }, + }, + ], + '@typescript-eslint/no-unnecessary-condition': [ + 'error', + { + checkTypePredicates: true, + }, + ], + }, + }, +); diff --git a/package.json b/package.json index a54d3de..4244cdd 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "@storybook/addon-svelte-csf": "^5.1.2", "@storybook/addon-vitest": "^10.4.6", "@storybook/sveltekit": "^10.4.6", + "@stylistic/eslint-plugin": "^5.10.0", "@sveltejs/adapter-cloudflare": "^7.2.9", "@sveltejs/enhanced-img": "^0.11.0", "@sveltejs/kit": "^2.68.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e25151..fff2f54 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,6 +65,9 @@ importers: '@storybook/sveltekit': specifier: ^10.4.6 version: 10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@stylistic/eslint-plugin': + specifier: ^5.10.0 + version: 5.10.0(eslint@10.5.0(jiti@2.7.0)) '@sveltejs/adapter-cloudflare': specifier: ^7.2.9 version: 7.2.9(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0) @@ -1442,6 +1445,12 @@ packages: svelte: ^5.0.0 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + '@stylistic/eslint-plugin@5.10.0': + resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 + '@sveltejs/acorn-typescript@1.0.10': resolution: {integrity: sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==} peerDependencies: @@ -4457,6 +4466,16 @@ snapshots: - rollup - webpack + '@stylistic/eslint-plugin@5.10.0(eslint@10.5.0(jiti@2.7.0))': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@typescript-eslint/types': 8.62.0 + eslint: 10.5.0(jiti@2.7.0) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.4 + '@sveltejs/acorn-typescript@1.0.10(acorn@8.17.0)': dependencies: acorn: 8.17.0 From 24ef2c3ccbe13e30310f91c845aa762054544c62 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 5 Jul 2026 00:17:18 -0700 Subject: [PATCH 035/141] chore: fix lint error in `svelte.config.ts` --- svelte.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/svelte.config.ts b/svelte.config.ts index d7cf70b..21abf20 100644 --- a/svelte.config.ts +++ b/svelte.config.ts @@ -8,7 +8,7 @@ import type { TsConfigJson, OmitIndexSignature } from 'type-fest'; export type ConfigFn = (env: Partial) => OmitIndexSignature; const config: ConfigFn = ({ mode }) => { - const isDev = mode == 'development'; + const isDev = mode === 'development'; const cspDirectives = { 'default-src': ['self'], From 9978414b8f7d63ab46b92e38b8a13f85985df208 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 5 Jul 2026 01:25:54 -0700 Subject: [PATCH 036/141] chore: add import sorting with eslint --- eslint.config.ts | 97 ++++++++++++++++++++++++++++++++++++++++++++++-- package.json | 1 + pnpm-lock.yaml | 24 ++++++++++++ 3 files changed, 118 insertions(+), 4 deletions(-) diff --git a/eslint.config.ts b/eslint.config.ts index 4bc5bb7..be85f0e 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -6,16 +6,73 @@ import path from 'node:path'; import js from '@eslint/js'; import svelte from 'eslint-plugin-svelte'; import unocss from '@unocss/eslint-config/flat'; -import { defineConfig, includeIgnoreFile, globalIgnores, type Config } from 'eslint/config'; +import { defineConfig, includeIgnoreFile, type Config } from 'eslint/config'; import globals from 'globals'; import ts, { type CompatibleConfigArray } from 'typescript-eslint'; import stylistic from '@stylistic/eslint-plugin'; +import perfectionist, { type SortImportsOptions } from 'eslint-plugin-perfectionist'; +import { Alphabet } from 'eslint-plugin-perfectionist/alphabet'; import svelteConfig from './svelte.config.ts'; +import type { UndefinedOnPartialDeep } from 'type-fest'; const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); const extraFileExtensions = ['.svelte']; +// sort subpaths before hyphenated packages +const alphabet = Alphabet.generateRecommendedAlphabet() + .sortByNaturalSort() + .placeCharacterBefore({ characterBefore: '/', characterAfter: '-' }) + .placeCharacterBefore({ characterBefore: '.', characterAfter: '/' }) + .getCharacters(); + +function importSortRule(hoistedGroups?: string[], files?: Config['files']) { + type GroupNames = NonNullable; + + const result = { + ...(files !== undefined && { files }), + rules: { + 'perfectionist/sort-imports': [ + 'warn', + { + type: 'custom', + alphabet, + order: 'asc', + specialCharacters: 'trim', + fallbackSort: { type: 'natural', order: 'asc' }, + tsconfig: { + rootDir: '.', + }, + newlinesBetween: 0, + // mirrors `svelte.config.ts` kit alias and default sveltekit aliases + internalPattern: ['^\\$lib(/.*)?$', '^\\$app/.*', '^\\$env/.*', '^\\$storybook(/.*)?$'], + customGroups: [ + { groupName: 'svelte', elementNamePattern: '^svelte(/.*)?|^@sveltejs/kit$' }, + { groupName: 'storybook', elementNamePattern: '^@storybook/.*$' }, + ], + groups: [ + 'builtin', + { newlinesBetween: 1 }, + ...((hoistedGroups as GroupNames | undefined)?.concat([{ newlinesBetween: 1 }]) ?? []), + 'external', + { newlinesBetween: 1 }, + ['internal', 'tsconfig-path'], + { newlinesBetween: 1 }, + 'parent', + 'sibling', + 'index', + { newlinesBetween: 1 }, + 'side-effect', + 'unknown', + ], + }, + ], + }, + } as const satisfies UndefinedOnPartialDeep; + + return result as Config; +} + function stripFileFilter(...configs: CompatibleConfigArray[]): Config[] { // Split each config's `rules` into a `files`-less object so they apply to every // file, while the original keeps its plugin/parser registration scoped as-is. @@ -23,8 +80,9 @@ function stripFileFilter(...configs: CompatibleConfigArray[]): Config[] { } export default defineConfig( - globalIgnores(['!.storybook'], 'Include Storybook Directory'), - includeIgnoreFile(gitignorePath), + includeIgnoreFile(gitignorePath, { + gitignoreResolution: true, + }), js.configs.recommended, stripFileFilter(ts.configs.strictTypeChecked, ts.configs.stylisticTypeChecked), svelte.configs.recommended, @@ -32,9 +90,12 @@ export default defineConfig( storybook.configs['flat/recommended'] as unknown as Config[], prettier, svelte.configs.prettier, + importSortRule(['svelte'], ['src/**/*', '@types/**/*']), + importSortRule(['storybook', 'svelte'], ['src/**/*.stories.svelte']), { plugins: { '@stylistic': stylistic, + perfectionist, }, languageOptions: { globals: { ...globals.browser, ...globals.node }, @@ -74,7 +135,7 @@ export default defineConfig( // --- Possible Problems --- 'array-callback-return': ['error', { allowImplicit: true }], 'no-constructor-return': 'error', - 'no-promise-executor-return': 'error', + 'no-promise-executor-return': ['error', { allowVoid: true }], 'no-self-compare': 'error', 'no-unmodified-loop-condition': 'error', 'no-unreachable-loop': 'error', @@ -130,6 +191,34 @@ export default defineConfig( 'grouped-accessor-pairs': 'error', 'func-name-matching': 'error', + '@typescript-eslint/consistent-type-imports': ['error', { fixStyle: 'inline-type-imports' }], + '@typescript-eslint/consistent-type-exports': [ + 'error', + { fixMixedExportsWithInlineTypeSpecifier: true }, + ], + '@typescript-eslint/no-import-type-side-effects': 'error', + '@typescript-eslint/switch-exhaustiveness-check': [ + 'error', + { considerDefaultExhaustiveForUnions: true }, + ], + '@typescript-eslint/strict-void-return': 'error', + '@typescript-eslint/require-array-sort-compare': ['error', { ignoreStringArrays: true }], + '@typescript-eslint/method-signature-style': ['error', 'property'], + '@typescript-eslint/prefer-readonly': 'error', + '@typescript-eslint/no-unnecessary-parameter-property-assignment': 'error', + '@typescript-eslint/no-unnecessary-qualifier': 'error', + '@typescript-eslint/no-useless-empty-export': 'error', + '@typescript-eslint/no-unused-private-class-members': 'error', + '@typescript-eslint/class-methods-use-this': ['error', { ignoreOverrideMethods: true }], + '@typescript-eslint/strict-boolean-expressions': [ + 'error', + { + allowString: false, + allowNumber: false, + allowNullableBoolean: true, + }, + ], + '@stylistic/quotes': ['error', 'single', { avoidEscape: true, ignoreStringLiterals: true }], '@typescript-eslint/no-unused-vars': [ 'error', diff --git a/package.json b/package.json index 4244cdd..4fe8ed7 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "chromatic": "^17.6.0", "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", + "eslint-plugin-perfectionist": "^5.9.1", "eslint-plugin-storybook": "^10.4.6", "eslint-plugin-svelte": "^3.19.0", "globals": "^17.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fff2f54..6a03d5c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -113,6 +113,9 @@ importers: eslint-config-prettier: specifier: ^10.1.8 version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-perfectionist: + specifier: ^5.9.1 + version: 5.9.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-storybook: specifier: ^10.4.6 version: 10.4.6(eslint@10.5.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) @@ -2123,6 +2126,12 @@ packages: peerDependencies: eslint: '>=7.0.0' + eslint-plugin-perfectionist@5.9.1: + resolution: {integrity: sha512-30mHLNfEhzwaq5cquyWgnzrNXvT8AzwIwyeH5aj4U5ajhHSF2uiO6i09xpMDLv7koaZVTjLsvYF4m3gK/15tyA==} + engines: {node: ^20.0.0 || >=22.0.0} + peerDependencies: + eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 + eslint-plugin-storybook@10.4.6: resolution: {integrity: sha512-CfGSXn6zFspeYTU8R7v797MOmJFj8xc6MWf/oGuRwbKeMoSwnliR+OlXSjMZYM1D6gfmwiuH1VX58LSHdn+ZPg==} peerDependencies: @@ -2635,6 +2644,10 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + natural-orderby@5.0.0: + resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==} + engines: {node: '>=18'} + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -5269,6 +5282,15 @@ snapshots: dependencies: eslint: 10.5.0(jiti@2.7.0) + eslint-plugin-perfectionist@5.9.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3): + dependencies: + '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.5.0(jiti@2.7.0) + natural-orderby: 5.0.0 + transitivePeerDependencies: + - supports-color + - typescript + eslint-plugin-storybook@10.4.6(eslint@10.5.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3): dependencies: '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) @@ -5743,6 +5765,8 @@ snapshots: natural-compare@1.4.0: {} + natural-orderby@5.0.0: {} + node-fetch-native@1.6.7: {} node@runtime:24.18.0: {} From 55ea734c1d917fda049996f2c9f4349ecf462d8e Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 10 Jul 2026 19:09:05 -0700 Subject: [PATCH 037/141] chore: sort imports --- eslint.config.ts | 20 ++++++++++---------- src/lib/Button/Button.stories.svelte | 5 +++-- src/lib/Button/Button.svelte | 1 + src/lib/tokens.ts | 2 +- src/routes/+layout.svelte | 7 +++++-- svelte.config.ts | 3 +-- vite.config.ts | 11 +++-------- 7 files changed, 24 insertions(+), 25 deletions(-) diff --git a/eslint.config.ts b/eslint.config.ts index be85f0e..119aad4 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -1,20 +1,20 @@ -// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format -import storybook from 'eslint-plugin-storybook'; - -import prettier from 'eslint-config-prettier'; import path from 'node:path'; + +import { defineConfig, includeIgnoreFile, type Config } from 'eslint/config'; import js from '@eslint/js'; +import prettier from 'eslint-config-prettier'; +import perfectionist, { type SortImportsOptions } from 'eslint-plugin-perfectionist'; +import { Alphabet } from 'eslint-plugin-perfectionist/alphabet'; +// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format +import storybook from 'eslint-plugin-storybook'; import svelte from 'eslint-plugin-svelte'; -import unocss from '@unocss/eslint-config/flat'; -import { defineConfig, includeIgnoreFile, type Config } from 'eslint/config'; import globals from 'globals'; -import ts, { type CompatibleConfigArray } from 'typescript-eslint'; import stylistic from '@stylistic/eslint-plugin'; -import perfectionist, { type SortImportsOptions } from 'eslint-plugin-perfectionist'; -import { Alphabet } from 'eslint-plugin-perfectionist/alphabet'; +import type { UndefinedOnPartialDeep } from 'type-fest'; +import ts, { type CompatibleConfigArray } from 'typescript-eslint'; +import unocss from '@unocss/eslint-config/flat'; import svelteConfig from './svelte.config.ts'; -import type { UndefinedOnPartialDeep } from 'type-fest'; const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); const extraFileExtensions = ['.svelte']; diff --git a/src/lib/Button/Button.stories.svelte b/src/lib/Button/Button.stories.svelte index 6a302d8..d83ae4a 100644 --- a/src/lib/Button/Button.stories.svelte +++ b/src/lib/Button/Button.stories.svelte @@ -1,10 +1,11 @@ diff --git a/svelte.config.ts b/svelte.config.ts index 21abf20..07e40fd 100644 --- a/svelte.config.ts +++ b/svelte.config.ts @@ -1,8 +1,7 @@ import type { ConfigEnv } from 'vite'; -import type { Config, KitConfig } from '@sveltejs/kit'; import adapter from '@sveltejs/adapter-cloudflare'; - +import type { Config, KitConfig } from '@sveltejs/kit'; import type { TsConfigJson, OmitIndexSignature } from 'type-fest'; export type ConfigFn = (env: Partial) => OmitIndexSignature; diff --git a/vite.config.ts b/vite.config.ts index b813762..69418e4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,19 +1,14 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { defineConfig } from 'vitest/config'; -import { playwright } from '@vitest/browser-playwright'; - import { storybookTest } from '@storybook/addon-vitest/vitest-plugin'; - -import { sveltekit } from '@sveltejs/kit/vite'; import { enhancedImages } from '@sveltejs/enhanced-img'; - +import { sveltekit } from '@sveltejs/kit/vite'; import UnoCSS from 'unocss/vite'; - import Unfonts from 'unplugin-fonts/vite'; - import devtoolsJson from 'vite-plugin-devtools-json'; +import { playwright } from '@vitest/browser-playwright'; +import { defineConfig } from 'vitest/config'; import svkitCfgFn from './svelte.config.ts'; From 7d1ec545eb6a9ec3f239e63ac24ae6e3e26f95f1 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Fri, 10 Jul 2026 20:17:36 -0700 Subject: [PATCH 038/141] chore: bump deps --- package.json | 56 +- pnpm-lock.yaml | 1664 +++++++++++++++++++++++------------------------- 2 files changed, 828 insertions(+), 892 deletions(-) diff --git a/package.json b/package.json index 4fe8ed7..ece69e6 100644 --- a/package.json +++ b/package.json @@ -29,16 +29,16 @@ "dependencies": { "@fontsource-variable/work-sans": "^5.2.8", "@fontsource/syncopate": "^5.2.8", - "@unocss/preset-wind4": "^66.7.3", - "@unocss/reset": "^66.7.2", + "@unocss/preset-wind4": "^66.7.5", + "@unocss/reset": "^66.7.5", "bits-ui": "^2.18.1", "culori": "^4.0.2" }, "devDependencies": { "@chromatic-com/storybook": "^5.2.1", - "@commitlint/cli": "^21.1.0", - "@commitlint/config-conventional": "^21.1.0", - "@commitlint/types": "^21.1.0", + "@commitlint/cli": "^21.2.1", + "@commitlint/config-conventional": "^21.2.0", + "@commitlint/types": "^21.2.0", "@eslint/js": "^10.0.1", "@iconify-json/mdi": "^1.2.3", "@storybook/addon-a11y": "^10.4.6", @@ -49,42 +49,42 @@ "@stylistic/eslint-plugin": "^5.10.0", "@sveltejs/adapter-cloudflare": "^7.2.9", "@sveltejs/enhanced-img": "^0.11.0", - "@sveltejs/kit": "^2.68.0", - "@sveltejs/vite-plugin-svelte": "^7.1.2", + "@sveltejs/kit": "^2.69.2", + "@sveltejs/vite-plugin-svelte": "^7.2.0", "@types/culori": "^4.0.1", - "@types/node": "^24", - "@unocss/eslint-config": "^66.7.2", - "@unocss/extractor-svelte": "^66.7.2", - "@unocss/preset-web-fonts": "^66.7.2", - "@unocss/svelte-scoped": "^66.7.2", - "@vitest/browser-playwright": "^4.1.9", - "@vitest/coverage-v8": "^4.1.9", - "chromatic": "^17.6.0", - "eslint": "^10.5.0", + "@types/node": "^24.13.3", + "@unocss/eslint-config": "^66.7.5", + "@unocss/extractor-svelte": "^66.7.5", + "@unocss/preset-web-fonts": "^66.7.5", + "@unocss/svelte-scoped": "^66.7.5", + "@vitest/browser-playwright": "^4.1.10", + "@vitest/coverage-v8": "^4.1.10", + "chromatic": "^18.0.1", + "eslint": "^10.6.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-perfectionist": "^5.9.1", + "eslint-plugin-perfectionist": "^5.10.0", "eslint-plugin-storybook": "^10.4.6", - "eslint-plugin-svelte": "^3.19.0", + "eslint-plugin-svelte": "^3.20.0", "globals": "^17.7.0", "playwright": "^1.61.1", - "prettier": "^3.8.4", + "prettier": "^3.9.5", "prettier-plugin-svelte": "^4.1.1", "storybook": "^10.4.6", "storybook-addon-pseudo-states": "^10.4.6", "svelte": "^5.56.4", - "svelte-check": "^4.7.1", - "type-fest": "^5.7.0", + "svelte-check": "^4.7.2", + "type-fest": "^5.8.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.62.0", - "unocss": "^66.7.2", + "typescript-eslint": "^8.63.0", + "unocss": "^66.7.5", "unplugin-fonts": "^2.0.0", - "vite": "^8.1.0", + "vite": "^8.1.4", "vite-plugin-devtools-json": "^1.0.0", - "vitest": "^4.1.9", - "vitest-browser-svelte": "^2.1.1", - "wrangler": "^4.104.0" + "vitest": "^4.1.10", + "vitest-browser-svelte": "^3.0.0", + "wrangler": "^4.110.0" }, - "packageManager": "pnpm@11.10.0+sha512.0b7f8b98060031904c017e3a41eb187a16d40eeb829b95c4f8cb03681761fc4ab53dd219115b9b447f4dce1a05a214764461e7d3703392a9f32f9511ce8c86c8", + "packageManager": "pnpm@11.11.0+sha512.4463f65fd80ed80d69bc1d4bf163ee94f605c7380fc318bb5b2ebe15f8cd12d49c51a4d59e951b401e764d3b6ca751cbf51bc50ed7001a6bcb4935e684c34882", "devEngines": { "runtime": { "name": "node", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a03d5c..2761b6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,108 +20,108 @@ importers: specifier: ^5.2.8 version: 5.2.8 '@unocss/preset-wind4': - specifier: ^66.7.3 - version: 66.7.3 + specifier: ^66.7.5 + version: 66.7.5 '@unocss/reset': - specifier: ^66.7.2 - version: 66.7.2 + specifier: ^66.7.5 + version: 66.7.5 bits-ui: specifier: ^2.18.1 - version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) culori: specifier: ^4.0.2 version: 4.0.2 devDependencies: '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + version: 5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@commitlint/cli': - specifier: ^21.1.0 - version: 21.1.0(@types/node@24.13.2)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + specifier: ^21.2.1 + version: 21.2.1(@types/node@24.13.3)(conventional-commits-parser@7.1.0)(typescript@6.0.3) '@commitlint/config-conventional': - specifier: ^21.1.0 - version: 21.1.0 + specifier: ^21.2.0 + version: 21.2.0 '@commitlint/types': - specifier: ^21.1.0 - version: 21.1.0 + specifier: ^21.2.0 + version: 21.2.0 '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) + version: 10.0.1(eslint@10.6.0(jiti@2.7.0)) '@iconify-json/mdi': specifier: ^1.2.3 version: 1.2.3 '@storybook/addon-a11y': specifier: ^10.4.6 - version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) '@storybook/addon-docs': specifier: ^10.4.6 - version: 10.4.6(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + version: 10.4.6(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@storybook/addon-svelte-csf': specifier: ^5.1.2 - version: 5.1.2(@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)))(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + version: 5.1.2(@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)))(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@storybook/addon-vitest': specifier: ^10.4.6 - version: 10.4.6(@vitest/browser-playwright@4.1.9)(@vitest/browser@4.1.9)(@vitest/runner@4.1.9)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.9) + version: 10.4.6(@vitest/browser-playwright@4.1.10)(@vitest/browser@4.1.10)(@vitest/runner@4.1.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.10) '@storybook/sveltekit': specifier: ^10.4.6 - version: 10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + version: 10.4.6(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@stylistic/eslint-plugin': specifier: ^5.10.0 - version: 5.10.0(eslint@10.5.0(jiti@2.7.0)) + version: 5.10.0(eslint@10.6.0(jiti@2.7.0)) '@sveltejs/adapter-cloudflare': specifier: ^7.2.9 - version: 7.2.9(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0) + version: 7.2.9(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.110.0) '@sveltejs/enhanced-img': specifier: ^0.11.0 - version: 0.11.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + version: 0.11.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@sveltejs/kit': - specifier: ^2.68.0 - version: 2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + specifier: ^2.69.2 + version: 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@sveltejs/vite-plugin-svelte': - specifier: ^7.1.2 - version: 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + specifier: ^7.2.0 + version: 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@types/culori': specifier: ^4.0.1 version: 4.0.1 '@types/node': - specifier: ^24 - version: 24.13.2 + specifier: ^24.13.3 + version: 24.13.3 '@unocss/eslint-config': - specifier: ^66.7.2 - version: 66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^66.7.5 + version: 66.7.5(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) '@unocss/extractor-svelte': - specifier: ^66.7.2 - version: 66.7.2 + specifier: ^66.7.5 + version: 66.7.5 '@unocss/preset-web-fonts': - specifier: ^66.7.2 - version: 66.7.2 + specifier: ^66.7.5 + version: 66.7.5 '@unocss/svelte-scoped': - specifier: ^66.7.2 - version: 66.7.2 + specifier: ^66.7.5 + version: 66.7.5 '@vitest/browser-playwright': - specifier: ^4.1.9 - version: 4.1.9(playwright@1.61.1)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) + specifier: ^4.1.10 + version: 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) '@vitest/coverage-v8': - specifier: ^4.1.9 - version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + specifier: ^4.1.10 + version: 4.1.10(@vitest/browser@4.1.10)(vitest@4.1.10) chromatic: - specifier: ^17.6.0 - version: 17.6.0 + specifier: ^18.0.1 + version: 18.0.1 eslint: - specifier: ^10.5.0 - version: 10.5.0(jiti@2.7.0) + specifier: ^10.6.0 + version: 10.6.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) + version: 10.1.8(eslint@10.6.0(jiti@2.7.0)) eslint-plugin-perfectionist: - specifier: ^5.9.1 - version: 5.9.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^5.10.0 + version: 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-storybook: specifier: ^10.4.6 - version: 10.4.6(eslint@10.5.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) + version: 10.4.6(eslint@10.6.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) eslint-plugin-svelte: - specifier: ^3.19.0 - version: 3.19.0(eslint@10.5.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + specifier: ^3.20.0 + version: 3.20.0(eslint@10.6.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) globals: specifier: ^17.7.0 version: 17.7.0 @@ -132,53 +132,53 @@ importers: specifier: ^1.61.1 version: 1.61.1 prettier: - specifier: ^3.8.4 - version: 3.8.4 + specifier: ^3.9.5 + version: 3.9.5 prettier-plugin-svelte: specifier: ^4.1.1 - version: 4.1.1(prettier@3.8.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + version: 4.1.1(prettier@3.9.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0)) storybook: specifier: ^10.4.6 - version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) storybook-addon-pseudo-states: specifier: ^10.4.6 - version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) svelte: specifier: ^5.56.4 - version: 5.56.4(@typescript-eslint/types@8.62.0) + version: 5.56.4(@typescript-eslint/types@8.63.0) svelte-check: - specifier: ^4.7.1 - version: 4.7.1(picomatch@4.0.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3) + specifier: ^4.7.2 + version: 4.7.2(picomatch@4.0.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3) type-fest: - specifier: ^5.7.0 - version: 5.7.0 + specifier: ^5.8.0 + version: 5.8.0 typescript: specifier: ^6.0.3 version: 6.0.3 typescript-eslint: - specifier: ^8.62.0 - version: 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^8.63.0 + version: 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) unocss: - specifier: ^66.7.2 - version: 66.7.2(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + specifier: ^66.7.5 + version: 66.7.5(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) unplugin-fonts: specifier: ^2.0.0 - version: 2.0.0(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + version: 2.0.0(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) vite: - specifier: ^8.1.0 - version: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + specifier: ^8.1.4 + version: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) vite-plugin-devtools-json: specifier: ^1.0.0 - version: 1.0.0(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + version: 1.0.0(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) vitest: - specifier: ^4.1.9 - version: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + specifier: ^4.1.10 + version: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) vitest-browser-svelte: - specifier: ^2.1.1 - version: 2.1.1(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vitest@4.1.9) + specifier: ^3.0.0 + version: 3.0.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vitest@4.1.10) wrangler: - specifier: ^4.104.0 - version: 4.104.0 + specifier: ^4.110.0 + version: 4.110.0 packages: @@ -243,32 +243,32 @@ packages: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260623.1': - resolution: {integrity: sha512-MvDoIsRTsUJRzAl1/4hDXL839piyyjCeYatBHWgMc12Go7nHxkgbRih+1GJImEiKACSentu410bOupcutqFbpg==} + '@cloudflare/workerd-darwin-64@1.20260708.1': + resolution: {integrity: sha512-HXFCvhS1wpg3uXO0CLUwmwC41i2loM5FSK69EUchOBpmYBAXxT1oHLm6EOA5lqhTk5Mu9kjRiQYxa1GwKPwfJg==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260623.1': - resolution: {integrity: sha512-sNqHQvHPMOj5/BJOadtEZekRPSG5qQ0/ulC30ZRHRLnmx6tj5O4Wb3Nf0oznnI0pmjXhbv6b7+TOpDkaFMjbBg==} + '@cloudflare/workerd-darwin-arm64@1.20260708.1': + resolution: {integrity: sha512-JVlJaKDoRTVKSroHIlf8g3UCPjKj4iDbMZE2CNYht5qQ+2rL0FAUiVlV82G3BqKnnw9kHYnnsMzC08b9zVtdzA==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260623.1': - resolution: {integrity: sha512-XYTWqTlZlCXqG+Po6awjXtlxw73hb3C39B/PP0sb4H9NI3V0eynq8Q7rXNe7DHJs2pWRfDJihQzpayQvpwf5wQ==} + '@cloudflare/workerd-linux-64@1.20260708.1': + resolution: {integrity: sha512-3daE60YdD7YX0Jtuzc9DE/r/qMkmx8ZvHTkF8Mzmp3F5tbzlV0DAzmu5PFUPF2WuvtKbAhZKbvC2cHmWpQYxnA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260623.1': - resolution: {integrity: sha512-PC5UDKA8oQB3Gek/Y+ysovdHNjp55CihOQZd7F9xPwpkv9qTBB0mhyHnfoG2YHtW1bb9CNhuwiThaNxegpE4mg==} + '@cloudflare/workerd-linux-arm64@1.20260708.1': + resolution: {integrity: sha512-VLdNYOx5Hj+9C6isy0ACWZsbMtSxex2DIJWEe7cZxUdlphZ58ZT8zxNXK8yunFiowd34hn3VwGMopdvdj8lvmA==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260623.1': - resolution: {integrity: sha512-OTHLCVYyN0pEfrajpjjnrGg5zA1GDnpNYmMz3x2ESFtH/oXRODsUQBllP7oJpJvMURF3rXSYwAhMojaftGry8w==} + '@cloudflare/workerd-windows-64@1.20260708.1': + resolution: {integrity: sha512-bC/aSAwLy16Vjo24i9XU3aWH+eRgz7NeR5xPKavGbembO18ZywYTQbXh14eXtY6fAqN3RzRG8psijTdhX4xydA==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -276,87 +276,91 @@ packages: '@cloudflare/workers-types@4.20260613.1': resolution: {integrity: sha512-1mrgjE6epolwBhroeGAp5ud5H6Vyi6tl1o/NP0T4rXJ8bmEjmhHnbCzAhHTDHV0PIeip43wcuzHKJarvaGTaUA==} - '@commitlint/cli@21.1.0': - resolution: {integrity: sha512-CVwY6TxGv5naEaWxBdgNHko1xgL95Mb4WcIqp9iik33H0ctVqRv6YtekCntayhEP0T/apuiGvHu5HcCwFuVxEA==} + '@commitlint/cli@21.2.1': + resolution: {integrity: sha512-blsZGe29hJ72VGEFVl72IVYX+1vsfINpjA9yWQA6i7OKD/McGEOXg08sKIRKjFk4JvzhV/9n0l3i6NooPLTNfg==} engines: {node: '>=22.12.0'} hasBin: true - '@commitlint/config-conventional@21.1.0': - resolution: {integrity: sha512-BIFl8xM+3SLy3jrblUC3wmQLCVbLty+++6o859BDCmybVrQdXmIWO+dlkGIbv/M2bBoC55wGuh0zGiw3TPjL1g==} + '@commitlint/config-conventional@21.2.0': + resolution: {integrity: sha512-Qf8WRDVcyVd14if6VTWenebxFbKnVnbzPUJjlzjkyJGeHK2xCGd63Dr1XZzj0plXKQb9P0BfOxoc1HVeCo2BWQ==} engines: {node: '>=22.12.0'} - '@commitlint/config-validator@21.1.0': - resolution: {integrity: sha512-gHczt1xqQSwfNqBmOI3HjejtTljkiBEUneExMmTBLD0WwTC78lAqDvNMyydbySt3DhpH0F9oX7Vvuks6s5XPFw==} + '@commitlint/config-validator@21.2.0': + resolution: {integrity: sha512-t7AzNHAKeIdo/3NRGwzpufKHsKkPHmFs/56N2Fnsh0/r0rGtnQzTxk6vnFgjaGr4hdSQKNB50/KAhR9Yk4LJKA==} engines: {node: '>=22.12.0'} - '@commitlint/ensure@21.1.0': - resolution: {integrity: sha512-/S8Mo3Q1NtQUYDQjDmyQVPxfIwtnxq+guzMOkuGk8OSdwlzanm1WB9wDPIuuzlbMDDnBNbiAuBEUCcCNlfjrTQ==} + '@commitlint/ensure@21.2.0': + resolution: {integrity: sha512-76IF9vDNS13lAzEEik9eKwzt8f9hYhWiwVXZ2AnyLCz5/f511FsEQ3pw1X3/zSQpdRLQU7i5qDMVKyXi1GWjSg==} engines: {node: '>=22.12.0'} '@commitlint/execute-rule@21.0.1': resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} engines: {node: '>=22.12.0'} - '@commitlint/format@21.1.0': - resolution: {integrity: sha512-ySymqKYBfjNrQ5N4W/l1iF2ISW1W7Eu/Oi/wRxlri31N0yjNyzUyUzQwyuZLDzTXIlMs4IZ7hIOfAZx8lO18gA==} + '@commitlint/format@21.2.0': + resolution: {integrity: sha512-c4q64xaav2U83t7k7RyzJerBZurPer7FxUOY0RL5L/6CZijZ7K+s6HIBGIghj0ey1P2+seRX0J9XQYtDued6tg==} engines: {node: '>=22.12.0'} - '@commitlint/is-ignored@21.1.0': - resolution: {integrity: sha512-RoRh1/YI+fYH+aid5lMQ2UD0vZ3p3Vf1KeUWT1ir3H/p/7T/6SFv1OiXLgLwUT8dP72EVWeEIyOfkiSWLZYVvw==} + '@commitlint/is-ignored@21.2.0': + resolution: {integrity: sha512-4/eB0vBN7L88O/oC4ajAEqi7j2ZfNgxl/+11RfAV9YosejZgDXhY2C9VcHnHJhOzPLoSy5P3Mg/46kqeyJfXKw==} engines: {node: '>=22.12.0'} - '@commitlint/lint@21.1.0': - resolution: {integrity: sha512-0DbfVVUjAWBfixW6v7CXXWVxMcj6Ukf/oB7O8NAbouP3jxmqUaC4eVQphxl3B3M0ii3cCQiR3sRAYxICwU2gAA==} + '@commitlint/lint@21.2.0': + resolution: {integrity: sha512-ceO5dp9pLjEZ6y6qbq/uXWXDPykqqlTsyzoQ0NzecpisSJhK3kTy9qzQoPeJuWG/IMNdV1lO0RgmzqoAlSi1uw==} engines: {node: '>=22.12.0'} - '@commitlint/load@21.1.0': - resolution: {integrity: sha512-juiClVEcoreNB0TNVkseO2EmNcpEs/Yhnmgbnm/hQAKBFRynKwIaoNIljXkx/3yvZcMO0EE8I2XOEI7d5KZG8Q==} + '@commitlint/load@21.2.0': + resolution: {integrity: sha512-RjlzWQqruRwIenJEfZtq7kG97co97nKoHpflE5YnF61tDLXxHPrdWImgzw6VL6MlFyaOcVlk74eBV8ZQmc3oIA==} engines: {node: '>=22.12.0'} - '@commitlint/message@21.0.2': - resolution: {integrity: sha512-5n4aqHGD/FNnom/D5L8i7cYtV+xjuXcBL832C3w9VglEsZzIsoHpJsvxzJ7cgiOsOdc/2jU4t5+7qMHh7GBX3g==} + '@commitlint/message@21.2.0': + resolution: {integrity: sha512-YxGoiXD/HXNXLJPrQwE5poXa+XH0CBEm+mdvbHQP0g6MV/dmJyUFCzPNzZbxL93GvZ70TmtTK0Z0/IBpAqHv8g==} engines: {node: '>=22.12.0'} - '@commitlint/parse@21.1.0': - resolution: {integrity: sha512-HdAqbbjQS8eEtbR74Ysg2VNmbvAfeWLVYMkip/lHibNrtjRsC/97XAYN3/H5P0pEJtDfyTb3iLs8x6y0eu4OYA==} + '@commitlint/parse@21.2.0': + resolution: {integrity: sha512-QHWxG4d0PLTF634/AdyZ0MQS+CLn5YOuJlCFhMMlSGKFxzYGUetkHBj18xgBD+6fVzUrA2lrCdi/vlS2f/oYXg==} engines: {node: '>=22.12.0'} - '@commitlint/read@21.1.0': - resolution: {integrity: sha512-ID7m79aw8d0dMlxuXHD2QGxEX3Fhl/mUPA80WwEW5VgeOpUHNahhwWJefDdoBDVZcDfbHuf429NrcK0gxQsQjA==} + '@commitlint/read@21.2.1': + resolution: {integrity: sha512-hUW7EJQnNTL0vPOmVMNK4CrnrNBN0nN+JJHReFkdHO5y4iyHeEmTBwuC15OCqUTjxWo7idnH1LftfpWVIaPWIA==} engines: {node: '>=22.12.0'} - '@commitlint/resolve-extends@21.1.0': - resolution: {integrity: sha512-SANYkxJDfMl3TvnyALWHEaiF5nc6FFaOnh7VvfxjT4X2vD4i2gVHhmfMm1fsrBwDRX98/XyM1XDo5sAd/KXcyQ==} + '@commitlint/resolve-extends@21.2.0': + resolution: {integrity: sha512-4O/1j51+79Wth9s/MGxt/5gs0XYLDgNlYpltQfhAvLE0itusLKs9zruxbiNg1oOkmkb9L9L4USYGjEj7n87NxA==} engines: {node: '>=22.12.0'} - '@commitlint/rules@21.1.0': - resolution: {integrity: sha512-fOPEYSmKn1ZJptjLmCEjJfYqz0PUYr8ng6VY2ZW26sB7KtENR90CmAXHEmScBbOIZip+d/+OwqK12DFBuHTqsQ==} + '@commitlint/rules@21.2.0': + resolution: {integrity: sha512-C2yXMNpiB8ETZKfx5JD8+ExgF8vTU1VQMKPSUUYwqKpw9oJWQBrlXBpdU038mj2WPjof7o9UzFpmTyBeGMZwZg==} engines: {node: '>=22.12.0'} '@commitlint/to-lines@21.0.1': resolution: {integrity: sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==} engines: {node: '>=22.12.0'} - '@commitlint/top-level@21.0.2': - resolution: {integrity: sha512-s9KKM+e+mXgFeIh4n7KmOGAVT3mkJ3Fp1bBYHIK5pjeUwlEMzp/tZfb5u0Poa680AsQTXMEMRxZi1vQ9m2X5ug==} + '@commitlint/top-level@21.2.0': + resolution: {integrity: sha512-Y5gmQ+KxzqCrBFJfLvFEPvvwD3LDiNZoTT2yeFBm96M8qhmqSzQc5DvX3rheAaAMjyIvMXOCLS/mWfdpONsjyQ==} engines: {node: '>=22.12.0'} - '@commitlint/types@21.1.0': - resolution: {integrity: sha512-YodnnnH1Cp+08nP8HGNJAIuB6L3/vdCTHVRTfF8Ik/wRCLOTsU9zwv3yO1cSPQRDa9CLYtE+UJ2K67r7CwMSFw==} + '@commitlint/types@21.2.0': + resolution: {integrity: sha512-7zVFCDB2reMvJH5dmbKnOQPjZEvjdJTH8jc0U/PIPU1r3/+vf5pD1HlfitV2MWsWXrvu7u39iY1lyLUPOaN0Gw==} engines: {node: '>=22.12.0'} - '@conventional-changelog/git-client@2.7.0': - resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==} - engines: {node: '>=18'} + '@conventional-changelog/git-client@3.1.0': + resolution: {integrity: sha512-Tqa/gHco2WJWa740NRjOrfKVvzIqxkZpecb8bemaQ8sKM5PXb1UK4uTyTb/1wIqNuOVaDOFxyBdhTIQZn6gdjQ==} + engines: {node: '>=22'} peerDependencies: - conventional-commits-filter: ^5.0.0 - conventional-commits-parser: ^6.4.0 + conventional-commits-filter: ^6.0.1 + conventional-commits-parser: ^7.0.1 peerDependenciesMeta: conventional-commits-filter: optional: true conventional-commits-parser: optional: true + '@conventional-changelog/template@1.2.1': + resolution: {integrity: sha512-TzlTVpKPjaqW6qOYjQcYUDuGsLCNsvFHVBXkYGTAnf5V37jCWrE5haKNXzz0WZUtVHjrpV76L1buANjwXMfT8w==} + engines: {node: '>=22'} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -805,8 +809,8 @@ packages: '@types/react': '>=16' react: '>=16' - '@napi-rs/wasm-runtime@1.1.5': - resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -1086,8 +1090,8 @@ packages: '@oxc-project/types@0.131.0': resolution: {integrity: sha512-PgnWDfV0h+b16XNKbXU7Daib/BFSt/J2mEzfYIBu6JB/wNdlU+kVYXCkGA1A9fWkTbOgbjh4e6NhPeQOYvFhEA==} - '@oxc-project/types@0.137.0': - resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} '@oxc-resolver/binding-android-arm-eabi@11.20.0': resolution: {integrity: sha512-IjfWOXRgJFNdORDl+Uf1aibNgZY2guOD3zmOhx1BGVb/MIiqlFTdmjpQNplSN58lhWehnX4UNqC3QwpUo8pjJg==} @@ -1211,97 +1215,97 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.1.2': - resolution: {integrity: sha512-2cZ+7xRS+DBcuJBJKnfzsbleumJhBqSlJVpuzHC0nTqfd3QQ7Vx2/x5YR/D7cBamKSeWplwo82Fn9lqYUDEMfA==} + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.1.2': - resolution: {integrity: sha512-RkPMJnygxsgOYdkfqgpwY0/Fzm8d0VQe6HGU2/B00Xa9eqdLbrII+DOKAodbJAn3ZL1AJxGHkZRPYazgGY6Ljw==} + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.1.2': - resolution: {integrity: sha512-Uiczh6vFhwyfd7WNe7Q7mCA4KxAiLdz7jPE/WGizfRpIieoyFuNVMmM8HqZ9HwudTkY6/AeMQwlNJ9NJijguWw==} + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.1.2': - resolution: {integrity: sha512-+TpdtTRgHiJFjCVFbw311SuLk3KfytPOQQn+VlAEv+gBxYPtL7E6JS9e/tk+8CwxhIZvemJKo4rTKgfWNsKkkA==} + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.1.2': - resolution: {integrity: sha512-4lv1/tkmi7ueIVHnyreaOeUpiZP26BH9rRy6hoYfR9310A2B9nUEVRDvBx69vx64Nr3eTPPRkyciqJJs+j9Jmw==} + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.1.2': - resolution: {integrity: sha512-gBSUVO0eaWgw1JMjK3gB8BMlX2Mk148s2lTiVT3e9vjVxbl7UDfMWWY8CfIaaqiXuM9fVTMxIpUz6CAo/B6Vlw==} + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.1.2': - resolution: {integrity: sha512-LjQP/iZLBu8o8PjIfk4x3At0/mT6h282pvz8Z5LAyhGbu/kDezyO7ea62rF5uoqmgnIYqbN/MqJ3Si3Aymi7xQ==} + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.1.2': - resolution: {integrity: sha512-X/7bVLWelEsbyWDUSXt7zVsTniLLPIY2n1rH58qr78l9i7MNbbxBWD8gI2vRfBWf4NUXJCUuQnfZDsp32LqsfQ==} + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.1.2': - resolution: {integrity: sha512-gb6dYKW/1KDorGXyy48glEBJs/sxVSC5pcVrox/pFGV4mvwSFeg2sK5L2tRkVsVlh7kueqOgg4GEcuipJcGuKg==} + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.1.2': - resolution: {integrity: sha512-JY4w85pU3iAiJVMh5nuk4/Mh9GjMsupe8MrIN53rwxAZW64GKrWeJBuN6SxQg9QTU5uB1cxyhDzW8jqRn1EABw==} + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.1.2': - resolution: {integrity: sha512-xvpA7o5KCYLB0Rwscmuylb1/zHHSUx4g4xilm4prC5jP76pEUlzBmMbgpbh7bVDbId4NcfT96gN5i6mE6UDaiw==} + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.1.2': - resolution: {integrity: sha512-p/ts6KBLjuk49Bp21XH77poQGt02iNz7ChgHep7tudPOaLinR/De/RHdxF8w8Yj4r/bF/bqXwH6PZrB2sA+Nvw==} + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.1.2': - resolution: {integrity: sha512-VMu/wmrZ9hJzYlRhbw7jK5PODlugyKZ5mOdX78+lS8OvuFkWNQdz1pFLrI2p3P0pjXOmUZ7B48o5VnMH9QOGtg==} + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.1.2': - resolution: {integrity: sha512-xtUJqs8qEkuSviS0n1tsohaPuz3a1SPhZywOji4Oo+sgrJs8daEDMZ0QtqL0OS7dx8PoVpg2J/ZZycPY5I2+Zg==} + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.2': - resolution: {integrity: sha512-85YiLQqjUKgSO/Zjnf9e0XIn5Ymrh1fLDWBeAkZqpuBR/3R8TpfoHXuyblqyQrftSSgWO9qpcHN8mkyKsLraoA==} + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1318,13 +1322,13 @@ packages: rollup: optional: true - '@simple-libs/child-process-utils@1.0.2': - resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} - engines: {node: '>=18'} + '@simple-libs/child-process-utils@2.0.0': + resolution: {integrity: sha512-dvNoRKLijXnD0XoJAz94pbNuB5GQgDr55UhpSPhffDkTT0Cmcqh9jSCOtwfT2d4H6MI9E7c4SgtMuJXZ6F3c6A==} + engines: {node: '>=22'} - '@simple-libs/stream-utils@1.2.0': - resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} - engines: {node: '>=18'} + '@simple-libs/stream-utils@2.0.0': + resolution: {integrity: sha512-fCTuZK4QBa+39Oz9l4OGfJfz+GpwCp3AqO7Zch3to99xHPgstVsRFpeQ8LNd2o1Gv8raL2mCFwiaHh7bFSp5DQ==} + engines: {node: '>=22'} '@sindresorhus/is@7.2.0': resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} @@ -1472,8 +1476,8 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || >=7.0.0 - '@sveltejs/kit@2.68.0': - resolution: {integrity: sha512-PdKiWsqinAoubVsSiRgVFkg3MHzGhQPnwQ8VxnGQKpZYijpapZ3UHHBje0GeByt2TvfjHPw+kxV+dNK2RIZg9g==} + '@sveltejs/kit@2.69.2': + resolution: {integrity: sha512-CMdPDbYjRwRu4KXTxBVMuOpFPCt1i/v0ANennotec+K9Cmb2e3w2yYzJiC6Vh/WSvm9Khi5sJMZa0rJPqfHlDw==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1492,8 +1496,8 @@ packages: resolution: {integrity: sha512-1LgZ/qUqSoq+QorD83lk2hka79Px0wXNW2q5V1nZlxGhQgw1jrsIbVz5YiCeucVLo4XvFLjXukUaQjIiqowkcg==} engines: {node: '>= 18.0.0'} - '@sveltejs/vite-plugin-svelte@7.1.2': - resolution: {integrity: sha512-DrUBA2UXRfDmUX/ZTiEopd3X40yavsJF1FX2RygcuIScHL7o5YX1fMvoYnDhjeJQC4weCOklirpNWlcb2NiSeA==} + '@sveltejs/vite-plugin-svelte@7.2.0': + resolution: {integrity: sha512-1SpkuMSRLfugrVX+IrKfE1RUegzo8AQzKQ6qQPfVzbcWi5IhuTPaKb5ZrLpucleFznkc4/RTeSPoRnGWFxX+EQ==} engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: svelte: ^5.46.4 @@ -1510,8 +1514,8 @@ packages: resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/svelte-core@1.0.0': - resolution: {integrity: sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ==} + '@testing-library/svelte-core@1.1.3': + resolution: {integrity: sha512-KkMAvXeWorxN2Yn0kdC1lfoAItxpoj4uOWzxK5leDrNxonLvS5nwBFvztrroyTszQ0Wf/EU6iLT8JhY5qcn22g==} engines: {node: '>=16'} peerDependencies: svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 @@ -1522,8 +1526,8 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tybys/wasm-util@0.10.2': - resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1552,8 +1556,8 @@ packages: '@types/mdx@2.0.14': resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} - '@types/node@24.13.2': - resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==} + '@types/node@24.13.3': + resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} '@types/react@19.2.17': resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} @@ -1561,174 +1565,162 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@typescript-eslint/eslint-plugin@8.62.0': - resolution: {integrity: sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==} + '@typescript-eslint/eslint-plugin@8.63.0': + resolution: {integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.62.0 + '@typescript-eslint/parser': ^8.63.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.62.0': - resolution: {integrity: sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==} + '@typescript-eslint/parser@8.63.0': + resolution: {integrity: sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.62.0': - resolution: {integrity: sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==} + '@typescript-eslint/project-service@8.63.0': + resolution: {integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.62.0': - resolution: {integrity: sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==} + '@typescript-eslint/scope-manager@8.63.0': + resolution: {integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.62.0': - resolution: {integrity: sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==} + '@typescript-eslint/tsconfig-utils@8.63.0': + resolution: {integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.62.0': - resolution: {integrity: sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==} + '@typescript-eslint/type-utils@8.63.0': + resolution: {integrity: sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.62.0': - resolution: {integrity: sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==} + '@typescript-eslint/types@8.63.0': + resolution: {integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.62.0': - resolution: {integrity: sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==} + '@typescript-eslint/typescript-estree@8.63.0': + resolution: {integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.62.0': - resolution: {integrity: sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==} + '@typescript-eslint/utils@8.63.0': + resolution: {integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.62.0': - resolution: {integrity: sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==} + '@typescript-eslint/visitor-keys@8.63.0': + resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unocss/cli@66.7.2': - resolution: {integrity: sha512-50vBptZyiyYzm5CBNSVs1WYIFX+7IKYFwLNrm6pVCOjHfrBmmpfvyCznPMzUcGEFKvP2VsyB2hf3k57GBCSS9Q==} + '@unocss/cli@66.7.5': + resolution: {integrity: sha512-fgWkECRn2LGVo9sEpmjk/KJ3NSKUDitaZCNrJcEYM93DG+ELriTHcL+VWBlF4rcZf9fdGlq1nKbbRHUZirFCHQ==} hasBin: true - '@unocss/config@66.7.2': - resolution: {integrity: sha512-m8LZUZOFHBesViFOnC1MzMMQ1ovYbZ/F2ntkKSIWzLO/VvEYo2/HK8qhBhtI/FyL27+gvePL4sZ6a5ZChyl0Ug==} - - '@unocss/core@66.7.2': - resolution: {integrity: sha512-NNnhm9IVPEZ34drwztREP+mq1rio0L4Tp0u247qBKxJJWYec1+I+FTRsw7EvtukZKvr56YAxFA1qbBV+LjyV+Q==} + '@unocss/config@66.7.5': + resolution: {integrity: sha512-dkPl9glhEahJ+Xoja5ZseKKnH+vZaeaKQzg8b0otcKcPPNrHQgu1nu3QgfeOjnXOGrjZIotHwUeVtt4ZA2Skgg==} - '@unocss/core@66.7.3': - resolution: {integrity: sha512-UBfEXpW8NKACeEeUddvPDRuuroDtByO3ZHocs/SqqOEybs5Qb9oWdMJMj1DSe960RvzucLPDtOeCFL2gilzRVA==} + '@unocss/core@66.7.5': + resolution: {integrity: sha512-UdJb8MiMywcau8QrWEVgUAz0kvoFHyR+sACwYCgmBh/BpKJGyR/zw/Ys3wvysbm0f+i/20VGBex/QQxYVlzdyQ==} - '@unocss/eslint-config@66.7.2': - resolution: {integrity: sha512-QeNPeQiNe0eE3VADM+cDXQ2CoXEyJSf3ZovbJ2x7nXAOHJ58x0BNclFI0TOorPevc1k7C/NNIb40m0akLsTYRg==} + '@unocss/eslint-config@66.7.5': + resolution: {integrity: sha512-uFy7R0Fmb881p9Arv+ZFmnSzjhL+7E26bIsY8LKX+ueKUvzCFcQ1+OQ6cuHfriau9lwZ4iG7T4sGW8oYayNOYQ==} - '@unocss/eslint-plugin@66.7.2': - resolution: {integrity: sha512-kdWkoEMkDXiuGzgjKkgmnmseJjTP9Ydj2qMcwphdaR0nAs4ZXXdkfW6ZIc0lnLMOU+7UjQ8BN7Y0ch4sGSQSpg==} + '@unocss/eslint-plugin@66.7.5': + resolution: {integrity: sha512-VCOY8w/y+o/2Vm6QqDgKZmX7XUjU0y/22ScI6AU0CxYtKUjHukUFubKgvn7/iRHiJEhrgtpxF1kDLvkNzhsklg==} - '@unocss/extractor-arbitrary-variants@66.7.2': - resolution: {integrity: sha512-1R+ntws4zhi9gCsyovYeNCiAYGSceN6Rsy/4kyaw3npr1UBWhBJdQZtacxvqOssPfbbqq2vpatcuQ4rfZZYWFQ==} + '@unocss/extractor-arbitrary-variants@66.7.5': + resolution: {integrity: sha512-5zOkbnLIJc8E749qNjLXfPHl3FdHloop12h706/ojr6idK4ix0KLm43R//uLnphixCehdHJRuHnavnM4C/kQbA==} - '@unocss/extractor-arbitrary-variants@66.7.3': - resolution: {integrity: sha512-Ps3p/nvT2nNQ8NHwHAewG/q90PZcYzGvoZhikCMuIMWrvZ2lVZM+q6+EaKSX6ZyUGJRVGh5CyU3GV3Fojp7zqQ==} + '@unocss/extractor-svelte@66.7.5': + resolution: {integrity: sha512-9H6uQ5MvNIEJ6AshxPeCFkbCloDInEETq0OOVusd79vSi4SJKvWvLOnd7Wnnc24JrKt59qTnb9dJi1ZNAgkGUw==} - '@unocss/extractor-svelte@66.7.2': - resolution: {integrity: sha512-Mu2Mtd+EII2Wr1yybCuNlrq1yOx58Imy+vpF0KTab2wT5OGOjam0PraH5is/Gf5lzYVl94lv7M4i+VYAzYdaUA==} + '@unocss/inspector@66.7.5': + resolution: {integrity: sha512-WmTJMnj8bmRxvw/wGeShmL2eEHr2/L0BdGTXSxhfzwcO8y5XZEbBmVciLcM7pqaTXQ6JY4+KnITrDUf1urjZxQ==} - '@unocss/inspector@66.7.2': - resolution: {integrity: sha512-fvZ8w9dTnu61ZwbXjVMQopxxrQOnFOBN2I6KVPJtoUSMsatrpEYyJHDA9pfLes1a3C4eEJZaSADURHKkON09CA==} + '@unocss/preset-attributify@66.7.5': + resolution: {integrity: sha512-1Oi1Cp81pqYJwG3h4+OlP5A0FKyaa07MFBXaXc4Yr3faiTbsI8SKj2TqnZCb+NQvBsEqslEd+jKXGZ3lKzCVOQ==} - '@unocss/preset-attributify@66.7.2': - resolution: {integrity: sha512-JnnoRUgOL4O565+jNi8BfzTQDElEny1reaMhrdYQR4P4I7cfdRV89R5DsmND0H2mGtwJjP/gL4cWd1FSX9ShrA==} + '@unocss/preset-icons@66.7.5': + resolution: {integrity: sha512-ZsxadWnGGtHdANTikuMnjkQaT1qwUFJHZBF4fzVsPMnUiiKGs8rzXukwM9w3Gi9ontM7nbG2FYi9clWETSlpFg==} - '@unocss/preset-icons@66.7.2': - resolution: {integrity: sha512-C05oM7j8jFuxjbPaRFUbcwxHPXvBtmJOhaE2M3YstVR/L9IBsQ6Ts/PT1vxVAVDmX19MudRRTnQ0x5XzUM3P7A==} + '@unocss/preset-mini@66.7.5': + resolution: {integrity: sha512-o37TSl4ecT0dKu+3/TYuTYht75h82SEwDNl476m9ve0KW4Pv1O2tT/9TWd7N5cutEpySr8/YtjMwtWBD+drxBg==} - '@unocss/preset-mini@66.7.2': - resolution: {integrity: sha512-2DLS20vj+eoZI/r7U8eTxd+HTfMYamhx03mJyeadNu+efVJZrfEEMwjILgFywVAthYINmdeB4sYpc8Qfef4Vww==} + '@unocss/preset-tagify@66.7.5': + resolution: {integrity: sha512-/8YB1tXVi+WmNKPhsCdtO1xnQKEkshSnWDp6AbvVP3f6qOF7adlMYpAt3kpWCoVUBsfOQ06ZQlnfricMjObyoQ==} - '@unocss/preset-tagify@66.7.2': - resolution: {integrity: sha512-46V3ibNqKEyeSNnplsOKiYiBdNZ348JgjhnGDWHigVYIfZkEqn6WJdGAX9tVZpjI/rS9px8jQA0lm6ubKoc8iQ==} + '@unocss/preset-typography@66.7.5': + resolution: {integrity: sha512-2dxC8LT9KYa29UZT4muDFl7DbIXvKktTfeSMbUGMdZKbHcuMtKSP2U52wti1PL5I9duqp4v+8G33EeVutGTUaQ==} - '@unocss/preset-typography@66.7.2': - resolution: {integrity: sha512-6nTRoZiHTkDV87omRlEn8RZhakMYrIJtzazfj0rdF8msvjM1LnTT6K6qDlmxqb6NBIakljNb0bryubr6bWzK9A==} + '@unocss/preset-uno@66.7.5': + resolution: {integrity: sha512-zaUlYgNngbt50fZA/LbtsEnmPKojPqeiXCyUUiKQMv2uJQhncR32xhLZXVQ+TJD7hlfZ+6FAqlco1NIiAcub9w==} - '@unocss/preset-uno@66.7.2': - resolution: {integrity: sha512-XiSGtnh04sGHCRUnlxhePBhRF8zfOQlCfYkKByQcp/pvhmFMIWwzVL68R5LwxBmBwBVY4hfQAIx0Sz/FbA3Ojg==} + '@unocss/preset-web-fonts@66.7.5': + resolution: {integrity: sha512-OLLTK7kswdSu51qxEm6O+AehecgCfS08Ivqo+280lKzFW7V1jXr5okeJ1ty+85oHCprJqzcD9iG1khxNRLomcA==} - '@unocss/preset-web-fonts@66.7.2': - resolution: {integrity: sha512-Tx6YJWxD29NoG6t8hpbnectdL8KkBVEzEYwBcJlEa200O6/KXNpGJ8tk4l5+EK1dwTxWkUqsG+60fzXzTpe5Gg==} + '@unocss/preset-wind3@66.7.5': + resolution: {integrity: sha512-atFe/7Qein+oMdyZs0hEo+3EjV99Av2LVxDbzpCungxIfbS3TnQt70EIuHXMPNCVWLYwrMV+/P1n9Ntb0E3mow==} - '@unocss/preset-wind3@66.7.2': - resolution: {integrity: sha512-3WUmNZ3ibNotel6PAm1AgdK8BP2RqThRvEYU+svZgxsCX8E/RtVM68BFPOwzsEtuMD/R3Up6rHXqZsJvUQsg+A==} + '@unocss/preset-wind4@66.7.5': + resolution: {integrity: sha512-n3jIvQv8x1jXpmWfvNFBIqHNARki4mKZXfxAA31gekpXsRRTg16u1+yC1+PBBJgoEDFEnnmKnG7EZP88S8LVXA==} - '@unocss/preset-wind4@66.7.2': - resolution: {integrity: sha512-yP1Np15QKm+zh945lBmpNC2FnD4oyd0eq9qA6j8r15uvhz7AF98t9dGqqzV5WrjX+IZpwg08nP3son1IjAerLw==} + '@unocss/preset-wind@66.7.5': + resolution: {integrity: sha512-LVKgGr0A9Lc7F85xGXrrb71DDXMlHGA8bcj/Kht8BCsuRdBZadNbLlnv5qnSJiHYhi3/blzcgVoaeRor6L9yNA==} - '@unocss/preset-wind4@66.7.3': - resolution: {integrity: sha512-fTPwgOdQB7ckGYggFYSEQ/9j901i+R62c0yuV4WIf2imV9vkbHkFrCXnz75MDhLKU2RA8KXfVVYNQTg5veD+tw==} + '@unocss/reset@66.7.5': + resolution: {integrity: sha512-z3wbt2cuQPjtT6w5xzRYZYFIIlUPzhVKz8yIcE9fvu7BgR3hO7uVsg/5mzDoGwQ96Ya3Sk68rpmI/gLYl4bJag==} - '@unocss/preset-wind@66.7.2': - resolution: {integrity: sha512-porNxph4xfr67e0LpFis813rKk9+psUJMw0nPL4sZoHovhmR/hA5XlWb6fLCl7t4Lls20I/n8F8KKgkqkxnk8Q==} + '@unocss/rule-utils@66.7.5': + resolution: {integrity: sha512-/AKHBRF6ZOexE3EDDv8ZEYh40P5e2Eha41IYUbE1wjigW7++ssmvimSTdufJzZvU5DGP++E3B3WEsFPprZMjAg==} - '@unocss/reset@66.7.2': - resolution: {integrity: sha512-dKRbpBicfchatvqK2wqfX8gtNTCf+2pFdXBNDC0Cl2PZ8QCVMtCaHTOTSyruM0Pw7aqST4SlPkF5f8x7aZZL0w==} + '@unocss/svelte-scoped@66.7.5': + resolution: {integrity: sha512-HVEs+DAP4PzdUsYEswGYj/FUwdJPQ6ddugvew/LKCXoy75tGHAvQwYz5xf8JRwGLUWtra8o/MClYaQC+xoIhew==} - '@unocss/rule-utils@66.7.2': - resolution: {integrity: sha512-EGi2m9I87hluz2zgjVpXM4PWFn996RInNcx4PGF6Qw9Z0W78ROXEto0SM1IltpJ4R7+at4EhssU0IbHiT0snEw==} + '@unocss/transformer-attributify-jsx@66.7.5': + resolution: {integrity: sha512-r8qDwNSt0eGSwWws3xsuIHb3PZYR2embFdYoE67hD/xlYgLjX1uPy/HUlGCSSh4uLc4vVYjurr0Oq5xF/B8YiA==} - '@unocss/rule-utils@66.7.3': - resolution: {integrity: sha512-DKg1Rr/pxc5owCbFTpF1hXGoSqZjX7EzgfOkgO9R0VDnsufXIf776xUw7I3PWKXMMdC3SLnY6jT9bhlnZ6aM7w==} + '@unocss/transformer-compile-class@66.7.5': + resolution: {integrity: sha512-KuECgsGF7tGe808vIvKViEjI0UCUgYgneJfK+/TWBkjC7s8dLVaUtJzzcP9/r6OfGlgyn/x1YTdRqTaCENa7Xg==} - '@unocss/svelte-scoped@66.7.2': - resolution: {integrity: sha512-J00Rg3GD6WvHKNFADR8pOmbLqNBmE4pnDhooIAq+7+0e5Yv1Mmiu5QFG4rTHPecXUkKsDyMiHJCRq1jD0ZTbOA==} + '@unocss/transformer-directives@66.7.5': + resolution: {integrity: sha512-VMJApXXOwlDubkW+cNMmOkfxLefFupJr+yU23gGYUB2NPsuVltc8H5CDM0gfVebpeL5CUW05evxzEAk2wsju+Q==} - '@unocss/transformer-attributify-jsx@66.7.2': - resolution: {integrity: sha512-lb5y4lwHCjZm+9L3k6c/fq9O75+mQcxBp2Dq+a3DS+vOQpPce+hOyLFFkiHVRNKp9chEHS9gnq58SBVxJbhR2A==} + '@unocss/transformer-variant-group@66.7.5': + resolution: {integrity: sha512-iDmP3mM8J+IxuQf5Uh33zsi528xnGxTpKRJ0c+LCrqBTTkR2tZr4aCzNmJ0g29Js2yEOsyNXRRc8BNTuvgn0AA==} - '@unocss/transformer-compile-class@66.7.2': - resolution: {integrity: sha512-/vdgxgUI9vp7NOGfuOCY44/Ja2YbR0m+sWCGHq8K8/53a3Dk+4AvXPePv/EI/Oo6z8bhSGZHCSes8pBEY8Mr8A==} - - '@unocss/transformer-directives@66.7.2': - resolution: {integrity: sha512-9xr5Tiy+urutRBcyKJUAOOpW3LSuSM59sKowdTStzZdBUMs/L9cmjfsjNFt8rm5tptUR25wGZ8xLR5hhVDAiBQ==} - - '@unocss/transformer-variant-group@66.7.2': - resolution: {integrity: sha512-CO0CoYRn96wLm+cIICuNrv96cfzEkBHc/OmTYcHzlheyZRfGWPWlPpazMr2rlm5bve986akAxe2HSBqdaRf04w==} - - '@unocss/vite@66.7.2': - resolution: {integrity: sha512-KZL8LFNcoOjAaF8AKSUJznxrjcmuQKPSAmwvndL5RjEWtbyunV66YvOuoBPN3F0tR7MhY5NWKJjwmaYyetcM1Q==} + '@unocss/vite@66.7.5': + resolution: {integrity: sha512-1z1TBCNJCR2WzjPtjzmCHr8rtzXHosMjLdsCNe6Mzsfwiw044gzzLVuiEZO9vIjkI50lvQ+gIOxOiVQG0hGAeA==} peerDependencies: vite: ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 - '@vitest/browser-playwright@4.1.9': - resolution: {integrity: sha512-Bq1rOGf9waevzG3EOkO/dene6bvKTUsZMVg8S1i+WH3JcMjuXEjiahP9rAqZRELUqjBySOJsvvSWqK/B3wjKQw==} + '@vitest/browser-playwright@4.1.10': + resolution: {integrity: sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==} peerDependencies: playwright: '*' - vitest: 4.1.9 + vitest: 4.1.10 - '@vitest/browser@4.1.9': - resolution: {integrity: sha512-j1BKtWmPcqpMhmx/L9EPLgAJpCb0zKfwoWLmqBbxaogCXHjOwHFSEoHCBfnGtx93xKQwilZ26m+UOsHqHMkRNg==} + '@vitest/browser@4.1.10': + resolution: {integrity: sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==} peerDependencies: - vitest: 4.1.9 + vitest: 4.1.10 - '@vitest/coverage-v8@4.1.9': - resolution: {integrity: sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==} + '@vitest/coverage-v8@4.1.10': + resolution: {integrity: sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==} peerDependencies: - '@vitest/browser': 4.1.9 - vitest: 4.1.9 + '@vitest/browser': 4.1.10 + vitest: 4.1.10 peerDependenciesMeta: '@vitest/browser': optional: true @@ -1736,11 +1728,11 @@ packages: '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/expect@4.1.9': - resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} + '@vitest/expect@4.1.10': + resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==} - '@vitest/mocker@4.1.9': - resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} + '@vitest/mocker@4.1.10': + resolution: {integrity: sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1753,26 +1745,26 @@ packages: '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.1.9': - resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} + '@vitest/pretty-format@4.1.10': + resolution: {integrity: sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==} - '@vitest/runner@4.1.9': - resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} + '@vitest/runner@4.1.10': + resolution: {integrity: sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==} - '@vitest/snapshot@4.1.9': - resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} + '@vitest/snapshot@4.1.10': + resolution: {integrity: sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==} '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@4.1.9': - resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} + '@vitest/spy@4.1.10': + resolution: {integrity: sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==} '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.1.9': - resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + '@vitest/utils@4.1.10': + resolution: {integrity: sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==} '@webcontainer/env@1.1.1': resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} @@ -1812,6 +1804,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + argue-cli@3.1.0: + resolution: {integrity: sha512-DhBpBfXL4SS2uC0N922MMajKR3CdrTG0u2or1PNYgXMsrSzViJrbtvT0nCLlLGUI0plam/ZZCs7aAauHtW9thw==} + engines: {node: '>=22'} + aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} @@ -1823,9 +1819,6 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -1914,8 +1907,8 @@ packages: '@chromatic-com/vitest': optional: true - chromatic@17.6.0: - resolution: {integrity: sha512-fj0y0rRxlnpMfQlTNjjtn+xbTWvwkl4R3fg3vt5SSSxL/zEJFjs24E1n54/faiHo2mjss5oVOPf1knmf94eA1w==} + chromatic@18.0.1: + resolution: {integrity: sha512-GlTYrZ4ui5ZW8Jzut6SAo5bMH3sIugYZ37Nq2DyVHBfPINeEzGA8eG5xNo4N/I2aRdM9Xnqw0SCls7wgf2llvA==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: @@ -1941,9 +1934,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -1951,17 +1941,17 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - conventional-changelog-angular@8.3.1: - resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} - engines: {node: '>=18'} + conventional-changelog-angular@9.2.1: + resolution: {integrity: sha512-oWSL6ZhnXbYraOFTK3PgRAQJ8fADDAEv5K6AdeyQPLvjFmhG8+ejL0jZZp/R7vTmGJaBvZEE+sE7dB4bCv7sAw==} + engines: {node: '>=22'} - conventional-changelog-conventionalcommits@9.3.1: - resolution: {integrity: sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==} - engines: {node: '>=18'} + conventional-changelog-conventionalcommits@10.2.1: + resolution: {integrity: sha512-n4Kr1HFMTf3iMbES0TMxKIcYtUUv4rKqyQQp2JwfOEfFCOfGT3Tq4mCyJ8S9/YPyWhydjfKrrvnyl+gCjA+mJQ==} + engines: {node: '>=22'} - conventional-commits-parser@6.4.0: - resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} - engines: {node: '>=18'} + conventional-commits-parser@7.1.0: + resolution: {integrity: sha512-DPp6hkUjvwIivxbkrTiLXeRswNv1A/4GFA2X6scXma0AMa9632V3TwxmrlkUIEtUktiM3Ln+RrSH2xlP3/jUTw==} + engines: {node: '>=22'} hasBin: true convert-source-map@2.0.0: @@ -2081,10 +2071,6 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -2126,8 +2112,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-perfectionist@5.9.1: - resolution: {integrity: sha512-30mHLNfEhzwaq5cquyWgnzrNXvT8AzwIwyeH5aj4U5ajhHSF2uiO6i09xpMDLv7koaZVTjLsvYF4m3gK/15tyA==} + eslint-plugin-perfectionist@5.10.0: + resolution: {integrity: sha512-HiqpDrUDbGrMC6iHQbemgDyHJ0366Vyz/qRWmxQcSAkmG25cXr8BdRgx8yAhOKhEfBXn8Rnf/mTCsV4EqUJSxg==} engines: {node: ^20.0.0 || >=22.0.0} peerDependencies: eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 @@ -2138,8 +2124,8 @@ packages: eslint: '>=8' storybook: ^10.4.6 - eslint-plugin-svelte@3.19.0: - resolution: {integrity: sha512-t3rNaZeXz4d2gG4uJyMEYfJCFKf22+SWbSizIIXIWKu4wM+XPLiMWuSSr/C5821JmFeN9ogK+eExbG+z+twyxw==} + eslint-plugin-svelte@3.20.0: + resolution: {integrity: sha512-AElKLVt7Hjy4d7ljwhrhw9hux60DCxCNkmK8cY/aAXvjs8tpR7PvU4DlyI/SA1PaJww1gh0wPGo2pbyURuEwxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 @@ -2168,8 +2154,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.5.0: - resolution: {integrity: sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==} + eslint@10.6.0: + resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2307,12 +2293,6 @@ packages: resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} - git-raw-commits@5.0.1: - resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} - engines: {node: '>=18'} - deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. - hasBin: true - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2406,10 +2386,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -2597,10 +2573,6 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - meow@13.2.0: - resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} - engines: {node: '>=18'} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2613,8 +2585,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@4.20260623.0: - resolution: {integrity: sha512-p2YTeH01jMiMOjO4v9hb/+GJndja5LCxecGOWCaT9F414PRXgdddLDsK6MnqhGBB5tlU/WoBYIG1XZte5pQzOQ==} + miniflare@4.20260708.1: + resolution: {integrity: sha512-c94O9zRDISdqO18EHt6l0iF/fWgWt8p18PJvRsA/L/NJZ9Cfke3s/F5Blg1XXF7WDutVRzWVWy8Vy4LaT5ifsA==} engines: {node: '>=22.0.0'} hasBin: true @@ -2850,8 +2822,8 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} pkg-types@1.3.1: @@ -2899,8 +2871,8 @@ packages: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2914,8 +2886,8 @@ packages: prettier: ^3.0.0 svelte: ^5.0.0 - prettier@3.8.4: - resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==} + prettier@3.9.5: + resolution: {integrity: sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==} engines: {node: '>=14'} hasBin: true @@ -2985,8 +2957,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.1.2: - resolution: {integrity: sha512-x0CrQQqCXWGeI8dTvFfN/Dnv3yMKT9hv5jFjlOreKAx9wqLq9wz7VvLLHyaAXC90/CpggTu9SisSbsJJTPSjNQ==} + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -3106,8 +3078,8 @@ packages: peerDependencies: svelte: ^5.0.0 - svelte-check@4.7.1: - resolution: {integrity: sha512-FGUOmAqxXdN/H9Zm8slrqO7SLtFisXRB7rfOsHNJ3MLTD2po/+Stg8XyErkpumPHbuUiYTcqrEIzxpVWKTLqtg==} + svelte-check@4.7.2: + resolution: {integrity: sha512-GoS4XJdGswlq0rIT1vtFLzJY1bvHtY37McY9H9Gkm1Ggw/ICdZYn8J/Z8Yi0BEL0i3R4+jtaWVePjyppMlij/A==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: @@ -3213,15 +3185,15 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@5.7.0: - resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} + type-fest@5.8.0: + resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} engines: {node: '>=20'} type-level-regexp@0.1.17: resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} - typescript-eslint@8.62.0: - resolution: {integrity: sha512-8QxXi+ZACKX0kaqO4gY8kn0RSD9gFfaHDWwjqtEN48aWCBkX4MJaufWN+c3BzlrXLOxfywDL8CaoqUwcRq4j4Q==} + typescript-eslint@8.63.0: + resolution: {integrity: sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3260,12 +3232,12 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unocss@66.7.2: - resolution: {integrity: sha512-yB0yOpJTtlyGH/HAe4QdnjgjSP6z9ItTdrObvagc8ZEwRY1D2GbfUABwDKyZzXs19gXebqThMG9f+W0hPhDIPA==} + unocss@66.7.5: + resolution: {integrity: sha512-nAdmU8TwnQoiLnQjZ6Hm1GmHy9lTexKsAZNEJtZnxN9wyFRc1eLjQgmh9r7UEGxBQMQLD8OZOgmk5HpwObbh0Q==} peerDependencies: - '@unocss/astro': 66.7.2 - '@unocss/postcss': 66.7.2 - '@unocss/webpack': 66.7.2 + '@unocss/astro': 66.7.5 + '@unocss/postcss': 66.7.5 + '@unocss/webpack': 66.7.5 peerDependenciesMeta: '@unocss/astro': optional: true @@ -3319,8 +3291,8 @@ packages: peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - vite@8.1.0: - resolution: {integrity: sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==} + vite@8.1.4: + resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3370,26 +3342,26 @@ packages: vite: optional: true - vitest-browser-svelte@2.1.1: - resolution: {integrity: sha512-qbunYRSm+N92r9bfTkdDTpBZESLmp4QFz2SluV3n/x8U7ysosfeXYJZ4vXbJ0Y0LzoqqDnV5LHprmFgn4Eo+Ug==} + vitest-browser-svelte@3.0.0: + resolution: {integrity: sha512-BKM9iBGNsEQzigWuSZFAiw6AJDqQqMttApoD8gM8LTI6vxfd423rDMN8GqUHJyGbhH3XcOo9N9u/4hu47Nxhsw==} peerDependencies: svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 vitest: ^4.0.0 - vitest@4.1.9: - resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} + vitest@4.1.10: + resolution: {integrity: sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.9 - '@vitest/browser-preview': 4.1.9 - '@vitest/browser-webdriverio': 4.1.9 - '@vitest/coverage-istanbul': 4.1.9 - '@vitest/coverage-v8': 4.1.9 - '@vitest/ui': 4.1.9 + '@vitest/browser-playwright': 4.1.10 + '@vitest/browser-preview': 4.1.10 + '@vitest/browser-webdriverio': 4.1.10 + '@vitest/coverage-istanbul': 4.1.10 + '@vitest/coverage-v8': 4.1.10 + '@vitest/ui': 4.1.10 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3434,8 +3406,8 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerd@1.20260623.1: - resolution: {integrity: sha512-9SJsdTSsehhqc26TUJIzyi1XgyYeqFym4hinZnWoAP1BkhEoMQ5Ygz7Xw9T+2ecU+y409JBEScBgWTdZ06mBrg==} + workerd@1.20260708.1: + resolution: {integrity: sha512-WAK+Kt/VVCSldH2qSr8lx46XCJ4Q+bdlHNaFqUtOHthBEIB8C1N8HVW+VOLrxDoTCk0NGNv0zajnBeQK4JOB9w==} engines: {node: '>=16'} hasBin: true @@ -3443,12 +3415,12 @@ packages: resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} engines: {node: '>=12'} - wrangler@4.104.0: - resolution: {integrity: sha512-xCfbg2Oj93Bc7EMryFaSeRGDgV96dzrWoaK5q2q5XLEvumO4mysNP/1MDue0GUozEJAI6Z6vrGyYPLmfET/0sg==} + wrangler@4.110.0: + resolution: {integrity: sha512-xZeXKYi7hxQRF5anL+v77RkufJNpF9f3Eqeyqq2QBsETpLZgh0Agj0jJ6JPtkbgn6ukZdh8OK5egsGPWIditgg==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20260623.1 + '@cloudflare/workers-types': ^5.20260708.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -3543,12 +3515,12 @@ snapshots: dependencies: fontkitten: 1.0.3 - '@chromatic-com/storybook@5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + '@chromatic-com/storybook@5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: '@neoconfetti/react': 1.0.0 chromatic: 16.10.0 jsonfile: 6.2.1 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) strip-ansi: 7.2.0 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -3557,37 +3529,37 @@ snapshots: '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260623.1)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260708.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260623.1 + workerd: 1.20260708.1 - '@cloudflare/workerd-darwin-64@1.20260623.1': + '@cloudflare/workerd-darwin-64@1.20260708.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260623.1': + '@cloudflare/workerd-darwin-arm64@1.20260708.1': optional: true - '@cloudflare/workerd-linux-64@1.20260623.1': + '@cloudflare/workerd-linux-64@1.20260708.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260623.1': + '@cloudflare/workerd-linux-arm64@1.20260708.1': optional: true - '@cloudflare/workerd-windows-64@1.20260623.1': + '@cloudflare/workerd-windows-64@1.20260708.1': optional: true '@cloudflare/workers-types@4.20260613.1': {} - '@commitlint/cli@21.1.0(@types/node@24.13.2)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + '@commitlint/cli@21.2.1(@types/node@24.13.3)(conventional-commits-parser@7.1.0)(typescript@6.0.3)': dependencies: - '@commitlint/config-conventional': 21.1.0 - '@commitlint/format': 21.1.0 - '@commitlint/lint': 21.1.0 - '@commitlint/load': 21.1.0(@types/node@24.13.2)(typescript@6.0.3) - '@commitlint/read': 21.1.0(conventional-commits-parser@6.4.0) - '@commitlint/types': 21.1.0 + '@commitlint/config-conventional': 21.2.0 + '@commitlint/format': 21.2.0 + '@commitlint/lint': 21.2.0 + '@commitlint/load': 21.2.0(@types/node@24.13.3)(typescript@6.0.3) + '@commitlint/read': 21.2.1(conventional-commits-parser@7.1.0) + '@commitlint/types': 21.2.0 tinyexec: 1.2.4 yargs: 18.0.0 transitivePeerDependencies: @@ -3596,48 +3568,48 @@ snapshots: - conventional-commits-parser - typescript - '@commitlint/config-conventional@21.1.0': + '@commitlint/config-conventional@21.2.0': dependencies: - '@commitlint/types': 21.1.0 - conventional-changelog-conventionalcommits: 9.3.1 + '@commitlint/types': 21.2.0 + conventional-changelog-conventionalcommits: 10.2.1 - '@commitlint/config-validator@21.1.0': + '@commitlint/config-validator@21.2.0': dependencies: - '@commitlint/types': 21.1.0 + '@commitlint/types': 21.2.0 ajv: 8.20.0 - '@commitlint/ensure@21.1.0': + '@commitlint/ensure@21.2.0': dependencies: - '@commitlint/types': 21.1.0 + '@commitlint/types': 21.2.0 es-toolkit: 1.47.1 '@commitlint/execute-rule@21.0.1': {} - '@commitlint/format@21.1.0': + '@commitlint/format@21.2.0': dependencies: - '@commitlint/types': 21.1.0 + '@commitlint/types': 21.2.0 picocolors: 1.1.1 - '@commitlint/is-ignored@21.1.0': + '@commitlint/is-ignored@21.2.0': dependencies: - '@commitlint/types': 21.1.0 + '@commitlint/types': 21.2.0 semver: 7.8.5 - '@commitlint/lint@21.1.0': + '@commitlint/lint@21.2.0': dependencies: - '@commitlint/is-ignored': 21.1.0 - '@commitlint/parse': 21.1.0 - '@commitlint/rules': 21.1.0 - '@commitlint/types': 21.1.0 + '@commitlint/is-ignored': 21.2.0 + '@commitlint/parse': 21.2.0 + '@commitlint/rules': 21.2.0 + '@commitlint/types': 21.2.0 - '@commitlint/load@21.1.0(@types/node@24.13.2)(typescript@6.0.3)': + '@commitlint/load@21.2.0(@types/node@24.13.3)(typescript@6.0.3)': dependencies: - '@commitlint/config-validator': 21.1.0 + '@commitlint/config-validator': 21.2.0 '@commitlint/execute-rule': 21.0.1 - '@commitlint/resolve-extends': 21.1.0 - '@commitlint/types': 21.1.0 + '@commitlint/resolve-extends': 21.2.0 + '@commitlint/types': 21.2.0 cosmiconfig: 9.0.2(typescript@6.0.3) - cosmiconfig-typescript-loader: 6.3.0(@types/node@24.13.2)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@24.13.3)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3) es-toolkit: 1.47.1 is-plain-obj: 4.1.0 picocolors: 1.1.1 @@ -3645,57 +3617,59 @@ snapshots: - '@types/node' - typescript - '@commitlint/message@21.0.2': {} + '@commitlint/message@21.2.0': {} - '@commitlint/parse@21.1.0': + '@commitlint/parse@21.2.0': dependencies: - '@commitlint/types': 21.1.0 - conventional-changelog-angular: 8.3.1 - conventional-commits-parser: 6.4.0 + '@commitlint/types': 21.2.0 + conventional-changelog-angular: 9.2.1 + conventional-commits-parser: 7.1.0 - '@commitlint/read@21.1.0(conventional-commits-parser@6.4.0)': + '@commitlint/read@21.2.1(conventional-commits-parser@7.1.0)': dependencies: - '@commitlint/top-level': 21.0.2 - '@commitlint/types': 21.1.0 - git-raw-commits: 5.0.1(conventional-commits-parser@6.4.0) + '@commitlint/top-level': 21.2.0 + '@commitlint/types': 21.2.0 + '@conventional-changelog/git-client': 3.1.0(conventional-commits-parser@7.1.0) tinyexec: 1.2.4 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - '@commitlint/resolve-extends@21.1.0': + '@commitlint/resolve-extends@21.2.0': dependencies: - '@commitlint/config-validator': 21.1.0 - '@commitlint/types': 21.1.0 + '@commitlint/config-validator': 21.2.0 + '@commitlint/types': 21.2.0 es-toolkit: 1.47.1 global-directory: 5.0.0 resolve-from: 5.0.0 - '@commitlint/rules@21.1.0': + '@commitlint/rules@21.2.0': dependencies: - '@commitlint/ensure': 21.1.0 - '@commitlint/message': 21.0.2 + '@commitlint/ensure': 21.2.0 + '@commitlint/message': 21.2.0 '@commitlint/to-lines': 21.0.1 - '@commitlint/types': 21.1.0 + '@commitlint/types': 21.2.0 '@commitlint/to-lines@21.0.1': {} - '@commitlint/top-level@21.0.2': + '@commitlint/top-level@21.2.0': dependencies: escalade: 3.2.0 - '@commitlint/types@21.1.0': + '@commitlint/types@21.2.0': dependencies: - conventional-commits-parser: 6.4.0 + conventional-commits-parser: 7.1.0 picocolors: 1.1.1 - '@conventional-changelog/git-client@2.7.0(conventional-commits-parser@6.4.0)': + '@conventional-changelog/git-client@3.1.0(conventional-commits-parser@7.1.0)': dependencies: - '@simple-libs/child-process-utils': 1.0.2 - '@simple-libs/stream-utils': 1.2.0 + '@simple-libs/child-process-utils': 2.0.0 + '@simple-libs/stream-utils': 2.0.0 semver: 7.8.5 optionalDependencies: - conventional-commits-parser: 6.4.0 + conventional-commits-parser: 7.1.0 + + '@conventional-changelog/template@1.2.1': {} '@cspotcode/source-map-support@0.8.1': dependencies: @@ -3822,9 +3796,9 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.5.0(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': dependencies: - eslint: 10.5.0(jiti@2.7.0) + eslint: 10.6.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -3845,9 +3819,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.5.0(jiti@2.7.0))': + '@eslint/js@10.0.1(eslint@10.6.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.5.0(jiti@2.7.0) + eslint: 10.6.0(jiti@2.7.0) '@eslint/object-schema@3.0.5': {} @@ -4029,25 +4003,25 @@ snapshots: '@types/react': 19.2.17 react: 19.2.7 - '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 + '@tybys/wasm-util': 0.10.3 optional: true - '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 - '@tybys/wasm-util': 0.10.2 + '@tybys/wasm-util': 0.10.3 optional: true - '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.2 + '@tybys/wasm-util': 0.10.3 optional: true '@neoconfetti/react@1.0.0': {} @@ -4164,14 +4138,14 @@ snapshots: dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true '@oxc-parser/binding-wasm32-wasi@0.131.0': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@oxc-parser/binding-win32-arm64-msvc@0.127.0': @@ -4196,7 +4170,7 @@ snapshots: '@oxc-project/types@0.131.0': {} - '@oxc-project/types@0.137.0': {} + '@oxc-project/types@0.139.0': {} '@oxc-resolver/binding-android-arm-eabi@11.20.0': optional: true @@ -4250,7 +4224,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': @@ -4279,53 +4253,53 @@ snapshots: dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.1.2': + '@rolldown/binding-android-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-arm64@1.1.2': + '@rolldown/binding-darwin-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-x64@1.1.2': + '@rolldown/binding-darwin-x64@1.1.5': optional: true - '@rolldown/binding-freebsd-x64@1.1.2': + '@rolldown/binding-freebsd-x64@1.1.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.1.2': + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.2': + '@rolldown/binding-linux-arm64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.1.2': + '@rolldown/binding-linux-arm64-musl@1.1.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.1.2': + '@rolldown/binding-linux-ppc64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.1.2': + '@rolldown/binding-linux-s390x-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.1.2': + '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-musl@1.1.2': + '@rolldown/binding-linux-x64-musl@1.1.5': optional: true - '@rolldown/binding-openharmony-arm64@1.1.2': + '@rolldown/binding-openharmony-arm64@1.1.5': optional: true - '@rolldown/binding-wasm32-wasi@1.1.2': + '@rolldown/binding-wasm32-wasi@1.1.5': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@rolldown/binding-win32-arm64-msvc@1.1.2': + '@rolldown/binding-win32-arm64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.1.2': + '@rolldown/binding-win32-x64-msvc@1.1.5': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -4334,13 +4308,13 @@ snapshots: dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 - picomatch: 4.0.4 + picomatch: 4.0.5 - '@simple-libs/child-process-utils@1.0.2': + '@simple-libs/child-process-utils@2.0.0': dependencies: - '@simple-libs/stream-utils': 1.2.0 + '@simple-libs/stream-utils': 2.0.0 - '@simple-libs/stream-utils@1.2.0': {} + '@simple-libs/stream-utils@2.0.0': {} '@sindresorhus/is@7.2.0': {} @@ -4348,21 +4322,21 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@storybook/addon-a11y@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + '@storybook/addon-a11y@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: '@storybook/global': 5.0.0 axe-core: 4.12.1 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@storybook/addon-docs@10.4.6(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/addon-docs@10.4.6(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) - '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@storybook/react-dom-shim': 10.4.6(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + '@storybook/react-dom-shim': 10.4.6(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) ts-dedent: 2.3.0 optionalDependencies: '@types/react': 19.2.17 @@ -4373,55 +4347,55 @@ snapshots: - vite - webpack - '@storybook/addon-svelte-csf@5.1.2(@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)))(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/addon-svelte-csf@5.1.2(@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)))(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@storybook/csf': 0.1.13 - '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) - '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) dedent: 1.7.2 es-toolkit: 1.47.1 esrap: 1.4.9 magic-string: 0.30.21 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - svelte: 5.56.4(@typescript-eslint/types@8.62.0) - svelte-ast-print: 0.4.2(svelte@5.56.4(@typescript-eslint/types@8.62.0)) - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte-ast-print: 0.4.2(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) zimmerframe: 1.1.4 transitivePeerDependencies: - babel-plugin-macros - '@storybook/addon-vitest@10.4.6(@vitest/browser-playwright@4.1.9)(@vitest/browser@4.1.9)(@vitest/runner@4.1.9)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.9)': + '@storybook/addon-vitest@10.4.6(@vitest/browser-playwright@4.1.10)(@vitest/browser@4.1.10)(@vitest/runner@4.1.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.10)': dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) optionalDependencies: - '@vitest/browser': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) - '@vitest/browser-playwright': 4.1.9(playwright@1.61.1)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) - '@vitest/runner': 4.1.9 - vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@vitest/browser': 4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) + '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) + '@vitest/runner': 4.1.10 + vitest: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) transitivePeerDependencies: - react - react-dom - '@storybook/builder-vite@10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/builder-vite@10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) ts-dedent: 2.3.0 - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/csf-plugin@10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) unplugin: 2.3.11 optionalDependencies: esbuild: 0.28.1 - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) '@storybook/csf@0.1.13': dependencies: @@ -4434,90 +4408,90 @@ snapshots: react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - '@storybook/react-dom-shim@10.4.6(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + '@storybook/react-dom-shim@10.4.6(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) optionalDependencies: '@types/react': 19.2.17 - '@storybook/svelte-vite@10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/svelte-vite@10.4.6(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) - '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) - '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) magic-string: 0.30.21 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - svelte: 5.56.4(@typescript-eslint/types@8.62.0) - svelte2tsx: 0.7.56(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@5.9.3) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte2tsx: 0.7.56(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3) typescript: 5.9.3 - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))': + '@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))': dependencies: - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) ts-dedent: 2.3.0 - type-fest: 5.7.0 + type-fest: 5.8.0 - '@storybook/sveltekit@10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/sveltekit@10.4.6(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) - '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) - '@storybook/svelte-vite': 10.4.6(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - svelte: 5.56.4(@typescript-eslint/types@8.62.0) - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + '@storybook/svelte-vite': 10.4.6(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) transitivePeerDependencies: - '@sveltejs/vite-plugin-svelte' - esbuild - rollup - webpack - '@stylistic/eslint-plugin@5.10.0(eslint@10.5.0(jiti@2.7.0))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.6.0(jiti@2.7.0))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) - '@typescript-eslint/types': 8.62.0 - eslint: 10.5.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@typescript-eslint/types': 8.63.0 + eslint: 10.6.0(jiti@2.7.0) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.4 + picomatch: 4.0.5 '@sveltejs/acorn-typescript@1.0.10(acorn@8.17.0)': dependencies: acorn: 8.17.0 - '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.104.0)': + '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.110.0)': dependencies: '@cloudflare/workers-types': 4.20260613.1 - '@sveltejs/kit': 2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) worktop: 0.8.0-next.18 - wrangler: 4.104.0 + wrangler: 4.110.0 - '@sveltejs/enhanced-img@0.11.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@sveltejs/enhanced-img@0.11.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) magic-string: 0.30.21 sharp: 0.34.5 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) - svelte-parse-markup: 0.1.5(svelte@5.56.4(@typescript-eslint/types@8.62.0)) - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte-parse-markup: 0.1.5(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) vite-imagetools: 9.0.3 zimmerframe: 1.1.4 transitivePeerDependencies: - rollup - '@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) - '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@types/cookie': 0.6.0 acorn: 8.17.0 cookie: 0.6.0 @@ -4528,21 +4502,21 @@ snapshots: mrmime: 2.0.1 set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) optionalDependencies: typescript: 6.0.3 '@sveltejs/load-config@0.2.0': {} - '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.3 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) - vitefu: 1.1.3(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) + vitefu: 1.1.3(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@swc/helpers@0.5.23': dependencies: @@ -4568,15 +4542,15 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/svelte-core@1.0.0(svelte@5.56.4(@typescript-eslint/types@8.62.0))': + '@testing-library/svelte-core@1.1.3(svelte@5.56.4(@typescript-eslint/types@8.63.0))': dependencies: - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: '@testing-library/dom': 10.4.1 - '@tybys/wasm-util@0.10.2': + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 optional: true @@ -4602,7 +4576,7 @@ snapshots: '@types/mdx@2.0.14': {} - '@types/node@24.13.2': + '@types/node@24.13.3': dependencies: undici-types: 7.18.2 @@ -4612,15 +4586,15 @@ snapshots: '@types/trusted-types@2.0.7': {} - '@typescript-eslint/eslint-plugin@8.62.0(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/type-utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.62.0 - eslint: 10.5.0(jiti@2.7.0) + '@typescript-eslint/parser': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/type-utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.63.0 + eslint: 10.6.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -4628,56 +4602,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.63.0 debug: 4.4.3 - eslint: 10.5.0(jiti@2.7.0) + eslint: 10.6.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.62.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.63.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@6.0.3) - '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@6.0.3) + '@typescript-eslint/types': 8.63.0 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.62.0': + '@typescript-eslint/scope-manager@8.63.0': dependencies: - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/visitor-keys': 8.63.0 - '@typescript-eslint/tsconfig-utils@8.62.0(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.63.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.5.0(jiti@2.7.0) + eslint: 10.6.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.62.0': {} + '@typescript-eslint/types@8.63.0': {} - '@typescript-eslint/typescript-estree@8.62.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.63.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.62.0(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@6.0.3) - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/visitor-keys': 8.62.0 + '@typescript-eslint/project-service': 8.63.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@6.0.3) + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/visitor-keys': 8.63.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 @@ -4687,30 +4661,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.62.0 - '@typescript-eslint/types': 8.62.0 - '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) - eslint: 10.5.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + eslint: 10.6.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.62.0': + '@typescript-eslint/visitor-keys@8.63.0': dependencies: - '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/types': 8.63.0 eslint-visitor-keys: 5.0.1 - '@unocss/cli@66.7.2': + '@unocss/cli@66.7.5': dependencies: '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.7.2 - '@unocss/core': 66.7.2 - '@unocss/preset-wind3': 66.7.2 - '@unocss/preset-wind4': 66.7.2 - '@unocss/transformer-directives': 66.7.2 + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 + '@unocss/preset-wind4': 66.7.5 + '@unocss/transformer-directives': 66.7.5 cac: 7.0.0 chokidar: 5.0.0 colorette: 2.0.20 @@ -4721,31 +4695,29 @@ snapshots: tinyglobby: 0.2.17 unplugin-utils: 0.3.1 - '@unocss/config@66.7.2': + '@unocss/config@66.7.5': dependencies: - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 colorette: 2.0.20 consola: 3.4.2 unconfig: 7.5.0 - '@unocss/core@66.7.2': {} - - '@unocss/core@66.7.3': {} + '@unocss/core@66.7.5': {} - '@unocss/eslint-config@66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + '@unocss/eslint-config@66.7.5(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@unocss/eslint-plugin': 66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@unocss/eslint-plugin': 66.7.5(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint - supports-color - typescript - '@unocss/eslint-plugin@66.7.2(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + '@unocss/eslint-plugin@66.7.5(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - '@unocss/config': 66.7.2 - '@unocss/core': 66.7.2 - '@unocss/rule-utils': 66.7.2 + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 magic-string: 0.30.21 synckit: 0.11.13 transitivePeerDependencies: @@ -4753,163 +4725,148 @@ snapshots: - supports-color - typescript - '@unocss/extractor-arbitrary-variants@66.7.2': + '@unocss/extractor-arbitrary-variants@66.7.5': dependencies: - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 - '@unocss/extractor-arbitrary-variants@66.7.3': - dependencies: - '@unocss/core': 66.7.3 - - '@unocss/extractor-svelte@66.7.2': {} + '@unocss/extractor-svelte@66.7.5': {} - '@unocss/inspector@66.7.2': + '@unocss/inspector@66.7.5': dependencies: - '@unocss/core': 66.7.2 - '@unocss/rule-utils': 66.7.2 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 colorette: 2.0.20 gzip-size: 6.0.0 sirv: 3.0.2 - '@unocss/preset-attributify@66.7.2': + '@unocss/preset-attributify@66.7.5': dependencies: - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 - '@unocss/preset-icons@66.7.2': + '@unocss/preset-icons@66.7.5': dependencies: '@iconify/utils': 3.1.3 - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 ofetch: 1.5.1 - '@unocss/preset-mini@66.7.2': + '@unocss/preset-mini@66.7.5': dependencies: - '@unocss/core': 66.7.2 - '@unocss/extractor-arbitrary-variants': 66.7.2 - '@unocss/rule-utils': 66.7.2 + '@unocss/core': 66.7.5 + '@unocss/extractor-arbitrary-variants': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-tagify@66.7.2': + '@unocss/preset-tagify@66.7.5': dependencies: - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 - '@unocss/preset-typography@66.7.2': + '@unocss/preset-typography@66.7.5': dependencies: - '@unocss/core': 66.7.2 - '@unocss/rule-utils': 66.7.2 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-uno@66.7.2': + '@unocss/preset-uno@66.7.5': dependencies: - '@unocss/core': 66.7.2 - '@unocss/preset-wind3': 66.7.2 + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 - '@unocss/preset-web-fonts@66.7.2': + '@unocss/preset-web-fonts@66.7.5': dependencies: - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 ofetch: 1.5.1 - '@unocss/preset-wind3@66.7.2': - dependencies: - '@unocss/core': 66.7.2 - '@unocss/preset-mini': 66.7.2 - '@unocss/rule-utils': 66.7.2 - - '@unocss/preset-wind4@66.7.2': + '@unocss/preset-wind3@66.7.5': dependencies: - '@unocss/core': 66.7.2 - '@unocss/extractor-arbitrary-variants': 66.7.2 - '@unocss/rule-utils': 66.7.2 + '@unocss/core': 66.7.5 + '@unocss/preset-mini': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-wind4@66.7.3': + '@unocss/preset-wind4@66.7.5': dependencies: - '@unocss/core': 66.7.3 - '@unocss/extractor-arbitrary-variants': 66.7.3 - '@unocss/rule-utils': 66.7.3 + '@unocss/core': 66.7.5 + '@unocss/extractor-arbitrary-variants': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-wind@66.7.2': + '@unocss/preset-wind@66.7.5': dependencies: - '@unocss/core': 66.7.2 - '@unocss/preset-wind3': 66.7.2 - - '@unocss/reset@66.7.2': {} + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 - '@unocss/rule-utils@66.7.2': - dependencies: - '@unocss/core': 66.7.2 - magic-string: 0.30.21 + '@unocss/reset@66.7.5': {} - '@unocss/rule-utils@66.7.3': + '@unocss/rule-utils@66.7.5': dependencies: - '@unocss/core': 66.7.3 + '@unocss/core': 66.7.5 magic-string: 0.30.21 - '@unocss/svelte-scoped@66.7.2': + '@unocss/svelte-scoped@66.7.5': dependencies: - '@unocss/config': 66.7.2 - '@unocss/core': 66.7.2 - '@unocss/preset-uno': 66.7.2 - '@unocss/preset-wind3': 66.7.2 - '@unocss/reset': 66.7.2 + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/preset-uno': 66.7.5 + '@unocss/preset-wind3': 66.7.5 + '@unocss/reset': 66.7.5 acorn: 8.17.0 css-tree: 3.2.1 magic-string: 0.30.21 pathe: 2.0.3 zimmerframe: 1.1.4 - '@unocss/transformer-attributify-jsx@66.7.2': + '@unocss/transformer-attributify-jsx@66.7.5': dependencies: - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 oxc-parser: 0.131.0 oxc-walker: 0.7.0(oxc-parser@0.131.0) - '@unocss/transformer-compile-class@66.7.2': + '@unocss/transformer-compile-class@66.7.5': dependencies: - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 - '@unocss/transformer-directives@66.7.2': + '@unocss/transformer-directives@66.7.5': dependencies: - '@unocss/core': 66.7.2 - '@unocss/rule-utils': 66.7.2 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 css-tree: 3.2.1 - '@unocss/transformer-variant-group@66.7.2': + '@unocss/transformer-variant-group@66.7.5': dependencies: - '@unocss/core': 66.7.2 + '@unocss/core': 66.7.5 - '@unocss/vite@66.7.2(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@unocss/vite@66.7.5(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.7.2 - '@unocss/core': 66.7.2 - '@unocss/inspector': 66.7.2 + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/inspector': 66.7.5 chokidar: 5.0.0 magic-string: 0.30.21 pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.1 - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) - '@vitest/browser-playwright@4.1.9(playwright@1.61.1)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9)': + '@vitest/browser-playwright@4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10)': dependencies: - '@vitest/browser': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) - '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@vitest/browser': 4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) playwright: 1.61.1 tinyrainbow: 3.1.0 - vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + vitest: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9)': + '@vitest/browser@4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) - '@vitest/utils': 4.1.9 + '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@vitest/utils': 4.1.10 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + vitest: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) ws: 8.21.0 transitivePeerDependencies: - bufferutil @@ -4917,10 +4874,10 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-v8@4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9)': + '@vitest/coverage-v8@4.1.10(@vitest/browser@4.1.10)(vitest@4.1.10)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.9 + '@vitest/utils': 4.1.10 ast-v8-to-istanbul: 1.0.4 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -4929,9 +4886,9 @@ snapshots: obug: 2.1.3 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + vitest: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) optionalDependencies: - '@vitest/browser': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) + '@vitest/browser': 4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) '@vitest/expect@3.2.4': dependencies: @@ -4941,40 +4898,40 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/expect@4.1.9': + '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.9 - '@vitest/utils': 4.1.9 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))': + '@vitest/mocker@4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@vitest/spy': 4.1.9 + '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.1.9': + '@vitest/pretty-format@4.1.10': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.9': + '@vitest/runner@4.1.10': dependencies: - '@vitest/utils': 4.1.9 + '@vitest/utils': 4.1.10 pathe: 2.0.3 - '@vitest/snapshot@4.1.9': + '@vitest/snapshot@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.9 - '@vitest/utils': 4.1.9 + '@vitest/pretty-format': 4.1.10 + '@vitest/utils': 4.1.10 magic-string: 0.30.21 pathe: 2.0.3 @@ -4982,7 +4939,7 @@ snapshots: dependencies: tinyspy: 4.0.4 - '@vitest/spy@4.1.9': {} + '@vitest/spy@4.1.10': {} '@vitest/utils@3.2.4': dependencies: @@ -4990,9 +4947,9 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@vitest/utils@4.1.9': + '@vitest/utils@4.1.10': dependencies: - '@vitest/pretty-format': 4.1.9 + '@vitest/pretty-format': 4.1.10 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -5028,6 +4985,8 @@ snapshots: argparse@2.0.1: {} + argue-cli@3.1.0: {} + aria-query@5.3.0: dependencies: dequal: 2.0.3 @@ -5036,8 +4995,6 @@ snapshots: aria-query@5.3.2: {} - array-ify@1.0.0: {} - assertion-error@2.0.1: {} ast-types@0.16.1: @@ -5056,15 +5013,15 @@ snapshots: balanced-match@4.0.4: {} - bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: '@floating-ui/core': 1.7.5 '@floating-ui/dom': 1.7.6 '@internationalized/date': 3.12.2 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) - svelte: 5.56.4(@typescript-eslint/types@8.62.0) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + runed: 0.35.1(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) tabbable: 6.4.0 transitivePeerDependencies: - '@sveltejs/kit' @@ -5111,7 +5068,7 @@ snapshots: dependencies: semver: 7.8.5 - chromatic@17.6.0: + chromatic@18.0.1: dependencies: semver: 7.8.5 @@ -5125,27 +5082,22 @@ snapshots: colorette@2.0.20: {} - compare-func@2.0.0: - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - confbox@0.1.8: {} consola@3.4.2: {} - conventional-changelog-angular@8.3.1: + conventional-changelog-angular@9.2.1: dependencies: - compare-func: 2.0.0 + '@conventional-changelog/template': 1.2.1 - conventional-changelog-conventionalcommits@9.3.1: + conventional-changelog-conventionalcommits@10.2.1: dependencies: - compare-func: 2.0.0 + '@conventional-changelog/template': 1.2.1 - conventional-commits-parser@6.4.0: + conventional-commits-parser@7.1.0: dependencies: - '@simple-libs/stream-utils': 1.2.0 - meow: 13.2.0 + '@simple-libs/stream-utils': 2.0.0 + argue-cli: 3.1.0 convert-source-map@2.0.0: {} @@ -5153,9 +5105,9 @@ snapshots: cookie@1.1.1: {} - cosmiconfig-typescript-loader@6.3.0(@types/node@24.13.2)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@24.13.3)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3): dependencies: - '@types/node': 24.13.2 + '@types/node': 24.13.3 cosmiconfig: 9.0.2(typescript@6.0.3) jiti: 2.6.1 typescript: 6.0.3 @@ -5225,10 +5177,6 @@ snapshots: dom-accessibility-api@0.6.3: {} - dot-prop@5.3.0: - dependencies: - is-obj: 2.0.0 - duplexer@0.1.2: {} emoji-regex@10.6.0: {} @@ -5278,43 +5226,43 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)): + eslint-config-prettier@10.1.8(eslint@10.6.0(jiti@2.7.0)): dependencies: - eslint: 10.5.0(jiti@2.7.0) + eslint: 10.6.0(jiti@2.7.0) - eslint-plugin-perfectionist@5.9.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-perfectionist@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.7.0) + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.7.0) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-storybook@10.4.6(eslint@10.5.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3): + eslint-plugin-storybook@10.4.6(eslint@10.6.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.7.0) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.7.0) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-svelte@3.19.0(eslint@10.5.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + eslint-plugin-svelte@3.20.0(eslint@10.6.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.5.0(jiti@2.7.0) + eslint: 10.6.0(jiti@2.7.0) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.15 - postcss-load-config: 3.1.4(postcss@8.5.15) - postcss-safe-parser: 7.0.1(postcss@8.5.15) + postcss: 8.5.16 + postcss-load-config: 3.1.4(postcss@8.5.16) + postcss-safe-parser: 7.0.1(postcss@8.5.16) semver: 7.8.5 - svelte-eslint-parser: 1.8.0(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + svelte-eslint-parser: 1.8.0(svelte@5.56.4(@typescript-eslint/types@8.63.0)) optionalDependencies: - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) transitivePeerDependencies: - ts-node @@ -5336,9 +5284,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.5.0(jiti@2.7.0): + eslint@10.6.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -5402,11 +5350,11 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - esrap@2.2.12(@typescript-eslint/types@8.62.0): + esrap@2.2.12(@typescript-eslint/types@8.63.0): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 optionalDependencies: - '@typescript-eslint/types': 8.62.0 + '@typescript-eslint/types': 8.63.0 esrecurse@4.3.0: dependencies: @@ -5444,9 +5392,9 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 file-entry-cache@8.0.0: dependencies: @@ -5492,14 +5440,6 @@ snapshots: get-east-asian-width@1.6.0: {} - git-raw-commits@5.0.1(conventional-commits-parser@6.4.0): - dependencies: - '@conventional-changelog/git-client': 2.7.0(conventional-commits-parser@6.4.0) - meow: 13.2.0 - transitivePeerDependencies: - - conventional-commits-filter - - conventional-commits-parser - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -5564,8 +5504,6 @@ snapshots: is-number@7.0.0: {} - is-obj@2.0.0: {} - is-plain-obj@4.1.0: {} is-reference@3.0.3: @@ -5721,8 +5659,6 @@ snapshots: mdn-data@2.27.1: {} - meow@13.2.0: {} - merge2@1.4.1: {} micromatch@4.0.8: @@ -5732,12 +5668,12 @@ snapshots: min-indent@1.0.1: {} - miniflare@4.20260623.0: + miniflare@4.20260708.1: dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.34.5 undici: 7.28.0 - workerd: 1.20260623.1 + workerd: 1.20260708.1 ws: 8.21.0 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -5909,7 +5845,7 @@ snapshots: picomatch@2.3.2: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} pkg-types@1.3.1: dependencies: @@ -5927,27 +5863,27 @@ snapshots: pngjs@7.0.0: {} - postcss-load-config@3.1.4(postcss@8.5.15): + postcss-load-config@3.1.4(postcss@8.5.16): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: - postcss: 8.5.15 + postcss: 8.5.16 - postcss-safe-parser@7.0.1(postcss@8.5.15): + postcss-safe-parser@7.0.1(postcss@8.5.16): dependencies: - postcss: 8.5.15 + postcss: 8.5.16 - postcss-scss@4.0.9(postcss@8.5.15): + postcss-scss@4.0.9(postcss@8.5.16): dependencies: - postcss: 8.5.15 + postcss: 8.5.16 postcss-selector-parser@7.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.15: + postcss@8.5.16: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -5955,12 +5891,12 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@4.1.1(prettier@3.8.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + prettier-plugin-svelte@4.1.1(prettier@3.9.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: - prettier: 3.8.4 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + prettier: 3.9.5 + svelte: 5.56.4(@typescript-eslint/types@8.63.0) - prettier@3.8.4: {} + prettier@3.9.5: {} pretty-format@27.5.1: dependencies: @@ -6012,26 +5948,26 @@ snapshots: reusify@1.1.0: {} - rolldown@1.1.2: + rolldown@1.1.5: dependencies: - '@oxc-project/types': 0.137.0 + '@oxc-project/types': 0.139.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.2 - '@rolldown/binding-darwin-arm64': 1.1.2 - '@rolldown/binding-darwin-x64': 1.1.2 - '@rolldown/binding-freebsd-x64': 1.1.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.2 - '@rolldown/binding-linux-arm64-gnu': 1.1.2 - '@rolldown/binding-linux-arm64-musl': 1.1.2 - '@rolldown/binding-linux-ppc64-gnu': 1.1.2 - '@rolldown/binding-linux-s390x-gnu': 1.1.2 - '@rolldown/binding-linux-x64-gnu': 1.1.2 - '@rolldown/binding-linux-x64-musl': 1.1.2 - '@rolldown/binding-openharmony-arm64': 1.1.2 - '@rolldown/binding-wasm32-wasi': 1.1.2 - '@rolldown/binding-win32-arm64-msvc': 1.1.2 - '@rolldown/binding-win32-x64-msvc': 1.1.2 + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 run-applescript@7.1.0: {} @@ -6039,14 +5975,14 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.35.1(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + runed@0.35.1(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) optionalDependencies: - '@sveltejs/kit': 2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) sade@1.8.1: dependencies: @@ -6113,11 +6049,11 @@ snapshots: std-env@4.1.0: {} - storybook-addon-pseudo-states@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)): + storybook-addon-pseudo-states@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)): dependencies: - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.8.4)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -6136,7 +6072,7 @@ snapshots: ws: 8.21.0 optionalDependencies: '@types/react': 19.2.17 - prettier: 3.8.4 + prettier: 3.9.5 transitivePeerDependencies: - '@testing-library/dom' - bufferutil @@ -6168,58 +6104,58 @@ snapshots: dependencies: has-flag: 4.0.0 - svelte-ast-print@0.4.2(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + svelte-ast-print@0.4.2(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: esrap: 1.2.2 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) zimmerframe: 1.1.2 - svelte-check@4.7.1(picomatch@4.0.4)(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3): + svelte-check@4.7.2(picomatch@4.0.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 '@sveltejs/load-config': 0.2.0 chokidar: 4.0.3 - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.5) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) typescript: 6.0.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.8.0(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + svelte-eslint-parser@1.8.0(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.15 - postcss-scss: 4.0.9(postcss@8.5.15) + postcss: 8.5.16 + postcss-scss: 4.0.9(postcss@8.5.16) postcss-selector-parser: 7.1.4 semver: 7.8.5 optionalDependencies: - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) - svelte-parse-markup@0.1.5(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + svelte-parse-markup@0.1.5(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.68.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@6.0.3)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.62.0)) + runed: 0.35.1(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) style-to-object: 1.0.14 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) transitivePeerDependencies: - '@sveltejs/kit' - svelte2tsx@0.7.56(svelte@5.56.4(@typescript-eslint/types@8.62.0))(typescript@5.9.3): + svelte2tsx@0.7.56(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3): dependencies: dedent-js: 1.0.1 scule: 1.3.0 - svelte: 5.56.4(@typescript-eslint/types@8.62.0) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) typescript: 5.9.3 - svelte@5.56.4(@typescript-eslint/types@8.62.0): + svelte@5.56.4(@typescript-eslint/types@8.63.0): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -6232,7 +6168,7 @@ snapshots: clsx: 2.1.1 devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.12(@typescript-eslint/types@8.62.0) + esrap: 2.2.12(@typescript-eslint/types@8.63.0) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -6258,8 +6194,8 @@ snapshots: tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinyrainbow@2.0.0: {} @@ -6287,19 +6223,19 @@ snapshots: type-fest@2.19.0: {} - type-fest@5.7.0: + type-fest@5.8.0: dependencies: tagged-tag: 1.0.0 type-level-regexp@0.1.17: {} - typescript-eslint@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3): + typescript-eslint@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.62.0(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/parser': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.62.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.5.0(jiti@2.7.0) + '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.6.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -6333,29 +6269,29 @@ snapshots: universalify@2.0.1: {} - unocss@66.7.2(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): - dependencies: - '@unocss/cli': 66.7.2 - '@unocss/core': 66.7.2 - '@unocss/preset-attributify': 66.7.2 - '@unocss/preset-icons': 66.7.2 - '@unocss/preset-mini': 66.7.2 - '@unocss/preset-tagify': 66.7.2 - '@unocss/preset-typography': 66.7.2 - '@unocss/preset-uno': 66.7.2 - '@unocss/preset-web-fonts': 66.7.2 - '@unocss/preset-wind': 66.7.2 - '@unocss/preset-wind3': 66.7.2 - '@unocss/preset-wind4': 66.7.2 - '@unocss/transformer-attributify-jsx': 66.7.2 - '@unocss/transformer-compile-class': 66.7.2 - '@unocss/transformer-directives': 66.7.2 - '@unocss/transformer-variant-group': 66.7.2 - '@unocss/vite': 66.7.2(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + unocss@66.7.5(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): + dependencies: + '@unocss/cli': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/preset-attributify': 66.7.5 + '@unocss/preset-icons': 66.7.5 + '@unocss/preset-mini': 66.7.5 + '@unocss/preset-tagify': 66.7.5 + '@unocss/preset-typography': 66.7.5 + '@unocss/preset-uno': 66.7.5 + '@unocss/preset-web-fonts': 66.7.5 + '@unocss/preset-wind': 66.7.5 + '@unocss/preset-wind3': 66.7.5 + '@unocss/preset-wind4': 66.7.5 + '@unocss/transformer-attributify-jsx': 66.7.5 + '@unocss/transformer-compile-class': 66.7.5 + '@unocss/transformer-directives': 66.7.5 + '@unocss/transformer-variant-group': 66.7.5 + '@unocss/vite': 66.7.5(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) transitivePeerDependencies: - vite - unplugin-fonts@2.0.0(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + unplugin-fonts@2.0.0(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): dependencies: css-tree: 3.2.1 fast-glob: 3.3.3 @@ -6363,24 +6299,24 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 unplugin: 3.0.0 - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) unplugin-utils@0.3.1: dependencies: pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 acorn: 8.17.0 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 unplugin@3.0.0: dependencies: '@jridgewell/remapping': 2.3.5 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 uri-js@4.4.1: @@ -6403,60 +6339,60 @@ snapshots: transitivePeerDependencies: - rollup - vite-plugin-devtools-json@1.0.0(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + vite-plugin-devtools-json@1.0.0(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): dependencies: uuid: 11.1.1 - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) - vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0): + vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0): dependencies: lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.15 - rolldown: 1.1.2 + picomatch: 4.0.5 + postcss: 8.5.16 + rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.13.2 + '@types/node': 24.13.3 esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 - vitefu@1.1.3(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + vitefu@1.1.3(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): optionalDependencies: - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) - vitest-browser-svelte@2.1.1(svelte@5.56.4(@typescript-eslint/types@8.62.0))(vitest@4.1.9): + vitest-browser-svelte@3.0.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vitest@4.1.10): dependencies: - '@testing-library/svelte-core': 1.0.0(svelte@5.56.4(@typescript-eslint/types@8.62.0)) - svelte: 5.56.4(@typescript-eslint/types@8.62.0) - vitest: 4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) + '@testing-library/svelte-core': 1.1.3(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + svelte: 5.56.4(@typescript-eslint/types@8.63.0) + vitest: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) - vitest@4.1.9(@types/node@24.13.2)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)): + vitest@4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): dependencies: - '@vitest/expect': 4.1.9 - '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0)) - '@vitest/pretty-format': 4.1.9 - '@vitest/runner': 4.1.9 - '@vitest/snapshot': 4.1.9 - '@vitest/spy': 4.1.9 - '@vitest/utils': 4.1.9 + '@vitest/expect': 4.1.10 + '@vitest/mocker': 4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@vitest/pretty-format': 4.1.10 + '@vitest/runner': 4.1.10 + '@vitest/snapshot': 4.1.10 + '@vitest/spy': 4.1.10 + '@vitest/utils': 4.1.10 es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.3 pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 std-env: 4.1.0 tinybench: 2.9.0 tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0) + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.13.2 - '@vitest/browser-playwright': 4.1.9(playwright@1.61.1)(vite@8.1.0(@types/node@24.13.2)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.9) - '@vitest/coverage-v8': 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + '@types/node': 24.13.3 + '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) + '@vitest/coverage-v8': 4.1.10(@vitest/browser@4.1.10)(vitest@4.1.10) transitivePeerDependencies: - msw @@ -6473,29 +6409,29 @@ snapshots: word-wrap@1.2.5: {} - workerd@1.20260623.1: + workerd@1.20260708.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260623.1 - '@cloudflare/workerd-darwin-arm64': 1.20260623.1 - '@cloudflare/workerd-linux-64': 1.20260623.1 - '@cloudflare/workerd-linux-arm64': 1.20260623.1 - '@cloudflare/workerd-windows-64': 1.20260623.1 + '@cloudflare/workerd-darwin-64': 1.20260708.1 + '@cloudflare/workerd-darwin-arm64': 1.20260708.1 + '@cloudflare/workerd-linux-64': 1.20260708.1 + '@cloudflare/workerd-linux-arm64': 1.20260708.1 + '@cloudflare/workerd-windows-64': 1.20260708.1 worktop@0.8.0-next.18: dependencies: mrmime: 2.0.1 regexparam: 3.0.0 - wrangler@4.104.0: + wrangler@4.110.0: dependencies: '@cloudflare/kv-asset-handler': 0.5.0 - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260623.1) + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260708.1) blake3-wasm: 2.1.5 esbuild: 0.28.1 - miniflare: 4.20260623.0 + miniflare: 4.20260708.1 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260623.1 + workerd: 1.20260708.1 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: From fc8282316321c3a28d431a7d9a37f6b081077af4 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 15 Jul 2026 03:45:30 -0700 Subject: [PATCH 039/141] chore(deps): bump dev tooling within semver ranges storybook stack 10.4.6 -> 10.5.0, eslint 10.6.0 -> 10.7.0, eslint-plugin-storybook 10.5.0, @sveltejs/kit 2.69.2 -> 2.69.3, typescript-eslint 8.63.0 -> 8.64.0 (plus in-range transitive updates). Out-of-range majors (typescript 7, @types/node 26, node 26) are left for a deliberate breaking-change pass. --- package.json | 20 +- pnpm-lock.yaml | 989 ++++++++++++++++++++++++++----------------------- 2 files changed, 539 insertions(+), 470 deletions(-) diff --git a/package.json b/package.json index ece69e6..eec048e 100644 --- a/package.json +++ b/package.json @@ -41,15 +41,15 @@ "@commitlint/types": "^21.2.0", "@eslint/js": "^10.0.1", "@iconify-json/mdi": "^1.2.3", - "@storybook/addon-a11y": "^10.4.6", - "@storybook/addon-docs": "^10.4.6", + "@storybook/addon-a11y": "^10.5.0", + "@storybook/addon-docs": "^10.5.0", "@storybook/addon-svelte-csf": "^5.1.2", - "@storybook/addon-vitest": "^10.4.6", - "@storybook/sveltekit": "^10.4.6", + "@storybook/addon-vitest": "^10.5.0", + "@storybook/sveltekit": "^10.5.0", "@stylistic/eslint-plugin": "^5.10.0", "@sveltejs/adapter-cloudflare": "^7.2.9", "@sveltejs/enhanced-img": "^0.11.0", - "@sveltejs/kit": "^2.69.2", + "@sveltejs/kit": "^2.69.3", "@sveltejs/vite-plugin-svelte": "^7.2.0", "@types/culori": "^4.0.1", "@types/node": "^24.13.3", @@ -60,22 +60,22 @@ "@vitest/browser-playwright": "^4.1.10", "@vitest/coverage-v8": "^4.1.10", "chromatic": "^18.0.1", - "eslint": "^10.6.0", + "eslint": "^10.7.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-perfectionist": "^5.10.0", - "eslint-plugin-storybook": "^10.4.6", + "eslint-plugin-storybook": "^10.5.0", "eslint-plugin-svelte": "^3.20.0", "globals": "^17.7.0", "playwright": "^1.61.1", "prettier": "^3.9.5", "prettier-plugin-svelte": "^4.1.1", - "storybook": "^10.4.6", - "storybook-addon-pseudo-states": "^10.4.6", + "storybook": "^10.5.0", + "storybook-addon-pseudo-states": "^10.5.0", "svelte": "^5.56.4", "svelte-check": "^4.7.2", "type-fest": "^5.8.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.63.0", + "typescript-eslint": "^8.64.0", "unocss": "^66.7.5", "unplugin-fonts": "^2.0.0", "vite": "^8.1.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2761b6c..dfbd617 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,14 +27,14 @@ importers: version: 66.7.5 bits-ui: specifier: ^2.18.1 - version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + version: 2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) culori: specifier: ^4.0.2 version: 4.0.2 devDependencies: '@chromatic-com/storybook': specifier: ^5.2.1 - version: 5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + version: 5.2.1(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7)) '@commitlint/cli': specifier: ^21.2.1 version: 21.2.1(@types/node@24.13.3)(conventional-commits-parser@7.1.0)(typescript@6.0.3) @@ -46,40 +46,40 @@ importers: version: 21.2.0 '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.6.0(jiti@2.7.0)) + version: 10.0.1(eslint@10.7.0(jiti@2.7.0)) '@iconify-json/mdi': specifier: ^1.2.3 version: 1.2.3 '@storybook/addon-a11y': - specifier: ^10.4.6 - version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + specifier: ^10.5.0 + version: 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7)) '@storybook/addon-docs': - specifier: ^10.4.6 - version: 10.4.6(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + specifier: ^10.5.0 + version: 10.5.0(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@storybook/addon-svelte-csf': specifier: ^5.1.2 - version: 5.1.2(@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)))(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + version: 5.1.2(@storybook/svelte@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0)))(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@storybook/addon-vitest': - specifier: ^10.4.6 - version: 10.4.6(@vitest/browser-playwright@4.1.10)(@vitest/browser@4.1.10)(@vitest/runner@4.1.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.10) + specifier: ^10.5.0 + version: 10.5.0(@vitest/browser-playwright@4.1.10)(@vitest/browser@4.1.10)(@vitest/runner@4.1.10)(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vitest@4.1.10) '@storybook/sveltekit': - specifier: ^10.4.6 - version: 10.4.6(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + specifier: ^10.5.0 + version: 10.5.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@stylistic/eslint-plugin': specifier: ^5.10.0 - version: 5.10.0(eslint@10.6.0(jiti@2.7.0)) + version: 5.10.0(eslint@10.7.0(jiti@2.7.0)) '@sveltejs/adapter-cloudflare': specifier: ^7.2.9 - version: 7.2.9(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.110.0) + version: 7.2.9(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.110.0) '@sveltejs/enhanced-img': specifier: ^0.11.0 - version: 0.11.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + version: 0.11.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@sveltejs/kit': - specifier: ^2.69.2 - version: 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + specifier: ^2.69.3 + version: 2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@sveltejs/vite-plugin-svelte': specifier: ^7.2.0 - version: 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + version: 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@types/culori': specifier: ^4.0.1 version: 4.0.1 @@ -88,7 +88,7 @@ importers: version: 24.13.3 '@unocss/eslint-config': specifier: ^66.7.5 - version: 66.7.5(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + version: 66.7.5(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) '@unocss/extractor-svelte': specifier: ^66.7.5 version: 66.7.5 @@ -108,20 +108,20 @@ importers: specifier: ^18.0.1 version: 18.0.1 eslint: - specifier: ^10.6.0 - version: 10.6.0(jiti@2.7.0) + specifier: ^10.7.0 + version: 10.7.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.6.0(jiti@2.7.0)) + version: 10.1.8(eslint@10.7.0(jiti@2.7.0)) eslint-plugin-perfectionist: specifier: ^5.10.0 - version: 5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + version: 5.10.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-storybook: - specifier: ^10.4.6 - version: 10.4.6(eslint@10.6.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3) + specifier: ^10.5.0 + version: 10.5.0(eslint@10.7.0(jiti@2.7.0))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(typescript@6.0.3) eslint-plugin-svelte: specifier: ^3.20.0 - version: 3.20.0(eslint@10.6.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + version: 3.20.0(eslint@10.7.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) globals: specifier: ^17.7.0 version: 17.7.0 @@ -136,19 +136,19 @@ importers: version: 3.9.5 prettier-plugin-svelte: specifier: ^4.1.1 - version: 4.1.1(prettier@3.9.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + version: 4.1.1(prettier@3.9.5)(svelte@5.56.4(@typescript-eslint/types@8.64.0)) storybook: - specifier: ^10.4.6 - version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + specifier: ^10.5.0 + version: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) storybook-addon-pseudo-states: - specifier: ^10.4.6 - version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + specifier: ^10.5.0 + version: 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7)) svelte: specifier: ^5.56.4 - version: 5.56.4(@typescript-eslint/types@8.63.0) + version: 5.56.4(@typescript-eslint/types@8.64.0) svelte-check: specifier: ^4.7.2 - version: 4.7.2(picomatch@4.0.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3) + version: 4.7.2(picomatch@4.0.5)(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3) type-fest: specifier: ^5.8.0 version: 5.8.0 @@ -156,14 +156,14 @@ importers: specifier: ^6.0.3 version: 6.0.3 typescript-eslint: - specifier: ^8.63.0 - version: 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + specifier: ^8.64.0 + version: 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) unocss: specifier: ^66.7.5 version: 66.7.5(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) unplugin-fonts: specifier: ^2.0.0 - version: 2.0.0(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + version: 2.0.0(esbuild@0.28.1)(rolldown@1.1.5)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) vite: specifier: ^8.1.4 version: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) @@ -175,7 +175,7 @@ importers: version: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) vitest-browser-svelte: specifier: ^3.0.0 - version: 3.0.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vitest@4.1.10) + version: 3.0.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vitest@4.1.10) wrangler: specifier: ^4.110.0 version: 4.110.0 @@ -273,8 +273,8 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20260613.1': - resolution: {integrity: sha512-1mrgjE6epolwBhroeGAp5ud5H6Vyi6tl1o/NP0T4rXJ8bmEjmhHnbCzAhHTDHV0PIeip43wcuzHKJarvaGTaUA==} + '@cloudflare/workers-types@4.20260702.1': + resolution: {integrity: sha512-mOhf5TUEB1m2vPrxtqoIGfz0fUC9xyxRDx5gWHy5s+OCo6dcV+g7wI1R7gYCMFohhqF/2y2xeKVwMwCJjfn/WA==} '@commitlint/cli@21.2.1': resolution: {integrity: sha512-blsZGe29hJ72VGEFVl72IVYX+1vsfINpjA9yWQA6i7OKD/McGEOXg08sKIRKjFk4JvzhV/9n0l3i6NooPLTNfg==} @@ -371,6 +371,9 @@ packages: '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} @@ -380,6 +383,9 @@ packages: '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} @@ -584,14 +590,14 @@ packages: resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@floating-ui/core@1.7.5': - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - '@floating-ui/dom@1.7.6': - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} '@fontsource-variable/work-sans@5.2.8': resolution: {integrity: sha512-8uWtTt0/B5NxGie9xUVD5y5Ch4Q+Hy7kFYKtUpwYbzSAgJEoaMxT8rMnfnK7zfAYSLC8GnGO1/tXrFtKIYYQVQ==} @@ -625,8 +631,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@3.1.3': - resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} + '@iconify/utils@3.1.4': + resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} @@ -1093,106 +1099,106 @@ packages: '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - '@oxc-resolver/binding-android-arm-eabi@11.20.0': - resolution: {integrity: sha512-IjfWOXRgJFNdORDl+Uf1aibNgZY2guOD3zmOhx1BGVb/MIiqlFTdmjpQNplSN58lhWehnX4UNqC3QwpUo8pjJg==} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.20.0': - resolution: {integrity: sha512-QqslZAuFQG8Q9xm7JuIn8JUbvywhSBMVhuQHtYW+auirZJloS41oxUUaBXk7uUhZJgp44c5zQLeVvmFaDQB+2Q==} + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.20.0': - resolution: {integrity: sha512-MUcavykj2ewlR+kc5arpg4tC2RvzJkUxWtNv74pf7lcNk00GpIpN43vXMj+j6r4eMmfZhlb8hueKoIb8e9kAGQ==} + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.20.0': - resolution: {integrity: sha512-BGB16nRUK5Etiv//ihPyzj8Lj1px0mhh4YIfe0FDf045ywknfSm0GEbiRESpr6Q4K82AvnyaRIhhluHByvS4bg==} + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.20.0': - resolution: {integrity: sha512-JZgtePaqj3qmD5XFHJaSLWzHRxQu0LaPkdoM1KJXYADvAaa83ijXHclV3ej3CueeW0wxfIAbGCZVP45J0CA7uQ==} + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.20.0': - resolution: {integrity: sha512-hOQ/p3ry3v3SchUBXicrrnszaI/UmYzM4wtS4RGfwgVUX7a+HbyQSzJ5aOzu+o6XZkFkS3ZXN4PZAzhOb77OSg==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.20.0': - resolution: {integrity: sha512-2ArPksaw0AqeuGBfoS715VF+JvJQAhD2niWgjE5hVO+L+nAfikVQopvngCMX9x4BD8itWoQ3dnikrQyl5Ho5Jg==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.20.0': - resolution: {integrity: sha512-0bJnmYFp62JdZ4nVMDUZ/C58BCZOCcqgKtnUlp7L9Ojf/czIN+3j72YlLPeWLkzlr6SlYvIQA4SGV/HyO0d+qg==} + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@11.20.0': - resolution: {integrity: sha512-wKHHzPKZo7Ufhv/Bt6yxT7FOgnIgW4gwXcJUipkShGp68W3wGVqvr1Sr0fY65lN0Oy6y41+g2kIDvkgZaMMUkw==} + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': - resolution: {integrity: sha512-RN8goF7Ie0B79L4i4G6OeBocTgSC56vJbQ65VJje+oXnldVpLnOU7j/AQ/dP94TcCS+Yh6WG8u3Qt4ETteXFNQ==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': - resolution: {integrity: sha512-5l1yU6/xQEqLZRzxqmMxJfWPslpwCmBsdDGaBvABPehxquCXDC7dd7oraNdKSJUMDXSM7VvVj8H2D2FTjU7oWw==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': - resolution: {integrity: sha512-xHEvkbgz6UC+A3JOyDQy76LkUaxsNSfIr3/GV8slwZsnuooJiIB34gzJfsyvR4JdCYNUUPsRJc/w/oWkODu+hg==} + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': - resolution: {integrity: sha512-aWPDUUmSeyHvlW+SoEUd+JIJsQhVhu6a5tBpDRMu058naPAchTgAVGCFy35zjbnFlt0i8hLWziff6HX0D3LU4g==} + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@11.20.0': - resolution: {integrity: sha512-x2YeSimvhJjKLVD8KSu8f/rqU1potcdEMkApIPJqjZWN7c2Fpt4g2X32WDg1p+XDAmyT7nuQGe0vnhvXeLbH+g==} + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@11.20.0': - resolution: {integrity: sha512-kcRLEIxpZefeYfLChjpgFf3ilBzRDZ+yobMrpRsQlSrxuFGtm3U6PMU7AaEpMqo3NfDGVyJJseAjnRLzMFHjwQ==} + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-resolver/binding-openharmony-arm64@11.20.0': - resolution: {integrity: sha512-HHcfnApSZGtKhTiHqe8OZruOZe5XuFQH5/E0Yhj3u8fnFvzkM4/k6WjacUf4SvA0SPEAbfbgYmVPuo0VX/fIBQ==} + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} cpu: [arm64] os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@11.20.0': - resolution: {integrity: sha512-Tn0y1XOFYHNfK1wp1Z5QK8Rcld/bsOwRISQXfqAZ5IBpv8Gz1IvV39fUWNprqNdRizgcvFhOzWwFun2zkJsyBg==} + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': - resolution: {integrity: sha512-qPi25YNPe4YenS8MgsQU2+bIFHxxpLx1LVna2444cEHqNPhNjvWf9zqj4aWE43H9LpAsTmkkAlA3eL5ElBU3mA==} + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@11.20.0': - resolution: {integrity: sha512-Wb14jWEW8huH6It9F6sXd9vrYmIS7pMrgkU6sxpLxkP+9z+wRgs71hUEhRpcn8FOXAFa27FVWfY2tRpbfTzfLw==} + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} cpu: [x64] os: [win32] @@ -1340,16 +1346,16 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@storybook/addon-a11y@10.4.6': - resolution: {integrity: sha512-XCJy+f0DFOiCgUU9knRDlLDxVFI+AAQ3/wE/NF85zB9iDPPS2DwkSN+mas3zDgHt66zhN8Cq3/UiyCDUweV9Zw==} + '@storybook/addon-a11y@10.5.0': + resolution: {integrity: sha512-AguqTsYS2NX20AF1vWt6IonbkpMXur30/dAOOYltbEW7uKmPxBNtjuiBmYB2WI4aFN4r8jje4bbDGk/Yfq58hQ==} peerDependencies: - storybook: ^10.4.6 + storybook: ^10.5.0 - '@storybook/addon-docs@10.4.6': - resolution: {integrity: sha512-aWAfP5JMiT5a3zBJizwroCRzOCqZwDTJmvsYvwMD3ilIEa/kT1vhf6Xrbk4XIPhDwbh8Hpb/Gfnka1xBYEISWg==} + '@storybook/addon-docs@10.5.0': + resolution: {integrity: sha512-kbZGdX+mysiY4xezhpcFEwzQ1zSXcMhSS3u09Qt8+w5XetCAMMSv/yAxzpi6z+YoH+EdQ53e1q3MFtPUkzkfUA==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.4.6 + storybook: ^10.5.0 peerDependenciesMeta: '@types/react': optional: true @@ -1363,13 +1369,13 @@ packages: svelte: ^5.0.0 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/addon-vitest@10.4.6': - resolution: {integrity: sha512-VvskHge0GZy86LG6kcY5Ww34z8rDV8JBxqSdUpcJVsWfIvyX6MfAbqI76LlereSyBIJGZJZsqaLwRXsQoVY+0Q==} + '@storybook/addon-vitest@10.5.0': + resolution: {integrity: sha512-o/H+ii8o7bu4r1M4pgyFt+DjVaIIccSeaAikpspNHKkKdiJ2GXfkgNwtib8Jru28HaBRfcP5u+m0QE3KBYIQkw==} peerDependencies: '@vitest/browser': ^3.0.0 || ^4.0.0 '@vitest/browser-playwright': ^4.0.0 '@vitest/runner': ^3.0.0 || ^4.0.0 - storybook: ^10.4.6 + storybook: ^10.5.0 vitest: ^3.0.0 || ^4.0.0 peerDependenciesMeta: '@vitest/browser': @@ -1381,18 +1387,18 @@ packages: vitest: optional: true - '@storybook/builder-vite@10.4.6': - resolution: {integrity: sha512-BHBtD81HiXUiDQz/CaFynLtWmm7AFUQn8VnXuHipZ8KlnUANopa4yqdVuy/Gwz8ub254uFI5NMZsW/KlgWNgNg==} + '@storybook/builder-vite@10.5.0': + resolution: {integrity: sha512-KXlifNIThDgS84KqVAJXyilool8OLTWp6DGoO9h5bHM2IPLe7UcdKfOzMUBkQ807mWBk4aW1yGEekj7kC2dvmg==} peerDependencies: - storybook: ^10.4.6 + storybook: ^10.5.0 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/csf-plugin@10.4.6': - resolution: {integrity: sha512-NILLxDqpA/JR/AazGWpsz+4fadJwRU4uhHephGtYpVOWnQA/DkJfKT6zpcJVq8+QA8A2zKMLX3GVKsXIrxjuDA==} + '@storybook/csf-plugin@10.5.0': + resolution: {integrity: sha512-R7VFw6FnDZTWct0ekOcFnTfDgdHnnAuQW+AbGG9A9IZPvyH9uLJivK7L86+r9MITRrO2+v81HaFDsT/OFk6ZkQ==} peerDependencies: esbuild: '*' rollup: '*' - storybook: ^10.4.6 + storybook: ^10.5.0 vite: '*' webpack: '*' peerDependenciesMeta: @@ -1411,44 +1417,43 @@ packages: '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - '@storybook/icons@2.0.2': - resolution: {integrity: sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw==} + '@storybook/icons@2.1.0': + resolution: {integrity: sha512-Fxh9vYpX9bQqFeHRiY8h2ApeRGDzRSMLwJwNZ/AIRqnyOKHxRKL+yFe+ctEkVJmuptRE9u1Hrn8ZZNHyfDKKNg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@storybook/react-dom-shim@10.4.6': - resolution: {integrity: sha512-iGNmKzrq9vgl2PDrYAnZKI+yvac3Ym+lJXXuQaqlFRS23zA5MNm4EBX+rAG7WulqchoK6NaZ0KQOs2mAgEpTMg==} + '@storybook/react-dom-shim@10.5.0': + resolution: {integrity: sha512-GwGA6zDj4Cfw6vGsdfPKfF39L0W6solNbbnjdjGa57m2ooASkidLhrXo2wgC9wh3o/jcfonmYPDRGY6sEhGDtg==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.4.6 + storybook: ^10.5.0 peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true - '@storybook/svelte-vite@10.4.6': - resolution: {integrity: sha512-zyFg12tksWb0gLK29ucyZO5oNh4veu4biMeJgAEPEALjHw8HysP7mTA4547JYprk3JzORpwSqQ7Y9TPPB0ZwFA==} + '@storybook/svelte-vite@10.5.0': + resolution: {integrity: sha512-cO6zPGlD94X88Ok2ep2IagAmWUgOWCXa3qfNc2ayDuEB8c/Dtxk9EfPooO1TmLK4p/xcfDWeKwnLi0VOk3YWBQ==} peerDependencies: '@sveltejs/vite-plugin-svelte': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - storybook: ^10.4.6 + storybook: ^10.5.0 svelte: ^5.0.0 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/svelte@10.4.6': - resolution: {integrity: sha512-U73tDy/2vgY83Zjjy7Q5Lz0ElpZZjGQHZHZd1rrD0gv1+Zas/7aTnRjRqIUrBNqHBx1S8VA5Tzp5YI0FkM1IOw==} + '@storybook/svelte@10.5.0': + resolution: {integrity: sha512-IrW7UH4UoQKTAjQszvb3gpjdKd3/8b4mfZqWx3gCpPmN/+wN0cmKiGA2v21Ss6LlYC1TL9bp5sN8JsWlQTQJ0A==} peerDependencies: - storybook: ^10.4.6 + storybook: ^10.5.0 svelte: ^5.0.0 - '@storybook/sveltekit@10.4.6': - resolution: {integrity: sha512-DAbNFUr3B/XiUUUZak2TcjxCxB7eRCCgt4P0MSm9LdFTyePBdU13jybuArUfHqp6lgwqNgbFIjv1nazPjHq51g==} + '@storybook/sveltekit@10.5.0': + resolution: {integrity: sha512-LUNkPXNR+GuPHql6fAp2po1lr9/TskpmwFN8OvF+ooo4lUqdS/0/ADy0Z6b6SGEGGTJLbgSjKlq2Jp9gdylX4w==} peerDependencies: - storybook: ^10.4.6 + storybook: ^10.5.0 svelte: ^5.0.0 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1458,8 +1463,8 @@ packages: peerDependencies: eslint: ^9.0.0 || ^10.0.0 - '@sveltejs/acorn-typescript@1.0.10': - resolution: {integrity: sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==} + '@sveltejs/acorn-typescript@1.0.11': + resolution: {integrity: sha512-LFuZUkjJ9iF7JZye/aG5XM0SFcQ5VyL0oVX4WJ9dc0Va3R3s0OauX1BESVCb+YN/ol8TAfqGDDAQsTG627Y5kw==} peerDependencies: acorn: ^8.9.0 @@ -1476,8 +1481,8 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || >=7.0.0 - '@sveltejs/kit@2.69.2': - resolution: {integrity: sha512-CMdPDbYjRwRu4KXTxBVMuOpFPCt1i/v0ANennotec+K9Cmb2e3w2yYzJiC6Vh/WSvm9Khi5sJMZa0rJPqfHlDw==} + '@sveltejs/kit@2.69.3': + resolution: {integrity: sha512-cphwqMRcE19/9VkrIPr5qZhQ0SptSSDfDzRUpYHu9OJDFGuYBFyJzK+KQA27wB4YG32O/yF2QjBkDmTyo0vtCw==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1565,63 +1570,63 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@typescript-eslint/eslint-plugin@8.63.0': - resolution: {integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==} + '@typescript-eslint/eslint-plugin@8.64.0': + resolution: {integrity: sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.63.0 + '@typescript-eslint/parser': ^8.64.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.63.0': - resolution: {integrity: sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==} + '@typescript-eslint/parser@8.64.0': + resolution: {integrity: sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.63.0': - resolution: {integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==} + '@typescript-eslint/project-service@8.64.0': + resolution: {integrity: sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.63.0': - resolution: {integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==} + '@typescript-eslint/scope-manager@8.64.0': + resolution: {integrity: sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.63.0': - resolution: {integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==} + '@typescript-eslint/tsconfig-utils@8.64.0': + resolution: {integrity: sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.63.0': - resolution: {integrity: sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==} + '@typescript-eslint/type-utils@8.64.0': + resolution: {integrity: sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.63.0': - resolution: {integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==} + '@typescript-eslint/types@8.64.0': + resolution: {integrity: sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.63.0': - resolution: {integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==} + '@typescript-eslint/typescript-estree@8.64.0': + resolution: {integrity: sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.63.0': - resolution: {integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==} + '@typescript-eslint/utils@8.64.0': + resolution: {integrity: sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.63.0': - resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} + '@typescript-eslint/visitor-keys@8.64.0': + resolution: {integrity: sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unocss/cli@66.7.5': @@ -1852,8 +1857,8 @@ packages: blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - brace-expansion@5.0.6: - resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -2087,11 +2092,11 @@ packages: error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - es-module-lexer@2.1.0: - resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} - es-toolkit@1.47.1: - resolution: {integrity: sha512-5RAqEwf4P4E17p+W75KLOWw/nOvKZzSQpxM32IpI2KZLaVonjTrZ0Ai5ghMaVI9eKC2p8eoQgcBdkEDgzFk6+Q==} + es-toolkit@1.49.0: + resolution: {integrity: sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==} esbuild@0.28.1: resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} @@ -2118,11 +2123,11 @@ packages: peerDependencies: eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 - eslint-plugin-storybook@10.4.6: - resolution: {integrity: sha512-CfGSXn6zFspeYTU8R7v797MOmJFj8xc6MWf/oGuRwbKeMoSwnliR+OlXSjMZYM1D6gfmwiuH1VX58LSHdn+ZPg==} + eslint-plugin-storybook@10.5.0: + resolution: {integrity: sha512-UyhbK11baKAYqzyDUHlwDlm1aP/wxPMR0vFmsxA5984BGaPwarhoXUWng1Xa0cd9BdPbQ+zr/y8ADk6XxtwkYg==} peerDependencies: eslint: '>=8' - storybook: ^10.4.6 + storybook: ^10.5.0 eslint-plugin-svelte@3.20.0: resolution: {integrity: sha512-AElKLVt7Hjy4d7ljwhrhw9hux60DCxCNkmK8cY/aAXvjs8tpR7PvU4DlyI/SA1PaJww1gh0wPGo2pbyURuEwxQ==} @@ -2154,8 +2159,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.6.0: - resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} + eslint@10.7.0: + resolution: {integrity: sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2190,8 +2195,8 @@ packages: esrap@1.4.9: resolution: {integrity: sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==} - esrap@2.2.12: - resolution: {integrity: sha512-On0QbLyaiAkVC4eXtgnXK9Kh2opit+3rcUSOc45DqJ2s/X2eXAHsGOKRSJ6IDagQEW5vPyivANfXUiqgXC67Rw==} + esrap@2.2.13: + resolution: {integrity: sha512-m8jH5hZgJE2RRUK/jjkGPcJEDAV+dYnZYFkosQaPTcE+Yw4xynXHOo6FUdwaWBtdR3b1MMa7wEDTSHeR2VWsGA==} peerDependencies: '@typescript-eslint/types': ^8.2.0 peerDependenciesMeta: @@ -2216,8 +2221,8 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} fast-deep-equal@3.1.3: @@ -2233,8 +2238,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.2: - resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fast-uri@3.1.3: + resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -2331,8 +2336,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} engines: {node: '>= 4'} imagetools-core@9.1.0: @@ -2445,6 +2450,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} @@ -2608,8 +2616,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2767,8 +2775,8 @@ packages: resolution: {integrity: sha512-SJ3/7ZPbgie8dr5Z9BI/M51zZbpXba+hRSG0MDzVwMW5CRQg2fjYE0jHGlLX4eeiibGgC/mzoDFKSDHwVZEHRQ==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-resolver@11.20.0: - resolution: {integrity: sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==} + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} oxc-walker@0.7.0: resolution: {integrity: sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==} @@ -2783,8 +2791,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - package-manager-detector@1.6.0: - resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + package-manager-detector@1.7.0: + resolution: {integrity: sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ==} parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -2871,8 +2879,8 @@ packages: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss@8.5.16: - resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + postcss@8.5.19: + resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2925,8 +2933,8 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} - recast@0.23.11: - resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + recast@0.23.12: + resolution: {integrity: sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==} engines: {node: '>= 4'} redent@3.0.0: @@ -2993,8 +3001,8 @@ packages: engines: {node: '>=10'} hasBin: true - set-cookie-parser@3.1.0: - resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} + set-cookie-parser@3.1.2: + resolution: {integrity: sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==} sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} @@ -3026,21 +3034,21 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - std-env@4.1.0: - resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} - storybook-addon-pseudo-states@10.4.6: - resolution: {integrity: sha512-yP6GgUTj2uju34ZLKzrFJz9uS+9Nn6uH3Wprei5x/KS6CSbLOuXf3pBhAfi+ur2y4Qm3l/thGyHYVcoACCbgIg==} + storybook-addon-pseudo-states@10.5.0: + resolution: {integrity: sha512-1tnEOUDmmUuWqd1P3hL+W5kRVjhgWNcuhElvqx1IVnN4pVi6UFiz94DOB+THowQfQ8DE4gEniZPyeTP5ulNdaw==} peerDependencies: - storybook: ^10.4.6 + storybook: ^10.5.0 - storybook@10.4.6: - resolution: {integrity: sha512-6wkA6LxfDSSilloITsrFOJfsnw0mDUP2h8Ls+lRt8oRsudtz2RWFhLv+Toiwg6NW7hUpdTDc2hzR7DztJid6+A==} + storybook@10.5.0: + resolution: {integrity: sha512-dRhM/kSSvHQR8DmZO41v5sJuz9U6zDjjR2gRBTgZN2RBSXbmF0Brvgszrvvxyx2VfxuYKzhB+xumKwWkwlBtig==} hasBin: true peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 prettier: ^2 || ^3 - vite-plus: ^0.1.15 + vite-plus: ^0.1.15 || ^0.2.0 peerDependenciesMeta: '@types/react': optional: true @@ -3106,8 +3114,8 @@ packages: peerDependencies: svelte: ^5.30.2 - svelte2tsx@0.7.56: - resolution: {integrity: sha512-NTvqqL+goYlW8gWNajk81L07+uu7jw5V2m1Az5MZbYm3GEydcHXh+uTrLHM9SuGuaqCtF90vlMXkOVBotfH94g==} + svelte2tsx@0.7.57: + resolution: {integrity: sha512-nQo0xEfUpSVjfkxan2UmC6Wl9UZVe9+/pglUiyBNMJ7KDQ9DDooucmXdToBOvzSfgYjj/kMYwf6CTTDz/z048w==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 @@ -3120,8 +3128,8 @@ packages: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + tabbable@6.5.0: + resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} @@ -3192,8 +3200,8 @@ packages: type-level-regexp@0.1.17: resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} - typescript-eslint@8.63.0: - resolution: {integrity: sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==} + typescript-eslint@8.64.0: + resolution: {integrity: sha512-0qg+pDNMnqYzqH9AnNK+39tejHvsShUOUUoRUgtnTGE7QuMZhiFDnozq8nHJVq+Wae6NMLKNWLg5WmkcC/ndyQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3255,17 +3263,46 @@ packages: '@nuxt/kit': optional: true - unplugin-utils@0.3.1: - resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + unplugin-utils@0.3.2: + resolution: {integrity: sha512-xVToRh2CTmLk2HnEG7ac4rl1MJTT3RFkpS8B++/SnB0kXvuaavD+n3m/vrzyWQOdJNSZQACnbz01pnppbwV5BA==} engines: {node: '>=20.19.0'} unplugin@2.3.11: resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} - unplugin@3.0.0: - resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==} + unplugin@3.3.0: + resolution: {integrity: sha512-qa66K+crbfyE6JK10GjvbJeRrOsuC/JpbnHctfyp/i4oBTxWOzJfRZyDiOk1PtErMFRu8JhsU/wPvOdBNWe5Rg==} engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@farmfe/core': '*' + '@rspack/core': '*' + bun-types-no-globals: '*' + esbuild: '*' + rolldown: '*' + rollup: '*' + unloader: '*' + vite: '*' + webpack: '*' + peerDependenciesMeta: + '@farmfe/core': + optional: true + '@rspack/core': + optional: true + bun-types-no-globals: + optional: true + esbuild: + optional: true + rolldown: + optional: true + rollup: + optional: true + unloader: + optional: true + vite: + optional: true + webpack: + optional: true uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -3483,7 +3520,7 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: - package-manager-detector: 1.6.0 + package-manager-detector: 1.7.0 tinyexec: 1.2.4 '@babel/code-frame@7.29.7': @@ -3515,12 +3552,12 @@ snapshots: dependencies: fontkitten: 1.0.3 - '@chromatic-com/storybook@5.2.1(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + '@chromatic-com/storybook@5.2.1(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))': dependencies: '@neoconfetti/react': 1.0.0 chromatic: 16.10.0 jsonfile: 6.2.1 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) strip-ansi: 7.2.0 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -3550,7 +3587,7 @@ snapshots: '@cloudflare/workerd-windows-64@1.20260708.1': optional: true - '@cloudflare/workers-types@4.20260613.1': {} + '@cloudflare/workers-types@4.20260702.1': {} '@commitlint/cli@21.2.1(@types/node@24.13.3)(conventional-commits-parser@7.1.0)(typescript@6.0.3)': dependencies: @@ -3581,7 +3618,7 @@ snapshots: '@commitlint/ensure@21.2.0': dependencies: '@commitlint/types': 21.2.0 - es-toolkit: 1.47.1 + es-toolkit: 1.49.0 '@commitlint/execute-rule@21.0.1': {} @@ -3610,7 +3647,7 @@ snapshots: '@commitlint/types': 21.2.0 cosmiconfig: 9.0.2(typescript@6.0.3) cosmiconfig-typescript-loader: 6.3.0(@types/node@24.13.3)(cosmiconfig@9.0.2(typescript@6.0.3))(typescript@6.0.3) - es-toolkit: 1.47.1 + es-toolkit: 1.49.0 is-plain-obj: 4.1.0 picocolors: 1.1.1 transitivePeerDependencies: @@ -3639,7 +3676,7 @@ snapshots: dependencies: '@commitlint/config-validator': 21.2.0 '@commitlint/types': 21.2.0 - es-toolkit: 1.47.1 + es-toolkit: 1.49.0 global-directory: 5.0.0 resolve-from: 5.0.0 @@ -3687,6 +3724,12 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/core@1.9.2': dependencies: '@emnapi/wasi-threads': 1.2.1 @@ -3703,6 +3746,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 @@ -3796,9 +3844,9 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0(jiti@2.7.0))': dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -3819,9 +3867,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.6.0(jiti@2.7.0))': + '@eslint/js@10.0.1(eslint@10.7.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) '@eslint/object-schema@3.0.5': {} @@ -3830,16 +3878,16 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@floating-ui/core@1.7.5': + '@floating-ui/core@1.8.0': dependencies: - '@floating-ui/utils': 0.2.11 + '@floating-ui/utils': 0.2.12 - '@floating-ui/dom@1.7.6': + '@floating-ui/dom@1.8.0': dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 - '@floating-ui/utils@0.2.11': {} + '@floating-ui/utils@0.2.12': {} '@fontsource-variable/work-sans@5.2.8': {} @@ -3867,7 +3915,7 @@ snapshots: '@iconify/types@2.0.0': {} - '@iconify/utils@3.1.3': + '@iconify/utils@3.1.4': dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/types': 2.0.0 @@ -3957,7 +4005,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.11.1 + '@emnapi/runtime': 1.11.2 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -4017,6 +4065,13 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 + optional: true + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 @@ -4172,65 +4227,65 @@ snapshots: '@oxc-project/types@0.139.0': {} - '@oxc-resolver/binding-android-arm-eabi@11.20.0': + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true - '@oxc-resolver/binding-android-arm64@11.20.0': + '@oxc-resolver/binding-android-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-arm64@11.20.0': + '@oxc-resolver/binding-darwin-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-x64@11.20.0': + '@oxc-resolver/binding-darwin-x64@11.24.2': optional: true - '@oxc-resolver/binding-freebsd-x64@11.20.0': + '@oxc-resolver/binding-freebsd-x64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.20.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.20.0': + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.20.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.20.0': + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.20.0': + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.20.0': + '@oxc-resolver/binding-linux-x64-musl@11.24.2': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.20.0': + '@oxc-resolver/binding-openharmony-arm64@11.24.2': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.20.0': + '@oxc-resolver/binding-wasm32-wasi@11.24.2': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.20.0': + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': optional: true '@pkgr/core@0.3.6': {} @@ -4322,21 +4377,21 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@storybook/addon-a11y@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + '@storybook/addon-a11y@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))': dependencies: '@storybook/global': 5.0.0 axe-core: 4.12.1 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) - '@storybook/addon-docs@10.4.6(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/addon-docs@10.5.0(@types/react@19.2.17)(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.7) - '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) - '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@storybook/react-dom-shim': 10.4.6(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + '@storybook/csf-plugin': 10.5.0(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/icons': 2.1.0(react@19.2.7) + '@storybook/react-dom-shim': 10.5.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7)) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) ts-dedent: 2.3.0 optionalDependencies: '@types/react': 19.2.17 @@ -4347,28 +4402,28 @@ snapshots: - vite - webpack - '@storybook/addon-svelte-csf@5.1.2(@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)))(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/addon-svelte-csf@5.1.2(@storybook/svelte@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0)))(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@storybook/csf': 0.1.13 - '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) - '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/svelte': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) dedent: 1.7.2 - es-toolkit: 1.47.1 + es-toolkit: 1.49.0 esrap: 1.4.9 magic-string: 0.30.21 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - svelte: 5.56.4(@typescript-eslint/types@8.63.0) - svelte-ast-print: 0.4.2(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) + svelte-ast-print: 0.4.2(svelte@5.56.4(@typescript-eslint/types@8.64.0)) vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) zimmerframe: 1.1.4 transitivePeerDependencies: - babel-plugin-macros - '@storybook/addon-vitest@10.4.6(@vitest/browser-playwright@4.1.10)(@vitest/browser@4.1.10)(@vitest/runner@4.1.10)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vitest@4.1.10)': + '@storybook/addon-vitest@10.5.0(@vitest/browser-playwright@4.1.10)(@vitest/browser@4.1.10)(@vitest/runner@4.1.10)(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vitest@4.1.10)': dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@storybook/icons': 2.1.0(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) optionalDependencies: '@vitest/browser': 4.1.10(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10) @@ -4376,12 +4431,11 @@ snapshots: vitest: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) transitivePeerDependencies: - react - - react-dom - '@storybook/builder-vite@10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/builder-vite@10.5.0(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@storybook/csf-plugin': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@storybook/csf-plugin': 10.5.0(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) ts-dedent: 2.3.0 vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) transitivePeerDependencies: @@ -4389,9 +4443,9 @@ snapshots: - rollup - webpack - '@storybook/csf-plugin@10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/csf-plugin@10.5.0(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) unplugin: 2.3.11 optionalDependencies: esbuild: 0.28.1 @@ -4403,28 +4457,27 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + '@storybook/icons@2.1.0(react@19.2.7)': dependencies: react: 19.2.7 - react-dom: 19.2.7(react@19.2.7) - '@storybook/react-dom-shim@10.4.6(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': + '@storybook/react-dom-shim@10.5.0(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))': dependencies: react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) optionalDependencies: '@types/react': 19.2.17 - '@storybook/svelte-vite@10.4.6(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/svelte-vite@10.5.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) - '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) - '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/builder-vite': 10.5.0(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/svelte': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) magic-string: 0.30.21 - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - svelte: 5.56.4(@typescript-eslint/types@8.63.0) - svelte2tsx: 0.7.56(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) + svelte2tsx: 0.7.57(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@5.9.3) typescript: 5.9.3 vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) transitivePeerDependencies: @@ -4432,20 +4485,20 @@ snapshots: - rollup - webpack - '@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))': + '@storybook/svelte@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0))': dependencies: - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) ts-dedent: 2.3.0 type-fest: 5.8.0 - '@storybook/sveltekit@10.4.6(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@storybook/sveltekit@10.5.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@storybook/builder-vite': 10.4.6(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) - '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) - '@storybook/svelte-vite': 10.4.6(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + '@storybook/builder-vite': 10.5.0(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@storybook/svelte': 10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) + '@storybook/svelte-vite': 10.5.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(esbuild@0.28.1)(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) transitivePeerDependencies: - '@sveltejs/vite-plugin-svelte' @@ -4453,45 +4506,45 @@ snapshots: - rollup - webpack - '@stylistic/eslint-plugin@5.10.0(eslint@10.6.0(jiti@2.7.0))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.7.0))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/types': 8.63.0 - eslint: 10.6.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + '@typescript-eslint/types': 8.64.0 + eslint: 10.7.0(jiti@2.7.0) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 picomatch: 4.0.5 - '@sveltejs/acorn-typescript@1.0.10(acorn@8.17.0)': + '@sveltejs/acorn-typescript@1.0.11(acorn@8.17.0)': dependencies: acorn: 8.17.0 - '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.110.0)': + '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(wrangler@4.110.0)': dependencies: - '@cloudflare/workers-types': 4.20260613.1 - '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@cloudflare/workers-types': 4.20260702.1 + '@sveltejs/kit': 2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) worktop: 0.8.0-next.18 wrangler: 4.110.0 - '@sveltejs/enhanced-img@0.11.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@sveltejs/enhanced-img@0.11.0(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) magic-string: 0.30.21 sharp: 0.34.5 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) - svelte-parse-markup: 0.1.5(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) + svelte-parse-markup: 0.1.5(svelte@5.56.4(@typescript-eslint/types@8.64.0)) vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) vite-imagetools: 9.0.3 zimmerframe: 1.1.4 transitivePeerDependencies: - rollup - '@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: '@standard-schema/spec': 1.1.0 - '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) - '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/acorn-typescript': 1.0.11(acorn@8.17.0) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) '@types/cookie': 0.6.0 acorn: 8.17.0 cookie: 0.6.0 @@ -4500,21 +4553,21 @@ snapshots: kleur: 4.1.5 magic-string: 0.30.21 mrmime: 2.0.1 - set-cookie-parser: 3.1.0 + set-cookie-parser: 3.1.2 sirv: 3.0.2 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) optionalDependencies: typescript: 6.0.3 '@sveltejs/load-config@0.2.0': {} - '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': + '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.3 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) vitefu: 1.1.3(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) @@ -4542,9 +4595,9 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/svelte-core@1.1.3(svelte@5.56.4(@typescript-eslint/types@8.63.0))': + '@testing-library/svelte-core@1.1.3(svelte@5.56.4(@typescript-eslint/types@8.64.0))': dependencies: - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: @@ -4586,72 +4639,72 @@ snapshots: '@types/trusted-types@2.0.7': {} - '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/type-utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.63.0 - eslint: 10.6.0(jiti@2.7.0) - ignore: 7.0.5 + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/type-utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.64.0 + eslint: 10.7.0(jiti@2.7.0) + ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.63.0 + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.64.0 debug: 4.4.3 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.63.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.64.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@6.0.3) - '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3) + '@typescript-eslint/types': 8.64.0 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.63.0': + '@typescript-eslint/scope-manager@8.64.0': dependencies: - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/visitor-keys': 8.63.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 - '@typescript-eslint/tsconfig-utils@8.63.0(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.64.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.63.0': {} + '@typescript-eslint/types@8.64.0': {} - '@typescript-eslint/typescript-estree@8.63.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.64.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.63.0(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@6.0.3) - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/visitor-keys': 8.63.0 + '@typescript-eslint/project-service': 8.64.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 @@ -4661,20 +4714,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + eslint: 10.7.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.63.0': + '@typescript-eslint/visitor-keys@8.64.0': dependencies: - '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/types': 8.64.0 eslint-visitor-keys: 5.0.1 '@unocss/cli@66.7.5': @@ -4693,7 +4746,7 @@ snapshots: pathe: 2.0.3 perfect-debounce: 2.1.0 tinyglobby: 0.2.17 - unplugin-utils: 0.3.1 + unplugin-utils: 0.3.2 '@unocss/config@66.7.5': dependencies: @@ -4704,17 +4757,17 @@ snapshots: '@unocss/core@66.7.5': {} - '@unocss/eslint-config@66.7.5(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@unocss/eslint-config@66.7.5(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@unocss/eslint-plugin': 66.7.5(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@unocss/eslint-plugin': 66.7.5(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint - supports-color - typescript - '@unocss/eslint-plugin@66.7.5(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3)': + '@unocss/eslint-plugin@66.7.5(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) '@unocss/config': 66.7.5 '@unocss/core': 66.7.5 '@unocss/rule-utils': 66.7.5 @@ -4745,7 +4798,7 @@ snapshots: '@unocss/preset-icons@66.7.5': dependencies: - '@iconify/utils': 3.1.3 + '@iconify/utils': 3.1.4 '@unocss/core': 66.7.5 ofetch: 1.5.1 @@ -4841,7 +4894,7 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 tinyglobby: 0.2.17 - unplugin-utils: 0.3.1 + unplugin-utils: 0.3.2 vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) '@vitest/browser-playwright@4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))(vitest@4.1.10)': @@ -4884,7 +4937,7 @@ snapshots: istanbul-reports: 3.2.0 magicast: 0.5.3 obug: 2.1.3 - std-env: 4.1.0 + std-env: 4.2.0 tinyrainbow: 3.1.0 vitest: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) optionalDependencies: @@ -4971,7 +5024,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.2 + fast-uri: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -5013,22 +5066,22 @@ snapshots: balanced-match@4.0.4: {} - bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)): + bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)): dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/dom': 1.7.6 + '@floating-ui/core': 1.8.0 + '@floating-ui/dom': 1.8.0 '@internationalized/date': 3.12.2 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) - svelte: 5.56.4(@typescript-eslint/types@8.63.0) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) - tabbable: 6.4.0 + runed: 0.35.1(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) + tabbable: 6.5.0 transitivePeerDependencies: - '@sveltejs/kit' blake3-wasm@2.1.5: {} - brace-expansion@5.0.6: + brace-expansion@5.0.7: dependencies: balanced-match: 4.0.4 @@ -5189,9 +5242,9 @@ snapshots: error-stack-parser-es@1.0.5: {} - es-module-lexer@2.1.0: {} + es-module-lexer@2.3.1: {} - es-toolkit@1.47.1: {} + es-toolkit@1.49.0: {} esbuild@0.28.1: optionalDependencies: @@ -5226,43 +5279,44 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.6.0(jiti@2.7.0)): + eslint-config-prettier@10.1.8(eslint@10.7.0(jiti@2.7.0)): dependencies: - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) - eslint-plugin-perfectionist@5.10.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): + eslint-plugin-perfectionist@5.10.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.7.0(jiti@2.7.0) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-storybook@10.4.6(eslint@10.6.0(jiti@2.7.0))(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@6.0.3): + eslint-plugin-storybook@10.5.0(eslint@10.7.0(jiti@2.7.0))(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.7.0(jiti@2.7.0) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-svelte@3.20.0(eslint@10.6.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.63.0)): + eslint-plugin-svelte@3.20.0(eslint@10.7.0(jiti@2.7.0))(svelte@5.56.4(@typescript-eslint/types@8.64.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.6.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.16 - postcss-load-config: 3.1.4(postcss@8.5.16) - postcss-safe-parser: 7.0.1(postcss@8.5.16) + postcss: 8.5.19 + postcss-load-config: 3.1.4(postcss@8.5.19) + postcss-safe-parser: 7.0.1(postcss@8.5.19) semver: 7.8.5 - svelte-eslint-parser: 1.8.0(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + svelte-eslint-parser: 1.8.0(svelte@5.56.4(@typescript-eslint/types@8.64.0)) optionalDependencies: - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) transitivePeerDependencies: - ts-node @@ -5284,9 +5338,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.6.0(jiti@2.7.0): + eslint@10.7.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -5350,11 +5404,11 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - esrap@2.2.12(@typescript-eslint/types@8.63.0): + esrap@2.2.13(@typescript-eslint/types@8.64.0): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 optionalDependencies: - '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/types': 8.64.0 esrecurse@4.3.0: dependencies: @@ -5370,7 +5424,7 @@ snapshots: esutils@2.0.3: {} - expect-type@1.3.0: {} + expect-type@1.4.0: {} fast-deep-equal@3.1.3: {} @@ -5386,7 +5440,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.2: {} + fast-uri@3.1.3: {} fastq@1.20.1: dependencies: @@ -5469,7 +5523,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.5: {} + ignore@7.0.6: {} imagetools-core@9.1.0: {} @@ -5551,6 +5605,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + jsonc-parser@3.3.1: {} + jsonfile@6.2.1: dependencies: universalify: 2.0.1 @@ -5682,7 +5738,7 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.6 + brace-expansion: 5.0.7 mlly@1.8.2: dependencies: @@ -5697,7 +5753,7 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.12: {} + nanoid@3.3.16: {} natural-compare@1.4.0: {} @@ -5781,27 +5837,27 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.131.0 '@oxc-parser/binding-win32-x64-msvc': 0.131.0 - oxc-resolver@11.20.0: + oxc-resolver@11.24.2: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.20.0 - '@oxc-resolver/binding-android-arm64': 11.20.0 - '@oxc-resolver/binding-darwin-arm64': 11.20.0 - '@oxc-resolver/binding-darwin-x64': 11.20.0 - '@oxc-resolver/binding-freebsd-x64': 11.20.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.20.0 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.20.0 - '@oxc-resolver/binding-linux-arm64-gnu': 11.20.0 - '@oxc-resolver/binding-linux-arm64-musl': 11.20.0 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.20.0 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.20.0 - '@oxc-resolver/binding-linux-riscv64-musl': 11.20.0 - '@oxc-resolver/binding-linux-s390x-gnu': 11.20.0 - '@oxc-resolver/binding-linux-x64-gnu': 11.20.0 - '@oxc-resolver/binding-linux-x64-musl': 11.20.0 - '@oxc-resolver/binding-openharmony-arm64': 11.20.0 - '@oxc-resolver/binding-wasm32-wasi': 11.20.0 - '@oxc-resolver/binding-win32-arm64-msvc': 11.20.0 - '@oxc-resolver/binding-win32-x64-msvc': 11.20.0 + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 oxc-walker@0.7.0(oxc-parser@0.131.0): dependencies: @@ -5816,7 +5872,7 @@ snapshots: dependencies: p-limit: 3.1.0 - package-manager-detector@1.6.0: {} + package-manager-detector@1.7.0: {} parent-module@1.0.1: dependencies: @@ -5863,38 +5919,38 @@ snapshots: pngjs@7.0.0: {} - postcss-load-config@3.1.4(postcss@8.5.16): + postcss-load-config@3.1.4(postcss@8.5.19): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: - postcss: 8.5.16 + postcss: 8.5.19 - postcss-safe-parser@7.0.1(postcss@8.5.16): + postcss-safe-parser@7.0.1(postcss@8.5.19): dependencies: - postcss: 8.5.16 + postcss: 8.5.19 - postcss-scss@4.0.9(postcss@8.5.16): + postcss-scss@4.0.9(postcss@8.5.19): dependencies: - postcss: 8.5.16 + postcss: 8.5.19 postcss-selector-parser@7.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.16: + postcss@8.5.19: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} - prettier-plugin-svelte@4.1.1(prettier@3.9.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0)): + prettier-plugin-svelte@4.1.1(prettier@3.9.5)(svelte@5.56.4(@typescript-eslint/types@8.64.0)): dependencies: prettier: 3.9.5 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) prettier@3.9.5: {} @@ -5923,7 +5979,7 @@ snapshots: readdirp@5.0.0: {} - recast@0.23.11: + recast@0.23.12: dependencies: ast-types: 0.16.1 esprima: 4.0.1 @@ -5975,14 +6031,14 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.35.1(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)): + runed@0.35.1(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) optionalDependencies: - '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/kit': 2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) sade@1.8.1: dependencies: @@ -5994,7 +6050,7 @@ snapshots: semver@7.8.5: {} - set-cookie-parser@3.1.0: {} + set-cookie-parser@3.1.2: {} sharp@0.34.5: dependencies: @@ -6047,26 +6103,28 @@ snapshots: stackback@0.0.2: {} - std-env@4.1.0: {} + std-env@4.2.0: {} - storybook-addon-pseudo-states@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)): + storybook-addon-pseudo-states@10.5.0(storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7)): dependencies: - storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + storybook: 10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7) - storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.17)(prettier@3.9.5)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + storybook@10.5.0(@types/react@19.2.17)(prettier@3.9.5)(react@19.2.7): dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@storybook/icons': 2.1.0(react@19.2.7) + '@testing-library/dom': 10.4.1 '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 '@vitest/spy': 3.2.4 '@webcontainer/env': 1.1.1 esbuild: 0.28.1 + jsonc-parser: 3.3.1 open: 10.2.0 oxc-parser: 0.127.0 - oxc-resolver: 11.20.0 - recast: 0.23.11 + oxc-resolver: 11.24.2 + recast: 0.23.12 semver: 7.8.5 use-sync-external-store: 1.6.0(react@19.2.7) ws: 8.21.0 @@ -6074,10 +6132,8 @@ snapshots: '@types/react': 19.2.17 prettier: 3.9.5 transitivePeerDependencies: - - '@testing-library/dom' - bufferutil - react - - react-dom - utf-8-validate string-width@7.2.0: @@ -6104,13 +6160,13 @@ snapshots: dependencies: has-flag: 4.0.0 - svelte-ast-print@0.4.2(svelte@5.56.4(@typescript-eslint/types@8.63.0)): + svelte-ast-print@0.4.2(svelte@5.56.4(@typescript-eslint/types@8.64.0)): dependencies: esrap: 1.2.2 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) zimmerframe: 1.1.2 - svelte-check@4.7.2(picomatch@4.0.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3): + svelte-check@4.7.2(picomatch@4.0.5)(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 '@sveltejs/load-config': 0.2.0 @@ -6118,48 +6174,48 @@ snapshots: fdir: 6.5.0(picomatch@4.0.5) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) typescript: 6.0.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.8.0(svelte@5.56.4(@typescript-eslint/types@8.63.0)): + svelte-eslint-parser@1.8.0(svelte@5.56.4(@typescript-eslint/types@8.64.0)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.16 - postcss-scss: 4.0.9(postcss@8.5.16) + postcss: 8.5.19 + postcss-scss: 4.0.9(postcss@8.5.19) postcss-selector-parser: 7.1.4 semver: 7.8.5 optionalDependencies: - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) - svelte-parse-markup@0.1.5(svelte@5.56.4(@typescript-eslint/types@8.63.0)): + svelte-parse-markup@0.1.5(svelte@5.56.4(@typescript-eslint/types@8.64.0)): dependencies: - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)): + svelte-toolbelt@0.10.6(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0)) + runed: 0.35.1(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) style-to-object: 1.0.14 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) transitivePeerDependencies: - '@sveltejs/kit' - svelte2tsx@0.7.56(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3): + svelte2tsx@0.7.57(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@5.9.3): dependencies: dedent-js: 1.0.1 scule: 1.3.0 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) typescript: 5.9.3 - svelte@5.56.4(@typescript-eslint/types@8.63.0): + svelte@5.56.4(@typescript-eslint/types@8.64.0): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) + '@sveltejs/acorn-typescript': 1.0.11(acorn@8.17.0) '@types/estree': 1.0.9 '@types/trusted-types': 2.0.7 acorn: 8.17.0 @@ -6168,7 +6224,7 @@ snapshots: clsx: 2.1.1 devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.12(@typescript-eslint/types@8.63.0) + esrap: 2.2.13(@typescript-eslint/types@8.64.0) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -6180,7 +6236,7 @@ snapshots: dependencies: '@pkgr/core': 0.3.6 - tabbable@6.4.0: {} + tabbable@6.5.0: {} tagged-tag@1.0.0: {} @@ -6229,13 +6285,13 @@ snapshots: type-level-regexp@0.1.17: {} - typescript-eslint@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3): + typescript-eslint@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/parser': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.63.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.6.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.6.0(jiti@2.7.0) + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.64.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.7.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -6291,17 +6347,26 @@ snapshots: transitivePeerDependencies: - vite - unplugin-fonts@2.0.0(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): + unplugin-fonts@2.0.0(esbuild@0.28.1)(rolldown@1.1.5)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): dependencies: css-tree: 3.2.1 fast-glob: 3.3.3 fontaine: 0.8.0 magic-string: 0.30.21 pathe: 2.0.3 - unplugin: 3.0.0 + unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.1.5)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - webpack - unplugin-utils@0.3.1: + unplugin-utils@0.3.2: dependencies: pathe: 2.0.3 picomatch: 4.0.5 @@ -6313,11 +6378,15 @@ snapshots: picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 - unplugin@3.0.0: + unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.1.5)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 + optionalDependencies: + esbuild: 0.28.1 + rolldown: 1.1.5 + vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) uri-js@4.4.1: dependencies: @@ -6348,7 +6417,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.5 - postcss: 8.5.16 + postcss: 8.5.19 rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: @@ -6361,10 +6430,10 @@ snapshots: optionalDependencies: vite: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) - vitest-browser-svelte@3.0.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vitest@4.1.10): + vitest-browser-svelte@3.0.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vitest@4.1.10): dependencies: - '@testing-library/svelte-core': 1.1.3(svelte@5.56.4(@typescript-eslint/types@8.63.0)) - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + '@testing-library/svelte-core': 1.1.3(svelte@5.56.4(@typescript-eslint/types@8.64.0)) + svelte: 5.56.4(@typescript-eslint/types@8.64.0) vitest: 4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) vitest@4.1.10(@types/node@24.13.3)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): @@ -6376,13 +6445,13 @@ snapshots: '@vitest/snapshot': 4.1.10 '@vitest/spy': 4.1.10 '@vitest/utils': 4.1.10 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 + es-module-lexer: 2.3.1 + expect-type: 1.4.0 magic-string: 0.30.21 obug: 2.1.3 pathe: 2.0.3 picomatch: 4.0.5 - std-env: 4.1.0 + std-env: 4.2.0 tinybench: 2.9.0 tinyexec: 1.2.4 tinyglobby: 0.2.17 From bccd5fa44dc506529075a9b290a262cda0dee5ea Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 15 Jul 2026 03:47:31 -0700 Subject: [PATCH 040/141] chore(deps): add runed Svelte reactivity utility library. Not yet referenced in source; kept as a standalone commit so it can be dropped cleanly if unwanted. --- package.json | 3 ++- pnpm-lock.yaml | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index eec048e..d48f2ca 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,8 @@ "@unocss/preset-wind4": "^66.7.5", "@unocss/reset": "^66.7.5", "bits-ui": "^2.18.1", - "culori": "^4.0.2" + "culori": "^4.0.2", + "runed": "^0.37.1" }, "devDependencies": { "@chromatic-com/storybook": "^5.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dfbd617..f148336 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,6 +31,9 @@ importers: culori: specifier: ^4.0.2 version: 4.0.2 + runed: + specifier: ^0.37.1 + version: 0.37.1(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) devDependencies: '@chromatic-com/storybook': specifier: ^5.2.1 @@ -2986,6 +2989,18 @@ packages: '@sveltejs/kit': optional: true + runed@0.37.1: + resolution: {integrity: sha512-MeFY73xBW8IueWBm012nNFIGy19WUGPLtknavyUPMpnyt350M47PhGSGrGoSLbidwn+Zlt/O0cp8/OZE3LASWA==} + peerDependencies: + '@sveltejs/kit': ^2.21.0 + svelte: ^5.7.0 + zod: ^4.1.0 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + zod: + optional: true + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -6040,6 +6055,15 @@ snapshots: optionalDependencies: '@sveltejs/kit': 2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + runed@0.37.1(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)): + dependencies: + dequal: 2.0.3 + esm-env: 1.2.2 + lz-string: 1.5.0 + svelte: 5.56.4(@typescript-eslint/types@8.64.0) + optionalDependencies: + '@sveltejs/kit': 2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + sade@1.8.1: dependencies: mri: 1.2.0 From 554ea34654f4409547d2f3c723bf746b7c5011e2 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 15 Jul 2026 03:48:09 -0700 Subject: [PATCH 041/141] feat(design-tokens): reshape ramp shadows with a per-scale gamma curve Adds a shadowGamma knob per ramp and a shapeShadows() pass that remaps only the darker half of each ramp (pivoting at the midpoint lightness), plus a 950 stop. brand anchors stay the source of truth. --- src/lib/tokens.ts | 53 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index 52563c8..e986324 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -3,7 +3,7 @@ import { interpolate, interpolatorSplineMonotone2, formatCss, oklch } from 'culori'; import { theme } from '@unocss/preset-wind4/theme'; -const colorStops = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const; +const colorStops = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const; export const brand = { primary: { @@ -14,17 +14,14 @@ export const brand = { 500: 'oklch(51.20% 0.2529 286.36)', 625: 'oklch(37.27% 0.1841 286.40)', 775: 'oklch(24.11% 0.1192 286.50)', - 900: 'oklch(9.93% 0.0465 288.17)', + 950: 'oklch(9.93% 0.0465 288.17)', }, secondary: { 50: 'oklch(90.50% 0.1300 122.90)', 100: 'oklch(82.70% 0.2088 122.87)', 225: 'oklch(75.82% 0.2039 122.84)', - 375: 'oklch(63.03% 0.1695 122.65)', - 500: 'oklch(49.55% 0.1327 122.36)', - 625: 'oklch(36.34% 0.0983 123.01)', - 775: 'oklch(23.41% 0.0631 123.86)', - 900: 'oklch(10.12% 0.0181 122.88)', + 500: 'oklch(51.03% 0.1695 122.65)', + 950: 'oklch(23.41% 0.0631 123.86)', }, shade: { 50: 'oklch(95.30% 0.0060 271.00)', @@ -32,14 +29,44 @@ export const brand = { 225: 'oklch(76.62% 0.0319 272.63)', 375: 'oklch(63.50% 0.0518 271.60)', 500: 'oklch(51.67% 0.0714 272.43)', - 625: 'oklch(36.52% 0.0567 273.04)', - 775: 'oklch(23.57% 0.0361 271.39)', - 900: 'oklch(10.12% 0.0157 283.23)', + 950: 'oklch(13.12% 0.0157 283.23)', }, } as const; type ColorScale = Record<(typeof colorStops)[number], string>; +// Shadow-shaping knob, one per ramp. The `brand` anchors stay the source of +// truth; this reshapes only the darker half of each ramp, holding the midpoint +// lightness and everything above it (plus all chroma/hue) fixed. 1 = authored +// shadows untouched; >1 deepens shadows, <1 lifts them. Tweak to taste. +const shadowGamma = { + primary: 0.6, + secondary: 0.6, + shade: 0.6, +} as const; + +// Reshape a ramp's shadows on a gamma curve, pivoting at the midpoint lightness +// so the upper half stays exactly as authored. +function shapeShadows(colors: Record, gamma: number): Record { + const parsed = Object.entries(colors).map(([stop, color]) => { + const c = oklch(color); + if (!c) throw new Error(`unparseable color: ${color}`); + return [Number(stop), c] as const; + }); + const lightnesses = parsed.map(([, c]) => c.l); + const dark = Math.min(...lightnesses); + const span = Math.max(...lightnesses) - dark; + return Object.fromEntries( + parsed.map(([stop, c]) => { + const p = span === 0 ? 0 : (c.l - dark) / span; + if (p >= 0.5) return [stop, formatCss(c)]; + // remap within the lower half, pinning both the black point and midpoint + const l = dark + span * 0.5 * (p / 0.5) ** gamma; + return [stop, formatCss({ ...c, l })]; + }), + ); +} + // Expand a hand-picked ramp into a full 10-stop scale. function generateColors(colors: Record): ColorScale { const stops = Object.entries(colors).map( @@ -58,9 +85,9 @@ function generateColors(colors: Record): ColorScale { } export const brandColors = { - primary: generateColors(brand.primary), - secondary: generateColors(brand.secondary), - shade: generateColors(brand.shade), + primary: generateColors(shapeShadows(brand.primary, shadowGamma.primary)), + secondary: generateColors(shapeShadows(brand.secondary, shadowGamma.secondary)), + shade: generateColors(shapeShadows(brand.shade, shadowGamma.shade)), }; export const fonts = { From 192008719b7e18190193b30593ef707877531281 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 15 Jul 2026 03:51:22 -0700 Subject: [PATCH 042/141] test: pin the vitest browser server to a fixed port Vitest's default 63315 sits in Windows' ephemeral range that Hyper-V/WinNAT reserves in shifting blocks, causing intermittent EACCES. Pin 127.0.0.1:7357 below the ephemeral floor (vitest #9035). --- vite.config.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vite.config.ts b/vite.config.ts index 69418e4..8bf574b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -104,6 +104,10 @@ export default defineConfig((env) => { enabled: true, headless: true, provider: playwright(), + // Vitest's default 63315 sits in Windows' ephemeral range, which + // Hyper-V/WinNat reserves in shifting blocks -> intermittent EACCES. + // Pin a fixed port below 49152 on IPv4. (vitest #9035) + api: { host: '127.0.0.1', port: 7357 }, instances: [ { browser: 'chromium', From 277ade44e6229160c7e3ad7352bc8263da50afcd Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 15 Jul 2026 03:51:30 -0700 Subject: [PATCH 043/141] build: add commit-message linter Runs commitlint from the merge-base with the base branch; disables log.showSignature via git env-config so signature lines don't corrupt commitlint's header parsing. --- tools/lint-commit-msg.ts | 65 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tools/lint-commit-msg.ts diff --git a/tools/lint-commit-msg.ts b/tools/lint-commit-msg.ts new file mode 100644 index 0000000..970848e --- /dev/null +++ b/tools/lint-commit-msg.ts @@ -0,0 +1,65 @@ +// Lint all commit messages starting from the first commit that diverges from its base branch. + +import { execFileSync, spawnSync } from 'node:child_process'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import cliPkg from '@commitlint/cli/package.json' with { type: 'json' }; + +const git = (args: string[]) => execFileSync('git', args, { encoding: 'utf8' }).trim(); + +const refExists = (ref: string) => { + try { + git(['rev-parse', '--verify', '--quiet', ref]); + return true; + } catch { + return false; + } +}; + +function resolveFrom(): string { + const fromEnv = process.env['COMMITLINT_FROM']; + if (fromEnv !== undefined && fromEnv !== '') return fromEnv; + + const candidates = [process.env['COMMITLINT_BASE'], 'origin/HEAD', 'main']; + const base = candidates.find( + (ref): ref is string => ref !== undefined && ref !== '' && refExists(ref), + ); + + if (base !== undefined) { + try { + return git(['merge-base', base, 'HEAD']); + } catch { + // no common ancestor — fall through to repo root + } + } + + // Fall back to the initial commit so commitlint still has a concrete starting ref. + const [root] = git(['rev-list', '--max-parents=0', 'HEAD']).split('\n'); + if (root === undefined || root === '') throw new Error('no root commit found'); + return root; +} + +const cliPkgPath = fileURLToPath(import.meta.resolve('@commitlint/cli/package.json')); +const bin = cliPkg.bin as string | Record; +const binRel = typeof bin === 'string' ? bin : bin['commitlint']; +if (binRel === undefined || binRel === '') + throw new Error('commitlint bin not found in its package.json'); +const cliPath = join(dirname(cliPkgPath), binRel); + +const from = resolveFrom(); +const extraArgs = process.argv.slice(2); + +const slot = Number(process.env['GIT_CONFIG_COUNT'] ?? 0); +const slotKey = String(slot); +const { status } = spawnSync(process.execPath, [cliPath, '--from', from, ...extraArgs], { + stdio: 'inherit', + env: { + ...process.env, + GIT_CONFIG_COUNT: String(slot + 1), + [`GIT_CONFIG_KEY_${slotKey}`]: 'log.showSignature', + [`GIT_CONFIG_VALUE_${slotKey}`]: 'false', + }, +}); + +process.exit(status ?? 1); From e6041a2f5ce40f466197e26d94541110a9f13dab Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 15 Jul 2026 03:49:59 -0700 Subject: [PATCH 044/141] feat(ui-components): add SprayBorder WebGL spray-paint border component Shared-context WebGL2 renderer (twgl.js) draws an SDF rounded-rect core with a stipple-spray falloff band into one offscreen canvas, blitted per element to stay under the per-tab WebGL context ceiling. --- package.json | 3 +- pnpm-lock.yaml | 8 + src/lib/Button/Button.stories.svelte | 3 + src/lib/Button/Button.svelte | 36 ++- .../SprayBorder/SprayBorder.stories.svelte | 80 ++++++ src/lib/SprayBorder/SprayBorder.svelte | 109 ++++++++ src/lib/SprayBorder/spray.ts | 21 ++ src/lib/SprayBorder/sprayRenderer.ts | 237 ++++++++++++++++++ src/lib/index.ts | 1 + 9 files changed, 488 insertions(+), 10 deletions(-) create mode 100644 src/lib/SprayBorder/SprayBorder.stories.svelte create mode 100644 src/lib/SprayBorder/SprayBorder.svelte create mode 100644 src/lib/SprayBorder/spray.ts create mode 100644 src/lib/SprayBorder/sprayRenderer.ts diff --git a/package.json b/package.json index d48f2ca..9825643 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "@unocss/reset": "^66.7.5", "bits-ui": "^2.18.1", "culori": "^4.0.2", - "runed": "^0.37.1" + "runed": "^0.37.1", + "twgl.js": "^7.0.0" }, "devDependencies": { "@chromatic-com/storybook": "^5.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f148336..4b08825 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,6 +34,9 @@ importers: runed: specifier: ^0.37.1 version: 0.37.1(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)) + twgl.js: + specifier: ^7.0.0 + version: 7.0.0 devDependencies: '@chromatic-com/storybook': specifier: ^5.2.1 @@ -3200,6 +3203,9 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + twgl.js@7.0.0: + resolution: {integrity: sha512-9HHZ8emdZb2nKPU0FDIGDlkp6AD9rWFv7ThqdbmUqyBhD3WTQpLN+89w4B+YshGwD1fL6PMVpVKZqC0pikgmcA==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -6297,6 +6303,8 @@ snapshots: tslib@2.8.1: {} + twgl.js@7.0.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 diff --git a/src/lib/Button/Button.stories.svelte b/src/lib/Button/Button.stories.svelte index d83ae4a..32e993c 100644 --- a/src/lib/Button/Button.stories.svelte +++ b/src/lib/Button/Button.stories.svelte @@ -17,6 +17,7 @@ }, argTypes: { disabled: { control: 'boolean' }, + spray: { control: 'boolean' }, }, parameters: { // bits-ui's ButtonRootProps leaks ~400 inherited HTML attributes into @@ -59,3 +60,5 @@ + + diff --git a/src/lib/Button/Button.svelte b/src/lib/Button/Button.svelte index 4f55955..fcbda40 100644 --- a/src/lib/Button/Button.svelte +++ b/src/lib/Button/Button.svelte @@ -1,23 +1,41 @@ - + +} + color={brandColors.shade[800]} class={[ - 'text-white tracking-wider font-bold font-sans px-5 outline-4 outline-brand-shade-800 outline-offset--4 bg-brand-shade-800 inline-flex gap-2 h-14 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:text-brand-shade-300 disabled:bg-brand-shade-700 disabled:cursor-not-allowed active:scale-[0.98] focus-visible:not-disabled:outline-offset-4 hover:text-brand-secondary-50', + 'text-white tracking-wider font-bold font-sans px-5 outline-4 outline-transparent outline-offset--4 inline-flex gap-2 h-14 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:text-brand-shade-300 disabled:bg-brand-shade-700 disabled:cursor-not-allowed active:scale-[0.98] focus-visible:not-disabled:outline-brand-shade-800 focus-visible:not-disabled:outline-offset-4 hover:text-brand-secondary-50', + 'bg-transparent', className, ]} - {...restProps} > - {@render icon?.()} - {@render children?.()} - + + {@render icon?.()} + {@render children?.()} + + diff --git a/src/lib/SprayBorder/SprayBorder.stories.svelte b/src/lib/SprayBorder/SprayBorder.stories.svelte new file mode 100644 index 0000000..f45f973 --- /dev/null +++ b/src/lib/SprayBorder/SprayBorder.stories.svelte @@ -0,0 +1,80 @@ + + + +{#snippet template(args: Args)} +
+ Spray border +
+{/snippet} + + { + const canvas = canvasElement.querySelector('canvas'); + await expect(canvas).not.toBeNull(); + if (!canvas) return; + for (let i = 0; i < 30; i++) { + if (paintedPixels(canvas) > 0) break; + await nextFrame(); + } + // Where WebGL2 is available the spray must actually blit; otherwise just no-op. + if (hasWebGL2()) await expect(paintedPixels(canvas)).toBeGreaterThan(0); + else await expect(canvas).toBeTruthy(); + }} +/> diff --git a/src/lib/SprayBorder/SprayBorder.svelte b/src/lib/SprayBorder/SprayBorder.svelte new file mode 100644 index 0000000..efcf576 --- /dev/null +++ b/src/lib/SprayBorder/SprayBorder.svelte @@ -0,0 +1,109 @@ + + + + + {@render children?.()} + + + diff --git a/src/lib/SprayBorder/spray.ts b/src/lib/SprayBorder/spray.ts new file mode 100644 index 0000000..13da6e8 --- /dev/null +++ b/src/lib/SprayBorder/spray.ts @@ -0,0 +1,21 @@ +import type { Attachment } from 'svelte/attachments'; + +import { parse } from 'culori'; + +import { renderSpray, type RenderParams } from './sprayRenderer'; + +/** + * Drives the shared WebGL spray renderer for the `` it's attached to. + * Re-runs whenever `params` changes (size, dpr, color, or any knob). + */ +export function spray(params: RenderParams): Attachment { + return (canvas) => { + // culori's parse only takes strings; a Color object is already parsed. parse returns undefined for unparseable input. + const color = typeof params.color === 'string' ? parse(params.color) : params.color; + if (!color) { + console.warn(' invalid color', params.color); + return; + } + renderSpray(canvas, { ...params, color }); + }; +} diff --git a/src/lib/SprayBorder/sprayRenderer.ts b/src/lib/SprayBorder/sprayRenderer.ts new file mode 100644 index 0000000..acf027b --- /dev/null +++ b/src/lib/SprayBorder/sprayRenderer.ts @@ -0,0 +1,237 @@ +// Shared-context WebGL2 renderer for the "spray border" effect (technique 3 of +// the spray-border demo). One offscreen GL context renders every button's +// texture and blits it into each button's own 2D canvas, so a page with many +// buttons stays under the ~16-WebGL-context-per-tab ceiling. + +import { converter, type Color } from 'culori'; +import * as twgl from 'twgl.js'; + +const lrgb = converter('lrgb'); + +// Fullscreen triangle; the fragment shader does all the work in gl_FragCoord space. +const VS = /*glsl*/ `#version 300 es +in vec2 p; +void main(){ gl_Position = vec4(p, 0.0, 1.0); }`; + +// SDF rounded-rect solid core + round-dot stipple spray in the falloff band. +const FS = /*glsl*/ `#version 300 es +precision highp float; +out vec4 fragColor; +uniform vec2 uResolution; // device-px texture size +uniform vec2 uCoreHalfSize; // half-size of the solid core, device px +uniform float uRadius; // corner radius, device px +uniform float uSpread; // band width, device px +uniform float uDensity; // fleck density +uniform float uSeed; +uniform float uDpr; // device pixels per CSS px (keeps dot size DPR-stable) +uniform vec3 uColor; + +// --- Spray tuning (values suffixed _CSS_PX are scaled by uDpr at their use sites) --- +const int DOTS_PER_CELL = 12; // candidate dots evaluated per grid cell +const float CELL_SIZE_CSS_PX = 4.0; // stipple grid cell size +const float DOT_RADIUS_MIN_CSS_PX = 0.5; // smallest dot radius +const float DOT_RADIUS_JITTER_CSS_PX = 0.85; // extra random radius added on top of the minimum +// Dot radius scales across the band: big enough at the rim that full-survival +// packing saturates to solid (n*pi*r^2 >~ 4), tapering to fine far specks. +const float DOT_SCALE_NEAR = 1.55; +const float DOT_SCALE_FAR = 0.5; +const float MIN_EDGE_AA_PX = 0.75; // floor on a dot's anti-aliased rim (~1 device px) +const float CORE_EDGE_INSET = 2.5; // core/band boundary pulled this far inside the SDF (css px in) edge +const float FALLOFF_EXPONENT = 6.0; // how steeply dot-survival odds drop across the band +const float CLUMP_SCALE_CSS_PX = 10.0; // feature size of spray clumps along the edge +const float CLUMP_AMP_CSS_PX = 1.8; // how far clumps push the rough solid edge in/out +const float SOLID_RIM_CSS_PX = 1.4; // mean overshoot of the rough solid edge past the box edge +const float EDGE_RECESS_CAP_CSS_PX = 0.3; // clumps bulge freely outward but barely recess inward +const float SOLID_FADE_CSS_PX = 0.75; // thin density floor sealing pinholes right at the rough edge +const float BASE_DENSITY = 7.0; // survival multiplier at uDensity=1 (the designed look) + +// --- Hash salts: arbitrary offsets that give each draw an independent random stream --- +const float DOT_ID_STRIDE = 23.0; // spacing between successive dots' hash identities +const vec2 SEED_SHIFT_SCALE = vec2(37.0, 71.0); // per-axis grid translation per unit uSeed +const float SURVIVAL_DRAW_SALT = 4.7; // decorrelates the dot-survival random draw +const float RADIUS_DRAW_SALT = 9.1; // decorrelates the dot-radius random draw + +float hash(vec2 point){ + point = fract(point * vec2(123.34, 456.21)); + point += dot(point, point + 45.32); + return fract(point.x * point.y); +} +vec2 hash2(vec2 point){ + return vec2(hash(point), hash(point + 71.13)); +} +// Smooth value noise; drives large-scale clumping so the spray reads as blobby +// spatter rather than uniform fuzz. +float vnoise(vec2 point){ + vec2 cell = floor(point), frac = fract(point); + frac = frac * frac * (3.0 - 2.0 * frac); + float a = hash(cell); + float b = hash(cell + vec2(1.0, 0.0)); + float c = hash(cell + vec2(0.0, 1.0)); + float d = hash(cell + vec2(1.0, 1.0)); + return mix(mix(a, b, frac.x), mix(c, d, frac.x), frac.y); +} +// Signed distance to a rounded box centered at the origin (<0 inside). +float sdRoundedBox(vec2 point, vec2 halfSize, float radius){ + vec2 cornerDist = abs(point) - halfSize + radius; + return min(max(cornerDist.x, cornerDist.y), 0.0) + length(max(cornerDist, 0.0)) - radius; +} +void main(){ + vec2 pixel = gl_FragCoord.xy; + vec2 boxCenter = uResolution * 0.5; + vec2 seedShift = uSeed * SEED_SHIFT_SCALE; + float distToCore = sdRoundedBox(pixel - boxCenter, uCoreHalfSize, uRadius); // <0 inside core + + float coreEdge = -CORE_EDGE_INSET * (uResolution.y / (uCoreHalfSize.y * 2.0 + uSpread * 2.0)); + // The solid core's edge is not the clean SDF rect: clump noise pushes it in and + // out so the silhouette bulges organically, like paint pooling at the edge. + // The stipple dots then only have to fray this rough edge, not fill a band. + float edgeNoise = max( + (vnoise((pixel + seedShift) / (CLUMP_SCALE_CSS_PX * uDpr)) - 0.5) * 2.0 * CLUMP_AMP_CSS_PX * uDpr + + SOLID_RIM_CSS_PX * uDpr, + -EDGE_RECESS_CAP_CSS_PX * uDpr); + float roughDist = distToCore - edgeNoise; // 0 at the rough solid edge + if(roughDist <= coreEdge){ fragColor = vec4(uColor, 1.0); return; } // rough solid core + if(distToCore > uSpread) discard; // beyond the band + + // Stipple: lay a jittered grid over the band; each cell holds several + // candidate round dots of a fixed small size. Each dot survives with a + // probability that falls off across the band, so the *count* of dots ramps up + // toward the core — packing tight enough to merge into solid — and thins to + // scattered specks at the edge. Scanning the 3x3 neighborhood lets dots spill + // across cell borders, so the underlying grid never reads as a grid. + float cellSize = CELL_SIZE_CSS_PX * uDpr; + vec2 grid = (pixel + seedShift) / cellSize; + vec2 cell = floor(grid); + vec2 frac = fract(grid); + + float cover = 0.0; + for(int j = -1; j <= 1; j++){ + for(int i = -1; i <= 1; i++){ + for(int k = 0; k < DOTS_PER_CELL; k++){ + vec2 neighbor = cell + vec2(float(i), float(j)); + vec2 id = neighbor + float(k) * DOT_ID_STRIDE; // per-dot identity + vec2 jitter = hash2(id); // dot center anywhere in cell + vec2 dotPixel = (neighbor + jitter) * cellSize - seedShift; // dot center, device px + float dotCore = sdRoundedBox(dotPixel - boxCenter, uCoreHalfSize, uRadius); + if(dotCore > uSpread) continue; + + // Steep falloff measured from the ROUGH edge, so the fringe density tracks + // the bulging silhouette: dots pack against every bulge and recession alike, + // and thin out into stray specks toward the spread limit. + float dotNoise = max( + (vnoise((dotPixel + seedShift) / (CLUMP_SCALE_CSS_PX * uDpr)) - 0.5) * 2.0 * CLUMP_AMP_CSS_PX * uDpr + + SOLID_RIM_CSS_PX * uDpr, + -EDGE_RECESS_CAP_CSS_PX * uDpr); + float dotRough = dotCore - dotNoise; + float maxDotRadius = (DOT_RADIUS_MIN_CSS_PX + DOT_RADIUS_JITTER_CSS_PX) * DOT_SCALE_NEAR * uDpr; + if(dotRough <= coreEdge - maxDotRadius) continue; // fully hidden under the solid + float bandPos = clamp((dotRough - coreEdge) / (uSpread - coreEdge), 0.0, 1.0); + float keepProb = pow(1.0 - bandPos, FALLOFF_EXPONENT) * uDensity * BASE_DENSITY; + if(hash(id + SURVIVAL_DRAW_SALT) > keepProb) continue; // this dot didn't survive + + float dotRadius = (DOT_RADIUS_MIN_CSS_PX + DOT_RADIUS_JITTER_CSS_PX * hash(id + RADIUS_DRAW_SALT)) + * mix(DOT_SCALE_NEAR, DOT_SCALE_FAR, bandPos) * uDpr; + + vec2 toDot = (vec2(float(i), float(j)) + jitter - frac) * cellSize; + float dist = length(toDot); + float aa = max(fwidth(dist), MIN_EDGE_AA_PX); // ~1px anti-aliased rim + cover = max(cover, 1.0 - smoothstep(dotRadius - aa, dotRadius + aa, dist)); + } + } + } + + // Density floor: the stipple alone tops out well below full coverage, which + // would let the crisp silhouette of the rough core read through the fringe. + // Ramp from full alpha at the rough edge so the gradient truly starts solid. + cover = max(cover, 1.0 - smoothstep(coreEdge, coreEdge + SOLID_FADE_CSS_PX * uDpr, roughDist)); + + if(cover <= 0.0) discard; + fragColor = vec4(uColor, cover); +}`; + +export interface RenderParams { + /** CSS pixel size of the button's box (not the oversized canvas). */ + cssW: number; + cssH: number; + dpr: number; + /** How far, in CSS px, the spray bleeds past the box. */ + spread: number; + radius: number; + density: number; + seed: number; + color: string | Color; +} + +let gl: WebGL2RenderingContext | null = null; +let glCanvas: OffscreenCanvas | null = null; +let progInfo: twgl.ProgramInfo | null = null; +let fullscreenTri: twgl.BufferInfo | null = null; + +// Lazy so the module is import-safe during SSR (no top-level DOM access). +function ensureGL(): boolean { + if (gl) return true; + glCanvas = new OffscreenCanvas(1, 1); + // preserveDrawingBuffer: drawImage() reads a cleared buffer without it. + gl = glCanvas.getContext('webgl2', { + premultipliedAlpha: false, + preserveDrawingBuffer: true, + antialias: false, + powerPreference: 'low-power', + }); + if (!gl) return false; + gl.drawingBufferColorSpace = 'display-p3'; + progInfo = twgl.createProgramInfo(gl, [VS, FS]); + fullscreenTri = twgl.createBufferInfoFromArrays(gl, { + p: { numComponents: 2, data: [-1, -1, 3, -1, -1, 3] }, + }); + return true; +} + +/** + * Render the spray into `target` (a visible per-button 2D canvas). + * Returns false (leaving `target` untouched) when WebGL2 is missing. + */ +export function renderSpray(target: HTMLCanvasElement, params: RenderParams): boolean { + if (!ensureGL() || !gl || !glCanvas || !progInfo || !fullscreenTri) return false; + + const resolutionWidth = Math.max(1, Math.round((params.cssW + 2 * params.spread) * params.dpr)); + const resolutionHeight = Math.max(1, Math.round((params.cssH + 2 * params.spread) * params.dpr)); + + const rgb = lrgb(params.color); + if (!rgb) throw new Error(`Invalid color: ${JSON.stringify(params.color)}`); + + if (glCanvas.width !== resolutionWidth || glCanvas.height !== resolutionHeight) { + glCanvas.width = resolutionWidth; + glCanvas.height = resolutionHeight; + } + gl.viewport(0, 0, resolutionWidth, resolutionHeight); // must re-set after every resize + gl.clearColor(0, 0, 0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + + gl.useProgram(progInfo.program); + twgl.setBuffersAndAttributes(gl, progInfo, fullscreenTri); + twgl.setUniforms(progInfo, { + uResolution: [resolutionWidth, resolutionHeight], + uCoreHalfSize: [(params.cssW / 2) * params.dpr, (params.cssH / 2) * params.dpr], + uRadius: params.radius * params.dpr, + uSpread: params.spread * params.dpr, + uDensity: params.density, + uSeed: params.seed, + uDpr: params.dpr, + uColor: [rgb.r, rgb.g, rgb.b], + }); + twgl.drawBufferInfo(gl, fullscreenTri, gl.TRIANGLES); + + // Blit the shared GL canvas into the button's own 2D canvas (crisp at device px). + if (target.width !== resolutionWidth || target.height !== resolutionHeight) { + target.width = resolutionWidth; + target.height = resolutionHeight; + } + const targetCtx = target.getContext('2d', { + colorSpace: 'display-p3', + }); + if (!targetCtx) return false; + targetCtx.clearRect(0, 0, resolutionWidth, resolutionHeight); + targetCtx.drawImage(glCanvas, 0, 0); + return true; +} diff --git a/src/lib/index.ts b/src/lib/index.ts index 8a00082..76e688e 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,2 +1,3 @@ // place files you want to import through the `$lib` alias in this folder. export { default as Button } from './Button/Button.svelte'; +export { default as SprayBorder } from './SprayBorder/SprayBorder.svelte'; From 50d12cf2b5f6b307410850c7b430945da1e76bf4 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 19 Jul 2026 05:45:07 -0700 Subject: [PATCH 045/141] feat(ui-components): round the button focus outline Claude-Session: https://claude.ai/code/session_01TgWDFkqedR9t2JSccFVMax --- src/lib/Button/Button.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Button/Button.svelte b/src/lib/Button/Button.svelte index fcbda40..d62ea3f 100644 --- a/src/lib/Button/Button.svelte +++ b/src/lib/Button/Button.svelte @@ -29,7 +29,7 @@ {...restProps as HTMLAttributes} color={brandColors.shade[800]} class={[ - 'text-white tracking-wider font-bold font-sans px-5 outline-4 outline-transparent outline-offset--4 inline-flex gap-2 h-14 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:text-brand-shade-300 disabled:bg-brand-shade-700 disabled:cursor-not-allowed active:scale-[0.98] focus-visible:not-disabled:outline-brand-shade-800 focus-visible:not-disabled:outline-offset-4 hover:text-brand-secondary-50', + 'text-white tracking-wider font-bold font-sans px-5 outline-4 outline-transparent outline-offset--4 inline-flex gap-2 h-14 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:text-brand-shade-300 disabled:bg-brand-shade-700 disabled:cursor-not-allowed active:scale-[0.98] focus-visible:rounded-lg focus-visible:not-disabled:outline-brand-shade-800 focus-visible:not-disabled:outline-offset-4 hover:text-brand-secondary-50', 'bg-transparent', className, ]} From 94ea5ca7bc13ee476aae85fb580f1e5ef1ab41d3 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 18:40:46 -0700 Subject: [PATCH 046/141] feat(theme): add brand color fallbacks --- src/lib/Button/Button.svelte | 4 +- .../SprayBorder/SprayBorder.stories.svelte | 4 +- src/lib/theme/presetBrandColors.test.ts | 30 +++++++++++ src/lib/theme/presetBrandColors.ts | 51 +++++++++++++++++++ src/lib/tokens.ts | 13 ++++- uno.config.ts | 9 ++-- 6 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 src/lib/theme/presetBrandColors.test.ts create mode 100644 src/lib/theme/presetBrandColors.ts diff --git a/src/lib/Button/Button.svelte b/src/lib/Button/Button.svelte index d62ea3f..3af3f28 100644 --- a/src/lib/Button/Button.svelte +++ b/src/lib/Button/Button.svelte @@ -4,7 +4,7 @@ import type { ButtonRootProps } from 'bits-ui'; - import { brandColors } from '$lib/tokens'; + import { brandColorValues } from '$lib/tokens'; import SprayBorder from '../SprayBorder/SprayBorder.svelte'; @@ -27,7 +27,7 @@ {...sprayOpts} as={restProps.href != null ? 'a' : 'button'} {...restProps as HTMLAttributes} - color={brandColors.shade[800]} + color={brandColorValues.shade[800]} class={[ 'text-white tracking-wider font-bold font-sans px-5 outline-4 outline-transparent outline-offset--4 inline-flex gap-2 h-14 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:text-brand-shade-300 disabled:bg-brand-shade-700 disabled:cursor-not-allowed active:scale-[0.98] focus-visible:rounded-lg focus-visible:not-disabled:outline-brand-shade-800 focus-visible:not-disabled:outline-offset-4 hover:text-brand-secondary-50', 'bg-transparent', diff --git a/src/lib/SprayBorder/SprayBorder.stories.svelte b/src/lib/SprayBorder/SprayBorder.stories.svelte index f45f973..1ded2d9 100644 --- a/src/lib/SprayBorder/SprayBorder.stories.svelte +++ b/src/lib/SprayBorder/SprayBorder.stories.svelte @@ -4,7 +4,7 @@ import { expect } from 'storybook/test'; - import { brandColors } from '$lib/tokens'; + import { brandColorValues } from '$lib/tokens'; import SprayBorder from './SprayBorder.svelte'; @@ -35,7 +35,7 @@ radius: 9, density: 1, seed: 7, - color: brandColors.shade['800'], + color: brandColorValues.shade['800'], }, argTypes: { spread: { control: { type: 'range', min: 4, max: 40, step: 1 } }, diff --git a/src/lib/theme/presetBrandColors.test.ts b/src/lib/theme/presetBrandColors.test.ts new file mode 100644 index 0000000..1ef4b55 --- /dev/null +++ b/src/lib/theme/presetBrandColors.test.ts @@ -0,0 +1,30 @@ +import { createGenerator, presetWind4 } from 'unocss'; +import { describe, expect, test } from 'vitest'; + +import { brandColors, brandColorValues } from '$lib/tokens'; + +import { createBrandColorCss, presetBrandColors } from './presetBrandColors'; + +describe('presetBrandColors', () => { + test('emits sRGB defaults and guarded canonical overrides', () => { + const css = createBrandColorCss({ primary: { 500: 'oklch(51.2% 0.2529 286.36)' } }); + + expect(css).toMatch(/--brand-primary-500: rgb\(/); + expect(css).toContain('@supports (color: oklch(0% 0 0))'); + expect(css).toContain('--brand-primary-500: oklch(51.2% 0.2529 286.36);'); + }); + + test('registers the references as UnoCSS brand colors', async () => { + const uno = await createGenerator({ + presets: [ + presetWind4(), + presetBrandColors({ values: brandColorValues, references: brandColors }), + ], + }); + const { css } = await uno.generate('bg-brand-primary-500'); + + expect(css).toContain('--brand-primary-500: rgb('); + expect(css).toContain('.bg-brand-primary-500'); + expect(css).toContain('var(--brand-primary-500)'); + }); +}); diff --git a/src/lib/theme/presetBrandColors.ts b/src/lib/theme/presetBrandColors.ts new file mode 100644 index 0000000..22efe13 --- /dev/null +++ b/src/lib/theme/presetBrandColors.ts @@ -0,0 +1,51 @@ +import { formatRgb, toGamut } from 'culori'; +import { definePreset } from 'unocss'; + +type BrandColorPalette = Record>; + +export interface BrandColorPresetOptions { + values: BrandColorPalette; + references: BrandColorPalette; +} + +const toSrgb = toGamut('rgb', 'oklch'); + +function declarations(palette: BrandColorPalette, serialize: (color: string) => string): string { + return Object.entries(palette) + .flatMap(([family, colors]) => + Object.entries(colors).map( + ([stop, color]) => ` --brand-${family}-${stop}: ${serialize(color)};`, + ), + ) + .join('\n'); +} + +export function createBrandColorCss(values: BrandColorPalette): string { + const fallback = declarations(values, (color) => formatRgb(toSrgb(color))); + const modern = declarations(values, (color) => color); + + return `:root, +:host { +${fallback} +} +@supports (color: oklch(0% 0 0)) { + :root, + :host { +${modern} + } +}`; +} + +export const presetBrandColors = definePreset((options) => { + if (!options) throw new Error('presetBrandColors requires brand color values and references'); + + return { + name: 'summer-summit-brand-colors', + theme: { + colors: { + brand: options.references, + }, + }, + preflights: [{ getCSS: () => createBrandColorCss(options.values) }], + }; +}); diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index e986324..2e9e0e7 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -84,12 +84,23 @@ function generateColors(colors: Record): ColorScale { ) as ColorScale; } -export const brandColors = { +export const brandColorValues = { primary: generateColors(shapeShadows(brand.primary, shadowGamma.primary)), secondary: generateColors(shapeShadows(brand.secondary, shadowGamma.secondary)), shade: generateColors(shapeShadows(brand.shade, shadowGamma.shade)), }; +type BrandColorValues = typeof brandColorValues; + +export const brandColors = Object.fromEntries( + Object.entries(brandColorValues).map(([family, colors]) => [ + family, + Object.fromEntries(Object.keys(colors).map((stop) => [stop, `var(--brand-${family}-${stop})`])), + ]), +) as { + [Family in keyof BrandColorValues]: { [Stop in keyof BrandColorValues[Family]]: string }; +}; + export const fonts = { sans: 'Work Sans Variable', hero: 'Syncopate', diff --git a/uno.config.ts b/uno.config.ts index a791734..fea5130 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -10,7 +10,8 @@ import { } from 'unocss'; import extractorSvelte from '@unocss/extractor-svelte'; -import { brandColors, fonts } from './src/lib/tokens'; +import { presetBrandColors } from './src/lib/theme/presetBrandColors'; +import { brandColors, brandColorValues, fonts } from './src/lib/tokens'; export default defineConfig({ presets: [ @@ -19,6 +20,7 @@ export default defineConfig({ reset: true, }, }), + presetBrandColors({ values: brandColorValues, references: brandColors }), presetIcons({ warn: true, }), @@ -30,9 +32,4 @@ export default defineConfig({ ], transformers: [transformerVariantGroup(), transformerDirectives(), transformerCompileClass()], extractors: [extractorSvelte()], - theme: { - colors: { - brand: brandColors, - }, - }, }); From 7f0dc635b215f4296e4784427704dc9fe02ee011 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 22 Jul 2026 12:21:21 -0700 Subject: [PATCH 047/141] feat: add configurable brand color palettes --- eslint.config.ts | 6 + package.json | 1 + pnpm-lock.yaml | 252 ++++++++++++++++++ src/docs/Colors.mdx | 4 +- src/lib/Button/Button.stories.svelte | 8 +- src/lib/Button/Button.svelte | 4 +- .../ColorPalette/ColorPalette.stories.svelte | 105 ++++++++ src/lib/ColorPalette/ColorPalette.svelte | 211 +++++++++++++++ src/lib/ColorPalette/HueChromaMinimap.svelte | 225 ++++++++++++++++ src/lib/ColorPalette/gamutMap.ts | 115 ++++++++ src/lib/ColorPalette/palette.test.ts | 141 ++++++++++ src/lib/ColorPalette/palette.ts | 114 ++++++++ .../SprayBorder/SprayBorder.stories.svelte | 2 +- src/lib/index.ts | 12 + src/lib/theme/presetBrandColors.test.ts | 5 +- src/lib/tokens.ts | 171 ++++-------- 16 files changed, 1241 insertions(+), 135 deletions(-) create mode 100644 src/lib/ColorPalette/ColorPalette.stories.svelte create mode 100644 src/lib/ColorPalette/ColorPalette.svelte create mode 100644 src/lib/ColorPalette/HueChromaMinimap.svelte create mode 100644 src/lib/ColorPalette/gamutMap.ts create mode 100644 src/lib/ColorPalette/palette.test.ts create mode 100644 src/lib/ColorPalette/palette.ts diff --git a/eslint.config.ts b/eslint.config.ts index 119aad4..5add3d1 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -218,6 +218,12 @@ export default defineConfig( allowNullableBoolean: true, }, ], + '@typescript-eslint/restrict-template-expressions': [ + 'error', + { + allowNumber: true, + }, + ], '@stylistic/quotes': ['error', 'single', { avoidEscape: true, ignoreStringLiterals: true }], '@typescript-eslint/no-unused-vars': [ diff --git a/package.json b/package.json index 9825643..7143896 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "@sveltejs/adapter-cloudflare": "^7.2.9", "@sveltejs/enhanced-img": "^0.11.0", "@sveltejs/kit": "^2.69.3", + "@sveltejs/mcp": "^0.1.25", "@sveltejs/vite-plugin-svelte": "^7.2.0", "@types/culori": "^4.0.1", "@types/node": "^24.13.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b08825..5b039c5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -83,6 +83,9 @@ importers: '@sveltejs/kit': specifier: ^2.69.3 version: 2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + '@sveltejs/mcp': + specifier: ^0.1.25 + version: 0.1.25(jiti@2.7.0)(typescript@6.0.3) '@sveltejs/vite-plugin-svelte': specifier: ^7.2.0 version: 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) @@ -567,18 +570,34 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.5': resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.6.0': resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@1.2.1': resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/eslintrc@3.3.6': + resolution: {integrity: sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@10.0.1': resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -588,10 +607,22 @@ packages: eslint: optional: true + '@eslint/js@9.39.5': + resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.5': resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.7.2': resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -1507,6 +1538,10 @@ packages: resolution: {integrity: sha512-1LgZ/qUqSoq+QorD83lk2hka79Px0wXNW2q5V1nZlxGhQgw1jrsIbVz5YiCeucVLo4XvFLjXukUaQjIiqowkcg==} engines: {node: '>= 18.0.0'} + '@sveltejs/mcp@0.1.25': + resolution: {integrity: sha512-gjXU22CAxs+HA/7hW8v/cuHZR7qOOQWQTVKA2BNeXivrojrYHRRT1OqDxms8rWcSdXKGC8MjOibFpshWd8KWig==} + hasBin: true + '@sveltejs/vite-plugin-svelte@7.2.0': resolution: {integrity: sha512-1SpkuMSRLfugrVX+IrKfE1RUegzo8AQzKQ6qQPfVzbcWi5IhuTPaKb5ZrLpucleFznkc4/RTeSPoRnGWFxX+EQ==} engines: {node: ^20.19 || ^22.12 || >=24} @@ -1804,6 +1839,10 @@ packages: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} @@ -1849,6 +1888,9 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -1863,6 +1905,9 @@ packages: blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} + brace-expansion@5.0.7: resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} @@ -1891,6 +1936,10 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + check-error@2.1.3: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} @@ -1942,9 +1991,19 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -2175,6 +2234,16 @@ packages: jiti: optional: true + eslint@9.39.5: + resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} @@ -2316,6 +2385,10 @@ packages: resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} engines: {node: '>=20'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + globals@16.5.0: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} @@ -2447,6 +2520,9 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-rpc-2.0@1.7.1: + resolution: {integrity: sha512-JqZjhjAanbpkXIzFE7u8mE/iFblawwlXtONaCvRqI+pyABVz7B4M1EUNpyVW+dZjqgQ2L5HFmZCmOCgUKm00hg==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -2564,6 +2640,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} @@ -2608,6 +2687,9 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} @@ -3049,6 +3131,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + sqids@0.3.0: + resolution: {integrity: sha512-lOQK1ucVg+W6n3FhRwwSeUijxe93b51Bfz5PMRMihVf1iVkl82ePQG7V5vwrhzB11v0NtsR25PSZRGiSomJaJw==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -3087,6 +3172,10 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + style-to-object@1.0.14: resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} @@ -3182,6 +3271,9 @@ packages: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} + tmcp@1.19.4: + resolution: {integrity: sha512-fMoUJ3Gef9iA0yKZNeW2SQCCKTluCwghUyOz/qxPS8XxrQk6Jlw4lgql3S+s6L//FteLeSJ7erKxMWl727mZoQ==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3328,6 +3420,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-template-matcher@1.1.2: + resolution: {integrity: sha512-uZc1h12jdO3m/R77SfTEOuo6VbMhgWznaawKpBjRGSJb7i91x5PgI37NQJtG+Cerxkk0yr1pylBY2qG1kQ+aEQ==} + use-sync-external-store@1.6.0: resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: @@ -3340,6 +3435,14 @@ packages: resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} hasBin: true + valibot@1.4.2: + resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + vite-imagetools@9.0.3: resolution: {integrity: sha512-FwjApRNZyN+RucPW9Z9kf0dyzyi3r3zlDfrTnzHXNaYpmT3pZ5w//d6QkApy1iypbDm+3fq+Gwfv+PYA4j4uYw==} engines: {node: '>=20.0.0'} @@ -3870,8 +3973,21 @@ snapshots: eslint: 10.7.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(jiti@2.7.0))': + dependencies: + eslint: 9.39.5(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.2': {} + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + '@eslint/config-array@0.23.5': dependencies: '@eslint/object-schema': 3.0.5 @@ -3880,20 +3996,51 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + '@eslint/config-helpers@0.6.0': dependencies: '@eslint/core': 1.2.1 + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.6': + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.3.0 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/js@10.0.1(eslint@10.7.0(jiti@2.7.0))': optionalDependencies: eslint: 10.7.0(jiti@2.7.0) + '@eslint/js@9.39.5': {} + + '@eslint/object-schema@2.1.7': {} + '@eslint/object-schema@3.0.5': {} + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + '@eslint/plugin-kit@0.7.2': dependencies: '@eslint/core': 1.2.1 @@ -4583,6 +4730,16 @@ snapshots: '@sveltejs/load-config@0.2.0': {} + '@sveltejs/mcp@0.1.25(jiti@2.7.0)(typescript@6.0.3)': + dependencies: + eslint: 9.39.5(jiti@2.7.0) + sade: 1.8.1 + tmcp: 1.19.4(typescript@6.0.3) + transitivePeerDependencies: + - jiti + - supports-color + - typescript + '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0))': dependencies: deepmerge: 4.3.1 @@ -5053,6 +5210,10 @@ snapshots: ansi-regex@6.2.2: {} + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + ansi-styles@5.2.0: {} ansi-styles@6.2.3: {} @@ -5085,6 +5246,8 @@ snapshots: axobject-query@4.1.0: {} + balanced-match@1.0.2: {} + balanced-match@4.0.4: {} bits-ui@2.18.1(@internationalized/date@3.12.2)(@sveltejs/kit@2.69.3(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.64.0))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0))(typescript@6.0.3)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)))(svelte@5.56.4(@typescript-eslint/types@8.64.0)): @@ -5102,6 +5265,11 @@ snapshots: blake3-wasm@2.1.5: {} + brace-expansion@1.1.16: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@5.0.7: dependencies: balanced-match: 4.0.4 @@ -5128,6 +5296,11 @@ snapshots: chai@6.2.2: {} + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + check-error@2.1.3: {} chokidar@4.0.3: @@ -5154,8 +5327,16 @@ snapshots: clsx@2.1.1: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + colorette@2.0.20: {} + concat-map@0.0.1: {} + confbox@0.1.8: {} consola@3.4.2: {} @@ -5396,6 +5577,47 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@9.39.5(jiti@2.7.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.6 + '@eslint/js': 9.39.5 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + esm-env@1.2.2: {} espree@10.4.0: @@ -5527,6 +5749,8 @@ snapshots: dependencies: ini: 6.0.0 + globals@14.0.0: {} + globals@16.5.0: {} globals@17.7.0: {} @@ -5620,6 +5844,8 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-rpc-2.0@1.7.1: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -5706,6 +5932,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.merge@4.6.2: {} + loupe@3.2.1: {} lz-string@1.5.0: {} @@ -5761,6 +5989,10 @@ snapshots: dependencies: brace-expansion: 5.0.7 + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.16 + mlly@1.8.2: dependencies: acorn: 8.17.0 @@ -6131,6 +6363,8 @@ snapshots: source-map@0.6.1: {} + sqids@0.3.0: {} + stackback@0.0.2: {} std-env@4.2.0: {} @@ -6180,6 +6414,8 @@ snapshots: dependencies: min-indent: 1.0.1 + strip-json-comments@3.1.1: {} + style-to-object@1.0.14: dependencies: inline-style-parser: 0.2.7 @@ -6289,6 +6525,16 @@ snapshots: tinyspy@4.0.4: {} + tmcp@1.19.4(typescript@6.0.3): + dependencies: + '@standard-schema/spec': 1.1.0 + json-rpc-2.0: 1.7.1 + sqids: 0.3.0 + uri-template-matcher: 1.1.2 + valibot: 1.4.2(typescript@6.0.3) + transitivePeerDependencies: + - typescript + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -6424,6 +6670,8 @@ snapshots: dependencies: punycode: 2.3.1 + uri-template-matcher@1.1.2: {} + use-sync-external-store@1.6.0(react@19.2.7): dependencies: react: 19.2.7 @@ -6432,6 +6680,10 @@ snapshots: uuid@11.1.1: {} + valibot@1.4.2(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 + vite-imagetools@9.0.3: dependencies: '@rollup/pluginutils': 5.4.0 diff --git a/src/docs/Colors.mdx b/src/docs/Colors.mdx index 340f0c0..0267abc 100644 --- a/src/docs/Colors.mdx +++ b/src/docs/Colors.mdx @@ -6,10 +6,8 @@ import { brandColors } from '$lib/tokens'; # Brand Colors The `brand` palette. Use as UnoCSS utilities, e.g. -`bg-brand-primary-500`, `text-brand-shade-900`. +`bg-brand-primary-500`, `text-brand-primary-900`. - - diff --git a/src/lib/Button/Button.stories.svelte b/src/lib/Button/Button.stories.svelte index 32e993c..d6c9410 100644 --- a/src/lib/Button/Button.stories.svelte +++ b/src/lib/Button/Button.stories.svelte @@ -36,19 +36,19 @@
- Default + Default
- Hover + Hover
- Active + Active
- Focus Visible
diff --git a/src/lib/Button/Button.svelte b/src/lib/Button/Button.svelte index 3af3f28..9bf478c 100644 --- a/src/lib/Button/Button.svelte +++ b/src/lib/Button/Button.svelte @@ -27,9 +27,9 @@ {...sprayOpts} as={restProps.href != null ? 'a' : 'button'} {...restProps as HTMLAttributes} - color={brandColorValues.shade[800]} + color={brandColorValues.primary[800]} class={[ - 'text-white tracking-wider font-bold font-sans px-5 outline-4 outline-transparent outline-offset--4 inline-flex gap-2 h-14 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:text-brand-shade-300 disabled:bg-brand-shade-700 disabled:cursor-not-allowed active:scale-[0.98] focus-visible:rounded-lg focus-visible:not-disabled:outline-brand-shade-800 focus-visible:not-disabled:outline-offset-4 hover:text-brand-secondary-50', + 'text-white tracking-wider font-bold font-sans px-5 outline-4 outline-transparent outline-offset--4 inline-flex gap-2 h-14 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:text-brand-primary-300 disabled:bg-brand-primary-700 disabled:cursor-not-allowed active:scale-[0.98] focus-visible:rounded-lg focus-visible:not-disabled:outline-brand-primary-800 focus-visible:not-disabled:outline-offset-4 hover:text-brand-primary-50', 'bg-transparent', className, ]} diff --git a/src/lib/ColorPalette/ColorPalette.stories.svelte b/src/lib/ColorPalette/ColorPalette.stories.svelte new file mode 100644 index 0000000..256d088 --- /dev/null +++ b/src/lib/ColorPalette/ColorPalette.stories.svelte @@ -0,0 +1,105 @@ + + +{#snippet template(args: Args)} + +{/snippet} + + + diff --git a/src/lib/ColorPalette/ColorPalette.svelte b/src/lib/ColorPalette/ColorPalette.svelte new file mode 100644 index 0000000..66c43ce --- /dev/null +++ b/src/lib/ColorPalette/ColorPalette.svelte @@ -0,0 +1,211 @@ + + + + +
+
{label}
+ + {#if swatches.length > 0} +
    + {#each swatches as swatch (swatch.key)} +
  1. + + + + {swatch.stop} + {gamutLabels[swatch.gamut]} + + + + L {swatch.color.l.toFixed(2)} · C {swatch.color.c.toFixed(3)} + {#if swatch.color.h !== undefined}· H {swatch.color.h.toFixed(1)}°{/if} + +
  2. + {/each} +
+ {:else} +

No colors were provided.

+ {/if} +
+ + diff --git a/src/lib/ColorPalette/HueChromaMinimap.svelte b/src/lib/ColorPalette/HueChromaMinimap.svelte new file mode 100644 index 0000000..013b36f --- /dev/null +++ b/src/lib/ColorPalette/HueChromaMinimap.svelte @@ -0,0 +1,225 @@ + + +
+ + {title} + + + {#each map.gradientStops as stop (stop.hue)} + + {/each} + + + + + + + + + + + + {#each map.boundaries as boundary (boundary.gamut)} + + + + + {/each} + + {#each map.boundaries as boundary (boundary.gamut)} + gamutRank[gamut]} + class:smaller={gamutRank[boundary.gamut] < gamutRank[gamut]} + d={linePath(boundary.points, maximumChroma)} + /> + {/each} + + + {#if color.h !== undefined} + + {/if} + + + + C + H + + + +
+ + diff --git a/src/lib/ColorPalette/gamutMap.ts b/src/lib/ColorPalette/gamutMap.ts new file mode 100644 index 0000000..475ffa8 --- /dev/null +++ b/src/lib/ColorPalette/gamutMap.ts @@ -0,0 +1,115 @@ +import { formatCss, inGamut, type Mode, type Oklch } from 'culori'; + +export type ColorGamut = 'srgb' | 'display-p3' | 'rec2020' | 'beyond-rec2020'; +export type DisplayGamut = Exclude; + +export interface GamutBoundaryPoint { + hue: number; + chroma: number; +} + +export interface GamutBoundary { + gamut: DisplayGamut; + label: string; + points: GamutBoundaryPoint[]; +} + +export interface HueGradientStop extends GamutBoundaryPoint { + css: string; +} + +export interface HueChromaMap { + boundaries: GamutBoundary[]; + gradientStops: HueGradientStop[]; + neutralCss: string; +} + +export const gamutLabels: Record = { + srgb: 'sRGB', + 'display-p3': 'P3', + rec2020: 'Rec. 2020', + 'beyond-rec2020': 'Beyond Rec. 2020', +}; + +const boundaryDefinitions = [ + { gamut: 'rec2020', label: gamutLabels.rec2020, mode: 'rec2020' }, + { gamut: 'display-p3', label: gamutLabels['display-p3'], mode: 'p3' }, + { gamut: 'srgb', label: gamutLabels.srgb, mode: 'rgb' }, +] as const satisfies readonly { gamut: DisplayGamut; label: string; mode: Mode }[]; + +const gamutChecks = { + srgb: inGamut('rgb'), + 'display-p3': inGamut('p3'), + rec2020: inGamut('rec2020'), +} satisfies Record>; + +const HUE_STEP = 6; +const GRADIENT_STEP = 30; +const SEARCH_LIMIT = 0.8; +const SEARCH_STEPS = 12; +const mapCache = new Map(); + +export function classifyGamut(color: Oklch): ColorGamut { + if (gamutChecks.srgb(color)) return 'srgb'; + if (gamutChecks['display-p3'](color)) return 'display-p3'; + if (gamutChecks.rec2020(color)) return 'rec2020'; + return 'beyond-rec2020'; +} + +function maximumChroma(lightness: number, hue: number, mode: Mode): number { + const contains = inGamut(mode); + let lower = 0; + let upper = 0.1; + + while (upper < SEARCH_LIMIT && contains({ mode: 'oklch', l: lightness, c: upper, h: hue })) { + lower = upper; + upper = Math.min(upper * 2, SEARCH_LIMIT); + } + + if (upper === SEARCH_LIMIT && contains({ mode: 'oklch', l: lightness, c: upper, h: hue })) { + return upper; + } + + for (let index = 0; index < SEARCH_STEPS; index += 1) { + const candidate = (lower + upper) / 2; + if (contains({ mode: 'oklch', l: lightness, c: candidate, h: hue })) { + lower = candidate; + } else { + upper = candidate; + } + } + + return lower; +} + +export function createHueChromaMap(lightness: number): HueChromaMap { + const cacheKey = Math.round(lightness * 1_000_000); + const cached = mapCache.get(cacheKey); + if (cached) return cached; + + const boundaries = boundaryDefinitions.map(({ gamut, label, mode }) => ({ + gamut, + label, + points: Array.from({ length: 360 / HUE_STEP + 1 }, (_, index) => { + const hue = index * HUE_STEP; + return { hue, chroma: maximumChroma(lightness, hue, mode) }; + }), + })); + const rec2020Boundary = boundaries[0]; + if (!rec2020Boundary) throw new Error('Missing Rec. 2020 gamut boundary'); + const gradientStops = rec2020Boundary.points + .filter(({ hue }) => hue % GRADIENT_STEP === 0) + .map(({ hue, chroma }) => ({ + hue, + chroma, + css: formatCss({ mode: 'oklch', l: lightness, c: chroma, h: hue }), + })); + const map = { + boundaries, + gradientStops, + neutralCss: formatCss({ mode: 'oklch', l: lightness, c: 0, h: 0 }), + }; + + mapCache.set(cacheKey, map); + return map; +} diff --git a/src/lib/ColorPalette/palette.test.ts b/src/lib/ColorPalette/palette.test.ts new file mode 100644 index 0000000..7c8c5ca --- /dev/null +++ b/src/lib/ColorPalette/palette.test.ts @@ -0,0 +1,141 @@ +import { inGamut, oklch, parse } from 'culori'; +import { describe, expect, it } from 'vitest'; + +import { classifyGamut, createHueChromaMap } from './gamutMap'; +import { createColorPalette } from './palette'; + +describe('createColorPalette', () => { + const target = oklch('oklch(50% 0.2 180)'); + if (!target) throw new Error('Invalid test color'); + + const palette = createColorPalette({ + color: target, + hue: { stops: [0.25, -0.5], interpolator: 'interpolatorLinear' }, + chroma: { stops: [0.25, -0.25], interpolator: 'interpolatorLinear' }, + }); + + it('uses the standard lightness stops', () => { + const expected = [0.95, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.05]; + palette.forEach(({ color }, index) => { + expect(color.l).toBeCloseTo(expected[index] ?? 0); + }); + }); + + it('interpolates one continuous curve through stop 500', () => { + const middle = palette.find(({ stop }) => stop === 500); + expect(middle?.color.h).toBeCloseTo(135); + expect(middle?.color.c).toBeCloseTo(0.2); + }); + + it('anchors start at the lightest stop and stop at the dimmest stop', () => { + const lightEdge = palette.find(({ stop }) => stop === 50); + const darkEdge = palette.find(({ stop }) => stop === 950); + + expect(lightEdge?.color.h).toBeCloseTo(270); + expect(lightEdge?.color.c).toBeCloseTo(0.3); + expect(darkEdge?.color.h).toBeCloseTo(0); + expect(darkEdge?.color.c).toBeCloseTo(0.1); + }); + + it('interpolates through additional evenly spaced stops', () => { + const paletteWithMiddleStop = createColorPalette({ + color: target, + hue: { stops: [0, 0.25, 0], interpolator: 'interpolatorLinear' }, + chroma: { stops: [0, 0.25, 0], interpolator: 'interpolatorLinear' }, + }); + const middle = paletteWithMiddleStop.find(({ stop }) => stop === 500); + + expect(middle?.color.h).toBeCloseTo(270); + expect(middle?.color.c).toBeCloseTo(0.3); + }); + + it('requires at least two finite interpolation stops', () => { + expect(() => + createColorPalette({ + color: target, + hue: { stops: [0], interpolator: 'interpolatorLinear' }, + chroma: { stops: [0, 0], interpolator: 'interpolatorLinear' }, + }), + ).toThrow('at least two stops'); + + expect(() => + createColorPalette({ + color: target, + hue: { stops: [0, Number.NaN], interpolator: 'interpolatorLinear' }, + chroma: { stops: [0, 0], interpolator: 'interpolatorLinear' }, + }), + ).toThrow('finite numbers'); + }); + + it('interprets Display-P3 inputs without clamping generated colors to P3', () => { + const wideTarget = { mode: 'p3', r: 0, g: 0.3, b: 0.9 } as const; + const convertedTarget = oklch(wideTarget); + const widePalette = createColorPalette({ + color: wideTarget, + hue: { stops: [0, 0], interpolator: 'interpolatorLinear' }, + chroma: { stops: [0, 0], interpolator: 'interpolatorLinear' }, + }); + const middle = widePalette.find(({ stop }) => stop === 500); + const isInDisplayP3 = inGamut('p3'); + + expect(middle?.color.c).toBeCloseTo(convertedTarget.c); + expect(middle?.color.h).toBeCloseTo(convertedTarget.h ?? 0); + expect(widePalette.some(({ color }) => !isInDisplayP3(color))).toBe(true); + expect(middle?.gamut).toBe('display-p3'); + expect(middle?.css).toMatch(/^oklch\(/); + }); + + it('interprets sRGB-derived inputs without clamping generated colors to sRGB', () => { + const rgbTarget = parse('#4f18ee'); + if (!rgbTarget) throw new Error('Invalid test color'); + const convertedTarget = oklch(rgbTarget); + const rgbPalette = createColorPalette({ + color: rgbTarget, + hue: { stops: [0, 0], interpolator: 'interpolatorLinear' }, + chroma: { stops: [0, 0], interpolator: 'interpolatorLinear' }, + }); + const middle = rgbPalette.find(({ stop }) => stop === 500); + const isInSrgb = inGamut('rgb'); + + expect(rgbTarget.mode).toBe('rgb'); + expect(middle?.color.c).toBeCloseTo(convertedTarget.c); + expect(middle?.color.h).toBeCloseTo(convertedTarget.h ?? 0); + expect(rgbPalette.some(({ color }) => !isInSrgb(color))).toBe(true); + }); + + it('does not clamp unbounded input spaces such as OKLCH', () => { + const middle = palette.find(({ stop }) => stop === 500); + const isInSrgb = inGamut('rgb'); + + expect(middle?.color.c).toBeCloseTo(0.2); + expect(middle && isInSrgb(middle.color)).toBe(false); + }); + + it('distinguishes Rec. 2020 colors from colors beyond Rec. 2020', () => { + const rec2020Color = oklch({ mode: 'rec2020', r: 0.99, g: 0.01, b: 0.01 }); + const unboundedColor = oklch('oklch(60% 0.7 20)'); + if (!unboundedColor) throw new Error('Invalid test color'); + + expect(classifyGamut(rec2020Color)).toBe('rec2020'); + expect(classifyGamut(unboundedColor)).toBe('beyond-rec2020'); + }); + + it('builds hue-chroma boundaries at a fixed lightness', () => { + const map = createHueChromaMap(0.5); + const [rec2020, displayP3, srgb] = map.boundaries; + + expect(rec2020?.points).toHaveLength(61); + expect(displayP3?.points).toHaveLength(61); + expect(srgb?.points).toHaveLength(61); + for (const boundary of map.boundaries) { + for (const point of boundary.points) { + expect(point.hue).toBeGreaterThanOrEqual(0); + expect(point.hue).toBeLessThanOrEqual(360); + expect(point.chroma).toBeGreaterThan(0); + expect(Number.isFinite(point.chroma)).toBe(true); + } + } + expect(rec2020?.points).not.toEqual(displayP3?.points); + expect(displayP3?.points).not.toEqual(srgb?.points); + }); +}); diff --git a/src/lib/ColorPalette/palette.ts b/src/lib/ColorPalette/palette.ts new file mode 100644 index 0000000..04e53c9 --- /dev/null +++ b/src/lib/ColorPalette/palette.ts @@ -0,0 +1,114 @@ +import { + formatCss, + formatHex, + interpolatorLinear, + interpolatorSplineBasis, + interpolatorSplineBasisClosed, + interpolatorSplineMonotone, + interpolatorSplineMonotone2, + interpolatorSplineMonotoneClosed, + interpolatorSplineNatural, + interpolatorSplineNaturalClosed, + oklch, + type Color, + type Oklch, +} from 'culori'; + +import { classifyGamut, type ColorGamut } from './gamutMap'; + +export const standardColorStops = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const; + +export type ColorStop = (typeof standardColorStops)[number]; + +export const interpolatorNames = [ + 'interpolatorLinear', + 'interpolatorSplineBasis', + 'interpolatorSplineBasisClosed', + 'interpolatorSplineNatural', + 'interpolatorSplineNaturalClosed', + 'interpolatorSplineMonotone', + 'interpolatorSplineMonotone2', + 'interpolatorSplineMonotoneClosed', +] as const; + +export type InterpolatorName = (typeof interpolatorNames)[number]; + +export interface OffsetInterpolation { + /** Evenly spaced normalized offsets from the lightest stop to the dimmest stop. */ + stops: readonly number[]; + interpolator: InterpolatorName; +} + +export interface PaletteConfig { + color: Color; + hue: OffsetInterpolation; + chroma: OffsetInterpolation; +} + +export interface PaletteSwatch { + stop: ColorStop; + gamut: ColorGamut; + color: Oklch; + css: string; + /** An sRGB fallback for browsers without CSS Color 4 support. */ + hex: string; +} + +const LIGHTEST_STOP = standardColorStops[0]; +const DIMMEST_STOP = standardColorStops.at(-1) ?? 950; +const FULL_HUE_TURN = 360; +const OKLCH_FULL_CHROMA = 0.4; + +const interpolators = { + interpolatorLinear, + interpolatorSplineBasis, + interpolatorSplineBasisClosed, + interpolatorSplineNatural, + interpolatorSplineNaturalClosed, + interpolatorSplineMonotone, + interpolatorSplineMonotone2, + interpolatorSplineMonotoneClosed, +} satisfies Record (progress: number) => number>; + +function wrapHue(hue: number): number { + return ((hue % 360) + 360) % 360; +} + +function createOffsetInterpolator(config: OffsetInterpolation): (progress: number) => number { + if (config.stops.length < 2) { + throw new RangeError('Offset interpolation requires at least two stops'); + } + if (!config.stops.every(Number.isFinite)) { + throw new RangeError('Offset interpolation stops must be finite numbers'); + } + + return interpolators[config.interpolator]([...config.stops]); +} + +export function createColorPalette(config: PaletteConfig): PaletteSwatch[] { + const { color: targetColor, hue: hueOffset, chroma: chromaOffset } = config; + const target = oklch(targetColor); + const interpolateHueOffset = createOffsetInterpolator(hueOffset); + const interpolateChromaOffset = createOffsetInterpolator(chromaOffset); + + return standardColorStops.map((stop) => { + const progress = (stop - LIGHTEST_STOP) / (DIMMEST_STOP - LIGHTEST_STOP); + const normalizedHueOffset = interpolateHueOffset(progress); + const normalizedChromaOffset = interpolateChromaOffset(progress); + const hue = target.h; + const color: Oklch = { + mode: 'oklch', + l: 1 - stop / 1000, + c: Math.max(0, target.c + normalizedChromaOffset * OKLCH_FULL_CHROMA), + ...(hue === undefined ? {} : { h: wrapHue(hue + normalizedHueOffset * FULL_HUE_TURN) }), + ...(target.alpha === undefined ? {} : { alpha: target.alpha }), + }; + return { + stop, + gamut: classifyGamut(color), + color, + css: formatCss(color), + hex: formatHex(color), + }; + }); +} diff --git a/src/lib/SprayBorder/SprayBorder.stories.svelte b/src/lib/SprayBorder/SprayBorder.stories.svelte index 1ded2d9..d309a52 100644 --- a/src/lib/SprayBorder/SprayBorder.stories.svelte +++ b/src/lib/SprayBorder/SprayBorder.stories.svelte @@ -35,7 +35,7 @@ radius: 9, density: 1, seed: 7, - color: brandColorValues.shade['800'], + color: brandColorValues.primary['800'], }, argTypes: { spread: { control: { type: 'range', min: 4, max: 40, step: 1 } }, diff --git a/src/lib/index.ts b/src/lib/index.ts index 76e688e..df50be7 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,3 +1,15 @@ // place files you want to import through the `$lib` alias in this folder. export { default as Button } from './Button/Button.svelte'; +export { default as ColorPalette } from './ColorPalette/ColorPalette.svelte'; +export type { ColorPaletteProps } from './ColorPalette/ColorPalette.svelte'; +export { + createColorPalette, + interpolatorNames, + standardColorStops, + type ColorStop, + type InterpolatorName, + type OffsetInterpolation, + type PaletteConfig, + type PaletteSwatch, +} from './ColorPalette/palette'; export { default as SprayBorder } from './SprayBorder/SprayBorder.svelte'; diff --git a/src/lib/theme/presetBrandColors.test.ts b/src/lib/theme/presetBrandColors.test.ts index 1ef4b55..116f7f3 100644 --- a/src/lib/theme/presetBrandColors.test.ts +++ b/src/lib/theme/presetBrandColors.test.ts @@ -21,10 +21,13 @@ describe('presetBrandColors', () => { presetBrandColors({ values: brandColorValues, references: brandColors }), ], }); - const { css } = await uno.generate('bg-brand-primary-500'); + const { css } = await uno.generate('bg-brand-primary-500 bg-brand-secondary-500'); expect(css).toContain('--brand-primary-500: rgb('); + expect(css).toContain('--brand-secondary-500: rgb('); expect(css).toContain('.bg-brand-primary-500'); expect(css).toContain('var(--brand-primary-500)'); + expect(css).toContain('.bg-brand-secondary-500'); + expect(css).toContain('var(--brand-secondary-500)'); }); }); diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index 2e9e0e7..f301755 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -1,105 +1,62 @@ // Design tokens -import { interpolate, interpolatorSplineMonotone2, formatCss, oklch } from 'culori'; +import { parse } from 'culori'; import { theme } from '@unocss/preset-wind4/theme'; -const colorStops = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const; +import { createColorPalette, type ColorStop } from './ColorPalette/palette'; -export const brand = { - primary: { - 50: 'oklch(95.20% 0.0250 283.50)', - 100: 'oklch(90.03% 0.0551 283.77)', - 225: 'oklch(75.03% 0.1465 285.63)', - 375: 'oklch(63.78% 0.2218 286.67)', - 500: 'oklch(51.20% 0.2529 286.36)', - 625: 'oklch(37.27% 0.1841 286.40)', - 775: 'oklch(24.11% 0.1192 286.50)', - 950: 'oklch(9.93% 0.0465 288.17)', - }, - secondary: { - 50: 'oklch(90.50% 0.1300 122.90)', - 100: 'oklch(82.70% 0.2088 122.87)', - 225: 'oklch(75.82% 0.2039 122.84)', - 500: 'oklch(51.03% 0.1695 122.65)', - 950: 'oklch(23.41% 0.0631 123.86)', - }, - shade: { - 50: 'oklch(95.30% 0.0060 271.00)', - 100: 'oklch(90.11% 0.0108 271.21)', - 225: 'oklch(76.62% 0.0319 272.63)', - 375: 'oklch(63.50% 0.0518 271.60)', - 500: 'oklch(51.67% 0.0714 272.43)', - 950: 'oklch(13.12% 0.0157 283.23)', - }, -} as const; - -type ColorScale = Record<(typeof colorStops)[number], string>; +const primaryColor = parse('#C7FF00'); +if (!primaryColor) throw new Error(); -// Shadow-shaping knob, one per ramp. The `brand` anchors stay the source of -// truth; this reshapes only the darker half of each ramp, holding the midpoint -// lightness and everything above it (plus all chroma/hue) fixed. 1 = authored -// shadows untouched; >1 deepens shadows, <1 lifts them. Tweak to taste. -const shadowGamma = { - primary: 0.6, - secondary: 0.6, - shade: 0.6, -} as const; - -// Reshape a ramp's shadows on a gamma curve, pivoting at the midpoint lightness -// so the upper half stays exactly as authored. -function shapeShadows(colors: Record, gamma: number): Record { - const parsed = Object.entries(colors).map(([stop, color]) => { - const c = oklch(color); - if (!c) throw new Error(`unparseable color: ${color}`); - return [Number(stop), c] as const; - }); - const lightnesses = parsed.map(([, c]) => c.l); - const dark = Math.min(...lightnesses); - const span = Math.max(...lightnesses) - dark; - return Object.fromEntries( - parsed.map(([stop, c]) => { - const p = span === 0 ? 0 : (c.l - dark) / span; - if (p >= 0.5) return [stop, formatCss(c)]; - // remap within the lower half, pinning both the black point and midpoint - const l = dark + span * 0.5 * (p / 0.5) ** gamma; - return [stop, formatCss({ ...c, l })]; - }), - ); -} +const secondaryColor = parse('#3600F7'); +if (!secondaryColor) throw new Error(); -// Expand a hand-picked ramp into a full 10-stop scale. -function generateColors(colors: Record): ColorScale { - const stops = Object.entries(colors).map( - ([key, color]) => [color, Number(key) / 1000] as [string, number], - ); - const interpolator = interpolate( - stops, - 'oklch', - // @ts-expect-error - bad types - interpolatorSplineMonotone2, - ); +export const primaryPaletteConfig = { + color: primaryColor, + hue: { + stops: [0, 0.0675, 0.09], + interpolator: 'interpolatorSplineMonotone2', + }, + chroma: { + stops: [0.04, -0.06, -0.36], + interpolator: 'interpolatorSplineMonotone2', + }, +} satisfies Parameters[0]; - return Object.fromEntries( - colorStops.map((stop) => [stop, formatCss(interpolator(stop / 1000))]), - ) as ColorScale; +export const secondaryPaletteConfig = { + color: secondaryColor, + hue: { + stops: [0.08, 0.04, 0, -0.08], + interpolator: 'interpolatorSplineMonotone2', + }, + chroma: { + stops: [-0.7, -0.37, -0.18, 0, -0.6, -0.63], + interpolator: 'interpolatorSplineMonotone2', + }, +} satisfies Parameters[0]; + +const primaryPalette = createColorPalette(primaryPaletteConfig); +const secondaryPalette = createColorPalette(secondaryPaletteConfig); + +function paletteRecord( + value: typeof primaryPalette, + select: (swatch: (typeof primaryPalette)[number]) => string, +): Record { + return Object.fromEntries(value.map((swatch) => [swatch.stop, select(swatch)])) as Record< + ColorStop, + string + >; } export const brandColorValues = { - primary: generateColors(shapeShadows(brand.primary, shadowGamma.primary)), - secondary: generateColors(shapeShadows(brand.secondary, shadowGamma.secondary)), - shade: generateColors(shapeShadows(brand.shade, shadowGamma.shade)), -}; - -type BrandColorValues = typeof brandColorValues; + primary: paletteRecord(primaryPalette, ({ css }) => css), + secondary: paletteRecord(secondaryPalette, ({ css }) => css), +} as const; -export const brandColors = Object.fromEntries( - Object.entries(brandColorValues).map(([family, colors]) => [ - family, - Object.fromEntries(Object.keys(colors).map((stop) => [stop, `var(--brand-${family}-${stop})`])), - ]), -) as { - [Family in keyof BrandColorValues]: { [Stop in keyof BrandColorValues[Family]]: string }; -}; +export const brandColors = { + primary: paletteRecord(primaryPalette, ({ stop }) => `var(--brand-primary-${stop})`), + secondary: paletteRecord(secondaryPalette, ({ stop }) => `var(--brand-secondary-${stop})`), +} as const; export const fonts = { sans: 'Work Sans Variable', @@ -109,37 +66,3 @@ export const fonts = { export type SizeName = string; export type TextScale = Record; export const textScale: TextScale = theme.text; - -if (import.meta.vitest) { - const { describe, it, expect } = import.meta.vitest; - - describe('generateColors', () => { - const ramps = Object.entries(brand) as [string, Record][]; - // Narrow away culori's `| undefined` so downstream reads are non-nullable. - const parse = (color: string) => { - const parsed = oklch(color); - if (!parsed) throw new Error(`unparseable color: ${color}`); - return parsed; - }; - - it.each(ramps)('preserves %s anchors that coincide with output stops', (_, ramp) => { - const scale = generateColors(ramp); - for (const stop of colorStops) { - const anchor = ramp[stop]; - if (anchor === undefined) continue; - const got = parse(scale[stop]); - const want = parse(anchor); - expect(got.l).toBeCloseTo(want.l, 5); - expect(got.c).toBeCloseTo(want.c, 5); - expect(got.h ?? 0).toBeCloseTo(want.h ?? 0, 3); - } - }); - - it.each(ramps)('ramps %s from light to dark monotonically', (_, ramp) => { - const scale = generateColors(ramp); - const lightness = colorStops.map((stop) => parse(scale[stop]).l); - const descending = lightness.every((l, i) => i === 0 || l < (lightness[i - 1] ?? Infinity)); - expect(descending).toBe(true); - }); - }); -} From 20b7821e24eddc957cacb77ffad64f29370fad8a Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 22 Jul 2026 12:23:07 -0700 Subject: [PATCH 048/141] docs: remove obsolete color palette page --- src/docs/Colors.mdx | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/docs/Colors.mdx diff --git a/src/docs/Colors.mdx b/src/docs/Colors.mdx deleted file mode 100644 index 0267abc..0000000 --- a/src/docs/Colors.mdx +++ /dev/null @@ -1,13 +0,0 @@ -import { Meta, ColorPalette, ColorItem } from '@storybook/addon-docs/blocks'; -import { brandColors } from '$lib/tokens'; - - - -# Brand Colors - -The `brand` palette. Use as UnoCSS utilities, e.g. -`bg-brand-primary-500`, `text-brand-primary-900`. - - - - From 7d06d46c65292d36bef5abc45ea519ad53d65d62 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 22 Jul 2026 14:30:39 -0700 Subject: [PATCH 049/141] feat(theme): add brand font families --- package.json | 4 +- pnpm-lock.yaml | 24 +++++----- src/docs/Typography.mdx | 33 +++++++++----- src/lib/assets/fonts/body/Extrabold-800.woff2 | Bin 0 -> 95656 bytes .../fonts/body/ExtraboldItalic-800.woff2 | Bin 0 -> 94512 bytes src/lib/assets/fonts/body/Hairline-100.woff2 | Bin 0 -> 86964 bytes .../fonts/body/HairlineItalic-100.woff2 | Bin 0 -> 89188 bytes src/lib/assets/fonts/body/Italic-400.woff2 | Bin 0 -> 84588 bytes src/lib/assets/fonts/body/Light-300.woff2 | Bin 0 -> 87868 bytes .../assets/fonts/body/LightItalic-300.woff2 | Bin 0 -> 88828 bytes src/lib/assets/fonts/body/Regular-400.woff2 | Bin 0 -> 84020 bytes src/lib/assets/fonts/body/Semibold-600.woff2 | Bin 0 -> 91440 bytes .../fonts/body/SemiboldItalic-600.woff2 | Bin 0 -> 90960 bytes src/lib/tokens.ts | 5 ++- vite.config.ts | 41 +++++++++++++----- 15 files changed, 71 insertions(+), 36 deletions(-) create mode 100644 src/lib/assets/fonts/body/Extrabold-800.woff2 create mode 100644 src/lib/assets/fonts/body/ExtraboldItalic-800.woff2 create mode 100644 src/lib/assets/fonts/body/Hairline-100.woff2 create mode 100644 src/lib/assets/fonts/body/HairlineItalic-100.woff2 create mode 100644 src/lib/assets/fonts/body/Italic-400.woff2 create mode 100644 src/lib/assets/fonts/body/Light-300.woff2 create mode 100644 src/lib/assets/fonts/body/LightItalic-300.woff2 create mode 100644 src/lib/assets/fonts/body/Regular-400.woff2 create mode 100644 src/lib/assets/fonts/body/Semibold-600.woff2 create mode 100644 src/lib/assets/fonts/body/SemiboldItalic-600.woff2 diff --git a/package.json b/package.json index 7143896..bd17249 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,8 @@ "build-storybook": "storybook build" }, "dependencies": { - "@fontsource-variable/work-sans": "^5.2.8", - "@fontsource/syncopate": "^5.2.8", + "@fontsource/redaction-35": "^5.3.0", + "@fontsource/redaction-50": "^5.3.0", "@unocss/preset-wind4": "^66.7.5", "@unocss/reset": "^66.7.5", "bits-ui": "^2.18.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b039c5..0bd65ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,12 +13,12 @@ importers: .: dependencies: - '@fontsource-variable/work-sans': - specifier: ^5.2.8 - version: 5.2.8 - '@fontsource/syncopate': - specifier: ^5.2.8 - version: 5.2.8 + '@fontsource/redaction-35': + specifier: ^5.3.0 + version: 5.3.0 + '@fontsource/redaction-50': + specifier: ^5.3.0 + version: 5.3.0 '@unocss/preset-wind4': specifier: ^66.7.5 version: 66.7.5 @@ -636,11 +636,11 @@ packages: '@floating-ui/utils@0.2.12': resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} - '@fontsource-variable/work-sans@5.2.8': - resolution: {integrity: sha512-8uWtTt0/B5NxGie9xUVD5y5Ch4Q+Hy7kFYKtUpwYbzSAgJEoaMxT8rMnfnK7zfAYSLC8GnGO1/tXrFtKIYYQVQ==} + '@fontsource/redaction-35@5.3.0': + resolution: {integrity: sha512-c4n4fgTbYoiyODKvasBWjj1EzV9G+X2oYDgr1PPShIO3rzM50CYvlJ+VCpgBmNyw9l8D/6T1PUmn8ZGgzOlV3g==} - '@fontsource/syncopate@5.2.8': - resolution: {integrity: sha512-8r+Qyb9nmwfBiR1GWZeCOskoF9pw7ZZ8g/eOswocew2H3REt+UNItmxcOUoVbpXVALG+SdRvdqDpxC4sBskaxA==} + '@fontsource/redaction-50@5.3.0': + resolution: {integrity: sha512-gB62yw+lqqRW21fZA/i+O4icjaXlKfdmrwzrJoyZzMJ5PJknBAdUBcKdF+Vhyw9T9vSoU7/hf5J12tjOvnT0+Q==} '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} @@ -4057,9 +4057,9 @@ snapshots: '@floating-ui/utils@0.2.12': {} - '@fontsource-variable/work-sans@5.2.8': {} + '@fontsource/redaction-35@5.3.0': {} - '@fontsource/syncopate@5.2.8': {} + '@fontsource/redaction-50@5.3.0': {} '@humanfs/core@0.19.2': dependencies: diff --git a/src/docs/Typography.mdx b/src/docs/Typography.mdx index 65bf740..fc467be 100644 --- a/src/docs/Typography.mdx +++ b/src/docs/Typography.mdx @@ -5,35 +5,48 @@ import { fonts, textScale } from '$lib/tokens'; # Typography -Two font families, sized with UnoCSS's `text-*` scale (Wind4). Use as utilities: -`font-sans` / `font-hero` for family, and `text-xs … text-9xl` for size. The sizes below -are read directly from that scale. +Three font families, sized with UnoCSS's `text-*` scale (Wind4). Use `font-body`, +`font-header`, or `font-art` for family and `text-xs … text-9xl` for size. The sizes +below are read directly from that scale. export const sizes = Object.values(textScale).map((t) => t.fontSize); export const sample = 'The quick brown fox jumps over the lazy dog'; ## UI and Prose -**Font:** {fonts.sans} +**Font:** {fonts.body} -**Weights:** Variable +**Weights:** 100, 300, 400, 600, 800 (normal and italic) -## Hero +## Headers -**Font:** {fonts.hero} +**Font:** {fonts.header} -**Weights:** 700 +**Weights:** 400, 700 + +## Art + +**Font:** {fonts.art} + +**Weights:** 400, 700 + + diff --git a/src/lib/assets/fonts/body/Extrabold-800.woff2 b/src/lib/assets/fonts/body/Extrabold-800.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2c5994004a53a4711f3afb41f305ff5fdc8b809e GIT binary patch literal 95656 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

;C@QHizOY!M+SAvaw4nDj}v0->5>6;fCp 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 RU-XWCq#09?A7vuO000X(q=5hc literal 0 HcmV?d00001 diff --git a/src/lib/assets/fonts/body/ExtraboldItalic-800.woff2 b/src/lib/assets/fonts/body/ExtraboldItalic-800.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..55f8491b6434f88119ad3d3bdafede6e8fe788e2 GIT binary patch literal 94512 zcmV)HK)t_rPew9NR8&s@0dX(@4gdfE14!@y0dUs<0{{R300000000000000000000 z0000Dg}PiCgd7`%_7ohVSO#DK=qv#?0we>fAOr>lghmG-7bF;;0$ck>v&wRayZZvm zOgjnv(dRLS;il86bA;u0P+CNFr!M)mWymw={$-&5P24SXoq38?^E5$V>#CAngZ~@T7-U<073*F*}-c0fsp%!iumWtniB# zbxW2l%GMXFkbpJcp}~d>q^b*dEFMj7C*3LOQIj)wj`5ZZ9y>TvyPfVm^?YDk-s)xJ zn|X#1Lg)f9!v&*Sg>XsC5ExaojPe^+#1&ap5;L>KoY)mB!iumWkw37-^-Z4VB}o(5 zvbXg(P1l%*P=s(tEN4Yn5mqGnS=6>cmJP!|(&QcZG)*hUC+7}xPGm+4xHO$lI~dID z9u>^Y0`-OGRFzZyE`np)%w?e|$=D`V8TAD#!iq%Qf8-oKmD!w}=Vn&;7DEV^`SB&1 zrsYaiR)iIa?IFTGAyaztxcJ~cGj8yXabGH(ldpl4hMci-p; zdA@(*6#gq(;&y(35Z9i2_+CuaAtfHJCqSKe8$DeP*TyYy!;oj<_IR z-2t!HA%u)p-dAiz9~(@VH>Rg4lnh939DRf;?NK9JEsY!QwO|7sV?QZnn5`Y0km2PG z(`rlp@$l}F{Pe4BX_^_@&YLqBS+!`8YeiqkFWr!tEEz#)9Cg@}33d)s4^JF&apw0P zJtyesjC>l+nT6=Uj$i8q9o_m%)E|+lC%aRu9SVBsZvBjLE4F(&U^IIZ9HPGj9B=7` z!-x~Sa1y!sy%xIBtFy5Yoi5l}gq~H2J|kDh_>;~VkL)b`Y4U)QpRifA;Cu{$-{QUw zaHt`y@*(QK@iZA-&-~%gZ{4Y1F^qP3Q zuYSKCdhGc!`U9{0MGQ}qW}rTCSA5BbIb z`L+F=bMIqemsDw4U@2okDnuKRC{g@If?{D|=Px6%0yA=n6j2auexSMiyW2(!?T9vt zD6^3?VIb;=N>Py<$VZ|-VF9CTDkXA`9z8NtdIP-M{{N&nDs5|KS&o&Oi4(^J5m5;g zP()CI1Qm%0!NGPgwDInjzDCnKW^Ha+ILI~0R1}2r?!g_tcOd?M?D^l!>~r52Gw?{G zswXo^B==6##Okb0#xs?_`G5ZJ{dcZ?-yi+~0~){p1+ZZmUYZw@ssRsZfCHK{Kyzz% z>%LX8v7{H&f(2u2z($483eq;1Sb

{k|PweCYf75#>7-{h#KnJc{y*%A)xh&|KyX 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 E0Dm@D5dZ)H literal 0 HcmV?d00001 diff --git a/src/lib/assets/fonts/body/Hairline-100.woff2 b/src/lib/assets/fonts/body/Hairline-100.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2e3ad2c93f3b50ea3ca5b2bbed5a3d774459f843 GIT binary patch literal 86964 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

*@E5v*c@bxnt1tR);j99CUI>pS;aKTi~MJn3eWf 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 z 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 UPdmSN%9u56(ir->AXV@60i{@vF8}}l literal 0 HcmV?d00001 diff --git a/src/lib/assets/fonts/body/Italic-400.woff2 b/src/lib/assets/fonts/body/Italic-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1588e74f5f2b4557b07e08d9026e78bdf209d32f GIT binary patch literal 84588 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 literal 0 HcmV?d00001 diff --git a/src/lib/assets/fonts/body/LightItalic-300.woff2 b/src/lib/assets/fonts/body/LightItalic-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6d385f321855d7a5336c6efdc71b3ea6fb7eaf41 GIT binary patch literal 88828 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 UW|-`a0{{R300000000000000000000 z0000Dg#AMrgd7`${&pOqSO#DK=qv#?0we>fAOr>lga8L17bF;;0$YCVvdB_~ySsjY zW)(^pqkA965=~T{Lrijj7C@cTeS!?gHTGLtfO1vYH9R~K)o$92Il**OihZZtHUO>Y zx|dn*?EnA&|NsC0|NsBx$q(62-(BQ#NkBwE6cn_I)?aI#_P5z>RD`ospb+N~Vvhu2 zn8u@!`Eia>2!Sb7%WQ~Am1BbGtabrSu0m?(Mw4XfYYEvrs}=|WE$vjtNtP`U0ushr zSfWsc!mp|rPhydHeHx*}dQ)J{v^JpaTjCJt78aITSXjEjZnea-V8@rz=3$l-@4ffF zN7%C>tOzS&de~v<=(KIKCR>tS=opJ5D;X;T%+bt-ljg`Cggpr+kf!zuw-4bA&)63P z#!mK3rLS-oZf4irdegndaU93<7vfV^gcV^$SYZQ7WHIXX(l3$)sc|h<<&+Ll%}Bm+ zI6wVD-1*ym%P4vSZy2-VZqk;H`sloyCK|_a<+db_$}2wbImUdh8!i`!KZgelXx8fB^fv`FLZ z#OPXyLKHq@>_L@`#N8Zc&*{aW>+uuj7v|G{D*x9x&RVP#HAGnvM&K-a6i!LQ&lf9d ziCuJi(tGc{GJ5ZoDTbW2);Q@|=~+3^fFWF(HE{?CAuwK95muO%&S^)bBVzs$r>RSE z#+(20J1dw+H0xD|Yt0qTTHqH`*Vr^oFEOQtpt5z?O1C|__et0U-76GwkV zZpXj#N%TDbn-9@@8Vu!P4rn4GhA7jr9dS)hjo(>iYtQp*`#JaC$HFeL#6mB<)B+1F z+Jv~GV0^`<+Ny6O=2t|-XfUuaDlno@(f%0C0L`sM1=}sy7^60F40^$l!flFF9sG_kR_#&(4eIN~}3=liSyK|PnS`?CCho^JD#CrqN(t?*R*b4%_ z%>T>l|9@AKNU{(Tx!Q-k$A}5$ubKqG!;G z#cT^4_*z19x&!ZN{9PZU9-z5!+D0gxDyf3P+q&z{_UE$)=jA*Aze|Pu|L6V9fBDzD z&;NIgamF9)ark3!v+qf;J_TFDf~C|nEQzfo5x$WG?TAFvD%c;Eh7AE50j$W?Tm+7U zdQpmkNHPy&-Tcr0KY#FTo&7$j4d4_>P=Ki<(M1{D9x%n2P~ODjy2BP_{@u*$CbqR> zU$?E(&}qo!3=#PsIRX(Q4&g+s;tqGkuW+?T^nnjzT@`ZTSww^A-XUflL~IX}umiqT z3HE*-CEEe!6d3Qa#+|9&=)D8}L;PFh0@^7$-I`=4CXfu2$SBDaTjtnl9i$?sOPKb6)J|^B zs!}aZG|{s$&#Ax~AO--}QjWWjM9EW-v!tA%L`iEXt#u?9)Gph*Yp-JLA(yZOshVHRTpa{v0$OKas!e`)ah6l ztXN~KU@KsZg;FEfxO8P4j5Ex8PiLRZVgAg0%V~j}GVHlCLChcK0Y5E4?56hc?k$)H z^B{H$Uc8w0V;(f^6fM@Ws^bGkkS&ucYw><@-{OD*#xzNyq`ls;*37qNf`BTB2)CBq zzDq#OQonv|5%RuWO#a8j6GMq4yF^KZbYdl$q?-$o63)Vc2w2yagCAfjY3|qdc|3yl zu{R?5%Hpgr<0F2-4cK`JDB?zBd%H6=L79gd*@M3ZayC|@kV`7^;ca~)b)xo7oFFp7 zToW*M(uUSiFZ_y~D(E)%OM!4$0a+B2yR8Qd!~@X=)=8tKT8b*c$*r%IdJAv&iHO@zCjSaF+H`^rKw7b{1Y^S3QvfVt{Af6!KIA0#B z`A#SM_@ARv98oD!CU<;S(KzZVG#<&I7!*cwG*zjsyG)5CtYaeJ78aJF_YF(YpPZr3 z7z1`ey+V|t3>H?vii->X*504~bLp|>K$m*6p;d(ubv!enhqp9gX(f`7LXZ@-E#&;S zL!v=aLlXY^S5?=4MS~?Bo3#n)Jeinbg6lXFA1Zu=TqvbcaBJT@%n_tCxU`9J%3S)C z%$YJ8>9o@*r`IuasasCqKU`MQDgASh+Nq}RGCJl20N7St8oeHekz>oT7n*sQ12^T) z02@H_@VQLs{&`MiN))J zyW~>`x~t1`K;ig`QjJ1rge_GD{-dR{wcWUP#|~R zTE-H)0?VzoY^RflhZY%-14`yQof!Qy#P>3Kc*l0L%%NO9R`pZeHGzyq;P{aiD{09ds)o^LJG z_OWx22CCd2?>EFPH{$62eib!=Bq(V4Y^tPbp}2MKz3;F6lexZm!S*>=ug3YtsL%sl z2}Ox*!H(<=GG{$D!QK8Ey(-E`7_t?Vkw6yf3uWah;P@ZE78uUcEvd3>->Ls^j>MIg zWDuvu1lP|9Bi!#al=_`i^!qBz{Noxe+K3hrB_c{G5fP*RdG}uMIg8hQGc>s*2O~bB z2xEj1OE1T2v#cgOp5BY08BAkLQ3xRlVSMpD5N)4dSKXIB4>rglB8?21D6C4>?}Fvb`mgb_vvVZyk(jl#8%Po+L8BIK}SH3Y#yL^i() z+Ja)xn&5?m%Zz(;5w0%=ey?-{bawwc7LNDhJ9&KDsj6=~{p-iM_y()`|Nh4D*Hho9 z|2`ni4_P>NqrS!HGXTK=hOlJEg_i(fnu!+4D49jRWh$-IW|~rqtW<5YT@E_ooXhU1 z^Hzf&1IfsQtP)5(xm3HAW(JvLm3?l(LlhIb#K`6LyppPGti9fbn`)u8b~@@yq|JwS zx7TSKjf^f`yXAl(qvseqZo&$yj~G8~aD`RZUb6Xh&pFS6i*IBLGMx%}=bf!uEbMTUfS8mqJ*Bpm zSzKAyuCN^Wij+*QTr)Z~P*A(Y?DZFk9j1U2Lwb~W5(0vo7HrcnF37LMqG{AzY#)bremcZB93rfYkHEr#Kcvu@V=-j?vP3 zsyW;`zc)FYQ;h+GN+$AAiW)Ql0Y4HDQA0W&p#(H^VFU<#NMM45bhr>f0Ug@Okfq2P z)A@)cq_K-*#OUK7my+UefQvkmL!6Qll~qAybt_%@da5E-il$ceXi!~ph!8DCNji!Qp`BxjrA7cO;;>F#i!J8Uy%(tbxh>=(#E)Z~&O zf#gYvR7t%752mt}1}W%HSnCWI#{?@|Ub^Ihh!9v=m4~t=2XZdg@*Fb|ByK`*2o$J; z!XRVeQ=&dlAtwB|{$&XrMwG z8X+5nh@l28SimSAES?~*4#kjIrj_-~vFPRI7dKM=7PJ{ksy9@76|VZJVQQS3rWU9r zYPI@UeX6#q1hrp%uYOZU)Jc`5uBw~rwtA=vRjI00^{QFWT4w+_Xgp#_qJTPjm|}w! z6b2s=GL&dQ0w~gE1`9ZTl8lq3d zV#~xi&Gv}umX{F`m0THBSkJ4X=+#^1>M6APi>YKK;sJ+ycmo|UI1oVrGcX5x@PZJC z10n<<2}KxzC71yZ4utTZAdm<0P7oOqhcMER=OnWuERXbY4`}ZL0s}!{f;{@*1ol?o zEBmR$QaL6b(i6j;)Q}5k<;vIEQke@I;tz4#Ow&(H9kx??5rYV*K0xl?Z7=(Az+N>po z%fe=@D`CdH{S!tsWavZZ7#YU*(-jOdsn$c?#~XWge>DK_08?l~MjUkmXwWoFu&pfF zT9XEDZ}}{saMC$R6gGH<=(Ds5!CnBS1P4n#Ke{O^Nft!i&zbOAGu)RKb&+{8<`?Ju zlmvXingo=LwjDgOzDSp}>-jFf_~Z=jTmRw(^dxOtd(lf*?0y+6j);vI2sRF6%|vA} zGz*)%(Q7x-{W|l7`So^YYtY|teLaz10jrvgr3=Xvq!HD%$@1Sa?p(W>N(NEN1Pjyt zrhwXHVWoXC)}7)!BUj6v!0??EGr;~Nj3vgHTJBiW+FJBYe>0OsUD2$T18l8dQ?L;? z{YMEKj26M)Y$yH-N?0?GCGe(^?7Cs!J&)gWbDj>;3Rp;iG=GG9)+AlBVhPrzhnLvT zDA(gB^Z)iR$_ca<51imJ39@B>i}mwH*hjZjD>#_Mv<{Fph0B)j_vM$=Hpb`}SY9El z6xQ=!(l=dY*o;yMT4(M&N%+)#DhgYLzm%1oCnfm6CLAMBRivPUXkwMlhwxkHC6WGo znLu`Gn0bpCKb;!~%8DB?YEy7Rz9S!uV-%?5w|=Dj2c zK_y95MNUDF4sPy8eN~?pmA%EjgSt6*erB`_a&npxaW!^8*+OB&K+^squUALa?$YPw z>S)=pDx;ir7=32uFBy@PFWByB&aIbhTh~#wC9R!IESQN#g_8-)W;yv?fLf`ML!dUQ ziUd`CYGhAK83i)IP9vsz^vkxaP8h5lM=slJ@;8Q!x3kox!5;VGnAPli^7y$?8s7^`t={5ehpDmdqp zoQ!#HDh=J(X)T38flKboPF1Cmqyoj4s_+QS(_nPysu@BbCp%EC-}D~ayq-pIguy)UcCxySnp6(4rGx=f-$ z2p0JMxU606%*+1@+uV=FZv5E|SG6q+4D_0>PvPnZ>iQ8vgr)|Y1unP|Ju57Gc_+Fz z;ulVr=75d?HE6b#WcfP}+>6d7-?P-y?4}4tl46v%RN0(BU&ZO_@>=_NRs`cwn=d&hwc-PKT`Zo@+@ur# z^2?F1UIfE1Y6}O`eBH2(fq%v;B8JpVHY;9LxJI`(1VLz?zvU~`L8KaGQD$~3ts+>w zSG)6Fy=#fGjfu0Ij`8isn%6x0NEA4#@c1-!#CoD<{(>Efz1$TZI_`7d0uHf{OJrvi zIJxs~0ImbPT^4DC_w`?bU^LA)TS9}XU8>^^Qsv8~FRkZhf z-xDvT!{fRqr;635>z=X_uX|3H9$)_VQVmplZ%2}4HL(+M2qinztXBdly|NY?{sf*1 zt?&^3M)!g$iyad>oy8!lqMFK5`12BQFxfO_;_JP0s@D6cY~4?%yovuGdi)ti&V820 zr!k{HH3q*v`|t0=e&B(2KW_Jfz8prUV5^;n?3juW1%ndMwNoIp0Cc-79gGZpGn3L$ zXV@VZ#NG%nL_Ki1Pzs`q8$AG>omM?KUB6SbyBiaL0T$>CVinp!TNsWkNwG=+Vv#we zZ4nqfOpHj)6d;x`z-91A#_Pc4GM{ym`29t}b}x2&%NmgpJG*jjrJj z@Ueh*CMur@V}#s}L)L=>P57R(`q_D$oqa|$@8X9our5ay*i7OoT!&YENTtnj-O9>h01+mX@yl(G0R1m#gi;^BBU*=zs?AvV zz!n|{d(<#)KqI$N7s1wIAZEySaz_t^HH%?DrKXZoL25H9l?qbH)c5YyoIWy(X#l7J zIRHU3Km{Nmmk?NwsH}{#g8>j>LK!zA+V>Slr~uR$488zm+-Oc-5-m+l8^Qn*%D5rq zP^Y0EhFA9Lh-NQF)%wxF%b92sxT7T$?BJ_WU^VsygLHu3kxj^uyk8UBmJC~bcK0@aPjek6C3DS zChonM(B}D+kq(v6GmP_J+^SKMh1y!OPL5h&Ymt5&(G7J~g%4J&4UOZKHdQ)>0y=^Q zNK025jyKWed?7sVp;> zmc`wKkzdbD&`3hTgeJBmA=*S1+L$mxE?@|RkeM&o9~|7o zSKA*mp{BJwiM!ImV{XUm3VR;#vzr_=I_lwd%z<_ZtnIA+pa#U{+Fn@7ib`)eh~MH> z!@=n;jfHvcs+X2_VV#EPo#O2yQy5fmM24WvDF8-|c$I~pOzjjb3_C+8u)%G8S#e`5 z(R5dPcm2k_-5ez<*`RxSLwlW&C}H|~1bd-wGNcox*4O%Pf5{5-aJ(Ch7aG|wz`)*5 z8O0ru6?y@z$+sl=YJxJiQa<*<;f{V$#{SHVRT7bapUW%ZO@#SPH(kDoB|=C>MGq81 zVGGoB%<0ez<>tdk7)cn)i+fI3WYL2(67Ne%+e32{h)=2>7Mq-z+ty{)P=QR)kVAnA z+iAv2R07&aC3l&W&>TrrD_U)G$fvk6mNRFiJsoJ1QM(*=(m6ML%x8VY*R61!O>TCF z?RMH59`~`0Z_2Yc=1e6)0eNUPEuqbnL|;-4Sp;&txmDD=(e<^^dQVkUMfGi}x%Lh; z+{{dso6Y1?&0_%zA2!$6C6`-$rMo!Me9&3a@ zS3!!Y?0NdjU-&qfDo$-vU#p+hQFU3}QuozU<~gkn|K5sJ!lPFYUUBtdZrHPu2wRm7~kdA_o+ z{1ecx`re<`EX+~=8WHW_p-KC9>re7&ZgfdJkSA!8W%mUd*_=27`4B;k;xz)(YTGQJ zl?$p%czPb(^2j*)GoQ`&jh2>Y+yWSG5McwAwExrUpxcP8F`B)uGaSt zp2O_NMRiB$D*-!nd5gW+rIIo5@X+SN0hZ)$D#+NpWLlwITeQcz5= z&rgA;!y;RKUA!gez@b2hLwOn{TK24?oRHWW@SiE8zP_s$xC|M?`ON|3Qx(cUG^jfJfkeMemVng;%c&4Z&4Y_!cbE{2w4 z(Y=Y_1ry*LZVEE5h|Fsyvi-Q|D_9v&Iuitz)2@S2ngwM1k#*7Uh4jr8e?DB&{fiq5AGs+g$8zL^SQLD`3|Abb{hAhz;g2U=2$s#B z5#T8j7Y-C=+q}9kuY6^eaLqIn`5ldlj*CmD`ptROm5GL`19RpOL8%>`c{YY02WXUJ z6p7p#XOhV6;VcpaUi77dzf+Xm!|4;0p&z-jOR_&e|DHUdCOGk2YmX$66$UrucFT{^V z2`ZS_%>RiN6kqaM9LBWhAo%|zr%mdq(b1nu`3c-R<$^YH@}f}7t`!IBg?lvWt7Jnj zC7;f$aYhQA&F1>`^kPQ*_M(f5x`XHJDL`Lr7^k%~hAT}!Es zErurVELb==R1g#&8F^wF7-_S_SD$XIs^l$?$xRnhBCeJUOcQ-(gP&BL)n_fAm3q+_ z8L~*CAK$eSb$GP7z_sAzb~jZG2A|SKJaxDj2KoHtUA*yArX}yPqOvf)SOwGa*xXbh z1)t=`4`7L28|9@O3s>sYY7yN9l{wH8F~KUlUH?d#$5q%DC4*t-CcmRh5#B@w!uHhy z2S=u#VBnBfwJBm>(1bqb{H59-y@8_LD zM=Uj2nQTAv$;&MyLa_U{phO@%M|M!eL@i{Hq84@RqFl?moUJ+~07hY%g10T}84V1g z5d(z(x_N@T*Sv~n=V2^l zeK%6!;jGh2KX~|e4?Trmy}#vdmHVi|!9gZmY5|8E6+my{SU}8zY2Y%|<&Euc>du}5 zIo&B6!Ei@$dj#{8JejM6e5Z?&C&x#{%$%C}6HFiVbL7TLp%;z|m+O*)bNhv5qH5dv z`^<4OcFYWqw^}L=#h7>F{@CuqTk>&+ec00LS9g*Af;M|?Tkk{gf>O)ywC*^h;1&Tm zyUbFQvhh=22x49aXEgS-`lypCITvB?wPqBG|r zSiH|szrz>e7q+eaKqLho#I2U12-pT5i3IymQ4mTVVE+2OH;_dSwS-OW>-7BhJ{vk` z;_@5bPE;#kvmv~eBXVqJ9;>*ROMqe(atjsIG=Uu+a0URu!R8&GQKt=9q~G=|f{OFk z3J46v#SpO?`Q0IYOk*ig;lcAuzlUbU?#)?NT~jC|0mbtw0Fd^2!V;6vjS03BFEZm< zS&_BTo_MsI7CqJyc35dM_&8=@64AD;G;K#o8h!0G#;@NyvvTp|Uz6#r@2X>oWcMJA zFcdLMGp@EuD2a?a;uaD_gwV6Js86cXj6C9za#aY;v3!vCY6LQf>(f(q`-j$kzlWxx zkWwnGjitR`dr}D;_I+MikEigwS%7-;*q2Z#ykVAaP&;FJ7?!wg5Bpa41*_`iI2h)`3 z4P!^@`AoZ=Qx_IgR$Bm_=?X3%yr6Tn_CV9oRnh%aJxOhpes9dNk^1X$!;d3NBI0!G z=3Dmz4POc$e18c?*yH$rCTWGgS{_!1f-}&^Y7c)SF~V=L;bGdeXsOuRxXHh%QF*?Q z>~kI20)DJM?4e>4Tsc4XO0IO!K~O$Fo;4kQh|VIZ$Znd4a$m7y4zo=@Dsh5e0i|@; z9zW=A`^g`%ZpcSB&Q|3wm{WzUywO3)yr^~QN6dVAFY3emGChzdlG68GnKZ1u^Lnam zZO;z3#|>h3jE*3zRiO4w3uoozDEpnBGU3~QR=DFXJCK}{lGEz`smYv=`mSVbD0voQ zJa*VWD%TOZ{eKG=>*r_DZ(L-PO9+{g-YIXaS9;runvF2}j|FDOIB^B)r(=~&E!&-& z_W0bJ(Bc`Fyu%iZ_Vg5q?3BxM=?4|X217+unsCO#{LBy@A(LRUi4j1tF2~8tXB8KB zBMH5tn_xdK6QjXY`GWe3DZ7e7Y~4&;*!+9z;=jO;ygGDBd=F42fcm^|8PnWs|1XBJ zJ5`dW4H8SY=IQO+b)&|op2kn(R?EJZ%ydTB8fPEDh?2!&Y&1v~Pl%E8YpN5dEfx8S zSbqY9aNhf#Kmh$I?_~iyCo7Y1lz2*#ZL9{2@=n{o-i!5=jh_tmW&LdLP95!;MPliu zoZPf{0a@>D1W!5abHV3oDc?H|X#uC5f#+2AaE5ET!4(+5B$1b|tQ0WgdCrUgV>EUQ zcahzL?L@bPj7)c9DTG$752*kWZlCoC;kh`I5d0c`oiET-@{V zGK(_y`5?0n1CBVKMMmK^fiP^c!7tWZEy@CppP3^hRDzZ@OnjL|KieEQ| z{!Ti~a7NDS@g~hL&WC=BkDnV0A5{bI&Q%VI+8uno#X#eu(&MMq{&(kVi}(ED+Yr05 zF6RFsZB#jdM+&}5Ho(cz$wk%^q(dm#IdFesr9##e91=LLR>v{t`pTAx7hzxL-1@5( z!WVZ;KHGDERA`}~J;3#VXLoFQ+2L_|9SBbv+OqY9ecXP5L<*AJzYl+5a_chGJ4yWG z!+~Ri>o1RPISGlXbeE#uK$v#jjptYfV%jw<5TJt~!*SUx$*NT(sYck~n$zd>x}esm zHYvg0gOyfOs5X(vIKSz&XoIQP!*$tyg&fwz2D8DqOo2trxz?)moo+5;(#9Y*xJJ7u zrxRCmWH!UGS%`J5Wl2u$!gZ&Mt}KOgj3Jl98$$i~a7`f_UVeS!m#S8;*Fq7?uSULK zaF3{diih&;#hZFSw)fz{y$Bn;t5ipMBf_+IiGVK{#4{wPQjzFkn<>d(AZpW;zAG@~$lT-etWl#%SYMf^-04&bxdp6U~8E#TT#sx=e9E1|R+z(W?(cOqahGtbWJ6nwx(-!4k7r z7Dp6?{w8g*%>CNt}frsKo|2C5AS%Hg9lyAKh(p57!#yfrsDMX4BisSCStey5;P%ly;2p_ZsN;-K%O5L@#0oLnsUt z$-VG)(AF6baHuJTMpF6Qa0pIWaGEwRmCq3-1e&1KesGdMcFbbOH$DdYL89ImGlcBC z-n5R`Le=)l#tuNTu$EJd5vtm>mL43M#n3ZWPhLahXIWg|uh+s9?`YyarWoF&z#&IY zy~r_$LV~LwOgZViO2nXl{GOHldlPs}DAE{!x{784?2PD%#QD9WHPf?Olhy1j^tclH z$7;~6TD)(jzE*l%0nQWFJJ|x>7cl|kKdJbhMv4y;a^oG`U@6&vM3ODw-%0PG%2L%u z5_kj1GEfz6%ex#d8U&BDEuy0s5=b+$5p)~tOcDnPd1dR9v*h!`v$jVubtxz zZtn1@56jHw`>P5<>n{K=_@=efmRJ9yEHA`=U&)W-U-m{k%l;>p%!psL7yA^ARzVlb zuJUaXu{Mu7Kao+Qng$PFv_6ga1YtK4{ z4OlYQif8u1$1OmFV2>B!2+8Y}to1l-WSoHzAb^7F&t|>i67X4tv z;KnzjQ#6zXmL|&=Y&|)Hn$hr`n`%XRVk3VO8ArALCM&h+hnF3y5hiHMW6GDAc*H3wG&HmHlh04^7a4;jiq$nBCIo#U+hkNb1)D)%Le+DWoLdm^Y>;E)zQuR*k z#q=9sFdU@c0M=eiwd?9uH-2t?-nb50KwSaNGribbf$L1ms*1ECtLA6XpXY=$q+bmo zo7z7RAdN!o3Ku{niQkHS>95lrTCVN25Qf60Ls3pB4Pgw+=}q;l7ae-bRrn0~qrF4A7A;Yg6?x_ODtc|Vm@04xrht64?S}05qzi(W) zKbSxC{Urs&46K)RB-+oRrcOYCvzg3x;G;vm;0*kSv+;dpH{kL}b=2lV*byQ_c!S8u z6Y_Ta@fm&wzqn#=s!;yXMvmnD_+t#irXm)DP*${2eC90BstcjWbq?gdW=P?P*_TpT zLG(^#wJkcP0;NLV_1br1aP!G@^u=Iiv?f!o6EZsbXw%+7xOi=4QL9jo3BtF|fktW& z9D;rvZuTI#Ak{3$6KINd`gX9%A+J!Jg~6jrx3dzJ0pzuszrn0}^F|NA&HT1gR?ig| zrPv86XAU#J~6lzKVYd z-o^`}8y1THSYli~ENHBlxOD%_{N=M(|4dIv1}yPx_mT%pb~A3^^q#YiT5iOedo=3F z3v%}S!qOmqueq7Om>4PYh+=8wU{DJ0oxk0LNkRuzVS>YfRR73cbBj?V$IJI)Ey)4y z2_GJQe786;$Yc=~GWZ7U%RQ{}=*HMTnj|X3JRVX8&=pgABI$u!BGBGdhg@ z0jL#Zq^6|G&4ZhlwgTr4CaME4O^b>tPfg*ypIkaA)KC1H9V+N1ii_(i%T{c!JOB_T z(0%zij^F^NP2~3_Oz>sJ5eQf?8>y4<{xXzLA8N8;UrzIe27c6n6;_NnhE5#F43F&{ zDrp8TrsnH|@QN1s(W=;3-kju;<3h?6Kdl%SP#6c5b~TyFG6OUfg0kqbCZB($FYjvL zPg|DbU{dFsLyF)L3f&PP;R2WEjAR{q3>n&awuc0Uyw=%8a4vro34(L*QFIa5l4zZj z5`qe%++63POYdV0G+sjTP$!I*j61BXw?@tK>KtSwVeXZ&0{ZPHo zA_XfFt8L{m73dPZKY4dW7QeHC03kt-v?g3In-e|l<04UXjYe?S8T={0ya~H!PdvGN z@+>fW8G7U-omI)4(EBU>63qWQ5|UMyfv=$H1HO9q9;w}58(*Jmkv-=Erj;mL?`MP+ zm6eM*|O_0xfDOuEefF0_2)QM7EoY{8>a?J9m`Qy%kC(QKdr;v??ir&o z=4$((NTtG--kT@}iU2o2FCI?$X=k+vkJt+J)f>vO=7+V-FFR05E}As9ip z1TpL1f0L4wnY6v#9X`49bvEFGLid#KVP>-1&q~_eu;P!faoiA z5PNs%#$YirU|{`w^3TP{3V5I!i;frZ9dF;lB-57&uy1qSFt)$&dBMwn(xwZ&Ozb@1 z8p`4q$&l3;v_dvT>K-rBDl$1sw$MU19@mL9aEJcEn%t?hnS1bSi5;b)P+|c>=JdfZ|wB+S+ZKwTrjZy zRn@Zm;D6qgshYA$!IW9ig5;uN5JsKDzDgOqw>;4e9r{Ht!A@K$=EsHFssBXDO@27? zQ7GWO3s~+UJLM6L=e`-VkbD+dS(nHqs8-zWMC8WWqF5yR{CbQ-80BB%~t%Xg{iHE%ymNvE+5;ygS}(0f7Ro0gErPEXUIoFY{v2nK{Sv(2y+Pk%Fh$@g57iE< z#Z+@lt!&0Sd?Brtwxwf{Bz`}Zl8{imGzqwe>jmDReRf?c*JwSH`ns(kY>XXNW(ZY- z12n5;!FY3{{S=JE7`(K~tZ2Ze#wq4@xInrS<$&|1Rs!%H>2YcK@z zUiw|sG=s!#-u7?|OG|&$eQ%n&@8e_WIU>RBT z=sxbqC|Ns1(}H=%*j@&PyvsMz!-2t;P302%&a)LCU)XA1*T{+^RVeOFPbf8+TxaO4XmYQv%FTpnr~gO7(2@z*b}?8pW97aWY^h^ zcB|cPciJgua4P4lBRNYPsiSv>ov<_Mrf%vUb)#;@?RG0%t=sPQyAhA)DW31`^ZZ`J z6M1c(n+hnRA)Qf*CTNphp%SX0J{t6=`$PYL&-tr;mEYkz{jfhCoDQnsd{7MZv z8}r_rWHXq-LiPviV6oz%;!LrzuoSn;yxd)Gt)8fys;q8S3#-=3Hz}MHle?4ST)=y51L~xZ5z`v{hJFKW_{Vqg znLK2y8C%A?VututI6`mon&z3dMMB;$gXXZgVW!L_b7sCJQ_8CuO17M{9H^w`db2hG zERY0N004Mq9x!bNwkE7|t;cqi&;Bp9%Yd4JtraLLe@R zE_erAgx|zWN|FlkAl(Rue9AuS&;)up2g;l>x^xx>D`8u)04rl}%V3>UBOb#u_+C85 zAJowXEo>k`5m}-}bctJy?pgg5d9{ZI{&0v|Ntx8UQ8=cfjb2O}^v!A3q)Y)O!OUSy z1~Lm%*F0;6xoy@t);MP8wt09Smte6wL(ZIYsZ(*9PU!TUsq^iUUJtHQ*OKen8rt$V zz@2lS^qk(q-Q@9k)_78n5h8;b+`D>)@FCxiFYYV)*297!fGAF+-JkH!mKs4c7>DSqqe(l@4rz>FfuQS^rU^*8+YcYKlY8-Uu^Ez^`$1`)#_`iweGInhK#}8 z;9^{nt8!-kQ9j^jJjVNYi9f(M@K(MV+t7?%h#`$BdYLFDb|*B69%5H3IZI}fn^J#B z^^_xZ$x731I!Gt!i|NO%F!MBXKC|SpK!iO)S=cDJe7_$G6Y;LNQ|t*np>Mle+A1|j zH@5NJBKe{mlp``HSL9#r*!>`zX3Ol6?2at!Jw0X~zaI86_Lz8>a@HJ|OXZ5Wt+_OJ z^Aw!+*>T46^Yfpt%a^LKy71;o-sSzXd(f>aE-Ai!7Cy#OcWJ7$^2FZ7@9=kS*)KnO z1D~dHw6gROzanSNLAi2nL#~f|1j^*r-1NFJgBk8-ffBv z*-YDUF>QI+3x#s!t&0+hf{jV!>bdFQo?O+}EcH!K4$hcD${LWr1 zV`|ToacUEC3PDjHLLe+MMCOoobVsa4`_LV1MN+~JVKLUlRxk=*pUz6{cpN{0r}zWn z;jA-*i5PK<7$)CCt|b61K+?azQ%zB#Hc;!7n@Z4JdRsZJY%f7NOmCrY(hLJ?7?Wof zFhwS1uhtdz2J2xbx#NwOD{?!yjC;>N%jfyi{5ntagF+;rZfw`t5yE0&SMZ9<`=Yo_ z{4Cunc_mrumqf{zy3$iAB{O;JICzZ6WqGlj%HNbT6R$i{1?o+8hx$m3sS}#fZfI%k zvc7bkxEl41`a>OA33$ez6i*$1Awn&66E`GYd<0;Kl3<9Zd5$>?mVu?rXI5ef>#*|} z<4-v|*wrMns6(Ferf<5CH&1 zkbwg@1NIPrB#c4{?uPeZ2o5=c^Rpv7qo06Nb!^9V?zoHJv2Vv4aKr9q_o18ixc8ga zdxW>tbG~?Q36FU)@LYM|)ZSuE#gL(0*-%+Kaj$ z>#plW-L{4^<@|s7`lEWcetC1yoNwJ@e$2uXYvUhNxh(&$OI@vKp_IDkC1P6M*t**);k9Zn^Z1*` zKR)g8Gzr|9zCT>DUn#8}gdQv);?yS)^LWd9W1j4T(byfFZAc(7{JJDI zDrZy;d+c7srEMGWkPlQKI6-ABH(;ZBDG*I(67J2g z3#;+4&4Za?&F#nd6u80=c{Ftpml1N|56F|vdz|=9EFo$i_6Hvbk|0P}e2O1JBXd90;=Efx452+b%(?^fqQiELc5&XPWZolQTJ(TGTawi!cMd@G zW?jYj&xpOr;vsNi$jhSVJ5MKkRDz^Po+#M`E?vjgv5M-L)C>`+-#!1=s{%Vp<50dl zU!f{jel>i4+BlZY2*)mlJ6H{Kp)^{xCFU-$muM06vZ3lu=0XlCgvQ0&B&kYF7)<{G zgsp*FZt}BWG_(vMWciBIvXg4GgMSLrv)$~=v3pQFqXXV1;&}+?k&j1IZ2Zfw$0BBB zW%}-0QT{G$QbQ2KuIozfi!zN-;?LL&arj_-sEnWAbT+$!lmaI@5fyGEObmU#Ow$ ziUXcJ?$&OTKcU+?7Qyy)+}Hd|JRy$3duEz(;S{cL!aTfDWIEnL@Q4f+k}v4e=z|&Y zIR|ojl8ksd4`U|{20blExI7;jk+!4#o|dGSaaY&i6!L7GqyOhaV`8y{z#*?AGQmnY zpYwvZ)n>Pg$z!FIU3~82b;S-MxdCRg{}3hiYTW%GNGERSujAKdkTfqR;?!c0j}+o#5t<ErR%a${yK1iKE;?+!1&IIo z7>E}hIkpq|@xt^Li?LtDAHyk|mDtFY!Lmr?c3myR%V8^qp))AWVu}ZamXFr3UhArv zwC<45d5z`4@-bc9e>F%K!|Nh{9r}2Uh61jO%AuY(EiuB=m=z1&rApM2(|A zmT+@23j=0MT60&-gh9wa=eqW>GMqDeQaHv(Gsl-->@DNV-O&@#z&kk@Cn|e^mE?t; z5UinMkYHJd2E!c3=`OJ}JE{FcF36|Yk!1CL4_4G1y3=2d!QQoKwXN%=M9fh#UNx~d z?r6*$jTa)$l@QyBOj?h#zs1qxhS<$^t!0)WP1`gK9&FARUBqad`0V>+lzitG%~umz zAi)wAK+Nc0Iw)@W3!OS88K*XtjgufXiUblax#FjoZ5vJi?gZE+g{z?Ni;kSqOJ?RbsEoO_DLrw@eCGE5ZPj1!sD65!Yek!;p(t$zqKIAh>BZeJm^M^}I7oQip~BEIumnw< zZKoCfG5avX2fr^!F9i^a@7J-Arrib^!w#)ZuOEuPMG^2)q^8?s9mtPRwi1|5nRi=n z7oC3pdivt^`)Lg)_PYzqq-PG>9sdr-omT15{~e7G5%K|TyN`Mn=HfPYe8=}jqzM92AIu`rK1@2BP2dT6H#l2*Lt2>eekVFth*P?9h{g3OP zk$CLnyv#KJT#g)38fgd& zW?0lBwus(CYTf13i2+-^IfZ%GHa+5J>r=kz3jY)?ZyJIxObWw?&afX^CD~-sz+;Do z&gOx5jIG+PtBc{Xir^WN%4I9V7W1iG&CcJNQ?g~d&)$o>)ZrwR1otjfiqJxt$VYb` z-dm`M0786LO!NkXV!1>6Zz!6xD|sp)mGKi2NgBQ~bS+|lMSGw>Kks9%FT<8!j_f+O z$}xNuqU)7Q8@(MgLKc&4wT;H${iy+LPGyvIrZ-^l^TV+->QjR4hh{mDWlo@$pyU0U z2`gZMZ-~WK4q=%D24XSH@=UKB00==!Yiu?6#^m$bwiySRH%z#ghYW<<#@u&1m8>(EMRpgjdxw?SSybu_NoDRF}p0gz(G07My$iV>wK)4>DZ%f0{y zU-urPu#Z#PcY0j=NN6AzUiPfb_yLD2TW1qfRuz0{pML;ZvkGwiUP0_me3TK zS`z8bNrsfZ^-+|N#^Ix|c?jR>h3<^QJoEu=0F$=U@MnO9#tjq>8PGDi5S?OTGk{pZ zb`&d2xd1K6+f)R-!HRL1*MDxXrBFQ^Q_+CpU2pqldN8mqeu#|qDgksJbn z*0=jLy0r`PmVUGE(f_`%eMGa z{ieZ9D3}|sR{YdUiC8;N#7)jZcCp$C+3CXNj_AT8$9+j+{H&Y-6OPMA0TPFs%xVEf z3Z{k2TY)czVvr(W2!qTHd9|-4;1qVCO z3;n^k;4U8Nd_89R+o#dvhBm=AQ>Wj8z=FR&f>SrMbzfKPl2r-h(b~+Hu0hw!AM5Ex zRByw$```sLnvCKr#2247sM%rM^ek;L#JhzZLf+8fET#Da)~rFPrwSAqmJc*R} zx2X0Dq(@H%OIp&*qP2ldULw0_sXb&lM*f9ivJf&|}OR%sHH^S0z z;e|c7U2vm_Z=AT|3BT6SZaEJxuRSohzn0p4TQlJX*kNzd6_l5vC%#Br(u8oVw)2sh z{@OV0Q^ofj=%IVEY1>QpP*Mh`#h*Cd0-cqw#!VAT=O}F+Lj_C{u6e}5^oi03yo9~} z6oZU$i)*2y~q4kBEH7{O0r?Ev(x^NRLsQD-*Gl)ZmHh^ zoYo{vsb%>Gf&m0>T7r+PR%4bZXfP<&d=us8j5Pw4blvIY4sSB%Mh!IdG`L>0l5pcB$xET&&+&teKTs6ct1DKK~>jXQZM)vL(gd;?9#E;Xd%f}xde0NTiy3I6(znp#jmjKLD%1+$EX7A}V< zfT3k8zB{q&#foAgq;9D0TxZia5w)zhfH@J&u2NpH+`$|8f2_I2G}H3|{UVGQTeI5N zmO$^UOUrP&KHO}|6W~9@AvuZmt*Xr?lny=#@usxcq}}1!xE4isU`2_l?u-?DRE%>} zuT@InmdzTs08ijEsSh=v@D*1qoTP7GVA;wmlQ(>ScBMZaMahzLN5><4b60>hPPx69 z7d%^Ry8*>lO0V#s<{(K%5H(^Vxj%2TdYG)=^}oM=_4br_x>8_}wpSXd3Y{?C|MSK1 z4vR5kC-spANCHH}?J|rTFtUvs5w4B6P#+YL{uf>rN<037NVD4`xtIcHTtYT%*eG@m ziwh_lTRxCVHhLtdV2aU34A)s7Tme~HoS?9gTrk!lpncPeZ=o(SQRJYk0Oi+Xgg{Q) z$}CK~2IMuU0R!9|ZvJM_qHAig_XAi~xy0ggrmD(-AjhP6CS|7Y!bK5UKzjCarO3rE zPX%F8o~loY1}r{6VV!bWQyYS2ofF>7MI5Q$7k*T=y`dGu8VOlx#Rk(87$(z`2m?7Q z9E+k{<>}1O1u~o&ln%uWB^WIGG}^!OFh}8m@N(yz9oDzBy3E;JM$W}5YWe$NGg?^MTiek!Z7oSJuApE;yYF7Cw}7;WrK38cR$*`{1y78$z}Lk0#13W z_eSTYC~74DH52^vBhe~6uijTvbOS;Nw{~CH-^YUs3ltNWXU~cHw#D|GwiGj=WHNW<6&T(yap&~;&c9@tLlWE$VFMGeC+?e%5&GnN{M1yFIkB<_9AJN!AS z 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 literal 0 HcmV?d00001 diff --git a/src/lib/assets/fonts/body/Semibold-600.woff2 b/src/lib/assets/fonts/body/Semibold-600.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3ffe9456adb890922d92d8f0918098c46ecda2ad GIT binary patch literal 91440 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%0D)#}1>( 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 literal 0 HcmV?d00001 diff --git a/src/lib/assets/fonts/body/SemiboldItalic-600.woff2 b/src/lib/assets/fonts/body/SemiboldItalic-600.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7474a2aaf9fe4bed8059333e6fd79d6a6e69b5cf GIT binary patch literal 90960 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�zgROUe|bTAR3< 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 D&#O^o literal 0 HcmV?d00001 diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index f301755..2f7cf53 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -59,8 +59,9 @@ export const brandColors = { } as const; export const fonts = { - sans: 'Work Sans Variable', - hero: 'Syncopate', + body: 'PP Neue Montreal', + header: 'Redaction 35', + art: 'Redaction 50', } as const; export type SizeName = string; diff --git a/vite.config.ts b/vite.config.ts index 8bf574b..619cbc8 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -30,23 +30,44 @@ export default defineConfig((env) => { }), Unfonts({ inlineFontFace: true, - fontsource: { + custom: { + preload: false, + display: 'swap', families: [ { - name: 'Syncopate', - weights: [700], + name: 'PP Neue Montreal', + local: 'PP Neue Montreal', + src: './src/lib/assets/fonts/body/*.woff2', fallback: { category: 'sans-serif', }, + transform(font) { + const match = /^([A-Za-z]+)-(\d+)$/.exec(font.basename); + if (!match) return null; + + const [, subfamily, weight] = match; + if (subfamily === undefined || weight === undefined) return null; + + return { + ...font, + weight: Number(weight), + style: subfamily.endsWith('Italic') ? 'italic' : 'normal', + }; + }, + }, + ], + }, + fontsource: { + families: [ + { + name: 'Redaction 35', + weights: [400, 700], + styles: ['normal'], }, { - name: 'Work Sans', - variable: { - wght: true, - }, - fallback: { - category: 'sans-serif', - }, + name: 'Redaction 50', + weights: [400, 700], + styles: ['normal'], }, ], }, From 26438881f8409acb7efffced7f3d0e119355cfcd Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Thu, 23 Jul 2026 16:50:03 -0700 Subject: [PATCH 050/141] fix(commitlint): resolve local branch range Use the remote's advertised default branch and reject stale tracking refs. Report process failures explicitly and lint the root commit when no base exists. --- tools/lint-commit-msg.ts | 111 ++++++++++++++++++++++++++++----------- 1 file changed, 81 insertions(+), 30 deletions(-) diff --git a/tools/lint-commit-msg.ts b/tools/lint-commit-msg.ts index 970848e..ddf7240 100644 --- a/tools/lint-commit-msg.ts +++ b/tools/lint-commit-msg.ts @@ -17,27 +17,61 @@ const refExists = (ref: string) => { } }; -function resolveFrom(): string { +const remoteExists = (remote: string) => git(['remote']).split('\n').includes(remote); + +function resolveRemoteDefault(remote: string): string { + const output = git(['ls-remote', '--symref', remote, 'HEAD']); + const branchMatch = /^ref: refs\/heads\/(.+)\tHEAD$/m.exec(output); + const oidMatch = /^([0-9a-f]+)\tHEAD$/m.exec(output); + if (branchMatch?.[1] === undefined || oidMatch?.[1] === undefined) + throw new Error(`could not determine the default branch for remote '${remote}'`); + + const ref = `refs/remotes/${remote}/${branchMatch[1]}`; + if (!refExists(ref)) + throw new Error( + `remote default branch '${remote}/${branchMatch[1]}' is not fetched; run 'git fetch ${remote}'`, + ); + if (git(['rev-parse', ref]) !== oidMatch[1]) + throw new Error( + `remote default branch '${remote}/${branchMatch[1]}' is stale; run 'git fetch ${remote}'`, + ); + return ref; +} + +function mergeBase(base: string): string { + try { + return git(['merge-base', base, 'HEAD']); + } catch (error) { + throw new Error(`could not find a common ancestor between '${base}' and HEAD`, { + cause: error, + }); + } +} + +interface CommitRange { + from: string; + includeFrom: boolean; +} + +function resolveRange(): CommitRange { const fromEnv = process.env['COMMITLINT_FROM']; - if (fromEnv !== undefined && fromEnv !== '') return fromEnv; - - const candidates = [process.env['COMMITLINT_BASE'], 'origin/HEAD', 'main']; - const base = candidates.find( - (ref): ref is string => ref !== undefined && ref !== '' && refExists(ref), - ); - - if (base !== undefined) { - try { - return git(['merge-base', base, 'HEAD']); - } catch { - // no common ancestor — fall through to repo root - } + if (fromEnv !== undefined && fromEnv !== '') return { from: fromEnv, includeFrom: false }; + + const baseEnv = process.env['COMMITLINT_BASE']; + if (baseEnv !== undefined && baseEnv !== '') { + if (!refExists(baseEnv)) throw new Error(`base ref '${baseEnv}' does not exist`); + return { from: mergeBase(baseEnv), includeFrom: false }; } - // Fall back to the initial commit so commitlint still has a concrete starting ref. + if (remoteExists('origin')) + return { from: mergeBase(resolveRemoteDefault('origin')), includeFrom: false }; + + const localBase = ['main', 'master'].find(refExists); + if (localBase !== undefined) return { from: mergeBase(localBase), includeFrom: false }; + const [root] = git(['rev-list', '--max-parents=0', 'HEAD']).split('\n'); if (root === undefined || root === '') throw new Error('no root commit found'); - return root; + return { from: root, includeFrom: true }; } const cliPkgPath = fileURLToPath(import.meta.resolve('@commitlint/cli/package.json')); @@ -47,19 +81,36 @@ if (binRel === undefined || binRel === '') throw new Error('commitlint bin not found in its package.json'); const cliPath = join(dirname(cliPkgPath), binRel); -const from = resolveFrom(); -const extraArgs = process.argv.slice(2); - const slot = Number(process.env['GIT_CONFIG_COUNT'] ?? 0); const slotKey = String(slot); -const { status } = spawnSync(process.execPath, [cliPath, '--from', from, ...extraArgs], { - stdio: 'inherit', - env: { - ...process.env, - GIT_CONFIG_COUNT: String(slot + 1), - [`GIT_CONFIG_KEY_${slotKey}`]: 'log.showSignature', - [`GIT_CONFIG_VALUE_${slotKey}`]: 'false', - }, -}); - -process.exit(status ?? 1); +const env = { + ...process.env, + GIT_CONFIG_COUNT: String(slot + 1), + [`GIT_CONFIG_KEY_${slotKey}`]: 'log.showSignature', + [`GIT_CONFIG_VALUE_${slotKey}`]: 'false', +}; + +function lint(args: string[], input?: string): number { + const { error, signal, status } = spawnSync(process.execPath, [cliPath, ...args], { + stdio: input === undefined ? 'inherit' : ['pipe', 'inherit', 'inherit'], + env, + input, + }); + if (error !== undefined) throw error; + if (signal !== null) throw new Error(`commitlint terminated by signal ${signal}`); + if (status === null) throw new Error('commitlint exited without a status'); + return status; +} + +const range = resolveRange(); +const extraArgs = process.argv.slice(2); +let status = 0; + +if (range.includeFrom) { + const message = git(['show', '--no-show-signature', '-s', '--format=%B', range.from]); + status = lint(extraArgs, `${message}\n`); +} + +const rangeStatus = lint(['--from', range.from, ...extraArgs]); +if (status === 0) status = rangeStatus; +process.exit(status); From c6061978a3c8ce0747ddd78b97a99fcfcafbefe1 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 20 Jul 2026 20:48:25 -0700 Subject: [PATCH 051/141] feat: add Puddle water simulation --- src/lib/Puddle/Puddle.stories.svelte | 164 +++++++++++++ src/lib/Puddle/Puddle.svelte | 312 +++++++++++++++++++++++ src/lib/Puddle/Puddle.svelte.test.ts | 138 +++++++++++ src/lib/Puddle/puddleRenderer.ts | 92 +++++++ src/lib/Puddle/sim/brands.ts | 30 +++ src/lib/Puddle/sim/emitters.ts | 84 +++++++ src/lib/Puddle/sim/engine.ts | 189 ++++++++++++++ src/lib/Puddle/sim/executor.ts | 79 ++++++ src/lib/Puddle/sim/field.ts | 19 ++ src/lib/Puddle/sim/governor.ts | 30 +++ src/lib/Puddle/sim/gravity.ts | 56 +++++ src/lib/Puddle/sim/index.ts | 232 ++++++++++++++++++ src/lib/Puddle/sim/integrators.ts | 29 +++ src/lib/Puddle/sim/noise.ts | 67 +++++ src/lib/Puddle/sim/params.ts | 58 +++++ src/lib/Puddle/sim/passes.ts | 345 ++++++++++++++++++++++++++ src/lib/Puddle/sim/resources.ts | 129 ++++++++++ src/lib/Puddle/sim/rng.ts | 31 +++ src/lib/Puddle/sim/terrain.ts | 36 +++ src/lib/Puddle/sim/types.ts | 122 +++++++++ src/lib/Puddle/sim/waterSim.test.ts | 353 +++++++++++++++++++++++++++ src/lib/Puddle/waterSim.ts | 2 + src/lib/index.ts | 1 + 23 files changed, 2598 insertions(+) create mode 100644 src/lib/Puddle/Puddle.stories.svelte create mode 100644 src/lib/Puddle/Puddle.svelte create mode 100644 src/lib/Puddle/Puddle.svelte.test.ts create mode 100644 src/lib/Puddle/puddleRenderer.ts create mode 100644 src/lib/Puddle/sim/brands.ts create mode 100644 src/lib/Puddle/sim/emitters.ts create mode 100644 src/lib/Puddle/sim/engine.ts create mode 100644 src/lib/Puddle/sim/executor.ts create mode 100644 src/lib/Puddle/sim/field.ts create mode 100644 src/lib/Puddle/sim/governor.ts create mode 100644 src/lib/Puddle/sim/gravity.ts create mode 100644 src/lib/Puddle/sim/index.ts create mode 100644 src/lib/Puddle/sim/integrators.ts create mode 100644 src/lib/Puddle/sim/noise.ts create mode 100644 src/lib/Puddle/sim/params.ts create mode 100644 src/lib/Puddle/sim/passes.ts create mode 100644 src/lib/Puddle/sim/resources.ts create mode 100644 src/lib/Puddle/sim/rng.ts create mode 100644 src/lib/Puddle/sim/terrain.ts create mode 100644 src/lib/Puddle/sim/types.ts create mode 100644 src/lib/Puddle/sim/waterSim.test.ts create mode 100644 src/lib/Puddle/waterSim.ts diff --git a/src/lib/Puddle/Puddle.stories.svelte b/src/lib/Puddle/Puddle.stories.svelte new file mode 100644 index 0000000..86270d7 --- /dev/null +++ b/src/lib/Puddle/Puddle.stories.svelte @@ -0,0 +1,164 @@ + + +{#snippet template(args: Args)} +

+ +
+{/snippet} + + { + const canvas = canvasElement.querySelector('canvas'); + await expect(canvas).not.toBeNull(); + if (!canvas) return; + let frac = 0; + for (let i = 0; i < 60; i++) { + frac = paintedFraction(canvas); + if (frac > 0) break; + await nextFrame(); + } + // A puddle covers part of the box but not all of it. + await expect(frac).toBeGreaterThan(0.1); + await expect(frac).toBeLessThan(0.95); + }} +/> + + +{#snippet hero(args: Args)} +
+ + SUMMER SUMMIT
GAME JAM 2026
+
+
+{/snippet} + + + + + + + + + + + diff --git a/src/lib/Puddle/Puddle.svelte b/src/lib/Puddle/Puddle.svelte new file mode 100644 index 0000000..a159cf8 --- /dev/null +++ b/src/lib/Puddle/Puddle.svelte @@ -0,0 +1,312 @@ + + + + + +
+ + + {@render children?.()} +
+ + diff --git a/src/lib/Puddle/Puddle.svelte.test.ts b/src/lib/Puddle/Puddle.svelte.test.ts new file mode 100644 index 0000000..499178e --- /dev/null +++ b/src/lib/Puddle/Puddle.svelte.test.ts @@ -0,0 +1,138 @@ +import { expect, test } from 'vitest'; +import { render } from 'vitest-browser-svelte'; + +import Puddle from './Puddle.svelte'; + +const nextFrame = () => + new Promise((resolve) => { + requestAnimationFrame(() => { + requestAnimationFrame(() => { + resolve(); + }); + }); + }); + +function ctxOf(canvas: HTMLCanvasElement): CanvasRenderingContext2D { + const ctx = canvas.getContext('2d', { willReadFrequently: true }); + if (!ctx) throw new Error('no 2d context'); + return ctx; +} + +function rgbaAt(canvas: HTMLCanvasElement, fx: number, fy: number): Uint8ClampedArray { + const x = Math.floor(canvas.width * fx); + const y = Math.floor(canvas.height * fy); + return ctxOf(canvas).getImageData(x, y, 1, 1).data; +} + +function alphaAt(canvas: HTMLCanvasElement, fx: number, fy: number): number { + return rgbaAt(canvas, fx, fy)[3] ?? 0; +} + +function paintedFraction(canvas: HTMLCanvasElement): number { + const { data } = ctxOf(canvas).getImageData(0, 0, canvas.width, canvas.height); + let n = 0; + for (let i = 3; i < data.length; i += 4) if ((data[i] ?? 0) > 0) n++; + return n / (canvas.width * canvas.height); +} + +function paintedHalves(canvas: HTMLCanvasElement): { left: number; right: number } { + const { data } = ctxOf(canvas).getImageData(0, 0, canvas.width, canvas.height); + let left = 0; + let right = 0; + for (let y = 0; y < canvas.height; y++) { + for (let x = 0; x < canvas.width; x++) { + if ((data[(y * canvas.width + x) * 4 + 3] ?? 0) > 0) { + if (x < canvas.width / 2) left++; + else right++; + } + } + } + return { left, right }; +} + +test('renders a thresholded puddle silhouette', async () => { + await render(Puddle, { + props: { animated: false, color: '#141414', style: 'width:760px;height:420px;' }, + }); + const canvas = document.querySelector('canvas'); + expect(canvas).not.toBeNull(); + if (!canvas) return; + + let frac = 0; + for (let i = 0; i < 120; i++) { + if (canvas.width > 0) { + frac = paintedFraction(canvas); + if (frac > 0) break; + } + await nextFrame(); + } + + // A puddle covers a chunk of the box but leaves green around it. + expect(frac).toBeGreaterThan(0.1); + expect(frac).toBeLessThan(0.9); + // Opaque in the middle, transparent in the corners => a rounded blob, not a filled rectangle. + expect(alphaAt(canvas, 0.5, 0.5)).toBeGreaterThan(0); + expect(alphaAt(canvas, 0.02, 0.03)).toBe(0); + expect(alphaAt(canvas, 0.98, 0.97)).toBe(0); +}); + +test('accepts a culori Color object for `color`', async () => { + await render(Puddle, { + props: { + animated: false, + color: { mode: 'rgb', r: 1, g: 0, b: 0 }, + style: 'width:760px;height:420px;', + }, + }); + const canvas = document.querySelector('canvas'); + expect(canvas).not.toBeNull(); + if (!canvas) return; + + for (let i = 0; i < 120; i++) { + if (canvas.width > 0 && alphaAt(canvas, 0.5, 0.5) > 0) break; + await nextFrame(); + } + + // The object's red, not the near-black fallback a dropped color would give. + const px = rgbaAt(canvas, 0.5, 0.5); + expect([px[0], px[1], px[2], (px[3] ?? 0) > 0]).toEqual([255, 0, 0, true]); +}); + +test('followCursor gently leans the puddle toward the pointer', async () => { + await render(Puddle, { + props: { animated: true, followCursor: true, style: 'width:760px;height:420px;' }, + }); + const canvas = document.querySelector('canvas'); + expect(canvas).not.toBeNull(); + if (!canvas) return; + + let before = { left: 0, right: 0 }; + for (let i = 0; i < 120; i++) { + if (canvas.width > 0) { + before = paintedHalves(canvas); + if (before.left + before.right > 0) break; + } + await nextFrame(); + } + const total = before.left + before.right; + expect(total).toBeGreaterThan(0); + + // Hold the cursor well to the right of the puddle and let the loop run. + const rect = canvas.getBoundingClientRect(); + window.dispatchEvent( + new PointerEvent('pointermove', { + clientX: Math.min(window.innerWidth - 2, rect.right + 300), + clientY: rect.top + rect.height / 2, + }), + ); + // Poll for the migration instead of a fixed wait: under full-suite load RAF + // starves and the lean accumulates slower. 2% of the painted area is ~10 grid + // cells of systematic shift — far beyond raindrop jitter (~1 cell of wobble). + const target = before.right - before.left + total * 0.02; + let after = before; + for (let i = 0; i < 30 && after.right - after.left <= target; i++) { + await new Promise((r) => void setTimeout(r, 500)); + after = paintedHalves(canvas); + } + expect(after.right - after.left).toBeGreaterThan(target); +}); diff --git a/src/lib/Puddle/puddleRenderer.ts b/src/lib/Puddle/puddleRenderer.ts new file mode 100644 index 0000000..093719f --- /dev/null +++ b/src/lib/Puddle/puddleRenderer.ts @@ -0,0 +1,92 @@ +// Rasterizes a height field into the blocky "puddle": threshold the depth into a +// binary mask at grid resolution, then nearest-neighbor upscale it to the +// display canvas. Canvas 2D with `imageSmoothingEnabled = false` gives the hard, +// axis-aligned block edges seen on the landing page — no WebGL needed. +// +// The renderer is a per-instance object: it owns one grid-resolution scratch +// canvas and reuses its ImageData across frames, reallocating only when the grid +// dimensions change. That avoids the cross-instance thrash and per-frame +// allocation of a shared global buffer. + +import { type Color, rgb } from 'culori'; + +export interface PuddleRenderParams { + nx: number; + ny: number; + height: Float32Array; + /** CSS pixel size of the box the puddle fills. */ + cssW: number; + cssH: number; + dpr: number; + /** Depth above which a cell is painted. */ + threshold: number; + /** Puddle fill color; any CSS color string or culori Color. */ + color: string | Color; +} + +export interface PuddleRenderer { + /** Paint the thresholded, nearest-upscaled puddle into `target`. Returns false if unavailable. */ + render: (target: HTMLCanvasElement, params: PuddleRenderParams) => boolean; +} + +export function createPuddleRenderer(): PuddleRenderer { + let scratch: OffscreenCanvas | null = null; + let scratchCtx: OffscreenCanvasRenderingContext2D | null = null; + let img: ImageData | null = null; + + const ensure = (nx: number, ny: number): boolean => { + if (!scratch) { + scratch = new OffscreenCanvas(nx, ny); + scratchCtx = scratch.getContext('2d', { willReadFrequently: true }); + } else if (scratch.width !== nx || scratch.height !== ny) { + scratch.width = nx; + scratch.height = ny; + img = null; // dimensions changed -> reusable buffer no longer fits + } + if (!scratchCtx) return false; + // On the right of `||`, TS has narrowed img to non-null (its width matched). + if (img?.width !== nx || img.height !== ny) img = scratchCtx.createImageData(nx, ny); + return true; + }; + + const render = (target: HTMLCanvasElement, params: PuddleRenderParams): boolean => { + const { nx, ny, height, cssW, cssH, dpr, threshold } = params; + const c = rgb(params.color); + if (!c) return false; + if (!ensure(nx, ny) || !scratch || !scratchCtx || !img) return false; + + const r = Math.round(c.r * 255); + const g = Math.round(c.g * 255); + const b = Math.round(c.b * 255); + const a = Math.round((c.alpha ?? 1) * 255); + + const data = img.data; + for (let k = 0; k < nx * ny; k++) { + const o = k * 4; + if ((height[k] ?? 0) > threshold) { + data[o] = r; + data[o + 1] = g; + data[o + 2] = b; + data[o + 3] = a; // wet: opaque fill + } else { + data[o + 3] = 0; // dry: transparent, so the puddle overlays the page + } + } + scratchCtx.putImageData(img, 0, 0); + + const w = Math.max(1, Math.round(cssW * dpr)); + const h = Math.max(1, Math.round(cssH * dpr)); + if (target.width !== w || target.height !== h) { + target.width = w; + target.height = h; + } + const tctx = target.getContext('2d'); + if (!tctx) return false; + tctx.imageSmoothingEnabled = false; // nearest-neighbor upscale -> crisp blocks + tctx.clearRect(0, 0, w, h); + tctx.drawImage(scratch, 0, 0, nx, ny, 0, 0, w, h); + return true; + }; + + return { render }; +} diff --git a/src/lib/Puddle/sim/brands.ts b/src/lib/Puddle/sim/brands.ts new file mode 100644 index 0000000..63f0ccc --- /dev/null +++ b/src/lib/Puddle/sim/brands.ts @@ -0,0 +1,30 @@ +export type Role = 'height' | 'flux' | 'scale' | 'terrain'; + +declare const roleBrand: unique symbol; +export interface Tex { + readonly [roleBrand]: RoleType; +} + +declare const secondsBrand: unique symbol; +export type Seconds = number & { readonly [secondsBrand]: 'Seconds' }; +export type SubstepSeconds = number & { readonly [secondsBrand]: 'SubstepSeconds' }; + +declare const worldUnitsBrand: unique symbol; +declare const texelCoordinateBrand: unique symbol; +declare const texelDistanceBrand: unique symbol; +declare const domainCoordinateBrand: unique symbol; +export type WorldUnits = number & { readonly [worldUnitsBrand]: 'WorldUnits' }; +export type TexelCoordinate = number & { readonly [texelCoordinateBrand]: 'TexelCoordinate' }; +export type TexelDistance = number & { readonly [texelDistanceBrand]: 'TexelDistance' }; +export type DomainCoordinate = number & { readonly [domainCoordinateBrand]: 'DomainCoordinate' }; + +export const seconds = (value: number): Seconds => value as Seconds; +export const substepSeconds = (value: number): SubstepSeconds => value as SubstepSeconds; +export const worldUnits = (value: number): WorldUnits => value as WorldUnits; +export const texelCoordinate = (value: number): TexelCoordinate => value as TexelCoordinate; +export const texelDistance = (value: number): TexelDistance => value as TexelDistance; +export const domainCoordinate = (value: number): DomainCoordinate => value as DomainCoordinate; + +export function assertNever(value: never, context = 'value'): never { + throw new Error(`Unexpected ${context}: ${JSON.stringify(value)}`); +} diff --git a/src/lib/Puddle/sim/emitters.ts b/src/lib/Puddle/sim/emitters.ts new file mode 100644 index 0000000..25125b8 --- /dev/null +++ b/src/lib/Puddle/sim/emitters.ts @@ -0,0 +1,84 @@ +import { assertNever, texelCoordinate, texelDistance, worldUnits } from './brands'; +import type { Resources } from './resources'; +import type { EmitCtx, Grid, SourceCommand, SourceEmitter } from './types'; + +function transformInPlace( + data: Float32Array, + transform: (value: number, dataIndex: number) => number, +): void { + data.set(data.map(transform)); +} + +function splatInto( + heightData: Float32Array, + grid: Grid, + centerX: number, + centerY: number, + amount: number, + radius: number, +): void { + const radiusSquared = Math.max(radius * radius, 1e-6); + transformInPlace(heightData, (height, dataIndex) => { + const distanceX = (dataIndex % grid.nx) - centerX; + const distanceY = Math.floor(dataIndex / grid.nx) - centerY; + return ( + height + amount * Math.exp(-(distanceX * distanceX + distanceY * distanceY) / radiusSquared) + ); + }); +} + +export function applyCommand(resources: Resources, command: SourceCommand): void { + switch (command.kind) { + case 'splat': + resources.applyToHeight((heightData, grid) => { + splatInto(heightData, grid, command.x, command.y, command.amount, command.radius); + }); + return; + case 'rain': + resources.applyToHeight((heightData) => { + transformInPlace(heightData, (height) => height + command.amount); + }); + return; + case 'fill': { + const terrain = resources.terrain().data; + resources.applyToHeight((heightData) => { + transformInPlace(heightData, (_, dataIndex) => + Math.max(0, command.level - (terrain[dataIndex] ?? 0)), + ); + }); + return; + } + case 'wipe': + resources.applyToHeight((heightData) => { + heightData.fill(0); + }); + return; + default: + assertNever(command, 'source command'); + } +} + +/** + * Rain as periodic raindrop splats. A drop fires each time sim-time crosses an + * `intervalSec` boundary, and the rng advances exactly once per drop — so the + * same seed yields the same sequence regardless of frame rate. + */ +export function rainEmitter(options: { + intervalSec: number; + amount: number; + radius: number; +}): SourceEmitter { + const { intervalSec, amount, radius } = options; + return ({ grid, time, dt, rng }: EmitCtx): readonly SourceCommand[] => { + const previousDropIndex = Math.floor(time / intervalSec); + const currentDropIndex = Math.floor((time + dt) / intervalSec); + const dropCount = Math.max(0, currentDropIndex - previousDropIndex); + return Array.from({ length: dropCount }, (): SourceCommand => ({ + kind: 'splat', + x: texelCoordinate(rng.range(0, grid.nx)), + y: texelCoordinate(rng.range(0, grid.ny)), + amount: worldUnits(amount), + radius: texelDistance(radius), + })); + }; +} diff --git a/src/lib/Puddle/sim/engine.ts b/src/lib/Puddle/sim/engine.ts new file mode 100644 index 0000000..bd23e26 --- /dev/null +++ b/src/lib/Puddle/sim/engine.ts @@ -0,0 +1,189 @@ +// `advance` uses a capped time accumulator so simulation speed is display +// refresh-rate independent and backgrounded frames cannot create unbounded work. + +import { seconds, substepSeconds, type WorldUnits } from './brands'; +import { applyCommand } from './emitters'; +import { runSubstep } from './executor'; +import { DEFAULT_MAX_SUBSTEPS, maxFrameBudget } from './governor'; +import type { Params } from './params'; +import { createResources, type Resources } from './resources'; +import { createRng, type Rng } from './rng'; +import type { + FrameStats, + GovernorPolicy, + GravityDriver, + Grid, + Integrator, + SourceCommand, + SourceEmitter, + StateStats, +} from './types'; + +export interface EngineConfig { + readonly grid: Grid; + readonly terrain: Float32Array; + readonly initialHeight: (xIndex: number, yIndex: number) => WorldUnits; + readonly params: Params; + readonly seed: number; + readonly integrator: Integrator; + readonly gravity: GravityDriver; + readonly emitters: readonly SourceEmitter[]; + readonly governor: GovernorPolicy; + /** Per-frame substep cap; defaults to `DEFAULT_MAX_SUBSTEPS` and must match the governor. */ + readonly maxSubsteps?: number | undefined; +} + +function scaleInPlace(values: Float32Array, scale: number): void { + values.set(values.map((value) => value * scale)); +} + +export class Engine { + readonly grid: Grid; + + private readonly initialHeight: EngineConfig['initialHeight']; + private readonly params: Params; + private readonly seed: number; + private readonly integrator: Integrator; + private readonly gravity: GravityDriver; + private readonly emitters: readonly SourceEmitter[]; + private readonly governor: GovernorPolicy; + private readonly maxSubsteps: number; + private readonly resources: Resources; + private rng: Rng; + + private simClock = 0; // sim-seconds integrated + private accumulatedTime = 0; // unspent sim-time budget + private emittedUpTo = 0; // sim-time sources are emitted through (leads simClock by <= accumulatedTime) + + constructor(config: EngineConfig) { + this.grid = config.grid; + this.initialHeight = config.initialHeight; + this.params = config.params; + this.seed = config.seed; + this.integrator = config.integrator; + this.gravity = config.gravity; + this.emitters = config.emitters; + this.governor = config.governor; + this.maxSubsteps = config.maxSubsteps ?? DEFAULT_MAX_SUBSTEPS; + this.resources = createResources(config.grid, config.terrain); + this.rng = createRng(config.seed); + this.resources.reset(config.initialHeight); + } + + // Emit across a sim-time window before planning so new depth affects the CFL bound. + private runEmitters(startTime: number, duration: number): void { + if (this.emitters.length === 0 || duration <= 0) return; + const context = { + grid: this.grid, + time: seconds(startTime), + dt: seconds(duration), + rng: this.rng, + }; + const commands = this.emitters.flatMap((emitter) => emitter(context)); + for (const command of commands) applyCommand(this.resources, command); + } + + /** Live ping-pong buffer; callers must not cache or write it. */ + height(): Float32Array { + return this.resources.height().data; + } + + totalMass(): number { + return this.resources.stats().mass; + } + + stats(): StateStats { + return this.resources.stats(); + } + + advance(realDtSeconds: number): FrameStats { + const elapsedTime = Number.isFinite(realDtSeconds) ? Math.max(0, realDtSeconds) : 0; + this.accumulatedTime += elapsedTime * this.params.timeScale; + const frameBudget = maxFrameBudget(this.maxSubsteps, this.params.baseSubstep); + if (this.accumulatedTime > frameBudget) this.accumulatedTime = frameBudget; // Prevent a long frame from creating a runaway backlog. + // Emit over the full horizon so accumulator remainders are not emitted twice. + const horizon = this.simClock + this.accumulatedTime; + if (horizon > this.emittedUpTo) { + this.runEmitters(this.emittedUpTo, horizon - this.emittedUpTo); + this.emittedUpTo = horizon; + } + const plan = this.governor({ + frameDt: seconds(this.accumulatedTime), + stats: this.resources.stats(), + integrator: this.integrator, + params: this.params, + }); + let completedSubsteps = 0; + for (let substepIndex = 0; substepIndex < plan.substeps; substepIndex++) { + runSubstep( + this.resources, + this.integrator, + plan.dt, + this.params, + this.gravity.sample(seconds(this.simClock)), + ); + this.simClock += plan.dt; + completedSubsteps++; + } + this.accumulatedTime = Math.max(0, this.accumulatedTime - completedSubsteps * plan.dt); + const { mass, maxDepth } = this.resources.stats(); + return { + mass, + maxDepth, + substeps: completedSubsteps, + }; + } + + settle(substeps: number): void { + const gravitySample = this.gravity.sample(seconds(0)); + const dt = substepSeconds( + Math.min( + this.params.baseSubstep, + this.integrator.maxStableDt(this.resources.stats(), this.params), + ), + ); + for (let substepIndex = 0; substepIndex < substeps; substepIndex++) { + runSubstep(this.resources, this.integrator, dt, this.params, gravitySample); + } + } + + step(dt: number): void { + runSubstep( + this.resources, + this.integrator, + substepSeconds(dt), + this.params, + this.gravity.sample(seconds(0)), + ); + } + + emit(command: SourceCommand): void { + applyCommand(this.resources, command); + } + + clampMass(targetMass: number): void { + const currentMass = this.resources.stats().mass; + if (currentMass <= targetMass || currentMass === 0) return; + const massScale = targetMass / currentMass; + this.resources.applyToHeight((heightData) => { + scaleInPlace(heightData, massScale); + }); + // Scale flux too, preserving velocity while reducing volume. + this.resources.applyToFlux((flux) => { + scaleInPlace(flux.fx, massScale); + scaleInPlace(flux.fy, massScale); + }); + } + + reset(): void { + this.resources.reset(this.initialHeight); + this.rng = createRng(this.seed); + this.simClock = 0; + this.accumulatedTime = 0; + this.emittedUpTo = 0; + } +} + +export function createEngine(config: EngineConfig): Engine { + return new Engine(config); +} diff --git a/src/lib/Puddle/sim/executor.ts b/src/lib/Puddle/sim/executor.ts new file mode 100644 index 0000000..1238796 --- /dev/null +++ b/src/lib/Puddle/sim/executor.ts @@ -0,0 +1,79 @@ +import type { Role, SubstepSeconds } from './brands'; +import type { Params } from './params'; +import { runKernel } from './passes'; +import type { Resources } from './resources'; +import type { GravitySample, Integrator, PassCtx, PassDesc, ScalarRole } from './types'; + +function bindPassContext( + resources: Resources, + passDescription: PassDesc, + substepSeconds: SubstepSeconds, + params: Params, + gravity: GravitySample, +): PassCtx { + const assertReadDeclared = (role: Role): void => { + if (!passDescription.reads.includes(role)) { + throw new Error(`pass ${passDescription.kind} does not declare a read of '${role}'`); + } + }; + return { + grid: resources.grid, + dt: substepSeconds, + params, + gravity, + readScalar: (role: ScalarRole) => { + assertReadDeclared(role); + return resources.currentScalar(role); + }, + readPrevScalar: (role: ScalarRole) => { + // Previous-generation reads still require a declared dependency. + assertReadDeclared(role); + return resources.previousScalar(role); + }, + readFlux: () => { + assertReadDeclared('flux'); + return resources.currentFlux(); + }, + writeScalar: () => { + if (passDescription.writes === 'flux') { + throw new Error(`pass ${passDescription.kind} writes flux, not a scalar`); + } + return resources.targetScalar(passDescription.writes); + }, + writeFlux: () => { + if (passDescription.writes !== 'flux') { + throw new Error(`pass ${passDescription.kind} does not write flux`); + } + return resources.targetFlux(); + }, + }; +} + +export function runSubstep( + resources: Resources, + integrator: Integrator, + substepSeconds: SubstepSeconds, + params: Params, + gravity: GravitySample, +): void { + for (const passDescription of integrator.passes) { + runKernel( + passDescription.kind, + bindPassContext(resources, passDescription, substepSeconds, params, gravity), + ); + resources.swap(passDescription.writes); + } +} + +export function runSubsteps( + resources: Resources, + integrator: Integrator, + substepCount: number, + substepSeconds: SubstepSeconds, + params: Params, + gravity: GravitySample, +): void { + for (let substepIndex = 0; substepIndex < substepCount; substepIndex++) { + runSubstep(resources, integrator, substepSeconds, params, gravity); + } +} diff --git a/src/lib/Puddle/sim/field.ts b/src/lib/Puddle/sim/field.ts new file mode 100644 index 0000000..541c836 --- /dev/null +++ b/src/lib/Puddle/sim/field.ts @@ -0,0 +1,19 @@ +// CPU realization of the "textures" the passes read and write. Scalar fields are +// cell-centered; flux is the MAC-staggered face pair. + +import type { FluxField, Grid, ScalarField } from './types'; + +export function makeScalar(grid: Grid): ScalarField { + const { nx, ny } = grid; + return { nx, ny, data: new Float32Array(nx * ny) }; +} + +export function makeFlux(grid: Grid): FluxField { + const { nx, ny } = grid; + return { + nx, + ny, + fx: new Float32Array((nx + 1) * ny), + fy: new Float32Array(nx * (ny + 1)), + }; +} diff --git a/src/lib/Puddle/sim/governor.ts b/src/lib/Puddle/sim/governor.ts new file mode 100644 index 0000000..947561e --- /dev/null +++ b/src/lib/Puddle/sim/governor.ts @@ -0,0 +1,30 @@ +import { type SubstepSeconds, substepSeconds } from './brands'; +import { params as paramSchema } from './params'; +import type { GovernorPolicy, SubstepPlan } from './types'; + +export const BASE_SUBSTEP = paramSchema.baseSubstep.default; + +export const DEFAULT_MAX_SUBSTEPS = 8; + +function substepCount(frameDt: number, substepDt: number, maxSubsteps: number): number { + const desiredSubsteps = substepDt > 0 ? Math.floor(frameDt / substepDt) : 0; + return Math.max(0, Math.min(maxSubsteps, desiredSubsteps)); +} + +export function makeGovernor(maxSubsteps: number): GovernorPolicy { + return ({ frameDt, stats, integrator, params }) => { + const stableDt = integrator.maxStableDt(stats, params); + const substepDt = Math.min(params.baseSubstep, stableDt); + // Floor preserves the accumulator remainder; rounding would overdraw its budget. + return { + substeps: substepCount(frameDt, substepDt, maxSubsteps), + dt: substepSeconds(substepDt), + } satisfies SubstepPlan; + }; +} + +export const defaultGovernor: GovernorPolicy = makeGovernor(DEFAULT_MAX_SUBSTEPS); + +export function maxFrameBudget(maxSubsteps: number, baseSubstep: number): SubstepSeconds { + return substepSeconds(maxSubsteps * baseSubstep); +} diff --git a/src/lib/Puddle/sim/gravity.ts b/src/lib/Puddle/sim/gravity.ts new file mode 100644 index 0000000..fd517cc --- /dev/null +++ b/src/lib/Puddle/sim/gravity.ts @@ -0,0 +1,56 @@ +import type { Seconds } from './brands'; +import { valueNoise } from './noise'; +import type { GravityDriver, GravitySample } from './types'; + +const finiteOrFallback = (value: number | undefined, fallback: number): number => + value !== undefined && Number.isFinite(value) ? value : fallback; + +/** Fixed hydrostatic gravity plus a constant in-plane tilt. */ +export function constantGravity(perpendicular: number, tiltX = 0, tiltY = 0): GravityDriver { + const sample: GravitySample = { perp: perpendicular, tiltX, tiltY }; + return { + sample: () => sample, + serialize: () => ({ kind: 'constant', perp: perpendicular, tiltX, tiltY }), + }; +} + +export function offsetGravity( + baseGravity: GravityDriver, + getOffset: () => { readonly x: number; readonly y: number }, +): GravityDriver { + const sample = (time: Seconds): GravitySample => { + const baseSample = baseGravity.sample(time); + const offset = getOffset(); + return { + perp: baseSample.perp, + tiltX: baseSample.tiltX + offset.x, + tiltY: baseSample.tiltY + offset.y, + }; + }; + return { + sample, + serialize: () => ({ kind: 'offset', base: baseGravity.serialize(), offset: getOffset() }), + }; +} + +export function noiseGravity(options: { + perp: number; + amp?: number | undefined; + rateHz?: number | undefined; + seed?: number | undefined; +}): GravityDriver { + const { perp } = options; + // finite-guard, not `??`: a NaN drift amp/rate would poison the tilt forever. + const amplitude = finiteOrFallback(options.amp, 2); + const rateHz = finiteOrFallback(options.rateHz, 0.05); + const seed = options.seed ?? 1; + const sample = (time: Seconds): GravitySample => { + const phase = time * rateHz; + return { + perp, + tiltX: (valueNoise(phase, 0, seed) - 0.5) * 2 * amplitude, + tiltY: (valueNoise(0, phase, seed + 7) - 0.5) * 2 * amplitude, + }; + }; + return { sample, serialize: () => ({ kind: 'noise', perp, amp: amplitude, rateHz, seed }) }; +} diff --git a/src/lib/Puddle/sim/index.ts b/src/lib/Puddle/sim/index.ts new file mode 100644 index 0000000..9b68b5c --- /dev/null +++ b/src/lib/Puddle/sim/index.ts @@ -0,0 +1,232 @@ +import { texelCoordinate, texelDistance, worldUnits } from './brands'; +import { rainEmitter } from './emitters'; +import { createEngine } from './engine'; +import { DEFAULT_MAX_SUBSTEPS, defaultGovernor, makeGovernor } from './governor'; +import { constantGravity, noiseGravity, offsetGravity } from './gravity'; +import { integrators, type IntegratorId } from './integrators'; +import { type ParamOverrides, params as paramSchema, resolveParams } from './params'; +import { makeTerrain } from './terrain'; +import type { FrameStats, Grid, SourceEmitter } from './types'; + +export const DEFAULT_SETTLE_SUBSTEPS = 90; +export const PUDDLE_DEFAULTS = { + cellSize: 19, + threshold: 0.035, + level: 0.42, + integrator: 'pipes+momentum', + momentumSmoothing: 0, + momentumRetention: 0.98, + gravityDrift: true, + driftAmp: 1, + cursorTilt: 1.7, + cursorEase: 0.2, +} as const; +const MIN_DIM = 4; +const MAX_DIM = 512; +const MAX_TILT = paramSchema.tiltX.max; + +export interface WaterSimOptions extends ParamOverrides { + nx: number; + ny: number; + seed?: number; + /** `'pipes'` or the default momentum-enabled variant `'pipes+momentum'`. */ + integrator?: IntegratorId; + /** Install a rain emitter (raindrop ripples) for animated use. */ + rain?: boolean | { intervalSec?: number; amount?: number; radius?: number }; + /** Drift the gravity tilt with noise instead of holding it constant. */ + gravityDrift?: boolean; + /** Noise-drift tilt magnitude (only with `gravityDrift`). */ + driftAmp?: number; + /** Noise-drift rate in Hz (only with `gravityDrift`). */ + driftRateHz?: number; + /** Per-frame substep cap (spiral-of-death guard). */ + maxSubsteps?: number; + /** Grid dimension floor the nx/ny inputs are clamped to. */ + minDim?: number; + /** Grid dimension ceiling the nx/ny inputs are clamped to (guards against a giant grid). */ + maxDim?: number; +} + +function clampDimension(dimension: number, minimum: number, maximum: number): number { + return Number.isFinite(dimension) + ? Math.max(minimum, Math.min(maximum, Math.floor(dimension))) + : minimum; +} + +const finiteOrFallback = (value: number | undefined, fallback: number): number => + value !== undefined && Number.isFinite(value) ? value : fallback; + +const nonnegativeIntegerOrZero = (value: number): number => + Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0; + +const clampTilt = (value: number): number => Math.max(-MAX_TILT, Math.min(MAX_TILT, value)); + +export class WaterSim { + readonly nx: number; + readonly ny: number; + + private readonly engine: ReturnType; + private readonly heightSnapshot: Float32Array; + private readonly tiltOffset = { x: 0, y: 0 }; + + constructor(options: WaterSimOptions) { + const minDim = Math.max(1, Math.floor(finiteOrFallback(options.minDim, MIN_DIM))); + const maxDim = Math.max(minDim, Math.floor(finiteOrFallback(options.maxDim, MAX_DIM))); + const grid: Grid = { + nx: clampDimension(options.nx, minDim, maxDim), + ny: clampDimension(options.ny, minDim, maxDim), + }; + const seed = finiteOrFallback(options.seed, 7); + const params = resolveParams({ ...PUDDLE_DEFAULTS, ...options }); + const terrain = makeTerrain(grid, params, seed); + const integrator = integrators[options.integrator ?? PUDDLE_DEFAULTS.integrator]; + + const baseGravity = + (options.gravityDrift ?? PUDDLE_DEFAULTS.gravityDrift) + ? noiseGravity({ + perp: params.gravity, + seed, + amp: finiteOrFallback(options.driftAmp, PUDDLE_DEFAULTS.driftAmp), + rateHz: options.driftRateHz, + }) + : constantGravity(params.gravity, params.tiltX, params.tiltY); + const gravity = offsetGravity(baseGravity, () => this.tiltOffset); + + const rainOptions = typeof options.rain === 'object' ? options.rain : {}; + const emitters: SourceEmitter[] = + options.rain === true || typeof options.rain === 'object' + ? [ + rainEmitter({ + intervalSec: finiteOrFallback(rainOptions.intervalSec, 0.6), + amount: worldUnits(finiteOrFallback(rainOptions.amount, 0.06)), + radius: texelDistance(finiteOrFallback(rainOptions.radius, 1.5)), + }), + ] + : []; + + // Keep governor and engine caps aligned. + const maxSubsteps = finiteOrFallback(options.maxSubsteps, DEFAULT_MAX_SUBSTEPS); + const substepCap = nonnegativeIntegerOrZero(maxSubsteps); + const governor = options.maxSubsteps !== undefined ? makeGovernor(substepCap) : defaultGovernor; + + this.nx = grid.nx; + this.ny = grid.ny; + this.engine = createEngine({ + grid, + terrain, + initialHeight: (xIndex, yIndex) => + worldUnits(Math.max(0, params.level - (terrain[yIndex * grid.nx + xIndex] ?? 0))), + params, + seed, + integrator, + gravity, + emitters, + governor, + maxSubsteps: substepCap, + }); + + // Hide the mutable, ping-pong engine buffer behind a reused snapshot. + this.heightSnapshot = new Float32Array(grid.nx * grid.ny); + } + + /** + * Current per-cell depth for rendering. This reused snapshot is overwritten on + * each access; copy it to retain a frame's values. + */ + get height(): Float32Array { + this.heightSnapshot.set(this.engine.height()); + return this.heightSnapshot; + } + + /** Run substeps to bring poured water to rest (deterministic). */ + settle(substeps = DEFAULT_SETTLE_SUBSTEPS): void { + this.engine.settle(nonnegativeIntegerOrZero(substeps)); + } + + /** Advance by real elapsed seconds (framerate-independent). Returns this frame's stats. */ + advance(realDtSeconds: number): FrameStats { + return this.engine.advance(realDtSeconds); + } + + step(dt: number): void { + if (Number.isFinite(dt)) this.engine.step(dt); + } + + splat(x: number, y: number, amount: number, radius: number): void { + if (![x, y, amount, radius].every(Number.isFinite)) return; + this.engine.emit({ + kind: 'splat', + x: texelCoordinate(x), + y: texelCoordinate(y), + amount: worldUnits(amount), + radius: texelDistance(radius), + }); + } + + /** + * In-plane gravity tilt added on top of the configured driver (pointer / + * device-orientation interaction). Same sign convention as the `tiltX`/`tiltY` + * params: a negative x offset drives flow toward +x. Clamped to the tilt range. + */ + setTiltOffset(x: number, y: number): void { + if (![x, y].every(Number.isFinite)) return; + this.tiltOffset.x = clampTilt(x); + this.tiltOffset.y = clampTilt(y); + } + + clampMass(target: number): void { + if (Number.isFinite(target)) this.engine.clampMass(Math.max(0, target)); + } + + totalMass(): number { + return this.engine.totalMass(); + } + + reset(): void { + this.engine.reset(); + } +} + +export function createWaterSim(options: WaterSimOptions): WaterSim { + return new WaterSim(options); +} + +export { integrators } from './integrators'; +export type { IntegratorId } from './integrators'; +export { params as paramSchema, resolveParams } from './params'; +export type { Params, ParamKey, ParamOverrides } from './params'; +export type { Integrator, SourceCommand, SourceEmitter, GravityDriver } from './types'; + +export { Engine, createEngine } from './engine'; +export type { EngineConfig } from './engine'; +export { constantGravity, noiseGravity, offsetGravity } from './gravity'; +export { DEFAULT_MAX_SUBSTEPS, defaultGovernor, makeGovernor } from './governor'; +export { rainEmitter } from './emitters'; +export { makeTerrain } from './terrain'; +export { + domainCoordinate, + seconds, + substepSeconds, + texelCoordinate, + texelDistance, + worldUnits, +} from './brands'; +export type { + DomainCoordinate, + Seconds, + SubstepSeconds, + TexelCoordinate, + TexelDistance, + WorldUnits, +} from './brands'; +export type { Rng } from './rng'; +export type { + EmitCtx, + FrameStats, + GovernorInput, + GovernorPolicy, + GravitySample, + Grid, + StateStats, + SubstepPlan, +} from './types'; diff --git a/src/lib/Puddle/sim/integrators.ts b/src/lib/Puddle/sim/integrators.ts new file mode 100644 index 0000000..8f1191a --- /dev/null +++ b/src/lib/Puddle/sim/integrators.ts @@ -0,0 +1,29 @@ +// Passes are swapped as whole pipelines because their state-layout contracts are +// not compiler-visible. Momentum extends the pipes pipeline with an optional appended pass. + +import { type SubstepSeconds, substepSeconds } from './brands'; +import type { Params } from './params'; +import { PASSES } from './passes'; +import type { Integrator, StateStats } from './types'; + +// Gravity-wave CFL: dt < dx / sqrt(g * hMax), dx = 1. `cflSafety` keeps a margin; +// `minWaveDepth` floors hMax so an empty domain doesn't yield an infinite dt. +function cflStableDt(stats: StateStats, params: Params): SubstepSeconds { + const maxWaveDepth = Math.max(stats.maxDepth, params.minWaveDepth); + return substepSeconds(params.cflSafety / Math.sqrt(params.gravity * maxWaveDepth)); +} + +export const pipes: Integrator = { + id: 'pipes', + passes: [PASSES.fluxUpdate, PASSES.outflowScale, PASSES.heightUpdate], + maxStableDt: cflStableDt, +}; + +export const pipesMomentum: Integrator = { + id: 'pipes+momentum', + passes: [...pipes.passes, PASSES.momentum], + maxStableDt: cflStableDt, +}; + +export const integrators = { pipes, 'pipes+momentum': pipesMomentum } as const; +export type IntegratorId = keyof typeof integrators; diff --git a/src/lib/Puddle/sim/noise.ts b/src/lib/Puddle/sim/noise.ts new file mode 100644 index 0000000..1cbfa85 --- /dev/null +++ b/src/lib/Puddle/sim/noise.ts @@ -0,0 +1,67 @@ +import type { DomainCoordinate } from './brands'; + +function smooth(value: number): number { + return value * value * (3 - 2 * value); +} + +// Maps lattice coordinates to a deterministic value in [0, 1). +function hashLatticePoint(latticeX: number, latticeY: number, seed: number): number { + const hash = (latticeX * 374761393 + latticeY * 668265263 + seed * 2246822519) | 0; + const mixedHash = Math.imul(hash ^ (hash >>> 13), 1274126177); + return ((mixedHash ^ (mixedHash >>> 16)) >>> 0) / 4294967296; +} + +export function valueNoise(x: number, y: number, seed: number): number { + // Lattice-cell origin and smoothed local coordinates within that cell. + const latticeX = Math.floor(x); + const latticeY = Math.floor(y); + const blendX = smooth(x - latticeX); + const blendY = smooth(y - latticeY); + // Deterministic values at the cell's four corners, bilinearly interpolated below. + const corner00 = hashLatticePoint(latticeX, latticeY, seed); + const corner10 = hashLatticePoint(latticeX + 1, latticeY, seed); + const corner01 = hashLatticePoint(latticeX, latticeY + 1, seed); + const corner11 = hashLatticePoint(latticeX + 1, latticeY + 1, seed); + return ( + (corner00 * (1 - blendX) + corner10 * blendX) * (1 - blendY) + + (corner01 * (1 - blendX) + corner11 * blendX) * blendY + ); +} + +export function fbm(x: number, y: number, seed: number, octaves = 4): number { + const octaveIndices = Array.from( + { length: Math.max(0, Math.ceil(octaves)) }, + (_, octave) => octave, + ); + const { weightedSum, amplitudeSum } = octaveIndices.reduce( + (sums, octave) => { + const amplitude = 0.5 ** (octave + 1); + const frequency = 2 ** octave; + return { + weightedSum: + sums.weightedSum + + amplitude * valueNoise(x * frequency, y * frequency, seed + octave * 101), + amplitudeSum: sums.amplitudeSum + amplitude, + }; + }, + { weightedSum: 0, amplitudeSum: 0 }, + ); + return weightedSum / amplitudeSum; +} + +// Signed distance to a rounded box; negative inside. +export function sdRoundRect( + x: DomainCoordinate, + y: DomainCoordinate, + halfWidth: number, + halfHeight: number, + radius: number, +): number { + const roundedDistanceX = Math.abs(x) - halfWidth + radius; + const roundedDistanceY = Math.abs(y) - halfHeight + radius; + return ( + Math.min(Math.max(roundedDistanceX, roundedDistanceY), 0) + + Math.hypot(Math.max(roundedDistanceX, 0), Math.max(roundedDistanceY, 0)) - + radius + ); +} diff --git a/src/lib/Puddle/sim/params.ts b/src/lib/Puddle/sim/params.ts new file mode 100644 index 0000000..eb176a5 --- /dev/null +++ b/src/lib/Puddle/sim/params.ts @@ -0,0 +1,58 @@ +import { worldUnits, type WorldUnits } from './brands'; + +export interface ParamSpec { + readonly default: number; + readonly min: number; + readonly max: number; +} +export type ParamSchema = Record; + +export const params = { + gravity: { default: 9.8, min: 0.1, max: 40 }, + damping: { default: 0.96, min: 0, max: 0.9999 }, + level: { default: worldUnits(0.58), min: 0.05, max: 4 }, + noiseAmp: { default: worldUnits(0.4), min: 0, max: 2 }, + noiseFreq: { default: 3.4, min: 0.1, max: 16 }, + tiltX: { default: 0, min: -20, max: 20 }, + tiltY: { default: 0, min: -20, max: 20 }, + // Prevents unstable velocity near a dry shoreline. + depthFloor: { default: worldUnits(0.02), min: 1e-4, max: 1 }, + // Blend toward the 4-neighbor mean to suppress grid-scale oscillation. + momentumSmoothing: { default: 0.5, min: 0, max: 1 }, + // Per-step momentum retention; 1 is lossless. + momentumRetention: { default: 0.82, min: 0, max: 1 }, + // CFL margin in dt = cflSafety * dx / sqrt(g * hMax). + cflSafety: { default: 0.9, min: 0.1, max: 1 }, + // Avoids an infinite CFL timestep in a dry domain. + minWaveDepth: { default: worldUnits(0.001), min: 1e-4, max: 1 }, + // Target timestep, further limited by CFL. + baseSubstep: { default: 0.08, min: 0.005, max: 0.5 }, + // Simulated seconds per real second. + timeScale: { default: 6, min: 0.1, max: 30 }, + // Terrain bowl dimensions in normalized [-0.5, 0.5] space. + bowlHalfX: { default: 0.34, min: 0.05, max: 0.5 }, + bowlHalfY: { default: 0.3, min: 0.05, max: 0.5 }, + bowlRadius: { default: 0.16, min: 0, max: 0.5 }, + bowlRim: { default: 0.22, min: 0.02, max: 0.5 }, + bowlAmp: { default: worldUnits(1.4), min: 0.1, max: 8 }, +} as const satisfies ParamSchema; + +export type ParamKey = keyof typeof params; +export type Params = { + [Key in ParamKey]: (typeof params)[Key]['default'] extends WorldUnits ? WorldUnits : number; +}; +export type ParamOverrides = Partial>; + +function clamp(value: number, parameterSpec: ParamSpec): number { + if (!Number.isFinite(value)) return parameterSpec.default; + return Math.min(parameterSpec.max, Math.max(parameterSpec.min, value)); +} + +export function resolveParams(overrides: ParamOverrides = {}): Params { + return Object.fromEntries( + (Object.keys(params) as ParamKey[]).map((key) => { + const override = overrides[key]; + return [key, override === undefined ? params[key].default : clamp(override, params[key])]; + }), + ) as Params; +} diff --git a/src/lib/Puddle/sim/passes.ts b/src/lib/Puddle/sim/passes.ts new file mode 100644 index 0000000..9c00d6f --- /dev/null +++ b/src/lib/Puddle/sim/passes.ts @@ -0,0 +1,345 @@ +import type { Grid, PassCtx, PassDesc, PassKind } from './types'; + +type FieldTransform = (value: number, index: number, column: number, row: number) => number; + +function writeField(field: Float32Array, width: number, transform: FieldTransform): void { + field.set( + field.map((value, index) => transform(value, index, index % width, Math.floor(index / width))), + ); +} + +function scaleDirectionalFlux( + flux: number, + positiveSourceScale: number, + negativeSourceScale: number, +): number { + return flux * (flux > 0 ? positiveSourceScale : negativeSourceScale); +} + +// Clearing boundary faces keeps them at zero: no-flow walls must not retain +// stale ping-pong fluxes. +// Interior faces accelerate from the free-surface elevation difference plus +// in-plane gravity; `damping` retains part of the previous face flux. +function runFluxUpdate(ctx: PassCtx): void { + const { nx, ny } = ctx.grid; + const depth = ctx.readScalar('height').data; + const terrain = ctx.readScalar('terrain').data; + const inputFlux = ctx.readFlux(); + const outputFlux = ctx.writeFlux(); + const dt = ctx.dt; + const { damping } = ctx.params; + const normalGravity = ctx.gravity.perp; + const { tiltX, tiltY } = ctx.gravity; + + writeField(outputFlux.fx, nx + 1, (_value, faceIndex, column, row) => { + if (column === 0 || column === nx) return 0; + + const leftCell = row * nx + (column - 1); + const rightCell = row * nx + column; + const surfaceDelta = + (terrain[leftCell] ?? 0) + + (depth[leftCell] ?? 0) - + (terrain[rightCell] ?? 0) - + (depth[rightCell] ?? 0); + return damping * (inputFlux.fx[faceIndex] ?? 0) + dt * (normalGravity * surfaceDelta - tiltX); + }); + writeField(outputFlux.fy, nx, (_value, faceIndex, column, row) => { + if (row === 0 || row === ny) return 0; + + const bottomCell = (row - 1) * nx + column; + const topCell = row * nx + column; + const surfaceDelta = + (terrain[bottomCell] ?? 0) + + (depth[bottomCell] ?? 0) - + (terrain[topCell] ?? 0) - + (depth[topCell] ?? 0); + return damping * (inputFlux.fy[faceIndex] ?? 0) + dt * (normalGravity * surfaceDelta - tiltY); + }); +} + +// Uniformly cap each cell's outflow to its available volume, conserving mass +// while preventing negative depth. +function runOutflowScale(ctx: PassCtx): void { + const { nx } = ctx.grid; + const flux = ctx.readFlux(); + const depth = ctx.readScalar('height').data; + const scale = ctx.writeScalar().data; + const dt = ctx.dt; + writeField(scale, nx, (_value, cell, column, row) => { + const outflow = + Math.max(0, -(flux.fx[row * (nx + 1) + column] ?? 0)) + + Math.max(0, flux.fx[row * (nx + 1) + column + 1] ?? 0) + + Math.max(0, -(flux.fy[row * nx + column] ?? 0)) + + Math.max(0, flux.fy[(row + 1) * nx + column] ?? 0); + const outflowVolume = outflow * dt; + const availableDepth = depth[cell] ?? 0; + return outflowVolume > availableDepth && outflowVolume > 0 ? availableDepth / outflowVolume : 1; + }); +} + +// A face is scaled by its source cell, preserving the outflow cap above. +function runHeightUpdate(ctx: PassCtx): void { + const { nx, ny } = ctx.grid; + const flux = ctx.readFlux(); + const scale = ctx.readScalar('scale').data; + const depth = ctx.readScalar('height').data; + const nextDepth = ctx.writeScalar().data; + const dt = ctx.dt; + // Face flux is positive toward +x/+y, so each face uses its upstream cell's scale. + writeField(nextDepth, nx, (_value, cell, column, row) => { + const leftFlux = flux.fx[row * (nx + 1) + column] ?? 0; + const rightFlux = flux.fx[row * (nx + 1) + column + 1] ?? 0; + const bottomFlux = flux.fy[row * nx + column] ?? 0; + const topFlux = flux.fy[(row + 1) * nx + column] ?? 0; + const cellScale = scale[cell] ?? 0; + const scaledLeftFlux = scaleDirectionalFlux( + leftFlux, + column > 0 ? (scale[cell - 1] ?? 0) : 0, + cellScale, + ); + const scaledRightFlux = scaleDirectionalFlux( + rightFlux, + cellScale, + column < nx - 1 ? (scale[cell + 1] ?? 0) : 0, + ); + const scaledBottomFlux = scaleDirectionalFlux( + bottomFlux, + row > 0 ? (scale[cell - nx] ?? 0) : 0, + cellScale, + ); + const scaledTopFlux = scaleDirectionalFlux( + topFlux, + cellScale, + row < ny - 1 ? (scale[cell + nx] ?? 0) : 0, + ); + return Math.max( + 0, + (depth[cell] ?? 0) + + dt * (scaledLeftFlux - scaledRightFlux + scaledBottomFlux - scaledTopFlux), + ); + }); +} + +interface MomentumScratch { + xVelocity: Float32Array; // x-normal velocity on vertical faces + yVelocity: Float32Array; // y-normal velocity on horizontal faces + smoothingScratch: Float32Array; // checkerboard-damping scratch space +} +const scratchByGrid = new WeakMap(); + +function createMomentumScratch({ nx, ny }: Grid): MomentumScratch { + return { + xVelocity: new Float32Array((nx + 1) * ny), + yVelocity: new Float32Array(nx * (ny + 1)), + smoothingScratch: new Float32Array(Math.max((nx + 1) * ny, nx * (ny + 1))), + }; +} + +function getMomentumScratch(grid: Grid): MomentumScratch { + const cached = scratchByGrid.get(grid); + if (cached) return cached; + + const scratch = createMomentumScratch(grid); + scratchByGrid.set(grid, scratch); + return scratch; +} + +function clamp(value: number, min: number, max: number): number { + return Math.min(max, Math.max(min, value)); +} + +function smoothField( + field: Float32Array, + scratch: Float32Array, + width: number, + height: number, + minColumn: number, + maxColumn: number, + minRow: number, + maxRow: number, + strength: number, +): void { + scratch.set(field.subarray(0, width * height)); + writeField(field, width, (value, index, column, row) => { + if (column < minColumn || column >= maxColumn || row < minRow || row >= maxRow) { + return value; + } + + const mean = + ((scratch[index - 1] ?? 0) + + (scratch[index + 1] ?? 0) + + (scratch[index - width] ?? 0) + + (scratch[index + width] ?? 0)) * + 0.25; + return (scratch[index] ?? 0) * (1 - strength) + mean * strength; + }); +} + +function sampleFace( + field: Float32Array, + width: number, + height: number, + positionX: number, + positionY: number, + offsetX: number, + offsetY: number, +): number { + const gridX = clamp(positionX - offsetX, 0, width - 1); + const gridY = clamp(positionY - offsetY, 0, height - 1); + const leftColumn = Math.floor(gridX); + const bottomRow = Math.floor(gridY); + const rightColumn = Math.min(width - 1, leftColumn + 1); + const topRow = Math.min(height - 1, bottomRow + 1); + const xWeight = gridX - leftColumn; + const yWeight = gridY - bottomRow; + const bottomLeft = field[bottomRow * width + leftColumn] ?? 0; + const bottomRight = field[bottomRow * width + rightColumn] ?? 0; + const topLeft = field[topRow * width + leftColumn] ?? 0; + const topRight = field[topRow * width + rightColumn] ?? 0; + return ( + (bottomLeft * (1 - xWeight) + bottomRight * xWeight) * (1 - yWeight) + + (topLeft * (1 - xWeight) + topRight * xWeight) * yWeight + ); +} + +function runMomentum(ctx: PassCtx): void { + const { nx, ny } = ctx.grid; + const inputFlux = ctx.readFlux(); + const updatedDepth = ctx.readScalar('height').data; + // Flux-to-velocity uses the pre-update upwind depth; the post-update depth + // may be near zero after drainage and would create a spurious velocity. + const previousDepth = ctx.readPrevScalar('height').data; + const scale = ctx.readScalar('scale').data; // per-cell outflow throttle + const outputFlux = ctx.writeFlux(); + const dt = ctx.dt; + const depthFloor = ctx.params.depthFloor; + const { momentumSmoothing, momentumRetention } = ctx.params; + const { xVelocity, yVelocity, smoothingScratch } = getMomentumScratch(ctx.grid); + // CFL guard limits travel to one cell per substep, keeping the backtrace + // local. The outflow cap normally enforces this before the clamp is needed. + const maxVelocity = dt > 0 ? 1 / dt : 0; + + // Use source-scaled flux and pre-update upwind depth; shallow sources emit no + // momentum, preventing shoreline blowups. + writeField(xVelocity, nx + 1, (_value, faceIndex, column, row) => { + if (column === 0 || column === nx) return 0; + + const faceFlux = inputFlux.fx[faceIndex] ?? 0; + const upstreamCell = faceFlux > 0 ? row * nx + (column - 1) : row * nx + column; + const sourceDepth = previousDepth[upstreamCell] ?? 0; + return sourceDepth > depthFloor + ? clamp((faceFlux * (scale[upstreamCell] ?? 0)) / sourceDepth, -maxVelocity, maxVelocity) + : 0; + }); + writeField(yVelocity, nx, (_value, faceIndex, column, row) => { + if (row === 0 || row === ny) return 0; + + const faceFlux = inputFlux.fy[faceIndex] ?? 0; + const upstreamCell = faceFlux > 0 ? (row - 1) * nx + column : row * nx + column; + const sourceDepth = previousDepth[upstreamCell] ?? 0; + return sourceDepth > depthFloor + ? clamp((faceFlux * (scale[upstreamCell] ?? 0)) / sourceDepth, -maxVelocity, maxVelocity) + : 0; + }); + + // Keep velocities staggered: x-faces sample at (i, j + .5), with tangential + // velocity from neighboring y-faces. + writeField(outputFlux.fx, nx + 1, (_value, faceIndex, column, row) => { + if (column === 0 || column === nx) return 0; + + const normalVelocity = xVelocity[faceIndex] ?? 0; + const tangentialVelocity = + ((yVelocity[row * nx + (column - 1)] ?? 0) + + (yVelocity[row * nx + column] ?? 0) + + (yVelocity[(row + 1) * nx + (column - 1)] ?? 0) + + (yVelocity[(row + 1) * nx + column] ?? 0)) * + 0.25; + const backtraceX = column - dt * normalVelocity; + const backtraceY = row + 0.5 - dt * tangentialVelocity; + const advectedVelocity = sampleFace(xVelocity, nx + 1, ny, backtraceX, backtraceY, 0, 0.5); + // Do not floor this: a dried source must emit zero flux to avoid shoreline + // flicker. + const sourceDepth = + advectedVelocity > 0 + ? (updatedDepth[row * nx + (column - 1)] ?? 0) + : (updatedDepth[row * nx + column] ?? 0); + return sourceDepth > depthFloor ? momentumRetention * advectedVelocity * sourceDepth : 0; + }); + // y-faces sample at (i + .5, j), with tangential velocity from x-faces. + writeField(outputFlux.fy, nx, (_value, faceIndex, column, row) => { + if (row === 0 || row === ny) return 0; + + const normalVelocity = yVelocity[faceIndex] ?? 0; + const tangentialVelocity = + ((xVelocity[(row - 1) * (nx + 1) + column] ?? 0) + + (xVelocity[(row - 1) * (nx + 1) + column + 1] ?? 0) + + (xVelocity[row * (nx + 1) + column] ?? 0) + + (xVelocity[row * (nx + 1) + column + 1] ?? 0)) * + 0.25; + const backtraceX = column + 0.5 - dt * tangentialVelocity; + const backtraceY = row - dt * normalVelocity; + const advectedVelocity = sampleFace(yVelocity, nx, ny + 1, backtraceX, backtraceY, 0.5, 0); + const sourceDepth = + advectedVelocity > 0 + ? (updatedDepth[(row - 1) * nx + column] ?? 0) + : (updatedDepth[row * nx + column] ?? 0); + return sourceDepth > depthFloor ? momentumRetention * advectedVelocity * sourceDepth : 0; + }); + + smoothField(outputFlux.fx, smoothingScratch, nx + 1, ny, 1, nx, 1, ny - 1, momentumSmoothing); + smoothField(outputFlux.fy, smoothingScratch, nx, ny + 1, 1, nx - 1, 1, ny, momentumSmoothing); +} + +interface PassRegistration { + readonly reads: PassDesc['reads']; + readonly writes: PassDesc['writes']; + readonly label: string; + readonly run: (ctx: PassCtx) => void; +} + +const PASS_REGISTRY = { + flux_update: { + reads: ['height', 'terrain', 'flux'], + writes: 'flux', + label: 'flux update (virtual pipes)', + run: runFluxUpdate, + }, + outflow_scale: { + reads: ['flux', 'height'], + writes: 'scale', + label: 'outflow scaling', + run: runOutflowScale, + }, + height_update: { + reads: ['flux', 'scale', 'height'], + writes: 'height', + label: 'height update', + run: runHeightUpdate, + }, + momentum: { + reads: ['flux', 'height', 'scale'], + writes: 'flux', + label: 'momentum transport (semi-Lagrangian)', + run: runMomentum, + }, +} as const satisfies Record; + +function descriptor(kind: PassKind): PassDesc { + const { reads, writes } = PASS_REGISTRY[kind]; + return { kind, reads, writes }; +} + +export const PASSES = { + fluxUpdate: descriptor('flux_update'), + outflowScale: descriptor('outflow_scale'), + heightUpdate: descriptor('height_update'), + momentum: descriptor('momentum'), +} as const; + +export function runKernel(kind: PassKind, ctx: PassCtx): void { + PASS_REGISTRY[kind].run(ctx); +} + +export function describePass(kind: PassKind): string { + return PASS_REGISTRY[kind].label; +} diff --git a/src/lib/Puddle/sim/resources.ts b/src/lib/Puddle/sim/resources.ts new file mode 100644 index 0000000..ec6b819 --- /dev/null +++ b/src/lib/Puddle/sim/resources.ts @@ -0,0 +1,129 @@ +import { worldUnits, type Role, type WorldUnits } from './brands'; +import { makeFlux, makeScalar } from './field'; +import type { FluxField, Grid, ScalarField, ScalarRole, StateStats } from './types'; + +type MutableRole = Exclude; +type MutableScalarRole = Exclude; +type BufferPair = readonly [T, T]; +type BufferSide = 'current' | 'other'; + +const makeBufferPair = (createBuffer: () => T): BufferPair => [ + createBuffer(), + createBuffer(), +]; + +export class Resources { + readonly grid: Grid; + + private readonly heightBuffers: BufferPair; + private readonly fluxBuffers: BufferPair; + private readonly scaleBuffers: BufferPair; + private readonly scalarBuffers: Record>; + private readonly terrainField: ScalarField; + // For each role, 0 or 1 identifies which buffer in its pair is current. + private readonly currentBufferIndices: Record = { + height: 0, + flux: 0, + scale: 0, + }; + + constructor(grid: Grid, terrainData: Float32Array) { + this.grid = grid; + this.heightBuffers = makeBufferPair(() => makeScalar(grid)); + this.fluxBuffers = makeBufferPair(() => makeFlux(grid)); + this.scaleBuffers = makeBufferPair(() => makeScalar(grid)); + this.scalarBuffers = { + height: this.heightBuffers, + scale: this.scaleBuffers, + }; + this.terrainField = { nx: grid.nx, ny: grid.ny, data: terrainData }; + } + + currentScalar(role: ScalarRole): ScalarField { + return this.selectScalarBuffer(role, 'current'); + } + + currentFlux(): FluxField { + return Resources.selectBuffer(this.fluxBuffers, this.currentBufferIndices.flux, 'current'); + } + + targetScalar(role: ScalarRole): ScalarField { + if (role === 'terrain') throw new Error("role 'terrain' is static and has no write target"); + return this.selectScalarBuffer(role, 'other'); + } + + targetFlux(): FluxField { + return Resources.selectBuffer(this.fluxBuffers, this.currentBufferIndices.flux, 'other'); + } + + /** + * The other buffer holds the role's value before its last swap. It aliases + * `targetScalar`, whose name is intentionally reserved for writes. + */ + previousScalar(role: ScalarRole): ScalarField { + return this.selectScalarBuffer(role, 'other'); + } + + swap(role: Role): void { + if (role === 'terrain') return; + this.currentBufferIndices[role] = this.currentBufferIndices[role] === 0 ? 1 : 0; + } + + height(): ScalarField { + return this.currentScalar('height'); + } + + terrain(): ScalarField { + return this.terrainField; + } + + applyToHeight(operation: (heightData: Float32Array, grid: Grid) => void): void { + operation(this.height().data, this.grid); + } + + applyToFlux(operation: (flux: FluxField, grid: Grid) => void): void { + operation(this.currentFlux(), this.grid); + } + + stats(): StateStats { + const heightData = this.height().data; + const mass = heightData.reduce((total, depth) => total + depth, 0); + const maxDepth = heightData.reduce( + (currentMax, depth) => (depth > currentMax ? depth : currentMax), + 0, + ); + return { mass, maxDepth: worldUnits(maxDepth) }; + } + + reset(initialHeight: (xIndex: number, yIndex: number) => WorldUnits): void { + this.currentBufferIndices.height = 0; + this.currentBufferIndices.flux = 0; + this.currentBufferIndices.scale = 0; + const initialHeightData = this.heightBuffers[0].data; + initialHeightData.set( + initialHeightData.map((_, index) => + initialHeight(index % this.grid.nx, Math.floor(index / this.grid.nx)), + ), + ); + this.heightBuffers[1].data.fill(0); + for (const { fx, fy } of this.fluxBuffers) { + fx.fill(0); + fy.fill(0); + } + for (const { data } of this.scaleBuffers) data.fill(0); + } + + private static selectBuffer(buffers: BufferPair, currentIndex: 0 | 1, side: BufferSide): T { + return buffers[side === 'current' ? currentIndex : currentIndex === 0 ? 1 : 0]; + } + + private selectScalarBuffer(role: ScalarRole, side: BufferSide): ScalarField { + return role === 'terrain' + ? this.terrainField + : Resources.selectBuffer(this.scalarBuffers[role], this.currentBufferIndices[role], side); + } +} + +export function createResources(grid: Grid, terrainData: Float32Array): Resources { + return new Resources(grid, terrainData); +} diff --git a/src/lib/Puddle/sim/rng.ts b/src/lib/Puddle/sim/rng.ts new file mode 100644 index 0000000..1c3da84 --- /dev/null +++ b/src/lib/Puddle/sim/rng.ts @@ -0,0 +1,31 @@ +export interface Rng { + /** Next float in [0, 1). */ + next: () => number; + /** Float in [min, max). */ + range: (min: number, max: number) => number; +} + +export class SeededRng implements Rng { + private state: number; + + constructor(seed: number) { + // Fold a possibly non-integer/negative seed into a nonzero uint32 state. + const initialState = Math.floor(seed) >>> 0; + this.state = initialState === 0 ? 0x9e3779b9 : initialState; + } + + next(): number { + this.state = (this.state + 0x6d2b79f5) | 0; + const mixed = Math.imul(this.state ^ (this.state >>> 15), 1 | this.state); + const remixed = mixed ^ (mixed + Math.imul(mixed ^ (mixed >>> 7), 61 | mixed)); + return ((remixed ^ (remixed >>> 14)) >>> 0) / 4294967296; + } + + range(min: number, max: number): number { + return min + (max - min) * this.next(); + } +} + +export function createRng(seed: number): Rng { + return new SeededRng(seed); +} diff --git a/src/lib/Puddle/sim/terrain.ts b/src/lib/Puddle/sim/terrain.ts new file mode 100644 index 0000000..c24ed66 --- /dev/null +++ b/src/lib/Puddle/sim/terrain.ts @@ -0,0 +1,36 @@ +import { domainCoordinate } from './brands'; +import { fbm, sdRoundRect } from './noise'; +import type { Params } from './params'; +import type { Grid } from './types'; + +function smooth(value: number): number { + return value * value * (3 - 2 * value); +} + +export function makeTerrain(grid: Grid, params: Params, seed: number): Float32Array { + const { nx: columnCount, ny: rowCount } = grid; + const terrain = new Float32Array(columnCount * rowCount); + for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) { + for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) { + // Cell-center coordinates in the normalized terrain domain [-0.5, 0.5]. + const terrainX = domainCoordinate((columnIndex + 0.5) / columnCount - 0.5); + const terrainY = domainCoordinate((rowIndex + 0.5) / rowCount - 0.5); + // Signed distance drives the bowl wall; noise roughens the pooled edge. + const signedDistance = sdRoundRect( + terrainX, + terrainY, + params.bowlHalfX, + params.bowlHalfY, + params.bowlRadius, + ); + const wallHeight = + params.bowlAmp * smooth(Math.max(0, Math.min(1, (signedDistance + 0.02) / params.bowlRim))); + const noiseHeight = + (fbm(terrainX * params.noiseFreq + 10, terrainY * params.noiseFreq + 10, seed) - 0.5) * + 2 * + params.noiseAmp; + terrain[rowIndex * columnCount + columnIndex] = wallHeight + noiseHeight; + } + } + return terrain; +} diff --git a/src/lib/Puddle/sim/types.ts b/src/lib/Puddle/sim/types.ts new file mode 100644 index 0000000..f3a66d6 --- /dev/null +++ b/src/lib/Puddle/sim/types.ts @@ -0,0 +1,122 @@ +import type { + Role, + Seconds, + SubstepSeconds, + TexelCoordinate, + TexelDistance, + WorldUnits, +} from './brands'; +import type { Params } from './params'; +import type { Rng } from './rng'; + +export interface Grid { + readonly nx: number; + readonly ny: number; +} + +/** Cell-centered field (height / scale / terrain), length nx*ny row-major. */ +export interface ScalarField { + readonly nx: number; + readonly ny: number; + readonly data: Float32Array; +} + +/** MAC-staggered flux: fx on vertical faces ((nx+1)*ny), fy on horizontal (nx*(ny+1)). */ +export interface FluxField { + readonly nx: number; + readonly ny: number; + readonly fx: Float32Array; + readonly fy: Float32Array; +} + +export type ScalarRole = 'height' | 'scale' | 'terrain'; + +/** Gravity split into normal acceleration (`perp`) and in-plane acceleration (`tiltX`, `tiltY`). */ +export interface GravitySample { + readonly perp: number; + readonly tiltX: number; + readonly tiltY: number; +} + +/** + * A pass kernel's view of the world: current-copy reads by role (plus the + * pre-swap copy via `readPrevScalar`), and the ping-pong target for whatever + * this pass writes. The kernel never sees raw buffers or generations — the + * executor resolves everything. + */ +export interface PassCtx { + readonly grid: Grid; + readonly dt: SubstepSeconds; + readonly params: Params; + readonly gravity: GravitySample; + readonly readScalar: (role: ScalarRole) => ScalarField; + /** The role's value before its last swap (e.g. pre-height-update depth). */ + readonly readPrevScalar: (role: ScalarRole) => ScalarField; + readonly readFlux: () => FluxField; + readonly writeScalar: () => ScalarField; + readonly writeFlux: () => FluxField; +} + +export type PassKind = 'flux_update' | 'outflow_scale' | 'height_update' | 'momentum'; + +export interface PassDesc { + readonly kind: PassKind; + readonly reads: readonly Role[]; + readonly writes: Role; +} + +export interface StateStats { + readonly mass: number; + readonly maxDepth: WorldUnits; +} + +export interface Integrator { + readonly id: 'pipes' | 'pipes+momentum' | (string & {}); + readonly passes: readonly PassDesc[]; + readonly maxStableDt: (stats: StateStats, params: Params) => SubstepSeconds; +} + +export type SourceCommand = + | { + readonly kind: 'splat'; + readonly x: TexelCoordinate; + readonly y: TexelCoordinate; + readonly amount: WorldUnits; + readonly radius: TexelDistance; + } + | { readonly kind: 'rain'; readonly amount: WorldUnits } + | { readonly kind: 'fill'; readonly level: WorldUnits } + | { readonly kind: 'wipe' }; + +export interface EmitCtx { + readonly grid: Grid; + readonly time: Seconds; + readonly dt: Seconds; + readonly rng: Rng; +} +export type SourceEmitter = (context: EmitCtx) => readonly SourceCommand[]; + +export interface SubstepPlan { + readonly substeps: number; + readonly dt: SubstepSeconds; +} + +export interface GovernorInput { + readonly frameDt: Seconds; + readonly stats: StateStats; + readonly integrator: Integrator; + readonly params: Params; +} +export type GovernorPolicy = (input: GovernorInput) => SubstepPlan; + +/** Serializable so a noise-phase driver can participate in snapshots. */ +export interface GravityDriver { + readonly sample: (time: Seconds) => GravitySample; + readonly serialize: () => unknown; +} + +export interface FrameStats { + readonly mass: number; + readonly maxDepth: WorldUnits; + readonly substeps: number; +} diff --git a/src/lib/Puddle/sim/waterSim.test.ts b/src/lib/Puddle/sim/waterSim.test.ts new file mode 100644 index 0000000..fab86f5 --- /dev/null +++ b/src/lib/Puddle/sim/waterSim.test.ts @@ -0,0 +1,353 @@ +import { describe, expect, it } from 'vitest'; + +import { seconds, worldUnits } from './brands'; +import { rainEmitter } from './emitters'; +import { BASE_SUBSTEP, defaultGovernor } from './governor'; +import { integrators } from './integrators'; +import { resolveParams } from './params'; +import { createRng } from './rng'; +import type { StateStats } from './types'; +import { createWaterSim } from './index'; + +function minimumOf(values: Float32Array): number { + return values.reduce((minimum, value) => Math.min(minimum, value), Infinity); +} + +describe('createWaterSim — invariants', () => { + it('conserves mass exactly with no sources (pipes)', () => { + const sim = createWaterSim({ nx: 40, ny: 24, seed: 3, integrator: 'pipes' }); + const massBeforeSettle = sim.totalMass(); + sim.settle(120); + const massAfterSettle = sim.totalMass(); + expect(Math.abs(massAfterSettle - massBeforeSettle) / massBeforeSettle).toBeLessThan(1e-4); + }); + + it('keeps depth non-negative after a large splat', () => { + const sim = createWaterSim({ nx: 40, ny: 24, seed: 5 }); + sim.splat(20, 12, 5, 3); + sim.settle(200); + expect(minimumOf(sim.height)).toBeGreaterThanOrEqual(0); + }); + + it('stays finite and bounded under rain with a mass cap', () => { + const sim = createWaterSim({ nx: 40, ny: 24, seed: 9, rain: true }); + sim.settle(); + const massCap = sim.totalMass(); + for (let frameIndex = 0; frameIndex < 200; frameIndex++) { + sim.advance(1 / 60); + sim.clampMass(massCap); + } + expect(sim.totalMass()).toBeLessThanOrEqual(massCap + 1e-3); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); +}); + +describe('createWaterSim — momentum integrator (pipes+momentum)', () => { + it('conserves mass and stays non-negative & finite', () => { + const sim = createWaterSim({ nx: 40, ny: 24, seed: 7, integrator: 'pipes+momentum' }); + const massBeforeSplat = sim.totalMass(); + sim.splat(15, 10, 2, 3); + const afterSplat = sim.totalMass(); + sim.settle(150); + expect(Math.abs(sim.totalMass() - afterSplat) / afterSplat).toBeLessThan(1e-4); + expect(massBeforeSplat).toBeGreaterThan(0); + expect(minimumOf(sim.height)).toBeGreaterThanOrEqual(0); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); +}); + +describe('createWaterSim — momentum shoreline stability', () => { + it('does not flicker the thresholded shoreline under strong tilt', () => { + const nx = 29; + const ny = 16; + const threshold = 0.15; + const sim = createWaterSim({ + nx, + ny, + seed: 3, + integrator: 'pipes+momentum', + level: 0.58, + momentumSmoothing: 0.5, + momentumRetention: 0.82, + gravityDrift: false, + }); + sim.settle(60); + const massStart = sim.totalMass(); + const wetMask = () => Uint8Array.from(sim.height, (height) => (height > threshold ? 1 : 0)); + sim.setTiltOffset(-8, 0); + let toggleCounts = new Int32Array(nx * ny); + let previousMask = wetMask(); + for (let stepIndex = 0; stepIndex < 120; stepIndex++) { + sim.step(0.05); + const mask = wetMask(); + toggleCounts = Int32Array.from(toggleCounts, (toggleCount, cellIndex) => + mask[cellIndex] !== previousMask[cellIndex] ? toggleCount + 1 : toggleCount, + ); + previousMask = mask; + } + // A cell that fills or drains once toggles at most twice. + expect(toggleCounts.some((toggleCount) => toggleCount > 2)).toBe(false); + expect( + toggleCounts.reduce((maximum, count) => Math.max(maximum, count), 0), + ).toBeLessThanOrEqual(2); + expect(sim.height.every(Number.isFinite)).toBe(true); + expect(Math.abs(sim.totalMass() - massStart) / massStart).toBeLessThan(1e-4); + }); +}); + +describe('createWaterSim — determinism', () => { + it('same seed + same calls => identical output (seeded RNG)', () => { + const runSimulation = () => { + const sim = createWaterSim({ nx: 32, ny: 20, seed: 5, rain: true }); + sim.settle(); + const massCap = sim.totalMass(); + for (let frameIndex = 0; frameIndex < 100; frameIndex++) { + sim.advance(1 / 60); + sim.clampMass(massCap); + } + return Float32Array.from(sim.height); + }; + const firstRun = runSimulation(); + const secondRun = runSimulation(); + expect(firstRun.length).toBe(secondRun.length); + expect(firstRun.every((value, index) => value === secondRun[index])).toBe(true); + }); +}); + +describe('createWaterSim — input validation', () => { + it('coerces invalid dimensions to a safe grid without throwing', () => { + const sim = createWaterSim({ nx: 0, ny: -5 }); + expect(sim.nx).toBeGreaterThanOrEqual(4); + expect(sim.ny).toBeGreaterThanOrEqual(4); + expect(sim.height.length).toBe(sim.nx * sim.ny); + }); + + it('clamps non-finite / out-of-range params so the sim stays finite', () => { + const sim = createWaterSim({ nx: 40, ny: 24, damping: NaN, gravity: -10, level: Infinity }); + sim.settle(120); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); +}); + +describe('resolveParams', () => { + it('applies defaults, clamps ranges, and rejects non-finite', () => { + const resolved = resolveParams({ damping: 5, gravity: NaN, level: 0.7 }); + expect(resolved.damping).toBeLessThanOrEqual(0.9999); + expect(resolved.gravity).toBe(9.8); + expect(resolved.level).toBeCloseTo(0.7, 6); + }); + + it('exposes momentum tuning as clamped params', () => { + const resolved = resolveParams({ momentumSmoothing: 5, momentumRetention: -1 }); + expect(resolved.momentumSmoothing).toBe(1); + expect(resolved.momentumRetention).toBe(0); + expect(resolveParams({}).momentumRetention).toBeCloseTo(0.82, 6); + }); + + it('exposes timestep/CFL tuning as clamped params with correct defaults', () => { + const defaults = resolveParams({}); + expect(defaults.cflSafety).toBeCloseTo(0.9, 6); + expect(defaults.minWaveDepth).toBeCloseTo(0.001, 6); + expect(defaults.baseSubstep).toBeCloseTo(0.08, 6); + expect(defaults.timeScale).toBe(6); + const clamped = resolveParams({ cflSafety: 9, baseSubstep: 0, timeScale: NaN }); + expect(clamped.cflSafety).toBe(1); + expect(clamped.baseSubstep).toBeGreaterThan(0); + expect(clamped.timeScale).toBe(6); + }); +}); + +describe('createWaterSim — governor / grid tuning options', () => { + it('caps per-frame substeps at the maxSubsteps override', () => { + const sim = createWaterSim({ nx: 32, ny: 20, seed: 2, maxSubsteps: 1 }); + sim.settle(20); + expect(sim.advance(10).substeps).toBeLessThanOrEqual(1); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); + + it('clamps nx/ny to the maxDim option', () => { + const sim = createWaterSim({ nx: 4000, ny: 4000, maxDim: 16 }); + expect(sim.nx).toBe(16); + expect(sim.ny).toBe(16); + }); + + it('accepts drift tuning and non-finite drift without corrupting the field', () => { + const sim = createWaterSim({ + nx: 32, + ny: 20, + seed: 3, + gravityDrift: true, + driftAmp: NaN, + driftRateHz: 0.2, + }); + sim.settle(120); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); +}); + +describe('momentum tuning params — threaded to the momentum pass', () => { + it('changes the settled field when momentumRetention differs', () => { + const runSimulation = (momentumRetention: number) => { + const sim = createWaterSim({ + nx: 32, + ny: 20, + seed: 7, + integrator: 'pipes+momentum', + momentumRetention, + }); + sim.splat(16, 10, 2, 3); + sim.settle(12); // short: momentum hasn't fully dissipated yet + return Float32Array.from(sim.height); + }; + const lowRetentionHeight = runSimulation(0.2); + const highRetentionHeight = runSimulation(0.95); + expect(lowRetentionHeight.length).toBe(highRetentionHeight.length); + expect(lowRetentionHeight.some((value, index) => value !== highRetentionHeight[index])).toBe( + true, + ); + expect(minimumOf(highRetentionHeight)).toBeGreaterThanOrEqual(0); + expect(highRetentionHeight.every(Number.isFinite)).toBe(true); + }); +}); + +describe('defaultGovernor', () => { + const stats: StateStats = { mass: 100, maxDepth: worldUnits(0.6) }; + const params = resolveParams({}); + + it('scales substeps with the frame budget and never exceeds CFL dt', () => { + const smallFramePlan = defaultGovernor({ + frameDt: seconds(BASE_SUBSTEP), + stats, + integrator: integrators.pipes, + params, + }); + const largeFramePlan = defaultGovernor({ + frameDt: seconds(BASE_SUBSTEP * 5), + stats, + integrator: integrators.pipes, + params, + }); + expect(smallFramePlan.substeps).toBe(1); + expect(largeFramePlan.substeps).toBeGreaterThan(smallFramePlan.substeps); + expect(largeFramePlan.dt).toBeLessThanOrEqual(BASE_SUBSTEP + 1e-9); + }); + + it('caps substeps per frame (no spiral of death)', () => { + const cappedPlan = defaultGovernor({ + frameDt: seconds(100), + stats, + integrator: integrators.pipes, + params, + }); + expect(cappedPlan.substeps).toBeLessThanOrEqual(8); + }); +}); + +describe('rainEmitter — framerate-independent scheduling', () => { + it('emits the same drop count over the same sim-time regardless of dt chunking', () => { + const grid = { nx: 10, ny: 10 }; + const emitter = rainEmitter({ intervalSec: 0.5, amount: 1, radius: 1 }); + const countDrops = (dt: number, steps: number) => { + const rng = createRng(1); + let time = 0; + let dropCount = 0; + for (let stepIndex = 0; stepIndex < steps; stepIndex++) { + dropCount += emitter({ grid, time: seconds(time), dt: seconds(dt), rng }).length; + time += dt; + } + return dropCount; + }; + // 5 sim-seconds either way; 0.5 and 0.25 are exact in binary (no fp drift). + expect(countDrops(0.5, 10)).toBe(10); + expect(countDrops(0.25, 20)).toBe(10); + }); +}); + +describe('advance — framerate independence (governor accumulator)', () => { + it('runs the same total substeps for the same real time regardless of frame size', () => { + const totalSubsteps = (frameDt: number, frames: number) => { + const sim = createWaterSim({ nx: 32, ny: 20, seed: 2 }); + sim.settle(30); + let totalSubstepCount = 0; + for (let frameIndex = 0; frameIndex < frames; frameIndex++) + totalSubstepCount += sim.advance(frameDt).substeps; + return totalSubstepCount; + }; + const substepsAt30Fps = totalSubsteps(1 / 30, 60); + const substepsAt60Fps = totalSubsteps(1 / 60, 120); + const substepsAt120Fps = totalSubsteps(1 / 120, 240); + // The floor accumulator carries the remainder, so total advanced sim-time + // is the same (within one substep of quantization) at every frame rate. + expect(Math.abs(substepsAt60Fps - substepsAt30Fps)).toBeLessThanOrEqual(2); + expect(Math.abs(substepsAt60Fps - substepsAt120Fps)).toBeLessThanOrEqual(2); + expect(substepsAt60Fps).toBeGreaterThanOrEqual(147); + expect(substepsAt60Fps).toBeLessThanOrEqual(151); + }); +}); + +describe('setTiltOffset — interactive gravity tilt', () => { + const halfMasses = (sim: { nx: number; ny: number; height: Float32Array }) => { + return sim.height.reduce( + ({ left, right }, depth, cellIndex) => + cellIndex % sim.nx < sim.nx / 2 + ? { left: left + depth, right } + : { left, right: right + depth }, + { left: 0, right: 0 }, + ); + }; + + it('shifts mass toward +x for a negative x offset (flux-pass sign convention)', () => { + const sim = createWaterSim({ nx: 40, ny: 24, seed: 3 }); + sim.settle(); + const halfMassesBeforeTilt = halfMasses(sim); + sim.setTiltOffset(-2, 0); + sim.settle(300); + const halfMassesAfterTilt = halfMasses(sim); + expect(halfMassesAfterTilt.right - halfMassesAfterTilt.left).toBeGreaterThan( + halfMassesBeforeTilt.right - halfMassesBeforeTilt.left, + ); + expect(halfMassesAfterTilt.right).toBeGreaterThan(halfMassesAfterTilt.left); + }); + + it('ignores non-finite offsets and conserves mass under tilt', () => { + const sim = createWaterSim({ nx: 32, ny: 20, seed: 3 }); + sim.settle(); + const mass = sim.totalMass(); + sim.setTiltOffset(NaN, 2); + sim.setTiltOffset(3, Infinity); + sim.setTiltOffset(-2, 1); + sim.settle(200); + expect(Math.abs(sim.totalMass() - mass) / mass).toBeLessThan(1e-4); + expect(minimumOf(sim.height)).toBeGreaterThanOrEqual(0); + }); +}); + +describe('facade — non-finite input guards', () => { + it('ignores NaN splat/step/clampMass and rain options without corrupting the field', () => { + const sim = createWaterSim({ nx: 24, ny: 16, seed: 4, rain: { amount: NaN, radius: NaN } }); + sim.settle(40); + sim.splat(NaN, 5, 1, 2); + sim.step(NaN); + sim.clampMass(NaN); + for (let frameIndex = 0; frameIndex < 30; frameIndex++) sim.advance(1 / 60); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); + + it('clamps a negative clampMass target to zero instead of flipping depths', () => { + const sim = createWaterSim({ nx: 24, ny: 16, seed: 4 }); + sim.settle(40); + sim.clampMass(-5); + expect(minimumOf(sim.height)).toBeGreaterThanOrEqual(0); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); + + it('hands out a snapshot: writing to sim.height cannot corrupt sim state', () => { + const sim = createWaterSim({ nx: 24, ny: 16, seed: 4 }); + sim.settle(40); + // Scribble on the returned buffer — a live-buffer leak would poison the field. + sim.height.fill(NaN); + sim.advance(1 / 60); + expect(Number.isFinite(sim.totalMass())).toBe(true); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); +}); diff --git a/src/lib/Puddle/waterSim.ts b/src/lib/Puddle/waterSim.ts new file mode 100644 index 0000000..9b08d2f --- /dev/null +++ b/src/lib/Puddle/waterSim.ts @@ -0,0 +1,2 @@ +// Keep this stable import path while ./sim owns the curated public surface. +export * from './sim'; diff --git a/src/lib/index.ts b/src/lib/index.ts index df50be7..4414a59 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -12,4 +12,5 @@ export { type PaletteConfig, type PaletteSwatch, } from './ColorPalette/palette'; +export { default as Puddle } from './Puddle/Puddle.svelte'; export { default as SprayBorder } from './SprayBorder/SprayBorder.svelte'; From c09c124f7f97a5ce6507aa28189a621e2355323a Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 20 Jul 2026 22:53:49 -0700 Subject: [PATCH 052/141] feat: add device gravity to Puddle --- src/lib/Puddle/Puddle.stories.svelte | 32 ++++ src/lib/Puddle/Puddle.svelte | 62 +++++- src/lib/Puddle/Puddle.svelte.test.ts | 49 +++++ src/lib/Puddle/deviceGravity.test.ts | 119 ++++++++++++ src/lib/Puddle/deviceGravity.ts | 272 +++++++++++++++++++++++++++ src/lib/index.ts | 4 + 6 files changed, 530 insertions(+), 8 deletions(-) create mode 100644 src/lib/Puddle/deviceGravity.test.ts create mode 100644 src/lib/Puddle/deviceGravity.ts diff --git a/src/lib/Puddle/Puddle.stories.svelte b/src/lib/Puddle/Puddle.stories.svelte index 86270d7..e59fe5f 100644 --- a/src/lib/Puddle/Puddle.stories.svelte +++ b/src/lib/Puddle/Puddle.stories.svelte @@ -47,6 +47,10 @@ rainAmount: 0.06, rainRadius: 1.5, maxCells: 200, + deviceGravity: false, + deviceTilt: 6, + deviceEase: 0.18, + deviceNeutralWindow: 2, }, argTypes: { cellSize: { control: { type: 'range', min: 12, max: 60, step: 1 } }, @@ -74,6 +78,10 @@ maxCells: { control: { type: 'range', min: 20, max: 200, step: 10 } }, cursorTilt: { control: { type: 'range', min: 0, max: 2, step: 0.1 } }, cursorEase: { control: { type: 'range', min: 0.05, max: 1.5, step: 0.05 } }, + deviceGravity: { control: 'boolean' }, + deviceTilt: { control: { type: 'range', min: 0, max: 12, step: 0.5 } }, + deviceEase: { control: { type: 'range', min: 0.05, max: 1.5, step: 0.05 } }, + deviceNeutralWindow: { control: { type: 'range', min: 0, max: 10, step: 0.25 } }, color: { control: 'color' }, }, parameters: { @@ -106,12 +114,25 @@ 'maxCells', 'cursorTilt', 'cursorEase', + 'deviceGravity', + 'deviceTilt', + 'deviceEase', + 'deviceNeutralWindow', ], }, }, }); + + {#snippet template(args: Args)}
@@ -162,3 +183,14 @@ + +{#snippet device(args: Args)} +
+ + Permission: {devicePermission} + +
+{/snippet} + + + diff --git a/src/lib/Puddle/Puddle.svelte b/src/lib/Puddle/Puddle.svelte index a159cf8..447f1cb 100644 --- a/src/lib/Puddle/Puddle.svelte +++ b/src/lib/Puddle/Puddle.svelte @@ -9,6 +9,7 @@ import { browser } from '$app/environment'; + import { createDeviceGravityEstimator } from './deviceGravity'; import { createPuddleRenderer } from './puddleRenderer'; import { createWaterSim, PUDDLE_DEFAULTS, type IntegratorId } from './waterSim'; @@ -67,6 +68,14 @@ cursorTilt?: number; /** Cursor-follow easing time-constant in seconds (only with `followCursor`). */ cursorEase?: number; + /** Lean with device motion sensors after permission is requested. Needs `animated`; ignored under prefers-reduced-motion. */ + deviceGravity?: boolean; + /** Maximum device-driven in-plane gravity. */ + deviceTilt?: number; + /** Device-gravity easing time-constant in seconds. */ + deviceEase?: number; + /** Trailing window averaged as the neutral device orientation, in seconds. Zero disables neutralization. */ + deviceNeutralWindow?: number; children?: Snippet; }; @@ -97,6 +106,10 @@ maxCells = 200, cursorTilt = PUDDLE_DEFAULTS.cursorTilt, cursorEase = PUDDLE_DEFAULTS.cursorEase, + deviceGravity = false, + deviceTilt = 6, + deviceEase = 0.18, + deviceNeutralWindow = 2, class: className, children, ...rest @@ -118,6 +131,12 @@ const reducedMotion = new MediaQuery('(prefers-reduced-motion: reduce)'); // Per-instance renderer: owns its scratch canvas + reusable ImageData. const renderer = createPuddleRenderer(); + const deviceGravityEstimator = createDeviceGravityEstimator(); + const deviceNeutralSeconds = $derived( + Number.isFinite(deviceNeutralWindow) && deviceNeutralWindow >= 0 + ? Math.min(deviceNeutralWindow, 60) + : 2, + ); // Stays false without JS, keeping the CSS fallback backdrop visible. let painted = $state(false); @@ -131,6 +150,15 @@ const clearPointer = () => { pointer = null; // ease back to level when the cursor leaves the page }; + const onDeviceMotion = (event: DeviceMotionEvent) => { + deviceGravityEstimator.update(event, performance.now(), deviceNeutralSeconds); + }; + const onVisibilityChange = () => { + if (document.hidden) deviceGravityEstimator.reset(); + }; + // Older sensor-capable Safari lacks the Screen Orientation API. + const screenAngle = () => + (screen as unknown as { orientation?: { angle?: number } }).orientation?.angle ?? 0; const dpr = $derived(devicePixelRatio.current ?? 1); // Clamp cell size and grid so a zero / non-finite / tiny cellSize can't divide @@ -207,13 +235,19 @@ const follow = followCursor; const tiltStrength = cursorTilt; const tiltTau = cursorEase; + const followDevice = deviceGravity; + const deviceStrength = Number.isFinite(deviceTilt) ? Math.max(0, deviceTilt) : 6; + const deviceTau = Number.isFinite(deviceEase) && deviceEase > 0 ? deviceEase : 0.18; + const neutralWindow = deviceNeutralSeconds; // Eased tilt state, in unit direction toward the cursor. let tiltX = 0; let tiltY = 0; - const applyCursorTilt = (dt: number) => { + let deviceX = 0; + let deviceY = 0; + const applyInteractiveTilt = (dt: number, now: number) => { let gx = 0; let gy = 0; - if (pointer) { + if (follow && pointer) { const r = el.getBoundingClientRect(); const dx = pointer.x - (r.left + r.width / 2); const dy = pointer.y - (r.top + r.height / 2); @@ -226,12 +260,19 @@ gy = (dy / len) * m; } } - const k = 1 - Math.exp(-dt / tiltTau); - tiltX += (gx - tiltX) * k; - tiltY += (gy - tiltY) * k; + const cursorK = 1 - Math.exp(-dt / tiltTau); + tiltX += (gx - tiltX) * cursorK; + tiltY += (gy - tiltY) * cursorK; + + const deviceTarget = followDevice + ? deviceGravityEstimator.tilt(now, screenAngle(), deviceStrength, neutralWindow) + : null; + const deviceK = 1 - Math.exp(-dt / deviceTau); + deviceX += ((deviceTarget?.x ?? 0) - deviceX) * deviceK; + deviceY += ((deviceTarget?.y ?? 0) - deviceY) * deviceK; // negative tilt drives flow toward +axis (flux pass: dt·(g·dEta − tilt)), // and grid +y is screen-down, matching clientY - s.setTiltOffset(-tiltStrength * tiltX, -tiltStrength * tiltY); + s.setTiltOffset(-tiltStrength * tiltX + deviceX, -tiltStrength * tiltY + deviceY); }; const cap = s.totalMass(); // raindrops add mass; cap keeps the level steady @@ -241,7 +282,7 @@ const loop = (t: number) => { const dt = last > 0 ? (t - last) / 1000 : 0; // real elapsed seconds last = t; - if (follow) applyCursorTilt(dt); + if (follow || followDevice) applyInteractiveTilt(dt, performance.now()); s.advance(dt); // framerate-independent stepping s.clampMass(cap); draw(); @@ -256,6 +297,7 @@ const stop = () => { running = false; cancelAnimationFrame(raf); + deviceGravityEstimator.reset(); }; // Don't burn CPU rippling a puddle that's scrolled out of view. @@ -275,8 +317,12 @@ + -
diff --git a/src/lib/Puddle/Puddle.svelte.test.ts b/src/lib/Puddle/Puddle.svelte.test.ts index 499178e..2ca89c0 100644 --- a/src/lib/Puddle/Puddle.svelte.test.ts +++ b/src/lib/Puddle/Puddle.svelte.test.ts @@ -136,3 +136,52 @@ test('followCursor gently leans the puddle toward the pointer', async () => { } expect(after.right - after.left).toBeGreaterThan(target); }); + +test('deviceGravity leans the puddle using motion-sensor gravity', async () => { + await render(Puddle, { + props: { + animated: true, + deviceGravity: true, + deviceTilt: 8, + deviceEase: 0.05, + deviceNeutralWindow: 10, + style: 'width:760px;height:420px;', + }, + }); + const canvas = document.querySelector('canvas'); + expect(canvas).not.toBeNull(); + if (!canvas) return; + + let before = { left: 0, right: 0 }; + for (let i = 0; i < 120; i++) { + if (canvas.width > 0) { + before = paintedHalves(canvas); + if (before.left + before.right > 0) break; + } + await nextFrame(); + } + const total = before.left + before.right; + expect(total).toBeGreaterThan(0); + + window.dispatchEvent( + new DeviceMotionEvent('devicemotion', { + accelerationIncludingGravity: { x: 0, y: 0, z: 9.8 }, + interval: 16, + }), + ); + await new Promise((resolve) => void setTimeout(resolve, 100)); + + const target = before.right - before.left + total * 0.02; + let after = before; + for (let i = 0; i < 30 && after.right - after.left <= target; i++) { + window.dispatchEvent( + new DeviceMotionEvent('devicemotion', { + accelerationIncludingGravity: { x: -9.8, y: 0, z: 0 }, + interval: 16, + }), + ); + await new Promise((resolve) => void setTimeout(resolve, 100)); + after = paintedHalves(canvas); + } + expect(after.right - after.left).toBeGreaterThan(target); +}); diff --git a/src/lib/Puddle/deviceGravity.test.ts b/src/lib/Puddle/deviceGravity.test.ts new file mode 100644 index 0000000..7700737 --- /dev/null +++ b/src/lib/Puddle/deviceGravity.test.ts @@ -0,0 +1,119 @@ +import { describe, expect, it } from 'vitest'; + +import { + createDeviceGravityEstimator, + projectDeviceGravity, + requestDeviceGravityPermission, + type DeviceMotionReading, +} from './deviceGravity'; + +const reading = ( + acceleration: [number, number, number] | null, + rotation: [number, number, number] | null = null, + interval = 16, +): DeviceMotionReading => ({ + accelerationIncludingGravity: acceleration + ? { x: acceleration[0], y: acceleration[1], z: acceleration[2] } + : null, + rotationRate: rotation ? { alpha: rotation[0], beta: rotation[1], gamma: rotation[2] } : null, + interval, +}); + +describe('projectDeviceGravity', () => { + it('maps device gravity to the simulation sign convention in portrait', () => { + expect(projectDeviceGravity({ x: 0, y: 1, z: 0 }, 0, 6)).toEqual({ x: 0, y: -6 }); + const right = projectDeviceGravity({ x: -1, y: 0, z: 0 }, 0, 6); + expect(right.x).toBe(-6); + expect(right.y).toBeCloseTo(0); + }); + + it('rotates the device axes into the current screen orientation', () => { + const expectedByAngle = [ + { angle: 0, x: 6, y: 0 }, + { angle: 90, x: 0, y: -6 }, + { angle: 180, x: -6, y: 0 }, + { angle: 270, x: 0, y: 6 }, + ]; + for (const expected of expectedByAngle) { + const tilt = projectDeviceGravity({ x: 1, y: 0, z: 0 }, expected.angle, 6); + expect(tilt.x).toBeCloseTo(expected.x); + expect(tilt.y).toBeCloseTo(expected.y); + } + }); + + it('sanitizes invalid or negative strength', () => { + for (const tilt of [ + projectDeviceGravity({ x: 1, y: 1, z: 0 }, 0, -1), + projectDeviceGravity({ x: 1, y: 1, z: 0 }, NaN, NaN), + ]) { + expect(tilt.x).toBeCloseTo(0); + expect(tilt.y).toBeCloseTo(0); + } + }); +}); + +describe('requestDeviceGravityPermission', () => { + it('reports unsupported outside a browser', async () => { + await expect(requestDeviceGravityPermission()).resolves.toBe('unsupported'); + }); +}); + +describe('createDeviceGravityEstimator', () => { + it('uses acceleration including gravity as its stable reference', () => { + const estimator = createDeviceGravityEstimator(); + estimator.update(reading([-9.8, 0, 0]), 100); + const tilt = estimator.tilt(100, 0, 8); + expect(tilt?.x).toBeCloseTo(-8); + expect(tilt?.y).toBeCloseTo(0); + }); + + it('uses gyro data to predict between accelerometer readings', () => { + const estimator = createDeviceGravityEstimator(); + estimator.update(reading([0, 0, 9.8]), 0); + estimator.update(reading(null, [90, 0, 0], 100), 100); + const tilt = estimator.tilt(100, 0, 8); + expect(tilt?.y).toBeLessThan(-1); + }); + + it('ignores implausible acceleration and expires stale readings', () => { + const estimator = createDeviceGravityEstimator(); + estimator.update(reading([0, 9.8, 0]), 0); + estimator.update(reading([100, 0, 0]), 100); + expect(estimator.tilt(100, 0, 6)?.y).toBeCloseTo(-6); + expect(estimator.tilt(501, 0, 6)).toBeNull(); + }); + + it('clears its reading on reset', () => { + const estimator = createDeviceGravityEstimator(); + estimator.update(reading([0, 9.8, 0]), 0); + estimator.reset(); + expect(estimator.tilt(0, 0, 6)).toBeNull(); + }); + + it('continuously treats the trailing time-window average as neutral', () => { + const estimator = createDeviceGravityEstimator(); + estimator.update(reading([0, 0, 9.8]), 0, 1); + estimator.update(reading([-9.8, 0, 0]), 100, 1); + const initialLean = estimator.tilt(100, 0, 8, 1)?.x ?? 0; + expect(initialLean).toBeLessThan(-1); + + for (let now = 200; now <= 2500; now += 100) estimator.update(reading([-9.8, 0, 0]), now, 1); + const settledLean = estimator.tilt(2500, 0, 8, 1)?.x ?? Infinity; + expect(Math.abs(settledLean)).toBeLessThan(Math.abs(initialLean) * 0.1); + }); + + it('weights the neutral orientation by elapsed time instead of event count', () => { + const frequent = createDeviceGravityEstimator(); + const sparse = createDeviceGravityEstimator(); + for (const estimator of [frequent, sparse]) { + estimator.update(reading([0, 0, 9.8]), 0, 2); + estimator.update(reading(null, [0, 90, 0], 100), 100, 2); + } + for (let now = 200; now <= 900; now += 100) frequent.update(reading(null, [0, 0, 0]), now, 2); + sparse.update(reading(null, [0, 0, 0]), 900, 2); + + const frequentLean = frequent.tilt(900, 0, 8, 2)?.x ?? 0; + const sparseLean = sparse.tilt(900, 0, 8, 2)?.x ?? 0; + expect(frequentLean).toBeCloseTo(sparseLean, 1); + }); +}); diff --git a/src/lib/Puddle/deviceGravity.ts b/src/lib/Puddle/deviceGravity.ts new file mode 100644 index 0000000..821a035 --- /dev/null +++ b/src/lib/Puddle/deviceGravity.ts @@ -0,0 +1,272 @@ +export type DeviceGravityPermission = 'granted' | 'denied' | 'unsupported'; + +export interface DeviceMotionReading { + readonly accelerationIncludingGravity: { + readonly x: number | null; + readonly y: number | null; + readonly z: number | null; + } | null; + readonly rotationRate: { + readonly alpha: number | null; + readonly beta: number | null; + readonly gamma: number | null; + } | null; + readonly interval: number; +} + +export interface DeviceGravityTilt { + readonly x: number; + readonly y: number; +} + +export interface DeviceGravityEstimator { + readonly update: ( + reading: DeviceMotionReading, + nowMs: number, + neutralWindowSeconds?: number, + ) => void; + readonly tilt: ( + nowMs: number, + screenAngle: number, + strength: number, + neutralWindowSeconds?: number, + ) => DeviceGravityTilt | null; + readonly reset: () => void; +} + +interface Vector3 { + readonly x: number; + readonly y: number; + readonly z: number; +} + +interface TimedVector { + readonly at: number; + readonly vector: Vector3; +} + +type MotionEventConstructor = typeof DeviceMotionEvent & { + requestPermission?: () => Promise; +}; + +const ACCEL_CORRECTION_TAU = 0.25; +const MIN_GRAVITY_MAGNITUDE = 2; +const MAX_GRAVITY_MAGNITUDE = 20; +const MAX_GYRO_RATE = 720; +const MAX_SENSOR_DT = 0.1; +const STALE_AFTER_MS = 500; +const DEGREES_TO_RADIANS = Math.PI / 180; + +const finite = (value: number | null | undefined): value is number => + value !== null && value !== undefined && Number.isFinite(value); + +function normalize(vector: Vector3): Vector3 | null { + const length = Math.hypot(vector.x, vector.y, vector.z); + if (!Number.isFinite(length) || length === 0) return null; + return { x: vector.x / length, y: vector.y / length, z: vector.z / length }; +} + +function accelerationVector(reading: DeviceMotionReading): Vector3 | null { + const acceleration = reading.accelerationIncludingGravity; + if ( + !acceleration || + !finite(acceleration.x) || + !finite(acceleration.y) || + !finite(acceleration.z) + ) + return null; + const magnitude = Math.hypot(acceleration.x, acceleration.y, acceleration.z); + if (magnitude < MIN_GRAVITY_MAGNITUDE || magnitude > MAX_GRAVITY_MAGNITUDE) return null; + return normalize({ x: acceleration.x, y: acceleration.y, z: acceleration.z }); +} + +function gyroVector(reading: DeviceMotionReading): Vector3 | null { + const rate = reading.rotationRate; + if (!rate) return null; + const values = [rate.alpha, rate.beta, rate.gamma]; + if (!values.some(finite)) return null; + const radians = values.map((value) => + finite(value) + ? Math.max(-MAX_GYRO_RATE, Math.min(MAX_GYRO_RATE, value)) * DEGREES_TO_RADIANS + : 0, + ); + return { x: radians[0] ?? 0, y: radians[1] ?? 0, z: radians[2] ?? 0 }; +} + +// A fixed world vector appears to rotate opposite the device's angular velocity. +function predictFromGyro(vector: Vector3, angularVelocity: Vector3, dt: number): Vector3 { + const crossX = angularVelocity.y * vector.z - angularVelocity.z * vector.y; + const crossY = angularVelocity.z * vector.x - angularVelocity.x * vector.z; + const crossZ = angularVelocity.x * vector.y - angularVelocity.y * vector.x; + return ( + normalize({ + x: vector.x - crossX * dt, + y: vector.y - crossY * dt, + z: vector.z - crossZ * dt, + }) ?? vector + ); +} + +function blend(from: Vector3, to: Vector3, amount: number): Vector3 { + return ( + normalize({ + x: from.x + (to.x - from.x) * amount, + y: from.y + (to.y - from.y) * amount, + z: from.z + (to.z - from.z) * amount, + }) ?? to + ); +} + +const neutralWindowMs = (seconds: number): number => + Number.isFinite(seconds) && seconds > 0 ? seconds * 1000 : 0; + +export function projectDeviceGravity( + vector: Vector3, + screenAngle: number, + strength: number, +): DeviceGravityTilt { + const magnitude = Number.isFinite(strength) ? Math.max(0, strength) : 0; + const angle = Number.isFinite(screenAngle) ? screenAngle * DEGREES_TO_RADIANS : 0; + const naturalX = vector.x * magnitude; + const naturalY = -vector.y * magnitude; + const cosine = Math.cos(angle); + const sine = Math.sin(angle); + return { + x: cosine * naturalX + sine * naturalY, + y: -sine * naturalX + cosine * naturalY, + }; +} + +export function createDeviceGravityEstimator(): DeviceGravityEstimator { + let gravity: Vector3 | null = null; + let previousReadingAt: number | null = null; + let lastUsefulReadingAt: number | null = null; + let gravityHistory: TimedVector[] = []; + let historyStart = 0; + + const clearHistory = (): void => { + gravityHistory = []; + historyStart = 0; + }; + + const pruneHistory = (cutoff: number): void => { + while ( + historyStart + 1 < gravityHistory.length && + (gravityHistory[historyStart + 1]?.at ?? Infinity) <= cutoff + ) + historyStart++; + if (historyStart > 256 && historyStart * 2 > gravityHistory.length) { + gravityHistory = gravityHistory.slice(historyStart); + historyStart = 0; + } + }; + + const recordGravity = (nowMs: number, windowMs: number): void => { + if (!gravity || windowMs === 0) { + clearHistory(); + return; + } + const last = gravityHistory.at(-1); + if (last?.at === nowMs) + gravityHistory[gravityHistory.length - 1] = { at: nowMs, vector: gravity }; + else gravityHistory.push({ at: nowMs, vector: gravity }); + pruneHistory(nowMs - windowMs); + }; + + const rollingNeutral = (nowMs: number, windowMs: number): Vector3 | null => { + const first = gravityHistory[historyStart]; + const latest = gravityHistory.at(-1); + if (!first || !latest || windowMs === 0) return null; + + const windowStart = Math.max(nowMs - windowMs, first.at); + let x = 0; + let y = 0; + let z = 0; + let duration = 0; + for (let i = historyStart; i < gravityHistory.length; i++) { + const sample = gravityHistory[i]; + if (!sample) continue; + const segmentStart = Math.max(windowStart, sample.at); + const segmentEnd = Math.min(nowMs, gravityHistory[i + 1]?.at ?? nowMs); + const segmentDuration = Math.max(0, segmentEnd - segmentStart); + x += sample.vector.x * segmentDuration; + y += sample.vector.y * segmentDuration; + z += sample.vector.z * segmentDuration; + duration += segmentDuration; + } + return duration > 0 ? { x: x / duration, y: y / duration, z: z / duration } : latest.vector; + }; + + const update = (reading: DeviceMotionReading, nowMs: number, neutralWindowSeconds = 0): void => { + if (!Number.isFinite(nowMs)) return; + const intervalSeconds = Number.isFinite(reading.interval) ? reading.interval / 1000 : 0; + const elapsedSeconds = + previousReadingAt === null + ? intervalSeconds + : Math.max(0, (nowMs - previousReadingAt) / 1000); + const dt = Math.min(MAX_SENSOR_DT, elapsedSeconds); + previousReadingAt = nowMs; + + const angularVelocity = gyroVector(reading); + if (gravity && angularVelocity && dt > 0) + gravity = predictFromGyro(gravity, angularVelocity, dt); + + const measuredGravity = accelerationVector(reading); + if (measuredGravity) { + const correction = gravity ? 1 - Math.exp(-Math.max(dt, 1 / 120) / ACCEL_CORRECTION_TAU) : 1; + gravity = gravity ? blend(gravity, measuredGravity, correction) : measuredGravity; + } + + if (gravity && (measuredGravity || angularVelocity)) { + lastUsefulReadingAt = nowMs; + recordGravity(nowMs, neutralWindowMs(neutralWindowSeconds)); + } + }; + + const tilt = ( + nowMs: number, + screenAngle: number, + strength: number, + neutralWindowSeconds = 0, + ): DeviceGravityTilt | null => { + if ( + !gravity || + lastUsefulReadingAt === null || + !Number.isFinite(nowMs) || + nowMs - lastUsefulReadingAt > STALE_AFTER_MS + ) + return null; + const current = projectDeviceGravity(gravity, screenAngle, strength); + const neutral = rollingNeutral(nowMs, neutralWindowMs(neutralWindowSeconds)); + if (!neutral) return current; + const baseline = projectDeviceGravity(neutral, screenAngle, strength); + return { x: current.x - baseline.x, y: current.y - baseline.y }; + }; + + const reset = (): void => { + gravity = null; + previousReadingAt = null; + lastUsefulReadingAt = null; + clearHistory(); + }; + + return { update, tilt, reset }; +} + +/** Request motion access. Call from an intentional user gesture on browsers that prompt. */ +export async function requestDeviceGravityPermission(): Promise { + if ( + typeof window === 'undefined' || + !window.isSecureContext || + typeof window.DeviceMotionEvent !== 'function' + ) + return 'unsupported'; + + const motionEvent = window.DeviceMotionEvent as MotionEventConstructor; + if (!motionEvent.requestPermission) return 'granted'; + try { + return (await motionEvent.requestPermission()) === 'granted' ? 'granted' : 'denied'; + } catch { + return 'denied'; + } +} diff --git a/src/lib/index.ts b/src/lib/index.ts index 4414a59..ccd691c 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -13,4 +13,8 @@ export { type PaletteSwatch, } from './ColorPalette/palette'; export { default as Puddle } from './Puddle/Puddle.svelte'; +export { + requestDeviceGravityPermission, + type DeviceGravityPermission, +} from './Puddle/deviceGravity'; export { default as SprayBorder } from './SprayBorder/SprayBorder.svelte'; From 5643304f340cdf17a7a70dd8f53f911528cc32cc Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 00:01:28 -0700 Subject: [PATCH 053/141] test(puddle): guard against momentum checkerboarding --- src/lib/Puddle/sim/checkerboard.test.ts | 146 ++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 src/lib/Puddle/sim/checkerboard.test.ts diff --git a/src/lib/Puddle/sim/checkerboard.test.ts b/src/lib/Puddle/sim/checkerboard.test.ts new file mode 100644 index 0000000..ff03b67 --- /dev/null +++ b/src/lib/Puddle/sim/checkerboard.test.ts @@ -0,0 +1,146 @@ +import { describe, expect, it } from 'vitest'; + +import type { FluxField } from './types'; +import { createWaterSim } from './index'; + +interface InternalSim { + engine: { resources: { currentFlux: () => FluxField } }; +} + +interface CheckerSample { + parityFraction: number; + lagSignature: number; +} + +function percentile(values: number[], fraction: number): number { + const sorted = [...values].sort((a, b) => a - b); + return sorted[Math.min(sorted.length - 1, Math.floor(fraction * sorted.length))] ?? 0; +} + +function isNearShoreline( + depth: Float32Array, + nx: number, + ny: number, + column: number, + row: number, +): boolean { + let hasWetCell = false; + let hasDryCell = false; + for (let y = Math.max(0, row - 1); y <= Math.min(ny - 1, row + 1); y++) { + for (let x = Math.max(0, column - 1); x <= Math.min(nx - 1, column + 1); x++) { + if ((depth[y * nx + x] ?? 0) > 0.15) hasWetCell = true; + else hasDryCell = true; + } + } + return hasWetCell && hasDryCell; +} + +function checkerSample( + field: Float32Array, + width: number, + height: number, + include: (column: number, row: number) => boolean, +): CheckerSample | undefined { + const residual = new Float64Array(field.length); + const active = new Uint8Array(field.length); + let residualEnergy = 0; + let parityProjection = 0; + let activeCount = 0; + for (let row = 1; row < height - 1; row++) { + for (let column = 1; column < width - 1; column++) { + if (!include(column, row)) continue; + const index = row * width + column; + const neighborMean = + ((field[index - 1] ?? 0) + + (field[index + 1] ?? 0) + + (field[index - width] ?? 0) + + (field[index + width] ?? 0)) / + 4; + const value = (field[index] ?? 0) - neighborMean; + residual[index] = value; + active[index] = 1; + residualEnergy += value * value; + parityProjection += value * ((column + row) % 2 === 0 ? 1 : -1); + activeCount++; + } + } + if (activeCount < 8 || residualEnergy === 0) return undefined; + + const correlation = (lag: number) => { + let product = 0; + let firstEnergy = 0; + let secondEnergy = 0; + for (let row = 1; row < height - 1; row++) { + for (let column = 1; column < width - 1; column++) { + const index = row * width + column; + if (active[index] !== 1) continue; + for (const next of [index + lag, index + lag * width]) { + if (active[next] !== 1) continue; + product += residual[index] * residual[next]; + firstEnergy += residual[index] ** 2; + secondEnergy += residual[next] ** 2; + } + } + } + return firstEnergy > 0 && secondEnergy > 0 + ? product / Math.sqrt(firstEnergy * secondEnergy) + : 0; + }; + return { + parityFraction: (parityProjection * parityProjection) / (activeCount * residualEnergy), + lagSignature: (correlation(2) - correlation(1)) / 2, + }; +} + +function runStrongTilt(seed: number) { + const nx = 29; + const ny = 16; + const sim = createWaterSim({ + nx, + ny, + seed, + integrator: 'pipes+momentum', + level: 0.58, + momentumSmoothing: 0, + momentumRetention: 0.82, + gravityDrift: false, + }); + sim.settle(60); + sim.setTiltOffset(-8, 0); + const samples: CheckerSample[] = []; + for (let step = 0; step < 120; step++) { + sim.step(0.05); + if (step < 10) continue; + const depth = sim.height; + const flux = (sim as unknown as InternalSim).engine.resources.currentFlux(); + const fx = checkerSample(flux.fx, nx + 1, ny, (column, row) => + [clamp(column - 1, 0, nx - 1), clamp(column, 0, nx - 1)].some((x) => + isNearShoreline(depth, nx, ny, x, row), + ), + ); + const fy = checkerSample(flux.fy, nx, ny + 1, (column, row) => + [clamp(row - 1, 0, ny - 1), clamp(row, 0, ny - 1)].some((y) => + isNearShoreline(depth, nx, ny, column, y), + ), + ); + if (fx) samples.push(fx); + if (fy) samples.push(fy); + } + return samples; +} + +function clamp(value: number, minimum: number, maximum: number): number { + return Math.max(minimum, Math.min(maximum, value)); +} + +describe('momentum checkerboard regression', () => { + it('does not develop a coherent odd/even shoreline mode under strong tilt', () => { + const samples = Array.from({ length: 8 }, (_, index) => runStrongTilt(index + 1)).flat(); + const parity = samples.map(({ parityFraction }) => parityFraction); + const lag = samples.map(({ lagSignature }) => lagSignature); + expect(samples.length).toBeGreaterThan(0); + // A coherent checkerboard approaches 1 for both metrics. + expect(percentile(parity, 0.95)).toBeLessThan(0.03); + expect(percentile(lag, 0.95)).toBeLessThan(0.17); + }); +}); From ab81ecd1268d014fa68da7f03e7856fcd4adb019 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 01:36:29 -0700 Subject: [PATCH 054/141] refactor(puddle): split implementation by concern --- src/lib/Puddle/Puddle.stories.svelte | 196 ---------- src/lib/Puddle/Puddle.svelte | 279 ++++---------- src/lib/Puddle/Puddle.svelte.test.ts | 187 ---------- src/lib/Puddle/config.ts | 138 +++++++ .../Puddle/{ => device}/deviceGravity.test.ts | 2 +- src/lib/Puddle/device/estimator.ts | 81 ++++ src/lib/Puddle/device/history.ts | 61 ++++ src/lib/Puddle/device/index.ts | 9 + src/lib/Puddle/device/math.ts | 85 +++++ src/lib/Puddle/device/permission.ts | 23 ++ src/lib/Puddle/device/types.ts | 46 +++ src/lib/Puddle/deviceGravity.ts | 272 -------------- src/lib/Puddle/{ => render}/puddleRenderer.ts | 0 src/lib/Puddle/runtime/puddleLoop.ts | 118 ++++++ src/lib/Puddle/sim/facade/config.ts | 87 +++++ src/lib/Puddle/sim/facade/defaults.ts | 20 + src/lib/Puddle/sim/facade/index.ts | 3 + src/lib/Puddle/sim/facade/options.ts | 41 +++ src/lib/Puddle/sim/facade/waterSim.ts | 92 +++++ src/lib/Puddle/sim/index.ts | 202 +--------- src/lib/Puddle/sim/passes.ts | 345 ------------------ src/lib/Puddle/sim/passes/common.ts | 65 ++++ src/lib/Puddle/sim/passes/index.ts | 57 +++ src/lib/Puddle/sim/passes/momentum.ts | 108 ++++++ src/lib/Puddle/sim/passes/pipes.ts | 107 ++++++ .../sim/{ => tests}/checkerboard.test.ts | 14 +- src/lib/Puddle/sim/tests/emitters.test.ts | 25 ++ .../facade.test.ts} | 123 +------ .../sim/tests/governor-engine-timing.test.ts | 70 ++++ src/lib/Puddle/sim/tests/params.test.ts | 31 ++ src/lib/Puddle/stories/Puddle.stories.svelte | 84 +++++ src/lib/Puddle/stories/storyConfig.ts | 56 +++ .../tests/Puddle.interaction.svelte.test.ts | 93 +++++ .../tests/Puddle.rendering.svelte.test.ts | 46 +++ src/lib/Puddle/tests/canvas.ts | 61 ++++ src/lib/index.ts | 5 +- 36 files changed, 1699 insertions(+), 1533 deletions(-) delete mode 100644 src/lib/Puddle/Puddle.stories.svelte delete mode 100644 src/lib/Puddle/Puddle.svelte.test.ts create mode 100644 src/lib/Puddle/config.ts rename src/lib/Puddle/{ => device}/deviceGravity.test.ts (99%) create mode 100644 src/lib/Puddle/device/estimator.ts create mode 100644 src/lib/Puddle/device/history.ts create mode 100644 src/lib/Puddle/device/index.ts create mode 100644 src/lib/Puddle/device/math.ts create mode 100644 src/lib/Puddle/device/permission.ts create mode 100644 src/lib/Puddle/device/types.ts delete mode 100644 src/lib/Puddle/deviceGravity.ts rename src/lib/Puddle/{ => render}/puddleRenderer.ts (100%) create mode 100644 src/lib/Puddle/runtime/puddleLoop.ts create mode 100644 src/lib/Puddle/sim/facade/config.ts create mode 100644 src/lib/Puddle/sim/facade/defaults.ts create mode 100644 src/lib/Puddle/sim/facade/index.ts create mode 100644 src/lib/Puddle/sim/facade/options.ts create mode 100644 src/lib/Puddle/sim/facade/waterSim.ts delete mode 100644 src/lib/Puddle/sim/passes.ts create mode 100644 src/lib/Puddle/sim/passes/common.ts create mode 100644 src/lib/Puddle/sim/passes/index.ts create mode 100644 src/lib/Puddle/sim/passes/momentum.ts create mode 100644 src/lib/Puddle/sim/passes/pipes.ts rename src/lib/Puddle/sim/{ => tests}/checkerboard.test.ts (92%) create mode 100644 src/lib/Puddle/sim/tests/emitters.test.ts rename src/lib/Puddle/sim/{waterSim.test.ts => tests/facade.test.ts} (63%) create mode 100644 src/lib/Puddle/sim/tests/governor-engine-timing.test.ts create mode 100644 src/lib/Puddle/sim/tests/params.test.ts create mode 100644 src/lib/Puddle/stories/Puddle.stories.svelte create mode 100644 src/lib/Puddle/stories/storyConfig.ts create mode 100644 src/lib/Puddle/tests/Puddle.interaction.svelte.test.ts create mode 100644 src/lib/Puddle/tests/Puddle.rendering.svelte.test.ts create mode 100644 src/lib/Puddle/tests/canvas.ts diff --git a/src/lib/Puddle/Puddle.stories.svelte b/src/lib/Puddle/Puddle.stories.svelte deleted file mode 100644 index e59fe5f..0000000 --- a/src/lib/Puddle/Puddle.stories.svelte +++ /dev/null @@ -1,196 +0,0 @@ - - - - -{#snippet template(args: Args)} -
- -
-{/snippet} - - { - const canvas = canvasElement.querySelector('canvas'); - await expect(canvas).not.toBeNull(); - if (!canvas) return; - let frac = 0; - for (let i = 0; i < 60; i++) { - frac = paintedFraction(canvas); - if (frac > 0) break; - await nextFrame(); - } - // A puddle covers part of the box but not all of it. - await expect(frac).toBeGreaterThan(0.1); - await expect(frac).toBeLessThan(0.95); - }} -/> - - -{#snippet hero(args: Args)} -
- - SUMMER SUMMIT
GAME JAM 2026
-
-
-{/snippet} - - - - - - - - - - - - -{#snippet device(args: Args)} -
- - Permission: {devicePermission} - -
-{/snippet} - - - diff --git a/src/lib/Puddle/Puddle.svelte b/src/lib/Puddle/Puddle.svelte index 447f1cb..b467535 100644 --- a/src/lib/Puddle/Puddle.svelte +++ b/src/lib/Puddle/Puddle.svelte @@ -1,154 +1,80 @@ diff --git a/src/lib/Puddle/Puddle.svelte.test.ts b/src/lib/Puddle/Puddle.svelte.test.ts deleted file mode 100644 index 2ca89c0..0000000 --- a/src/lib/Puddle/Puddle.svelte.test.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { expect, test } from 'vitest'; -import { render } from 'vitest-browser-svelte'; - -import Puddle from './Puddle.svelte'; - -const nextFrame = () => - new Promise((resolve) => { - requestAnimationFrame(() => { - requestAnimationFrame(() => { - resolve(); - }); - }); - }); - -function ctxOf(canvas: HTMLCanvasElement): CanvasRenderingContext2D { - const ctx = canvas.getContext('2d', { willReadFrequently: true }); - if (!ctx) throw new Error('no 2d context'); - return ctx; -} - -function rgbaAt(canvas: HTMLCanvasElement, fx: number, fy: number): Uint8ClampedArray { - const x = Math.floor(canvas.width * fx); - const y = Math.floor(canvas.height * fy); - return ctxOf(canvas).getImageData(x, y, 1, 1).data; -} - -function alphaAt(canvas: HTMLCanvasElement, fx: number, fy: number): number { - return rgbaAt(canvas, fx, fy)[3] ?? 0; -} - -function paintedFraction(canvas: HTMLCanvasElement): number { - const { data } = ctxOf(canvas).getImageData(0, 0, canvas.width, canvas.height); - let n = 0; - for (let i = 3; i < data.length; i += 4) if ((data[i] ?? 0) > 0) n++; - return n / (canvas.width * canvas.height); -} - -function paintedHalves(canvas: HTMLCanvasElement): { left: number; right: number } { - const { data } = ctxOf(canvas).getImageData(0, 0, canvas.width, canvas.height); - let left = 0; - let right = 0; - for (let y = 0; y < canvas.height; y++) { - for (let x = 0; x < canvas.width; x++) { - if ((data[(y * canvas.width + x) * 4 + 3] ?? 0) > 0) { - if (x < canvas.width / 2) left++; - else right++; - } - } - } - return { left, right }; -} - -test('renders a thresholded puddle silhouette', async () => { - await render(Puddle, { - props: { animated: false, color: '#141414', style: 'width:760px;height:420px;' }, - }); - const canvas = document.querySelector('canvas'); - expect(canvas).not.toBeNull(); - if (!canvas) return; - - let frac = 0; - for (let i = 0; i < 120; i++) { - if (canvas.width > 0) { - frac = paintedFraction(canvas); - if (frac > 0) break; - } - await nextFrame(); - } - - // A puddle covers a chunk of the box but leaves green around it. - expect(frac).toBeGreaterThan(0.1); - expect(frac).toBeLessThan(0.9); - // Opaque in the middle, transparent in the corners => a rounded blob, not a filled rectangle. - expect(alphaAt(canvas, 0.5, 0.5)).toBeGreaterThan(0); - expect(alphaAt(canvas, 0.02, 0.03)).toBe(0); - expect(alphaAt(canvas, 0.98, 0.97)).toBe(0); -}); - -test('accepts a culori Color object for `color`', async () => { - await render(Puddle, { - props: { - animated: false, - color: { mode: 'rgb', r: 1, g: 0, b: 0 }, - style: 'width:760px;height:420px;', - }, - }); - const canvas = document.querySelector('canvas'); - expect(canvas).not.toBeNull(); - if (!canvas) return; - - for (let i = 0; i < 120; i++) { - if (canvas.width > 0 && alphaAt(canvas, 0.5, 0.5) > 0) break; - await nextFrame(); - } - - // The object's red, not the near-black fallback a dropped color would give. - const px = rgbaAt(canvas, 0.5, 0.5); - expect([px[0], px[1], px[2], (px[3] ?? 0) > 0]).toEqual([255, 0, 0, true]); -}); - -test('followCursor gently leans the puddle toward the pointer', async () => { - await render(Puddle, { - props: { animated: true, followCursor: true, style: 'width:760px;height:420px;' }, - }); - const canvas = document.querySelector('canvas'); - expect(canvas).not.toBeNull(); - if (!canvas) return; - - let before = { left: 0, right: 0 }; - for (let i = 0; i < 120; i++) { - if (canvas.width > 0) { - before = paintedHalves(canvas); - if (before.left + before.right > 0) break; - } - await nextFrame(); - } - const total = before.left + before.right; - expect(total).toBeGreaterThan(0); - - // Hold the cursor well to the right of the puddle and let the loop run. - const rect = canvas.getBoundingClientRect(); - window.dispatchEvent( - new PointerEvent('pointermove', { - clientX: Math.min(window.innerWidth - 2, rect.right + 300), - clientY: rect.top + rect.height / 2, - }), - ); - // Poll for the migration instead of a fixed wait: under full-suite load RAF - // starves and the lean accumulates slower. 2% of the painted area is ~10 grid - // cells of systematic shift — far beyond raindrop jitter (~1 cell of wobble). - const target = before.right - before.left + total * 0.02; - let after = before; - for (let i = 0; i < 30 && after.right - after.left <= target; i++) { - await new Promise((r) => void setTimeout(r, 500)); - after = paintedHalves(canvas); - } - expect(after.right - after.left).toBeGreaterThan(target); -}); - -test('deviceGravity leans the puddle using motion-sensor gravity', async () => { - await render(Puddle, { - props: { - animated: true, - deviceGravity: true, - deviceTilt: 8, - deviceEase: 0.05, - deviceNeutralWindow: 10, - style: 'width:760px;height:420px;', - }, - }); - const canvas = document.querySelector('canvas'); - expect(canvas).not.toBeNull(); - if (!canvas) return; - - let before = { left: 0, right: 0 }; - for (let i = 0; i < 120; i++) { - if (canvas.width > 0) { - before = paintedHalves(canvas); - if (before.left + before.right > 0) break; - } - await nextFrame(); - } - const total = before.left + before.right; - expect(total).toBeGreaterThan(0); - - window.dispatchEvent( - new DeviceMotionEvent('devicemotion', { - accelerationIncludingGravity: { x: 0, y: 0, z: 9.8 }, - interval: 16, - }), - ); - await new Promise((resolve) => void setTimeout(resolve, 100)); - - const target = before.right - before.left + total * 0.02; - let after = before; - for (let i = 0; i < 30 && after.right - after.left <= target; i++) { - window.dispatchEvent( - new DeviceMotionEvent('devicemotion', { - accelerationIncludingGravity: { x: -9.8, y: 0, z: 0 }, - interval: 16, - }), - ); - await new Promise((resolve) => void setTimeout(resolve, 100)); - after = paintedHalves(canvas); - } - expect(after.right - after.left).toBeGreaterThan(target); -}); diff --git a/src/lib/Puddle/config.ts b/src/lib/Puddle/config.ts new file mode 100644 index 0000000..12218c5 --- /dev/null +++ b/src/lib/Puddle/config.ts @@ -0,0 +1,138 @@ +import type { Snippet } from 'svelte'; +import type { HTMLAttributes } from 'svelte/elements'; + +import type { Color } from 'culori'; + +import type { IntegratorId } from './waterSim'; + +// Omit the deprecated HTML `color` attribute; intersecting with it would +// collapse the prop type to `string` and reject culori Color objects. +export type PuddleProps = Omit, 'color'> & { + /** Puddle fill color. Any CSS color string or culori Color. */ + color?: string | Color; + /** Display size of one grid cell, in CSS px. Bigger = chunkier blocks. */ + cellSize?: number; + /** Depth above which a cell is painted. */ + threshold?: number; + /** Resting water level; higher fills more of the bowl (bigger puddle). */ + level?: number; + /** Terrain seed; changes the organic edge shape. */ + seed?: number; + /** Low-frequency edge roughness. */ + noiseAmp?: number; + /** Ripple with raindrops instead of holding the settled shape. Ignored under prefers-reduced-motion. */ + animated?: boolean; + /** Gently tilt gravity toward the pointer so the water leans after the cursor. Needs `animated`; ignored under prefers-reduced-motion. */ + followCursor?: boolean; + /** Simulation pipeline: pipe core, or the momentum second implementation. */ + integrator?: IntegratorId; + /** Momentum-only: grid-scale oscillation damping (0 = off, 1 = full). Applies to `integrator="pipes+momentum"`. */ + momentumSmoothing?: number; + /** Momentum-only: how much carried momentum survives each substep (1 = lossless, lower = calmer). Applies to `integrator="pipes+momentum"`. */ + momentumRetention?: number; + /** Animation speed: sim-seconds advanced per real-second. Needs `animated`. */ + timeScale?: number; + /** Target physics substep size (sim-seconds); smaller = more accurate, costlier. */ + baseSubstep?: number; + /** Per-frame substep ceiling (spiral-of-death guard). Needs `animated`. */ + maxSubsteps?: number; + /** Gravity-wave CFL safety margin (0–1); higher is faster but risks instability. */ + cflSafety?: number; + /** Depth floor in the CFL estimate. */ + minWaveDepth?: number; + /** Sub-steps run to settle poured water before the first paint. */ + settleSubsteps?: number; + /** Drift the puddle's lean with noise so it gently sloshes direction. Needs `animated`. */ + gravityDrift?: boolean; + /** Noise-drift magnitude (only with `gravityDrift`). */ + driftAmp?: number; + /** Noise-drift rate in Hz (only with `gravityDrift`). */ + driftRateHz?: number; + /** Raindrop cadence in sim-seconds (only when `animated`). */ + rainInterval?: number; + /** Depth each raindrop adds (only when `animated`). */ + rainAmount?: number; + /** Raindrop radius in cells (only when `animated`). */ + rainRadius?: number; + /** Resolution guardrail: max grid cells per axis. */ + maxCells?: number; + /** Cursor-follow tilt strength (only with `followCursor`). */ + cursorTilt?: number; + /** Cursor-follow easing time-constant in seconds (only with `followCursor`). */ + cursorEase?: number; + /** Lean with device motion sensors after permission is requested. Needs `animated`; ignored under prefers-reduced-motion. */ + deviceGravity?: boolean; + /** Maximum device-driven in-plane gravity. */ + deviceTilt?: number; + /** Device-gravity easing time-constant in seconds. */ + deviceEase?: number; + /** Trailing window averaged as the neutral device orientation, in seconds. Zero disables neutralization. */ + deviceNeutralWindow?: number; + children?: Snippet; +}; + +type PuddleDefaultKey = + | 'color' + | 'cellSize' + | 'threshold' + | 'level' + | 'seed' + | 'noiseAmp' + | 'animated' + | 'followCursor' + | 'integrator' + | 'momentumSmoothing' + | 'momentumRetention' + | 'timeScale' + | 'baseSubstep' + | 'maxSubsteps' + | 'cflSafety' + | 'minWaveDepth' + | 'settleSubsteps' + | 'gravityDrift' + | 'driftAmp' + | 'driftRateHz' + | 'rainInterval' + | 'rainAmount' + | 'rainRadius' + | 'maxCells' + | 'cursorTilt' + | 'cursorEase' + | 'deviceGravity' + | 'deviceTilt' + | 'deviceEase' + | 'deviceNeutralWindow'; + +/** Default values for every Puddle-specific prop. Spread into stories to match the component. */ +export const PUDDLE_DEFAULTS = { + color: '#141414', + cellSize: 19, + threshold: 0.035, + level: 0.42, + seed: 7, + noiseAmp: 0.4, + animated: false, + followCursor: false, + integrator: 'pipes+momentum', + momentumSmoothing: 0, + momentumRetention: 0.98, + timeScale: 6, + baseSubstep: 0.08, + maxSubsteps: 8, + cflSafety: 0.9, + minWaveDepth: 0.001, + settleSubsteps: 90, + gravityDrift: true, + driftAmp: 1, + driftRateHz: 0.05, + rainInterval: 0.6, + rainAmount: 0.06, + rainRadius: 1.5, + maxCells: 200, + cursorTilt: 1.7, + cursorEase: 0.2, + deviceGravity: false, + deviceTilt: 6, + deviceEase: 0.18, + deviceNeutralWindow: 2, +} as const satisfies Required>; diff --git a/src/lib/Puddle/deviceGravity.test.ts b/src/lib/Puddle/device/deviceGravity.test.ts similarity index 99% rename from src/lib/Puddle/deviceGravity.test.ts rename to src/lib/Puddle/device/deviceGravity.test.ts index 7700737..50e7845 100644 --- a/src/lib/Puddle/deviceGravity.test.ts +++ b/src/lib/Puddle/device/deviceGravity.test.ts @@ -5,7 +5,7 @@ import { projectDeviceGravity, requestDeviceGravityPermission, type DeviceMotionReading, -} from './deviceGravity'; +} from './index'; const reading = ( acceleration: [number, number, number] | null, diff --git a/src/lib/Puddle/device/estimator.ts b/src/lib/Puddle/device/estimator.ts new file mode 100644 index 0000000..7913b27 --- /dev/null +++ b/src/lib/Puddle/device/estimator.ts @@ -0,0 +1,81 @@ +import { createGravityHistory } from './history'; +import { + accelerationVector, + blend, + gyroVector, + neutralWindowMs, + predictFromGyro, + projectDeviceGravity, +} from './math'; +import type { + DeviceGravityEstimator, + DeviceGravityTilt, + DeviceMotionReading, + Vector3, +} from './types'; + +const ACCEL_CORRECTION_TAU = 0.25; +const MAX_SENSOR_DT = 0.1; +const STALE_AFTER_MS = 500; + +export function createDeviceGravityEstimator(): DeviceGravityEstimator { + let gravity: Vector3 | null = null; + let previousReadingAt: number | null = null; + let lastUsefulReadingAt: number | null = null; + const history = createGravityHistory(); + + const update = (reading: DeviceMotionReading, nowMs: number, neutralWindowSeconds = 0): void => { + if (!Number.isFinite(nowMs)) return; + const intervalSeconds = Number.isFinite(reading.interval) ? reading.interval / 1000 : 0; + const elapsedSeconds = + previousReadingAt === null + ? intervalSeconds + : Math.max(0, (nowMs - previousReadingAt) / 1000); + const dt = Math.min(MAX_SENSOR_DT, elapsedSeconds); + previousReadingAt = nowMs; + + const angularVelocity = gyroVector(reading); + if (gravity && angularVelocity && dt > 0) + gravity = predictFromGyro(gravity, angularVelocity, dt); + + const measuredGravity = accelerationVector(reading); + if (measuredGravity) { + const correction = gravity ? 1 - Math.exp(-Math.max(dt, 1 / 120) / ACCEL_CORRECTION_TAU) : 1; + gravity = gravity ? blend(gravity, measuredGravity, correction) : measuredGravity; + } + + if (gravity && (measuredGravity || angularVelocity)) { + lastUsefulReadingAt = nowMs; + history.record(gravity, nowMs, neutralWindowMs(neutralWindowSeconds)); + } + }; + + const tilt = ( + nowMs: number, + screenAngle: number, + strength: number, + neutralWindowSeconds = 0, + ): DeviceGravityTilt | null => { + if ( + !gravity || + lastUsefulReadingAt === null || + !Number.isFinite(nowMs) || + nowMs - lastUsefulReadingAt > STALE_AFTER_MS + ) + return null; + const current = projectDeviceGravity(gravity, screenAngle, strength); + const neutral = history.rollingNeutral(nowMs, neutralWindowMs(neutralWindowSeconds)); + if (!neutral) return current; + const baseline = projectDeviceGravity(neutral, screenAngle, strength); + return { x: current.x - baseline.x, y: current.y - baseline.y }; + }; + + const reset = (): void => { + gravity = null; + previousReadingAt = null; + lastUsefulReadingAt = null; + history.clear(); + }; + + return { update, tilt, reset }; +} diff --git a/src/lib/Puddle/device/history.ts b/src/lib/Puddle/device/history.ts new file mode 100644 index 0000000..c84fd5c --- /dev/null +++ b/src/lib/Puddle/device/history.ts @@ -0,0 +1,61 @@ +import type { TimedVector, Vector3 } from './types'; + +export interface GravityHistory { + clear: () => void; + record: (vector: Vector3 | null, nowMs: number, windowMs: number) => void; + rollingNeutral: (nowMs: number, windowMs: number) => Vector3 | null; +} + +export function createGravityHistory(): GravityHistory { + let samples: TimedVector[] = []; + let start = 0; + + const clear = (): void => { + samples = []; + start = 0; + }; + + const prune = (cutoff: number): void => { + while (start + 1 < samples.length && (samples[start + 1]?.at ?? Infinity) <= cutoff) start++; + if (start > 256 && start * 2 > samples.length) { + samples = samples.slice(start); + start = 0; + } + }; + + const record = (vector: Vector3 | null, nowMs: number, windowMs: number): void => { + if (!vector || windowMs === 0) { + clear(); + return; + } + const last = samples.at(-1); + if (last?.at === nowMs) samples[samples.length - 1] = { at: nowMs, vector }; + else samples.push({ at: nowMs, vector }); + prune(nowMs - windowMs); + }; + + const rollingNeutral = (nowMs: number, windowMs: number): Vector3 | null => { + const first = samples[start]; + const latest = samples.at(-1); + if (!first || !latest || windowMs === 0) return null; + const windowStart = Math.max(nowMs - windowMs, first.at); + let x = 0; + let y = 0; + let z = 0; + let duration = 0; + for (let i = start; i < samples.length; i++) { + const sample = samples[i]; + if (!sample) continue; + const segmentStart = Math.max(windowStart, sample.at); + const segmentEnd = Math.min(nowMs, samples[i + 1]?.at ?? nowMs); + const segmentDuration = Math.max(0, segmentEnd - segmentStart); + x += sample.vector.x * segmentDuration; + y += sample.vector.y * segmentDuration; + z += sample.vector.z * segmentDuration; + duration += segmentDuration; + } + return duration > 0 ? { x: x / duration, y: y / duration, z: z / duration } : latest.vector; + }; + + return { clear, record, rollingNeutral }; +} diff --git a/src/lib/Puddle/device/index.ts b/src/lib/Puddle/device/index.ts new file mode 100644 index 0000000..c873456 --- /dev/null +++ b/src/lib/Puddle/device/index.ts @@ -0,0 +1,9 @@ +export { createDeviceGravityEstimator } from './estimator'; +export { projectDeviceGravity } from './math'; +export { requestDeviceGravityPermission } from './permission'; +export type { + DeviceGravityEstimator, + DeviceGravityPermission, + DeviceGravityTilt, + DeviceMotionReading, +} from './types'; diff --git a/src/lib/Puddle/device/math.ts b/src/lib/Puddle/device/math.ts new file mode 100644 index 0000000..acf8cc4 --- /dev/null +++ b/src/lib/Puddle/device/math.ts @@ -0,0 +1,85 @@ +import type { DeviceGravityTilt, DeviceMotionReading, Vector3 } from './types'; + +const MIN_GRAVITY_MAGNITUDE = 2; +const MAX_GRAVITY_MAGNITUDE = 20; +const MAX_GYRO_RATE = 720; +const DEGREES_TO_RADIANS = Math.PI / 180; + +const finite = (value: number | null | undefined): value is number => + value !== null && value !== undefined && Number.isFinite(value); + +export function normalize(vector: Vector3): Vector3 | null { + const length = Math.hypot(vector.x, vector.y, vector.z); + if (!Number.isFinite(length) || length === 0) return null; + return { x: vector.x / length, y: vector.y / length, z: vector.z / length }; +} + +export function accelerationVector(reading: DeviceMotionReading): Vector3 | null { + const acceleration = reading.accelerationIncludingGravity; + if ( + !acceleration || + !finite(acceleration.x) || + !finite(acceleration.y) || + !finite(acceleration.z) + ) + return null; + const magnitude = Math.hypot(acceleration.x, acceleration.y, acceleration.z); + if (magnitude < MIN_GRAVITY_MAGNITUDE || magnitude > MAX_GRAVITY_MAGNITUDE) return null; + return normalize({ x: acceleration.x, y: acceleration.y, z: acceleration.z }); +} + +export function gyroVector(reading: DeviceMotionReading): Vector3 | null { + const rate = reading.rotationRate; + if (!rate) return null; + const values = [rate.alpha, rate.beta, rate.gamma]; + if (!values.some(finite)) return null; + const radians = values.map((value) => + finite(value) + ? Math.max(-MAX_GYRO_RATE, Math.min(MAX_GYRO_RATE, value)) * DEGREES_TO_RADIANS + : 0, + ); + return { x: radians[0] ?? 0, y: radians[1] ?? 0, z: radians[2] ?? 0 }; +} + +export function predictFromGyro(vector: Vector3, angularVelocity: Vector3, dt: number): Vector3 { + const crossX = angularVelocity.y * vector.z - angularVelocity.z * vector.y; + const crossY = angularVelocity.z * vector.x - angularVelocity.x * vector.z; + const crossZ = angularVelocity.x * vector.y - angularVelocity.y * vector.x; + return ( + normalize({ + x: vector.x - crossX * dt, + y: vector.y - crossY * dt, + z: vector.z - crossZ * dt, + }) ?? vector + ); +} + +export function blend(from: Vector3, to: Vector3, amount: number): Vector3 { + return ( + normalize({ + x: from.x + (to.x - from.x) * amount, + y: from.y + (to.y - from.y) * amount, + z: from.z + (to.z - from.z) * amount, + }) ?? to + ); +} + +export const neutralWindowMs = (seconds: number): number => + Number.isFinite(seconds) && seconds > 0 ? seconds * 1000 : 0; + +export function projectDeviceGravity( + vector: Vector3, + screenAngle: number, + strength: number, +): DeviceGravityTilt { + const magnitude = Number.isFinite(strength) ? Math.max(0, strength) : 0; + const angle = Number.isFinite(screenAngle) ? screenAngle * DEGREES_TO_RADIANS : 0; + const naturalX = vector.x * magnitude; + const naturalY = -vector.y * magnitude; + const cosine = Math.cos(angle); + const sine = Math.sin(angle); + return { + x: cosine * naturalX + sine * naturalY, + y: -sine * naturalX + cosine * naturalY, + }; +} diff --git a/src/lib/Puddle/device/permission.ts b/src/lib/Puddle/device/permission.ts new file mode 100644 index 0000000..6ab97f0 --- /dev/null +++ b/src/lib/Puddle/device/permission.ts @@ -0,0 +1,23 @@ +import type { DeviceGravityPermission } from './types'; + +type MotionEventConstructor = typeof DeviceMotionEvent & { + requestPermission?: () => Promise; +}; + +/** Request motion access. Call from an intentional user gesture on browsers that prompt. */ +export async function requestDeviceGravityPermission(): Promise { + if ( + typeof window === 'undefined' || + !window.isSecureContext || + typeof window.DeviceMotionEvent !== 'function' + ) + return 'unsupported'; + + const motionEvent = window.DeviceMotionEvent as MotionEventConstructor; + if (!motionEvent.requestPermission) return 'granted'; + try { + return (await motionEvent.requestPermission()) === 'granted' ? 'granted' : 'denied'; + } catch { + return 'denied'; + } +} diff --git a/src/lib/Puddle/device/types.ts b/src/lib/Puddle/device/types.ts new file mode 100644 index 0000000..239e44e --- /dev/null +++ b/src/lib/Puddle/device/types.ts @@ -0,0 +1,46 @@ +export type DeviceGravityPermission = 'granted' | 'denied' | 'unsupported'; + +export interface DeviceMotionReading { + readonly accelerationIncludingGravity: { + readonly x: number | null; + readonly y: number | null; + readonly z: number | null; + } | null; + readonly rotationRate: { + readonly alpha: number | null; + readonly beta: number | null; + readonly gamma: number | null; + } | null; + readonly interval: number; +} + +export interface DeviceGravityTilt { + readonly x: number; + readonly y: number; +} + +export interface DeviceGravityEstimator { + readonly update: ( + reading: DeviceMotionReading, + nowMs: number, + neutralWindowSeconds?: number, + ) => void; + readonly tilt: ( + nowMs: number, + screenAngle: number, + strength: number, + neutralWindowSeconds?: number, + ) => DeviceGravityTilt | null; + readonly reset: () => void; +} + +export interface Vector3 { + readonly x: number; + readonly y: number; + readonly z: number; +} + +export interface TimedVector { + readonly at: number; + readonly vector: Vector3; +} diff --git a/src/lib/Puddle/deviceGravity.ts b/src/lib/Puddle/deviceGravity.ts deleted file mode 100644 index 821a035..0000000 --- a/src/lib/Puddle/deviceGravity.ts +++ /dev/null @@ -1,272 +0,0 @@ -export type DeviceGravityPermission = 'granted' | 'denied' | 'unsupported'; - -export interface DeviceMotionReading { - readonly accelerationIncludingGravity: { - readonly x: number | null; - readonly y: number | null; - readonly z: number | null; - } | null; - readonly rotationRate: { - readonly alpha: number | null; - readonly beta: number | null; - readonly gamma: number | null; - } | null; - readonly interval: number; -} - -export interface DeviceGravityTilt { - readonly x: number; - readonly y: number; -} - -export interface DeviceGravityEstimator { - readonly update: ( - reading: DeviceMotionReading, - nowMs: number, - neutralWindowSeconds?: number, - ) => void; - readonly tilt: ( - nowMs: number, - screenAngle: number, - strength: number, - neutralWindowSeconds?: number, - ) => DeviceGravityTilt | null; - readonly reset: () => void; -} - -interface Vector3 { - readonly x: number; - readonly y: number; - readonly z: number; -} - -interface TimedVector { - readonly at: number; - readonly vector: Vector3; -} - -type MotionEventConstructor = typeof DeviceMotionEvent & { - requestPermission?: () => Promise; -}; - -const ACCEL_CORRECTION_TAU = 0.25; -const MIN_GRAVITY_MAGNITUDE = 2; -const MAX_GRAVITY_MAGNITUDE = 20; -const MAX_GYRO_RATE = 720; -const MAX_SENSOR_DT = 0.1; -const STALE_AFTER_MS = 500; -const DEGREES_TO_RADIANS = Math.PI / 180; - -const finite = (value: number | null | undefined): value is number => - value !== null && value !== undefined && Number.isFinite(value); - -function normalize(vector: Vector3): Vector3 | null { - const length = Math.hypot(vector.x, vector.y, vector.z); - if (!Number.isFinite(length) || length === 0) return null; - return { x: vector.x / length, y: vector.y / length, z: vector.z / length }; -} - -function accelerationVector(reading: DeviceMotionReading): Vector3 | null { - const acceleration = reading.accelerationIncludingGravity; - if ( - !acceleration || - !finite(acceleration.x) || - !finite(acceleration.y) || - !finite(acceleration.z) - ) - return null; - const magnitude = Math.hypot(acceleration.x, acceleration.y, acceleration.z); - if (magnitude < MIN_GRAVITY_MAGNITUDE || magnitude > MAX_GRAVITY_MAGNITUDE) return null; - return normalize({ x: acceleration.x, y: acceleration.y, z: acceleration.z }); -} - -function gyroVector(reading: DeviceMotionReading): Vector3 | null { - const rate = reading.rotationRate; - if (!rate) return null; - const values = [rate.alpha, rate.beta, rate.gamma]; - if (!values.some(finite)) return null; - const radians = values.map((value) => - finite(value) - ? Math.max(-MAX_GYRO_RATE, Math.min(MAX_GYRO_RATE, value)) * DEGREES_TO_RADIANS - : 0, - ); - return { x: radians[0] ?? 0, y: radians[1] ?? 0, z: radians[2] ?? 0 }; -} - -// A fixed world vector appears to rotate opposite the device's angular velocity. -function predictFromGyro(vector: Vector3, angularVelocity: Vector3, dt: number): Vector3 { - const crossX = angularVelocity.y * vector.z - angularVelocity.z * vector.y; - const crossY = angularVelocity.z * vector.x - angularVelocity.x * vector.z; - const crossZ = angularVelocity.x * vector.y - angularVelocity.y * vector.x; - return ( - normalize({ - x: vector.x - crossX * dt, - y: vector.y - crossY * dt, - z: vector.z - crossZ * dt, - }) ?? vector - ); -} - -function blend(from: Vector3, to: Vector3, amount: number): Vector3 { - return ( - normalize({ - x: from.x + (to.x - from.x) * amount, - y: from.y + (to.y - from.y) * amount, - z: from.z + (to.z - from.z) * amount, - }) ?? to - ); -} - -const neutralWindowMs = (seconds: number): number => - Number.isFinite(seconds) && seconds > 0 ? seconds * 1000 : 0; - -export function projectDeviceGravity( - vector: Vector3, - screenAngle: number, - strength: number, -): DeviceGravityTilt { - const magnitude = Number.isFinite(strength) ? Math.max(0, strength) : 0; - const angle = Number.isFinite(screenAngle) ? screenAngle * DEGREES_TO_RADIANS : 0; - const naturalX = vector.x * magnitude; - const naturalY = -vector.y * magnitude; - const cosine = Math.cos(angle); - const sine = Math.sin(angle); - return { - x: cosine * naturalX + sine * naturalY, - y: -sine * naturalX + cosine * naturalY, - }; -} - -export function createDeviceGravityEstimator(): DeviceGravityEstimator { - let gravity: Vector3 | null = null; - let previousReadingAt: number | null = null; - let lastUsefulReadingAt: number | null = null; - let gravityHistory: TimedVector[] = []; - let historyStart = 0; - - const clearHistory = (): void => { - gravityHistory = []; - historyStart = 0; - }; - - const pruneHistory = (cutoff: number): void => { - while ( - historyStart + 1 < gravityHistory.length && - (gravityHistory[historyStart + 1]?.at ?? Infinity) <= cutoff - ) - historyStart++; - if (historyStart > 256 && historyStart * 2 > gravityHistory.length) { - gravityHistory = gravityHistory.slice(historyStart); - historyStart = 0; - } - }; - - const recordGravity = (nowMs: number, windowMs: number): void => { - if (!gravity || windowMs === 0) { - clearHistory(); - return; - } - const last = gravityHistory.at(-1); - if (last?.at === nowMs) - gravityHistory[gravityHistory.length - 1] = { at: nowMs, vector: gravity }; - else gravityHistory.push({ at: nowMs, vector: gravity }); - pruneHistory(nowMs - windowMs); - }; - - const rollingNeutral = (nowMs: number, windowMs: number): Vector3 | null => { - const first = gravityHistory[historyStart]; - const latest = gravityHistory.at(-1); - if (!first || !latest || windowMs === 0) return null; - - const windowStart = Math.max(nowMs - windowMs, first.at); - let x = 0; - let y = 0; - let z = 0; - let duration = 0; - for (let i = historyStart; i < gravityHistory.length; i++) { - const sample = gravityHistory[i]; - if (!sample) continue; - const segmentStart = Math.max(windowStart, sample.at); - const segmentEnd = Math.min(nowMs, gravityHistory[i + 1]?.at ?? nowMs); - const segmentDuration = Math.max(0, segmentEnd - segmentStart); - x += sample.vector.x * segmentDuration; - y += sample.vector.y * segmentDuration; - z += sample.vector.z * segmentDuration; - duration += segmentDuration; - } - return duration > 0 ? { x: x / duration, y: y / duration, z: z / duration } : latest.vector; - }; - - const update = (reading: DeviceMotionReading, nowMs: number, neutralWindowSeconds = 0): void => { - if (!Number.isFinite(nowMs)) return; - const intervalSeconds = Number.isFinite(reading.interval) ? reading.interval / 1000 : 0; - const elapsedSeconds = - previousReadingAt === null - ? intervalSeconds - : Math.max(0, (nowMs - previousReadingAt) / 1000); - const dt = Math.min(MAX_SENSOR_DT, elapsedSeconds); - previousReadingAt = nowMs; - - const angularVelocity = gyroVector(reading); - if (gravity && angularVelocity && dt > 0) - gravity = predictFromGyro(gravity, angularVelocity, dt); - - const measuredGravity = accelerationVector(reading); - if (measuredGravity) { - const correction = gravity ? 1 - Math.exp(-Math.max(dt, 1 / 120) / ACCEL_CORRECTION_TAU) : 1; - gravity = gravity ? blend(gravity, measuredGravity, correction) : measuredGravity; - } - - if (gravity && (measuredGravity || angularVelocity)) { - lastUsefulReadingAt = nowMs; - recordGravity(nowMs, neutralWindowMs(neutralWindowSeconds)); - } - }; - - const tilt = ( - nowMs: number, - screenAngle: number, - strength: number, - neutralWindowSeconds = 0, - ): DeviceGravityTilt | null => { - if ( - !gravity || - lastUsefulReadingAt === null || - !Number.isFinite(nowMs) || - nowMs - lastUsefulReadingAt > STALE_AFTER_MS - ) - return null; - const current = projectDeviceGravity(gravity, screenAngle, strength); - const neutral = rollingNeutral(nowMs, neutralWindowMs(neutralWindowSeconds)); - if (!neutral) return current; - const baseline = projectDeviceGravity(neutral, screenAngle, strength); - return { x: current.x - baseline.x, y: current.y - baseline.y }; - }; - - const reset = (): void => { - gravity = null; - previousReadingAt = null; - lastUsefulReadingAt = null; - clearHistory(); - }; - - return { update, tilt, reset }; -} - -/** Request motion access. Call from an intentional user gesture on browsers that prompt. */ -export async function requestDeviceGravityPermission(): Promise { - if ( - typeof window === 'undefined' || - !window.isSecureContext || - typeof window.DeviceMotionEvent !== 'function' - ) - return 'unsupported'; - - const motionEvent = window.DeviceMotionEvent as MotionEventConstructor; - if (!motionEvent.requestPermission) return 'granted'; - try { - return (await motionEvent.requestPermission()) === 'granted' ? 'granted' : 'denied'; - } catch { - return 'denied'; - } -} diff --git a/src/lib/Puddle/puddleRenderer.ts b/src/lib/Puddle/render/puddleRenderer.ts similarity index 100% rename from src/lib/Puddle/puddleRenderer.ts rename to src/lib/Puddle/render/puddleRenderer.ts diff --git a/src/lib/Puddle/runtime/puddleLoop.ts b/src/lib/Puddle/runtime/puddleLoop.ts new file mode 100644 index 0000000..23142d9 --- /dev/null +++ b/src/lib/Puddle/runtime/puddleLoop.ts @@ -0,0 +1,118 @@ +import type { DeviceGravityEstimator } from '../device'; +import type { WaterSim } from '../waterSim'; + +export interface PointerPosition { + readonly x: number; + readonly y: number; +} + +export interface PuddleLoopOptions { + readonly host: HTMLElement; + readonly sim: Pick; + readonly deviceGravityEstimator: Pick; + readonly draw: () => void; + readonly getPointer: () => PointerPosition | null; + readonly followCursor: boolean; + readonly cursorTilt: number; + readonly cursorEase: number; + readonly deviceGravity: boolean; + readonly deviceTilt: number; + readonly deviceEase: number; + readonly deviceNeutralWindow: number; + readonly screenAngle: () => number; +} + +/** + * Runs the animated Puddle lifecycle independently from Svelte. Every option is + * captured by the caller before this starts, so RAF callbacks never depend on + * untracked component state. + */ +export function startPuddleLoop(options: PuddleLoopOptions): () => void { + const { + host, + sim, + deviceGravityEstimator, + draw, + getPointer, + followCursor, + cursorTilt, + cursorEase, + deviceGravity, + deviceTilt, + deviceEase, + deviceNeutralWindow, + screenAngle, + } = options; + const deviceStrength = Number.isFinite(deviceTilt) ? Math.max(0, deviceTilt) : 6; + const deviceTau = Number.isFinite(deviceEase) && deviceEase > 0 ? deviceEase : 0.18; + let tiltX = 0; + let tiltY = 0; + let deviceX = 0; + let deviceY = 0; + const applyInteractiveTilt = (dt: number, now: number): void => { + let gx = 0; + let gy = 0; + const pointer = getPointer(); + if (followCursor && pointer) { + const rect = host.getBoundingClientRect(); + const dx = pointer.x - (rect.left + rect.width / 2); + const dy = pointer.y - (rect.top + rect.height / 2); + const length = Math.hypot(dx, dy); + // Full strength half a box away, proportionally less near the center. + const half = Math.max(rect.width, rect.height) / 2; + const magnitude = Math.min(1, length / Math.max(half, 1)); + if (length > 0) { + gx = (dx / length) * magnitude; + gy = (dy / length) * magnitude; + } + } + const cursorK = 1 - Math.exp(-dt / cursorEase); + tiltX += (gx - tiltX) * cursorK; + tiltY += (gy - tiltY) * cursorK; + + const deviceTarget = deviceGravity + ? deviceGravityEstimator.tilt(now, screenAngle(), deviceStrength, deviceNeutralWindow) + : null; + const deviceK = 1 - Math.exp(-dt / deviceTau); + deviceX += ((deviceTarget?.x ?? 0) - deviceX) * deviceK; + deviceY += ((deviceTarget?.y ?? 0) - deviceY) * deviceK; + // Negative tilt drives flow toward +axis, and grid +y is screen-down. + sim.setTiltOffset(-cursorTilt * tiltX + deviceX, -cursorTilt * tiltY + deviceY); + }; + + const massCap = sim.totalMass(); + let raf = 0; + let running = false; + let last = 0; + const loop = (time: number): void => { + const dt = last > 0 ? (time - last) / 1000 : 0; + last = time; + if (followCursor || deviceGravity) applyInteractiveTilt(dt, performance.now()); + sim.advance(dt); + sim.clampMass(massCap); + draw(); + raf = requestAnimationFrame(loop); + }; + const start = (): void => { + if (running) return; + running = true; + last = 0; + raf = requestAnimationFrame(loop); + }; + const stop = (): void => { + running = false; + cancelAnimationFrame(raf); + deviceGravityEstimator.reset(); + }; + + const observer = new IntersectionObserver(([entry]) => { + if (entry?.isIntersecting) start(); + else stop(); + }); + observer.observe(host); + return () => { + stop(); + observer.disconnect(); + sim.setTiltOffset(0, 0); + }; +} diff --git a/src/lib/Puddle/sim/facade/config.ts b/src/lib/Puddle/sim/facade/config.ts new file mode 100644 index 0000000..2c15006 --- /dev/null +++ b/src/lib/Puddle/sim/facade/config.ts @@ -0,0 +1,87 @@ +import { texelDistance, worldUnits } from '../brands'; +import { rainEmitter } from '../emitters'; +import { createEngine, type EngineConfig } from '../engine'; +import { DEFAULT_MAX_SUBSTEPS, defaultGovernor, makeGovernor } from '../governor'; +import { constantGravity, noiseGravity, offsetGravity } from '../gravity'; +import { integrators } from '../integrators'; +import { resolveParams } from '../params'; +import { makeTerrain } from '../terrain'; +import type { Grid, SourceEmitter } from '../types'; +import { SIM_DEFAULTS } from './defaults'; +import { + clampDimension, + finiteOrFallback, + MAX_DIM, + MIN_DIM, + nonnegativeIntegerOrZero, + type WaterSimOptions, +} from './options'; + +export interface WaterSimConfig { + readonly grid: Grid; + readonly engine: EngineConfig; +} + +export function createWaterSimConfig( + options: WaterSimOptions, + tiltOffset: Readonly<{ x: number; y: number }>, +): WaterSimConfig { + const minDim = Math.max(1, Math.floor(finiteOrFallback(options.minDim, MIN_DIM))); + const maxDim = Math.max(minDim, Math.floor(finiteOrFallback(options.maxDim, MAX_DIM))); + const grid: Grid = { + nx: clampDimension(options.nx, minDim, maxDim), + ny: clampDimension(options.ny, minDim, maxDim), + }; + const seed = finiteOrFallback(options.seed, 7); + const params = resolveParams({ ...SIM_DEFAULTS, ...options }); + const terrain = makeTerrain(grid, params, seed); + const integrator = integrators[options.integrator ?? SIM_DEFAULTS.integrator]; + const baseGravity = + (options.gravityDrift ?? SIM_DEFAULTS.gravityDrift) + ? noiseGravity({ + perp: params.gravity, + seed, + amp: finiteOrFallback(options.driftAmp, SIM_DEFAULTS.driftAmp), + rateHz: options.driftRateHz, + }) + : constantGravity(params.gravity, params.tiltX, params.tiltY); + const gravity = offsetGravity(baseGravity, () => tiltOffset); + + const rainOptions = typeof options.rain === 'object' ? options.rain : {}; + const emitters: SourceEmitter[] = + options.rain === true || typeof options.rain === 'object' + ? [ + rainEmitter({ + intervalSec: finiteOrFallback(rainOptions.intervalSec, 0.6), + amount: worldUnits(finiteOrFallback(rainOptions.amount, 0.06)), + radius: texelDistance(finiteOrFallback(rainOptions.radius, 1.5)), + }), + ] + : []; + + // Keep governor and engine caps aligned. + const maxSubsteps = finiteOrFallback(options.maxSubsteps, DEFAULT_MAX_SUBSTEPS); + const substepCap = nonnegativeIntegerOrZero(maxSubsteps); + const governor = options.maxSubsteps !== undefined ? makeGovernor(substepCap) : defaultGovernor; + + return { + grid, + engine: { + grid, + terrain, + initialHeight: (xIndex, yIndex) => + worldUnits(Math.max(0, params.level - (terrain[yIndex * grid.nx + xIndex] ?? 0))), + params, + seed, + integrator, + gravity, + emitters, + governor, + maxSubsteps: substepCap, + }, + }; +} + +export function createConfiguredEngine(config: WaterSimConfig) { + return createEngine(config.engine); +} diff --git a/src/lib/Puddle/sim/facade/defaults.ts b/src/lib/Puddle/sim/facade/defaults.ts new file mode 100644 index 0000000..869006b --- /dev/null +++ b/src/lib/Puddle/sim/facade/defaults.ts @@ -0,0 +1,20 @@ +import type { IntegratorId } from '../integrators'; + +/** Defaults that affect simulation construction, independent of the Puddle UI. */ +export const SIM_DEFAULTS = { + level: 0.42, + integrator: 'pipes+momentum', + momentumSmoothing: 0, + momentumRetention: 0.98, + gravityDrift: true, + driftAmp: 1, +} as const satisfies { + readonly level: number; + readonly integrator: IntegratorId; + readonly momentumSmoothing: number; + readonly momentumRetention: number; + readonly gravityDrift: boolean; + readonly driftAmp: number; +}; + +export const DEFAULT_SETTLE_SUBSTEPS = 90; diff --git a/src/lib/Puddle/sim/facade/index.ts b/src/lib/Puddle/sim/facade/index.ts new file mode 100644 index 0000000..4c6dd1d --- /dev/null +++ b/src/lib/Puddle/sim/facade/index.ts @@ -0,0 +1,3 @@ +export { createWaterSim, WaterSim } from './waterSim'; +export type { WaterSimOptions } from './options'; +export { DEFAULT_SETTLE_SUBSTEPS, SIM_DEFAULTS } from './defaults'; diff --git a/src/lib/Puddle/sim/facade/options.ts b/src/lib/Puddle/sim/facade/options.ts new file mode 100644 index 0000000..ddbd2ac --- /dev/null +++ b/src/lib/Puddle/sim/facade/options.ts @@ -0,0 +1,41 @@ +import type { IntegratorId } from '../integrators'; +import type { ParamOverrides } from '../params'; + +export interface WaterSimOptions extends ParamOverrides { + nx: number; + ny: number; + seed?: number; + /** `'pipes'` or the default momentum-enabled variant `'pipes+momentum'`. */ + integrator?: IntegratorId; + /** Install a rain emitter (raindrop ripples) for animated use. */ + rain?: boolean | { intervalSec?: number; amount?: number; radius?: number }; + /** Drift the gravity tilt with noise instead of holding it constant. */ + gravityDrift?: boolean; + /** Noise-drift tilt magnitude (only with `gravityDrift`). */ + driftAmp?: number; + /** Noise-drift rate in Hz (only with `gravityDrift`). */ + driftRateHz?: number; + /** Per-frame substep cap (spiral-of-death guard). */ + maxSubsteps?: number; + /** Grid dimension floor the nx/ny inputs are clamped to. */ + minDim?: number; + /** Grid dimension ceiling the nx/ny inputs are clamped to (guards against a giant grid). */ + maxDim?: number; +} + +export const MIN_DIM = 4; +export const MAX_DIM = 512; + +export function finiteOrFallback(value: number | undefined, fallback: number): number { + return value !== undefined && Number.isFinite(value) ? value : fallback; +} + +export function nonnegativeIntegerOrZero(value: number): number { + return Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0; +} + +export function clampDimension(dimension: number, minimum: number, maximum: number): number { + return Number.isFinite(dimension) + ? Math.max(minimum, Math.min(maximum, Math.floor(dimension))) + : minimum; +} diff --git a/src/lib/Puddle/sim/facade/waterSim.ts b/src/lib/Puddle/sim/facade/waterSim.ts new file mode 100644 index 0000000..3643ac1 --- /dev/null +++ b/src/lib/Puddle/sim/facade/waterSim.ts @@ -0,0 +1,92 @@ +import { texelCoordinate, texelDistance, worldUnits } from '../brands'; +import { params as paramSchema } from '../params'; +import type { FrameStats } from '../types'; +import { createConfiguredEngine, createWaterSimConfig } from './config'; +import { DEFAULT_SETTLE_SUBSTEPS } from './defaults'; +import { type WaterSimOptions, nonnegativeIntegerOrZero } from './options'; + +const MAX_TILT = paramSchema.tiltX.max; + +function clampTilt(value: number): number { + return Math.max(-MAX_TILT, Math.min(MAX_TILT, value)); +} + +export class WaterSim { + readonly nx: number; + readonly ny: number; + + private readonly engine: ReturnType; + private readonly heightSnapshot: Float32Array; + private readonly tiltOffset = { x: 0, y: 0 }; + + constructor(options: WaterSimOptions) { + const config = createWaterSimConfig(options, this.tiltOffset); + this.nx = config.grid.nx; + this.ny = config.grid.ny; + this.engine = createConfiguredEngine(config); + + // Hide the mutable, ping-pong engine buffer behind a reused snapshot. + this.heightSnapshot = new Float32Array(this.nx * this.ny); + } + + /** + * Current per-cell depth for rendering. This reused snapshot is overwritten on + * each access; copy it to retain a frame's values. + */ + get height(): Float32Array { + this.heightSnapshot.set(this.engine.height()); + return this.heightSnapshot; + } + + /** Run substeps to bring poured water to rest (deterministic). */ + settle(substeps = DEFAULT_SETTLE_SUBSTEPS): void { + this.engine.settle(nonnegativeIntegerOrZero(substeps)); + } + + /** Advance by real elapsed seconds (framerate-independent). Returns this frame's stats. */ + advance(realDtSeconds: number): FrameStats { + return this.engine.advance(realDtSeconds); + } + + step(dt: number): void { + if (Number.isFinite(dt)) this.engine.step(dt); + } + + splat(x: number, y: number, amount: number, radius: number): void { + if (![x, y, amount, radius].every(Number.isFinite)) return; + this.engine.emit({ + kind: 'splat', + x: texelCoordinate(x), + y: texelCoordinate(y), + amount: worldUnits(amount), + radius: texelDistance(radius), + }); + } + + /** + * In-plane gravity tilt added on top of the configured driver (pointer / + * device-orientation interaction). Same sign convention as the `tiltX`/`tiltY` + * params: a negative x offset drives flow toward +x. Clamped to the tilt range. + */ + setTiltOffset(x: number, y: number): void { + if (![x, y].every(Number.isFinite)) return; + this.tiltOffset.x = clampTilt(x); + this.tiltOffset.y = clampTilt(y); + } + + clampMass(target: number): void { + if (Number.isFinite(target)) this.engine.clampMass(Math.max(0, target)); + } + + totalMass(): number { + return this.engine.totalMass(); + } + + reset(): void { + this.engine.reset(); + } +} + +export function createWaterSim(options: WaterSimOptions): WaterSim { + return new WaterSim(options); +} diff --git a/src/lib/Puddle/sim/index.ts b/src/lib/Puddle/sim/index.ts index 9b68b5c..a6e81e5 100644 --- a/src/lib/Puddle/sim/index.ts +++ b/src/lib/Puddle/sim/index.ts @@ -1,202 +1,10 @@ -import { texelCoordinate, texelDistance, worldUnits } from './brands'; -import { rainEmitter } from './emitters'; -import { createEngine } from './engine'; -import { DEFAULT_MAX_SUBSTEPS, defaultGovernor, makeGovernor } from './governor'; -import { constantGravity, noiseGravity, offsetGravity } from './gravity'; -import { integrators, type IntegratorId } from './integrators'; -import { type ParamOverrides, params as paramSchema, resolveParams } from './params'; -import { makeTerrain } from './terrain'; -import type { FrameStats, Grid, SourceEmitter } from './types'; - -export const DEFAULT_SETTLE_SUBSTEPS = 90; -export const PUDDLE_DEFAULTS = { - cellSize: 19, - threshold: 0.035, - level: 0.42, - integrator: 'pipes+momentum', - momentumSmoothing: 0, - momentumRetention: 0.98, - gravityDrift: true, - driftAmp: 1, - cursorTilt: 1.7, - cursorEase: 0.2, -} as const; -const MIN_DIM = 4; -const MAX_DIM = 512; -const MAX_TILT = paramSchema.tiltX.max; - -export interface WaterSimOptions extends ParamOverrides { - nx: number; - ny: number; - seed?: number; - /** `'pipes'` or the default momentum-enabled variant `'pipes+momentum'`. */ - integrator?: IntegratorId; - /** Install a rain emitter (raindrop ripples) for animated use. */ - rain?: boolean | { intervalSec?: number; amount?: number; radius?: number }; - /** Drift the gravity tilt with noise instead of holding it constant. */ - gravityDrift?: boolean; - /** Noise-drift tilt magnitude (only with `gravityDrift`). */ - driftAmp?: number; - /** Noise-drift rate in Hz (only with `gravityDrift`). */ - driftRateHz?: number; - /** Per-frame substep cap (spiral-of-death guard). */ - maxSubsteps?: number; - /** Grid dimension floor the nx/ny inputs are clamped to. */ - minDim?: number; - /** Grid dimension ceiling the nx/ny inputs are clamped to (guards against a giant grid). */ - maxDim?: number; -} - -function clampDimension(dimension: number, minimum: number, maximum: number): number { - return Number.isFinite(dimension) - ? Math.max(minimum, Math.min(maximum, Math.floor(dimension))) - : minimum; -} - -const finiteOrFallback = (value: number | undefined, fallback: number): number => - value !== undefined && Number.isFinite(value) ? value : fallback; - -const nonnegativeIntegerOrZero = (value: number): number => - Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0; - -const clampTilt = (value: number): number => Math.max(-MAX_TILT, Math.min(MAX_TILT, value)); - -export class WaterSim { - readonly nx: number; - readonly ny: number; - - private readonly engine: ReturnType; - private readonly heightSnapshot: Float32Array; - private readonly tiltOffset = { x: 0, y: 0 }; - - constructor(options: WaterSimOptions) { - const minDim = Math.max(1, Math.floor(finiteOrFallback(options.minDim, MIN_DIM))); - const maxDim = Math.max(minDim, Math.floor(finiteOrFallback(options.maxDim, MAX_DIM))); - const grid: Grid = { - nx: clampDimension(options.nx, minDim, maxDim), - ny: clampDimension(options.ny, minDim, maxDim), - }; - const seed = finiteOrFallback(options.seed, 7); - const params = resolveParams({ ...PUDDLE_DEFAULTS, ...options }); - const terrain = makeTerrain(grid, params, seed); - const integrator = integrators[options.integrator ?? PUDDLE_DEFAULTS.integrator]; - - const baseGravity = - (options.gravityDrift ?? PUDDLE_DEFAULTS.gravityDrift) - ? noiseGravity({ - perp: params.gravity, - seed, - amp: finiteOrFallback(options.driftAmp, PUDDLE_DEFAULTS.driftAmp), - rateHz: options.driftRateHz, - }) - : constantGravity(params.gravity, params.tiltX, params.tiltY); - const gravity = offsetGravity(baseGravity, () => this.tiltOffset); - - const rainOptions = typeof options.rain === 'object' ? options.rain : {}; - const emitters: SourceEmitter[] = - options.rain === true || typeof options.rain === 'object' - ? [ - rainEmitter({ - intervalSec: finiteOrFallback(rainOptions.intervalSec, 0.6), - amount: worldUnits(finiteOrFallback(rainOptions.amount, 0.06)), - radius: texelDistance(finiteOrFallback(rainOptions.radius, 1.5)), - }), - ] - : []; - - // Keep governor and engine caps aligned. - const maxSubsteps = finiteOrFallback(options.maxSubsteps, DEFAULT_MAX_SUBSTEPS); - const substepCap = nonnegativeIntegerOrZero(maxSubsteps); - const governor = options.maxSubsteps !== undefined ? makeGovernor(substepCap) : defaultGovernor; - - this.nx = grid.nx; - this.ny = grid.ny; - this.engine = createEngine({ - grid, - terrain, - initialHeight: (xIndex, yIndex) => - worldUnits(Math.max(0, params.level - (terrain[yIndex * grid.nx + xIndex] ?? 0))), - params, - seed, - integrator, - gravity, - emitters, - governor, - maxSubsteps: substepCap, - }); - - // Hide the mutable, ping-pong engine buffer behind a reused snapshot. - this.heightSnapshot = new Float32Array(grid.nx * grid.ny); - } - - /** - * Current per-cell depth for rendering. This reused snapshot is overwritten on - * each access; copy it to retain a frame's values. - */ - get height(): Float32Array { - this.heightSnapshot.set(this.engine.height()); - return this.heightSnapshot; - } - - /** Run substeps to bring poured water to rest (deterministic). */ - settle(substeps = DEFAULT_SETTLE_SUBSTEPS): void { - this.engine.settle(nonnegativeIntegerOrZero(substeps)); - } - - /** Advance by real elapsed seconds (framerate-independent). Returns this frame's stats. */ - advance(realDtSeconds: number): FrameStats { - return this.engine.advance(realDtSeconds); - } - - step(dt: number): void { - if (Number.isFinite(dt)) this.engine.step(dt); - } - - splat(x: number, y: number, amount: number, radius: number): void { - if (![x, y, amount, radius].every(Number.isFinite)) return; - this.engine.emit({ - kind: 'splat', - x: texelCoordinate(x), - y: texelCoordinate(y), - amount: worldUnits(amount), - radius: texelDistance(radius), - }); - } - - /** - * In-plane gravity tilt added on top of the configured driver (pointer / - * device-orientation interaction). Same sign convention as the `tiltX`/`tiltY` - * params: a negative x offset drives flow toward +x. Clamped to the tilt range. - */ - setTiltOffset(x: number, y: number): void { - if (![x, y].every(Number.isFinite)) return; - this.tiltOffset.x = clampTilt(x); - this.tiltOffset.y = clampTilt(y); - } - - clampMass(target: number): void { - if (Number.isFinite(target)) this.engine.clampMass(Math.max(0, target)); - } - - totalMass(): number { - return this.engine.totalMass(); - } - - reset(): void { - this.engine.reset(); - } -} - -export function createWaterSim(options: WaterSimOptions): WaterSim { - return new WaterSim(options); -} +export { createWaterSim, DEFAULT_SETTLE_SUBSTEPS, SIM_DEFAULTS, WaterSim } from './facade'; +export type { WaterSimOptions } from './facade'; export { integrators } from './integrators'; export type { IntegratorId } from './integrators'; export { params as paramSchema, resolveParams } from './params'; -export type { Params, ParamKey, ParamOverrides } from './params'; -export type { Integrator, SourceCommand, SourceEmitter, GravityDriver } from './types'; - +export type { ParamKey, ParamOverrides, Params } from './params'; export { Engine, createEngine } from './engine'; export type { EngineConfig } from './engine'; export { constantGravity, noiseGravity, offsetGravity } from './gravity'; @@ -225,8 +33,12 @@ export type { FrameStats, GovernorInput, GovernorPolicy, + GravityDriver, GravitySample, Grid, + Integrator, + SourceCommand, + SourceEmitter, StateStats, SubstepPlan, } from './types'; diff --git a/src/lib/Puddle/sim/passes.ts b/src/lib/Puddle/sim/passes.ts deleted file mode 100644 index 9c00d6f..0000000 --- a/src/lib/Puddle/sim/passes.ts +++ /dev/null @@ -1,345 +0,0 @@ -import type { Grid, PassCtx, PassDesc, PassKind } from './types'; - -type FieldTransform = (value: number, index: number, column: number, row: number) => number; - -function writeField(field: Float32Array, width: number, transform: FieldTransform): void { - field.set( - field.map((value, index) => transform(value, index, index % width, Math.floor(index / width))), - ); -} - -function scaleDirectionalFlux( - flux: number, - positiveSourceScale: number, - negativeSourceScale: number, -): number { - return flux * (flux > 0 ? positiveSourceScale : negativeSourceScale); -} - -// Clearing boundary faces keeps them at zero: no-flow walls must not retain -// stale ping-pong fluxes. -// Interior faces accelerate from the free-surface elevation difference plus -// in-plane gravity; `damping` retains part of the previous face flux. -function runFluxUpdate(ctx: PassCtx): void { - const { nx, ny } = ctx.grid; - const depth = ctx.readScalar('height').data; - const terrain = ctx.readScalar('terrain').data; - const inputFlux = ctx.readFlux(); - const outputFlux = ctx.writeFlux(); - const dt = ctx.dt; - const { damping } = ctx.params; - const normalGravity = ctx.gravity.perp; - const { tiltX, tiltY } = ctx.gravity; - - writeField(outputFlux.fx, nx + 1, (_value, faceIndex, column, row) => { - if (column === 0 || column === nx) return 0; - - const leftCell = row * nx + (column - 1); - const rightCell = row * nx + column; - const surfaceDelta = - (terrain[leftCell] ?? 0) + - (depth[leftCell] ?? 0) - - (terrain[rightCell] ?? 0) - - (depth[rightCell] ?? 0); - return damping * (inputFlux.fx[faceIndex] ?? 0) + dt * (normalGravity * surfaceDelta - tiltX); - }); - writeField(outputFlux.fy, nx, (_value, faceIndex, column, row) => { - if (row === 0 || row === ny) return 0; - - const bottomCell = (row - 1) * nx + column; - const topCell = row * nx + column; - const surfaceDelta = - (terrain[bottomCell] ?? 0) + - (depth[bottomCell] ?? 0) - - (terrain[topCell] ?? 0) - - (depth[topCell] ?? 0); - return damping * (inputFlux.fy[faceIndex] ?? 0) + dt * (normalGravity * surfaceDelta - tiltY); - }); -} - -// Uniformly cap each cell's outflow to its available volume, conserving mass -// while preventing negative depth. -function runOutflowScale(ctx: PassCtx): void { - const { nx } = ctx.grid; - const flux = ctx.readFlux(); - const depth = ctx.readScalar('height').data; - const scale = ctx.writeScalar().data; - const dt = ctx.dt; - writeField(scale, nx, (_value, cell, column, row) => { - const outflow = - Math.max(0, -(flux.fx[row * (nx + 1) + column] ?? 0)) + - Math.max(0, flux.fx[row * (nx + 1) + column + 1] ?? 0) + - Math.max(0, -(flux.fy[row * nx + column] ?? 0)) + - Math.max(0, flux.fy[(row + 1) * nx + column] ?? 0); - const outflowVolume = outflow * dt; - const availableDepth = depth[cell] ?? 0; - return outflowVolume > availableDepth && outflowVolume > 0 ? availableDepth / outflowVolume : 1; - }); -} - -// A face is scaled by its source cell, preserving the outflow cap above. -function runHeightUpdate(ctx: PassCtx): void { - const { nx, ny } = ctx.grid; - const flux = ctx.readFlux(); - const scale = ctx.readScalar('scale').data; - const depth = ctx.readScalar('height').data; - const nextDepth = ctx.writeScalar().data; - const dt = ctx.dt; - // Face flux is positive toward +x/+y, so each face uses its upstream cell's scale. - writeField(nextDepth, nx, (_value, cell, column, row) => { - const leftFlux = flux.fx[row * (nx + 1) + column] ?? 0; - const rightFlux = flux.fx[row * (nx + 1) + column + 1] ?? 0; - const bottomFlux = flux.fy[row * nx + column] ?? 0; - const topFlux = flux.fy[(row + 1) * nx + column] ?? 0; - const cellScale = scale[cell] ?? 0; - const scaledLeftFlux = scaleDirectionalFlux( - leftFlux, - column > 0 ? (scale[cell - 1] ?? 0) : 0, - cellScale, - ); - const scaledRightFlux = scaleDirectionalFlux( - rightFlux, - cellScale, - column < nx - 1 ? (scale[cell + 1] ?? 0) : 0, - ); - const scaledBottomFlux = scaleDirectionalFlux( - bottomFlux, - row > 0 ? (scale[cell - nx] ?? 0) : 0, - cellScale, - ); - const scaledTopFlux = scaleDirectionalFlux( - topFlux, - cellScale, - row < ny - 1 ? (scale[cell + nx] ?? 0) : 0, - ); - return Math.max( - 0, - (depth[cell] ?? 0) + - dt * (scaledLeftFlux - scaledRightFlux + scaledBottomFlux - scaledTopFlux), - ); - }); -} - -interface MomentumScratch { - xVelocity: Float32Array; // x-normal velocity on vertical faces - yVelocity: Float32Array; // y-normal velocity on horizontal faces - smoothingScratch: Float32Array; // checkerboard-damping scratch space -} -const scratchByGrid = new WeakMap(); - -function createMomentumScratch({ nx, ny }: Grid): MomentumScratch { - return { - xVelocity: new Float32Array((nx + 1) * ny), - yVelocity: new Float32Array(nx * (ny + 1)), - smoothingScratch: new Float32Array(Math.max((nx + 1) * ny, nx * (ny + 1))), - }; -} - -function getMomentumScratch(grid: Grid): MomentumScratch { - const cached = scratchByGrid.get(grid); - if (cached) return cached; - - const scratch = createMomentumScratch(grid); - scratchByGrid.set(grid, scratch); - return scratch; -} - -function clamp(value: number, min: number, max: number): number { - return Math.min(max, Math.max(min, value)); -} - -function smoothField( - field: Float32Array, - scratch: Float32Array, - width: number, - height: number, - minColumn: number, - maxColumn: number, - minRow: number, - maxRow: number, - strength: number, -): void { - scratch.set(field.subarray(0, width * height)); - writeField(field, width, (value, index, column, row) => { - if (column < minColumn || column >= maxColumn || row < minRow || row >= maxRow) { - return value; - } - - const mean = - ((scratch[index - 1] ?? 0) + - (scratch[index + 1] ?? 0) + - (scratch[index - width] ?? 0) + - (scratch[index + width] ?? 0)) * - 0.25; - return (scratch[index] ?? 0) * (1 - strength) + mean * strength; - }); -} - -function sampleFace( - field: Float32Array, - width: number, - height: number, - positionX: number, - positionY: number, - offsetX: number, - offsetY: number, -): number { - const gridX = clamp(positionX - offsetX, 0, width - 1); - const gridY = clamp(positionY - offsetY, 0, height - 1); - const leftColumn = Math.floor(gridX); - const bottomRow = Math.floor(gridY); - const rightColumn = Math.min(width - 1, leftColumn + 1); - const topRow = Math.min(height - 1, bottomRow + 1); - const xWeight = gridX - leftColumn; - const yWeight = gridY - bottomRow; - const bottomLeft = field[bottomRow * width + leftColumn] ?? 0; - const bottomRight = field[bottomRow * width + rightColumn] ?? 0; - const topLeft = field[topRow * width + leftColumn] ?? 0; - const topRight = field[topRow * width + rightColumn] ?? 0; - return ( - (bottomLeft * (1 - xWeight) + bottomRight * xWeight) * (1 - yWeight) + - (topLeft * (1 - xWeight) + topRight * xWeight) * yWeight - ); -} - -function runMomentum(ctx: PassCtx): void { - const { nx, ny } = ctx.grid; - const inputFlux = ctx.readFlux(); - const updatedDepth = ctx.readScalar('height').data; - // Flux-to-velocity uses the pre-update upwind depth; the post-update depth - // may be near zero after drainage and would create a spurious velocity. - const previousDepth = ctx.readPrevScalar('height').data; - const scale = ctx.readScalar('scale').data; // per-cell outflow throttle - const outputFlux = ctx.writeFlux(); - const dt = ctx.dt; - const depthFloor = ctx.params.depthFloor; - const { momentumSmoothing, momentumRetention } = ctx.params; - const { xVelocity, yVelocity, smoothingScratch } = getMomentumScratch(ctx.grid); - // CFL guard limits travel to one cell per substep, keeping the backtrace - // local. The outflow cap normally enforces this before the clamp is needed. - const maxVelocity = dt > 0 ? 1 / dt : 0; - - // Use source-scaled flux and pre-update upwind depth; shallow sources emit no - // momentum, preventing shoreline blowups. - writeField(xVelocity, nx + 1, (_value, faceIndex, column, row) => { - if (column === 0 || column === nx) return 0; - - const faceFlux = inputFlux.fx[faceIndex] ?? 0; - const upstreamCell = faceFlux > 0 ? row * nx + (column - 1) : row * nx + column; - const sourceDepth = previousDepth[upstreamCell] ?? 0; - return sourceDepth > depthFloor - ? clamp((faceFlux * (scale[upstreamCell] ?? 0)) / sourceDepth, -maxVelocity, maxVelocity) - : 0; - }); - writeField(yVelocity, nx, (_value, faceIndex, column, row) => { - if (row === 0 || row === ny) return 0; - - const faceFlux = inputFlux.fy[faceIndex] ?? 0; - const upstreamCell = faceFlux > 0 ? (row - 1) * nx + column : row * nx + column; - const sourceDepth = previousDepth[upstreamCell] ?? 0; - return sourceDepth > depthFloor - ? clamp((faceFlux * (scale[upstreamCell] ?? 0)) / sourceDepth, -maxVelocity, maxVelocity) - : 0; - }); - - // Keep velocities staggered: x-faces sample at (i, j + .5), with tangential - // velocity from neighboring y-faces. - writeField(outputFlux.fx, nx + 1, (_value, faceIndex, column, row) => { - if (column === 0 || column === nx) return 0; - - const normalVelocity = xVelocity[faceIndex] ?? 0; - const tangentialVelocity = - ((yVelocity[row * nx + (column - 1)] ?? 0) + - (yVelocity[row * nx + column] ?? 0) + - (yVelocity[(row + 1) * nx + (column - 1)] ?? 0) + - (yVelocity[(row + 1) * nx + column] ?? 0)) * - 0.25; - const backtraceX = column - dt * normalVelocity; - const backtraceY = row + 0.5 - dt * tangentialVelocity; - const advectedVelocity = sampleFace(xVelocity, nx + 1, ny, backtraceX, backtraceY, 0, 0.5); - // Do not floor this: a dried source must emit zero flux to avoid shoreline - // flicker. - const sourceDepth = - advectedVelocity > 0 - ? (updatedDepth[row * nx + (column - 1)] ?? 0) - : (updatedDepth[row * nx + column] ?? 0); - return sourceDepth > depthFloor ? momentumRetention * advectedVelocity * sourceDepth : 0; - }); - // y-faces sample at (i + .5, j), with tangential velocity from x-faces. - writeField(outputFlux.fy, nx, (_value, faceIndex, column, row) => { - if (row === 0 || row === ny) return 0; - - const normalVelocity = yVelocity[faceIndex] ?? 0; - const tangentialVelocity = - ((xVelocity[(row - 1) * (nx + 1) + column] ?? 0) + - (xVelocity[(row - 1) * (nx + 1) + column + 1] ?? 0) + - (xVelocity[row * (nx + 1) + column] ?? 0) + - (xVelocity[row * (nx + 1) + column + 1] ?? 0)) * - 0.25; - const backtraceX = column + 0.5 - dt * tangentialVelocity; - const backtraceY = row - dt * normalVelocity; - const advectedVelocity = sampleFace(yVelocity, nx, ny + 1, backtraceX, backtraceY, 0.5, 0); - const sourceDepth = - advectedVelocity > 0 - ? (updatedDepth[(row - 1) * nx + column] ?? 0) - : (updatedDepth[row * nx + column] ?? 0); - return sourceDepth > depthFloor ? momentumRetention * advectedVelocity * sourceDepth : 0; - }); - - smoothField(outputFlux.fx, smoothingScratch, nx + 1, ny, 1, nx, 1, ny - 1, momentumSmoothing); - smoothField(outputFlux.fy, smoothingScratch, nx, ny + 1, 1, nx - 1, 1, ny, momentumSmoothing); -} - -interface PassRegistration { - readonly reads: PassDesc['reads']; - readonly writes: PassDesc['writes']; - readonly label: string; - readonly run: (ctx: PassCtx) => void; -} - -const PASS_REGISTRY = { - flux_update: { - reads: ['height', 'terrain', 'flux'], - writes: 'flux', - label: 'flux update (virtual pipes)', - run: runFluxUpdate, - }, - outflow_scale: { - reads: ['flux', 'height'], - writes: 'scale', - label: 'outflow scaling', - run: runOutflowScale, - }, - height_update: { - reads: ['flux', 'scale', 'height'], - writes: 'height', - label: 'height update', - run: runHeightUpdate, - }, - momentum: { - reads: ['flux', 'height', 'scale'], - writes: 'flux', - label: 'momentum transport (semi-Lagrangian)', - run: runMomentum, - }, -} as const satisfies Record; - -function descriptor(kind: PassKind): PassDesc { - const { reads, writes } = PASS_REGISTRY[kind]; - return { kind, reads, writes }; -} - -export const PASSES = { - fluxUpdate: descriptor('flux_update'), - outflowScale: descriptor('outflow_scale'), - heightUpdate: descriptor('height_update'), - momentum: descriptor('momentum'), -} as const; - -export function runKernel(kind: PassKind, ctx: PassCtx): void { - PASS_REGISTRY[kind].run(ctx); -} - -export function describePass(kind: PassKind): string { - return PASS_REGISTRY[kind].label; -} diff --git a/src/lib/Puddle/sim/passes/common.ts b/src/lib/Puddle/sim/passes/common.ts new file mode 100644 index 0000000..2a29cef --- /dev/null +++ b/src/lib/Puddle/sim/passes/common.ts @@ -0,0 +1,65 @@ +export type FieldTransform = (value: number, index: number, column: number, row: number) => number; + +export function writeField(field: Float32Array, width: number, transform: FieldTransform): void { + field.set( + field.map((value, index) => transform(value, index, index % width, Math.floor(index / width))), + ); +} + +export function clamp(value: number, min: number, max: number): number { + return Math.min(max, Math.max(min, value)); +} + +export function sampleFace( + field: Float32Array, + width: number, + height: number, + positionX: number, + positionY: number, + offsetX: number, + offsetY: number, +): number { + const gridX = clamp(positionX - offsetX, 0, width - 1); + const gridY = clamp(positionY - offsetY, 0, height - 1); + const leftColumn = Math.floor(gridX); + const bottomRow = Math.floor(gridY); + const rightColumn = Math.min(width - 1, leftColumn + 1); + const topRow = Math.min(height - 1, bottomRow + 1); + const xWeight = gridX - leftColumn; + const yWeight = gridY - bottomRow; + const bottomLeft = field[bottomRow * width + leftColumn] ?? 0; + const bottomRight = field[bottomRow * width + rightColumn] ?? 0; + const topLeft = field[topRow * width + leftColumn] ?? 0; + const topRight = field[topRow * width + rightColumn] ?? 0; + return ( + (bottomLeft * (1 - xWeight) + bottomRight * xWeight) * (1 - yWeight) + + (topLeft * (1 - xWeight) + topRight * xWeight) * yWeight + ); +} + +export function smoothField( + field: Float32Array, + scratch: Float32Array, + width: number, + height: number, + minColumn: number, + maxColumn: number, + minRow: number, + maxRow: number, + strength: number, +): void { + scratch.set(field.subarray(0, width * height)); + writeField(field, width, (value, index, column, row) => { + if (column < minColumn || column >= maxColumn || row < minRow || row >= maxRow) { + return value; + } + + const mean = + ((scratch[index - 1] ?? 0) + + (scratch[index + 1] ?? 0) + + (scratch[index - width] ?? 0) + + (scratch[index + width] ?? 0)) * + 0.25; + return (scratch[index] ?? 0) * (1 - strength) + mean * strength; + }); +} diff --git a/src/lib/Puddle/sim/passes/index.ts b/src/lib/Puddle/sim/passes/index.ts new file mode 100644 index 0000000..7fadba0 --- /dev/null +++ b/src/lib/Puddle/sim/passes/index.ts @@ -0,0 +1,57 @@ +import type { PassCtx, PassDesc, PassKind } from '../types'; +import { runMomentum } from './momentum'; +import { runFluxUpdate, runHeightUpdate, runOutflowScale } from './pipes'; + +interface PassRegistration { + readonly reads: PassDesc['reads']; + readonly writes: PassDesc['writes']; + readonly label: string; + readonly run: (ctx: PassCtx) => void; +} + +const PASS_REGISTRY = { + flux_update: { + reads: ['height', 'terrain', 'flux'], + writes: 'flux', + label: 'flux update (virtual pipes)', + run: runFluxUpdate, + }, + outflow_scale: { + reads: ['flux', 'height'], + writes: 'scale', + label: 'outflow scaling', + run: runOutflowScale, + }, + height_update: { + reads: ['flux', 'scale', 'height'], + writes: 'height', + label: 'height update', + run: runHeightUpdate, + }, + momentum: { + reads: ['flux', 'height', 'scale'], + writes: 'flux', + label: 'momentum transport (semi-Lagrangian)', + run: runMomentum, + }, +} as const satisfies Record; + +function descriptor(kind: PassKind): PassDesc { + const { reads, writes } = PASS_REGISTRY[kind]; + return { kind, reads, writes }; +} + +export const PASSES = { + fluxUpdate: descriptor('flux_update'), + outflowScale: descriptor('outflow_scale'), + heightUpdate: descriptor('height_update'), + momentum: descriptor('momentum'), +} as const; + +export function runKernel(kind: PassKind, ctx: PassCtx): void { + PASS_REGISTRY[kind].run(ctx); +} + +export function describePass(kind: PassKind): string { + return PASS_REGISTRY[kind].label; +} diff --git a/src/lib/Puddle/sim/passes/momentum.ts b/src/lib/Puddle/sim/passes/momentum.ts new file mode 100644 index 0000000..c8ff8e5 --- /dev/null +++ b/src/lib/Puddle/sim/passes/momentum.ts @@ -0,0 +1,108 @@ +import type { Grid, PassCtx } from '../types'; +import { clamp, sampleFace, smoothField, writeField } from './common'; + +interface MomentumScratch { + xVelocity: Float32Array; + yVelocity: Float32Array; + smoothingScratch: Float32Array; +} + +const scratchByGrid = new WeakMap(); + +function getMomentumScratch(grid: Grid): MomentumScratch { + const { nx, ny } = grid; + const cached = scratchByGrid.get(grid); + if (cached) return cached; + const scratch = { + xVelocity: new Float32Array((nx + 1) * ny), + yVelocity: new Float32Array(nx * (ny + 1)), + smoothingScratch: new Float32Array(Math.max((nx + 1) * ny, nx * (ny + 1))), + }; + scratchByGrid.set(grid, scratch); + return scratch; +} + +export function runMomentum(ctx: PassCtx): void { + const { nx, ny } = ctx.grid; + const inputFlux = ctx.readFlux(); + const updatedDepth = ctx.readScalar('height').data; + // Flux-to-velocity uses the pre-update upwind depth to avoid a dry-cell velocity spike. + const previousDepth = ctx.readPrevScalar('height').data; + const scale = ctx.readScalar('scale').data; + const outputFlux = ctx.writeFlux(); + const { dt, params } = ctx; + const { depthFloor, momentumSmoothing, momentumRetention } = params; + const { xVelocity, yVelocity, smoothingScratch } = getMomentumScratch(ctx.grid); + const maxVelocity = dt > 0 ? 1 / dt : 0; + + writeField(xVelocity, nx + 1, (_value, faceIndex, column, row) => { + if (column === 0 || column === nx) return 0; + const faceFlux = inputFlux.fx[faceIndex] ?? 0; + const upstreamCell = faceFlux > 0 ? row * nx + (column - 1) : row * nx + column; + const sourceDepth = previousDepth[upstreamCell] ?? 0; + return sourceDepth > depthFloor + ? clamp((faceFlux * (scale[upstreamCell] ?? 0)) / sourceDepth, -maxVelocity, maxVelocity) + : 0; + }); + writeField(yVelocity, nx, (_value, faceIndex, column, row) => { + if (row === 0 || row === ny) return 0; + const faceFlux = inputFlux.fy[faceIndex] ?? 0; + const upstreamCell = faceFlux > 0 ? (row - 1) * nx + column : row * nx + column; + const sourceDepth = previousDepth[upstreamCell] ?? 0; + return sourceDepth > depthFloor + ? clamp((faceFlux * (scale[upstreamCell] ?? 0)) / sourceDepth, -maxVelocity, maxVelocity) + : 0; + }); + + writeField(outputFlux.fx, nx + 1, (_value, faceIndex, column, row) => { + if (column === 0 || column === nx) return 0; + const normalVelocity = xVelocity[faceIndex] ?? 0; + const tangentialVelocity = + ((yVelocity[row * nx + (column - 1)] ?? 0) + + (yVelocity[row * nx + column] ?? 0) + + (yVelocity[(row + 1) * nx + (column - 1)] ?? 0) + + (yVelocity[(row + 1) * nx + column] ?? 0)) * + 0.25; + const advectedVelocity = sampleFace( + xVelocity, + nx + 1, + ny, + column - dt * normalVelocity, + row + 0.5 - dt * tangentialVelocity, + 0, + 0.5, + ); + const sourceDepth = + advectedVelocity > 0 + ? (updatedDepth[row * nx + (column - 1)] ?? 0) + : (updatedDepth[row * nx + column] ?? 0); + return sourceDepth > depthFloor ? momentumRetention * advectedVelocity * sourceDepth : 0; + }); + writeField(outputFlux.fy, nx, (_value, faceIndex, column, row) => { + if (row === 0 || row === ny) return 0; + const normalVelocity = yVelocity[faceIndex] ?? 0; + const tangentialVelocity = + ((xVelocity[(row - 1) * (nx + 1) + column] ?? 0) + + (xVelocity[(row - 1) * (nx + 1) + column + 1] ?? 0) + + (xVelocity[row * (nx + 1) + column] ?? 0) + + (xVelocity[row * (nx + 1) + column + 1] ?? 0)) * + 0.25; + const advectedVelocity = sampleFace( + yVelocity, + nx, + ny + 1, + column + 0.5 - dt * tangentialVelocity, + row - dt * normalVelocity, + 0.5, + 0, + ); + const sourceDepth = + advectedVelocity > 0 + ? (updatedDepth[(row - 1) * nx + column] ?? 0) + : (updatedDepth[row * nx + column] ?? 0); + return sourceDepth > depthFloor ? momentumRetention * advectedVelocity * sourceDepth : 0; + }); + + smoothField(outputFlux.fx, smoothingScratch, nx + 1, ny, 1, nx, 1, ny - 1, momentumSmoothing); + smoothField(outputFlux.fy, smoothingScratch, nx, ny + 1, 1, nx - 1, 1, ny, momentumSmoothing); +} diff --git a/src/lib/Puddle/sim/passes/pipes.ts b/src/lib/Puddle/sim/passes/pipes.ts new file mode 100644 index 0000000..387fc2f --- /dev/null +++ b/src/lib/Puddle/sim/passes/pipes.ts @@ -0,0 +1,107 @@ +import type { PassCtx } from '../types'; +import { writeField } from './common'; + +function scaleDirectionalFlux( + flux: number, + positiveSourceScale: number, + negativeSourceScale: number, +): number { + return flux * (flux > 0 ? positiveSourceScale : negativeSourceScale); +} + +// Clearing boundary faces keeps them at zero: no-flow walls must not retain stale ping-pong fluxes. +// Interior faces accelerate from free-surface elevation plus in-plane gravity. +export function runFluxUpdate(ctx: PassCtx): void { + const { nx, ny } = ctx.grid; + const depth = ctx.readScalar('height').data; + const terrain = ctx.readScalar('terrain').data; + const inputFlux = ctx.readFlux(); + const outputFlux = ctx.writeFlux(); + const { dt, gravity, params } = ctx; + + writeField(outputFlux.fx, nx + 1, (_value, faceIndex, column, row) => { + if (column === 0 || column === nx) return 0; + const leftCell = row * nx + (column - 1); + const rightCell = row * nx + column; + const surfaceDelta = + (terrain[leftCell] ?? 0) + + (depth[leftCell] ?? 0) - + (terrain[rightCell] ?? 0) - + (depth[rightCell] ?? 0); + return ( + params.damping * (inputFlux.fx[faceIndex] ?? 0) + + dt * (gravity.perp * surfaceDelta - gravity.tiltX) + ); + }); + writeField(outputFlux.fy, nx, (_value, faceIndex, column, row) => { + if (row === 0 || row === ny) return 0; + const bottomCell = (row - 1) * nx + column; + const topCell = row * nx + column; + const surfaceDelta = + (terrain[bottomCell] ?? 0) + + (depth[bottomCell] ?? 0) - + (terrain[topCell] ?? 0) - + (depth[topCell] ?? 0); + return ( + params.damping * (inputFlux.fy[faceIndex] ?? 0) + + dt * (gravity.perp * surfaceDelta - gravity.tiltY) + ); + }); +} + +// Uniformly cap each cell's outflow to its available volume, conserving mass. +export function runOutflowScale(ctx: PassCtx): void { + const { nx } = ctx.grid; + const flux = ctx.readFlux(); + const depth = ctx.readScalar('height').data; + const scale = ctx.writeScalar().data; + const { dt } = ctx; + writeField(scale, nx, (_value, cell, column, row) => { + const outflow = + Math.max(0, -(flux.fx[row * (nx + 1) + column] ?? 0)) + + Math.max(0, flux.fx[row * (nx + 1) + column + 1] ?? 0) + + Math.max(0, -(flux.fy[row * nx + column] ?? 0)) + + Math.max(0, flux.fy[(row + 1) * nx + column] ?? 0); + const outflowVolume = outflow * dt; + const availableDepth = depth[cell] ?? 0; + return outflowVolume > availableDepth && outflowVolume > 0 ? availableDepth / outflowVolume : 1; + }); +} + +// A face is scaled by its source cell, preserving the outflow cap above. +export function runHeightUpdate(ctx: PassCtx): void { + const { nx } = ctx.grid; + const flux = ctx.readFlux(); + const scale = ctx.readScalar('scale').data; + const depth = ctx.readScalar('height').data; + const nextDepth = ctx.writeScalar().data; + const { dt } = ctx; + writeField(nextDepth, nx, (_value, cell, column, row) => { + const leftFlux = flux.fx[row * (nx + 1) + column] ?? 0; + const rightFlux = flux.fx[row * (nx + 1) + column + 1] ?? 0; + const bottomFlux = flux.fy[row * nx + column] ?? 0; + const topFlux = flux.fy[(row + 1) * nx + column] ?? 0; + const cellScale = scale[cell] ?? 0; + const scaledLeftFlux = scaleDirectionalFlux( + leftFlux, + column > 0 ? (scale[cell - 1] ?? 0) : 0, + cellScale, + ); + const scaledRightFlux = scaleDirectionalFlux( + rightFlux, + cellScale, + column < nx - 1 ? (scale[cell + 1] ?? 0) : 0, + ); + const scaledBottomFlux = scaleDirectionalFlux( + bottomFlux, + row > 0 ? (scale[cell - nx] ?? 0) : 0, + cellScale, + ); + const scaledTopFlux = scaleDirectionalFlux(topFlux, cellScale, scale[cell + nx] ?? 0); + return Math.max( + 0, + (depth[cell] ?? 0) + + dt * (scaledLeftFlux - scaledRightFlux + scaledBottomFlux - scaledTopFlux), + ); + }); +} diff --git a/src/lib/Puddle/sim/checkerboard.test.ts b/src/lib/Puddle/sim/tests/checkerboard.test.ts similarity index 92% rename from src/lib/Puddle/sim/checkerboard.test.ts rename to src/lib/Puddle/sim/tests/checkerboard.test.ts index ff03b67..4e9bfa1 100644 --- a/src/lib/Puddle/sim/checkerboard.test.ts +++ b/src/lib/Puddle/sim/tests/checkerboard.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; -import type { FluxField } from './types'; -import { createWaterSim } from './index'; +import { createWaterSim } from '../index'; +import type { FluxField } from '../types'; interface InternalSim { engine: { resources: { currentFlux: () => FluxField } }; @@ -74,11 +74,15 @@ function checkerSample( for (let column = 1; column < width - 1; column++) { const index = row * width + column; if (active[index] !== 1) continue; + const value = residual[index]; + if (value === undefined) continue; for (const next of [index + lag, index + lag * width]) { if (active[next] !== 1) continue; - product += residual[index] * residual[next]; - firstEnergy += residual[index] ** 2; - secondEnergy += residual[next] ** 2; + const nextValue = residual[next]; + if (nextValue === undefined) continue; + product += value * nextValue; + firstEnergy += value ** 2; + secondEnergy += nextValue ** 2; } } } diff --git a/src/lib/Puddle/sim/tests/emitters.test.ts b/src/lib/Puddle/sim/tests/emitters.test.ts new file mode 100644 index 0000000..6fbd50c --- /dev/null +++ b/src/lib/Puddle/sim/tests/emitters.test.ts @@ -0,0 +1,25 @@ +import { describe, expect, it } from 'vitest'; + +import { seconds } from '../brands'; +import { rainEmitter } from '../emitters'; +import { createRng } from '../rng'; + +describe('rainEmitter — framerate-independent scheduling', () => { + it('emits the same drop count over the same sim-time regardless of dt chunking', () => { + const grid = { nx: 10, ny: 10 }; + const emitter = rainEmitter({ intervalSec: 0.5, amount: 1, radius: 1 }); + const countDrops = (dt: number, steps: number) => { + const rng = createRng(1); + let time = 0; + let dropCount = 0; + for (let stepIndex = 0; stepIndex < steps; stepIndex++) { + dropCount += emitter({ grid, time: seconds(time), dt: seconds(dt), rng }).length; + time += dt; + } + return dropCount; + }; + // 5 sim-seconds either way; 0.5 and 0.25 are exact in binary (no fp drift). + expect(countDrops(0.5, 10)).toBe(10); + expect(countDrops(0.25, 20)).toBe(10); + }); +}); diff --git a/src/lib/Puddle/sim/waterSim.test.ts b/src/lib/Puddle/sim/tests/facade.test.ts similarity index 63% rename from src/lib/Puddle/sim/waterSim.test.ts rename to src/lib/Puddle/sim/tests/facade.test.ts index fab86f5..5f0421a 100644 --- a/src/lib/Puddle/sim/waterSim.test.ts +++ b/src/lib/Puddle/sim/tests/facade.test.ts @@ -1,13 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { seconds, worldUnits } from './brands'; -import { rainEmitter } from './emitters'; -import { BASE_SUBSTEP, defaultGovernor } from './governor'; -import { integrators } from './integrators'; -import { resolveParams } from './params'; -import { createRng } from './rng'; -import type { StateStats } from './types'; -import { createWaterSim } from './index'; +import { createWaterSim } from '..'; function minimumOf(values: Float32Array): number { return values.reduce((minimum, value) => Math.min(minimum, value), Infinity); @@ -129,42 +122,7 @@ describe('createWaterSim — input validation', () => { }); }); -describe('resolveParams', () => { - it('applies defaults, clamps ranges, and rejects non-finite', () => { - const resolved = resolveParams({ damping: 5, gravity: NaN, level: 0.7 }); - expect(resolved.damping).toBeLessThanOrEqual(0.9999); - expect(resolved.gravity).toBe(9.8); - expect(resolved.level).toBeCloseTo(0.7, 6); - }); - - it('exposes momentum tuning as clamped params', () => { - const resolved = resolveParams({ momentumSmoothing: 5, momentumRetention: -1 }); - expect(resolved.momentumSmoothing).toBe(1); - expect(resolved.momentumRetention).toBe(0); - expect(resolveParams({}).momentumRetention).toBeCloseTo(0.82, 6); - }); - - it('exposes timestep/CFL tuning as clamped params with correct defaults', () => { - const defaults = resolveParams({}); - expect(defaults.cflSafety).toBeCloseTo(0.9, 6); - expect(defaults.minWaveDepth).toBeCloseTo(0.001, 6); - expect(defaults.baseSubstep).toBeCloseTo(0.08, 6); - expect(defaults.timeScale).toBe(6); - const clamped = resolveParams({ cflSafety: 9, baseSubstep: 0, timeScale: NaN }); - expect(clamped.cflSafety).toBe(1); - expect(clamped.baseSubstep).toBeGreaterThan(0); - expect(clamped.timeScale).toBe(6); - }); -}); - -describe('createWaterSim — governor / grid tuning options', () => { - it('caps per-frame substeps at the maxSubsteps override', () => { - const sim = createWaterSim({ nx: 32, ny: 20, seed: 2, maxSubsteps: 1 }); - sim.settle(20); - expect(sim.advance(10).substeps).toBeLessThanOrEqual(1); - expect(sim.height.every(Number.isFinite)).toBe(true); - }); - +describe('createWaterSim — construction tuning options', () => { it('clamps nx/ny to the maxDim option', () => { const sim = createWaterSim({ nx: 4000, ny: 4000, maxDim: 16 }); expect(sim.nx).toBe(16); @@ -210,83 +168,8 @@ describe('momentum tuning params — threaded to the momentum pass', () => { }); }); -describe('defaultGovernor', () => { - const stats: StateStats = { mass: 100, maxDepth: worldUnits(0.6) }; - const params = resolveParams({}); - - it('scales substeps with the frame budget and never exceeds CFL dt', () => { - const smallFramePlan = defaultGovernor({ - frameDt: seconds(BASE_SUBSTEP), - stats, - integrator: integrators.pipes, - params, - }); - const largeFramePlan = defaultGovernor({ - frameDt: seconds(BASE_SUBSTEP * 5), - stats, - integrator: integrators.pipes, - params, - }); - expect(smallFramePlan.substeps).toBe(1); - expect(largeFramePlan.substeps).toBeGreaterThan(smallFramePlan.substeps); - expect(largeFramePlan.dt).toBeLessThanOrEqual(BASE_SUBSTEP + 1e-9); - }); - - it('caps substeps per frame (no spiral of death)', () => { - const cappedPlan = defaultGovernor({ - frameDt: seconds(100), - stats, - integrator: integrators.pipes, - params, - }); - expect(cappedPlan.substeps).toBeLessThanOrEqual(8); - }); -}); - -describe('rainEmitter — framerate-independent scheduling', () => { - it('emits the same drop count over the same sim-time regardless of dt chunking', () => { - const grid = { nx: 10, ny: 10 }; - const emitter = rainEmitter({ intervalSec: 0.5, amount: 1, radius: 1 }); - const countDrops = (dt: number, steps: number) => { - const rng = createRng(1); - let time = 0; - let dropCount = 0; - for (let stepIndex = 0; stepIndex < steps; stepIndex++) { - dropCount += emitter({ grid, time: seconds(time), dt: seconds(dt), rng }).length; - time += dt; - } - return dropCount; - }; - // 5 sim-seconds either way; 0.5 and 0.25 are exact in binary (no fp drift). - expect(countDrops(0.5, 10)).toBe(10); - expect(countDrops(0.25, 20)).toBe(10); - }); -}); - -describe('advance — framerate independence (governor accumulator)', () => { - it('runs the same total substeps for the same real time regardless of frame size', () => { - const totalSubsteps = (frameDt: number, frames: number) => { - const sim = createWaterSim({ nx: 32, ny: 20, seed: 2 }); - sim.settle(30); - let totalSubstepCount = 0; - for (let frameIndex = 0; frameIndex < frames; frameIndex++) - totalSubstepCount += sim.advance(frameDt).substeps; - return totalSubstepCount; - }; - const substepsAt30Fps = totalSubsteps(1 / 30, 60); - const substepsAt60Fps = totalSubsteps(1 / 60, 120); - const substepsAt120Fps = totalSubsteps(1 / 120, 240); - // The floor accumulator carries the remainder, so total advanced sim-time - // is the same (within one substep of quantization) at every frame rate. - expect(Math.abs(substepsAt60Fps - substepsAt30Fps)).toBeLessThanOrEqual(2); - expect(Math.abs(substepsAt60Fps - substepsAt120Fps)).toBeLessThanOrEqual(2); - expect(substepsAt60Fps).toBeGreaterThanOrEqual(147); - expect(substepsAt60Fps).toBeLessThanOrEqual(151); - }); -}); - describe('setTiltOffset — interactive gravity tilt', () => { - const halfMasses = (sim: { nx: number; ny: number; height: Float32Array }) => { + const halfMasses = (sim: { nx: number; height: Float32Array }) => { return sim.height.reduce( ({ left, right }, depth, cellIndex) => cellIndex % sim.nx < sim.nx / 2 diff --git a/src/lib/Puddle/sim/tests/governor-engine-timing.test.ts b/src/lib/Puddle/sim/tests/governor-engine-timing.test.ts new file mode 100644 index 0000000..11f46fb --- /dev/null +++ b/src/lib/Puddle/sim/tests/governor-engine-timing.test.ts @@ -0,0 +1,70 @@ +import { describe, expect, it } from 'vitest'; + +import { createWaterSim } from '..'; +import { seconds, worldUnits } from '../brands'; +import { BASE_SUBSTEP, defaultGovernor } from '../governor'; +import { integrators } from '../integrators'; +import { resolveParams } from '../params'; +import type { StateStats } from '../types'; + +describe('defaultGovernor', () => { + const stats: StateStats = { mass: 100, maxDepth: worldUnits(0.6) }; + const params = resolveParams({}); + + it('scales substeps with the frame budget and never exceeds CFL dt', () => { + const smallFramePlan = defaultGovernor({ + frameDt: seconds(BASE_SUBSTEP), + stats, + integrator: integrators.pipes, + params, + }); + const largeFramePlan = defaultGovernor({ + frameDt: seconds(BASE_SUBSTEP * 5), + stats, + integrator: integrators.pipes, + params, + }); + expect(smallFramePlan.substeps).toBe(1); + expect(largeFramePlan.substeps).toBeGreaterThan(smallFramePlan.substeps); + expect(largeFramePlan.dt).toBeLessThanOrEqual(BASE_SUBSTEP + 1e-9); + }); + + it('caps substeps per frame (no spiral of death)', () => { + const cappedPlan = defaultGovernor({ + frameDt: seconds(100), + stats, + integrator: integrators.pipes, + params, + }); + expect(cappedPlan.substeps).toBeLessThanOrEqual(8); + }); +}); + +describe('advance — framerate independence (governor accumulator)', () => { + it('runs the same total substeps for the same real time regardless of frame size', () => { + const totalSubsteps = (frameDt: number, frames: number) => { + const sim = createWaterSim({ nx: 32, ny: 20, seed: 2 }); + sim.settle(30); + let totalSubstepCount = 0; + for (let frameIndex = 0; frameIndex < frames; frameIndex++) + totalSubstepCount += sim.advance(frameDt).substeps; + return totalSubstepCount; + }; + const substepsAt30Fps = totalSubsteps(1 / 30, 60); + const substepsAt60Fps = totalSubsteps(1 / 60, 120); + const substepsAt120Fps = totalSubsteps(1 / 120, 240); + // The floor accumulator carries the remainder, so total advanced sim-time + // is the same (within one substep of quantization) at every frame rate. + expect(Math.abs(substepsAt60Fps - substepsAt30Fps)).toBeLessThanOrEqual(2); + expect(Math.abs(substepsAt60Fps - substepsAt120Fps)).toBeLessThanOrEqual(2); + expect(substepsAt60Fps).toBeGreaterThanOrEqual(147); + expect(substepsAt60Fps).toBeLessThanOrEqual(151); + }); + + it('caps per-frame substeps at the maxSubsteps override', () => { + const sim = createWaterSim({ nx: 32, ny: 20, seed: 2, maxSubsteps: 1 }); + sim.settle(20); + expect(sim.advance(10).substeps).toBeLessThanOrEqual(1); + expect(sim.height.every(Number.isFinite)).toBe(true); + }); +}); diff --git a/src/lib/Puddle/sim/tests/params.test.ts b/src/lib/Puddle/sim/tests/params.test.ts new file mode 100644 index 0000000..34fc5aa --- /dev/null +++ b/src/lib/Puddle/sim/tests/params.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from 'vitest'; + +import { resolveParams } from '../params'; + +describe('resolveParams', () => { + it('applies defaults, clamps ranges, and rejects non-finite', () => { + const resolved = resolveParams({ damping: 5, gravity: NaN, level: 0.7 }); + expect(resolved.damping).toBeLessThanOrEqual(0.9999); + expect(resolved.gravity).toBe(9.8); + expect(resolved.level).toBeCloseTo(0.7, 6); + }); + + it('exposes momentum tuning as clamped params', () => { + const resolved = resolveParams({ momentumSmoothing: 5, momentumRetention: -1 }); + expect(resolved.momentumSmoothing).toBe(1); + expect(resolved.momentumRetention).toBe(0); + expect(resolveParams({}).momentumRetention).toBeCloseTo(0.82, 6); + }); + + it('exposes timestep/CFL tuning as clamped params with correct defaults', () => { + const defaults = resolveParams({}); + expect(defaults.cflSafety).toBeCloseTo(0.9, 6); + expect(defaults.minWaveDepth).toBeCloseTo(0.001, 6); + expect(defaults.baseSubstep).toBeCloseTo(0.08, 6); + expect(defaults.timeScale).toBe(6); + const clamped = resolveParams({ cflSafety: 9, baseSubstep: 0, timeScale: NaN }); + expect(clamped.cflSafety).toBe(1); + expect(clamped.baseSubstep).toBeGreaterThan(0); + expect(clamped.timeScale).toBe(6); + }); +}); diff --git a/src/lib/Puddle/stories/Puddle.stories.svelte b/src/lib/Puddle/stories/Puddle.stories.svelte new file mode 100644 index 0000000..a4a9c09 --- /dev/null +++ b/src/lib/Puddle/stories/Puddle.stories.svelte @@ -0,0 +1,84 @@ + + + + +{#snippet template(args: Args)} +
+ +
+{/snippet} + + { + const canvas = canvasElement.querySelector('canvas'); + await expect(canvas).not.toBeNull(); + if (!canvas) return; + const fraction = await waitForPaintedFraction(canvas, 60); + // A puddle covers part of the box but not all of it. + await expect(fraction).toBeGreaterThan(0.1); + await expect(fraction).toBeLessThan(0.95); + }} +/> + + +{#snippet hero(args: Args)} +
+ + SUMMER SUMMIT
GAME JAM 2026
+
+
+{/snippet} + + + + + + + + + + + + +{#snippet device(args: Args)} +
+ + Permission: {devicePermission} + +
+{/snippet} + + + diff --git a/src/lib/Puddle/stories/storyConfig.ts b/src/lib/Puddle/stories/storyConfig.ts new file mode 100644 index 0000000..8c88c89 --- /dev/null +++ b/src/lib/Puddle/stories/storyConfig.ts @@ -0,0 +1,56 @@ +import type { ComponentProps } from 'svelte'; + +import type { Meta } from '@storybook/sveltekit'; + +import { brandColors } from '$lib/tokens'; + +import { PUDDLE_DEFAULTS } from '../config'; +import type Puddle from '../Puddle.svelte'; + +type Args = ComponentProps; +type PuddleMeta = Meta; + +const argTypes: NonNullable = { + cellSize: { control: { type: 'range', min: 12, max: 60, step: 1 } }, + threshold: { control: { type: 'range', min: 0.005, max: 0.3, step: 0.005 } }, + level: { control: { type: 'range', min: 0.3, max: 1, step: 0.02 } }, + seed: { control: { type: 'range', min: 1, max: 40, step: 1 } }, + noiseAmp: { control: { type: 'range', min: 0, max: 0.8, step: 0.02 } }, + animated: { control: 'boolean' }, + followCursor: { control: 'boolean' }, + integrator: { control: 'radio', options: ['pipes', 'pipes+momentum'] }, + momentumSmoothing: { control: { type: 'range', min: 0, max: 1, step: 0.02 } }, + momentumRetention: { control: { type: 'range', min: 0, max: 1, step: 0.02 } }, + timeScale: { control: { type: 'range', min: 0.5, max: 20, step: 0.5 } }, + baseSubstep: { control: { type: 'range', min: 0.02, max: 0.2, step: 0.005 } }, + maxSubsteps: { control: { type: 'range', min: 1, max: 16, step: 1 } }, + cflSafety: { control: { type: 'range', min: 0.3, max: 1, step: 0.02 } }, + minWaveDepth: { control: { type: 'range', min: 0.0001, max: 0.05, step: 0.0005 } }, + settleSubsteps: { control: { type: 'range', min: 0, max: 200, step: 10 } }, + gravityDrift: { control: 'boolean' }, + driftAmp: { control: { type: 'range', min: 0, max: 8, step: 0.5 } }, + driftRateHz: { control: { type: 'range', min: 0, max: 0.5, step: 0.01 } }, + rainInterval: { control: { type: 'range', min: 0.1, max: 3, step: 0.1 } }, + rainAmount: { control: { type: 'range', min: 0, max: 0.3, step: 0.01 } }, + rainRadius: { control: { type: 'range', min: 0.5, max: 5, step: 0.5 } }, + maxCells: { control: { type: 'range', min: 20, max: 200, step: 10 } }, + cursorTilt: { control: { type: 'range', min: 0, max: 2, step: 0.1 } }, + cursorEase: { control: { type: 'range', min: 0.05, max: 1.5, step: 0.05 } }, + deviceGravity: { control: 'boolean' }, + deviceTilt: { control: { type: 'range', min: 0, max: 12, step: 0.5 } }, + deviceEase: { control: { type: 'range', min: 0.05, max: 1.5, step: 0.05 } }, + deviceNeutralWindow: { control: { type: 'range', min: 0, max: 10, step: 0.25 } }, + color: { control: 'color' }, +}; + +export const puddleStoryConfig = { + args: { + ...PUDDLE_DEFAULTS, + color: brandColors.shade['950'], + } satisfies Args, + argTypes, + parameters: { + backgrounds: { default: 'lime', values: [{ name: 'lime', value: '#c7f735' }] }, + controls: { include: Object.keys(argTypes) }, + }, +} satisfies Pick; diff --git a/src/lib/Puddle/tests/Puddle.interaction.svelte.test.ts b/src/lib/Puddle/tests/Puddle.interaction.svelte.test.ts new file mode 100644 index 0000000..fc65331 --- /dev/null +++ b/src/lib/Puddle/tests/Puddle.interaction.svelte.test.ts @@ -0,0 +1,93 @@ +import { expect, test } from 'vitest'; +import { render } from 'vitest-browser-svelte'; + +import Puddle from '../Puddle.svelte'; +import { nextFrame, paintedHalves } from './canvas'; + +async function waitForPaintedHalves( + canvas: HTMLCanvasElement, +): Promise<{ left: number; right: number }> { + let halves = { left: 0, right: 0 }; + for (let i = 0; i < 120; i++) { + if (canvas.width > 0) { + halves = paintedHalves(canvas); + if (halves.left + halves.right > 0) break; + } + await nextFrame(); + } + return halves; +} + +test('followCursor gently leans the puddle toward the pointer', async () => { + await render(Puddle, { + props: { animated: true, followCursor: true, style: 'width:760px;height:420px;' }, + }); + const canvas = document.querySelector('canvas'); + expect(canvas).not.toBeNull(); + if (!canvas) return; + + const before = await waitForPaintedHalves(canvas); + const total = before.left + before.right; + expect(total).toBeGreaterThan(0); + + // Hold the cursor well to the right of the puddle and let the loop run. + const rect = canvas.getBoundingClientRect(); + window.dispatchEvent( + new PointerEvent('pointermove', { + clientX: Math.min(window.innerWidth - 2, rect.right + 300), + clientY: rect.top + rect.height / 2, + }), + ); + // Poll for the migration instead of a fixed wait: under full-suite load RAF + // starves and the lean accumulates slower. 2% of the painted area is ~10 grid + // cells of systematic shift — far beyond raindrop jitter (~1 cell of wobble). + const target = before.right - before.left + total * 0.02; + let after = before; + for (let i = 0; i < 30 && after.right - after.left <= target; i++) { + await new Promise((resolve) => void setTimeout(resolve, 500)); + after = paintedHalves(canvas); + } + expect(after.right - after.left).toBeGreaterThan(target); +}); + +test('deviceGravity leans the puddle using motion-sensor gravity', async () => { + await render(Puddle, { + props: { + animated: true, + deviceGravity: true, + deviceTilt: 8, + deviceEase: 0.05, + deviceNeutralWindow: 10, + style: 'width:760px;height:420px;', + }, + }); + const canvas = document.querySelector('canvas'); + expect(canvas).not.toBeNull(); + if (!canvas) return; + + const before = await waitForPaintedHalves(canvas); + const total = before.left + before.right; + expect(total).toBeGreaterThan(0); + + window.dispatchEvent( + new DeviceMotionEvent('devicemotion', { + accelerationIncludingGravity: { x: 0, y: 0, z: 9.8 }, + interval: 16, + }), + ); + await new Promise((resolve) => void setTimeout(resolve, 100)); + + const target = before.right - before.left + total * 0.02; + let after = before; + for (let i = 0; i < 30 && after.right - after.left <= target; i++) { + window.dispatchEvent( + new DeviceMotionEvent('devicemotion', { + accelerationIncludingGravity: { x: -9.8, y: 0, z: 0 }, + interval: 16, + }), + ); + await new Promise((resolve) => void setTimeout(resolve, 100)); + after = paintedHalves(canvas); + } + expect(after.right - after.left).toBeGreaterThan(target); +}); diff --git a/src/lib/Puddle/tests/Puddle.rendering.svelte.test.ts b/src/lib/Puddle/tests/Puddle.rendering.svelte.test.ts new file mode 100644 index 0000000..32066ca --- /dev/null +++ b/src/lib/Puddle/tests/Puddle.rendering.svelte.test.ts @@ -0,0 +1,46 @@ +import { expect, test } from 'vitest'; +import { render } from 'vitest-browser-svelte'; + +import Puddle from '../Puddle.svelte'; +import { alphaAt, rgbaAt, waitForPaintedFraction } from './canvas'; + +test('renders a thresholded puddle silhouette', async () => { + await render(Puddle, { + props: { animated: false, color: '#141414', style: 'width:760px;height:420px;' }, + }); + const canvas = document.querySelector('canvas'); + expect(canvas).not.toBeNull(); + if (!canvas) return; + + const fraction = await waitForPaintedFraction(canvas, 120); + + // A puddle covers a chunk of the box but leaves green around it. + expect(fraction).toBeGreaterThan(0.1); + expect(fraction).toBeLessThan(0.9); + // Opaque in the middle, transparent in the corners => a rounded blob, not a filled rectangle. + expect(alphaAt(canvas, 0.5, 0.5)).toBeGreaterThan(0); + expect(alphaAt(canvas, 0.02, 0.03)).toBe(0); + expect(alphaAt(canvas, 0.98, 0.97)).toBe(0); +}); + +test('accepts a culori Color object for `color`', async () => { + await render(Puddle, { + props: { + animated: false, + color: { mode: 'rgb', r: 1, g: 0, b: 0 }, + style: 'width:760px;height:420px;', + }, + }); + const canvas = document.querySelector('canvas'); + expect(canvas).not.toBeNull(); + if (!canvas) return; + + for (let i = 0; i < 120; i++) { + if (canvas.width > 0 && alphaAt(canvas, 0.5, 0.5) > 0) break; + await waitForPaintedFraction(canvas, 1); + } + + // The object's red, not the near-black fallback a dropped color would give. + const px = rgbaAt(canvas, 0.5, 0.5); + expect([px[0], px[1], px[2], (px[3] ?? 0) > 0]).toEqual([255, 0, 0, true]); +}); diff --git a/src/lib/Puddle/tests/canvas.ts b/src/lib/Puddle/tests/canvas.ts new file mode 100644 index 0000000..cbd0ecb --- /dev/null +++ b/src/lib/Puddle/tests/canvas.ts @@ -0,0 +1,61 @@ +export const nextFrame = () => + new Promise((resolve) => { + requestAnimationFrame(() => { + requestAnimationFrame(() => { + resolve(); + }); + }); + }); + +export function ctxOf(canvas: HTMLCanvasElement): CanvasRenderingContext2D { + const ctx = canvas.getContext('2d', { willReadFrequently: true }); + if (!ctx) throw new Error('no 2d context'); + return ctx; +} + +export function rgbaAt(canvas: HTMLCanvasElement, fx: number, fy: number): Uint8ClampedArray { + const x = Math.floor(canvas.width * fx); + const y = Math.floor(canvas.height * fy); + return ctxOf(canvas).getImageData(x, y, 1, 1).data; +} + +export function alphaAt(canvas: HTMLCanvasElement, fx: number, fy: number): number { + return rgbaAt(canvas, fx, fy)[3] ?? 0; +} + +export function paintedFraction(canvas: HTMLCanvasElement): number { + const { data } = ctxOf(canvas).getImageData(0, 0, canvas.width, canvas.height); + let n = 0; + for (let i = 3; i < data.length; i += 4) if ((data[i] ?? 0) > 0) n++; + return n / (canvas.width * canvas.height); +} + +export function paintedHalves(canvas: HTMLCanvasElement): { left: number; right: number } { + const { data } = ctxOf(canvas).getImageData(0, 0, canvas.width, canvas.height); + let left = 0; + let right = 0; + for (let y = 0; y < canvas.height; y++) { + for (let x = 0; x < canvas.width; x++) { + if ((data[(y * canvas.width + x) * 4 + 3] ?? 0) > 0) { + if (x < canvas.width / 2) left++; + else right++; + } + } + } + return { left, right }; +} + +export async function waitForPaintedFraction( + canvas: HTMLCanvasElement, + maxFrames: number, +): Promise { + let fraction = 0; + for (let i = 0; i < maxFrames; i++) { + if (canvas.width > 0) { + fraction = paintedFraction(canvas); + if (fraction > 0) break; + } + await nextFrame(); + } + return fraction; +} diff --git a/src/lib/index.ts b/src/lib/index.ts index ccd691c..4528aaf 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -13,8 +13,5 @@ export { type PaletteSwatch, } from './ColorPalette/palette'; export { default as Puddle } from './Puddle/Puddle.svelte'; -export { - requestDeviceGravityPermission, - type DeviceGravityPermission, -} from './Puddle/deviceGravity'; +export { requestDeviceGravityPermission, type DeviceGravityPermission } from './Puddle/device'; export { default as SprayBorder } from './SprayBorder/SprayBorder.svelte'; From 124a00e3434072b437d10e52caf637df18751839 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 01:41:21 -0700 Subject: [PATCH 055/141] chore: refine puddle drift amplitude control --- src/lib/Puddle/stories/storyConfig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Puddle/stories/storyConfig.ts b/src/lib/Puddle/stories/storyConfig.ts index 8c88c89..0a02d9f 100644 --- a/src/lib/Puddle/stories/storyConfig.ts +++ b/src/lib/Puddle/stories/storyConfig.ts @@ -28,7 +28,7 @@ const argTypes: NonNullable = { minWaveDepth: { control: { type: 'range', min: 0.0001, max: 0.05, step: 0.0005 } }, settleSubsteps: { control: { type: 'range', min: 0, max: 200, step: 10 } }, gravityDrift: { control: 'boolean' }, - driftAmp: { control: { type: 'range', min: 0, max: 8, step: 0.5 } }, + driftAmp: { control: { type: 'range', min: 0, max: 8, step: 0.05 } }, driftRateHz: { control: { type: 'range', min: 0, max: 0.5, step: 0.01 } }, rainInterval: { control: { type: 'range', min: 0.1, max: 3, step: 0.1 } }, rainAmount: { control: { type: 'range', min: 0, max: 0.3, step: 0.01 } }, From 919698f1e8688d1336b96ed9680681348465a791 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 02:49:26 -0700 Subject: [PATCH 056/141] feat(puddle): support wide-gamut colors --- src/lib/Puddle/Puddle.svelte | 29 +++- .../render/puddleRenderer.svelte.test.ts | 77 +++++++++ src/lib/Puddle/render/puddleRenderer.ts | 150 +++++++++++++++--- .../tests/Puddle.rendering.svelte.test.ts | 16 +- src/lib/Puddle/tests/canvas.ts | 15 +- 5 files changed, 257 insertions(+), 30 deletions(-) create mode 100644 src/lib/Puddle/render/puddleRenderer.svelte.test.ts diff --git a/src/lib/Puddle/Puddle.svelte b/src/lib/Puddle/Puddle.svelte index b467535..b422f9b 100644 --- a/src/lib/Puddle/Puddle.svelte +++ b/src/lib/Puddle/Puddle.svelte @@ -2,7 +2,7 @@ import { MediaQuery } from 'svelte/reactivity'; import { devicePixelRatio } from 'svelte/reactivity/window'; - import { formatCss, rgb } from 'culori'; + import { formatCss, parse, toGamut, type Color } from 'culori'; import { ElementSize } from 'runed'; import { browser } from '$app/environment'; @@ -49,11 +49,17 @@ ...rest }: PuddleProps = $props(); - // Sanitize the color once via rgb(), which converts Color objects as well as - // CSS strings (parse() is string-only and would drop objects to the fallback). - const colorObj = $derived(rgb(color) ?? { mode: 'rgb' as const, r: 0.08, g: 0.08, b: 0.08 }); + const fallbackColor = { mode: 'rgb', r: 0.08, g: 0.08, b: 0.08 } as const satisfies Color; + const mapToP3 = toGamut('p3', 'oklch'); + const mapToSrgb = toGamut('rgb', 'oklch'); + // Keep the source mode until each output path selects its supported gamut. + const colorObj = $derived.by(() => { + if (typeof color !== 'string') return { ...color }; + return parse(color) ?? fallbackColor; + }); // SSR'd onto the fallback so the no-JS backdrop keeps the puddle color. - const cssColor = $derived(formatCss(colorObj)); + const cssColor = $derived(formatCss(mapToSrgb(colorObj))); + const wideCssColor = $derived(formatCss(mapToP3(colorObj))); let canvas = $state(null); let host = $state(null); @@ -188,7 +194,13 @@ />
- + {@render children?.()}
@@ -215,6 +227,11 @@ background: var(--puddle-color, #141414); border-radius: 12%/20%; } + @supports (color: color(display-p3 1 0 0)) { + .fallback { + background: var(--puddle-color-wide, var(--puddle-color, #141414)); + } + } .fallback.painted { display: none; } diff --git a/src/lib/Puddle/render/puddleRenderer.svelte.test.ts b/src/lib/Puddle/render/puddleRenderer.svelte.test.ts new file mode 100644 index 0000000..1089a61 --- /dev/null +++ b/src/lib/Puddle/render/puddleRenderer.svelte.test.ts @@ -0,0 +1,77 @@ +import { rgb, toGamut } from 'culori'; +import { expect, test } from 'vitest'; + +import { colorBytes, createPuddleRenderer } from './puddleRenderer'; + +const p3Red = { mode: 'p3', r: 1, g: 0, b: 0 } as const; + +test('keeps Display-P3 channels when rendering into a supported P3 canvas', () => { + expect(colorBytes(p3Red, 'display-p3')).toEqual([255, 0, 0, 255]); + + const canvas = document.createElement('canvas'); + const rendered = createPuddleRenderer().render(canvas, { + nx: 1, + ny: 1, + height: [1], + cssW: 1, + cssH: 1, + dpr: 1, + threshold: 0, + color: 'color(display-p3 1 0 0)', + }); + + expect(rendered).toBe(true); + const context = canvas.getContext('2d'); + expect(context).not.toBeNull(); + if (!context) return; + + const actualSpace = + context.getContextAttributes().colorSpace === 'display-p3' ? 'display-p3' : 'srgb'; + const pixel = context.getImageData(0, 0, 1, 1, { colorSpace: actualSpace }); + if (actualSpace === 'display-p3') { + expect(pixel.colorSpace).toBe('display-p3'); + expect([...pixel.data]).toEqual([255, 0, 0, 255]); + } else { + const expected = colorBytes(p3Red, 'srgb'); + expect(expected).not.toBeNull(); + if (expected === null) return; + expect([...pixel.data]).toEqual([...expected]); + } +}); + +test('perceptually gamut-maps a P3 object for the sRGB fallback', () => { + const mapped = rgb(toGamut('rgb', 'oklch')(p3Red)); + + const bytes = colorBytes(p3Red, 'srgb'); + expect(bytes).toEqual([ + Math.round(mapped.r * 255), + Math.round(mapped.g * 255), + Math.round(mapped.b * 255), + 255, + ]); + // P3 red's out-of-range green and blue channels must not be silently byte-clipped to zero. + expect(bytes?.[1]).toBeGreaterThan(0); + expect(bytes?.[2]).toBeGreaterThan(0); +}); + +test('uses the forced sRGB fallback pipeline when requested', () => { + const canvas = document.createElement('canvas'); + const rendered = createPuddleRenderer({ colorSpace: 'srgb' }).render(canvas, { + nx: 1, + ny: 1, + height: [1], + cssW: 1, + cssH: 1, + dpr: 1, + threshold: 0, + color: p3Red, + }); + + expect(rendered).toBe(true); + const context = canvas.getContext('2d'); + expect(context?.getContextAttributes().colorSpace).toBe('srgb'); + const expected = colorBytes(p3Red, 'srgb'); + expect(expected).not.toBeNull(); + if (expected === null) return; + expect([...(context?.getImageData(0, 0, 1, 1).data ?? [])]).toEqual([...expected]); +}); diff --git a/src/lib/Puddle/render/puddleRenderer.ts b/src/lib/Puddle/render/puddleRenderer.ts index 093719f..4445f8d 100644 --- a/src/lib/Puddle/render/puddleRenderer.ts +++ b/src/lib/Puddle/render/puddleRenderer.ts @@ -8,7 +8,17 @@ // dimensions change. That avoids the cross-instance thrash and per-frame // allocation of a shared global buffer. -import { type Color, rgb } from 'culori'; +import { type Color, parse, toGamut } from 'culori'; + +type CanvasColorSpace = 'display-p3' | 'srgb'; +type ScratchContext = OffscreenCanvasRenderingContext2D & { + getContextAttributes?: () => CanvasRenderingContext2DSettings; +}; + +export interface PuddleRendererOptions { + /** Override the preferred color space, primarily for deterministic fallback environments. */ + colorSpace?: CanvasColorSpace; +} export interface PuddleRenderParams { nx: number; @@ -29,36 +39,136 @@ export interface PuddleRenderer { render: (target: HTMLCanvasElement, params: PuddleRenderParams) => boolean; } -export function createPuddleRenderer(): PuddleRenderer { +const mapToP3 = toGamut('p3', 'oklch'); +const mapToSrgb = toGamut('rgb', 'oklch'); + +function actualColorSpace(context: CanvasRenderingContext2D | ScratchContext): CanvasColorSpace { + try { + return context.getContextAttributes?.().colorSpace === 'display-p3' ? 'display-p3' : 'srgb'; + } catch { + return 'srgb'; + } +} + +function createScratchContext( + canvas: OffscreenCanvas, + colorSpace: CanvasColorSpace, +): ScratchContext | null { + try { + return canvas.getContext('2d', { colorSpace, willReadFrequently: true }); + } catch { + return canvas.getContext('2d', { willReadFrequently: true }); + } +} + +function createTargetContext( + canvas: HTMLCanvasElement, + colorSpace: CanvasColorSpace, +): CanvasRenderingContext2D | null { + try { + const context = canvas.getContext('2d', { colorSpace }); + if (context || colorSpace === 'srgb') return context; + } catch { + // Older canvases do not accept context color-space settings. + } + return canvas.getContext('2d'); +} + +function createPixelBuffer( + context: ScratchContext, + width: number, + height: number, + colorSpace: CanvasColorSpace, +): ImageData | null { + try { + const candidate = context.createImageData(width, height, { colorSpace }); + if (candidate.colorSpace === colorSpace) return candidate; + } catch { + // Older canvases do not accept ImageData settings. + } + if (colorSpace !== 'srgb') return null; + const candidate = context.createImageData(width, height); + return !('colorSpace' in candidate) || candidate.colorSpace === 'srgb' ? candidate : null; +} + +function toByte(channel: number | undefined): number { + const finite = Number.isFinite(channel) ? (channel ?? 0) : 0; + return Math.round(Math.min(1, Math.max(0, finite)) * 255); +} + +export function colorBytes( + color: string | Color, + colorSpace: CanvasColorSpace, +): readonly [number, number, number, number] | null { + const parsed = typeof color === 'string' ? parse(color) : color; + if (parsed === undefined) return null; + const converted = colorSpace === 'display-p3' ? mapToP3(parsed) : mapToSrgb(parsed); + return [ + toByte(converted.r), + toByte(converted.g), + toByte(converted.b), + toByte(converted.alpha ?? 1), + ]; +} + +export function createPuddleRenderer(options: PuddleRendererOptions = {}): PuddleRenderer { let scratch: OffscreenCanvas | null = null; - let scratchCtx: OffscreenCanvasRenderingContext2D | null = null; + let scratchCtx: ScratchContext | null = null; + let targetCanvas: HTMLCanvasElement | null = null; + let targetCtx: CanvasRenderingContext2D | null = null; + let colorSpace: CanvasColorSpace = 'srgb'; let img: ImageData | null = null; - const ensure = (nx: number, ny: number): boolean => { + const ensure = (target: HTMLCanvasElement, nx: number, ny: number): boolean => { + if (targetCanvas !== target) { + const preferred = options.colorSpace ?? 'display-p3'; + scratch = new OffscreenCanvas(nx, ny); + scratchCtx = createScratchContext(scratch, preferred); + const scratchSpace = scratchCtx ? actualColorSpace(scratchCtx) : 'srgb'; + const requested = + preferred === 'display-p3' && scratchSpace === 'display-p3' ? preferred : 'srgb'; + targetCtx = createTargetContext(target, requested); + colorSpace = + requested === 'display-p3' && targetCtx && actualColorSpace(targetCtx) === 'display-p3' + ? 'display-p3' + : 'srgb'; + + if (!scratchCtx || actualColorSpace(scratchCtx) !== colorSpace) { + scratch = new OffscreenCanvas(nx, ny); + scratchCtx = createScratchContext(scratch, colorSpace); + } + targetCanvas = target; + img = null; + } if (!scratch) { scratch = new OffscreenCanvas(nx, ny); - scratchCtx = scratch.getContext('2d', { willReadFrequently: true }); + scratchCtx = createScratchContext(scratch, colorSpace); } else if (scratch.width !== nx || scratch.height !== ny) { scratch.width = nx; scratch.height = ny; - img = null; // dimensions changed -> reusable buffer no longer fits + img = null; } - if (!scratchCtx) return false; + if (!scratchCtx || !targetCtx) return false; // On the right of `||`, TS has narrowed img to non-null (its width matched). - if (img?.width !== nx || img.height !== ny) img = scratchCtx.createImageData(nx, ny); + if (img?.width !== nx || img.height !== ny) { + img = createPixelBuffer(scratchCtx, nx, ny, colorSpace); + if (!img && colorSpace === 'display-p3') { + colorSpace = 'srgb'; + scratch = new OffscreenCanvas(nx, ny); + scratchCtx = createScratchContext(scratch, colorSpace); + img = scratchCtx ? createPixelBuffer(scratchCtx, nx, ny, colorSpace) : null; + } + if (!img) return false; + } return true; }; const render = (target: HTMLCanvasElement, params: PuddleRenderParams): boolean => { const { nx, ny, height, cssW, cssH, dpr, threshold } = params; - const c = rgb(params.color); - if (!c) return false; - if (!ensure(nx, ny) || !scratch || !scratchCtx || !img) return false; - - const r = Math.round(c.r * 255); - const g = Math.round(c.g * 255); - const b = Math.round(c.b * 255); - const a = Math.round((c.alpha ?? 1) * 255); + if (!ensure(target, nx, ny) || !scratch || !scratchCtx || !targetCtx || !img) return false; + const bytes = colorBytes(params.color, colorSpace); + if (!bytes) return false; + const [r, g, b, a] = bytes; const data = img.data; for (let k = 0; k < nx * ny; k++) { @@ -80,11 +190,9 @@ export function createPuddleRenderer(): PuddleRenderer { target.width = w; target.height = h; } - const tctx = target.getContext('2d'); - if (!tctx) return false; - tctx.imageSmoothingEnabled = false; // nearest-neighbor upscale -> crisp blocks - tctx.clearRect(0, 0, w, h); - tctx.drawImage(scratch, 0, 0, nx, ny, 0, 0, w, h); + targetCtx.imageSmoothingEnabled = false; // nearest-neighbor upscale -> crisp blocks + targetCtx.clearRect(0, 0, w, h); + targetCtx.drawImage(scratch, 0, 0, nx, ny, 0, 0, w, h); return true; }; diff --git a/src/lib/Puddle/tests/Puddle.rendering.svelte.test.ts b/src/lib/Puddle/tests/Puddle.rendering.svelte.test.ts index 32066ca..d1fd625 100644 --- a/src/lib/Puddle/tests/Puddle.rendering.svelte.test.ts +++ b/src/lib/Puddle/tests/Puddle.rendering.svelte.test.ts @@ -41,6 +41,20 @@ test('accepts a culori Color object for `color`', async () => { } // The object's red, not the near-black fallback a dropped color would give. - const px = rgbaAt(canvas, 0.5, 0.5); + const px = rgbaAt(canvas, 0.5, 0.5, 'srgb'); expect([px[0], px[1], px[2], (px[3] ?? 0) > 0]).toEqual([255, 0, 0, true]); }); + +test('preserves a wide-gamut CSS color for the CSS fallback', async () => { + await render(Puddle, { + props: { + animated: false, + color: 'color(display-p3 1 0 0)', + style: 'width:760px;height:420px;', + }, + }); + + const fallback = document.querySelector('.fallback'); + expect(fallback?.style.getPropertyValue('--puddle-color-wide')).toMatch(/^color\(display-p3 /); + expect(fallback?.style.getPropertyValue('--puddle-color')).toMatch(/^color\(srgb /); +}); diff --git a/src/lib/Puddle/tests/canvas.ts b/src/lib/Puddle/tests/canvas.ts index cbd0ecb..4023346 100644 --- a/src/lib/Puddle/tests/canvas.ts +++ b/src/lib/Puddle/tests/canvas.ts @@ -13,10 +13,21 @@ export function ctxOf(canvas: HTMLCanvasElement): CanvasRenderingContext2D { return ctx; } -export function rgbaAt(canvas: HTMLCanvasElement, fx: number, fy: number): Uint8ClampedArray { +export function rgbaAt( + canvas: HTMLCanvasElement, + fx: number, + fy: number, + colorSpace?: PredefinedColorSpace, +): Uint8ClampedArray { const x = Math.floor(canvas.width * fx); const y = Math.floor(canvas.height * fy); - return ctxOf(canvas).getImageData(x, y, 1, 1).data; + return ctxOf(canvas).getImageData( + x, + y, + 1, + 1, + colorSpace !== undefined ? { colorSpace } : undefined, + ).data; } export function alphaAt(canvas: HTMLCanvasElement, fx: number, fy: number): number { From 9ffb540bb6a8cba7370bf736c27d191519a26cd6 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 03:17:04 -0700 Subject: [PATCH 057/141] refactor(puddle): expose readonly height view --- src/lib/Puddle/render/puddleRenderer.ts | 2 +- src/lib/Puddle/sim/engine.ts | 2 +- src/lib/Puddle/sim/facade/waterSim.ts | 14 ++---- src/lib/Puddle/sim/tests/checkerboard.test.ts | 2 +- src/lib/Puddle/sim/tests/facade.test.ts | 49 +++++++++---------- .../sim/tests/governor-engine-timing.test.ts | 2 +- 6 files changed, 31 insertions(+), 40 deletions(-) diff --git a/src/lib/Puddle/render/puddleRenderer.ts b/src/lib/Puddle/render/puddleRenderer.ts index 4445f8d..d7c1322 100644 --- a/src/lib/Puddle/render/puddleRenderer.ts +++ b/src/lib/Puddle/render/puddleRenderer.ts @@ -23,7 +23,7 @@ export interface PuddleRendererOptions { export interface PuddleRenderParams { nx: number; ny: number; - height: Float32Array; + height: ArrayLike; /** CSS pixel size of the box the puddle fills. */ cssW: number; cssH: number; diff --git a/src/lib/Puddle/sim/engine.ts b/src/lib/Puddle/sim/engine.ts index bd23e26..5b65639 100644 --- a/src/lib/Puddle/sim/engine.ts +++ b/src/lib/Puddle/sim/engine.ts @@ -84,7 +84,7 @@ export class Engine { } /** Live ping-pong buffer; callers must not cache or write it. */ - height(): Float32Array { + height(): ArrayLike { return this.resources.height().data; } diff --git a/src/lib/Puddle/sim/facade/waterSim.ts b/src/lib/Puddle/sim/facade/waterSim.ts index 3643ac1..2ac66fa 100644 --- a/src/lib/Puddle/sim/facade/waterSim.ts +++ b/src/lib/Puddle/sim/facade/waterSim.ts @@ -16,7 +16,6 @@ export class WaterSim { readonly ny: number; private readonly engine: ReturnType; - private readonly heightSnapshot: Float32Array; private readonly tiltOffset = { x: 0, y: 0 }; constructor(options: WaterSimOptions) { @@ -24,18 +23,11 @@ export class WaterSim { this.nx = config.grid.nx; this.ny = config.grid.ny; this.engine = createConfiguredEngine(config); - - // Hide the mutable, ping-pong engine buffer behind a reused snapshot. - this.heightSnapshot = new Float32Array(this.nx * this.ny); } - /** - * Current per-cell depth for rendering. This reused snapshot is overwritten on - * each access; copy it to retain a frame's values. - */ - get height(): Float32Array { - this.heightSnapshot.set(this.engine.height()); - return this.heightSnapshot; + /** Current per-cell depth for rendering. Copy it to retain a frame's values. */ + get height(): ArrayLike { + return this.engine.height(); } /** Run substeps to bring poured water to rest (deterministic). */ diff --git a/src/lib/Puddle/sim/tests/checkerboard.test.ts b/src/lib/Puddle/sim/tests/checkerboard.test.ts index 4e9bfa1..f93d60d 100644 --- a/src/lib/Puddle/sim/tests/checkerboard.test.ts +++ b/src/lib/Puddle/sim/tests/checkerboard.test.ts @@ -18,7 +18,7 @@ function percentile(values: number[], fraction: number): number { } function isNearShoreline( - depth: Float32Array, + depth: ArrayLike, nx: number, ny: number, column: number, diff --git a/src/lib/Puddle/sim/tests/facade.test.ts b/src/lib/Puddle/sim/tests/facade.test.ts index 5f0421a..7477470 100644 --- a/src/lib/Puddle/sim/tests/facade.test.ts +++ b/src/lib/Puddle/sim/tests/facade.test.ts @@ -1,9 +1,13 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, expectTypeOf, it } from 'vitest'; import { createWaterSim } from '..'; -function minimumOf(values: Float32Array): number { - return values.reduce((minimum, value) => Math.min(minimum, value), Infinity); +function minimumOf(values: ArrayLike): number { + return Array.from(values).reduce((minimum, value) => Math.min(minimum, value), Infinity); +} + +function allFinite(values: ArrayLike): boolean { + return Array.from(values).every(Number.isFinite); } describe('createWaterSim — invariants', () => { @@ -31,7 +35,7 @@ describe('createWaterSim — invariants', () => { sim.clampMass(massCap); } expect(sim.totalMass()).toBeLessThanOrEqual(massCap + 1e-3); - expect(sim.height.every(Number.isFinite)).toBe(true); + expect(allFinite(sim.height)).toBe(true); }); }); @@ -45,7 +49,7 @@ describe('createWaterSim — momentum integrator (pipes+momentum)', () => { expect(Math.abs(sim.totalMass() - afterSplat) / afterSplat).toBeLessThan(1e-4); expect(massBeforeSplat).toBeGreaterThan(0); expect(minimumOf(sim.height)).toBeGreaterThanOrEqual(0); - expect(sim.height.every(Number.isFinite)).toBe(true); + expect(allFinite(sim.height)).toBe(true); }); }); @@ -83,7 +87,7 @@ describe('createWaterSim — momentum shoreline stability', () => { expect( toggleCounts.reduce((maximum, count) => Math.max(maximum, count), 0), ).toBeLessThanOrEqual(2); - expect(sim.height.every(Number.isFinite)).toBe(true); + expect(allFinite(sim.height)).toBe(true); expect(Math.abs(sim.totalMass() - massStart) / massStart).toBeLessThan(1e-4); }); }); @@ -118,7 +122,7 @@ describe('createWaterSim — input validation', () => { it('clamps non-finite / out-of-range params so the sim stays finite', () => { const sim = createWaterSim({ nx: 40, ny: 24, damping: NaN, gravity: -10, level: Infinity }); sim.settle(120); - expect(sim.height.every(Number.isFinite)).toBe(true); + expect(allFinite(sim.height)).toBe(true); }); }); @@ -139,7 +143,7 @@ describe('createWaterSim — construction tuning options', () => { driftRateHz: 0.2, }); sim.settle(120); - expect(sim.height.every(Number.isFinite)).toBe(true); + expect(allFinite(sim.height)).toBe(true); }); }); @@ -169,14 +173,13 @@ describe('momentum tuning params — threaded to the momentum pass', () => { }); describe('setTiltOffset — interactive gravity tilt', () => { - const halfMasses = (sim: { nx: number; height: Float32Array }) => { - return sim.height.reduce( - ({ left, right }, depth, cellIndex) => - cellIndex % sim.nx < sim.nx / 2 - ? { left: left + depth, right } - : { left, right: right + depth }, - { left: 0, right: 0 }, - ); + const halfMasses = (sim: { nx: number; height: ArrayLike }) => { + const masses = { left: 0, right: 0 }; + for (let cellIndex = 0; cellIndex < sim.height.length; cellIndex++) { + const side = cellIndex % sim.nx < sim.nx / 2 ? 'left' : 'right'; + masses[side] += sim.height[cellIndex] ?? 0; + } + return masses; }; it('shifts mass toward +x for a negative x offset (flux-pass sign convention)', () => { @@ -213,7 +216,7 @@ describe('facade — non-finite input guards', () => { sim.step(NaN); sim.clampMass(NaN); for (let frameIndex = 0; frameIndex < 30; frameIndex++) sim.advance(1 / 60); - expect(sim.height.every(Number.isFinite)).toBe(true); + expect(allFinite(sim.height)).toBe(true); }); it('clamps a negative clampMass target to zero instead of flipping depths', () => { @@ -221,16 +224,12 @@ describe('facade — non-finite input guards', () => { sim.settle(40); sim.clampMass(-5); expect(minimumOf(sim.height)).toBeGreaterThanOrEqual(0); - expect(sim.height.every(Number.isFinite)).toBe(true); + expect(allFinite(sim.height)).toBe(true); }); - it('hands out a snapshot: writing to sim.height cannot corrupt sim state', () => { + it('exposes height as a read-only array-like view', () => { const sim = createWaterSim({ nx: 24, ny: 16, seed: 4 }); - sim.settle(40); - // Scribble on the returned buffer — a live-buffer leak would poison the field. - sim.height.fill(NaN); - sim.advance(1 / 60); - expect(Number.isFinite(sim.totalMass())).toBe(true); - expect(sim.height.every(Number.isFinite)).toBe(true); + expectTypeOf(sim.height).toEqualTypeOf>(); + expect(sim.height.length).toBe(sim.nx * sim.ny); }); }); diff --git a/src/lib/Puddle/sim/tests/governor-engine-timing.test.ts b/src/lib/Puddle/sim/tests/governor-engine-timing.test.ts index 11f46fb..4c9e0e3 100644 --- a/src/lib/Puddle/sim/tests/governor-engine-timing.test.ts +++ b/src/lib/Puddle/sim/tests/governor-engine-timing.test.ts @@ -65,6 +65,6 @@ describe('advance — framerate independence (governor accumulator)', () => { const sim = createWaterSim({ nx: 32, ny: 20, seed: 2, maxSubsteps: 1 }); sim.settle(20); expect(sim.advance(10).substeps).toBeLessThanOrEqual(1); - expect(sim.height.every(Number.isFinite)).toBe(true); + expect(Array.from(sim.height).every(Number.isFinite)).toBe(true); }); }); From 688a1e0ec6149541968f3f7d6fc1c0df2bf6fa5c Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 12:35:22 -0700 Subject: [PATCH 058/141] perf(puddle): streamline mass calculations * reuse frame stats from the advance step for the mass-clamping pass * replace temporary typed-array transforms and reductions with direct loops * verify reused stats produce the same clamped height field as fresh stats --- src/lib/Puddle/runtime/puddleLoop.ts | 4 ++-- src/lib/Puddle/sim/engine.ts | 8 ++++++-- src/lib/Puddle/sim/facade/waterSim.ts | 6 +++--- src/lib/Puddle/sim/passes/common.ts | 6 +++--- src/lib/Puddle/sim/resources.ts | 14 +++++++++----- src/lib/Puddle/sim/tests/facade.test.ts | 22 ++++++++++++++++++++-- 6 files changed, 43 insertions(+), 17 deletions(-) diff --git a/src/lib/Puddle/runtime/puddleLoop.ts b/src/lib/Puddle/runtime/puddleLoop.ts index 23142d9..5f8fa97 100644 --- a/src/lib/Puddle/runtime/puddleLoop.ts +++ b/src/lib/Puddle/runtime/puddleLoop.ts @@ -88,8 +88,8 @@ export function startPuddleLoop(options: PuddleLoopOptions): () => void { const dt = last > 0 ? (time - last) / 1000 : 0; last = time; if (followCursor || deviceGravity) applyInteractiveTilt(dt, performance.now()); - sim.advance(dt); - sim.clampMass(massCap); + const frameStats = sim.advance(dt); + sim.clampMass(massCap, frameStats); draw(); raf = requestAnimationFrame(loop); }; diff --git a/src/lib/Puddle/sim/engine.ts b/src/lib/Puddle/sim/engine.ts index 5b65639..fbe7c82 100644 --- a/src/lib/Puddle/sim/engine.ts +++ b/src/lib/Puddle/sim/engine.ts @@ -161,8 +161,12 @@ export class Engine { applyCommand(this.resources, command); } - clampMass(targetMass: number): void { - const currentMass = this.resources.stats().mass; + clampMass(targetMass: number, knownStats?: Pick): void { + const knownMass = knownStats?.mass; + const currentMass = + knownMass !== undefined && Number.isFinite(knownMass) && knownMass >= 0 + ? knownMass + : this.resources.stats().mass; if (currentMass <= targetMass || currentMass === 0) return; const massScale = targetMass / currentMass; this.resources.applyToHeight((heightData) => { diff --git a/src/lib/Puddle/sim/facade/waterSim.ts b/src/lib/Puddle/sim/facade/waterSim.ts index 2ac66fa..07044d6 100644 --- a/src/lib/Puddle/sim/facade/waterSim.ts +++ b/src/lib/Puddle/sim/facade/waterSim.ts @@ -1,6 +1,6 @@ import { texelCoordinate, texelDistance, worldUnits } from '../brands'; import { params as paramSchema } from '../params'; -import type { FrameStats } from '../types'; +import type { FrameStats, StateStats } from '../types'; import { createConfiguredEngine, createWaterSimConfig } from './config'; import { DEFAULT_SETTLE_SUBSTEPS } from './defaults'; import { type WaterSimOptions, nonnegativeIntegerOrZero } from './options'; @@ -66,8 +66,8 @@ export class WaterSim { this.tiltOffset.y = clampTilt(y); } - clampMass(target: number): void { - if (Number.isFinite(target)) this.engine.clampMass(Math.max(0, target)); + clampMass(target: number, knownStats?: Pick): void { + if (Number.isFinite(target)) this.engine.clampMass(Math.max(0, target), knownStats); } totalMass(): number { diff --git a/src/lib/Puddle/sim/passes/common.ts b/src/lib/Puddle/sim/passes/common.ts index 2a29cef..644bf05 100644 --- a/src/lib/Puddle/sim/passes/common.ts +++ b/src/lib/Puddle/sim/passes/common.ts @@ -1,9 +1,9 @@ export type FieldTransform = (value: number, index: number, column: number, row: number) => number; export function writeField(field: Float32Array, width: number, transform: FieldTransform): void { - field.set( - field.map((value, index) => transform(value, index, index % width, Math.floor(index / width))), - ); + for (let index = 0; index < field.length; index += 1) { + field[index] = transform(field[index] ?? 0, index, index % width, Math.floor(index / width)); + } } export function clamp(value: number, min: number, max: number): number { diff --git a/src/lib/Puddle/sim/resources.ts b/src/lib/Puddle/sim/resources.ts index ec6b819..5a57866 100644 --- a/src/lib/Puddle/sim/resources.ts +++ b/src/lib/Puddle/sim/resources.ts @@ -87,11 +87,15 @@ export class Resources { stats(): StateStats { const heightData = this.height().data; - const mass = heightData.reduce((total, depth) => total + depth, 0); - const maxDepth = heightData.reduce( - (currentMax, depth) => (depth > currentMax ? depth : currentMax), - 0, - ); + let mass = 0; + let maxDepth = 0; + let index = 0; + while (index < heightData.length) { + const depth = heightData[index] ?? 0; + mass += depth; + if (depth > maxDepth) maxDepth = depth; + index += 1; + } return { mass, maxDepth: worldUnits(maxDepth) }; } diff --git a/src/lib/Puddle/sim/tests/facade.test.ts b/src/lib/Puddle/sim/tests/facade.test.ts index 7477470..c324411 100644 --- a/src/lib/Puddle/sim/tests/facade.test.ts +++ b/src/lib/Puddle/sim/tests/facade.test.ts @@ -31,12 +31,30 @@ describe('createWaterSim — invariants', () => { sim.settle(); const massCap = sim.totalMass(); for (let frameIndex = 0; frameIndex < 200; frameIndex++) { - sim.advance(1 / 60); - sim.clampMass(massCap); + const frameStats = sim.advance(1 / 60); + sim.clampMass(massCap, frameStats); } expect(sim.totalMass()).toBeLessThanOrEqual(massCap + 1e-3); expect(allFinite(sim.height)).toBe(true); }); + + it('reuses advance stats without changing the mass clamp result', () => { + const options = { nx: 24, ny: 16, seed: 9, rain: true } as const; + const fallbackSim = createWaterSim(options); + const reusedStatsSim = createWaterSim(options); + fallbackSim.settle(); + reusedStatsSim.settle(); + const massCap = fallbackSim.totalMass(); + + for (let frameIndex = 0; frameIndex < 50; frameIndex++) { + fallbackSim.advance(1 / 60); + fallbackSim.clampMass(massCap); + const frameStats = reusedStatsSim.advance(1 / 60); + reusedStatsSim.clampMass(massCap, frameStats); + } + + expect(Float32Array.from(reusedStatsSim.height)).toEqual(Float32Array.from(fallbackSim.height)); + }); }); describe('createWaterSim — momentum integrator (pipes+momentum)', () => { From d0eb9492d0216f053b90376dda504fbde7cdb083 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:41:40 -0700 Subject: [PATCH 059/141] test(puddle): capture one-frame momentum reversals --- src/lib/Puddle/sim/tests/checkerboard.test.ts | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/lib/Puddle/sim/tests/checkerboard.test.ts b/src/lib/Puddle/sim/tests/checkerboard.test.ts index f93d60d..3b4f750 100644 --- a/src/lib/Puddle/sim/tests/checkerboard.test.ts +++ b/src/lib/Puddle/sim/tests/checkerboard.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { createWaterSim } from '../index'; +import { createWaterSim, SIM_DEFAULTS } from '../index'; import type { FluxField } from '../types'; interface InternalSim { @@ -147,4 +147,42 @@ describe('momentum checkerboard regression', () => { expect(percentile(parity, 0.95)).toBeLessThan(0.03); expect(percentile(lag, 0.95)).toBeLessThan(0.17); }); + + it('does not immediately reverse threshold state under default high-motion momentum', () => { + const nx = 63; + const ny = 35; + const threshold = 0.065; + const sim = createWaterSim({ + nx, + ny, + seed: 7, + integrator: SIM_DEFAULTS.integrator, + level: 0.46, + momentumSmoothing: SIM_DEFAULTS.momentumSmoothing, + momentumRetention: SIM_DEFAULTS.momentumRetention, + gravityDrift: false, + }); + sim.settle(90); + const massCap = sim.totalMass(); + sim.setTiltOffset(-2, 0); + + const mask = () => Uint8Array.from(sim.height, (height) => (height > threshold ? 1 : 0)); + let twoFramesAgo = mask(); + let previous = twoFramesAgo; + let oneFrameReversals = 0; + for (let frame = 0; frame < 300; frame++) { + const stats = sim.advance(1 / 60); + sim.clampMass(massCap, stats); + const current = mask(); + for (let cell = 0; cell < current.length; cell++) { + if (current[cell] === twoFramesAgo[cell] && current[cell] !== previous[cell]) { + oneFrameReversals++; + } + } + twoFramesAgo = previous; + previous = current; + } + + expect(oneFrameReversals).toBeLessThanOrEqual(100); + }); }); From c00acd0517e86a0c7981b3f287f3fc10c5929c32 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:55:19 -0700 Subject: [PATCH 060/141] fix(puddle): smooth default momentum --- src/lib/Puddle/config.ts | 2 +- src/lib/Puddle/sim/facade/defaults.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/Puddle/config.ts b/src/lib/Puddle/config.ts index 12218c5..523209b 100644 --- a/src/lib/Puddle/config.ts +++ b/src/lib/Puddle/config.ts @@ -114,7 +114,7 @@ export const PUDDLE_DEFAULTS = { animated: false, followCursor: false, integrator: 'pipes+momentum', - momentumSmoothing: 0, + momentumSmoothing: 0.1, momentumRetention: 0.98, timeScale: 6, baseSubstep: 0.08, diff --git a/src/lib/Puddle/sim/facade/defaults.ts b/src/lib/Puddle/sim/facade/defaults.ts index 869006b..53e61ac 100644 --- a/src/lib/Puddle/sim/facade/defaults.ts +++ b/src/lib/Puddle/sim/facade/defaults.ts @@ -4,7 +4,7 @@ import type { IntegratorId } from '../integrators'; export const SIM_DEFAULTS = { level: 0.42, integrator: 'pipes+momentum', - momentumSmoothing: 0, + momentumSmoothing: 0.1, momentumRetention: 0.98, gravityDrift: true, driftAmp: 1, From 93876464254d1762f1e91e035428e4a3664ce191 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 14:01:12 -0700 Subject: [PATCH 061/141] feat(puddle): render reusable SVG silhouette --- src/lib/Puddle/Puddle.svelte | 61 +++-- src/lib/Puddle/config.ts | 1 + .../render/puddleRenderer.svelte.test.ts | 99 +++----- src/lib/Puddle/render/puddleRenderer.ts | 216 ++++-------------- src/lib/Puddle/stories/Puddle.stories.svelte | 10 +- .../tests/Puddle.interaction.svelte.test.ts | 34 +-- .../tests/Puddle.rendering.svelte.test.ts | 86 +++++-- src/lib/Puddle/tests/canvas.ts | 72 ------ src/lib/Puddle/tests/svg.ts | 73 ++++++ 9 files changed, 270 insertions(+), 382 deletions(-) delete mode 100644 src/lib/Puddle/tests/canvas.ts create mode 100644 src/lib/Puddle/tests/svg.ts diff --git a/src/lib/Puddle/Puddle.svelte b/src/lib/Puddle/Puddle.svelte index b422f9b..7207ca2 100644 --- a/src/lib/Puddle/Puddle.svelte +++ b/src/lib/Puddle/Puddle.svelte @@ -1,6 +1,5 @@
- - + {@render children?.()}
diff --git a/src/lib/Puddle/device/index.ts b/src/lib/Puddle/device/index.ts index c873456..e3cd999 100644 --- a/src/lib/Puddle/device/index.ts +++ b/src/lib/Puddle/device/index.ts @@ -1,6 +1,7 @@ export { createDeviceGravityEstimator } from './estimator'; export { projectDeviceGravity } from './math'; export { requestDeviceGravityPermission } from './permission'; +export { getScreenAngle } from './screen'; export type { DeviceGravityEstimator, DeviceGravityPermission, diff --git a/src/lib/Puddle/device/screen.test.ts b/src/lib/Puddle/device/screen.test.ts new file mode 100644 index 0000000..9d2fec7 --- /dev/null +++ b/src/lib/Puddle/device/screen.test.ts @@ -0,0 +1,11 @@ +import { expect, test } from 'vitest'; + +import { getScreenAngle } from './screen'; + +test('reads the current screen orientation angle', () => { + expect(getScreenAngle({ orientation: { angle: 270 } })).toBe(270); +}); + +test('falls back when the screen orientation API is unavailable', () => { + expect(getScreenAngle({})).toBe(0); +}); diff --git a/src/lib/Puddle/device/screen.ts b/src/lib/Puddle/device/screen.ts new file mode 100644 index 0000000..ad9b0c8 --- /dev/null +++ b/src/lib/Puddle/device/screen.ts @@ -0,0 +1,9 @@ +export interface ScreenOrientationSource { + readonly orientation?: { + readonly angle?: number; + }; +} + +export function getScreenAngle(source: ScreenOrientationSource = screen): number { + return source.orientation?.angle ?? 0; +} diff --git a/src/lib/Puddle/geometry.test.ts b/src/lib/Puddle/geometry.test.ts new file mode 100644 index 0000000..2797c28 --- /dev/null +++ b/src/lib/Puddle/geometry.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from 'vitest'; + +import { resolvePuddleGeometry } from './geometry'; + +describe('resolvePuddleGeometry', () => { + test('maps host dimensions to grid and normalized clip geometry', () => { + const geometry = resolvePuddleGeometry(760, 420, { cellSize: 19, maxCells: 200 }); + + expect(geometry).toEqual({ + cols: 40, + rows: 22, + ready: true, + viewBox: '0 0 40 22', + clipTransform: 'scale(0.025 0.045454545454545456)', + }); + }); + + test('uses safe fallback geometry before the host is measured', () => { + const geometry = resolvePuddleGeometry(0, 0, { cellSize: 19, maxCells: 200 }); + + expect(geometry).toEqual({ + cols: 0, + rows: 0, + ready: false, + viewBox: '0 0 1 1', + clipTransform: 'scale(1 1)', + }); + }); + + test('falls back from invalid sizing options', () => { + const geometry = resolvePuddleGeometry(760, 420, { + cellSize: Number.NaN, + maxCells: Number.NaN, + }); + + expect(geometry.cols).toBe(40); + expect(geometry.rows).toBe(22); + }); +}); diff --git a/src/lib/Puddle/geometry.ts b/src/lib/Puddle/geometry.ts new file mode 100644 index 0000000..631c4da --- /dev/null +++ b/src/lib/Puddle/geometry.ts @@ -0,0 +1,41 @@ +import { PUDDLE_DEFAULTS } from './config'; + +export interface PuddleGeometryOptions { + readonly cellSize: number; + readonly maxCells: number; +} + +export interface PuddleGeometry { + readonly cols: number; + readonly rows: number; + readonly ready: boolean; + readonly viewBox: string; + readonly clipTransform: string; +} + +export function resolvePuddleGeometry( + width: number, + height: number, + options: PuddleGeometryOptions, +): PuddleGeometry { + const cellCap = + Number.isFinite(options.maxCells) && options.maxCells >= 1 + ? Math.floor(options.maxCells) + : PUDDLE_DEFAULTS.maxCells; + const cell = + Number.isFinite(options.cellSize) && options.cellSize >= 1 + ? options.cellSize + : PUDDLE_DEFAULTS.cellSize; + const cols = width > 0 ? Math.min(cellCap, Math.max(8, Math.round(width / cell))) : 0; + const rows = height > 0 ? Math.min(cellCap, Math.max(6, Math.round(height / cell))) : 0; + const safeCols = Math.max(cols, 1); + const safeRows = Math.max(rows, 1); + + return { + cols, + rows, + ready: cols > 0 && rows > 0, + viewBox: `0 0 ${safeCols.toString()} ${safeRows.toString()}`, + clipTransform: `scale(${(1 / safeCols).toString()} ${(1 / safeRows).toString()})`, + }; +} diff --git a/src/lib/Puddle/render/color.ts b/src/lib/Puddle/render/color.ts new file mode 100644 index 0000000..cfa9fec --- /dev/null +++ b/src/lib/Puddle/render/color.ts @@ -0,0 +1,19 @@ +import { formatCss, parse, toGamut, type Color } from 'culori'; + +const fallbackColor = { mode: 'rgb', r: 0.08, g: 0.08, b: 0.08 } as const satisfies Color; +const mapToP3 = toGamut('p3', 'oklch'); +const mapToSrgb = toGamut('rgb', 'oklch'); + +export interface PuddleCssColors { + readonly srgb: string; + readonly p3: string; +} + +export function resolvePuddleCssColors(color: string | Color): PuddleCssColors { + // Keep the source mode until each output path selects its supported gamut. + const source = typeof color === 'string' ? (parse(color) ?? fallbackColor) : { ...color }; + return { + srgb: formatCss(mapToSrgb(source)), + p3: formatCss(mapToP3(source)), + }; +} diff --git a/src/lib/Puddle/runtime/puddleRuntime.svelte.ts b/src/lib/Puddle/runtime/puddleRuntime.svelte.ts new file mode 100644 index 0000000..fef2146 --- /dev/null +++ b/src/lib/Puddle/runtime/puddleRuntime.svelte.ts @@ -0,0 +1,164 @@ +import { MediaQuery } from 'svelte/reactivity'; + +import { ElementSize } from 'runed'; + +import { browser } from '$app/environment'; + +import { PUDDLE_DEFAULTS } from '../config'; +import { createDeviceGravityEstimator, getScreenAngle } from '../device'; +import { resolvePuddleGeometry, type PuddleGeometryOptions } from '../geometry'; +import { createPuddleRenderer } from '../render/puddleRenderer'; +import { startPuddleLoop } from './puddleLoop'; +import { createPuddleSimulation, type PuddleSimulationOptions } from './puddleSimulation'; + +export interface PuddleRuntimeOptions { + readonly getGeometryOptions: () => PuddleGeometryOptions; + readonly getSimulationOptions: () => PuddleSimulationOptions; + readonly getSettleSubsteps: () => number; + readonly getThreshold: () => number; + readonly getAnimated: () => boolean; + readonly getFollowCursor: () => boolean; + readonly getCursorTilt: () => number; + readonly getCursorEase: () => number; + readonly getDeviceGravity: () => boolean; + readonly getDeviceTilt: () => number; + readonly getDeviceEase: () => number; + readonly getDeviceNeutralWindow: () => number; +} + +export interface PuddleRuntime { + host: HTMLElement | null; + shape: SVGPathElement | null; + readonly painted: boolean; + readonly viewBox: string; + readonly clipTransform: string; + readonly followCursor: boolean; + readonly deviceGravity: boolean; + readonly deviceMotionEnabled: boolean; + readonly onPointerMove: (event: PointerEvent) => void; + readonly clearPointer: () => void; + readonly onDeviceMotion: (event: DeviceMotionEvent) => void; + readonly onVisibilityChange: () => void; +} + +export function createPuddleRuntime(options: PuddleRuntimeOptions): PuddleRuntime { + let shape = $state(null); + let host = $state(null); + const hostSize = new ElementSize(() => host); + const reducedMotion = new MediaQuery('(prefers-reduced-motion: reduce)'); + const renderer = createPuddleRenderer(); + const deviceGravityEstimator = createDeviceGravityEstimator(); + const deviceNeutralSeconds = $derived.by(() => { + const value = options.getDeviceNeutralWindow(); + return Number.isFinite(value) && value >= 0 + ? Math.min(value, 60) + : PUDDLE_DEFAULTS.deviceNeutralWindow; + }); + const geometry = $derived( + resolvePuddleGeometry(hostSize.width, hostSize.height, options.getGeometryOptions()), + ); + const sim = $derived.by(() => { + if (!browser || !geometry.ready) return null; + return createPuddleSimulation(geometry, options.getSimulationOptions()); + }); + + // Stays false without JS, keeping the CSS fallback backdrop visible. + let painted = $state(false); + let pointer: { x: number; y: number } | null = null; + + const onPointerMove = (event: PointerEvent): void => { + pointer = { x: event.clientX, y: event.clientY }; + }; + const clearPointer = (): void => { + pointer = null; + }; + const onDeviceMotion = (event: DeviceMotionEvent): void => { + deviceGravityEstimator.update(event, performance.now(), deviceNeutralSeconds); + }; + const onVisibilityChange = (): void => { + if (document.hidden) deviceGravityEstimator.reset(); + }; + + $effect(() => { + sim?.settle(options.getSettleSubsteps()); + }); + + $effect(() => { + if (!shape || !host || !sim || hostSize.width === 0 || hostSize.height === 0) return; + const target = shape; + const element = host; + const water = sim; + const depthThreshold = options.getThreshold(); + const animated = options.getAnimated(); + const followCursor = options.getFollowCursor(); + const cursorTilt = options.getCursorTilt(); + const cursorEase = options.getCursorEase(); + const deviceGravity = options.getDeviceGravity(); + const deviceTilt = options.getDeviceTilt(); + const deviceEase = options.getDeviceEase(); + const neutralWindow = deviceNeutralSeconds; + const draw = (): void => { + painted = renderer.render(target, { + nx: water.nx, + ny: water.ny, + height: water.height, + threshold: depthThreshold, + }); + }; + + draw(); + if (!animated || reducedMotion.current) return; + return startPuddleLoop({ + host: element, + sim: water, + deviceGravityEstimator, + draw, + getPointer: () => pointer, + followCursor, + cursorTilt, + cursorEase, + deviceGravity, + deviceTilt, + deviceEase, + deviceNeutralWindow: neutralWindow, + screenAngle: getScreenAngle, + }); + }); + + return { + get host() { + return host; + }, + set host(value) { + host = value; + }, + get shape() { + return shape; + }, + set shape(value) { + shape = value; + }, + get painted() { + return painted; + }, + get viewBox() { + return geometry.viewBox; + }, + get clipTransform() { + return geometry.clipTransform; + }, + get followCursor() { + return options.getFollowCursor(); + }, + get deviceGravity() { + return options.getDeviceGravity(); + }, + get deviceMotionEnabled() { + return options.getDeviceGravity() && options.getAnimated() && !reducedMotion.current; + }, + onPointerMove, + clearPointer, + onDeviceMotion, + onVisibilityChange, + }; +} diff --git a/src/lib/Puddle/runtime/puddleSimulation.ts b/src/lib/Puddle/runtime/puddleSimulation.ts new file mode 100644 index 0000000..8e73b07 --- /dev/null +++ b/src/lib/Puddle/runtime/puddleSimulation.ts @@ -0,0 +1,53 @@ +import type { PuddleProps } from '../config'; +import type { PuddleGeometry } from '../geometry'; +import { createWaterSim, type WaterSim } from '../waterSim'; + +type PuddleSimulationProp = + | 'seed' + | 'level' + | 'noiseAmp' + | 'integrator' + | 'momentumSmoothing' + | 'momentumRetention' + | 'timeScale' + | 'baseSubstep' + | 'cflSafety' + | 'minWaveDepth' + | 'maxSubsteps' + | 'gravityDrift' + | 'driftAmp' + | 'driftRateHz' + | 'rainInterval' + | 'rainAmount' + | 'rainRadius'; + +export type PuddleSimulationOptions = Required>; + +export function createPuddleSimulation( + geometry: Pick, + options: PuddleSimulationOptions, +): WaterSim { + return createWaterSim({ + nx: geometry.cols, + ny: geometry.rows, + seed: options.seed, + level: options.level, + noiseAmp: options.noiseAmp, + integrator: options.integrator, + momentumSmoothing: options.momentumSmoothing, + momentumRetention: options.momentumRetention, + timeScale: options.timeScale, + baseSubstep: options.baseSubstep, + cflSafety: options.cflSafety, + minWaveDepth: options.minWaveDepth, + maxSubsteps: options.maxSubsteps, + gravityDrift: options.gravityDrift, + driftAmp: options.driftAmp, + driftRateHz: options.driftRateHz, + rain: { + intervalSec: options.rainInterval, + amount: options.rainAmount, + radius: options.rainRadius, + }, + }); +} From fa17a5100d85ab8d0ac7145484163c698ba759a8 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 17:19:00 -0700 Subject: [PATCH 063/141] feat(puddle): clip hero text colors to silhouette --- src/lib/Puddle/stories/Puddle.stories.svelte | 22 +++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/lib/Puddle/stories/Puddle.stories.svelte b/src/lib/Puddle/stories/Puddle.stories.svelte index 2fe08c7..081adc0 100644 --- a/src/lib/Puddle/stories/Puddle.stories.svelte +++ b/src/lib/Puddle/stories/Puddle.stories.svelte @@ -49,14 +49,22 @@ {#snippet hero(args: Args)}
- - SUMMER SUMMIT
GAME JAM 2026
+
+ SUMMER SUMMIT
GAME JAM 2026
+
+
{/snippet} From 96faf8e18e6890b8f796b85de90d7f243754fd0b Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 17:41:48 -0700 Subject: [PATCH 064/141] feat(storybook): add puddle color controls --- src/lib/Puddle/stories/Puddle.stories.svelte | 62 ++++++++++++++++---- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/src/lib/Puddle/stories/Puddle.stories.svelte b/src/lib/Puddle/stories/Puddle.stories.svelte index 081adc0..443cf22 100644 --- a/src/lib/Puddle/stories/Puddle.stories.svelte +++ b/src/lib/Puddle/stories/Puddle.stories.svelte @@ -8,12 +8,39 @@ import { waitForPaintedFraction } from '../tests/svg'; import { puddleStoryConfig } from './storyConfig'; - type Args = ComponentProps; + type Args = ComponentProps & { + backgroundColor: string; + puddleTextColor: string; + textColor: string; + }; - const { Story } = defineMeta({ + const { Story } = defineMeta({ title: 'Puddle', component: Puddle, ...puddleStoryConfig, + args: { + ...puddleStoryConfig.args, + backgroundColor: '#c7f735', + puddleTextColor: '#ffffff', + textColor: '#000000', + }, + argTypes: { + ...puddleStoryConfig.argTypes, + backgroundColor: { control: 'color' }, + puddleTextColor: { control: 'color' }, + textColor: { control: 'color' }, + }, + parameters: { + ...puddleStoryConfig.parameters, + controls: { + include: [ + ...puddleStoryConfig.parameters.controls.include, + 'backgroundColor', + 'puddleTextColor', + 'textColor', + ], + }, + }, }); @@ -26,8 +53,13 @@ }; -{#snippet template(args: Args)} -
+{#snippet template({ backgroundColor, puddleTextColor, textColor, ...args }: Args)} +
{/snippet} @@ -47,12 +79,17 @@ /> -{#snippet hero(args: Args)} -
+{#snippet hero({ backgroundColor, puddleTextColor, textColor, ...args }: Args)} +
SUMMER SUMMIT
GAME JAM 2026
@@ -61,7 +98,7 @@ style="position:absolute; inset:0; display:grid; place-items:center; padding:40px; clip-path:var(--puddle-clip);" > SUMMER SUMMIT
GAME JAM 2026
@@ -80,8 +117,13 @@ -{#snippet device(args: Args)} -
+{#snippet device({ backgroundColor, puddleTextColor, textColor, ...args }: Args)} +
Permission: {devicePermission} From 136ea9585ad88ca9d1f6e19281c14aca0cfe6fa7 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Tue, 21 Jul 2026 18:13:41 -0700 Subject: [PATCH 065/141] chore(puddle): expand story control ranges --- src/lib/Puddle/stories/storyConfig.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/Puddle/stories/storyConfig.ts b/src/lib/Puddle/stories/storyConfig.ts index 0a02d9f..3d12f68 100644 --- a/src/lib/Puddle/stories/storyConfig.ts +++ b/src/lib/Puddle/stories/storyConfig.ts @@ -12,8 +12,8 @@ type PuddleMeta = Meta; const argTypes: NonNullable = { cellSize: { control: { type: 'range', min: 12, max: 60, step: 1 } }, - threshold: { control: { type: 'range', min: 0.005, max: 0.3, step: 0.005 } }, - level: { control: { type: 'range', min: 0.3, max: 1, step: 0.02 } }, + threshold: { control: { type: 'range', min: 0, max: 0.3, step: 0.005 } }, + level: { control: { type: 'range', min: 0.3, max: 4, step: 0.02 } }, seed: { control: { type: 'range', min: 1, max: 40, step: 1 } }, noiseAmp: { control: { type: 'range', min: 0, max: 0.8, step: 0.02 } }, animated: { control: 'boolean' }, @@ -34,7 +34,7 @@ const argTypes: NonNullable = { rainAmount: { control: { type: 'range', min: 0, max: 0.3, step: 0.01 } }, rainRadius: { control: { type: 'range', min: 0.5, max: 5, step: 0.5 } }, maxCells: { control: { type: 'range', min: 20, max: 200, step: 10 } }, - cursorTilt: { control: { type: 'range', min: 0, max: 2, step: 0.1 } }, + cursorTilt: { control: { type: 'range', min: 0, max: 8, step: 0.1 } }, cursorEase: { control: { type: 'range', min: 0.05, max: 1.5, step: 0.05 } }, deviceGravity: { control: 'boolean' }, deviceTilt: { control: { type: 'range', min: 0, max: 12, step: 0.5 } }, From 83cf1bd56ba705f904588119be837aa29aa2927c Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Wed, 22 Jul 2026 18:31:58 -0700 Subject: [PATCH 066/141] refactor(puddle): remove redundant gamut split --- src/lib/Puddle/Puddle.svelte | 16 ++++------------ src/lib/Puddle/render/color.ts | 19 ------------------- .../tests/Puddle.rendering.svelte.test.ts | 5 ++--- 3 files changed, 6 insertions(+), 34 deletions(-) delete mode 100644 src/lib/Puddle/render/color.ts diff --git a/src/lib/Puddle/Puddle.svelte b/src/lib/Puddle/Puddle.svelte index 320e984..9c3f31f 100644 --- a/src/lib/Puddle/Puddle.svelte +++ b/src/lib/Puddle/Puddle.svelte @@ -1,6 +1,7 @@ diff --git a/src/lib/Puddle/config.ts b/src/lib/Puddle/config.ts index ac2912b..931b663 100644 --- a/src/lib/Puddle/config.ts +++ b/src/lib/Puddle/config.ts @@ -61,14 +61,12 @@ export type PuddleProps = Omit, 'color'> & { cursorTilt?: number; /** Cursor-follow easing time-constant in seconds (only with `followCursor`). */ cursorEase?: number; - /** Lean with device motion sensors after permission is requested. Needs `animated`; ignored under prefers-reduced-motion. */ + /** Slosh with device rotation after permission is requested. Needs `animated`; ignored under prefers-reduced-motion. */ deviceGravity?: boolean; - /** Maximum device-driven in-plane gravity. */ + /** Maximum device-motion slosh force. */ deviceTilt?: number; - /** Device-gravity easing time-constant in seconds. */ + /** Device-motion easing time-constant in seconds. */ deviceEase?: number; - /** Trailing window averaged as the neutral device orientation, in seconds. Zero disables neutralization. */ - deviceNeutralWindow?: number; children?: Snippet; }; @@ -101,8 +99,7 @@ type PuddleDefaultKey = | 'cursorEase' | 'deviceGravity' | 'deviceTilt' - | 'deviceEase' - | 'deviceNeutralWindow'; + | 'deviceEase'; /** Default values for every Puddle-specific prop. Spread into stories to match the component. */ export const PUDDLE_DEFAULTS = { @@ -135,5 +132,4 @@ export const PUDDLE_DEFAULTS = { deviceGravity: false, deviceTilt: 6, deviceEase: 0.18, - deviceNeutralWindow: 2, } as const satisfies Required>; diff --git a/src/lib/Puddle/device/deviceGravity.test.ts b/src/lib/Puddle/device/deviceGravity.test.ts deleted file mode 100644 index 50e7845..0000000 --- a/src/lib/Puddle/device/deviceGravity.test.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { describe, expect, it } from 'vitest'; - -import { - createDeviceGravityEstimator, - projectDeviceGravity, - requestDeviceGravityPermission, - type DeviceMotionReading, -} from './index'; - -const reading = ( - acceleration: [number, number, number] | null, - rotation: [number, number, number] | null = null, - interval = 16, -): DeviceMotionReading => ({ - accelerationIncludingGravity: acceleration - ? { x: acceleration[0], y: acceleration[1], z: acceleration[2] } - : null, - rotationRate: rotation ? { alpha: rotation[0], beta: rotation[1], gamma: rotation[2] } : null, - interval, -}); - -describe('projectDeviceGravity', () => { - it('maps device gravity to the simulation sign convention in portrait', () => { - expect(projectDeviceGravity({ x: 0, y: 1, z: 0 }, 0, 6)).toEqual({ x: 0, y: -6 }); - const right = projectDeviceGravity({ x: -1, y: 0, z: 0 }, 0, 6); - expect(right.x).toBe(-6); - expect(right.y).toBeCloseTo(0); - }); - - it('rotates the device axes into the current screen orientation', () => { - const expectedByAngle = [ - { angle: 0, x: 6, y: 0 }, - { angle: 90, x: 0, y: -6 }, - { angle: 180, x: -6, y: 0 }, - { angle: 270, x: 0, y: 6 }, - ]; - for (const expected of expectedByAngle) { - const tilt = projectDeviceGravity({ x: 1, y: 0, z: 0 }, expected.angle, 6); - expect(tilt.x).toBeCloseTo(expected.x); - expect(tilt.y).toBeCloseTo(expected.y); - } - }); - - it('sanitizes invalid or negative strength', () => { - for (const tilt of [ - projectDeviceGravity({ x: 1, y: 1, z: 0 }, 0, -1), - projectDeviceGravity({ x: 1, y: 1, z: 0 }, NaN, NaN), - ]) { - expect(tilt.x).toBeCloseTo(0); - expect(tilt.y).toBeCloseTo(0); - } - }); -}); - -describe('requestDeviceGravityPermission', () => { - it('reports unsupported outside a browser', async () => { - await expect(requestDeviceGravityPermission()).resolves.toBe('unsupported'); - }); -}); - -describe('createDeviceGravityEstimator', () => { - it('uses acceleration including gravity as its stable reference', () => { - const estimator = createDeviceGravityEstimator(); - estimator.update(reading([-9.8, 0, 0]), 100); - const tilt = estimator.tilt(100, 0, 8); - expect(tilt?.x).toBeCloseTo(-8); - expect(tilt?.y).toBeCloseTo(0); - }); - - it('uses gyro data to predict between accelerometer readings', () => { - const estimator = createDeviceGravityEstimator(); - estimator.update(reading([0, 0, 9.8]), 0); - estimator.update(reading(null, [90, 0, 0], 100), 100); - const tilt = estimator.tilt(100, 0, 8); - expect(tilt?.y).toBeLessThan(-1); - }); - - it('ignores implausible acceleration and expires stale readings', () => { - const estimator = createDeviceGravityEstimator(); - estimator.update(reading([0, 9.8, 0]), 0); - estimator.update(reading([100, 0, 0]), 100); - expect(estimator.tilt(100, 0, 6)?.y).toBeCloseTo(-6); - expect(estimator.tilt(501, 0, 6)).toBeNull(); - }); - - it('clears its reading on reset', () => { - const estimator = createDeviceGravityEstimator(); - estimator.update(reading([0, 9.8, 0]), 0); - estimator.reset(); - expect(estimator.tilt(0, 0, 6)).toBeNull(); - }); - - it('continuously treats the trailing time-window average as neutral', () => { - const estimator = createDeviceGravityEstimator(); - estimator.update(reading([0, 0, 9.8]), 0, 1); - estimator.update(reading([-9.8, 0, 0]), 100, 1); - const initialLean = estimator.tilt(100, 0, 8, 1)?.x ?? 0; - expect(initialLean).toBeLessThan(-1); - - for (let now = 200; now <= 2500; now += 100) estimator.update(reading([-9.8, 0, 0]), now, 1); - const settledLean = estimator.tilt(2500, 0, 8, 1)?.x ?? Infinity; - expect(Math.abs(settledLean)).toBeLessThan(Math.abs(initialLean) * 0.1); - }); - - it('weights the neutral orientation by elapsed time instead of event count', () => { - const frequent = createDeviceGravityEstimator(); - const sparse = createDeviceGravityEstimator(); - for (const estimator of [frequent, sparse]) { - estimator.update(reading([0, 0, 9.8]), 0, 2); - estimator.update(reading(null, [0, 90, 0], 100), 100, 2); - } - for (let now = 200; now <= 900; now += 100) frequent.update(reading(null, [0, 0, 0]), now, 2); - sparse.update(reading(null, [0, 0, 0]), 900, 2); - - const frequentLean = frequent.tilt(900, 0, 8, 2)?.x ?? 0; - const sparseLean = sparse.tilt(900, 0, 8, 2)?.x ?? 0; - expect(frequentLean).toBeCloseTo(sparseLean, 1); - }); -}); diff --git a/src/lib/Puddle/device/deviceMotion.test.ts b/src/lib/Puddle/device/deviceMotion.test.ts new file mode 100644 index 0000000..9b7868e --- /dev/null +++ b/src/lib/Puddle/device/deviceMotion.test.ts @@ -0,0 +1,129 @@ +import { describe, expect, it } from 'vitest'; + +import { + createDeviceMotionEstimator, + projectDeviceMotion, + requestDeviceGravityPermission, + type DeviceMotionReading, +} from './index'; + +const reading = ( + rotation: [number, number, number] | null, + interval = 16, +): DeviceMotionReading => ({ + rotationRate: rotation ? { alpha: rotation[0], beta: rotation[1], gamma: rotation[2] } : null, + interval, +}); + +describe('projectDeviceMotion', () => { + it('maps device axes to the simulation sign convention in portrait', () => { + expect(projectDeviceMotion({ x: 0, y: 1 }, 0, 6)).toEqual({ x: 0, y: -6 }); + const right = projectDeviceMotion({ x: -1, y: 0 }, 0, 6); + expect(right.x).toBe(-6); + expect(right.y).toBeCloseTo(0); + }); + + it('rotates the device axes into the current screen orientation', () => { + const expectedByAngle = [ + { angle: 0, x: 6, y: 0 }, + { angle: 90, x: 0, y: -6 }, + { angle: 180, x: -6, y: 0 }, + { angle: 270, x: 0, y: 6 }, + ]; + for (const expected of expectedByAngle) { + const tilt = projectDeviceMotion({ x: 1, y: 0 }, expected.angle, 6); + expect(tilt.x).toBeCloseTo(expected.x); + expect(tilt.y).toBeCloseTo(expected.y); + } + }); + + it('sanitizes invalid or negative strength', () => { + for (const tilt of [ + projectDeviceMotion({ x: 1, y: 1 }, 0, -1), + projectDeviceMotion({ x: NaN, y: 1 }, NaN, NaN), + ]) { + expect(tilt.x).toBeCloseTo(0); + expect(tilt.y).toBeCloseTo(0); + } + }); +}); + +describe('requestDeviceGravityPermission', () => { + it('reports unsupported outside a browser', async () => { + await expect(requestDeviceGravityPermission()).resolves.toBe('unsupported'); + }); +}); + +describe('createDeviceMotionEstimator', () => { + it('makes angular acceleration the dominant impulse and retains a smaller velocity term', () => { + const estimator = createDeviceMotionEstimator(); + estimator.update(reading([0, 0, 0]), 0); + estimator.update(reading([0, 90, 0]), 16); + const impulse = estimator.tilt(16, 0, 8)?.x ?? 0; + + for (let now = 32; now <= 400; now += 16) estimator.update(reading([0, 90, 0]), now); + const steadyRotation = estimator.tilt(400, 0, 8)?.x ?? 0; + + expect(impulse).toBeLessThan(-4); + expect(steadyRotation).toBeLessThan(0); + expect(Math.abs(impulse)).toBeGreaterThan(Math.abs(steadyRotation) * 3); + }); + + it('projects the motion into the current screen orientation', () => { + const estimator = createDeviceMotionEstimator(); + estimator.update(reading([0, 0, 0]), 0); + estimator.update(reading([0, 90, 0]), 16); + const portrait = estimator.tilt(16, 0, 8); + const landscape = estimator.tilt(16, 90, 8); + expect(portrait?.x).toBeLessThan(-4); + expect(landscape?.y).toBeGreaterThan(4); + }); + + it('clamps extreme values, filters noise, and expires stale readings', () => { + const quiet = createDeviceMotionEstimator(); + quiet.update(reading([0, 0, 0]), 0); + quiet.update(reading([0, 1, 0]), 16); + expect(quiet.tilt(16, 0, 8)?.x).toBeCloseTo(0); + expect(quiet.tilt(16, 0, 8)?.y).toBeCloseTo(0); + + const extreme = createDeviceMotionEstimator(); + extreme.update(reading([0, 0, 0]), 0); + extreme.update(reading([0, 100_000, 0]), 16); + const tilt = extreme.tilt(16, 0, 8); + expect(Math.hypot(tilt?.x ?? 0, tilt?.y ?? 0)).toBeLessThanOrEqual(8); + expect(extreme.tilt(517, 0, 8)).toBeNull(); + }); + + it('returns to rest after one complete rotation instead of retaining the final side', () => { + const estimator = createDeviceMotionEstimator(); + estimator.update(reading([0, 0, 0]), 0); + for (let now = 16; now <= 2000; now += 16) { + estimator.update(reading([0, 180, 0]), now); + } + const rotating = estimator.tilt(2000, 0, 8)?.x ?? 0; + expect(rotating).toBeLessThan(-1); + + estimator.update(reading([0, 0, 0]), 2016); + const braking = estimator.tilt(2016, 0, 8)?.x ?? 0; + expect(braking).toBeGreaterThan(1); + for (let now = 2032; now <= 2512; now += 16) { + estimator.update(reading([0, 0, 0]), now); + } + const resting = estimator.tilt(2512, 0, 8); + expect(Math.abs(resting?.x ?? Infinity)).toBeLessThan(0.01); + expect(Math.abs(resting?.y ?? Infinity)).toBeLessThan(0.01); + }); + + it('clears rate and derivative history on reset', () => { + const estimator = createDeviceMotionEstimator(); + estimator.update(reading([0, 0, 0]), 0); + estimator.update(reading([0, 90, 0]), 16); + const impulse = Math.abs(estimator.tilt(16, 0, 8)?.x ?? 0); + estimator.reset(); + expect(estimator.tilt(16, 0, 8)).toBeNull(); + + estimator.update(reading([0, 90, 0]), 32); + const afterReset = Math.abs(estimator.tilt(32, 0, 8)?.x ?? Infinity); + expect(afterReset).toBeLessThan(impulse * 0.25); + }); +}); diff --git a/src/lib/Puddle/device/estimator.ts b/src/lib/Puddle/device/estimator.ts index 7913b27..35164c2 100644 --- a/src/lib/Puddle/device/estimator.ts +++ b/src/lib/Puddle/device/estimator.ts @@ -1,81 +1,86 @@ -import { createGravityHistory } from './history'; import { - accelerationVector, - blend, - gyroVector, - neutralWindowMs, - predictFromGyro, - projectDeviceGravity, + angularAcceleration, + blendVector, + projectDeviceMotion, + rotationRateVector, + sloshVector, } from './math'; import type { DeviceGravityEstimator, - DeviceGravityTilt, + DeviceMotionEstimator, + DeviceMotionTilt, DeviceMotionReading, + Vector2, Vector3, } from './types'; -const ACCEL_CORRECTION_TAU = 0.25; +const RATE_FILTER_TAU = 0.04; +const DEFAULT_SENSOR_DT = 1 / 60; +const MIN_SENSOR_DT = 1 / 240; const MAX_SENSOR_DT = 0.1; const STALE_AFTER_MS = 500; +const STALE_FADE_TAU_MS = 180; -export function createDeviceGravityEstimator(): DeviceGravityEstimator { - let gravity: Vector3 | null = null; +export function createDeviceMotionEstimator(): DeviceMotionEstimator { + let filteredRate: Vector3 | null = null; + let motion: Vector2 | null = null; let previousReadingAt: number | null = null; let lastUsefulReadingAt: number | null = null; - const history = createGravityHistory(); - const update = (reading: DeviceMotionReading, nowMs: number, neutralWindowSeconds = 0): void => { + const update = (reading: DeviceMotionReading, nowMs: number): void => { if (!Number.isFinite(nowMs)) return; - const intervalSeconds = Number.isFinite(reading.interval) ? reading.interval / 1000 : 0; + const measuredRate = rotationRateVector(reading); + if (!measuredRate) return; + const intervalSeconds = + Number.isFinite(reading.interval) && reading.interval > 0 + ? reading.interval / 1000 + : DEFAULT_SENSOR_DT; const elapsedSeconds = previousReadingAt === null ? intervalSeconds : Math.max(0, (nowMs - previousReadingAt) / 1000); - const dt = Math.min(MAX_SENSOR_DT, elapsedSeconds); + const dt = Math.max(MIN_SENSOR_DT, Math.min(MAX_SENSOR_DT, elapsedSeconds)); previousReadingAt = nowMs; - const angularVelocity = gyroVector(reading); - if (gravity && angularVelocity && dt > 0) - gravity = predictFromGyro(gravity, angularVelocity, dt); - - const measuredGravity = accelerationVector(reading); - if (measuredGravity) { - const correction = gravity ? 1 - Math.exp(-Math.max(dt, 1 / 120) / ACCEL_CORRECTION_TAU) : 1; - gravity = gravity ? blend(gravity, measuredGravity, correction) : measuredGravity; - } - - if (gravity && (measuredGravity || angularVelocity)) { - lastUsefulReadingAt = nowMs; - history.record(gravity, nowMs, neutralWindowMs(neutralWindowSeconds)); + if (!filteredRate) { + filteredRate = measuredRate; + motion = sloshVector(measuredRate, { x: 0, y: 0, z: 0 }); + } else { + const previousRate = filteredRate; + const filterAmount = 1 - Math.exp(-dt / RATE_FILTER_TAU); + filteredRate = blendVector(previousRate, measuredRate, filterAmount); + motion = sloshVector(filteredRate, angularAcceleration(previousRate, filteredRate, dt)); } + lastUsefulReadingAt = nowMs; }; - const tilt = ( - nowMs: number, - screenAngle: number, - strength: number, - neutralWindowSeconds = 0, - ): DeviceGravityTilt | null => { + const tilt = (nowMs: number, screenAngle: number, strength: number): DeviceMotionTilt | null => { if ( - !gravity || + !motion || lastUsefulReadingAt === null || !Number.isFinite(nowMs) || nowMs - lastUsefulReadingAt > STALE_AFTER_MS ) return null; - const current = projectDeviceGravity(gravity, screenAngle, strength); - const neutral = history.rollingNeutral(nowMs, neutralWindowMs(neutralWindowSeconds)); - if (!neutral) return current; - const baseline = projectDeviceGravity(neutral, screenAngle, strength); - return { x: current.x - baseline.x, y: current.y - baseline.y }; + const age = Math.max(0, nowMs - lastUsefulReadingAt); + const freshness = Math.exp(-age / STALE_FADE_TAU_MS); + return projectDeviceMotion( + { x: motion.x * freshness, y: motion.y * freshness }, + screenAngle, + strength, + ); }; const reset = (): void => { - gravity = null; + filteredRate = null; + motion = null; previousReadingAt = null; lastUsefulReadingAt = null; - history.clear(); }; return { update, tilt, reset }; } + +/** Compatibility name for code written against the earlier gravity estimator. */ +export const createDeviceGravityEstimator: () => DeviceGravityEstimator = + createDeviceMotionEstimator; diff --git a/src/lib/Puddle/device/history.ts b/src/lib/Puddle/device/history.ts deleted file mode 100644 index c84fd5c..0000000 --- a/src/lib/Puddle/device/history.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { TimedVector, Vector3 } from './types'; - -export interface GravityHistory { - clear: () => void; - record: (vector: Vector3 | null, nowMs: number, windowMs: number) => void; - rollingNeutral: (nowMs: number, windowMs: number) => Vector3 | null; -} - -export function createGravityHistory(): GravityHistory { - let samples: TimedVector[] = []; - let start = 0; - - const clear = (): void => { - samples = []; - start = 0; - }; - - const prune = (cutoff: number): void => { - while (start + 1 < samples.length && (samples[start + 1]?.at ?? Infinity) <= cutoff) start++; - if (start > 256 && start * 2 > samples.length) { - samples = samples.slice(start); - start = 0; - } - }; - - const record = (vector: Vector3 | null, nowMs: number, windowMs: number): void => { - if (!vector || windowMs === 0) { - clear(); - return; - } - const last = samples.at(-1); - if (last?.at === nowMs) samples[samples.length - 1] = { at: nowMs, vector }; - else samples.push({ at: nowMs, vector }); - prune(nowMs - windowMs); - }; - - const rollingNeutral = (nowMs: number, windowMs: number): Vector3 | null => { - const first = samples[start]; - const latest = samples.at(-1); - if (!first || !latest || windowMs === 0) return null; - const windowStart = Math.max(nowMs - windowMs, first.at); - let x = 0; - let y = 0; - let z = 0; - let duration = 0; - for (let i = start; i < samples.length; i++) { - const sample = samples[i]; - if (!sample) continue; - const segmentStart = Math.max(windowStart, sample.at); - const segmentEnd = Math.min(nowMs, samples[i + 1]?.at ?? nowMs); - const segmentDuration = Math.max(0, segmentEnd - segmentStart); - x += sample.vector.x * segmentDuration; - y += sample.vector.y * segmentDuration; - z += sample.vector.z * segmentDuration; - duration += segmentDuration; - } - return duration > 0 ? { x: x / duration, y: y / duration, z: z / duration } : latest.vector; - }; - - return { clear, record, rollingNeutral }; -} diff --git a/src/lib/Puddle/device/index.ts b/src/lib/Puddle/device/index.ts index e3cd999..da57ed2 100644 --- a/src/lib/Puddle/device/index.ts +++ b/src/lib/Puddle/device/index.ts @@ -1,10 +1,12 @@ -export { createDeviceGravityEstimator } from './estimator'; -export { projectDeviceGravity } from './math'; +export { createDeviceGravityEstimator, createDeviceMotionEstimator } from './estimator'; +export { projectDeviceGravity, projectDeviceMotion } from './math'; export { requestDeviceGravityPermission } from './permission'; export { getScreenAngle } from './screen'; export type { DeviceGravityEstimator, DeviceGravityPermission, DeviceGravityTilt, + DeviceMotionEstimator, DeviceMotionReading, + DeviceMotionTilt, } from './types'; diff --git a/src/lib/Puddle/device/math.ts b/src/lib/Puddle/device/math.ts index acf8cc4..f8e329d 100644 --- a/src/lib/Puddle/device/math.ts +++ b/src/lib/Puddle/device/math.ts @@ -1,81 +1,90 @@ -import type { DeviceGravityTilt, DeviceMotionReading, Vector3 } from './types'; +import type { DeviceMotionReading, DeviceMotionTilt, Vector2, Vector3 } from './types'; -const MIN_GRAVITY_MAGNITUDE = 2; -const MAX_GRAVITY_MAGNITUDE = 20; const MAX_GYRO_RATE = 720; -const DEGREES_TO_RADIANS = Math.PI / 180; +const RATE_DEAD_ZONE = 1.5; +const RATE_REFERENCE = 180; +const ACCELERATION_DEAD_ZONE = 30; +const ACCELERATION_REFERENCE = 900; +const ACCELERATION_WEIGHT = 0.85; +const VELOCITY_WEIGHT = 0.2; const finite = (value: number | null | undefined): value is number => value !== null && value !== undefined && Number.isFinite(value); -export function normalize(vector: Vector3): Vector3 | null { - const length = Math.hypot(vector.x, vector.y, vector.z); - if (!Number.isFinite(length) || length === 0) return null; - return { x: vector.x / length, y: vector.y / length, z: vector.z / length }; -} +const clamp = (value: number, minimum: number, maximum: number): number => + Math.max(minimum, Math.min(maximum, value)); -export function accelerationVector(reading: DeviceMotionReading): Vector3 | null { - const acceleration = reading.accelerationIncludingGravity; - if ( - !acceleration || - !finite(acceleration.x) || - !finite(acceleration.y) || - !finite(acceleration.z) - ) - return null; - const magnitude = Math.hypot(acceleration.x, acceleration.y, acceleration.z); - if (magnitude < MIN_GRAVITY_MAGNITUDE || magnitude > MAX_GRAVITY_MAGNITUDE) return null; - return normalize({ x: acceleration.x, y: acceleration.y, z: acceleration.z }); -} +const applyDeadZone = (value: number, deadZone: number): number => { + const magnitude = Math.abs(value); + return magnitude <= deadZone ? 0 : Math.sign(value) * (magnitude - deadZone); +}; -export function gyroVector(reading: DeviceMotionReading): Vector3 | null { +const normalizeResponse = (value: number, deadZone: number, reference: number): number => + clamp(applyDeadZone(value, deadZone) / reference, -1, 1); + +export function rotationRateVector(reading: DeviceMotionReading): Vector3 | null { const rate = reading.rotationRate; if (!rate) return null; const values = [rate.alpha, rate.beta, rate.gamma]; if (!values.some(finite)) return null; - const radians = values.map((value) => - finite(value) - ? Math.max(-MAX_GYRO_RATE, Math.min(MAX_GYRO_RATE, value)) * DEGREES_TO_RADIANS - : 0, + // The current W3C spec maps alpha/beta/gamma to device x/y/z. + const sanitized = values.map((value) => + finite(value) ? clamp(value, -MAX_GYRO_RATE, MAX_GYRO_RATE) : 0, ); - return { x: radians[0] ?? 0, y: radians[1] ?? 0, z: radians[2] ?? 0 }; + return { x: sanitized[0] ?? 0, y: sanitized[1] ?? 0, z: sanitized[2] ?? 0 }; } -export function predictFromGyro(vector: Vector3, angularVelocity: Vector3, dt: number): Vector3 { - const crossX = angularVelocity.y * vector.z - angularVelocity.z * vector.y; - const crossY = angularVelocity.z * vector.x - angularVelocity.x * vector.z; - const crossZ = angularVelocity.x * vector.y - angularVelocity.y * vector.x; - return ( - normalize({ - x: vector.x - crossX * dt, - y: vector.y - crossY * dt, - z: vector.z - crossZ * dt, - }) ?? vector - ); +export function blendVector(from: Vector3, to: Vector3, amount: number): Vector3 { + const t = clamp(amount, 0, 1); + return { + x: from.x + (to.x - from.x) * t, + y: from.y + (to.y - from.y) * t, + z: from.z + (to.z - from.z) * t, + }; } -export function blend(from: Vector3, to: Vector3, amount: number): Vector3 { - return ( - normalize({ - x: from.x + (to.x - from.x) * amount, - y: from.y + (to.y - from.y) * amount, - z: from.z + (to.z - from.z) * amount, - }) ?? to - ); +export function angularAcceleration(from: Vector3, to: Vector3, dt: number): Vector3 { + const safeDt = Number.isFinite(dt) && dt > 0 ? dt : 1; + return { + x: (to.x - from.x) / safeDt, + y: (to.y - from.y) / safeDt, + z: (to.z - from.z) / safeDt, + }; } -export const neutralWindowMs = (seconds: number): number => - Number.isFinite(seconds) && seconds > 0 ? seconds * 1000 : 0; +export function sloshVector(rate: Vector3, acceleration: Vector3): Vector2 { + const rateX = normalizeResponse(rate.x, RATE_DEAD_ZONE, RATE_REFERENCE); + const rateY = normalizeResponse(rate.y, RATE_DEAD_ZONE, RATE_REFERENCE); + const accelerationX = normalizeResponse( + acceleration.x, + ACCELERATION_DEAD_ZONE, + ACCELERATION_REFERENCE, + ); + const accelerationY = normalizeResponse( + acceleration.y, + ACCELERATION_DEAD_ZONE, + ACCELERATION_REFERENCE, + ); + const x = -accelerationY * ACCELERATION_WEIGHT - rateY * VELOCITY_WEIGHT; + const y = accelerationX * ACCELERATION_WEIGHT + rateX * VELOCITY_WEIGHT; + const magnitude = Math.hypot(x, y); + if (magnitude <= 1) return { x, y }; + return { x: x / magnitude, y: y / magnitude }; +} -export function projectDeviceGravity( - vector: Vector3, +export function projectDeviceMotion( + vector: Vector2, screenAngle: number, strength: number, -): DeviceGravityTilt { +): DeviceMotionTilt { const magnitude = Number.isFinite(strength) ? Math.max(0, strength) : 0; - const angle = Number.isFinite(screenAngle) ? screenAngle * DEGREES_TO_RADIANS : 0; - const naturalX = vector.x * magnitude; - const naturalY = -vector.y * magnitude; + const angle = Number.isFinite(screenAngle) ? screenAngle * (Math.PI / 180) : 0; + const vectorX = Number.isFinite(vector.x) ? vector.x : 0; + const vectorY = Number.isFinite(vector.y) ? vector.y : 0; + const vectorMagnitude = Math.hypot(vectorX, vectorY); + const scale = vectorMagnitude > 1 ? magnitude / vectorMagnitude : magnitude; + const naturalX = vectorX * scale; + const naturalY = -vectorY * scale; const cosine = Math.cos(angle); const sine = Math.sin(angle); return { @@ -83,3 +92,6 @@ export function projectDeviceGravity( y: -sine * naturalX + cosine * naturalY, }; } + +/** Compatibility name for code written against the earlier gravity projection. */ +export const projectDeviceGravity = projectDeviceMotion; diff --git a/src/lib/Puddle/device/types.ts b/src/lib/Puddle/device/types.ts index 239e44e..8e9685d 100644 --- a/src/lib/Puddle/device/types.ts +++ b/src/lib/Puddle/device/types.ts @@ -1,11 +1,6 @@ export type DeviceGravityPermission = 'granted' | 'denied' | 'unsupported'; export interface DeviceMotionReading { - readonly accelerationIncludingGravity: { - readonly x: number | null; - readonly y: number | null; - readonly z: number | null; - } | null; readonly rotationRate: { readonly alpha: number | null; readonly beta: number | null; @@ -14,33 +9,30 @@ export interface DeviceMotionReading { readonly interval: number; } -export interface DeviceGravityTilt { +export interface DeviceMotionTilt { readonly x: number; readonly y: number; } -export interface DeviceGravityEstimator { - readonly update: ( - reading: DeviceMotionReading, - nowMs: number, - neutralWindowSeconds?: number, - ) => void; - readonly tilt: ( - nowMs: number, - screenAngle: number, - strength: number, - neutralWindowSeconds?: number, - ) => DeviceGravityTilt | null; +export interface DeviceMotionEstimator { + readonly update: (reading: DeviceMotionReading, nowMs: number) => void; + readonly tilt: (nowMs: number, screenAngle: number, strength: number) => DeviceMotionTilt | null; readonly reset: () => void; } +/** Compatibility name for code written against the earlier gravity estimator. */ +export type DeviceGravityTilt = DeviceMotionTilt; + +/** Compatibility name for code written against the earlier gravity estimator. */ +export type DeviceGravityEstimator = DeviceMotionEstimator; + export interface Vector3 { readonly x: number; readonly y: number; readonly z: number; } -export interface TimedVector { - readonly at: number; - readonly vector: Vector3; +export interface Vector2 { + readonly x: number; + readonly y: number; } diff --git a/src/lib/Puddle/runtime/puddleLoop.ts b/src/lib/Puddle/runtime/puddleLoop.ts index e9c5730..5094156 100644 --- a/src/lib/Puddle/runtime/puddleLoop.ts +++ b/src/lib/Puddle/runtime/puddleLoop.ts @@ -1,4 +1,4 @@ -import type { DeviceGravityEstimator } from '../device'; +import type { DeviceMotionEstimator } from '../device'; import type { WaterSim } from '../sim'; export interface PointerPosition { @@ -9,7 +9,7 @@ export interface PointerPosition { export interface PuddleLoopOptions { readonly host: HTMLElement; readonly sim: Pick; - readonly deviceGravityEstimator: Pick; + readonly deviceMotionEstimator: Pick; readonly draw: () => void; readonly getPointer: () => PointerPosition | null; readonly followCursor: boolean; @@ -18,7 +18,6 @@ export interface PuddleLoopOptions { readonly deviceGravity: boolean; readonly deviceTilt: number; readonly deviceEase: number; - readonly deviceNeutralWindow: number; readonly screenAngle: () => number; } @@ -31,7 +30,7 @@ export function startPuddleLoop(options: PuddleLoopOptions): () => void { const { host, sim, - deviceGravityEstimator, + deviceMotionEstimator, draw, getPointer, followCursor, @@ -40,7 +39,6 @@ export function startPuddleLoop(options: PuddleLoopOptions): () => void { deviceGravity, deviceTilt, deviceEase, - deviceNeutralWindow, screenAngle, } = options; const deviceStrength = Number.isFinite(deviceTilt) ? Math.max(0, deviceTilt) : 6; @@ -71,7 +69,7 @@ export function startPuddleLoop(options: PuddleLoopOptions): () => void { tiltY += (gy - tiltY) * cursorK; const deviceTarget = deviceGravity - ? deviceGravityEstimator.tilt(now, screenAngle(), deviceStrength, deviceNeutralWindow) + ? deviceMotionEstimator.tilt(now, screenAngle(), deviceStrength) : null; const deviceK = 1 - Math.exp(-dt / deviceTau); deviceX += ((deviceTarget?.x ?? 0) - deviceX) * deviceK; @@ -102,7 +100,10 @@ export function startPuddleLoop(options: PuddleLoopOptions): () => void { const stop = (): void => { running = false; cancelAnimationFrame(raf); - deviceGravityEstimator.reset(); + deviceX = 0; + deviceY = 0; + deviceMotionEstimator.reset(); + sim.setTiltOffset(0, 0); }; const observer = new IntersectionObserver(([entry]) => { diff --git a/src/lib/Puddle/runtime/puddleRuntime.svelte.ts b/src/lib/Puddle/runtime/puddleRuntime.svelte.ts index fef2146..f049ef5 100644 --- a/src/lib/Puddle/runtime/puddleRuntime.svelte.ts +++ b/src/lib/Puddle/runtime/puddleRuntime.svelte.ts @@ -4,8 +4,7 @@ import { ElementSize } from 'runed'; import { browser } from '$app/environment'; -import { PUDDLE_DEFAULTS } from '../config'; -import { createDeviceGravityEstimator, getScreenAngle } from '../device'; +import { createDeviceMotionEstimator, getScreenAngle } from '../device'; import { resolvePuddleGeometry, type PuddleGeometryOptions } from '../geometry'; import { createPuddleRenderer } from '../render/puddleRenderer'; import { startPuddleLoop } from './puddleLoop'; @@ -23,7 +22,6 @@ export interface PuddleRuntimeOptions { readonly getDeviceGravity: () => boolean; readonly getDeviceTilt: () => number; readonly getDeviceEase: () => number; - readonly getDeviceNeutralWindow: () => number; } export interface PuddleRuntime { @@ -47,13 +45,7 @@ export function createPuddleRuntime(options: PuddleRuntimeOptions): PuddleRuntim const hostSize = new ElementSize(() => host); const reducedMotion = new MediaQuery('(prefers-reduced-motion: reduce)'); const renderer = createPuddleRenderer(); - const deviceGravityEstimator = createDeviceGravityEstimator(); - const deviceNeutralSeconds = $derived.by(() => { - const value = options.getDeviceNeutralWindow(); - return Number.isFinite(value) && value >= 0 - ? Math.min(value, 60) - : PUDDLE_DEFAULTS.deviceNeutralWindow; - }); + const deviceMotionEstimator = createDeviceMotionEstimator(); const geometry = $derived( resolvePuddleGeometry(hostSize.width, hostSize.height, options.getGeometryOptions()), ); @@ -73,10 +65,10 @@ export function createPuddleRuntime(options: PuddleRuntimeOptions): PuddleRuntim pointer = null; }; const onDeviceMotion = (event: DeviceMotionEvent): void => { - deviceGravityEstimator.update(event, performance.now(), deviceNeutralSeconds); + deviceMotionEstimator.update(event, performance.now()); }; const onVisibilityChange = (): void => { - if (document.hidden) deviceGravityEstimator.reset(); + if (document.hidden) deviceMotionEstimator.reset(); }; $effect(() => { @@ -96,7 +88,6 @@ export function createPuddleRuntime(options: PuddleRuntimeOptions): PuddleRuntim const deviceGravity = options.getDeviceGravity(); const deviceTilt = options.getDeviceTilt(); const deviceEase = options.getDeviceEase(); - const neutralWindow = deviceNeutralSeconds; const draw = (): void => { painted = renderer.render(target, { nx: water.nx, @@ -111,7 +102,7 @@ export function createPuddleRuntime(options: PuddleRuntimeOptions): PuddleRuntim return startPuddleLoop({ host: element, sim: water, - deviceGravityEstimator, + deviceMotionEstimator, draw, getPointer: () => pointer, followCursor, @@ -120,7 +111,6 @@ export function createPuddleRuntime(options: PuddleRuntimeOptions): PuddleRuntim deviceGravity, deviceTilt, deviceEase, - deviceNeutralWindow: neutralWindow, screenAngle: getScreenAngle, }); }); diff --git a/src/lib/Puddle/stories/storyConfig.ts b/src/lib/Puddle/stories/storyConfig.ts index e8d4f87..bcc8ae3 100644 --- a/src/lib/Puddle/stories/storyConfig.ts +++ b/src/lib/Puddle/stories/storyConfig.ts @@ -39,7 +39,6 @@ const argTypes: NonNullable = { deviceGravity: { control: 'boolean' }, deviceTilt: { control: { type: 'range', min: 0, max: 12, step: 0.5 } }, deviceEase: { control: { type: 'range', min: 0.05, max: 1.5, step: 0.05 } }, - deviceNeutralWindow: { control: { type: 'range', min: 0, max: 10, step: 0.25 } }, color: { control: 'color' }, }; diff --git a/src/lib/Puddle/tests/Puddle.interaction.svelte.test.ts b/src/lib/Puddle/tests/Puddle.interaction.svelte.test.ts index f8332ba..d9bf09d 100644 --- a/src/lib/Puddle/tests/Puddle.interaction.svelte.test.ts +++ b/src/lib/Puddle/tests/Puddle.interaction.svelte.test.ts @@ -50,14 +50,13 @@ test('followCursor gently leans the puddle toward the pointer', async () => { expect(after.right - after.left).toBeGreaterThan(target); }); -test('deviceGravity leans the puddle using motion-sensor gravity', async () => { +test('deviceGravity sloshes the puddle using device rotation', async () => { await render(Puddle, { props: { animated: true, deviceGravity: true, deviceTilt: 8, deviceEase: 0.05, - deviceNeutralWindow: 10, style: 'width:760px;height:420px;', }, }); @@ -71,18 +70,18 @@ test('deviceGravity leans the puddle using motion-sensor gravity', async () => { window.dispatchEvent( new DeviceMotionEvent('devicemotion', { - accelerationIncludingGravity: { x: 0, y: 0, z: 9.8 }, + rotationRate: { alpha: 0, beta: 0, gamma: 0 }, interval: 16, }), ); - await new Promise((resolve) => void setTimeout(resolve, 100)); + await new Promise((resolve) => void setTimeout(resolve, 50)); const target = before.right - before.left + total * 0.02; let after = before; for (let i = 0; i < 30 && after.right - after.left <= target; i++) { window.dispatchEvent( new DeviceMotionEvent('devicemotion', { - accelerationIncludingGravity: { x: -9.8, y: 0, z: 0 }, + rotationRate: { alpha: 0, beta: 360, gamma: 0 }, interval: 16, }), ); From 59feef84a39f5eb71c36d9f24efa288bbc04a3a2 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Thu, 23 Jul 2026 12:09:33 -0700 Subject: [PATCH 073/141] fix(fonts): rebase inlined font assets Patch unplugin-fonts so extracted font-face rules keep URLs relative to the generated HTML while preserving early font discovery in Storybook and Chromatic. --- patches/unplugin-fonts@2.0.0.patch | 43 ++++++++++++++++++++++++++++++ pnpm-lock.yaml | 7 +++-- pnpm-workspace.yaml | 2 ++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 patches/unplugin-fonts@2.0.0.patch diff --git a/patches/unplugin-fonts@2.0.0.patch b/patches/unplugin-fonts@2.0.0.patch new file mode 100644 index 0000000..02d7905 --- /dev/null +++ b/patches/unplugin-fonts@2.0.0.patch @@ -0,0 +1,43 @@ +diff --git a/dist/index.mjs b/dist/index.mjs +index c9c2808405c2f3f41c21910df6c13fd42ed69701..af6a07cde8104f2c26609e47bb65a795087e1aaf 100644 +--- a/dist/index.mjs ++++ b/dist/index.mjs +@@ -3,7 +3,7 @@ import { customVirtualModule, resolveFontFiles, resolveUserOption } from "./load + import { collectFallbackNames, generateAllFallbacks, transformFontFamilyDeclarations } from "./loaders/fallback.mjs"; + import { fontsourceImports, fontsourceVirtualModule } from "./loaders/fontsource.mjs"; + import MagicString from "magic-string"; +-import { basename, extname, join } from "pathe"; ++import { basename, dirname, extname, join, relative } from "pathe"; + import { createUnplugin } from "unplugin"; + //#region src/index.ts + const virtualStylesId = "unfonts.css"; +@@ -11,6 +11,20 @@ const resolvedVirtualStylesId = `\0${virtualStylesId}`; + const virtualModuleId = "unplugin-fonts/head"; + const resolvedVirtualModuleId = `\0${virtualModuleId}`; + const fontFileRegex = /\.(?:woff2?|ttf|eot|otf)(?:\?.*)?$/i; ++const cssUrlRegex = /url\((\s*)(?:(["'])(.*?)\2|([^'")]*?))(\s*)\)/g; ++const absoluteUrlRegex = /^(?:[a-z][a-z\d+.-]*:|\/\/|\/|#)/i; ++function rebaseCssUrls(css, cssFileName, htmlPath) { ++ const htmlFileName = htmlPath.replace(/^\/+/, ""); ++ return css.replace(cssUrlRegex, (match, before, quote, quotedUrl, unquotedUrl, after) => { ++ const url = (quotedUrl ?? unquotedUrl).trim(); ++ if (!url || absoluteUrlRegex.test(url)) return match; ++ const parts = /^([^?#]*)([?#].*)?$/.exec(url); ++ if (!parts?.[1]) return match; ++ let rebasedUrl = relative(dirname(htmlFileName), join(dirname(cssFileName), parts[1])); ++ if (!rebasedUrl.startsWith(".")) rebasedUrl = `./${rebasedUrl}`; ++ return `url(${before}${quote ?? ""}${rebasedUrl}${parts[2] ?? ""}${quote ?? ""}${after})`; ++ }); ++} + var src_default = createUnplugin((userOptions) => { + const options = userOptions || {}; + let root; +@@ -101,7 +115,7 @@ var src_default = createUnplugin((userOptions) => { + const css = typeof info.source === "string" ? info.source : ""; + const matches = css.match(fontFaceRegex); + if (matches) { +- fontFaceRules.push(...matches); ++ fontFaceRules.push(...matches.map((rule) => rebaseCssUrls(rule, info.fileName, ctx.path))); + info.source = css.replace(fontFaceRegex, ""); + } + } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0bd65ec..974b0ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,9 @@ overrides: undici@>=7.23.0 <7.28.0: ^7.28.0 ws@>=8.0.0 <8.21.0: ^8.21.0 +patchedDependencies: + unplugin-fonts@2.0.0: daf89586c1c46e1f69c3db9885a0abddd667d76a91ab3ff48091ec0b0b1c0706 + importers: .: @@ -172,7 +175,7 @@ importers: version: 66.7.5(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) unplugin-fonts: specifier: ^2.0.0 - version: 2.0.0(esbuild@0.28.1)(rolldown@1.1.5)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) + version: 2.0.0(patch_hash=daf89586c1c46e1f69c3db9885a0abddd667d76a91ab3ff48091ec0b0b1c0706)(esbuild@0.28.1)(rolldown@1.1.5)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)) vite: specifier: ^8.1.4 version: 8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0) @@ -6625,7 +6628,7 @@ snapshots: transitivePeerDependencies: - vite - unplugin-fonts@2.0.0(esbuild@0.28.1)(rolldown@1.1.5)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): + unplugin-fonts@2.0.0(patch_hash=daf89586c1c46e1f69c3db9885a0abddd667d76a91ab3ff48091ec0b0b1c0706)(esbuild@0.28.1)(rolldown@1.1.5)(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)): dependencies: css-tree: 3.2.1 fast-glob: 3.3.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e59864e..ae23757 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,3 +23,5 @@ peerDependencyRules: publicHoistPattern: - 'react' - 'react-dom' +patchedDependencies: + unplugin-fonts@2.0.0: patches/unplugin-fonts@2.0.0.patch From c3301148b553f6c559a9a079a51096a7d3056924 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Thu, 23 Jul 2026 12:47:53 -0700 Subject: [PATCH 074/141] feat(checkerboard): add eroded background Add a configurable canvas renderer and Svelte component with Storybook coverage. Use the background in the Puddle story and export it from the library entry point. --- .../ErodedCheckerboard.stories.svelte | 51 +++ .../ErodedCheckerboard.svelte | 83 +++++ .../erodedCheckerboardRenderer.ts | 292 ++++++++++++++++++ src/lib/Puddle/stories/Puddle.stories.svelte | 3 + src/lib/index.ts | 2 + 5 files changed, 431 insertions(+) create mode 100644 src/lib/ErodedCheckerboard/ErodedCheckerboard.stories.svelte create mode 100644 src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte create mode 100644 src/lib/ErodedCheckerboard/erodedCheckerboardRenderer.ts diff --git a/src/lib/ErodedCheckerboard/ErodedCheckerboard.stories.svelte b/src/lib/ErodedCheckerboard/ErodedCheckerboard.stories.svelte new file mode 100644 index 0000000..32c4158 --- /dev/null +++ b/src/lib/ErodedCheckerboard/ErodedCheckerboard.stories.svelte @@ -0,0 +1,51 @@ + + +{#snippet template(args: Args)} +
+ +
+{/snippet} + + + + diff --git a/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte b/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte new file mode 100644 index 0000000..3e6ac0a --- /dev/null +++ b/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte @@ -0,0 +1,83 @@ + + + + + + + diff --git a/src/lib/ErodedCheckerboard/erodedCheckerboardRenderer.ts b/src/lib/ErodedCheckerboard/erodedCheckerboardRenderer.ts new file mode 100644 index 0000000..faa5a05 --- /dev/null +++ b/src/lib/ErodedCheckerboard/erodedCheckerboardRenderer.ts @@ -0,0 +1,292 @@ +import * as twgl from 'twgl.js'; + +const VERTEX_SHADER = /* glsl */ `#version 300 es +in vec2 position; + +out vec2 textureCoordinate; + +void main() { + textureCoordinate = position * 0.5 + 0.5; + gl_Position = vec4(position, 0.0, 1.0); +}`; + +const PATTERN_FRAGMENT_SHADER = /* glsl */ `#version 300 es +precision highp float; + +out vec4 fragmentColor; + +uniform vec2 uLogicalResolution; +uniform vec2 uSourceScale; +uniform vec2 uFieldSize; +uniform float uCheckerSize; +uniform float uPixelSize; +uniform float uSeed; +uniform float uMaxErosion; +uniform float uFalloff; + +float hash(vec2 point) { + point = fract(point * vec2(123.34, 456.21)); + point += dot(point, point + 45.32 + uSeed); + return fract(point.x * point.y); +} + +float valueNoise(vec2 point) { + vec2 cell = floor(point); + vec2 offset = fract(point); + offset = offset * offset * (3.0 - 2.0 * offset); + + float bottomLeft = hash(cell); + float bottomRight = hash(cell + vec2(1.0, 0.0)); + float topLeft = hash(cell + vec2(0.0, 1.0)); + float topRight = hash(cell + vec2(1.0, 1.0)); + + return mix( + mix(bottomLeft, bottomRight, offset.x), + mix(topLeft, topRight, offset.x), + offset.y + ); +} + +void main() { + vec2 pixel = gl_FragCoord.xy / uSourceScale; + vec2 checkerCoordinate = pixel / uCheckerSize; + vec2 checkerCell = floor(checkerCoordinate); + vec2 checkerPosition = fract(checkerCoordinate); + + vec2 fieldCenter = uLogicalResolution * 0.5; + vec2 fieldPosition = (pixel - fieldCenter) / (uFieldSize * 0.5); + float radialDistance = length(fieldPosition); + float broadFieldNoise = valueNoise( + checkerCell * 0.045 + vec2(31.7, -18.4) + ) - 0.5; + float detailFieldNoise = valueNoise( + checkerCell * 0.14 + vec2(-9.2, 47.1) + ) - 0.5; + float signedErosion = + uMaxErosion * + (1.0 - pow(radialDistance / 1.14276, uFalloff)) + + broadFieldNoise * 0.035 + + detailFieldNoise * 0.012; + float erosionAmount = abs(signedErosion); + if (signedErosion > 0.28) { + float excessErosion = signedErosion - 0.28; + erosionAmount = + 0.28 + + excessErosion * 0.426 + + excessErosion * excessErosion * 0.345; + } else if (signedErosion < -0.32) { + float excessErosion = -signedErosion - 0.32; + erosionAmount = + 0.32 + + excessErosion * 0.4 + + excessErosion * excessErosion * 0.2; + } + erosionAmount = max( + erosionAmount + + (hash(checkerCell + vec2(37.1, 89.7)) - 0.5) * 0.16, + 0.0 + ); + bool originalWhiteCell = mod(checkerCell.x + checkerCell.y, 2.0) < 1.0; + bool affectedCell = originalWhiteCell != (signedErosion >= 0.0); + + float macroGridSize = max(round(uCheckerSize / uPixelSize), 2.0); + vec2 macroPixel = min( + floor(checkerPosition * macroGridSize), + vec2(macroGridSize - 1.0) + ); + float maxCornerDepth = floor((macroGridSize - 1.0) * 0.5) * 2.0; + vec2 corner = step(vec2((macroGridSize - 1.0) * 0.5), macroPixel); + vec2 cornerPixel = mix( + macroPixel, + vec2(macroGridSize - 1.0) - macroPixel, + corner + ); + float horizontalWeight = mix( + 0.82, + 1.18, + hash(checkerCell * vec2(41.0, 17.0) + corner * vec2(131.0, 71.0) + 53.7) + ); + vec2 cornerWeights = vec2(horizontalWeight, 2.0 - horizontalWeight); + float frontierOrder = hash( + checkerCell * vec2(23.0, 29.0) + + corner * vec2(113.0, 197.0) + + cornerPixel * vec2(7.1, 13.7) + + 97.3 + ); + float cornerDepth = + dot(cornerPixel, cornerWeights) + frontierOrder * 0.7; + float removalThreshold = + (cornerDepth + 0.08) / (maxCornerDepth + 1.0); + + bool corePixel = erosionAmount < removalThreshold; + + bool whitePixel = originalWhiteCell; + if (affectedCell) { + whitePixel = originalWhiteCell ? corePixel : !corePixel; + } + + float coverage = whitePixel ? 1.0 : 0.0; + fragmentColor = vec4(coverage, coverage, coverage, 1.0); +}`; + +const PRESENT_FRAGMENT_SHADER = /* glsl */ `#version 300 es +precision highp float; + +in vec2 textureCoordinate; +out vec4 fragmentColor; + +uniform sampler2D uPattern; +uniform vec2 uPatternTexelSize; +uniform float uOpacity; + +void main() { + vec2 sampleOffset = uPatternTexelSize * 2.0; + float coverage = + texture(uPattern, textureCoordinate + vec2(-sampleOffset.x, -sampleOffset.y)).r + + texture(uPattern, textureCoordinate + vec2(0.0, -sampleOffset.y)).r * 2.0 + + texture(uPattern, textureCoordinate + vec2(sampleOffset.x, -sampleOffset.y)).r + + texture(uPattern, textureCoordinate + vec2(-sampleOffset.x, 0.0)).r * 2.0 + + texture(uPattern, textureCoordinate).r * 4.0 + + texture(uPattern, textureCoordinate + vec2(sampleOffset.x, 0.0)).r * 2.0 + + texture(uPattern, textureCoordinate + vec2(-sampleOffset.x, sampleOffset.y)).r + + texture(uPattern, textureCoordinate + vec2(0.0, sampleOffset.y)).r * 2.0 + + texture(uPattern, textureCoordinate + sampleOffset).r; + coverage /= 16.0; + coverage = round(coverage * 8.0) / 8.0; + float alpha = coverage * uOpacity; + if (alpha <= 0.001) discard; + fragmentColor = vec4(vec3(1.0), alpha); +}`; + +export interface ErodedCheckerboardRenderOptions { + width: number; + height: number; + devicePixelRatio: number; + maxFieldWidth?: number | undefined; + maxFieldHeight?: number | undefined; + checkerSize: number; + pixelSize: number; + seed: number; + opacity: number; + maxErosion: number; + falloff: number; +} + +export interface ErodedCheckerboardRenderer { + render: (options: ErodedCheckerboardRenderOptions) => void; + destroy: () => void; +} + +export function createErodedCheckerboardRenderer( + canvas: HTMLCanvasElement, +): ErodedCheckerboardRenderer | undefined { + const gl = canvas.getContext('webgl2', { + alpha: true, + antialias: false, + depth: false, + powerPreference: 'low-power', + premultipliedAlpha: false, + preserveDrawingBuffer: true, + stencil: false, + }); + if (!gl) return; + + const patternProgramInfo = twgl.createProgramInfo(gl, [VERTEX_SHADER, PATTERN_FRAGMENT_SHADER]); + const presentProgramInfo = twgl.createProgramInfo(gl, [VERTEX_SHADER, PRESENT_FRAGMENT_SHADER]); + const bufferInfo = twgl.createBufferInfoFromArrays(gl, { + position: { + numComponents: 2, + data: [-1, -1, 3, -1, -1, 3], + }, + }); + const framebufferAttachments: twgl.AttachmentOptions[] = [ + { + format: gl.RGBA, + internalFormat: gl.RGBA8, + type: gl.UNSIGNED_BYTE, + min: gl.LINEAR, + mag: gl.LINEAR, + wrap: gl.CLAMP_TO_EDGE, + }, + ]; + const patternFramebuffer = twgl.createFramebufferInfo(gl, framebufferAttachments, 1, 1); + const patternTexture = patternFramebuffer.attachments[0] as WebGLTexture; + const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE) as number; + + return { + render(options) { + const outputScale = Math.max(options.devicePixelRatio, 1); + const resolutionWidth = Math.max(1, Math.round(options.width * outputScale)); + const resolutionHeight = Math.max(1, Math.round(options.height * outputScale)); + const desiredSourceScale = outputScale * 2; + const sourceScale = Math.max( + 1, + Math.min( + desiredSourceScale, + maxTextureSize / Math.max(options.width, 1), + maxTextureSize / Math.max(options.height, 1), + ), + ); + const sourceWidth = Math.max(1, Math.round(options.width * sourceScale)); + const sourceHeight = Math.max(1, Math.round(options.height * sourceScale)); + const fieldWidth = Math.max(options.maxFieldWidth ?? options.width, 1); + const fieldHeight = Math.max(options.maxFieldHeight ?? options.height, 1); + + if (canvas.width !== resolutionWidth || canvas.height !== resolutionHeight) { + canvas.width = resolutionWidth; + canvas.height = resolutionHeight; + } + if (patternFramebuffer.width !== sourceWidth || patternFramebuffer.height !== sourceHeight) { + twgl.resizeFramebufferInfo( + gl, + patternFramebuffer, + framebufferAttachments, + sourceWidth, + sourceHeight, + ); + } + + twgl.bindFramebufferInfo(gl, patternFramebuffer); + gl.disable(gl.BLEND); + gl.clearColor(0, 0, 0, 1); + gl.clear(gl.COLOR_BUFFER_BIT); + gl.useProgram(patternProgramInfo.program); + twgl.setBuffersAndAttributes(gl, patternProgramInfo, bufferInfo); + twgl.setUniforms(patternProgramInfo, { + uLogicalResolution: [options.width, options.height], + uSourceScale: [ + sourceWidth / Math.max(options.width, 1), + sourceHeight / Math.max(options.height, 1), + ], + uFieldSize: [fieldWidth, fieldHeight], + uCheckerSize: Math.max(options.checkerSize, 1), + uPixelSize: Math.max(Math.min(options.pixelSize, options.checkerSize), 0.25), + uSeed: options.seed, + uMaxErosion: Math.min(Math.max(options.maxErosion, 0), 1), + uFalloff: Math.max(options.falloff, 0.01), + }); + twgl.drawBufferInfo(gl, bufferInfo, gl.TRIANGLES); + + twgl.bindFramebufferInfo(gl, null); + gl.clearColor(0, 0, 0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + gl.useProgram(presentProgramInfo.program); + twgl.setBuffersAndAttributes(gl, presentProgramInfo, bufferInfo); + twgl.setUniforms(presentProgramInfo, { + uPattern: patternTexture, + uPatternTexelSize: [1 / sourceWidth, 1 / sourceHeight], + uOpacity: Math.min(Math.max(options.opacity, 0), 1), + }); + twgl.drawBufferInfo(gl, bufferInfo, gl.TRIANGLES); + }, + destroy() { + for (const attribute of Object.values(bufferInfo.attribs ?? {})) { + gl.deleteBuffer(attribute.buffer); + } + gl.deleteTexture(patternTexture); + gl.deleteFramebuffer(patternFramebuffer.framebuffer); + gl.deleteProgram(patternProgramInfo.program); + gl.deleteProgram(presentProgramInfo.program); + }, + }; +} diff --git a/src/lib/Puddle/stories/Puddle.stories.svelte b/src/lib/Puddle/stories/Puddle.stories.svelte index 56eeb43..f33d432 100644 --- a/src/lib/Puddle/stories/Puddle.stories.svelte +++ b/src/lib/Puddle/stories/Puddle.stories.svelte @@ -47,6 +47,8 @@ + +{#snippet template(args: Args)} + +{/snippet} + + diff --git a/src/lib/Hero/Hero.svelte b/src/lib/Hero/Hero.svelte new file mode 100644 index 0000000..0cedfb8 --- /dev/null +++ b/src/lib/Hero/Hero.svelte @@ -0,0 +1,47 @@ + + + + +
+ + +
+ SUMMER SUMMIT
GAME JAM 2026
+
+ +
+
diff --git a/src/lib/Puddle/stories/Puddle.stories.svelte b/src/lib/Puddle/stories/Puddle.stories.svelte index 5a2116b..22723c5 100644 --- a/src/lib/Puddle/stories/Puddle.stories.svelte +++ b/src/lib/Puddle/stories/Puddle.stories.svelte @@ -48,8 +48,6 @@ - - From 67f725a42fbd34c33fe3bfd670f87165d81f714a Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Thu, 23 Jul 2026 21:59:07 -0700 Subject: [PATCH 083/141] refactor(puddle): simplify fallback sizing Let the absolute insets determine the fallback width instead of declaring a redundant full width. --- src/lib/Puddle/Puddle.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Puddle/Puddle.svelte b/src/lib/Puddle/Puddle.svelte index 42b72d8..0ca0327 100644 --- a/src/lib/Puddle/Puddle.svelte +++ b/src/lib/Puddle/Puddle.svelte @@ -104,7 +104,7 @@ >
Date: Thu, 23 Jul 2026 22:00:08 -0700 Subject: [PATCH 084/141] refactor(hero): own visual defaults Fix the landing-page palette in the component and remove its obsolete color controls. --- src/lib/Hero/Hero.stories.svelte | 21 ++++----------------- src/lib/Hero/Hero.svelte | 19 +++++-------------- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/lib/Hero/Hero.stories.svelte b/src/lib/Hero/Hero.stories.svelte index f529990..cb4be2b 100644 --- a/src/lib/Hero/Hero.stories.svelte +++ b/src/lib/Hero/Hero.stories.svelte @@ -1,40 +1,27 @@ diff --git a/src/lib/Hero/Hero.svelte b/src/lib/Hero/Hero.svelte index 0cedfb8..10fcb67 100644 --- a/src/lib/Hero/Hero.svelte +++ b/src/lib/Hero/Hero.svelte @@ -1,11 +1,7 @@
From 5815b28629e785c09839a160f6e5219985afa614 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Thu, 23 Jul 2026 22:00:51 -0700 Subject: [PATCH 085/141] fix(hero): make responsive Let callers size the Hero and make its visual layers fill the responsive container. --- src/lib/Hero/Hero.stories.svelte | 2 +- src/lib/Hero/Hero.svelte | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lib/Hero/Hero.stories.svelte b/src/lib/Hero/Hero.stories.svelte index cb4be2b..9f07593 100644 --- a/src/lib/Hero/Hero.stories.svelte +++ b/src/lib/Hero/Hero.stories.svelte @@ -27,7 +27,7 @@ {#snippet template(args: Args)} - + {/snippet} diff --git a/src/lib/Hero/Hero.svelte b/src/lib/Hero/Hero.svelte index 10fcb67..4cf9101 100644 --- a/src/lib/Hero/Hero.svelte +++ b/src/lib/Hero/Hero.svelte @@ -1,7 +1,11 @@
- - + +
SUMMER SUMMIT
GAME JAM 2026
Date: Thu, 23 Jul 2026 22:19:50 -0700 Subject: [PATCH 086/141] fix(checkerboard): composite opacity in CSS Render opaque WebGL pixels and let the DOM compositor apply opacity. This avoids Safari's non-premultiplied canvas alpha path. --- src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte | 2 +- src/lib/ErodedCheckerboard/erodedCheckerboardRenderer.ts | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte b/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte index 6921da3..5ddf058 100644 --- a/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte +++ b/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte @@ -55,7 +55,6 @@ checkerSize, pixelSize, seed, - opacity, maxErosion, falloff, }); @@ -67,6 +66,7 @@
diff --git a/src/lib/LandingHero/LandingHeroContent.svelte b/src/lib/LandingHero/LandingHeroContent.svelte new file mode 100644 index 0000000..eef662f --- /dev/null +++ b/src/lib/LandingHero/LandingHeroContent.svelte @@ -0,0 +1,96 @@ + + + + +
+ {#if layer === 'base'} +

{titleLines[0]} {titleLines[1]}

+ {/if} + +
+
+ +

+ SUMMER GAME JAM 2026 +

+
+ + {#if navItems.length > 0} + + {/if} +
+ +
+ + +
+

+ {dateLabel} +

+ {#if cta} +
+ {@render cta()} +
+ {/if} +
+
+ +
+

{organizerLabel}

+

{locationLabel}

+
+
diff --git a/src/lib/LandingHero/storyConfig.ts b/src/lib/LandingHero/storyConfig.ts new file mode 100644 index 0000000..d9f532b --- /dev/null +++ b/src/lib/LandingHero/storyConfig.ts @@ -0,0 +1,91 @@ +export interface LandingHeroStoryArgs { + readonly titleLines: readonly [string, string]; + readonly dateLabel: string; + readonly organizerLabel: string; + readonly locationLabel: string; + readonly navItems?: readonly { label: string; href: string }[]; + readonly cta?: { label: string; href?: string } | undefined; + readonly class?: string; +} + +export const LANDING_HERO_EVENT_ARGS = { + titleLines: ['SUMMER SUMMIT', 'GAME JAM 2026'], + dateLabel: 'SEPT 4 - 6', + organizerLabel: 'GAME DEV CLUB X IATSU 2026', + locationLabel: 'SFU BURNABY CAMPUS', + navItems: [], + cta: { label: 'Join the jam', href: '/join' }, +} satisfies LandingHeroStoryArgs; + +export const LANDING_HERO_VIEWPORTS = { + compact: { + name: 'Compact portrait', + styles: { width: '390px', height: '844px' }, + type: 'mobile', + }, + medium: { + name: 'Medium', + styles: { width: '768px', height: '1024px' }, + type: 'tablet', + }, + expanded: { + name: 'Expanded', + styles: { width: '1280px', height: '800px' }, + type: 'desktop', + }, + large: { + name: 'Large desktop', + styles: { width: '1920px', height: '1080px' }, + type: 'desktop', + }, +} as const; + +type LandingHeroViewportName = keyof typeof LANDING_HERO_VIEWPORTS; + +interface LandingHeroStoryCase { + readonly name: string; + readonly screenshotName: string; + readonly viewport: LandingHeroViewportName; + readonly args: LandingHeroStoryArgs; +} + +export const LANDING_HERO_STORY_CASES = { + compact: { + name: 'Compact Portrait', + screenshotName: 'compact-portrait', + viewport: 'compact', + args: LANDING_HERO_EVENT_ARGS, + }, + medium: { + name: 'Medium', + screenshotName: 'medium', + viewport: 'medium', + args: LANDING_HERO_EVENT_ARGS, + }, + expanded: { + name: 'Expanded', + screenshotName: 'expanded', + viewport: 'expanded', + args: LANDING_HERO_EVENT_ARGS, + }, + large: { + name: 'Large Desktop', + screenshotName: 'large-desktop', + viewport: 'large', + args: LANDING_HERO_EVENT_ARGS, + }, + withoutCta: { + name: 'Without CTA', + screenshotName: 'without-cta', + viewport: 'expanded', + args: { ...LANDING_HERO_EVENT_ARGS, cta: undefined }, + }, + reducedMotion: { + name: 'Reduced Motion', + screenshotName: 'reduced-motion', + viewport: 'expanded', + args: LANDING_HERO_EVENT_ARGS, + }, +} as const satisfies Record; + +export const LANDING_HERO_VISUAL_CASES = Object.values(LANDING_HERO_STORY_CASES); diff --git a/src/lib/LandingHero/types.ts b/src/lib/LandingHero/types.ts new file mode 100644 index 0000000..b067bdb --- /dev/null +++ b/src/lib/LandingHero/types.ts @@ -0,0 +1,19 @@ +export interface LandingHeroNavItem { + label: string; + href: string; +} + +export interface LandingHeroProps { + titleLines: readonly [string, string]; + dateLabel: string; + organizerLabel: string; + locationLabel: string; + navItems?: readonly LandingHeroNavItem[]; + cta?: + | { + label: string; + href?: string; + } + | undefined; + class?: string; +} diff --git a/src/lib/index.ts b/src/lib/index.ts index 0855efd..2960ef1 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -4,6 +4,7 @@ export { default as ClipAwareButton } from './Button/ClipAwareButton.svelte'; export type { ClipAwareButtonAppearance, ClipAwareButtonControl, + ClipAwareButtonLayers, ClipAwareButtonProps, ClipAwareButtonSize, } from './Button/ClipAwareButton.svelte'; @@ -11,8 +12,6 @@ export { default as ColorPalette } from './ColorPalette/ColorPalette.svelte'; export type { ColorPaletteProps } from './ColorPalette/ColorPalette.svelte'; export { default as ErodedCheckerboard } from './ErodedCheckerboard/ErodedCheckerboard.svelte'; export type { ErodedCheckerboardProps } from './ErodedCheckerboard/ErodedCheckerboard.svelte'; -export { default as Hero } from './Hero/Hero.svelte'; -export type { HeroProps } from './Hero/Hero.svelte'; export { default as LandingHero } from './LandingHero/LandingHero.svelte'; export type { LandingHeroProps } from './LandingHero/LandingHero.svelte'; export { From f15b512d1acb41ded04140ecdfd6a914434dd494 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sat, 25 Jul 2026 04:05:19 -0700 Subject: [PATCH 106/141] feat(landing): make hero text color secondary on primrary --- src/lib/Button/Button.stories.svelte | 10 +++++++++- src/lib/Button/Button.svelte | 4 ++-- src/lib/Button/ButtonSurface.svelte | 2 +- src/lib/Button/ClipAwareButton.svelte | 2 +- src/lib/LandingHero/LandingHero.stories.svelte | 16 ++++++++++++++++ src/lib/LandingHero/LandingHero.svelte | 3 ++- src/lib/tokens.ts | 16 ++++++++++++++++ 7 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/lib/Button/Button.stories.svelte b/src/lib/Button/Button.stories.svelte index 8bf12ce..0ba2f54 100644 --- a/src/lib/Button/Button.stories.svelte +++ b/src/lib/Button/Button.stories.svelte @@ -41,7 +41,7 @@ size: 'default', }, argTypes: { - appearance: { control: 'inline-radio', options: ['dark', 'light'] }, + appearance: { control: 'inline-radio', options: ['accent', 'dark', 'light'] }, disabled: { control: 'boolean' }, size: { control: 'inline-radio', options: ['default', 'large'] }, spray: { control: 'boolean' }, @@ -131,6 +131,12 @@
{/snippet} +{#snippet secondaryAccent(args: Args)} +
+ +
+{/snippet} + {#snippet layered(args: Args)} + + + { + await expectDestinationCta(canvasElement); + await expectNoHorizontalOverflow(canvasElement); + }} +/> + + + diff --git a/src/lib/LandingHero/LandingHero.svelte b/src/lib/LandingHero/LandingHero.svelte index dc26a90..41d3f29 100644 --- a/src/lib/LandingHero/LandingHero.svelte +++ b/src/lib/LandingHero/LandingHero.svelte @@ -85,6 +85,7 @@ data-hero data-landing-hero style:--hero-background-color={heroColors.background} + style:--hero-main-text-color={heroColors.mainContent} style:--hero-outline-color={heroColors.outline} style:--hero-puddle-text-color={heroColors.inverseContent} style:--hero-text-color={heroColors.content} @@ -98,7 +99,7 @@ > Date: Sat, 25 Jul 2026 04:07:56 -0700 Subject: [PATCH 107/141] test(tokens): remove low-value tests --- src/lib/tokens.test.ts | 41 ----------------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 src/lib/tokens.test.ts diff --git a/src/lib/tokens.test.ts b/src/lib/tokens.test.ts deleted file mode 100644 index 765e99d..0000000 --- a/src/lib/tokens.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { describe, expect, test } from 'vitest'; - -import { createBrandColorCss } from './theme/presetBrandColors'; -import { brandColors, brandColorValues, heroColors, heroColorValues } from './tokens'; - -describe('hero color tokens', () => { - test('maps semantic roles to the approved palette stops', () => { - expect(heroColorValues).toEqual({ - background: brandColorValues.primary[100], - content: brandColorValues.shade[900], - outline: brandColorValues.shade[900], - inverseContent: brandColorValues.shade[50], - }); - expect(heroColors).toEqual({ - background: brandColors.primary[100], - content: brandColors.shade[900], - outline: brandColors.shade[900], - inverseContent: brandColors.shade[50], - }); - }); - - test('keeps canonical values in OKLCH and references generated brand variables', () => { - expect(Object.values(heroColorValues).every((color) => color.startsWith('oklch('))).toBe(true); - expect(heroColors).toEqual({ - background: 'var(--brand-primary-100)', - content: 'var(--brand-shade-900)', - outline: 'var(--brand-shade-900)', - inverseContent: 'var(--brand-shade-50)', - }); - }); - - test('retains sRGB fallbacks and canonical OKLCH overrides for hero palette stops', () => { - const css = createBrandColorCss(brandColorValues); - - expect(css).toMatch(/--brand-primary-100: rgb\(/); - expect(css).toMatch(/--brand-shade-900: rgb\(/); - expect(css).toContain(`--brand-primary-100: ${heroColorValues.background};`); - expect(css).toContain(`--brand-shade-900: ${heroColorValues.content};`); - expect(css).toContain('@supports (color: oklch(0% 0 0))'); - }); -}); From bc087556ed2fda9dc13694189bc79b1523c1cde4 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sat, 25 Jul 2026 13:17:58 -0700 Subject: [PATCH 108/141] feat(landing): align detail row to title slopes Extrapolate both title edges using responsive line-height ratios. Keep the date and CTA on the triangular hero composition. --- .../LandingHero/LandingHero.stories.svelte | 4 +- src/lib/LandingHero/LandingHeroContent.svelte | 117 ++++++++++++++++-- src/lib/LandingHero/storyConfig.ts | 2 +- src/routes/+page.svelte | 2 +- 4 files changed, 109 insertions(+), 16 deletions(-) diff --git a/src/lib/LandingHero/LandingHero.stories.svelte b/src/lib/LandingHero/LandingHero.stories.svelte index 47c312f..c2fa019 100644 --- a/src/lib/LandingHero/LandingHero.stories.svelte +++ b/src/lib/LandingHero/LandingHero.stories.svelte @@ -159,7 +159,7 @@ await expect( canvas.getByRole('heading', { level: 1, - name: 'SUMMER SUMMIT GAME JAM 2026', + name: 'SEPTEMBER 4–6 SUMMER GAME JAM 2026', }), ).toBeInTheDocument(); await expect(canvas.queryByRole('navigation')).toBeNull(); @@ -170,7 +170,7 @@ Array.from(hiddenTitles).every((title) => title.closest('[aria-hidden="true"]') !== null), ).toBe(true); - for (const copy of ['SEPT 4 - 6', 'GAME DEV CLUB X IATSU 2026', 'SFU BURNABY CAMPUS']) { + for (const copy of ['SEPTEMBER 4–6', 'GAME DEV CLUB X IATSU 2026', 'SFU BURNABY CAMPUS']) { const matches = canvas.getAllByText(copy, { exact: true }); const hiddenMatches = matches.filter( (match) => match.closest('[aria-hidden="true"]') !== null, diff --git a/src/lib/LandingHero/LandingHeroContent.svelte b/src/lib/LandingHero/LandingHeroContent.svelte index eef662f..3b4b417 100644 --- a/src/lib/LandingHero/LandingHeroContent.svelte +++ b/src/lib/LandingHero/LandingHeroContent.svelte @@ -40,7 +40,7 @@ style:--landing-detail-height={buttonSizes.large.height} > {#if layer === 'base'} -

{titleLines[0]} {titleLines[1]}

+

{dateLabel} {titleLines[0]} {titleLines[1]}

{/if}
@@ -57,28 +57,30 @@
- -

{dateLabel}

+ {titleLines[0]}
+ {titleLines[1]} +
+
{#if cta}
{@render cta()} @@ -94,3 +96,94 @@

{locationLabel}

+ + diff --git a/src/lib/LandingHero/storyConfig.ts b/src/lib/LandingHero/storyConfig.ts index d9f532b..513920a 100644 --- a/src/lib/LandingHero/storyConfig.ts +++ b/src/lib/LandingHero/storyConfig.ts @@ -10,7 +10,7 @@ export interface LandingHeroStoryArgs { export const LANDING_HERO_EVENT_ARGS = { titleLines: ['SUMMER SUMMIT', 'GAME JAM 2026'], - dateLabel: 'SEPT 4 - 6', + dateLabel: 'SEPTEMBER 4–6', organizerLabel: 'GAME DEV CLUB X IATSU 2026', locationLabel: 'SFU BURNABY CAMPUS', navItems: [], diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 80219ab..9a83b11 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -12,7 +12,7 @@ Date: Sat, 25 Jul 2026 13:58:26 -0700 Subject: [PATCH 109/141] fix(button): render icons after labels --- src/lib/Button/Button.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Button/Button.svelte b/src/lib/Button/Button.svelte index 654860f..d2fd18a 100644 --- a/src/lib/Button/Button.svelte +++ b/src/lib/Button/Button.svelte @@ -74,8 +74,8 @@ aria-hidden={visuals ? 'true' : undefined} class={['button-layout', { semantic: !visuals }]} > - {@render icon?.()} {@render children?.()} + {@render icon?.()} {#if visuals} From 167827c365f838a6540a0f63689f0a4907d45cba Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sat, 25 Jul 2026 13:58:51 -0700 Subject: [PATCH 110/141] feat(button): add animated underline variant Keep button semantics shared while providing a borderless dotted treatment. Cover default and hover rendering in Storybook. --- src/lib/Button/Button.stories.svelte | 43 +++++++ src/lib/Button/Button.svelte | 47 ++++++-- src/lib/Button/UnderlineButtonSurface.svelte | 118 +++++++++++++++++++ src/lib/index.ts | 1 + 4 files changed, 198 insertions(+), 11 deletions(-) create mode 100644 src/lib/Button/UnderlineButtonSurface.svelte diff --git a/src/lib/Button/Button.stories.svelte b/src/lib/Button/Button.stories.svelte index 0ba2f54..8aada53 100644 --- a/src/lib/Button/Button.stories.svelte +++ b/src/lib/Button/Button.stories.svelte @@ -39,12 +39,14 @@ appearance: 'dark', disabled: false, size: 'default', + variant: 'spray', }, argTypes: { appearance: { control: 'inline-radio', options: ['accent', 'dark', 'light'] }, disabled: { control: 'boolean' }, size: { control: 'inline-radio', options: ['default', 'large'] }, spray: { control: 'boolean' }, + variant: { control: 'inline-radio', options: ['spray', 'underline'] }, }, parameters: { // bits-ui's ButtonRootProps leaks ~400 inherited HTML attributes into @@ -53,6 +55,7 @@ include: [ 'appearance', 'size', + 'variant', 'icon', 'disabled', 'href', @@ -67,6 +70,7 @@ include: [ 'appearance', 'size', + 'variant', 'icon', 'disabled', 'href', @@ -137,6 +141,19 @@
{/snippet} +{#snippet underline(args: Args)} +
+
+ + Default +
+
+ + Hover +
+
+{/snippet} + {#snippet layered(args: Args)} + { + const [defaultButton, hoverButton] = within(canvasElement).getAllByRole('button', { + name: 'About', + }) as [HTMLElement, HTMLElement]; + const defaultSurface = requiredElement(defaultButton, '[data-button-underline]'); + const defaultDots = requiredElement(defaultSurface, '.underline-button-dots'); + const defaultLine = requiredElement(defaultSurface, '.underline-button-line'); + const hoverDots = requiredElement(hoverButton, '.underline-button-dots'); + const hoverLine = requiredElement(hoverButton, '.underline-button-line'); + + await expect(defaultButton).toHaveAttribute('data-button-variant', 'underline'); + await expect(getComputedStyle(defaultButton).backgroundColor).toBe('rgba(0, 0, 0, 0)'); + await expect(getComputedStyle(defaultButton).borderTopWidth).toBe('0px'); + await expect(getComputedStyle(defaultDots).backgroundImage).toContain( + 'repeating-linear-gradient', + ); + await expect(getComputedStyle(defaultDots).opacity).toBe('1'); + await expect(getComputedStyle(defaultLine).transform).not.toBe('none'); + await expect(getComputedStyle(hoverDots).opacity).toBe('0'); + await expect(getComputedStyle(hoverLine).transform).toBe('matrix(1, 0, 0, 1, 0, 0)'); + }} +/> + | undefined; /** Optional alternate visual treatment clipped over the same semantic control. */ @@ -40,6 +44,7 @@ overlay, spray, style, + variant = 'spray', visuals = true, ...restProps }: Props = $props(); @@ -64,6 +69,7 @@ } + data-button-variant={variant} style={buttonStyle} class={[ ':uno: summer-summit-button bg-transparent text-base outline-2 outline-transparent outline-offset--2 inline-flex gap-2 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:cursor-not-allowed focus-visible:not-disabled:outline-offset-3', @@ -78,17 +84,31 @@ {@render icon?.()} {#if visuals} - + {#if variant === 'underline'} + + {:else} + + {/if} {#if overlay} - @@ -104,6 +124,11 @@ letter-spacing: normal; } + :global(.summer-summit-button[data-button-variant='underline']) { + border: 0; + background: transparent; + } + .button-layout { display: inline-flex; gap: 0.5rem; @@ -116,7 +141,7 @@ opacity: 0; } - :global(.summer-summit-button:has([data-button-surface]):disabled) { + :global(.summer-summit-button[data-button-variant='spray']:has([data-button-surface]):disabled) { color: var(--button-disabled-content); background: var(--button-disabled-surface); } diff --git a/src/lib/Button/UnderlineButtonSurface.svelte b/src/lib/Button/UnderlineButtonSurface.svelte new file mode 100644 index 0000000..9a6bfe4 --- /dev/null +++ b/src/lib/Button/UnderlineButtonSurface.svelte @@ -0,0 +1,118 @@ + + + + + {@render children?.()} + {@render icon?.()} + + + + + + diff --git a/src/lib/index.ts b/src/lib/index.ts index 2960ef1..5b7b6ff 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,5 +1,6 @@ // place files you want to import through the `$lib` alias in this folder. export { default as Button } from './Button/Button.svelte'; +export type { ButtonVariant } from './Button/Button.svelte'; export { default as ClipAwareButton } from './Button/ClipAwareButton.svelte'; export type { ClipAwareButtonAppearance, From 9406395e9ac32b33a7e0acdd05e331447ca50709 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sat, 25 Jul 2026 14:18:20 -0700 Subject: [PATCH 111/141] test(landing): fix storybook tests --- .../LandingHero/LandingHero.stories.svelte | 38 +------------------ 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/src/lib/LandingHero/LandingHero.stories.svelte b/src/lib/LandingHero/LandingHero.stories.svelte index c2fa019..6c7463d 100644 --- a/src/lib/LandingHero/LandingHero.stories.svelte +++ b/src/lib/LandingHero/LandingHero.stories.svelte @@ -42,35 +42,6 @@ await expect(body.scrollWidth).toBeLessThanOrEqual(body.clientWidth); } - async function expectDetailAlignment(canvasElement: HTMLElement) { - await settleLayout(canvasElement.ownerDocument); - - const date = canvasElement.querySelector( - '[data-landing-content="base"] [data-landing-date]', - ); - const cta = canvasElement.querySelector( - '[data-clip-aware-visual="base"] [data-button-surface]', - ); - const dateGrid = date?.closest('[data-landing-detail-grid]'); - const ctaGrid = cta?.closest('[data-landing-detail-grid]'); - - await expect(date).not.toBeNull(); - await expect(cta).not.toBeNull(); - await expect(dateGrid).not.toBeNull(); - await expect(ctaGrid).not.toBeNull(); - if (!date || !cta || !dateGrid || !ctaGrid) return; - - const dateBounds = date.getBoundingClientRect(); - const ctaBounds = cta.getBoundingClientRect(); - const dateGridBounds = dateGrid.getBoundingClientRect(); - const ctaGridBounds = ctaGrid.getBoundingClientRect(); - const dateCenter = dateBounds.top + dateBounds.height / 2 - dateGridBounds.top; - const ctaCenter = ctaBounds.top + ctaBounds.height / 2 - ctaGridBounds.top; - - await expect(dateGridBounds.height).toBeCloseTo(ctaGridBounds.height, 1); - await expect(dateCenter).toBeCloseTo(ctaCenter, 1); - } - function bounds(element: Element) { const { left, top, width, height } = element.getBoundingClientRect(); return { left, top, width, height }; @@ -159,7 +130,7 @@ await expect( canvas.getByRole('heading', { level: 1, - name: 'SEPTEMBER 4–6 SUMMER GAME JAM 2026', + name: 'SEPTEMBER 4–6 SUMMER SUMMIT GAME JAM 2026', }), ).toBeInTheDocument(); await expect(canvas.queryByRole('navigation')).toBeNull(); @@ -170,7 +141,7 @@ Array.from(hiddenTitles).every((title) => title.closest('[aria-hidden="true"]') !== null), ).toBe(true); - for (const copy of ['SEPTEMBER 4–6', 'GAME DEV CLUB X IATSU 2026', 'SFU BURNABY CAMPUS']) { + for (const copy of ['GAME DEV CLUB X IATSU 2026', 'SFU BURNABY CAMPUS']) { const matches = canvas.getAllByText(copy, { exact: true }); const hiddenMatches = matches.filter( (match) => match.closest('[aria-hidden="true"]') !== null, @@ -233,7 +204,6 @@ await expectLandingSemantics(canvasElement); await expectDestinationCta(canvasElement); await expectPuddleFillsHero(canvasElement, 'compact'); - await expectDetailAlignment(canvasElement); await expectNoHorizontalOverflow(canvasElement); }} /> @@ -247,7 +217,6 @@ await expectLandingSemantics(canvasElement); await expectDestinationCta(canvasElement); await expectPuddleFillsHero(canvasElement, 'medium'); - await expectDetailAlignment(canvasElement); await expectNoHorizontalOverflow(canvasElement); }} /> @@ -261,7 +230,6 @@ await expectLandingSemantics(canvasElement); await expectDestinationCta(canvasElement); await expectPuddleFillsHero(canvasElement, 'expanded'); - await expectDetailAlignment(canvasElement); await expectNoHorizontalOverflow(canvasElement); }} /> @@ -275,7 +243,6 @@ await expectLandingSemantics(canvasElement); await expectDestinationCta(canvasElement); await expectPuddleFillsHero(canvasElement, 'large'); - await expectDetailAlignment(canvasElement); await expectNoHorizontalOverflow(canvasElement); }} /> @@ -317,7 +284,6 @@ await expectLandingSemantics(canvasElement); await expectDestinationCta(canvasElement); await expectPuddleFillsHero(canvasElement, 'expanded'); - await expectDetailAlignment(canvasElement); await expectNoHorizontalOverflow(canvasElement); }} /> From b3bc6f9d80b93ac852d81164b91ef31fce93db3a Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sat, 25 Jul 2026 15:11:14 -0700 Subject: [PATCH 112/141] refactor(styles): migrate routine CSS to UnoCSS Reuse the configured Wind4 and web-font utilities for static styling. Preserve authored CSS for relational and renderer-specific behavior. --- src/lib/Button/Button.stories.svelte | 20 ++- src/lib/Button/Button.svelte | 58 ++------- src/lib/Button/ButtonSurface.svelte | 63 +++------- src/lib/Button/ClipAwareButton.stories.svelte | 2 - src/lib/Button/ClipAwareButton.svelte | 38 ++---- src/lib/Button/UnderlineButtonSurface.svelte | 67 ++-------- src/lib/ColorPalette/ColorPalette.svelte | 115 +++--------------- src/lib/ColorPalette/HueChromaMinimap.svelte | 45 +++---- .../ErodedCheckerboard.stories.svelte | 11 +- .../ErodedCheckerboard.svelte | 2 +- src/lib/LandingHero/LandingHero.svelte | 42 +------ src/lib/LandingHero/LandingHeroContent.svelte | 29 +---- .../Puddle/stories/PuddleDebug.stories.svelte | 4 +- .../SprayBorder/SprayBorder.stories.svelte | 6 +- src/lib/SprayBorder/SprayBorder.svelte | 36 ++---- 15 files changed, 109 insertions(+), 429 deletions(-) diff --git a/src/lib/Button/Button.stories.svelte b/src/lib/Button/Button.stories.svelte index 8aada53..f9ca1ab 100644 --- a/src/lib/Button/Button.stories.svelte +++ b/src/lib/Button/Button.stories.svelte @@ -93,19 +93,19 @@
- Default + Default
- Hover + Hover
- Active + Active
- Focus Visible
@@ -145,11 +145,11 @@
- Default + Default
- Hover + Hover
{/snippet} @@ -222,12 +222,10 @@ await expect(getComputedStyle(defaultButton).transform).toBe('none'); await expect(getComputedStyle(hoverButton).transform).toBe('none'); - await expect(documentRules(activeButton, '.summer-summit-button:active')).toMatch( - /(?:scale|transform)[^;}]*0?\.98/, + await expect(documentRules(activeButton, ':active')).toMatch(/(?:scale|transform)[^;}]*0?\.98/); + await expect(documentRules(focusButton, ':focus-visible')).toMatch( + /border-radius[^;}]*(?:4px|0\.25rem|--radius-DEFAULT)/, ); - await expect( - documentRules(focusButton, '.summer-summit-button:focus-visible:not(:disabled)'), - ).toMatch(/border-radius[^;}]*(?:4px|0\.25rem)/); }} /> diff --git a/src/lib/Button/Button.svelte b/src/lib/Button/Button.svelte index 1650381..12c7b08 100644 --- a/src/lib/Button/Button.svelte +++ b/src/lib/Button/Button.svelte @@ -4,7 +4,7 @@ import type { ButtonRootProps } from 'bits-ui'; - import { buttonColors, buttonSizes, fonts } from '$lib/tokens'; + import { buttonColors, buttonSizes } from '$lib/tokens'; import type SprayBorder from '../SprayBorder/SprayBorder.svelte'; import ButtonSurface from './ButtonSurface.svelte'; @@ -56,7 +56,6 @@ `--button-disabled-surface:${buttonColors[appearance].disabledSurface}`, `--button-disabled-content:${buttonColors[appearance].disabledContent}`, `--button-focus-ring:${buttonColors.focusRing}`, - `--button-font-family:${fonts.body}`, `--button-height:${sizeValues.height}`, `--button-inline-padding:${sizeValues.inlinePadding}`, ] @@ -72,13 +71,21 @@ data-button-variant={variant} style={buttonStyle} class={[ - ':uno: summer-summit-button bg-transparent text-base outline-2 outline-transparent outline-offset--2 inline-flex gap-2 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center disabled:cursor-not-allowed focus-visible:not-disabled:outline-offset-3', + ':uno: summer-summit-button relative isolate h-[var(--button-height)] bg-transparent px-[var(--button-inline-padding)] text-base font-semibold tracking-normal outline-2 outline-transparent outline-offset--2 inline-flex gap-2 cursor-pointer select-none whitespace-nowrap uppercase transition-all duration-100 transition-ease-out items-center justify-center active:[transform:scale(0.98)] disabled:cursor-not-allowed focus-visible:not-disabled:(rounded outline-offset-3 [outline-color:var(--button-focus-ring)])', + 'font-body', + variant === 'underline' && 'border-0', + variant === 'spray' && + visuals && + 'disabled:[color:var(--button-disabled-content)] disabled:[background:var(--button-disabled-surface)]', className, ]} > {@render children?.()} {@render icon?.()} @@ -112,46 +119,3 @@ {/if} {/if} - - diff --git a/src/lib/Button/ButtonSurface.svelte b/src/lib/Button/ButtonSurface.svelte index c705336..e68d9d6 100644 --- a/src/lib/Button/ButtonSurface.svelte +++ b/src/lib/Button/ButtonSurface.svelte @@ -1,7 +1,7 @@ -
-
{label}
+
+
{label}
{#if swatches.length > 0} -
    +
      {#each swatches as swatch (swatch.key)} -
    1. +
    2. - + {swatch.stop} - {gamutLabels[swatch.gamut]} + {gamutLabels[swatch.gamut]} - + L {swatch.color.l.toFixed(2)} · C {swatch.color.c.toFixed(3)} {#if swatch.color.h !== undefined}· H {swatch.color.h.toFixed(1)}°{/if} @@ -92,48 +100,14 @@ {/each}
    {:else} -

    No colors were provided.

    +

    No colors were provided.

    {/if}
diff --git a/src/lib/ColorPalette/HueChromaMinimap.svelte b/src/lib/ColorPalette/HueChromaMinimap.svelte index 013b36f..3bd7d96 100644 --- a/src/lib/ColorPalette/HueChromaMinimap.svelte +++ b/src/lib/ColorPalette/HueChromaMinimap.svelte @@ -67,8 +67,13 @@ } -
- +
+ {title} @@ -113,29 +118,22 @@ H - diff --git a/src/lib/ErodedCheckerboard/ErodedCheckerboard.stories.svelte b/src/lib/ErodedCheckerboard/ErodedCheckerboard.stories.svelte index 32c4158..781f039 100644 --- a/src/lib/ErodedCheckerboard/ErodedCheckerboard.stories.svelte +++ b/src/lib/ErodedCheckerboard/ErodedCheckerboard.stories.svelte @@ -34,18 +34,9 @@ {#snippet template(args: Args)} -
+
{/snippet} - - diff --git a/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte b/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte index aab58c7..cab63f9 100644 --- a/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte +++ b/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte @@ -65,7 +65,7 @@
diff --git a/src/lib/LandingHero/LandingHeroCtaGroup.svelte b/src/lib/LandingHero/LandingHeroCtaGroup.svelte new file mode 100644 index 0000000..7c2533d --- /dev/null +++ b/src/lib/LandingHero/LandingHeroCtaGroup.svelte @@ -0,0 +1,65 @@ + + +
+ + {props.actionSet.discord.label} + + + + {props.actionSet.tickets.label} + + +
+ + diff --git a/src/lib/LandingHero/LandingHeroLayers.svelte b/src/lib/LandingHero/LandingHeroLayers.svelte index 2bea458..68c0d61 100644 --- a/src/lib/LandingHero/LandingHeroLayers.svelte +++ b/src/lib/LandingHero/LandingHeroLayers.svelte @@ -2,6 +2,7 @@ import type { Snippet } from 'svelte'; import LandingHeroContent from './LandingHeroContent.svelte'; + import type { LandingHeroLayer } from './LandingHeroContent.svelte'; import type { LandingHeroNavItem } from './types'; interface Props { @@ -10,8 +11,7 @@ organizerLabel: string; locationLabel: string; navItems?: readonly LandingHeroNavItem[]; - baseActions?: Snippet | undefined; - inverseActions?: Snippet | undefined; + actions?: Snippet<[LandingHeroLayer]> | undefined; } let { @@ -20,8 +20,7 @@ organizerLabel, locationLabel, navItems = [], - baseActions, - inverseActions, + actions, }: Props = $props(); @@ -33,7 +32,7 @@ {organizerLabel} {locationLabel} {navItems} - cta={baseActions} + {actions} />
diff --git a/src/lib/index.ts b/src/lib/index.ts index ad22f59..f655ed7 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -5,6 +5,7 @@ export { default as ClipAwareButton } from './Button/ClipAwareButton.svelte'; export type { ClipAwareButtonAppearance, ClipAwareButtonControl, + ClipAwareButtonLayer, ClipAwareButtonLayers, ClipAwareButtonProps, ClipAwareButtonSize, From 8819f16038b4f4726ae3f2f4f834b4ec5b1f1fc1 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 26 Jul 2026 18:28:38 -0700 Subject: [PATCH 128/141] style(landing): tighten whitespace around CTA --- src/lib/LandingHero/LandingHeroContent.svelte | 2 +- src/lib/LandingHero/LandingHeroCtaGroup.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/LandingHero/LandingHeroContent.svelte b/src/lib/LandingHero/LandingHeroContent.svelte index 35fe86a..344ff1b 100644 --- a/src/lib/LandingHero/LandingHeroContent.svelte +++ b/src/lib/LandingHero/LandingHeroContent.svelte @@ -78,7 +78,7 @@ {titleLines[1]}
{#if actions} diff --git a/src/lib/LandingHero/LandingHeroCtaGroup.svelte b/src/lib/LandingHero/LandingHeroCtaGroup.svelte index 7c2533d..01e836b 100644 --- a/src/lib/LandingHero/LandingHeroCtaGroup.svelte +++ b/src/lib/LandingHero/LandingHeroCtaGroup.svelte @@ -12,7 +12,7 @@
Date: Sun, 26 Jul 2026 18:29:21 -0700 Subject: [PATCH 129/141] style(landing): don't swap CTA button order on medium breakpoint --- src/lib/LandingHero/LandingHeroCtaGroup.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/LandingHero/LandingHeroCtaGroup.svelte b/src/lib/LandingHero/LandingHeroCtaGroup.svelte index 01e836b..775ff86 100644 --- a/src/lib/LandingHero/LandingHeroCtaGroup.svelte +++ b/src/lib/LandingHero/LandingHeroCtaGroup.svelte @@ -53,7 +53,7 @@ } } - @media (width >= 64rem) { + @media (width >= 48rem) { [data-landing-actions] :global([data-clip-aware-variant='underline']) { order: 1; } From cdfb409b42499e2fa86272405a1a2dff1364d01a Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 26 Jul 2026 18:37:48 -0700 Subject: [PATCH 130/141] test(landing): remove useless SB interaction test --- .../LandingHero/LandingHero.stories.svelte | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/src/lib/LandingHero/LandingHero.stories.svelte b/src/lib/LandingHero/LandingHero.stories.svelte index 7b681c6..5d52259 100644 --- a/src/lib/LandingHero/LandingHero.stories.svelte +++ b/src/lib/LandingHero/LandingHero.stories.svelte @@ -165,29 +165,6 @@ await expectMatchingBounds(baseVisual, inverseVisual); await expectMatchingBounds(baseVisual, control); } - - const actionRow = discord.closest('[data-landing-actions]'); - const discordBounds = discord.getBoundingClientRect(); - const ticketBounds = tickets.getBoundingClientRect(); - const viewportWidth = canvasElement.ownerDocument.documentElement.clientWidth; - const discordCenter = discordBounds.top + discordBounds.height / 2; - const ticketCenter = ticketBounds.top + ticketBounds.height / 2; - - await expect(actionRow).not.toBeNull(); - if (!actionRow) return; - - if (viewportWidth < 768) { - await expect(ticketBounds.top).toBeLessThan(discordBounds.top); - await expect(ticketBounds.bottom).toBeLessThanOrEqual(discordBounds.top); - } else if (viewportWidth < 1024) { - await expect(ticketBounds.left).toBeLessThan(discordBounds.left); - await expect(ticketBounds.right).toBeLessThanOrEqual(discordBounds.left); - await expect(ticketCenter).toBeCloseTo(discordCenter); - } else { - await expect(discordBounds.left).toBeLessThan(ticketBounds.left); - await expect(discordBounds.right).toBeLessThanOrEqual(ticketBounds.left); - await expect(discordCenter).toBeCloseTo(ticketCenter); - } } async function expectNoCta(canvasElement: HTMLElement) { From 44cc7b8d56e4425f3459af7da116500a775d5ba8 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Sun, 26 Jul 2026 20:34:53 -0700 Subject: [PATCH 131/141] build(unocss): only extract classes from fs during `vite serve` --- uno.config.ts | 3 --- vite.config.ts | 11 ++++++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/uno.config.ts b/uno.config.ts index 7530a4e..50b84b8 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -14,9 +14,6 @@ import { presetBrandColors } from './src/lib/theme/presetBrandColors'; import { brandColors, brandColorValues, fonts } from './src/lib/tokens'; export default defineConfig({ - content: { - filesystem: ['src/**/*.{svelte,mdx}'], - }, presets: [ presetWind4({ preflights: { diff --git a/vite.config.ts b/vite.config.ts index 619cbc8..7ec3b9a 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -22,7 +22,16 @@ export default defineConfig((env) => { return { plugins: [ devtoolsJson(), - UnoCSS(), + UnoCSS( + env.command === 'serve' + ? { + // UnoCSS doesn't pick up new classes automatically on HMR for some reason + content: { + filesystem: ['src/**/*.{svelte,mdx}'], + }, + } + : undefined, + ), enhancedImages(), sveltekit({ ...Object.fromEntries(Object.entries(svkitCfg).filter(([key]) => key !== 'kit')), From 4e176e6acaed876d14d6b734590d4d83542ba959 Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 27 Jul 2026 02:36:16 -0700 Subject: [PATCH 132/141] feat: add favicons --- src/lib/assets/favicon-48x48.png | Bin 0 -> 844 bytes src/lib/assets/favicon.ico | Bin 0 -> 2701 bytes src/lib/assets/favicon.svg | 5 ++++- src/routes/+layout.svelte | 6 +++++- 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 src/lib/assets/favicon-48x48.png create mode 100644 src/lib/assets/favicon.ico diff --git a/src/lib/assets/favicon-48x48.png b/src/lib/assets/favicon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..1513392c80ee47f917427b5745c1a1f925f66fca GIT binary patch literal 844 zcmV-S1GD^zP)2N76o!9iYtkfb5d{Hn0DS@wJOgSPN}x}{j(|%xu{;IPHZ7sz6@WXqq&IL0Vi7{6 zC27(uF2@-wacz(1jN_nQ2%mgyYIzwB}K4;GHv|>tm?G}_|@|KDr97w$()8ojb5QhtQLT)I?hrHeco(U!_+y;!r%%uNBRXMzGex2-ixJ!xpCyj>r^p zLY3 ze}MrhME@&Aen4^au4zVlGnP&(t>2mQ{DuCM({Eqzq;$r z6Tu)0$4~&^$v^5qV5uK(h6mNuluV+A2Kl*P!;sYhh@i)$)my=gWfGcJGr1$LiUCle-fvzcEZ`ei99wEk(3^)JWUmCMbLic2#8sv;F$`AuE<+I*6^KYB)B{d8!H`uTvy5!-9E1ve<-EtZR zEs3k}{mPdc9v7Yq=55=?l4NWbK`;2N$*R>zGD#lmY19#)XGIX`QhB3eGA6?(E<+NK zrBuUx3be1>x?v3$ml-|u_zgCerlegrJLQY-@9x1Xq*D&Aw*=R@zHXej>e{~4wEjsx zq*(F$$?4!wi7mXkJj2+N1GPv(%Ngl`tNGvXk;F&ExQb7@8T{=FigzkufcLSmxD6cr%N%sm1uFVq;T;t0g2F5MLBk(#FMn-<+nSY`nBnkkpu4Xe*{*S`{7zOT66b9{&*|Zo*#wa|q%s(iq z!Z5#1lkCXUt{iN(6p(s+`XjUXZnK%hlZQJQ*C;l~fzQr5_!m=2 zwXRXiFP5X0nTb1mxef>0h=g5NzBR2%Pa>9F^136+03BwJLF>alWJ`688SyxIL8XrMU+9{}I`APUGv97Yq9s#RQFt9r-DLS)U<5#>-NB0l;M=G!bnIDb#d|uN?pJ z5f9bQ+mOz;F&2<}D*TudBh!8F)}8UdG*ZsOu>9J~fHBp=2&k_dc-3QIv| zqc9R}^Jt2{Dx@04eN~OSLWqW{iQR?xe`Ft@$ETeWgt1Oh<}2I7o`SX84dnW}NBXDR zx|jP;s11oIq-^b)%}N3PCDm{a%F7CcsfR^p!{)6cfm+m%QzB7u)Sp7kdAN42vjF}w z0letD=)>6q64{As1J^mCg*TvF(`u1f`cy385Txh;FW5LSE-HXDa`9CZZ1Y&FkgZnO zOIsG&!U^GN*cB7?MwCg#Ld~S6Q4b)MI)#I z@6Cb9DYI`Lw5I)bI4rHIZ^2xUc6u~*Xsawi8l3s~x%ggNQ2_s3#wE}V=gg9u>P}~x z-dR}jbFIi8T1(w#9~)Qy&R<^J+4Vg%TWfI_ge_^2U}`YdwNDd&{l)-30h=-=8mm*u z7JLJ`u&Gs)hg?v%*E8j*g(q#L?6$dHd%mE}q(SMkS-lxjG?UBzMO)im!;yy1Lip0? yHNx+#?Gk%ubRIDBa5_-!L5Cd~XlO{z&^>gB<)EBV!KM&h5ZmZGT4?sKeEtIm8lqzW literal 0 HcmV?d00001 diff --git a/src/lib/assets/favicon.svg b/src/lib/assets/favicon.svg index cc5dc66..3003dd2 100644 --- a/src/lib/assets/favicon.svg +++ b/src/lib/assets/favicon.svg @@ -1 +1,4 @@ -svelte-logo \ No newline at end of file + + + + diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 80859f1..2fdb647 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,7 +1,9 @@ + + + {title} + + + + + + + diff --git a/src/lib/assets/og-image.png b/src/lib/assets/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..ff713834544429cd0af794ce8ecec3cf5d0250ea GIT binary patch literal 485787 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%0AwS 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

  • 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 - import { LandingHero } from '$lib'; + import { LandingHero, Head } from '$lib'; - - Summer Summit Game Jam 2026 - - + Date: Mon, 27 Jul 2026 03:20:42 -0700 Subject: [PATCH 134/141] feat(landing): optimize event mark image --- src/lib/LandingHero/LandingHeroContent.svelte | 4 ++-- tsconfig.app.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/LandingHero/LandingHeroContent.svelte b/src/lib/LandingHero/LandingHeroContent.svelte index 344ff1b..5ea7ab1 100644 --- a/src/lib/LandingHero/LandingHeroContent.svelte +++ b/src/lib/LandingHero/LandingHeroContent.svelte @@ -17,7 +17,7 @@ -
    - -
    - +{#if layer === 'base' || layer === 'both'} +
    + +
    +{/if} +{#if layer === 'inverse' || layer === 'both'} + +{/if} diff --git a/src/lib/Puddle/Puddle.ssr.test.ts b/src/lib/Puddle/Puddle.ssr.test.ts new file mode 100644 index 0000000..54dd066 --- /dev/null +++ b/src/lib/Puddle/Puddle.ssr.test.ts @@ -0,0 +1,43 @@ +import { render } from 'svelte/server'; + +import { expect, test } from 'vitest'; + +import { PUDDLE_SNAPSHOTS } from './generated/puddleSnapshots'; +import Puddle from './Puddle.svelte'; +import PuddleClipFixture from './tests/PuddleClipFixture.svelte'; + +test('SSR contains the generated no-JS silhouette in centered CSS-pixel space', () => { + const { body } = render(Puddle, { props: { animated: false, snapshot: 'compact' } }); + + expect(body).toContain('data-puddle-renderer'); + expect(body).toContain('data-puddle-shape'); + expect(body).toContain(`d="${PUDDLE_SNAPSHOTS.compact.path}"`); + expect(body).toContain(PUDDLE_SNAPSHOTS.compact.clip); + expect(body).toMatch( + /]*style="transform: translate\(50%, 50%\) translate\(/, + ); +}); + +test('SSR wires clipped content to the same local SVG shape as the puddle fill', () => { + const { body } = render(PuddleClipFixture); + + expect(body).toContain('data-puddle-clipped-foreign-object'); + expect(body).toContain('data-puddle-clipped-probe'); + expect(body).toMatch(//); + expect(body).toMatch(/]*clip-path="url\("#[^"]+-puddle-clip"\)"/); +}); + +test('SSR includes CSS-breakpoint snapshot and clip variants for the landing puddle', () => { + const { body } = render(Puddle, { + props: { animated: false, snapshot: 'compact', responsiveSnapshots: true }, + }); + + for (const name of ['compact', 'medium', 'expanded', 'large']) { + expect(body).toContain(`data-puddle-static-profile="${name}"`); + const snapshot = PUDDLE_SNAPSHOTS[name as keyof typeof PUDDLE_SNAPSHOTS]; + expect(body).toContain(snapshot.path); + expect(body).toContain(snapshot.clip); + } + expect(body).toContain('--puddle-clip-compact:'); + expect(body).toContain('--puddle-clip-large:'); +}); diff --git a/src/lib/Puddle/Puddle.svelte b/src/lib/Puddle/Puddle.svelte index 370834b..58bddfd 100644 --- a/src/lib/Puddle/Puddle.svelte +++ b/src/lib/Puddle/Puddle.svelte @@ -1,7 +1,10 @@ + +{#snippet clippedContent()} +
    +{/snippet} + + +
    +
    diff --git a/src/lib/Puddle/tests/svg.ts b/src/lib/Puddle/tests/svg.ts index f48ecf2..8f73c2f 100644 --- a/src/lib/Puddle/tests/svg.ts +++ b/src/lib/Puddle/tests/svg.ts @@ -16,21 +16,27 @@ interface PuddleRun { function runsOf(path: SVGPathElement): PuddleRun[] { const runs: PuddleRun[] = []; const commands = path.getAttribute('d') ?? ''; - const pattern = /M(\d+) (\d+)h(\d+)v1h-(\d+)z/g; + const pattern = /M([\d.]+) ([\d.]+)h([\d.]+)v([\d.]+)h-([\d.]+)z/g; + const cellSize = Number(path.ownerSVGElement?.dataset['puddleCellSize'] ?? 1); for (const match of commands.matchAll(pattern)) { - const x = Number(match[1]); - const y = Number(match[2]); - const width = Number(match[3]); - if (width !== Number(match[4])) throw new Error('invalid puddle run'); + const x = Number(match[1]) / cellSize; + const y = Number(match[2]) / cellSize; + const width = Number(match[3]) / cellSize; + if (Number(match[4]) !== cellSize || Number(match[5]) / cellSize !== width) { + throw new Error('invalid puddle run'); + } runs.push({ x, y, width }); } return runs; } function gridSize(path: SVGPathElement): { nx: number; ny: number } { - const viewBox = path.ownerSVGElement?.viewBox.baseVal; - if (!viewBox) throw new Error('puddle path is not inside an SVG'); - return { nx: viewBox.width, ny: viewBox.height }; + const renderer = path.ownerSVGElement; + if (!renderer) throw new Error('puddle path is not inside an SVG'); + return { + nx: Number(renderer.dataset['puddleCols']), + ny: Number(renderer.dataset['puddleRows']), + }; } export function wetAt(path: SVGPathElement, fx: number, fy: number): boolean { diff --git a/src/lib/Puddle/worker/core.test.ts b/src/lib/Puddle/worker/core.test.ts new file mode 100644 index 0000000..cd96da1 --- /dev/null +++ b/src/lib/Puddle/worker/core.test.ts @@ -0,0 +1,78 @@ +import { expect, test } from 'vitest'; + +import { PUDDLE_DEFAULTS } from '../config'; +import { encodePuddleSnapshot } from '../snapshot/binary'; +import { snapshotCompatibilityHash } from '../snapshot/compatibility'; +import { initializePuddleWorkerState } from './core'; +import type { PuddleWorkerInitMessage } from './protocol'; + +const simulation = { + seed: PUDDLE_DEFAULTS.seed, + level: PUDDLE_DEFAULTS.level, + noiseAmp: PUDDLE_DEFAULTS.noiseAmp, + bowlWidth: PUDDLE_DEFAULTS.bowlWidth, + bowlHeight: PUDDLE_DEFAULTS.bowlHeight, + bowlAmp: PUDDLE_DEFAULTS.bowlAmp, + bowlRim: PUDDLE_DEFAULTS.bowlRim, + integrator: PUDDLE_DEFAULTS.integrator, + momentumSmoothing: PUDDLE_DEFAULTS.momentumSmoothing, + momentumRetention: PUDDLE_DEFAULTS.momentumRetention, + timeScale: PUDDLE_DEFAULTS.timeScale, + baseSubstep: PUDDLE_DEFAULTS.baseSubstep, + cflSafety: PUDDLE_DEFAULTS.cflSafety, + minWaveDepth: PUDDLE_DEFAULTS.minWaveDepth, + maxSubsteps: PUDDLE_DEFAULTS.maxSubsteps, + gravityDrift: PUDDLE_DEFAULTS.gravityDrift, + driftAmp: PUDDLE_DEFAULTS.driftAmp, + driftRateHz: PUDDLE_DEFAULTS.driftRateHz, + rainInterval: PUDDLE_DEFAULTS.rainInterval, + rainAmount: PUDDLE_DEFAULTS.rainAmount, + rainRadius: PUDDLE_DEFAULTS.rainRadius, +}; + +test('worker core accepts a compatible snapshot and remaps it to the measured grid', async () => { + const compatibilityHash = snapshotCompatibilityHash({ + cellSize: PUDDLE_DEFAULTS.cellSize, + settleSubsteps: PUDDLE_DEFAULTS.settleSubsteps, + simulation, + }); + const buffer = encodePuddleSnapshot({ + nx: 8, + ny: 8, + cellSize: PUDDLE_DEFAULTS.cellSize, + guardBand: 1, + seed: PUDDLE_DEFAULTS.seed, + compatibilityHash, + totalMass: 0, + depth: new Float32Array(64), + }); + const message: PuddleWorkerInitMessage = { + type: 'init', + generation: 1, + width: 280, + height: 196, + geometry: { cellSize: PUDDLE_DEFAULTS.cellSize, maxCells: 200 }, + simulation, + settleSubsteps: PUDDLE_DEFAULTS.settleSubsteps, + threshold: PUDDLE_DEFAULTS.threshold, + animated: false, + snapshotUrl: '/puddle/default.bin', + compatibilityHash, + cursorTilt: PUDDLE_DEFAULTS.cursorTilt, + cursorEase: PUDDLE_DEFAULTS.cursorEase, + deviceEase: PUDDLE_DEFAULTS.deviceEase, + }; + + const state = await initializePuddleWorkerState(message, () => Promise.resolve(buffer)); + + expect(state.snapshotLoaded).toBe(true); + expect(state.nx).toBe(12); + expect(state.ny).toBe(9); + expect(state.cellSize).toBe(PUDDLE_DEFAULTS.cellSize); + expect(state.massCap).toBe(0); + expect(state.path()).toBe(''); + expect(state.path()).toBeNull(); + + state.sim.splat(0, 0, 1, 0.01); + expect(state.path()).toBeNull(); +}); diff --git a/src/lib/Puddle/worker/core.ts b/src/lib/Puddle/worker/core.ts new file mode 100644 index 0000000..b428b37 --- /dev/null +++ b/src/lib/Puddle/worker/core.ts @@ -0,0 +1,71 @@ +import { resolvePuddleGeometry } from '../geometry'; +import { puddlePath } from '../render/puddleRenderer'; +import { createPuddleSimulation } from '../runtime/puddleSimulation'; +import { assertDryGuardBand, decodePuddleSnapshot, remapCenteredDepth } from '../snapshot/binary'; +import type { PuddleWorkerInitMessage } from './protocol'; + +const HIDDEN_RELAXATION_SUBSTEPS = 6; + +function createDepthPath(nx: number, ny: number, cellSize: number, threshold: number) { + const mask = new Uint8Array(nx * ny); + let initialized = false; + let path = ''; + return (height: ArrayLike): string | null => { + let changed = !initialized; + for (let index = 0; index < mask.length; index++) { + const column = index % nx; + const row = Math.floor(index / nx); + const border = column === 0 || column === nx - 1 || row === 0 || row === ny - 1; + const wet = !border && (height[index] ?? 0) > threshold ? 1 : 0; + if (mask[index] !== wet) { + mask[index] = wet; + changed = true; + } + } + initialized = true; + if (!changed) return null; + path = puddlePath(mask, nx, ny, cellSize); + return path; + }; +} + +export async function initializePuddleWorkerState( + message: PuddleWorkerInitMessage, + loadSnapshot: (url: string) => Promise, +) { + const geometry = resolvePuddleGeometry(message.width, message.height, message.geometry); + if (!geometry.ready) throw new Error('Puddle host has no measurable area'); + const sim = createPuddleSimulation(geometry, message.simulation); + let snapshotLoaded = false; + try { + const snapshot = decodePuddleSnapshot(await loadSnapshot(message.snapshotUrl)); + assertDryGuardBand(snapshot); + if ( + snapshot.compatibilityHash !== message.compatibilityHash || + snapshot.seed !== message.simulation.seed + ) { + throw new Error('Puddle snapshot is incompatible with the current options'); + } + sim.loadHeight(remapCenteredDepth(snapshot, geometry.cols, geometry.rows, geometry.cellSize)); + sim.settle(HIDDEN_RELAXATION_SUBSTEPS); + snapshotLoaded = true; + } catch { + sim.settle(message.settleSubsteps); + } + const massCap = sim.totalMass(); + const renderPath = createDepthPath( + geometry.cols, + geometry.rows, + geometry.cellSize, + message.threshold, + ); + return { + sim, + nx: geometry.cols, + ny: geometry.rows, + cellSize: geometry.cellSize, + massCap, + snapshotLoaded, + path: () => renderPath(sim.height), + }; +} diff --git a/src/lib/Puddle/worker/expansionDiagnostic.test.ts b/src/lib/Puddle/worker/expansionDiagnostic.test.ts new file mode 100644 index 0000000..1e0bb2a --- /dev/null +++ b/src/lib/Puddle/worker/expansionDiagnostic.test.ts @@ -0,0 +1,107 @@ +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; + +import { describe, expect, test } from 'vitest'; + +import { PUDDLE_DEFAULTS } from '../config'; +import { createPuddleSimulation, type PuddleSimulationOptions } from '../runtime/puddleSimulation'; +import { decodePuddleSnapshot, remapCenteredDepth } from '../snapshot/binary'; + +const COLS = 65; +const ROWS = 38; +const FRAME_SECONDS = 1 / 60; + +const simulation: PuddleSimulationOptions = { + seed: PUDDLE_DEFAULTS.seed, + level: PUDDLE_DEFAULTS.level, + noiseAmp: PUDDLE_DEFAULTS.noiseAmp, + bowlWidth: PUDDLE_DEFAULTS.bowlWidth, + bowlHeight: PUDDLE_DEFAULTS.bowlHeight, + bowlAmp: PUDDLE_DEFAULTS.bowlAmp, + bowlRim: PUDDLE_DEFAULTS.bowlRim, + integrator: PUDDLE_DEFAULTS.integrator, + momentumSmoothing: PUDDLE_DEFAULTS.momentumSmoothing, + momentumRetention: PUDDLE_DEFAULTS.momentumRetention, + timeScale: PUDDLE_DEFAULTS.timeScale, + baseSubstep: PUDDLE_DEFAULTS.baseSubstep, + cflSafety: PUDDLE_DEFAULTS.cflSafety, + minWaveDepth: PUDDLE_DEFAULTS.minWaveDepth, + maxSubsteps: PUDDLE_DEFAULTS.maxSubsteps, + gravityDrift: PUDDLE_DEFAULTS.gravityDrift, + driftAmp: PUDDLE_DEFAULTS.driftAmp, + driftRateHz: PUDDLE_DEFAULTS.driftRateHz, + rainInterval: PUDDLE_DEFAULTS.rainInterval, + rainAmount: PUDDLE_DEFAULTS.rainAmount, + rainRadius: PUDDLE_DEFAULTS.rainRadius, +}; + +function wetRowSpan(height: ArrayLike): number { + let first = ROWS; + let last = -1; + for (let y = 0; y < ROWS; y++) { + for (let x = 0; x < COLS; x++) { + if ((height[y * COLS + x] ?? 0) <= PUDDLE_DEFAULTS.threshold) continue; + first = Math.min(first, y); + last = Math.max(last, y); + break; + } + } + return last >= first ? last - first + 1 : 0; +} + +async function loadInitialDepth(): Promise { + const contents = await readFile(path.resolve('static/puddle/large.bin')); + const buffer = contents.buffer.slice( + contents.byteOffset, + contents.byteOffset + contents.byteLength, + ); + return remapCenteredDepth(decodePuddleSnapshot(buffer), COLS, ROWS, PUDDLE_DEFAULTS.cellSize); +} + +function spans( + initialDepth: Float32Array, + overrides: Partial, + tiltY = 0, +): readonly [number, number, number] { + const sim = createPuddleSimulation( + { + width: COLS * PUDDLE_DEFAULTS.cellSize, + height: ROWS * PUDDLE_DEFAULTS.cellSize, + cols: COLS, + rows: ROWS, + cellSize: PUDDLE_DEFAULTS.cellSize, + }, + { ...simulation, ...overrides }, + ); + sim.loadHeight(initialDepth); + sim.settle(6); + sim.setTiltOffset(0, tiltY); + const massCap = sim.totalMass(); + const result: number[] = [wetRowSpan(sim.height)]; + for (let frame = 1; frame <= 60; frame++) { + const stats = sim.advance(FRAME_SECONDS); + sim.clampMass(massCap, stats); + if (frame === 24 || frame === 60) result.push(wetRowSpan(sim.height)); + } + return result as unknown as readonly [number, number, number]; +} + +describe('rapid vertical expansion force diagnostic', () => { + test('isolates rain as the expansion source over the same simulated interval', async () => { + const initialDepth = await loadInitialDepth(); + const disabled = spans(initialDepth, { gravityDrift: false, rainAmount: 0 }); + const driftOnly = spans(initialDepth, { rainAmount: 0 }); + const rainOnly = spans(initialDepth, { gravityDrift: false }); + const defaults = spans(initialDepth, {}); + const tiltOnly = spans( + initialDepth, + { gravityDrift: false, rainAmount: 0 }, + -PUDDLE_DEFAULTS.cursorTilt, + ); + + expect(driftOnly[2] - disabled[2]).toBeLessThanOrEqual(1); + expect(rainOnly[2] - disabled[2]).toBeGreaterThanOrEqual(5); + expect(defaults[2] - disabled[2]).toBeGreaterThanOrEqual(5); + expect(tiltOnly[2] - disabled[2]).toBeLessThanOrEqual(2); + }); +}); diff --git a/src/lib/Puddle/worker/protocol.ts b/src/lib/Puddle/worker/protocol.ts new file mode 100644 index 0000000..72b221a --- /dev/null +++ b/src/lib/Puddle/worker/protocol.ts @@ -0,0 +1,43 @@ +import type { PuddleGeometryOptions } from '../geometry'; +import type { PuddleSimulationOptions } from '../runtime/puddleSimulation'; + +export interface PuddleWorkerInitMessage { + readonly type: 'init'; + readonly generation: number; + readonly width: number; + readonly height: number; + readonly geometry: PuddleGeometryOptions; + readonly simulation: PuddleSimulationOptions; + readonly settleSubsteps: number; + readonly threshold: number; + readonly animated: boolean; + readonly snapshotUrl: string; + readonly compatibilityHash: number; + readonly cursorTilt: number; + readonly cursorEase: number; + readonly deviceEase: number; +} + +export type PuddleWorkerInput = + | PuddleWorkerInitMessage + | { readonly type: 'active'; readonly active: boolean } + | { readonly type: 'pointer'; readonly x: number; readonly y: number } + | { readonly type: 'clear-pointer' } + | { readonly type: 'device-tilt'; readonly x: number; readonly y: number } + | { readonly type: 'frame-consumed' }; + +export type PuddleWorkerOutput = + | { + readonly type: 'ready'; + readonly generation: number; + readonly nx: number; + readonly ny: number; + readonly cellSize: number; + readonly path: string; + } + | { + readonly type: 'path'; + readonly generation: number; + readonly path: string; + } + | { readonly type: 'error'; readonly generation: number; readonly message: string }; diff --git a/src/lib/Puddle/worker/puddle.worker.ts b/src/lib/Puddle/worker/puddle.worker.ts new file mode 100644 index 0000000..0dea485 --- /dev/null +++ b/src/lib/Puddle/worker/puddle.worker.ts @@ -0,0 +1,130 @@ +import { initializePuddleWorkerState } from './core'; +import type { PuddleWorkerInitMessage, PuddleWorkerInput, PuddleWorkerOutput } from './protocol'; + +type WorkerState = Awaited>; + +let generation = 0; +let state: WorkerState | null = null; +let initialized: PuddleWorkerInitMessage | null = null; +let active = false; +let awaitingFrameConsumption = false; +let pointer: { x: number; y: number } | null = null; +let deviceTilt = { x: 0, y: 0 }; +let smoothedPointer = { x: 0, y: 0 }; +let smoothedDevice = { x: 0, y: 0 }; +let lastTime = 0; +let frameHandle = 0; + +function post(message: PuddleWorkerOutput): void { + self.postMessage(message); +} + +function cancelLoop(): void { + if (frameHandle !== 0) cancelAnimationFrame(frameHandle); + frameHandle = 0; + lastTime = 0; +} + +function scheduleLoop(): void { + if (!active || !initialized?.animated || !state || frameHandle !== 0) return; + frameHandle = requestAnimationFrame(loop); +} + +function loop(time: number): void { + frameHandle = 0; + if (!active || !initialized?.animated || !state) return; + const dt = lastTime > 0 ? Math.min(0.1, (time - lastTime) / 1000) : 0; + lastTime = time; + const cursorEase = + Number.isFinite(initialized.cursorEase) && initialized.cursorEase > 0 + ? initialized.cursorEase + : 0.05; + const blend = 1 - Math.exp(-dt / cursorEase); + smoothedPointer.x += ((pointer?.x ?? 0) - smoothedPointer.x) * blend; + smoothedPointer.y += ((pointer?.y ?? 0) - smoothedPointer.y) * blend; + const deviceEase = + Number.isFinite(initialized.deviceEase) && initialized.deviceEase > 0 + ? initialized.deviceEase + : 0.05; + const deviceBlend = 1 - Math.exp(-dt / deviceEase); + smoothedDevice.x += (deviceTilt.x - smoothedDevice.x) * deviceBlend; + smoothedDevice.y += (deviceTilt.y - smoothedDevice.y) * deviceBlend; + state.sim.setTiltOffset( + -initialized.cursorTilt * smoothedPointer.x + smoothedDevice.x, + -initialized.cursorTilt * smoothedPointer.y + smoothedDevice.y, + ); + const stats = state.sim.advance(dt); + state.sim.clampMass(state.massCap, stats); + if (!awaitingFrameConsumption) { + const path = state.path(); + if (path !== null) { + post({ type: 'path', generation, path }); + awaitingFrameConsumption = true; + } + } + scheduleLoop(); +} + +async function initialize(message: PuddleWorkerInitMessage): Promise { + cancelLoop(); + generation = message.generation; + initialized = message; + state = null; + awaitingFrameConsumption = false; + pointer = null; + smoothedPointer = { x: 0, y: 0 }; + smoothedDevice = { x: 0, y: 0 }; + try { + const next = await initializePuddleWorkerState(message, async (url) => { + const response = await fetch(url); + if (!response.ok) throw new Error(`Snapshot request failed (${response.status.toString()})`); + return response.arrayBuffer(); + }); + if (generation !== message.generation) return; + state = next; + const path = next.path(); + if (path === null) throw new Error('Puddle worker produced no initial path'); + post({ + type: 'ready', + generation, + nx: next.nx, + ny: next.ny, + cellSize: next.cellSize, + path, + }); + awaitingFrameConsumption = true; + scheduleLoop(); + } catch (error) { + post({ + type: 'error', + generation, + message: error instanceof Error ? error.message : 'Puddle worker failed', + }); + } +} + +self.onmessage = (event: MessageEvent): void => { + const message = event.data; + switch (message.type) { + case 'init': + void initialize(message); + break; + case 'active': + active = message.active; + if (active) scheduleLoop(); + else cancelLoop(); + break; + case 'pointer': + pointer = { x: message.x, y: message.y }; + break; + case 'clear-pointer': + pointer = null; + break; + case 'device-tilt': + deviceTilt = { x: message.x, y: message.y }; + break; + case 'frame-consumed': + awaitingFrameConsumption = false; + break; + } +}; From f4274550268bf46630805008f6c98c5b9158451e Mon Sep 17 00:00:00 2001 From: fire332 <96039230+fire332@users.noreply.github.com> Date: Mon, 27 Jul 2026 12:54:08 -0700 Subject: [PATCH 137/141] perf(checkerboard): don't supersample --- src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte | 2 +- src/lib/ErodedCheckerboard/erodedCheckerboardRenderer.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte b/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte index cab63f9..1a74991 100644 --- a/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte +++ b/src/lib/ErodedCheckerboard/ErodedCheckerboard.svelte @@ -65,7 +65,7 @@
  • {/if} - {#if clippedChildren} - - {/if}

    h!8s&>!Nxy(NIO+Su_4NS&L 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 literal 0 HcmV?d00001 diff --git a/src/lib/assets/fonts/body/Light-300.woff2 b/src/lib/assets/fonts/body/Light-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ca8a3bbe65e7f36d366c5d31e577e82603f5cc82 GIT binary patch literal 87868 zcmV)5K*_&%Pew9NR8&s@0arW#4gdfE0|s0G0aoS!0{{R300000000000000000000 z0000Dg^5cVgd7`%qXZnHSO#DK=qv#?0we>fAOr>lgH#6~7bF;;0$XSWvj_hF$8hh0 zGIdgJcGmwX)6@VzaXU|NsC0|NsC0{~nef;cxb4lHBa<>?ROM_=WaMeQB`!&OOebSZ zMIe~XNsspXSls0va+lgrQX617W$sq@&1PK|#LUWIq```?BCH52!bP%{7MTqM5Af*v zt|=Tg{;{gsTNo^wHHg`6�JZL7>Svg-7bik-AuQ{n#MWj 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 z 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