From 995d1fda2fdd7624906def4bad79345997edcafb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 18:23:22 +0000 Subject: [PATCH 1/5] fix(deps): update pnpm/action-setup action to v6 --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5e0b4de..da8426b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: show-progress: false - name: Install pnpm - uses: pnpm/action-setup@v5 + uses: pnpm/action-setup@v6 id: pnpm-install - name: Install Node.js @@ -51,7 +51,7 @@ jobs: show-progress: false - name: Install pnpm - uses: pnpm/action-setup@v5 + uses: pnpm/action-setup@v6 id: pnpm-install - name: Install Node.js From 4e01c7f980c08a870113ecd8ceef75f98ec5e524 Mon Sep 17 00:00:00 2001 From: Alex Gravely Date: Mon, 27 Apr 2026 14:27:47 -0400 Subject: [PATCH 2/5] Update compat date --- wrangler.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wrangler.jsonc b/wrangler.jsonc index e025b3b..d84213c 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -1,7 +1,7 @@ { "$schema": "./node_modules/wrangler/config-schema.json", "name": "ygotools", - "compatibility_date": "2026-02-10", + "compatibility_date": "2026-04-27", "compatibility_flags": [ "nodejs_compat" ], From 68aa19dd0ebf72f9a0ed7ef17f54782a78e9e4ac Mon Sep 17 00:00:00 2001 From: Alex Gravely Date: Sat, 16 May 2026 01:41:35 -0400 Subject: [PATCH 3/5] pnpm/node update --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index cf20164..d536560 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,10 @@ "version": "0.4.2", "repository": "https://github.com/AntiTcb/ygo.tools", "private": true, - "packageManager": "pnpm@10.33.0", + "packageManager": "pnpm@11.1.2", "engines": { - "node": ">=22.19.0", - "pnpm": ">=10.33.0" + "node": ">=24.0.0", + "pnpm": ">=11.1.2" }, "scripts": { "dev": "vite dev", From 929e7a0a5a2a2ae8795308c01a904c1fff424c8f Mon Sep 17 00:00:00 2001 From: Alex Gravely Date: Sat, 16 May 2026 03:17:11 -0400 Subject: [PATCH 4/5] Updates --- .env.example | 2 +- package.json | 59 +- pnpm-lock.yaml | 2983 ++++++++++----------- pnpm-workspace.yaml | 5 + src/app.css | 5 +- src/hooks.server.ts | 14 +- src/lib/components/Footer.svelte | 28 +- src/lib/components/Sidebar.svelte | 36 +- src/lib/rpc/searchSupabaseCards.remote.ts | 12 +- src/routes/+layout.svelte | 20 +- src/routes/database/+page.server.ts | 11 +- src/routes/database/+page.svelte | 132 +- 12 files changed, 1521 insertions(+), 1786 deletions(-) create mode 100644 pnpm-workspace.yaml diff --git a/.env.example b/.env.example index 1a868f2..2158a1e 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,3 @@ PUBLIC_SUPABASE_URL= PUBLIC_SUPABASE_ANON_KEY= -SUPABASE_SERVICE_ROLE= +SUPABASE_SERVICE_KEY= diff --git a/package.json b/package.json index d536560..1d2259a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ygo.tools", - "version": "0.4.2", + "version": "0.5.0", "repository": "https://github.com/AntiTcb/ygo.tools", "private": true, "packageManager": "pnpm@11.1.2", @@ -30,51 +30,54 @@ "@iconify-json/fa-solid": "^1.2.2", "@iconify-json/fa6-regular": "^1.2.4", "@iconify-json/heroicons": "^1.2.3", - "@iconify-json/lucide": "^1.2.99", + "@iconify-json/lucide": "^1.2.107", "@iconify-json/mdi": "^1.2.3", - "@iconify-json/vscode-icons": "^1.2.45", + "@iconify-json/vscode-icons": "^1.2.49", "@macfja/svelte-persistent-store": "^2.4.2", - "@skeletonlabs/skeleton": "4.13.0", - "@skeletonlabs/skeleton-svelte": "4.13.0", - "@supabase/ssr": "^0.9.0", - "@supabase/supabase-js": "^2.100.0", + "@skeletonlabs/skeleton": "4.15.2", + "@skeletonlabs/skeleton-svelte": "4.15.2", + "@supabase/ssr": "^0.10.3", + "@supabase/supabase-js": "^2.105.4", "@sveltejs/adapter-auto": "^7.0.1", "@sveltejs/adapter-cloudflare": "^7.2.8", "@sveltejs/enhanced-img": "^0.10.4", - "@sveltejs/kit": "^2.55.0", - "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@sveltejs/kit": "^2.60.1", + "@sveltejs/vite-plugin-svelte": "^7.1.2", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.19", - "@tailwindcss/vite": "^4.2.2", + "@tailwindcss/vite": "^4.3.0", "@types/eslint": "^9.6.1", - "@types/node": "^25.2.3", + "@types/node": "^25.8.0", "@types/nprogress": "^0.2.3", - "autoprefixer": "^10.4.27", - "eslint": "^10.1.0", + "autoprefixer": "^10.5.0", + "cross-env": "^10.1.0", + "dotenv-cli": "^11.0.0", + "eslint": "^10.3.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-svelte": "^3.16.0", - "globals": "^17.4.0", + "eslint-plugin-svelte": "^3.17.1", + "globals": "^17.6.0", "nprogress": "^0.2.0", - "prettier": "^3.8.1", - "prettier-plugin-svelte": "^3.5.1", - "prettier-plugin-tailwindcss": "^0.7.2", + "prettier": "^3.8.3", + "prettier-plugin-svelte": "^3.5.2", + "prettier-plugin-tailwindcss": "^0.8.0", "runed": "^0.37.1", "sk-seo": "^0.5.4", - "super-sitemap": "^1.0.7", - "svelte": "^5.55.0", - "svelte-check": "^4.4.5", + "supabase": "^2.98.2", + "super-sitemap": "^1.0.12", + "svelte": "^5.55.7", + "svelte-check": "^4.4.8", "svelte-search": "^2.1.2", - "svelte-sonner": "^1.1.0", - "tailwindcss": "^4.2.2", + "svelte-sonner": "^1.1.1", + "tailwindcss": "^4.3.0", "tslib": "^2.8.1", "typescript": "^6.0.3", - "typescript-eslint": "^8.57.2", + "typescript-eslint": "^8.59.3", "unplugin-icons": "^23.0.1", - "vite": "^8.0.3", + "vite": "^8.0.13", "vite-plugin-mkcert": "^2.0.0", - "vitest": "^4.1.1", - "wrangler": "^4.77.0", - "zod": "^4.3.6" + "vitest": "^4.1.6", + "wrangler": "^4.92.0", + "zod": "^4.4.3" }, "type": "module" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f8a3b1a..120176b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,113 +21,116 @@ importers: specifier: ^1.2.3 version: 1.2.3 '@iconify-json/lucide': - specifier: ^1.2.99 - version: 1.2.99 + specifier: ^1.2.107 + version: 1.2.107 '@iconify-json/mdi': specifier: ^1.2.3 version: 1.2.3 '@iconify-json/vscode-icons': - specifier: ^1.2.45 - version: 1.2.45 + specifier: ^1.2.49 + version: 1.2.49 '@macfja/svelte-persistent-store': specifier: ^2.4.2 - version: 2.4.2(svelte@5.55.0) + version: 2.4.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)) '@skeletonlabs/skeleton': - specifier: 4.13.0 - version: 4.13.0(tailwindcss@4.2.2) + specifier: 4.15.2 + version: 4.15.2(tailwindcss@4.3.0) '@skeletonlabs/skeleton-svelte': - specifier: 4.13.0 - version: 4.13.0(svelte@5.55.0) + specifier: 4.15.2 + version: 4.15.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)) '@supabase/ssr': - specifier: ^0.9.0 - version: 0.9.0(@supabase/supabase-js@2.100.0) + specifier: ^0.10.3 + version: 0.10.3(@supabase/supabase-js@2.105.4) '@supabase/supabase-js': - specifier: ^2.100.0 - version: 2.100.0 + specifier: ^2.105.4 + version: 2.105.4 '@sveltejs/adapter-auto': specifier: ^7.0.1 - version: 7.0.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1))) + version: 7.0.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0))) '@sveltejs/adapter-cloudflare': specifier: ^7.2.8 - version: 7.2.8(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(wrangler@4.77.0) + version: 7.2.8(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(wrangler@4.92.0(@cloudflare/workers-types@4.20260515.1)) '@sveltejs/enhanced-img': specifier: ^0.10.4 - version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(rollup@4.57.1)(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + version: 0.10.4(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) '@sveltejs/kit': - specifier: ^2.55.0 - version: 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + specifier: ^2.60.1 + version: 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) '@sveltejs/vite-plugin-svelte': - specifier: ^7.0.0 - version: 7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + specifier: ^7.1.2 + version: 7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) '@tailwindcss/forms': specifier: ^0.5.11 - version: 0.5.11(tailwindcss@4.2.2) + version: 0.5.11(tailwindcss@4.3.0) '@tailwindcss/typography': specifier: ^0.5.19 - version: 0.5.19(tailwindcss@4.2.2) + version: 0.5.19(tailwindcss@4.3.0) '@tailwindcss/vite': - specifier: ^4.2.2 - version: 4.2.2(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + specifier: ^4.3.0 + version: 4.3.0(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) '@types/eslint': specifier: ^9.6.1 version: 9.6.1 '@types/node': - specifier: ^25.2.3 - version: 25.2.3 + specifier: ^25.8.0 + version: 25.8.0 '@types/nprogress': specifier: ^0.2.3 version: 0.2.3 autoprefixer: - specifier: ^10.4.27 - version: 10.4.27(postcss@8.5.9) + specifier: ^10.5.0 + version: 10.5.0(postcss@8.5.14) eslint: - specifier: ^10.1.0 - version: 10.1.0(jiti@2.6.1) + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-svelte: - specifier: ^3.16.0 - version: 3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.55.0) + specifier: ^3.17.1 + version: 3.17.1(eslint@10.3.0(jiti@2.7.0))(svelte@5.55.7(@typescript-eslint/types@8.59.3)) globals: - specifier: ^17.4.0 - version: 17.4.0 + specifier: ^17.6.0 + version: 17.6.0 nprogress: specifier: ^0.2.0 version: 0.2.0 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: ^3.8.3 + version: 3.8.3 prettier-plugin-svelte: - specifier: ^3.5.1 - version: 3.5.1(prettier@3.8.1)(svelte@5.55.0) + specifier: ^3.5.2 + version: 3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)) prettier-plugin-tailwindcss: - specifier: ^0.7.2 - version: 0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.55.0))(prettier@3.8.1) + specifier: ^0.8.0 + version: 0.8.0(prettier-plugin-svelte@3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)))(prettier@3.8.3) runed: specifier: ^0.37.1 - version: 0.37.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(zod@4.3.6) + version: 0.37.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(zod@4.4.3) sk-seo: specifier: ^0.5.4 version: 0.5.4 + supabase: + specifier: ^2.98.2 + version: 2.98.2 super-sitemap: - specifier: ^1.0.7 - version: 1.0.7(svelte@5.55.0) + specifier: ^1.0.12 + version: 1.0.12(svelte@5.55.7(@typescript-eslint/types@8.59.3)) svelte: - specifier: ^5.55.0 - version: 5.55.0 + specifier: ^5.55.7 + version: 5.55.7(@typescript-eslint/types@8.59.3) svelte-check: - specifier: ^4.4.5 - version: 4.4.5(picomatch@4.0.3)(svelte@5.55.0)(typescript@6.0.3) + specifier: ^4.4.8 + version: 4.4.8(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3) svelte-search: specifier: ^2.1.2 version: 2.1.2 svelte-sonner: - specifier: ^1.1.0 - version: 1.1.0(svelte@5.55.0) + specifier: ^1.1.1 + version: 1.1.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) tailwindcss: - specifier: ^4.2.2 - version: 4.2.2 + specifier: ^4.3.0 + version: 4.3.0 tslib: specifier: ^2.8.1 version: 2.8.1 @@ -135,90 +138,90 @@ importers: specifier: ^6.0.3 version: 6.0.3 typescript-eslint: - specifier: ^8.57.2 - version: 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3) + specifier: ^8.59.3 + version: 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) unplugin-icons: specifier: ^23.0.1 - version: 23.0.1(svelte@5.55.0) + version: 23.0.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) vite: - specifier: ^8.0.3 - version: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) + specifier: ^8.0.13 + version: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) vite-plugin-mkcert: specifier: ^2.0.0 - version: 2.0.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + version: 2.0.0(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) vitest: - specifier: ^4.1.1 - version: 4.1.1(@types/node@25.2.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + specifier: ^4.1.6 + version: 4.1.6(@types/node@25.8.0)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) wrangler: - specifier: ^4.77.0 - version: 4.77.0 + specifier: ^4.92.0 + version: 4.92.0(@cloudflare/workers-types@4.20260515.1) zod: - specifier: ^4.3.6 - version: 4.3.6 + specifier: ^4.4.3 + version: 4.4.3 packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - '@cloudflare/kv-asset-handler@0.4.2': - resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} - engines: {node: '>=18.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.0': - resolution: {integrity: sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg==} + '@cloudflare/unenv-preset@2.16.1': + resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} peerDependencies: unenv: 2.0.0-rc.24 - workerd: 1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0 + workerd: '>1.20260305.0 <2.0.0-0' peerDependenciesMeta: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260317.1': - resolution: {integrity: sha512-8hjh3sPMwY8M/zedq3/sXoA2Q4BedlGufn3KOOleIG+5a4ReQKLlUah140D7J6zlKmYZAFMJ4tWC7hCuI/s79g==} + '@cloudflare/workerd-darwin-64@1.20260515.1': + resolution: {integrity: sha512-Wtw44el2pNbzixvTkWdfeBDTrQwQbJRz7/JUvPKV27I0pQWXbhNJPpM8cstq/pbrU5AGcA/HjFH6yPMRTIRKig==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260317.1': - resolution: {integrity: sha512-M/MnNyvO5HMgoIdr3QHjdCj2T1ki9gt0vIUnxYxBu9ISXS/jgtMl6chUVPJ7zHYBn9MyYr8ByeN6frjYxj0MGg==} + '@cloudflare/workerd-darwin-arm64@1.20260515.1': + resolution: {integrity: sha512-X8EqkZej6FfmhF9AVAQ3FhyQRr9acS4RcDunMU2YiuxKHF1IU8zzH3vY30/POaG+rUu9vGDp/VgUl49VPenHJQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260317.1': - resolution: {integrity: sha512-1ltuEjkRcS3fsVF7CxsKlWiRmzq2ZqMfqDN0qUOgbUwkpXsLVJsXmoblaLf5OP00ELlcgF0QsN0p2xPEua4Uug==} + '@cloudflare/workerd-linux-64@1.20260515.1': + resolution: {integrity: sha512-CDC89QxQ7Y7t7RG1Jd9vj/qolE1sQRkI2OSEuV5BMJi0vW/gV4OVG6xjpdK3b1OYnSWDzF7NpvlR5Yg86q7k4g==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260317.1': - resolution: {integrity: sha512-3QrNnPF1xlaNwkHpasvRvAMidOvQs2NhXQmALJrEfpIJ/IDL2la8g499yXp3eqhG3hVMCB07XVY149GTs42Xtw==} + '@cloudflare/workerd-linux-arm64@1.20260515.1': + resolution: {integrity: sha512-WxbW/PToYES4fvHXzsr/5qOiETQs/Z9iZ0mjSZAiEwq5cMLZemzGN0COx+uFb9OvQwzh6Pg159qPFnw3+i9FuA==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260317.1': - resolution: {integrity: sha512-MfZTz+7LfuIpMGTa3RLXHX8Z/pnycZLItn94WRdHr8LPVet+C5/1Nzei399w/jr3+kzT4pDKk26JF/tlI5elpQ==} + '@cloudflare/workerd-windows-64@1.20260515.1': + resolution: {integrity: sha512-WmV/iv+MHjYsvkcMVzpM2B5/mf06UUkdpVhZrtMfV9graWjBGPYFvE/eab8748RPVGKh1Xe1vXofLzDSwc08lA==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20260210.0': - resolution: {integrity: sha512-zHaF0RZVYUQwNCJCECnNAJdMur72Lk3FMiD6wU78Dx3Bv7DQRcuXNmPNuJmsGnosVZCcWintHlPTQ/4BEiDG5w==} + '@cloudflare/workers-types@4.20260515.1': + resolution: {integrity: sha512-ruz+9tcG2iIKq5mXU2F00lL6KF5d4QfbAk7fNgvvqf5BelxDXaieyZmSnvA4sQBuemUstt4AEDN9CmJKmfCsDw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/core@1.9.0': - resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} @@ -386,41 +389,45 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.23.3': - resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} + '@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.5.3': - resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} + '@eslint/config-helpers@0.5.5': + resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@1.1.1': - resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/object-schema@3.0.3': - resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} + '@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.6.1': - resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} + '@eslint/plugin-kit@0.7.1': + resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + '@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/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -443,23 +450,23 @@ packages: '@iconify-json/heroicons@1.2.3': resolution: {integrity: sha512-n+vmCEgTesRsOpp5AB5ILB6srsgsYK+bieoQBNlafvoEhjVXLq8nIGN4B0v/s4DUfa0dOrjwE/cKJgIKdJXOEg==} - '@iconify-json/lucide@1.2.99': - resolution: {integrity: sha512-XE2Pg8uax2uN3ZbvvnO0C5ADgZOyUgEPiwnhD/xrJwz/bfpWwL3mbDwxntEWB2G1mwo2OqKMF50/jp6ia2QzKw==} + '@iconify-json/lucide@1.2.107': + resolution: {integrity: sha512-Q4JmCICVwHqaGhB3ugDFdb4uGXuU/o8OJrJuo1YjeZhGeT3jX5fc//7qMNsCb10VuL2PVDM/CkaqO9chnmI3gg==} '@iconify-json/mdi@1.2.3': resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==} - '@iconify-json/vscode-icons@1.2.45': - resolution: {integrity: sha512-ow+ueibMIq79ueM1kv6cOWgHx8jfh1XJQi2RrqMHb4HLbvIBlxpy5PCMvOJXlA68R6fBAHpWQeh6uWx7VKEVsA==} + '@iconify-json/vscode-icons@1.2.49': + resolution: {integrity: sha512-kPSF7NYMEepp/YxM/Sz9AK3+8tEb4Vz94N67OH4Xw9PetIs6at9iETVAAD47WR1sV+VkQo+Uynd8IMKw3J5NGQ==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@3.1.0': - resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} + '@iconify/utils@3.1.3': + resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} '@img/sharp-darwin-arm64@0.34.5': @@ -614,6 +621,10 @@ packages: '@internationalized/date@3.12.0': resolution: {integrity: sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -641,14 +652,14 @@ packages: peerDependencies: svelte: ^3.0 || ^4.0 || ^5.0 - '@napi-rs/wasm-runtime@1.1.3': - resolution: {integrity: sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 - '@oxc-project/types@0.122.0': - resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@oxc-project/types@0.130.0': + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -662,103 +673,103 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} - '@rolldown/binding-android-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} + '@rolldown/binding-android-arm64@1.0.1': + resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} + '@rolldown/binding-darwin-arm64@1.0.1': + resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.12': - resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} + '@rolldown/binding-darwin-x64@1.0.1': + resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': - resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} + '@rolldown/binding-freebsd-x64@1.0.1': + resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': - resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} + '@rolldown/binding-linux-arm64-gnu@1.0.1': + resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} + '@rolldown/binding-linux-arm64-musl@1.0.1': + resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} + '@rolldown/binding-linux-ppc64-gnu@1.0.1': + resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} + '@rolldown/binding-linux-s390x-gnu@1.0.1': + resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} + '@rolldown/binding-linux-x64-gnu@1.0.1': + resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} + '@rolldown/binding-linux-x64-musl@1.0.1': + resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} + '@rolldown/binding-openharmony-arm64@1.0.1': + resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': - resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} - engines: {node: '>=14.0.0'} + '@rolldown/binding-wasm32-wasi@1.0.1': + resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} + '@rolldown/binding-win32-arm64-msvc@1.0.1': + resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} + '@rolldown/binding-win32-x64-msvc@1.0.1': + resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.12': - resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -769,197 +780,59 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} - cpu: [x64] - os: [win32] - '@sindresorhus/is@7.2.0': resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} - '@skeletonlabs/skeleton-common@4.13.0': - resolution: {integrity: sha512-TZczPAClDbM4Jfx3mI23VFqFQKzsvevTsZHywNFt6vVevhuaVLRFhfuMURACLRGbtmMozvNtQYmiVxwiR162CQ==} + '@skeletonlabs/skeleton-common@4.15.2': + resolution: {integrity: sha512-y7KZn++Av8UHdoeaaguQ7zIS1HlK7Y5jyPDnHy65wJ60iS97fMtQV0kGhqVoYCWhor+xrjbAFjWtaPOPPDEMYA==} - '@skeletonlabs/skeleton-svelte@4.13.0': - resolution: {integrity: sha512-fUx0fxdWZwwGxy5GbR9OMA96TcmpX98JJ+yqAyOsw6G5BQV9Lu5+QycPgX5+6bFDHNAgZAtmhmiUwcI3Q7Izpg==} + '@skeletonlabs/skeleton-svelte@4.15.2': + resolution: {integrity: sha512-vZkRhR701EOHVXVKh/NFRSY8D9LPBvmdNFdtfgqO7TEg77sypJUvERl2dxErTLY1QjVklVpjsHRCTaSLn+1Ntg==} peerDependencies: svelte: ^5.29.0 - '@skeletonlabs/skeleton@4.13.0': - resolution: {integrity: sha512-X/h1MJsHx5FLjWmprLD5umo6NxX0JOeHwjgwdsf0t9H9cdEWpYu4Z/gre2Efzn0nl5rezZYvdEsk+OVXpM4mPg==} + '@skeletonlabs/skeleton@4.15.2': + resolution: {integrity: sha512-5O23Py76nw56aoieV2b2T7MJ6xS0DwDjUULpwLnCXxXOnmzADEoWoQxb/ABbqg04IMOygtRzK3HO22I1+kFsog==} peerDependencies: tailwindcss: ^4.0.0 - '@speed-highlight/core@1.2.14': - resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} + '@speed-highlight/core@1.2.15': + resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==} '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@supabase/auth-js@2.100.0': - resolution: {integrity: sha512-pdT3ye3UVRN1Cg0wom6BmyY+XTtp5DiJaYnPi6j8ht5i8Lq8kfqxJMJz9GI9YDKk3w1nhGOPnh6Qz5qpyYm+1w==} + '@supabase/auth-js@2.105.4': + resolution: {integrity: sha512-Ejfa37M5xoIwoxVebxRahnwubPo8g22qkXQ4p50+N9MIvU9UZoN+A8dwVPtczzGf8oV/YXN80ZPxK4aWXuSN/A==} engines: {node: '>=20.0.0'} - '@supabase/functions-js@2.100.0': - resolution: {integrity: sha512-keLg79RPwP+uiwHuxFPTFgDRxPV46LM4j/swjyR2GKJgWniTVSsgiBHfbIBDcrQwehLepy09b/9QSHUywtKRWQ==} + '@supabase/functions-js@2.105.4': + resolution: {integrity: sha512-JVNKbBft3Qkja+WlGaE026AJ2AH9K0UTsxsfvEIHgd4zFrBor4BYRCrYFrv9IDsvVqkF72wKDsODJl5GY/C4tA==} engines: {node: '>=20.0.0'} - '@supabase/phoenix@0.4.0': - resolution: {integrity: sha512-RHSx8bHS02xwfHdAbX5Lpbo6PXbgyf7lTaXTlwtFDPwOIw64NnVRwFAXGojHhjtVYI+PEPNSWwkL90f4agN3bw==} + '@supabase/phoenix@0.4.2': + resolution: {integrity: sha512-YSAGnmDAfuleFCVt3CeurQZAhxRfXWeZIIkwp7NhYzQ1UwW6ePSnzsFAiUm/mbCkfoCf70QQHKW/K6RKh52a4A==} - '@supabase/postgrest-js@2.100.0': - resolution: {integrity: sha512-xYNvNbBJaXOGcrZ44wxwp5830uo1okMHGS8h8dm3u4f0xcZ39yzbryUsubTJW41MG2gbL/6U57cA4Pi6YMZ9pA==} + '@supabase/postgrest-js@2.105.4': + resolution: {integrity: sha512-SppIyLo/kTwIlz1qpv2HN1EQqBg0GVktrDDFsXygYROha3MgVn4rT7p5EjFHFqXQm2rdRGb/BI7bc+jr10m91w==} engines: {node: '>=20.0.0'} - '@supabase/realtime-js@2.100.0': - resolution: {integrity: sha512-2AZs00zzEF0HuCKY8grz5eCYlwEfVi5HONLZFoNR6aDfxQivl8zdQYNjyFoqN2MZiVhQHD7u6XV/xHwM8mCEHw==} + '@supabase/realtime-js@2.105.4': + resolution: {integrity: sha512-6ov6c59+8D9h7q4M4Gy/uDJlC0Akxl9/714Y+6vJ+Sijuc16TS/p5DwhfRCLNcIhNiej1gEt+CQUwsjiPt4PxQ==} engines: {node: '>=20.0.0'} - '@supabase/ssr@0.9.0': - resolution: {integrity: sha512-UFY6otYV3yqCgV+AyHj80vNkTvbf1Gas2LW4dpbQ4ap6p6v3eB2oaDfcI99jsuJzwVBCFU4BJI+oDYyhNk1z0Q==} + '@supabase/ssr@0.10.3': + resolution: {integrity: sha512-ux2CJgX89h0Fz2lY7ZNafNG2SkXpyRc5dz77K9eKeBLPdtywQixKwIuetDeIViAJBp/buOUVmgj8PVesOklNpw==} peerDependencies: - '@supabase/supabase-js': ^2.97.0 + '@supabase/supabase-js': ^2.105.3 - '@supabase/storage-js@2.100.0': - resolution: {integrity: sha512-d4EeuK6RNIgYNA2MU9kj8lQrLm5AzZ+WwpWjGkii6SADQNIGTC/uiaTRu02XJ5AmFALQfo8fLl9xuCkO6Xw+iQ==} + '@supabase/storage-js@2.105.4': + resolution: {integrity: sha512-Jx+pzMP1Whjof2PWHoVBUA75/p7PQE9CqKBzn1oXVyJDOggMLSH2OzVWwsXYaxEpdC1K/KltwmOX44nL3LHl9g==} engines: {node: '>=20.0.0'} - '@supabase/supabase-js@2.100.0': - resolution: {integrity: sha512-r0tlcukejJXJ1m/2eG/Ya5eYs4W8AC7oZfShpG3+SIo/eIU9uIt76ZeYI1SoUwUmcmzlAbgch+HDZDR/toVQPQ==} + '@supabase/supabase-js@2.105.4': + resolution: {integrity: sha512-cEnx+k49knU+qdIP7rXwR6fqEXPHZs+74xFK1R0S8MgQ7v9tbePVdGxvO03n3bPympMdJWVLadARBfU4TgNHCQ==} engines: {node: '>=20.0.0'} '@sveltejs/acorn-typescript@1.0.9': @@ -985,15 +858,15 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || >=7.0.0 - '@sveltejs/kit@2.55.0': - resolution: {integrity: sha512-MdFRjevVxmAknf2NbaUkDF16jSIzXMWd4Nfah0Qp8TtQVoSp3bV4jKt8mX7z7qTUTWvgSaxtR0EG5WJf53gcuA==} + '@sveltejs/kit@2.60.1': + resolution: {integrity: sha512-mQjlkNo+rJvpln7V2IGY2j99BqhcFbS4UN0AQNKNYfhBAFZTuCDAdW3a1sgf330mvtNvsBXn3HpAhcmvdJTcIQ==} 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 + 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': @@ -1001,84 +874,84 @@ packages: typescript: optional: true - '@sveltejs/vite-plugin-svelte@7.0.0': - resolution: {integrity: sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==} + '@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.18': - resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} + '@swc/helpers@0.5.21': + resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} '@tailwindcss/forms@0.5.11': resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' - '@tailwindcss/node@4.2.2': - resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} - '@tailwindcss/oxide-android-arm64@4.2.2': - resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + '@tailwindcss/oxide-android-arm64@4.3.0': + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.2.2': - resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} + '@tailwindcss/oxide-darwin-arm64@4.3.0': + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.2.2': - resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} + '@tailwindcss/oxide-darwin-x64@4.3.0': + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.2.2': - resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} + '@tailwindcss/oxide-freebsd-x64@4.3.0': + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': - resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': - resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': - resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': - resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.2.2': - resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.2.2': - resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -1089,20 +962,20 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': - resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': - resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.2.2': - resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} + '@tailwindcss/oxide@4.3.0': + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} engines: {node: '>= 20'} '@tailwindcss/typography@0.5.19': @@ -1110,13 +983,13 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tailwindcss/vite@4.2.2': - resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} + '@tailwindcss/vite@4.3.0': + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1133,14 +1006,14 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@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/node@25.2.3': - resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==} + '@types/node@25.8.0': + resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -1148,77 +1021,70 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - - '@typescript-eslint/eslint-plugin@8.57.2': - resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} + '@typescript-eslint/eslint-plugin@8.59.3': + resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.2 + '@typescript-eslint/parser': ^8.59.3 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.57.2': - resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==} + '@typescript-eslint/parser@8.59.3': + resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} 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.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.57.2': - resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} + '@typescript-eslint/project-service@8.59.3': + resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.57.2': - resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} + '@typescript-eslint/scope-manager@8.59.3': + resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.2': - resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} + '@typescript-eslint/tsconfig-utils@8.59.3': + resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.57.2': - resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==} + '@typescript-eslint/type-utils@8.59.3': + resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} 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.0.0' - - '@typescript-eslint/types@8.57.1': - resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.57.2': - resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} + '@typescript-eslint/types@8.59.3': + resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.2': - resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} + '@typescript-eslint/typescript-estree@8.59.3': + resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.57.2': - resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} + '@typescript-eslint/utils@8.59.3': + resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} 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.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.57.2': - resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} + '@typescript-eslint/visitor-keys@8.59.3': + resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/expect@4.1.1': - resolution: {integrity: sha512-xAV0fqBTk44Rn6SjJReEQkHP3RrqbJo6JQ4zZ7/uVOiJZRarBtblzrOfFIZeYUrukp2YD6snZG6IBqhOoHTm+A==} + '@vitest/expect@4.1.6': + resolution: {integrity: sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg==} - '@vitest/mocker@4.1.1': - resolution: {integrity: sha512-h3BOylsfsCLPeceuCPAAJ+BvNwSENgJa4hXoXu4im0bs9Lyp4URc4JYK4pWLZ4pG/UQn7AT92K6IByi6rE6g3A==} + '@vitest/mocker@4.1.6': + resolution: {integrity: sha512-MCFc63czMjEInOlcY2cpQCvCN+KgbAn+60xu9cMgP4sKaLC5JNAKw7JH8QdAnoAC88hW1IiSNZ+GgVXlN1UcMQ==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1228,167 +1094,167 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.1': - resolution: {integrity: sha512-GM+TEQN5WhOygr1lp7skeVjdLPqqWMHsfzXrcHAqZJi/lIVh63H0kaRCY8MDhNWikx19zBUK8ceaLB7X5AH9NQ==} + '@vitest/pretty-format@4.1.6': + resolution: {integrity: sha512-h5SxD/IzNhZYnrSZRsUZQIC+vD0GY8cUvq0iwsmkFKixRCKLLWqCXa/FIQ4S1R+sI+PGoojkHsdNrbZiM9Qpgw==} - '@vitest/runner@4.1.1': - resolution: {integrity: sha512-f7+FPy75vN91QGWsITueq0gedwUZy1fLtHOCMeQpjs8jTekAHeKP80zfDEnhrleviLHzVSDXIWuCIOFn3D3f8A==} + '@vitest/runner@4.1.6': + resolution: {integrity: sha512-nOPCmn2+yD0ZNmKdsXGv/UxMMWbMuKeD6GyYncNwdkYDxpQvrPSKYj2rWuDjC2Y4b6w6hjip5dBKFzEUuZe3vA==} - '@vitest/snapshot@4.1.1': - resolution: {integrity: sha512-kMVSgcegWV2FibXEx9p9WIKgje58lcTbXgnJixfcg15iK8nzCXhmalL0ZLtTWLW9PH1+1NEDShiFFedB3tEgWg==} + '@vitest/snapshot@4.1.6': + resolution: {integrity: sha512-YhsdE6xAVfTDmzjxL2ZDUvjj+ZsgyOKe+TdQzqkD72wIOmHka8NuGQ6NpTNZv9D2Z63fbwWKJPeVpEw4EQgYxw==} - '@vitest/spy@4.1.1': - resolution: {integrity: sha512-6Ti/KT5OVaiupdIZEuZN7l3CZcR0cxnxt70Z0//3CtwgObwA6jZhmVBA3yrXSVN3gmwjgd7oDNLlsXz526gpRA==} + '@vitest/spy@4.1.6': + resolution: {integrity: sha512-JFKxMx6udhwKh/Ldo270e17QX710vgunMkuPAvXjHSvC6oqLWAHhVhjg/I71q0u0CBSErIODV1Kjv0FQNSWjdg==} - '@vitest/utils@4.1.1': - resolution: {integrity: sha512-cNxAlaB3sHoCdL6pj6yyUXv9Gry1NHNg0kFTXdvSIZXLHsqKH7chiWOkwJ5s5+d/oMwcoG9T0bKU38JZWKusrQ==} + '@vitest/utils@4.1.6': + resolution: {integrity: sha512-FxIY+U81R3LGKCxaHHFRQ5+g6/iRgGLmeHWdp2Amj4ljQRrEIWHmZyDfDYBRZlpyqA7qKxtS9DD1dhk8RnRIVQ==} - '@zag-js/accordion@1.35.3': - resolution: {integrity: sha512-wmw6yo5Zr6ShiKGTc5ICEOJCurWAOSGubIpGISiHi3cZ4tlxKF/vpATIUT3eq8xzdB56YK57yKCujs/WmwqqoA==} + '@zag-js/accordion@1.39.1': + resolution: {integrity: sha512-GA3m7gRTm3weSe1eMlHIsTNztcjZ6joIaRgxxKil7q/UX0xIVVGDy0aCr6oo7FAuoMiOOBVurYXILpFZ30nOXA==} - '@zag-js/anatomy@1.35.3': - resolution: {integrity: sha512-oqU9iLNNylrtJMBX5Xu4DsxnPNvtZLiobryv2oNtsDI1mi1Fca/XHghQC9K5aYT0qNsmHj1M3W5WAWTaOtPLkQ==} + '@zag-js/anatomy@1.39.1': + resolution: {integrity: sha512-p2iFAs2pVQgv5iCDAftA7g9Z/fUYXW94dRIGk415TSbkp/YDENydm/JtRoNctp302UIx4Eeuc5QBR+7h5kuISA==} - '@zag-js/aria-hidden@1.35.3': - resolution: {integrity: sha512-dk5POebn10WneQfLrEgbTzwolaXWpCSHL6F3jCTinW9IbOx7BXghzJD21iU5Iun+y9CorqJPW3p7LplYNUMO5Q==} + '@zag-js/aria-hidden@1.39.1': + resolution: {integrity: sha512-wiwcz3N086qBMEU3VKfHhcvGm6Jm1PIcDXys/jEqiKPtHoYZhDip0n0cPOoasss/A1oS39QFVdk3WpLXGu3Izw==} - '@zag-js/auto-resize@1.35.3': - resolution: {integrity: sha512-ufG8HSqzLd9h5rnos8aumj8iORlRskeR/gbpJu1NHrnHBWIrpuXm6KJJR2oZhTFY1BUMMk8eYIBA2QkVuiJzWA==} + '@zag-js/auto-resize@1.39.1': + resolution: {integrity: sha512-ditIo9mW7fapq+4yx3/8hMpMZlWaoOy66EOzUz8dSVqnxnTWAjnTICu/9zFh8pkWerlzGTtDOJPP1oZ8S/rgVg==} - '@zag-js/avatar@1.35.3': - resolution: {integrity: sha512-lbQ2Q4Va8AAScKULOHw2tCQez+0JRYGHSMFq6i+dJmeT3dlSgRanm69ra6K2po6hM9E4v6pRe+xOVE+9QMDnuA==} + '@zag-js/avatar@1.39.1': + resolution: {integrity: sha512-LWrgJ0bebnXPSL+uehA9z6BlCD/MZEOQBJqH/F2QQFSAAZXUUDKtzVDmc+UtwjDsHXqqTghi+v2atQJHNMcJ2g==} - '@zag-js/carousel@1.35.3': - resolution: {integrity: sha512-F+b8HzUeZfB+xUkAkLG4r0Ubui8pj7pSgZhi26ZiWgsM7tsd7cD+xRMXkvPEITN5Fd5QCe3KlVBuE00w5byjmg==} + '@zag-js/carousel@1.39.1': + resolution: {integrity: sha512-5z5z3IldUgZ/R+KZLNQDoJFNTXzYd28YOmgfWH61Vvyv+RarX8kwZW8ajW/fNiqcWXyhW3/VMU0lArrfjbQVtQ==} - '@zag-js/collapsible@1.35.3': - resolution: {integrity: sha512-IweG8JOBCerJwLO6QzTZGEMlsYUmQfQSeD0jniFguMM8vcunvGVSrM+AaL8pDbmXd+snXokaGyJpGO3vzMW6Fw==} + '@zag-js/collapsible@1.39.1': + resolution: {integrity: sha512-Zgccg/t7M8i0JVwZPPgW7XB7kGhTO475hsmwkF/8CYLqBBckVDHUARp2we24hENCm/98eez6R0eDEmE+tldFWA==} - '@zag-js/collection@1.35.3': - resolution: {integrity: sha512-BYoWJ4b7ma2PgiuQbRSnP603f2DlK6se5JtViUHTamZScLLLWnWHuQ6zFa1KS5kiIkbb7CFM6/bJ3WNYLch8Ig==} + '@zag-js/collection@1.39.1': + resolution: {integrity: sha512-fyOyKmP7MRo0/U8mBmB7KgHRXHhXP27LCcasy3x+qTAQtuEfYG1EPhKuj07oBWlX/2qfcKYn2R3YopHcqFcCiA==} - '@zag-js/combobox@1.35.3': - resolution: {integrity: sha512-s1qmttTGJTMjlDakL+uvWSEggpafKr1vhOeZCh8j+N4eFt9bLAwaffjuh/1JzWBvzovw7WoMVkizdTXPlN8oYg==} + '@zag-js/combobox@1.39.1': + resolution: {integrity: sha512-fmStpG+k4xrxCzqUX0ssnOMeoSietWm5ir3qmEZcagzNqNycAXMvOELAIeyXi87Kut6aDGhxLOV7o395HVXl/w==} - '@zag-js/core@1.35.3': - resolution: {integrity: sha512-fGAHyqOYSEFmo52t7wI4dvbFfLyJmUlyf7wknsiUlzUHlrn3yv5PAZYZ2TibpOD1hwXIp4AoCjbiIPPZBxirZw==} + '@zag-js/core@1.39.1': + resolution: {integrity: sha512-Yp0r49QLYXe2j7fgyAiilH4umXFydCnr5hcRDwJU+sxvUAlq00JQIJIEK2pT6k8cJiNNsFEV5WkOX7jsqpAX2A==} - '@zag-js/date-picker@1.35.3': - resolution: {integrity: sha512-4G10h6pzzLbd84SE2CKtqi6Z9wEBhSyx4GRSxxy3tsf5wAxnz4anRFat9CGwn2YVUYcUJpD+umYgBMPt6zGDnA==} + '@zag-js/date-picker@1.39.1': + resolution: {integrity: sha512-t9q1H0aZQJkbzKTR2Bn5vMwaoFoirxekiSxw8ju0F0vr4Kg4BJ9yueOQm5I2wALKnJbZu4Ua5MgzlrDF3CQt3A==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/date-utils@1.35.3': - resolution: {integrity: sha512-1co0FPpZ6nO5dN8sZtECkMYaf+3E5zu0KSIJZpZiXb4TgsZMDyHu7K7IsiKFHk9qmhuF6AdPpNxBju91pSXMFg==} + '@zag-js/date-utils@1.39.1': + resolution: {integrity: sha512-i4SvBhru2Yz/zsHT0XvyFhf4a+pAKYkWXeVfU0RvF2S6mPTfgaMFF9ZNPq5Sy8K31EtAa6AVXcybYaYnibn1FA==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/dialog@1.35.3': - resolution: {integrity: sha512-byosV+aBHH5LoFKnjEgC7WdqJid7bP9UhgWLSC7+IXbxrif9Czg1YVp6ZlQM6Nx6uD1vnty4touI3P7D7CTKcw==} + '@zag-js/dialog@1.39.1': + resolution: {integrity: sha512-q+HTmfuRDRZthln9mb7i52wdltQOZlw3+nw3a2uygEe9xuEtHBwUz31XJzkn2UWQqhAt7cC39OwykhNLKrfkqA==} - '@zag-js/dismissable@1.35.3': - resolution: {integrity: sha512-XPk+lqmsZp2Z1yMb5K1yj/e7Sobv4D7zK66B1GS97lk9Xzz8vuSgsimcLy0p7RXQl3KL6H5L69inSuQa2exybQ==} + '@zag-js/dismissable@1.39.1': + resolution: {integrity: sha512-7/soy93Ersd5qedhSL/+CDcZ9gNTQV0ooDcqKtM8b4IxwD4rgWwGsewJY+tbKmOqaZobwa0YcWV2+YGgI23ESw==} - '@zag-js/dom-query@1.35.3': - resolution: {integrity: sha512-1RbFZoT4CjlHN9TUNse1++ZVOyKo45ktucTIT349o6HMsoWWKmTJDPvFkMBbmu/qY6XXn4dT+LJEp4bL3DR+Qw==} + '@zag-js/dom-query@1.39.1': + resolution: {integrity: sha512-k01aXeUWLyJfB61CODaXj4PLhYmVpnVMFrC+3nk/XCn1MW7my8L/8KVg0m4W8n+X9MhpaLWsZDmK/dwED/3qSw==} - '@zag-js/file-upload@1.35.3': - resolution: {integrity: sha512-oIYwnDct4ERo2mfmcxsBIJnlmpzjrzYx82SQsXWD3NGKx3cgdh2lwBX+ebItaLH1jkgzBa3z0TWxc6rfvcUXbw==} + '@zag-js/file-upload@1.39.1': + resolution: {integrity: sha512-cErPOnPwPyneUXpelsfm75DKn0/4SI8aqQnlbrqo522PEqAQyDfDdBsqebGgKWG3F0A++kKFp9LO9A5zCrw5gA==} - '@zag-js/file-utils@1.35.3': - resolution: {integrity: sha512-Tb05RCzx4swc156hd4jLiO7z+Gxg/HQ+JCds03jgTbrFJAz2D56YaMeI7gSDc1m4Xre3nyqQpSo9AeX5nzbE/w==} + '@zag-js/file-utils@1.39.1': + resolution: {integrity: sha512-ll/W5o74SMmoAS+l7PkmmGjPj4PLCSG/cwQh1Y/+LpaSev0YiR3Nk2OzRIIPtm3NivYVxKGawaCOf1RvT/82LQ==} - '@zag-js/floating-panel@1.35.3': - resolution: {integrity: sha512-nTZypcS0X46Oo1kpCQTnP5UlzjhypOAj3B4dq2z/3bAOC0TntYTnFkj8PbEJtExk7364xfMyxfgZOiv7Aqq01w==} + '@zag-js/floating-panel@1.39.1': + resolution: {integrity: sha512-IfPbf3pwJGqBWHec/rPzpdPjfMCLed59LlEophvRy49FEdksv8eN6nr9DXl2wWZEoQhH99scXfLMbtEZsPsFWg==} - '@zag-js/focus-trap@1.35.3': - resolution: {integrity: sha512-evErLlGFdDVCI8xipNS5k0rAvO+KFRA9g273bbfWAL1+mT54mcB/XHa85nC3QpPgMNrSh+6LUNq9fapyOGoyYg==} + '@zag-js/focus-trap@1.39.1': + resolution: {integrity: sha512-2ZzVefHMotvtxUo/gP4R45Szw/EPaPkTKEHaug6/il62SPDbkFODF+5r1zXyLbLuwCHq0apvQasg/ONLihwlXw==} - '@zag-js/focus-visible@1.35.3': - resolution: {integrity: sha512-g4F8PRGIoFoKBrHiQ1HQh5AjCS7brFRXHvpbDNb9+T11FGlF5Turb+6OVRoNV8MmiuqMltO2I28l36YsGc//uQ==} + '@zag-js/focus-visible@1.39.1': + resolution: {integrity: sha512-iEuTOYHE8HRn/7ULC9c9BTTWo0C0MJRCbYVxbh/d7v8qAuq4CS76pdfceNo3KeWbb968T+yiG6q0AjiHsr8IOw==} - '@zag-js/i18n-utils@1.35.3': - resolution: {integrity: sha512-k7UcNxbnC2jvGwCoHYAkFD3ZaRSMQNVHfuy8TujZQ+ci3IJovwgWLveZoRfFbXHkTLfhmbpE2tFXBdpwOVZutg==} + '@zag-js/i18n-utils@1.39.1': + resolution: {integrity: sha512-TKRLQQlHgJ4cxsHo3tZPtbFjGu9m1UPtfezRGFKq7A8czhdqRhaCpaWF849cd6dI7x6rWvvTan858gOFpyANnQ==} - '@zag-js/interact-outside@1.35.3': - resolution: {integrity: sha512-tOcuo/IztzpU7UKXtjVrLZtXzzcbhP4n2WynKwDRkTkq3mRCp61xXJp1csIBycI3JHm/CMeAEcPdRIioxIT/Zw==} + '@zag-js/interact-outside@1.39.1': + resolution: {integrity: sha512-LnSbA+txMsFmzNPn84QKH01x2yJv4At/eKHn6rT2PyxXkJQIh8PvCTS3zVz4Syw11cmhcXt2eRwhzx8yImV92w==} - '@zag-js/listbox@1.35.3': - resolution: {integrity: sha512-FE6FOuBr6aWtOb8U8oDvAvcUzD6JKLXAe8WngiLFG+b2yyW4nlaz2AcKRG1bjjB066UMxMo9/+2p4D0Kf5Id1Q==} + '@zag-js/listbox@1.39.1': + resolution: {integrity: sha512-Mz0UpdXobdTQTyjM+Avgi7pDVB2dKyaUHqw3TloeleQL3VwTqClclkwHXtLYYE+oXa0zOet37wI9mzfaYx9iZQ==} - '@zag-js/live-region@1.35.3': - resolution: {integrity: sha512-64rWcfggYpyr2Fn4pdrB/lljMgm3quwn9is+vdDN85Vv3WShKWoz08T4njidm0hwcIbzas0bRqQYWDLLsAoSJQ==} + '@zag-js/live-region@1.39.1': + resolution: {integrity: sha512-E7YNd0QGzJ2n1ZhnI2smv+klwifsNRf9QaDCx7quVJCVYywpupsBK4R25KN75S1z8XaK+jAy6HYKj8DIhYjYeg==} - '@zag-js/menu@1.35.3': - resolution: {integrity: sha512-KyY0EZXkIU57Mjt+Lg+pupiePk3LcnQcB3Gl05Vva61bNjBjdKV71qwCQru/OxPZEwYgPo46L7TDIb56kfK/VQ==} + '@zag-js/menu@1.39.1': + resolution: {integrity: sha512-bRDGLGkiGhzNtORBXkbBQV/xp2zEkwpYIepfWCaUoFwKUmx7GGnShTBFxJyq0u2D4IkS9GOwcqm20EhMv6V+TA==} - '@zag-js/pagination@1.35.3': - resolution: {integrity: sha512-fKm4s5KAd12RiCI/EDmmGKjPQ+i2qS/UsJPdMe65yb/4mY5OibwV2zyHcVeFsOD4gBZpnU6kYlDAGSttmLWLlQ==} + '@zag-js/pagination@1.39.1': + resolution: {integrity: sha512-3Q1B9/g3ajhvXjuGffJ7otyXcXK5+uhdbE5A9CZa4bsW3pf25L9Cp+ZAjdXQMDc8T4jhZJAKFmDJfQgtr1oEIw==} - '@zag-js/popover@1.35.3': - resolution: {integrity: sha512-+MIEENPsbKPxzoNuDI/C5d5ZN9uxnfZ+MBDc5C5XSgjjg9FcvMXClNq7IFM1aZi24peRXg9cMNf//lApVRT37w==} + '@zag-js/popover@1.39.1': + resolution: {integrity: sha512-aO3ExO/O7Sa3ovdozFI6SujhNOpYdCca4bImnAiovDL8DY8zN3UNQebu35IQvw9/aRsx9VKSJL1AqzJJUImFRw==} - '@zag-js/popper@1.35.3': - resolution: {integrity: sha512-gpB7Xn9WtlfrUsIVbSgNQGDwgNOL/cSGt0Id3wEQKArmqVC704EWtPvXzOMMybBEdm8YW2hQrXuo+o66abI1Sg==} + '@zag-js/popper@1.39.1': + resolution: {integrity: sha512-h0UMY2dXJNfM3OvMQ9t9LzlmwvpCgjloz2IvU1txY3r32UIy7ve1H70zkKagLtLRxFTuWmhumYUPULPo/6a1DA==} - '@zag-js/progress@1.35.3': - resolution: {integrity: sha512-u0GxQN1AfXMAgzYOUMxKQA12DyuAP0svh2S//KvOorTSv7d5hAa8nZXi2cEv5abYsyfKJ6/bc1Z56byzW1jVZw==} + '@zag-js/progress@1.39.1': + resolution: {integrity: sha512-1IHyOw8DqPs3YH149Oj7W9a5oEfY5pc9GAVOPGbzYxVK/W8d/NIjVxa565I3J5cDJ0s6z3FrMSXMWUwr1ML4tw==} - '@zag-js/radio-group@1.35.3': - resolution: {integrity: sha512-kOzocjqWk3dXuRfyfsHwfw63Z99NHbc7rvVUutSsfXANXi+DFYZHuqdPUwMt+29LfaL15XTOfuGV+yUXDCgQHQ==} + '@zag-js/radio-group@1.39.1': + resolution: {integrity: sha512-+sC9xcAyY/GbY+8HpKlbPgSyOxBLUSB18s6fe6K1wdmyom4PM0nmhLouuxisbFZYHOyfQwAOMo+ainRENB2hzQ==} - '@zag-js/rating-group@1.35.3': - resolution: {integrity: sha512-BmhJZdbaTnd3nFWMY+nR+HF952UhWXfaXXxiBWptSLMBfAYImQTWBMrLgTHCSnVfmFATj4Gb7xQe79FQU8T5fA==} + '@zag-js/rating-group@1.39.1': + resolution: {integrity: sha512-IfdxWmM+3zpztx/HcE3bWob72sZNb1+BzK4tSySLVyjeqs8OzLDzrCbKqt10DmibnNOvpbjbq4eX4P5hV9YN7Q==} - '@zag-js/rect-utils@1.35.3': - resolution: {integrity: sha512-mt/oD3RXdyaX6ZPSd8BO13vvPBJ7QpVWieubE3O0WM3OPhU7ykDMRp/tR7cYMQrzUm04GlY9pbkmSSw2uABxlA==} + '@zag-js/rect-utils@1.39.1': + resolution: {integrity: sha512-5gJ0PzeUme76xTWG+4XythWgmGgDKV4XAxEUaB3KKDtXgjDHwtu7PwKLIzFtlaaSf/U23PY+RNVBVCYg1GmZog==} - '@zag-js/remove-scroll@1.35.3': - resolution: {integrity: sha512-e59z9SbEpPiw0qwNQa2cB5/h30ZCLREaHsCw1TKTANFhwg7v85k9Lq1H/G/49li1CAjmiaOU9BNGlDvbzpNETQ==} + '@zag-js/remove-scroll@1.39.1': + resolution: {integrity: sha512-uZfPR3Gl9sQFo+tJ7kbuwsBhw+RIZwWFnMDgrz5LIwSNGN6hsyC4HGOxe29clkWQ2X2AjqqmEMETwgX7Jg+wxA==} - '@zag-js/scroll-snap@1.35.3': - resolution: {integrity: sha512-NVa2yRm2DQnF6hTV9k7Xz7l8YCZBagZTiqSwNvWKUulKD1csjt2fpBxvUt2cK+1iQnLOey2ydhs7MMsAnXPbJA==} + '@zag-js/scroll-snap@1.39.1': + resolution: {integrity: sha512-AzCc8MAAVqkiK5Y0cJZ24OIBZDQrUmEexACMuR6M5yZmlcEbS0EA/d6Wq+LSR1JMVTD4B+UwcMj1D3vJQ90ZTw==} - '@zag-js/slider@1.35.3': - resolution: {integrity: sha512-Th142JO4Fqla5AWhGrTW6CQicwvTw87PdVpur/WotQ7brlZIww5HipzEMh5eQJSWfwpKD4PI2bYK9V/ZE/mpXA==} + '@zag-js/slider@1.39.1': + resolution: {integrity: sha512-OEA9R7Ly5cw+6ANofnMpuHH3rAo8gZEnxy7iEwePu11pq2RCnt8DSj2V+uqU+dTq15Uup1LSzRgJfTnAC4Z85A==} - '@zag-js/steps@1.35.3': - resolution: {integrity: sha512-TYIrqV+v9/ULhvrTRBtQFFvJQPPTWOmjFXxlIxDwozek5R4dCIyeUYt1/ChJEc2mNETocbfDVSTxRO1dwCFpwQ==} + '@zag-js/steps@1.39.1': + resolution: {integrity: sha512-DC6swMpwITTB0DyCSxlpWyPNSUN9ul9jz4N6aAyQ0L1IK/noF/YYTZRAcXNSRzN4iutO/2mFGGbwGq/oVf+gPA==} - '@zag-js/store@1.35.3': - resolution: {integrity: sha512-7kEV4T/20DU36UIfVMzuDlLhWSSEy/vabmpiB700tcdD9BBBODTiSg3ZeljW17dQbvE545vZOFEjVf/cQ5LVGA==} + '@zag-js/store@1.39.1': + resolution: {integrity: sha512-zFpwP4lhiBVD9987rwAfZNVa2/f/xx4mhbCE1EEw31zxLAozY2jONeJ3UzPP05VbzKlRHBcvkaXAJQQGegTwFA==} - '@zag-js/svelte@1.35.3': - resolution: {integrity: sha512-QgP6oPZMJMPONY7iqnYoHya9ZksGppm+x4DkiFe5CsL/D7SDICICnVX0iPA1seYV/WEUelvVAURHEy9/e2asjw==} + '@zag-js/svelte@1.39.1': + resolution: {integrity: sha512-ZOyZjyvjePZdrkNTy5fa92ijeeID9e+3LRGziKGIII3JSEvwfkG/Buf8W84N8VHFxi0G0GcKmgVCDgKHyGQYoQ==} peerDependencies: svelte: '>=5' - '@zag-js/switch@1.35.3': - resolution: {integrity: sha512-EP/2cJ46sd+6C5x5+89jn/9NOpM05CRESYB4RMhOnTe/WFtcS4IpiYtVHFhikdXkvJoibm67O2EHep2Pm/Xj4w==} + '@zag-js/switch@1.39.1': + resolution: {integrity: sha512-ikeQ42c0vyyPLeyW9U0dvcqTV1Ekpx5jZ050R905HGJ2GeWE0uBGuHbMpTG5U6Pwb0a+TMzqAr+jMsquVTCwzg==} - '@zag-js/tabs@1.35.3': - resolution: {integrity: sha512-lZKlDmxE25miCikj9QZCCnL02SVV2K14KZy5bn7+XDgrWlfSNTpNTj8r5E3zGlSgio5pkTGou57ASqS7WaPDWg==} + '@zag-js/tabs@1.39.1': + resolution: {integrity: sha512-P2RThO1gX9SFsNqrAGPsXJxrjn5YqP6MFs9mdExU+tzzZyVjJQADkAmh98C0eEaCb6HKLpJZ/17hrnLDhm1Tig==} - '@zag-js/tags-input@1.35.3': - resolution: {integrity: sha512-HqyoQ3DZFhByOGnDShFfxi6u0bIf7aSVTlwmAvcL+b2ZhyU6/wIMGc4WJE7BMx1NYWM/jNLHedvGExAI8R0kXQ==} + '@zag-js/tags-input@1.39.1': + resolution: {integrity: sha512-tc0+bd9FiUJwa+wY2hSVVGHLIBC3C3rOZX/4zjchRMs1xgl92c1/tYbytXny7ABB8ZMHveG7MtgDppVF4VkwBg==} - '@zag-js/toast@1.35.3': - resolution: {integrity: sha512-whlR791GHdnMD21nNPsl2Dbql8+qu1wBZl75QzwYrjR8FlKjp8bhr3gXKzQEddcBXe9GPEFGvUs4iCyXsuTbpg==} + '@zag-js/toast@1.39.1': + resolution: {integrity: sha512-K7ndEfBTKDds10iQKCQUmin74s6V4BEIypAIyQxs18gQB9TCn5+wff886JAzecIKPY97PDQHDKjYR71yzRC7/g==} - '@zag-js/toggle-group@1.35.3': - resolution: {integrity: sha512-Gn6JHzkQ4tlttjZcE0ZjIdxYkFeVp9VHrcMVizjJTkGZRmQ+kPZ5G/wOsZhIrvLX3Dw6Y0NkuBcP+jDHz/o3TA==} + '@zag-js/toggle-group@1.39.1': + resolution: {integrity: sha512-KS4Bo17foMKXVBhQjocRf4GQxMV4pMXclTo14IWjldaHs2HIrNJ0Ar0Ri+vo47BBKBNsXs4HuNvfbMdQj94wEA==} - '@zag-js/tooltip@1.35.3': - resolution: {integrity: sha512-/pImDGYl79MfLdvEphj3rSvNdj2tLW4GwGEncgdLM/GKwQiEUjfi/9EJOfLYP23M4lOOnoW7orehJ9xeaXOAkA==} + '@zag-js/tooltip@1.39.1': + resolution: {integrity: sha512-IsxFj7l8kPciwIyYJWlmQ7mhXocbjXxLj3m9z099slYOF7lApA33/ndY32w9ptrI4/nUh2nldzw6eRfSpVnuOA==} - '@zag-js/tree-view@1.35.3': - resolution: {integrity: sha512-DbHaLxSNa1goE3o3IsXxEdzp8P5dvmkk1rVWgNUUIhpA+44idEjSSNXJkHPl18Mk5blqSMVjK1EX91oqai01Vw==} + '@zag-js/tree-view@1.39.1': + resolution: {integrity: sha512-sm6qUZjO0OaqBqO5s55KU+l5p1wXfUVScoen7BYVoFBuROH7qAZJi8YMclGvnnlyV506i8Hk0qqWnLg0F38jCA==} - '@zag-js/types@1.35.3': - resolution: {integrity: sha512-Fnm3AMs1lfb55hlkip/eJeWHOjFB3gSi1JkZlkkdltG2l7y/zsHkumPSe6jIKy+DRRIFKRCyXVTatbPN27bO3w==} + '@zag-js/types@1.39.1': + resolution: {integrity: sha512-w3vVpgxmdJvMDvv19DXTtFI6kJL6TXw//U0Z1BAc3rnDA9orcB9Ryw4uMNvIzFA607CgssyJcWDaQ/M3yAcbJw==} - '@zag-js/utils@1.35.3': - resolution: {integrity: sha512-LHcC+9y6TFhDsIz9I3koYxONl2JFfx5yQDzc6ZEQO2cqzXedRcN0R9IPqNGCX7JuhGt14ctDkVCm1JWGP2J6Wg==} + '@zag-js/utils@1.39.1': + resolution: {integrity: sha512-9k741cH7L655Ua3tedTkuMblcXVXVgCLTB9svp9oTjA7oatpOpYF4z43kgAQVjyThNXMJ7AvtO4C80ajQLTScg==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1400,31 +1266,23 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + agent-base@9.0.0: + resolution: {integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==} + engines: {node: '>= 20'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} aria-query@5.3.1: resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} engines: {node: '>= 0.4'} - array-back@3.1.0: - resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} - engines: {node: '>=6'} - - array-back@4.0.2: - resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} - engines: {node: '>=8'} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - autoprefixer@10.4.27: - resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -1438,57 +1296,52 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + baseline-browser-mapping@2.10.29: + resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + engines: {node: '>=6.0.0'} hasBin: true + bin-links@6.0.0: + resolution: {integrity: sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w==} + engines: {node: ^20.17.0 || >=22.9.0} + blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - brace-expansion@5.0.3: - resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} browser-cookies@1.2.0: resolution: {integrity: sha512-cg2WuoOJo+F+g2XjEaP8nmeRp1vDHjt7sqpKJMsTNXKrpyIBNVslYJeehvs6FEddj8usV2+qyRSBEX244yN5/g==} - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - caniuse-lite@1.0.30001776: - resolution: {integrity: sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw==} + caniuse-lite@1.0.30001792: + resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - command-line-args@5.2.1: - resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} - engines: {node: '>=4.0.0'} - - command-line-usage@6.1.3: - resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} - engines: {node: '>=8.0.0'} + cmd-shim@8.0.0: + resolution: {integrity: sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==} + engines: {node: ^20.17.0 || >=22.9.0} confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -1519,6 +1372,10 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1528,10 +1385,6 @@ packages: supports-color: optional: true - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1547,26 +1400,21 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devalue@5.6.4: - resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} - directory-tree@3.6.0: - resolution: {integrity: sha512-rTMWs+zxr0QEbzQKRfwV6SeEy+zIHFkorskI4bhG2o7ayr82c+FC7yWg3yLpurgp6Hs2NGy1NWrKIaDodr2r8A==} - engines: {node: '>=10.0'} - hasBin: true + electron-to-chromium@1.5.356: + resolution: {integrity: sha512-9NgFd7m5t5MCJ5rUSjJITUXAH9mEGlrlofnMf4YEr+pz6JlP7cWmTAH+JFmbPnaSW8koVTkuW7pacORWAnA5Yw==} - electron-to-chromium@1.5.286: - resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} - - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} + enhanced-resolve@5.21.3: + resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} engines: {node: '>=10.13.0'} error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} esbuild@0.27.3: resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} @@ -1577,10 +1425,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -1591,8 +1435,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-svelte@3.16.0: - resolution: {integrity: sha512-DJXxqpYZUxcE0SfYo8EJzV2ZC+zAD7fJp1n1HwcEMRR1cOEUYvjT9GuzJeNghMjgb7uxuK3IJAzI+x6zzUxO5A==} + eslint-plugin-svelte@3.17.1: + resolution: {integrity: sha512-NyiXHtS3Ni7e532RBwS9OXlMKDIrENg3gY+/+ODjZzQx2xhU3NlJ+nIl1a93iUUQeiJL3lS8KLmY+W8hklzweQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 @@ -1621,8 +1465,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.1.0: - resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==} + eslint@10.3.0: + resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1646,8 +1490,13 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.4: - resolution: {integrity: sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==} + esrap@2.2.8: + resolution: {integrity: sha512-MPweq2EvEGj8jwOI7Hgycw/QIHzqA1EbAM8lG7p+FBfZbZq/hQ6h3AMsqnu/djzisH1KVWNzbb7LSgIVtMlPSg==} + 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==} @@ -1683,10 +1532,6 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-xml-parser@5.3.5: - resolution: {integrity: sha512-JeaA2Vm9ffQKp9VjvfzObuMCjUYAp5WDYhRYL5LrBPY/jUDlUtOvDfot0vKSkB9tuX885BDHjtw4fZadD95wnA==} - hasBin: true - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -1696,14 +1541,14 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - find-replace@3.0.0: - resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} - engines: {node: '>=4.0.0'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1712,8 +1557,12 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} @@ -1731,16 +1580,16 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - globals@17.4.0: - resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} + globals@17.6.0: + resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} engines: {node: '>=18'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + https-proxy-agent@9.0.0: + resolution: {integrity: sha512-/MVmHp58WkOypgFhCLk4fzpPcFQvTJ/e6LBI7irpIO2HfxUbpmYoHF+KzipzJpxxzJu7aJNWQ0xojJ/dzV2G5g==} + engines: {node: '>= 20'} iceberg-js@0.8.1: resolution: {integrity: sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==} @@ -1761,6 +1610,9 @@ packages: 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'} @@ -1779,8 +1631,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true json-buffer@3.0.1: @@ -1895,9 +1747,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -1909,17 +1758,25 @@ packages: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true - miniflare@4.20260317.2: - resolution: {integrity: sha512-qNL+yWAFMX6fr0pWU6Lx1vNpPobpnDSF1V8eunIckWvoIQl8y1oBjL2RJFEGY3un+l3f9gwW9dirDPP26usYJQ==} - engines: {node: '>=18.0.0'} + miniflare@4.20260515.0: + resolution: {integrity: sha512-2j0oQWizk1Eu4Cm8tDX7Z+Nsjd0nebIj1TQcQ+Oy1QKeo0Ay9+bdn8wfLAtOj9znDCybDCUlnS1+nYvKXEdfNg==} + engines: {node: '>=22.0.0'} hasBin: true - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - mlly@1.8.0: - resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} @@ -1932,16 +1789,29 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + 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-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-releases@2.0.44: + resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} + + npm-normalize-package-bin@5.0.0: + resolution: {integrity: sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==} + engines: {node: ^20.17.0 || >=22.9.0} nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -1981,10 +1851,6 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -1992,8 +1858,8 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} postcss-load-config@3.1.4: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} @@ -2030,26 +1896,22 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.5.9: - resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-svelte@3.5.1: - resolution: {integrity: sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg==} + prettier-plugin-svelte@3.5.2: + resolution: {integrity: sha512-ItFouLvzSFE3ulNl4DKoWM3BGcbDCNVpIyy/Y3F2gC3aNiGLxtFUdffVqO5Z5hhYG+DFT5KULWaxmeFFpdbvaQ==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 - prettier-plugin-tailwindcss@0.7.2: - resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} + prettier-plugin-tailwindcss@0.8.0: + resolution: {integrity: sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==} engines: {node: '>=20.19'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -2103,11 +1965,15 @@ packages: prettier-plugin-svelte: optional: true - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} hasBin: true + proc-log@6.1.0: + resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} + engines: {node: ^20.17.0 || >=22.9.0} + proxy-compare@3.0.1: resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} @@ -2118,28 +1984,23 @@ packages: quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + read-cmd-shim@6.0.0: + resolution: {integrity: sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A==} + engines: {node: ^20.17.0 || >=22.9.0} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} - reduce-flatten@2.0.0: - resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} - engines: {node: '>=6'} - regexparam@3.0.0: resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} engines: {node: '>=8'} - rolldown@1.0.0-rc.12: - resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} + rolldown@1.0.1: + resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - runed@0.28.0: resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==} peerDependencies: @@ -2161,13 +2022,13 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} engines: {node: '>=10'} hasBin: true - set-cookie-parser@3.0.1: - resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} + set-cookie-parser@3.1.0: + resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} @@ -2184,6 +2045,10 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -2208,14 +2073,16 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - std-env@4.0.0: - resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - strnum@2.1.2: - resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} + supabase@2.98.2: + resolution: {integrity: sha512-COSz57JyuUGbj75GSGM5mmyz/behBiYSiJ4A9qJVVC/vNp9bYS+9RCTXBtEt8kgqDDYWZsOmzk+mPbIBdr9bPg==} + engines: {npm: '>=8'} + hasBin: true - super-sitemap@1.0.7: - resolution: {integrity: sha512-fXUphLw0Tss29/SFP2irhWLNUCRbBNMf/XSsncvKpEM++CThfaPT8Bis3973RIb7KatiJAVfJtFH7xPyCp1AYw==} + super-sitemap@1.0.12: + resolution: {integrity: sha512-C3gfAS1RZxL5bbZGtgnIOitMhfqAt8RmhW8AWTia6c8n9RW3Zx7f/SxVeFWZD0I1nUAx2pkxuWazVtev0Nmb5w==} peerDependencies: svelte: '>=4.0.0 <6.0.0' @@ -2223,21 +2090,17 @@ packages: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - svelte-check@4.4.5: - resolution: {integrity: sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==} + svelte-check@4.4.8: + resolution: {integrity: sha512-67adfgBox5eNSNIvIIwgFizKGdcRrGpiMoNO2obHcYuLz7iTa8Xgm/NGU3ntMFnNm8K1grFOIG6HhMLX/vcN8w==} 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.4.1: - resolution: {integrity: sha512-1eqkfQ93goAhjAXxZiu1SaKI9+0/sxp4JIWQwUpsz7ybehRE5L8dNuz7Iry7K22R47p5/+s9EM+38nHV2OlgXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.24.0} + svelte-eslint-parser@1.6.1: + resolution: {integrity: sha512-hhvSH6kRj46UzrBVO5TaotD+Iuvruj5ccKBcO4wAhVcPTLmIc/c32D8UllBTYO0on4LzYuM0rNzf1lM/gBlkSQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.33.0} peerDependencies: svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: @@ -2252,51 +2115,47 @@ packages: svelte-search@2.1.2: resolution: {integrity: sha512-NBVyj3RhWeDaE9rfwNRhm3jmMzw7gpkslLhurhD9nL3SQzfK3uo9D53IQpPAoWIt9cvPWoRGR3x1xcfolFAu4g==} - svelte-sonner@1.1.0: - resolution: {integrity: sha512-3lYM6ZIqWe+p9vwwWHGWP/ZdvHiUtzURsud2quIxivrX4rvpXh6i+geBGn0m3JS6KwW6W8VgbOl3xQMcDuh6gg==} + svelte-sonner@1.1.1: + resolution: {integrity: sha512-5cd3p7wa4cq0NsqslMwdlPb7x1JglEZ/GKrLePWNr5bCxR1nagAVrY01FRFrXfUGs41miLt3C327+8XJo5BzZw==} peerDependencies: svelte: ^5.0.0 - svelte@5.55.0: - resolution: {integrity: sha512-SThllKq6TRMBwPtat7ASnm/9CDXnIhBR0NPGw0ujn2DVYx9rVwsPZxDaDQcYGdUz/3BYVsCzdq7pZarRQoGvtw==} + svelte@5.55.7: + resolution: {integrity: sha512-ymI5ykLPwIHW839E053FQbI1G+jnRFJEw3Kv5Y4njixVWywQBx+NUFpkkKyk5LIb36Fg9DVXSYpqiGekLD0hyw==} engines: {node: '>=18'} - table-layout@1.0.2: - resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} - engines: {node: '>=8.0.0'} - - tailwindcss@4.2.2: - resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} + tar@7.5.13: + resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} + engines: {node: '>=18'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.16: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2308,38 +2167,30 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.57.2: - resolution: {integrity: sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==} + typescript-eslint@8.59.3: + resolution: {integrity: sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==} 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.0.0' + typescript: '>=4.8.4 <6.1.0' typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - typical@4.0.0: - resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} - engines: {node: '>=8'} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} - typical@5.2.0: - resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} - engines: {node: '>=8'} - - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - undici@7.24.4: - resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} + undici@7.24.8: + resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==} engines: {node: '>=20.18.1'} - undici@8.1.0: - resolution: {integrity: sha512-E9MkTS4xXLnRPYqxH2e6Hr2/49e7WFDKczKcCaFH4VaZs2iNvHMqeIkyUAD9vM8kujy9TjVrRlQ5KkdEJxB2pw==} + undici@8.3.0: + resolution: {integrity: sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q==} engines: {node: '>=22.19.0'} unenv@2.0.0-rc.24: @@ -2388,13 +2239,13 @@ packages: peerDependencies: vite: '>=3' - vite@8.0.5: - resolution: {integrity: sha512-nmu43Qvq9UopTRfMx2jOYW5l16pb3iDC1JH6yMuPkpVbzK0k+L7dfsEDH4jRgYFmsg0sTAqkojoZgzLMlwHsCQ==} + vite@8.0.13: + resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.0 + '@vitejs/devtools': ^0.1.18 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -2431,26 +2282,28 @@ packages: yaml: optional: true - vitefu@1.1.2: - resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} + 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-beta.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: vite: optional: true - vitest@4.1.1: - resolution: {integrity: sha512-yF+o4POL41rpAzj5KVILUxm1GCjKnELvaqmU9TLLUbMfDzuN0UpUR9uaDs+mCtjPe+uYPksXDRLQGGPvj1cTmA==} + vitest@4.1.6: + resolution: {integrity: sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==} 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.1 - '@vitest/browser-preview': 4.1.1 - '@vitest/browser-webdriverio': 4.1.1 - '@vitest/ui': 4.1.1 + '@vitest/browser-playwright': 4.1.6 + '@vitest/browser-preview': 4.1.6 + '@vitest/browser-webdriverio': 4.1.6 + '@vitest/coverage-istanbul': 4.1.6 + '@vitest/coverage-v8': 4.1.6 + '@vitest/ui': 4.1.6 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2467,6 +2320,10 @@ packages: optional: true '@vitest/browser-webdriverio': optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true '@vitest/ui': optional: true happy-dom: @@ -2474,6 +2331,10 @@ packages: jsdom: optional: true + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -2491,12 +2352,8 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wordwrapjs@4.0.1: - resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} - engines: {node: '>=8.0.0'} - - workerd@1.20260317.1: - resolution: {integrity: sha512-ZuEq1OdrJBS+NV+L5HMYPCzVn49a2O60slQiiLpG44jqtlOo+S167fWC76kEXteXLLLydeuRrluRel7WdOUa4g==} + workerd@1.20260515.1: + resolution: {integrity: sha512-MjKOJLcvU45xXedQowvuiHtJTxu4WTHYQeIlF7YmjuqhiI6dImTFxWCEoRQHiskztxuVSNEmdO7/0UfDu6OMnQ==} engines: {node: '>=16'} hasBin: true @@ -2504,16 +2361,20 @@ packages: resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} engines: {node: '>=12'} - wrangler@4.77.0: - resolution: {integrity: sha512-E2Gm69+K++BFd3QvoWjC290RPQj1vDOUotA++sNHmtKPb7EP6C8Qv+1D5Ii73tfZtyNgakpqHlh8lBBbVWTKAQ==} - engines: {node: '>=20.3.0'} + wrangler@4.92.0: + resolution: {integrity: sha512-/DKpQHPxkuZbQsO9dFW2700VTD/4DSZMHjy92fO/frNoDRi/zQsFCAd2ONCV6TGqcUoXcP3D8Bo2gj/L4M0qQQ==} + engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20260317.1 + '@cloudflare/workers-types': ^4.20260515.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true + write-file-atomic@7.0.1: + resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} + engines: {node: ^20.17.0 || >=22.9.0} + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -2526,27 +2387,14 @@ packages: utf-8-validate: optional: true - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} - 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 + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -2560,57 +2408,57 @@ packages: zimmerframe@1.1.4: resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} snapshots: '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 - tinyexec: 1.0.2 + tinyexec: 1.1.2 - '@cloudflare/kv-asset-handler@0.4.2': {} + '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/unenv-preset@2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260317.1)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260515.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260317.1 + workerd: 1.20260515.1 - '@cloudflare/workerd-darwin-64@1.20260317.1': + '@cloudflare/workerd-darwin-64@1.20260515.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260317.1': + '@cloudflare/workerd-darwin-arm64@1.20260515.1': optional: true - '@cloudflare/workerd-linux-64@1.20260317.1': + '@cloudflare/workerd-linux-64@1.20260515.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260317.1': + '@cloudflare/workerd-linux-arm64@1.20260515.1': optional: true - '@cloudflare/workerd-windows-64@1.20260317.1': + '@cloudflare/workerd-windows-64@1.20260515.1': optional: true - '@cloudflare/workers-types@4.20260210.0': {} + '@cloudflare/workers-types@4.20260515.1': {} '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/core@1.9.0': + '@emnapi/core@1.10.0': dependencies: - '@emnapi/wasi-threads': 1.2.0 + '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.8.1': + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.0': + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true @@ -2693,54 +2541,59 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.7.0))': dependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.3': + '@eslint/config-array@0.23.5': dependencies: - '@eslint/object-schema': 3.0.3 + '@eslint/object-schema': 3.0.5 debug: 4.4.3(supports-color@10.2.2) - minimatch: 10.2.4 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.3': + '@eslint/config-helpers@0.5.5': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.1 - '@eslint/core@1.1.1': + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/object-schema@3.0.3': {} + '@eslint/object-schema@3.0.5': {} - '@eslint/plugin-kit@0.6.1': + '@eslint/plugin-kit@0.7.1': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.1 levn: 0.4.1 - '@floating-ui/core@1.7.4': + '@floating-ui/core@1.7.5': dependencies: - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.11 - '@floating-ui/dom@1.7.5': + '@floating-ui/dom@1.7.6': dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 - '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.11': {} - '@humanfs/core@0.19.1': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.7': + '@humanfs/node@0.16.8': dependencies: - '@humanfs/core': 0.19.1 + '@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': {} @@ -2761,7 +2614,7 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/lucide@1.2.99': + '@iconify-json/lucide@1.2.107': dependencies: '@iconify/types': 2.0.0 @@ -2769,19 +2622,19 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/vscode-icons@1.2.45': + '@iconify-json/vscode-icons@1.2.49': dependencies: '@iconify/types': 2.0.0 '@iconify/types@2.0.0': {} - '@iconify/utils@3.1.0': + '@iconify/utils@3.1.3': dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/types': 2.0.0 - mlly: 1.8.0 + import-meta-resolve: 4.2.0 - '@img/colour@1.0.0': {} + '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: @@ -2865,7 +2718,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.8.1 + '@emnapi/runtime': 1.10.0 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -2879,7 +2732,11 @@ snapshots: '@internationalized/date@3.12.0': dependencies: - '@swc/helpers': 0.5.18 + '@swc/helpers': 0.5.21 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.3 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -2907,23 +2764,23 @@ snapshots: '@macfja/serializer@1.1.4': {} - '@macfja/svelte-persistent-store@2.4.2(svelte@5.55.0)': + '@macfja/svelte-persistent-store@2.4.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))': dependencies: '@macfja/serializer': 1.1.4 browser-cookies: 1.2.0 idb-keyval: 6.2.2 sjcl-codec-hex: 1.0.0 sjcl-es: 2.0.0 - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - '@napi-rs/wasm-runtime@1.1.3(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)': + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 optional: true - '@oxc-project/types@0.122.0': {} + '@oxc-project/types@0.130.0': {} '@polka/url@1.0.0-next.29': {} @@ -2939,371 +2796,285 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@rolldown/binding-android-arm64@1.0.0-rc.12': + '@rolldown/binding-android-arm64@1.0.1': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + '@rolldown/binding-darwin-arm64@1.0.1': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.12': + '@rolldown/binding-darwin-x64@1.0.1': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + '@rolldown/binding-freebsd-x64@1.0.1': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + '@rolldown/binding-linux-arm-gnueabihf@1.0.1': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-arm64-gnu@1.0.1': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + '@rolldown/binding-linux-arm64-musl@1.0.1': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-ppc64-gnu@1.0.1': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-s390x-gnu@1.0.1': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-x64-gnu@1.0.1': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + '@rolldown/binding-linux-x64-musl@1.0.1': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + '@rolldown/binding-openharmony-arm64@1.0.1': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)': + '@rolldown/binding-wasm32-wasi@1.0.1': dependencies: - '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + '@rolldown/binding-win32-arm64-msvc@1.0.1': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + '@rolldown/binding-win32-x64-msvc@1.0.1': optional: true - '@rolldown/pluginutils@1.0.0-rc.12': {} + '@rolldown/pluginutils@1.0.1': {} - '@rollup/pluginutils@5.3.0(rollup@4.57.1)': + '@rollup/pluginutils@5.3.0': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 - optionalDependencies: - rollup: 4.57.1 - - '@rollup/rollup-android-arm-eabi@4.57.1': - optional: true - - '@rollup/rollup-android-arm64@4.57.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.57.1': - optional: true - - '@rollup/rollup-darwin-x64@4.57.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.57.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.57.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.57.1': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.57.1': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.57.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.57.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.57.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.57.1': - optional: true - - '@rollup/rollup-openbsd-x64@4.57.1': - optional: true - - '@rollup/rollup-openharmony-arm64@4.57.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.57.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.57.1': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.57.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.57.1': - optional: true '@sindresorhus/is@7.2.0': {} - '@skeletonlabs/skeleton-common@4.13.0': {} + '@skeletonlabs/skeleton-common@4.15.2': {} - '@skeletonlabs/skeleton-svelte@4.13.0(svelte@5.55.0)': + '@skeletonlabs/skeleton-svelte@4.15.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))': dependencies: '@internationalized/date': 3.12.0 - '@skeletonlabs/skeleton-common': 4.13.0 - '@zag-js/accordion': 1.35.3 - '@zag-js/avatar': 1.35.3 - '@zag-js/carousel': 1.35.3 - '@zag-js/collapsible': 1.35.3 - '@zag-js/collection': 1.35.3 - '@zag-js/combobox': 1.35.3 - '@zag-js/date-picker': 1.35.3(@internationalized/date@3.12.0) - '@zag-js/dialog': 1.35.3 - '@zag-js/file-upload': 1.35.3 - '@zag-js/floating-panel': 1.35.3 - '@zag-js/listbox': 1.35.3 - '@zag-js/menu': 1.35.3 - '@zag-js/pagination': 1.35.3 - '@zag-js/popover': 1.35.3 - '@zag-js/progress': 1.35.3 - '@zag-js/radio-group': 1.35.3 - '@zag-js/rating-group': 1.35.3 - '@zag-js/slider': 1.35.3 - '@zag-js/steps': 1.35.3 - '@zag-js/svelte': 1.35.3(svelte@5.55.0) - '@zag-js/switch': 1.35.3 - '@zag-js/tabs': 1.35.3 - '@zag-js/tags-input': 1.35.3 - '@zag-js/toast': 1.35.3 - '@zag-js/toggle-group': 1.35.3 - '@zag-js/tooltip': 1.35.3 - '@zag-js/tree-view': 1.35.3 - svelte: 5.55.0 - - '@skeletonlabs/skeleton@4.13.0(tailwindcss@4.2.2)': - dependencies: - tailwindcss: 4.2.2 - - '@speed-highlight/core@1.2.14': {} + '@skeletonlabs/skeleton-common': 4.15.2 + '@zag-js/accordion': 1.39.1 + '@zag-js/avatar': 1.39.1 + '@zag-js/carousel': 1.39.1 + '@zag-js/collapsible': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/combobox': 1.39.1 + '@zag-js/date-picker': 1.39.1(@internationalized/date@3.12.0) + '@zag-js/dialog': 1.39.1 + '@zag-js/file-upload': 1.39.1 + '@zag-js/floating-panel': 1.39.1 + '@zag-js/listbox': 1.39.1 + '@zag-js/menu': 1.39.1 + '@zag-js/pagination': 1.39.1 + '@zag-js/popover': 1.39.1 + '@zag-js/progress': 1.39.1 + '@zag-js/radio-group': 1.39.1 + '@zag-js/rating-group': 1.39.1 + '@zag-js/slider': 1.39.1 + '@zag-js/steps': 1.39.1 + '@zag-js/svelte': 1.39.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + '@zag-js/switch': 1.39.1 + '@zag-js/tabs': 1.39.1 + '@zag-js/tags-input': 1.39.1 + '@zag-js/toast': 1.39.1 + '@zag-js/toggle-group': 1.39.1 + '@zag-js/tooltip': 1.39.1 + '@zag-js/tree-view': 1.39.1 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + + '@skeletonlabs/skeleton@4.15.2(tailwindcss@4.3.0)': + dependencies: + tailwindcss: 4.3.0 + + '@speed-highlight/core@1.2.15': {} '@standard-schema/spec@1.1.0': {} - '@supabase/auth-js@2.100.0': + '@supabase/auth-js@2.105.4': dependencies: tslib: 2.8.1 - '@supabase/functions-js@2.100.0': + '@supabase/functions-js@2.105.4': dependencies: tslib: 2.8.1 - '@supabase/phoenix@0.4.0': {} + '@supabase/phoenix@0.4.2': {} - '@supabase/postgrest-js@2.100.0': + '@supabase/postgrest-js@2.105.4': dependencies: tslib: 2.8.1 - '@supabase/realtime-js@2.100.0': + '@supabase/realtime-js@2.105.4': dependencies: - '@supabase/phoenix': 0.4.0 - '@types/ws': 8.18.1 + '@supabase/phoenix': 0.4.2 tslib: 2.8.1 - ws: 8.19.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - '@supabase/ssr@0.9.0(@supabase/supabase-js@2.100.0)': + '@supabase/ssr@0.10.3(@supabase/supabase-js@2.105.4)': dependencies: - '@supabase/supabase-js': 2.100.0 + '@supabase/supabase-js': 2.105.4 cookie: 1.1.1 - '@supabase/storage-js@2.100.0': + '@supabase/storage-js@2.105.4': dependencies: iceberg-js: 0.8.1 tslib: 2.8.1 - '@supabase/supabase-js@2.100.0': + '@supabase/supabase-js@2.105.4': dependencies: - '@supabase/auth-js': 2.100.0 - '@supabase/functions-js': 2.100.0 - '@supabase/postgrest-js': 2.100.0 - '@supabase/realtime-js': 2.100.0 - '@supabase/storage-js': 2.100.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + '@supabase/auth-js': 2.105.4 + '@supabase/functions-js': 2.105.4 + '@supabase/postgrest-js': 2.105.4 + '@supabase/realtime-js': 2.105.4 + '@supabase/storage-js': 2.105.4 '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': dependencies: acorn: 8.16.0 - '@sveltejs/adapter-auto@7.0.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))': + '@sveltejs/adapter-auto@7.0.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))': dependencies: - '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + '@sveltejs/kit': 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) - '@sveltejs/adapter-cloudflare@7.2.8(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(wrangler@4.77.0)': + '@sveltejs/adapter-cloudflare@7.2.8(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(wrangler@4.92.0(@cloudflare/workers-types@4.20260515.1))': dependencies: - '@cloudflare/workers-types': 4.20260210.0 - '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + '@cloudflare/workers-types': 4.20260515.1 + '@sveltejs/kit': 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) worktop: 0.8.0-next.18 - wrangler: 4.77.0 + wrangler: 4.92.0(@cloudflare/workers-types@4.20260515.1) - '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(rollup@4.57.1)(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1))': + '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) magic-string: 0.30.21 sharp: 0.34.5 - svelte: 5.55.0 - svelte-parse-markup: 0.1.5(svelte@5.55.0) - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) - vite-imagetools: 9.0.3(rollup@4.57.1) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte-parse-markup: 0.1.5(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) + vite-imagetools: 9.0.3 zimmerframe: 1.1.4 transitivePeerDependencies: - rollup - '@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1))': + '@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 - devalue: 5.6.4 + 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.0.1 + set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.55.0 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) optionalDependencies: typescript: 6.0.3 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1))': + '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.55.0 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) - vitefu: 1.1.2(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) + vitefu: 1.1.3(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) - '@swc/helpers@0.5.18': + '@swc/helpers@0.5.21': dependencies: tslib: 2.8.1 - '@tailwindcss/forms@0.5.11(tailwindcss@4.2.2)': + '@tailwindcss/forms@0.5.11(tailwindcss@4.3.0)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 4.2.2 + tailwindcss: 4.3.0 - '@tailwindcss/node@4.2.2': + '@tailwindcss/node@4.3.0': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.19.0 - jiti: 2.6.1 + enhanced-resolve: 5.21.3 + jiti: 2.7.0 lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.2.2 + tailwindcss: 4.3.0 - '@tailwindcss/oxide-android-arm64@4.2.2': + '@tailwindcss/oxide-android-arm64@4.3.0': optional: true - '@tailwindcss/oxide-darwin-arm64@4.2.2': + '@tailwindcss/oxide-darwin-arm64@4.3.0': optional: true - '@tailwindcss/oxide-darwin-x64@4.2.2': + '@tailwindcss/oxide-darwin-x64@4.3.0': optional: true - '@tailwindcss/oxide-freebsd-x64@4.2.2': + '@tailwindcss/oxide-freebsd-x64@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.2.2': + '@tailwindcss/oxide-linux-x64-musl@4.3.0': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.2.2': + '@tailwindcss/oxide-wasm32-wasi@4.3.0': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': optional: true - '@tailwindcss/oxide@4.2.2': + '@tailwindcss/oxide@4.3.0': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-x64': 4.2.2 - '@tailwindcss/oxide-freebsd-x64': 4.2.2 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-x64-musl': 4.2.2 - '@tailwindcss/oxide-wasm32-wasi': 4.2.2 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - - '@tailwindcss/typography@0.5.19(tailwindcss@4.2.2)': + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 + + '@tailwindcss/typography@0.5.19(tailwindcss@4.3.0)': dependencies: postcss-selector-parser: 6.0.10 - tailwindcss: 4.2.2 + tailwindcss: 4.3.0 - '@tailwindcss/vite@4.2.2(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1))': + '@tailwindcss/vite@4.3.0(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0))': dependencies: - '@tailwindcss/node': 4.2.2 - '@tailwindcss/oxide': 4.2.2 - tailwindcss: 4.2.2 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 + vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true @@ -3319,489 +3090,483 @@ snapshots: '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} '@types/json-schema@7.0.15': {} - '@types/node@25.2.3': + '@types/node@25.8.0': dependencies: - undici-types: 7.16.0 + undici-types: 7.24.6 '@types/nprogress@0.2.3': {} '@types/trusted-types@2.0.7': {} - '@types/ws@8.18.1': - dependencies: - '@types/node': 25.2.3 - - '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.57.2 - eslint: 10.1.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/type-utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.3 + eslint: 10.3.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@6.0.3) + ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3(supports-color@10.2.2) - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.2(typescript@6.0.3)': + '@typescript-eslint/project-service@8.59.3(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.3) - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3) + '@typescript-eslint/types': 8.59.3 debug: 4.4.3(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.2': + '@typescript-eslint/scope-manager@8.59.3': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 - '@typescript-eslint/tsconfig-utils@8.57.2(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.59.3(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3(supports-color@10.2.2) - eslint: 10.1.0(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@6.0.3) + eslint: 10.3.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.57.1': {} - - '@typescript-eslint/types@8.57.2': {} + '@typescript-eslint/types@8.59.3': {} - '@typescript-eslint/typescript-estree@8.57.2(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.59.3(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.57.2(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.3) - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/project-service': 8.59.3(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3(supports-color@10.2.2) - minimatch: 10.2.4 - semver: 7.7.4 + minimatch: 10.2.5 + semver: 7.8.0 tinyglobby: 0.2.16 - ts-api-utils: 2.4.0(typescript@6.0.3) + ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/utils@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.3) - eslint: 10.1.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.2': + '@typescript-eslint/visitor-keys@8.59.3': dependencies: - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/types': 8.59.3 eslint-visitor-keys: 5.0.1 - '@vitest/expect@4.1.1': + '@vitest/expect@4.1.6': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.1 - '@vitest/utils': 4.1.1 + '@vitest/spy': 4.1.6 + '@vitest/utils': 4.1.6 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1))': + '@vitest/mocker@4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0))': dependencies: - '@vitest/spy': 4.1.1 + '@vitest/spy': 4.1.6 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) + vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) - '@vitest/pretty-format@4.1.1': + '@vitest/pretty-format@4.1.6': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@vitest/runner@4.1.1': + '@vitest/runner@4.1.6': dependencies: - '@vitest/utils': 4.1.1 + '@vitest/utils': 4.1.6 pathe: 2.0.3 - '@vitest/snapshot@4.1.1': + '@vitest/snapshot@4.1.6': dependencies: - '@vitest/pretty-format': 4.1.1 - '@vitest/utils': 4.1.1 + '@vitest/pretty-format': 4.1.6 + '@vitest/utils': 4.1.6 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.1': {} + '@vitest/spy@4.1.6': {} - '@vitest/utils@4.1.1': + '@vitest/utils@4.1.6': dependencies: - '@vitest/pretty-format': 4.1.1 + '@vitest/pretty-format': 4.1.6 convert-source-map: 2.0.0 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@zag-js/accordion@1.35.3': + '@zag-js/accordion@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/anatomy@1.35.3': {} + '@zag-js/anatomy@1.39.1': {} - '@zag-js/aria-hidden@1.35.3': + '@zag-js/aria-hidden@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 + '@zag-js/dom-query': 1.39.1 - '@zag-js/auto-resize@1.35.3': + '@zag-js/auto-resize@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 + '@zag-js/dom-query': 1.39.1 - '@zag-js/avatar@1.35.3': + '@zag-js/avatar@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/carousel@1.35.3': + '@zag-js/carousel@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/scroll-snap': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/scroll-snap': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/collapsible@1.35.3': + '@zag-js/collapsible@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/collection@1.35.3': + '@zag-js/collection@1.39.1': dependencies: - '@zag-js/utils': 1.35.3 + '@zag-js/utils': 1.39.1 - '@zag-js/combobox@1.35.3': + '@zag-js/combobox@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/aria-hidden': 1.35.3 - '@zag-js/collection': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dismissable': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-visible': 1.35.3 - '@zag-js/popper': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/live-region': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/core@1.35.3': + '@zag-js/core@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/dom-query': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/date-picker@1.35.3(@internationalized/date@3.12.0)': + '@zag-js/date-picker@1.39.1(@internationalized/date@3.12.0)': dependencies: '@internationalized/date': 3.12.0 - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/date-utils': 1.35.3(@internationalized/date@3.12.0) - '@zag-js/dismissable': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/live-region': 1.35.3 - '@zag-js/popper': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 - - '@zag-js/date-utils@1.35.3(@internationalized/date@3.12.0)': + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/date-utils': 1.39.1(@internationalized/date@3.12.0) + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/live-region': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/date-utils@1.39.1(@internationalized/date@3.12.0)': dependencies: '@internationalized/date': 3.12.0 - '@zag-js/dialog@1.35.3': + '@zag-js/dialog@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/aria-hidden': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dismissable': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-trap': 1.35.3 - '@zag-js/remove-scroll': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/aria-hidden': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-trap': 1.39.1 + '@zag-js/remove-scroll': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/dismissable@1.35.3': + '@zag-js/dismissable@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 - '@zag-js/interact-outside': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/dom-query': 1.39.1 + '@zag-js/interact-outside': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/dom-query@1.35.3': + '@zag-js/dom-query@1.39.1': dependencies: - '@zag-js/types': 1.35.3 + '@zag-js/types': 1.39.1 - '@zag-js/file-upload@1.35.3': + '@zag-js/file-upload@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/file-utils': 1.35.3 - '@zag-js/i18n-utils': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/file-utils': 1.39.1 + '@zag-js/i18n-utils': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/file-utils@1.35.3': + '@zag-js/file-utils@1.39.1': dependencies: - '@zag-js/i18n-utils': 1.35.3 + '@zag-js/i18n-utils': 1.39.1 - '@zag-js/floating-panel@1.35.3': + '@zag-js/floating-panel@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/popper': 1.35.3 - '@zag-js/rect-utils': 1.35.3 - '@zag-js/store': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/rect-utils': 1.39.1 + '@zag-js/store': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/focus-trap@1.35.3': + '@zag-js/focus-trap@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 + '@zag-js/dom-query': 1.39.1 - '@zag-js/focus-visible@1.35.3': + '@zag-js/focus-visible@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 + '@zag-js/dom-query': 1.39.1 - '@zag-js/i18n-utils@1.35.3': + '@zag-js/i18n-utils@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 + '@zag-js/dom-query': 1.39.1 - '@zag-js/interact-outside@1.35.3': + '@zag-js/interact-outside@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/dom-query': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/listbox@1.35.3': + '@zag-js/listbox@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/collection': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-visible': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/live-region@1.35.3': {} + '@zag-js/live-region@1.39.1': {} - '@zag-js/menu@1.35.3': + '@zag-js/menu@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dismissable': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-visible': 1.35.3 - '@zag-js/popper': 1.35.3 - '@zag-js/rect-utils': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/rect-utils': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/pagination@1.35.3': + '@zag-js/pagination@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/popover@1.35.3': + '@zag-js/popover@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/aria-hidden': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dismissable': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-trap': 1.35.3 - '@zag-js/popper': 1.35.3 - '@zag-js/remove-scroll': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/aria-hidden': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-trap': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/remove-scroll': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/popper@1.35.3': + '@zag-js/popper@1.39.1': dependencies: - '@floating-ui/dom': 1.7.5 - '@zag-js/dom-query': 1.35.3 - '@zag-js/utils': 1.35.3 + '@floating-ui/dom': 1.7.6 + '@zag-js/dom-query': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/progress@1.35.3': + '@zag-js/progress@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/radio-group@1.35.3': + '@zag-js/radio-group@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-visible': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/rating-group@1.35.3': + '@zag-js/rating-group@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/rect-utils@1.35.3': {} + '@zag-js/rect-utils@1.39.1': {} - '@zag-js/remove-scroll@1.35.3': + '@zag-js/remove-scroll@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 + '@zag-js/dom-query': 1.39.1 - '@zag-js/scroll-snap@1.35.3': + '@zag-js/scroll-snap@1.39.1': dependencies: - '@zag-js/dom-query': 1.35.3 + '@zag-js/dom-query': 1.39.1 - '@zag-js/slider@1.35.3': + '@zag-js/slider@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/steps@1.35.3': + '@zag-js/steps@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/store@1.35.3': + '@zag-js/store@1.39.1': dependencies: proxy-compare: 3.0.1 - '@zag-js/svelte@1.35.3(svelte@5.55.0)': + '@zag-js/svelte@1.39.1(svelte@5.55.7(@typescript-eslint/types@8.59.3))': dependencies: - '@zag-js/core': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 - svelte: 5.55.0 + '@zag-js/core': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - '@zag-js/switch@1.35.3': + '@zag-js/switch@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-visible': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/tabs@1.35.3': + '@zag-js/tabs@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/tags-input@1.35.3': + '@zag-js/tags-input@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/auto-resize': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/interact-outside': 1.35.3 - '@zag-js/live-region': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/auto-resize': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/interact-outside': 1.39.1 + '@zag-js/live-region': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/toast@1.35.3': + '@zag-js/toast@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dismissable': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/toggle-group@1.35.3': + '@zag-js/toggle-group@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/tooltip@1.35.3': + '@zag-js/tooltip@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-visible': 1.35.3 - '@zag-js/popper': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/tree-view@1.35.3': + '@zag-js/tree-view@1.39.1': dependencies: - '@zag-js/anatomy': 1.35.3 - '@zag-js/collection': 1.35.3 - '@zag-js/core': 1.35.3 - '@zag-js/dom-query': 1.35.3 - '@zag-js/types': 1.35.3 - '@zag-js/utils': 1.35.3 + '@zag-js/anatomy': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 - '@zag-js/types@1.35.3': + '@zag-js/types@1.39.1': dependencies: csstype: 3.2.3 - '@zag-js/utils@1.35.3': {} + '@zag-js/utils@1.39.1': {} acorn-jsx@5.3.2(acorn@8.16.0): dependencies: @@ -3809,91 +3574,71 @@ snapshots: acorn@8.16.0: {} - ajv@6.14.0: + agent-base@9.0.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-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - aria-query@5.3.1: {} - array-back@3.1.0: {} - - array-back@4.0.2: {} - assertion-error@2.0.1: {} - autoprefixer@10.4.27(postcss@8.5.9): + autoprefixer@10.5.0(postcss@8.5.14): dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001776 + browserslist: 4.28.2 + caniuse-lite: 1.0.30001792 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.9 + postcss: 8.5.14 postcss-value-parser: 4.2.0 axobject-query@4.1.0: {} balanced-match@4.0.4: {} - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.29: {} + + bin-links@6.0.0: + dependencies: + cmd-shim: 8.0.0 + npm-normalize-package-bin: 5.0.0 + proc-log: 6.1.0 + read-cmd-shim: 6.0.0 + write-file-atomic: 7.0.1 blake3-wasm@2.1.5: {} - brace-expansion@5.0.3: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 browser-cookies@1.2.0: {} - browserslist@4.28.1: + browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001776 - electron-to-chromium: 1.5.286 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.10.29 + caniuse-lite: 1.0.30001792 + electron-to-chromium: 1.5.356 + node-releases: 2.0.44 + update-browserslist-db: 1.2.3(browserslist@4.28.2) - caniuse-lite@1.0.30001776: {} + caniuse-lite@1.0.30001792: {} chai@6.2.2: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chokidar@4.0.3: dependencies: readdirp: 4.1.2 - clsx@2.1.1: {} + chownr@3.0.0: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-name@1.1.3: {} - - command-line-args@5.2.1: - dependencies: - array-back: 3.1.0 - find-replace: 3.0.0 - lodash.camelcase: 4.3.0 - typical: 4.0.0 + clsx@2.1.1: {} - command-line-usage@6.1.3: - dependencies: - array-back: 4.0.2 - chalk: 2.4.2 - table-layout: 1.0.2 - typical: 5.2.0 + cmd-shim@8.0.0: {} confbox@0.1.8: {} @@ -3915,14 +3660,14 @@ snapshots: csstype@3.2.3: {} + data-uri-to-buffer@4.0.1: {} + debug@4.4.3(supports-color@10.2.2): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 10.2.2 - deep-extend@0.6.0: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -3931,23 +3676,18 @@ snapshots: detect-libc@2.1.2: {} - devalue@5.6.4: {} + devalue@5.8.1: {} - directory-tree@3.6.0: - dependencies: - command-line-args: 5.2.1 - command-line-usage: 6.1.3 + electron-to-chromium@1.5.356: {} - electron-to-chromium@1.5.286: {} - - enhanced-resolve@5.19.0: + enhanced-resolve@5.21.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.3 error-stack-parser-es@1.0.5: {} - es-module-lexer@2.0.0: {} + es-module-lexer@2.1.0: {} esbuild@0.27.3: optionalDependencies: @@ -3980,29 +3720,27 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) - eslint-plugin-svelte@3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.55.0): + eslint-plugin-svelte@3.17.1(eslint@10.3.0(jiti@2.7.0))(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.8 - postcss-load-config: 3.1.4(postcss@8.5.8) - postcss-safe-parser: 7.0.1(postcss@8.5.8) - semver: 7.7.4 - svelte-eslint-parser: 1.4.1(svelte@5.55.0) + postcss: 8.5.14 + postcss-load-config: 3.1.4(postcss@8.5.14) + postcss-safe-parser: 7.0.1(postcss@8.5.14) + semver: 7.8.0 + svelte-eslint-parser: 1.6.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) optionalDependencies: - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) transitivePeerDependencies: - ts-node @@ -4014,7 +3752,7 @@ snapshots: eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -4024,19 +3762,19 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.1.0(jiti@2.6.1): + eslint@10.3.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.3 - '@eslint/config-helpers': 0.5.3 - '@eslint/core': 1.1.1 - '@eslint/plugin-kit': 0.6.1 - '@humanfs/node': 0.16.7 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.5.5 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.1 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 + '@types/estree': 1.0.9 + ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@10.2.2) escape-string-regexp: 4.0.0 @@ -4053,11 +3791,11 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.4 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -4079,10 +3817,11 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.4: + esrap@2.2.8(@typescript-eslint/types@8.59.3): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - '@typescript-eslint/types': 8.57.1 + optionalDependencies: + '@typescript-eslint/types': 8.59.3 esrecurse@4.3.0: dependencies: @@ -4094,7 +3833,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -4108,25 +3847,18 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-xml-parser@5.3.5: - dependencies: - strnum: 2.1.2 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 - file-entry-cache@8.0.0: + fetch-blob@3.2.0: dependencies: - flat-cache: 4.0.1 + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 - find-replace@3.0.0: + file-entry-cache@8.0.0: dependencies: - array-back: 3.1.0 + flat-cache: 4.0.1 find-up@5.0.0: dependencies: @@ -4135,10 +3867,14 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.2: {} + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 fraction.js@5.3.4: {} @@ -4151,11 +3887,16 @@ snapshots: globals@16.5.0: {} - globals@17.4.0: {} + globals@17.6.0: {} graceful-fs@4.2.11: {} - has-flag@3.0.0: {} + https-proxy-agent@9.0.0: + dependencies: + agent-base: 9.0.0 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color iceberg-js@0.8.1: {} @@ -4167,6 +3908,8 @@ snapshots: imagetools-core@9.1.0: {} + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} is-extglob@2.1.1: {} @@ -4177,11 +3920,11 @@ snapshots: is-reference@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 isexe@2.0.0: {} - jiti@2.6.1: {} + jiti@2.7.0: {} json-buffer@3.0.1: {} @@ -4255,8 +3998,8 @@ snapshots: local-pkg@1.1.2: dependencies: - mlly: 1.8.0 - pkg-types: 2.3.0 + mlly: 1.8.2 + pkg-types: 2.3.1 quansync: 0.2.11 locate-character@3.0.0: {} @@ -4265,8 +4008,6 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.camelcase@4.3.0: {} - lz-string@1.5.0: {} magic-string@0.30.21: @@ -4275,28 +4016,34 @@ snapshots: mini-svg-data-uri@1.4.4: {} - miniflare@4.20260317.2: + miniflare@4.20260515.0: dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.34.5 - undici: 7.24.4 - workerd: 1.20260317.1 + undici: 7.24.8 + workerd: 1.20260515.1 ws: 8.18.0 youch: 4.1.0-beta.10 transitivePeerDependencies: - bufferutil - utf-8-validate - minimatch@10.2.4: + minimatch@10.2.5: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 5.0.6 + + minipass@7.1.3: {} - mlly@1.8.0: + minizlib@3.1.0: + dependencies: + minipass: 7.1.3 + + mlly@1.8.2: dependencies: acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.3 + ufo: 1.6.4 mri@1.2.0: {} @@ -4304,11 +4051,21 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.11: {} + nanoid@3.3.12: {} natural-compare@1.4.0: {} - node-releases@2.0.27: {} + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-releases@2.0.44: {} + + npm-normalize-package-bin@5.0.0: {} nprogress@0.2.0: {} @@ -4343,36 +4100,34 @@ snapshots: picocolors@1.1.1: {} - picomatch@4.0.3: {} - picomatch@4.0.4: {} pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.0 + mlly: 1.8.2 pathe: 2.0.3 - pkg-types@2.3.0: + pkg-types@2.3.1: dependencies: confbox: 0.2.4 exsolve: 1.0.8 pathe: 2.0.3 - postcss-load-config@3.1.4(postcss@8.5.8): + postcss-load-config@3.1.4(postcss@8.5.14): dependencies: lilconfig: 2.1.0 - yaml: 1.10.2 + yaml: 1.10.3 optionalDependencies: - postcss: 8.5.8 + postcss: 8.5.14 - postcss-safe-parser@7.0.1(postcss@8.5.8): + postcss-safe-parser@7.0.1(postcss@8.5.14): dependencies: - postcss: 8.5.8 + postcss: 8.5.14 - postcss-scss@4.0.9(postcss@8.5.8): + postcss-scss@4.0.9(postcss@8.5.14): dependencies: - postcss: 8.5.8 + postcss: 8.5.14 postcss-selector-parser@6.0.10: dependencies: @@ -4386,32 +4141,28 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.8: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.5.9: + postcss@8.5.14: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.55.0): + prettier-plugin-svelte@3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - prettier: 3.8.1 - svelte: 5.55.0 + prettier: 3.8.3 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - prettier-plugin-tailwindcss@0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.55.0))(prettier@3.8.1): + prettier-plugin-tailwindcss@0.8.0(prettier-plugin-svelte@3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)))(prettier@3.8.3): dependencies: - prettier: 3.8.1 + prettier: 3.8.3 optionalDependencies: - prettier-plugin-svelte: 3.5.1(prettier@3.8.1)(svelte@5.55.0) + prettier-plugin-svelte: 3.5.2(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - prettier@3.8.1: {} + prettier@3.8.3: {} + + proc-log@6.1.0: {} proxy-compare@3.0.1: {} @@ -4419,96 +4170,61 @@ snapshots: quansync@0.2.11: {} - readdirp@4.1.2: {} + read-cmd-shim@6.0.0: {} - reduce-flatten@2.0.0: {} + readdirp@4.1.2: {} regexparam@3.0.0: {} - rolldown@1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1): + rolldown@1.0.1: dependencies: - '@oxc-project/types': 0.122.0 - '@rolldown/pluginutils': 1.0.0-rc.12 + '@oxc-project/types': 0.130.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-x64': 1.0.0-rc.12 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1) - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - rollup@4.57.1: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 - fsevents: 2.3.3 - optional: true - - runed@0.28.0(svelte@5.55.0): + '@rolldown/binding-android-arm64': 1.0.1 + '@rolldown/binding-darwin-arm64': 1.0.1 + '@rolldown/binding-darwin-x64': 1.0.1 + '@rolldown/binding-freebsd-x64': 1.0.1 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.1 + '@rolldown/binding-linux-arm64-gnu': 1.0.1 + '@rolldown/binding-linux-arm64-musl': 1.0.1 + '@rolldown/binding-linux-ppc64-gnu': 1.0.1 + '@rolldown/binding-linux-s390x-gnu': 1.0.1 + '@rolldown/binding-linux-x64-gnu': 1.0.1 + '@rolldown/binding-linux-x64-musl': 1.0.1 + '@rolldown/binding-openharmony-arm64': 1.0.1 + '@rolldown/binding-wasm32-wasi': 1.0.1 + '@rolldown/binding-win32-arm64-msvc': 1.0.1 + '@rolldown/binding-win32-x64-msvc': 1.0.1 + + runed@0.28.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: esm-env: 1.2.2 - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - runed@0.37.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(zod@4.3.6): + runed@0.37.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(zod@4.4.3): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) optionalDependencies: - '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.0)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)))(svelte@5.55.0)(typescript@6.0.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) - zod: 4.3.6 + '@sveltejs/kit': 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) + zod: 4.4.3 sade@1.8.1: dependencies: mri: 1.2.0 - semver@7.7.4: {} + semver@7.8.0: {} - set-cookie-parser@3.0.1: {} + set-cookie-parser@3.1.0: {} sharp@0.34.5: dependencies: - '@img/colour': 1.0.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.0 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -4543,6 +4259,8 @@ snapshots: siginfo@2.0.0: {} + signal-exit@4.1.0: {} + sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 @@ -4563,105 +4281,105 @@ snapshots: stackback@0.0.2: {} - std-env@4.0.0: {} + std-env@4.1.0: {} - strnum@2.1.2: {} + supabase@2.98.2: + dependencies: + bin-links: 6.0.0 + https-proxy-agent: 9.0.0 + node-fetch: 3.3.2 + tar: 7.5.13 + transitivePeerDependencies: + - supports-color - super-sitemap@1.0.7(svelte@5.55.0): + super-sitemap@1.0.12(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - directory-tree: 3.6.0 - fast-xml-parser: 5.3.5 - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) supports-color@10.2.2: {} - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - svelte-check@4.4.5(picomatch@4.0.3)(svelte@5.55.0)(typescript@6.0.3): + svelte-check@4.4.8(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 - fdir: 6.5.0(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.4) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) typescript: 6.0.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.4.1(svelte@5.55.0): + svelte-eslint-parser@1.6.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.8 - postcss-scss: 4.0.9(postcss@8.5.8) + postcss: 8.5.14 + postcss-scss: 4.0.9(postcss@8.5.14) postcss-selector-parser: 7.1.1 + semver: 7.8.0 optionalDependencies: - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte-parse-markup@0.1.5(svelte@5.55.0): + svelte-parse-markup@0.1.5(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) svelte-search@2.1.2: {} - svelte-sonner@1.1.0(svelte@5.55.0): + svelte-sonner@1.1.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - runed: 0.28.0(svelte@5.55.0) - svelte: 5.55.0 + runed: 0.28.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte@5.55.0: + svelte@5.55.7(@typescript-eslint/types@8.59.3): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/trusted-types': 2.0.7 acorn: 8.16.0 aria-query: 5.3.1 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.6.4 + devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.4 + esrap: 2.2.8(@typescript-eslint/types@8.59.3) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' - table-layout@1.0.2: - dependencies: - array-back: 4.0.2 - deep-extend: 0.6.0 - typical: 5.2.0 - wordwrapjs: 4.0.1 + tailwindcss@4.3.0: {} - tailwindcss@4.2.2: {} + tapable@2.3.3: {} - tapable@2.3.0: {} + tar@7.5.13: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 tinybench@2.9.0: {} - tinyexec@1.0.2: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + tinyexec@1.1.2: {} tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - tinyrainbow@3.0.3: {} + tinyrainbow@3.1.0: {} totalist@3.0.1: {} - ts-api-utils@2.4.0(typescript@6.0.3): + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: typescript: 6.0.3 @@ -4671,44 +4389,40 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3): + typescript-eslint@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.3) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.1.0(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color typescript@6.0.3: {} - typical@4.0.0: {} + ufo@1.6.4: {} - typical@5.2.0: {} + undici-types@7.24.6: {} - ufo@1.6.3: {} + undici@7.24.8: {} - undici-types@7.16.0: {} - - undici@7.24.4: {} - - undici@8.1.0: {} + undici@8.3.0: {} unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 - unplugin-icons@23.0.1(svelte@5.55.0): + unplugin-icons@23.0.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: '@antfu/install-pkg': 1.1.0 - '@iconify/utils': 3.1.0 + '@iconify/utils': 3.1.3 local-pkg: 1.1.2 obug: 2.1.1 unplugin: 2.3.11 optionalDependencies: - svelte: 5.55.0 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) unplugin@2.3.11: dependencies: @@ -4717,9 +4431,9 @@ snapshots: picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -4729,69 +4443,67 @@ snapshots: util-deprecate@1.0.2: {} - vite-imagetools@9.0.3(rollup@4.57.1): + vite-imagetools@9.0.3: dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@rollup/pluginutils': 5.3.0 imagetools-core: 9.1.0 sharp: 0.34.5 transitivePeerDependencies: - rollup - vite-plugin-mkcert@2.0.0(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)): + vite-plugin-mkcert@2.0.0(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)): dependencies: debug: 4.4.3(supports-color@10.2.2) supports-color: 10.2.2 - undici: 8.1.0 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) + undici: 8.3.0 + vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) - vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1): + vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.9 - rolldown: 1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1) + postcss: 8.5.14 + rolldown: 1.0.1 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.2.3 + '@types/node': 25.8.0 esbuild: 0.27.3 fsevents: 2.3.3 - jiti: 2.6.1 - yaml: 2.6.1 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + jiti: 2.7.0 - vitefu@1.1.2(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)): + vitefu@1.1.3(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)): optionalDependencies: - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) - - vitest@4.1.1(@types/node@25.2.3)(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)): - dependencies: - '@vitest/expect': 4.1.1 - '@vitest/mocker': 4.1.1(vite@8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1)) - '@vitest/pretty-format': 4.1.1 - '@vitest/runner': 4.1.1 - '@vitest/snapshot': 4.1.1 - '@vitest/spy': 4.1.1 - '@vitest/utils': 4.1.1 - es-module-lexer: 2.0.0 + vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) + + vitest@4.1.6(@types/node@25.8.0)(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)): + dependencies: + '@vitest/expect': 4.1.6 + '@vitest/mocker': 4.1.6(vite@8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0)) + '@vitest/pretty-format': 4.1.6 + '@vitest/runner': 4.1.6 + '@vitest/snapshot': 4.1.6 + '@vitest/spy': 4.1.6 + '@vitest/utils': 4.1.6 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 4.0.0 + picomatch: 4.0.4 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 8.0.5(@emnapi/core@1.9.0)(@emnapi/runtime@1.8.1)(@types/node@25.2.3)(esbuild@0.27.3)(jiti@2.6.1)(yaml@2.6.1) + tinyexec: 1.1.2 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 8.0.13(@types/node@25.8.0)(esbuild@0.27.3)(jiti@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.2.3 + '@types/node': 25.8.0 transitivePeerDependencies: - msw + web-streams-polyfill@3.3.3: {} + webpack-virtual-modules@0.6.2: {} which@2.0.2: @@ -4805,48 +4517,45 @@ snapshots: word-wrap@1.2.5: {} - wordwrapjs@4.0.1: - dependencies: - reduce-flatten: 2.0.0 - typical: 5.2.0 - - workerd@1.20260317.1: + workerd@1.20260515.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260317.1 - '@cloudflare/workerd-darwin-arm64': 1.20260317.1 - '@cloudflare/workerd-linux-64': 1.20260317.1 - '@cloudflare/workerd-linux-arm64': 1.20260317.1 - '@cloudflare/workerd-windows-64': 1.20260317.1 + '@cloudflare/workerd-darwin-64': 1.20260515.1 + '@cloudflare/workerd-darwin-arm64': 1.20260515.1 + '@cloudflare/workerd-linux-64': 1.20260515.1 + '@cloudflare/workerd-linux-arm64': 1.20260515.1 + '@cloudflare/workerd-windows-64': 1.20260515.1 worktop@0.8.0-next.18: dependencies: mrmime: 2.0.1 regexparam: 3.0.0 - wrangler@4.77.0: + wrangler@4.92.0(@cloudflare/workers-types@4.20260515.1): dependencies: - '@cloudflare/kv-asset-handler': 0.4.2 - '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260317.1) + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260515.1) blake3-wasm: 2.1.5 esbuild: 0.27.3 - miniflare: 4.20260317.2 + miniflare: 4.20260515.0 path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260317.1 + workerd: 1.20260515.1 optionalDependencies: + '@cloudflare/workers-types': 4.20260515.1 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil - utf-8-validate - ws@8.18.0: {} + write-file-atomic@7.0.1: + dependencies: + signal-exit: 4.1.0 - ws@8.19.0: {} + ws@8.18.0: {} - yaml@1.10.2: {} + yallist@5.0.0: {} - yaml@2.6.1: - optional: true + yaml@1.10.3: {} yocto-queue@0.1.0: {} @@ -4859,10 +4568,10 @@ snapshots: dependencies: '@poppinss/colors': 4.1.6 '@poppinss/dumper': 0.6.5 - '@speed-highlight/core': 1.2.14 + '@speed-highlight/core': 1.2.15 cookie: 1.1.1 youch-core: 0.3.3 zimmerframe@1.1.4: {} - zod@4.3.6: {} + zod@4.4.3: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..b1697a7 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,5 @@ +allowBuilds: + esbuild: true + sharp: true + supabase: true + workerd: true diff --git a/src/app.css b/src/app.css index d1c0cc0..812f65c 100644 --- a/src/app.css +++ b/src/app.css @@ -1,13 +1,12 @@ @import 'tailwindcss'; +@import '@skeletonlabs/skeleton'; @import '@skeletonlabs/skeleton-svelte'; +@import '@skeletonlabs/skeleton/themes/cerberus'; @plugin '@tailwindcss/forms'; @plugin '@tailwindcss/typography'; -@import '@skeletonlabs/skeleton'; -@import '@skeletonlabs/skeleton/themes/cerberus'; - /* The default border color has changed to `currentcolor` in Tailwind CSS v4, so we've added these compatibility styles to make sure everything still diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 0c042ad..5fc5040 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -4,19 +4,29 @@ import { createServerClient } from '@supabase/ssr'; import type { Handle } from '@sveltejs/kit'; export const handle: Handle = async ({ event, resolve }) => { - event.locals.supabase = createServerClient(env.PUBLIC_SUPABASE_URL, secretEnv.SUPABASE_SERVICE_KEY, { + const supabaseUrl = env.PUBLIC_SUPABASE_URL; + const supabaseServiceKey = secretEnv.SUPABASE_SERVICE_KEY; + + if (!supabaseUrl || !supabaseServiceKey) { + throw new Error('Missing PUBLIC_SUPABASE_URL or SUPABASE_SERVICE_KEY'); + } + + event.locals.supabase = createServerClient(supabaseUrl, supabaseServiceKey, { cookies: { getAll() { return event.cookies.getAll(); }, - setAll(cookiesToSet) { + setAll(cookiesToSet, headers) { /** * Note: You have to add the `path` variable to the * set and remove method due to sveltekit's cookie API * requiring this to be set, setting the path to an empty string * will replicate previous/standard behavior (https://kit.svelte.dev/docs/types#public-types-cookies) + * + * Pass through `headers` from @supabase/ssr v0.10+ so token refresh responses are not CDN-cached. */ cookiesToSet.forEach(({ name, value, options }) => event.cookies.set(name, value, { ...options, path: '/' })); + event.setHeaders(headers); }, }, }); diff --git a/src/lib/components/Footer.svelte b/src/lib/components/Footer.svelte index aa3f0a0..665a83c 100644 --- a/src/lib/components/Footer.svelte +++ b/src/lib/components/Footer.svelte @@ -1,24 +1,20 @@ - - {@render children()} + + + +
+ + Home +
+
+ {@render children()} +
diff --git a/src/lib/components/Sidebar.svelte b/src/lib/components/Sidebar.svelte index 3197677..3201c19 100644 --- a/src/lib/components/Sidebar.svelte +++ b/src/lib/components/Sidebar.svelte @@ -1,34 +1,26 @@ - {#snippet header()} - + layout="rail" + class="sticky top-0 col-span-1 hidden h-screen lg:block" +> + +
- - Home + + Home
-
- {/snippet} - {#snippet tiles()} - {@render children()} - {/snippet} + + + + + {@render children()} + +
diff --git a/src/lib/rpc/searchSupabaseCards.remote.ts b/src/lib/rpc/searchSupabaseCards.remote.ts index 0b8012c..8402125 100644 --- a/src/lib/rpc/searchSupabaseCards.remote.ts +++ b/src/lib/rpc/searchSupabaseCards.remote.ts @@ -2,8 +2,16 @@ import { getRequestEvent, query } from '$app/server'; import { z } from 'zod'; export const searchSbCards = query(z.string(), async (name) => { - const { locals } = await getRequestEvent(); + const trimmed = name.trim(); + if (!trimmed) { + return []; + } - const { data } = await locals.supabase.rpc('search_cards', { card_name: name }); + const { locals } = getRequestEvent(); + const { data, error } = await locals.supabase.rpc('search_cards', { card_name: trimmed }); + if (error) { + console.error('error searching for cards', error); + return []; + } return data ?? []; }); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 0016204..979fe11 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -24,7 +24,7 @@ {/if} -
+
{@render children()} @@ -40,16 +40,16 @@ {#snippet NavTiles()} - +
- - Damage Calculator + + Damage Calculator
-
- -
- - Database + + +
+ + Card Search
- +
{/snippet} diff --git a/src/routes/database/+page.server.ts b/src/routes/database/+page.server.ts index 8bc44fe..deda310 100644 --- a/src/routes/database/+page.server.ts +++ b/src/routes/database/+page.server.ts @@ -1,7 +1,16 @@ import type { PageServerLoad } from './$types'; export const load: PageServerLoad = async ({ locals }) => { - const { data } = await locals.supabase.from('neuron_cards').select('id,name,effect_text,frame_type_id').eq('language', 'en'); + const { data, error } = await locals.supabase.from('neuron_cards').select('id,name,effect_text,frame_type_id').eq('language', 'en'); + + if (error) { + console.error('error loading cards from database', error); + return { + cards: [], + }; + } + + console.log('loaded cards from database', data?.length ?? 0); return { cards: data ?? [], }; diff --git a/src/routes/database/+page.svelte b/src/routes/database/+page.svelte index 56a87eb..b89914f 100644 --- a/src/routes/database/+page.svelte +++ b/src/routes/database/+page.svelte @@ -1,10 +1,21 @@
@@ -114,13 +118,13 @@
-

{cardsResource.current?.length ?? 0} results

+

{displayedCards.length} results

Hide effect text
- {#each cardsResource.current?.slice(0, 1000) as card} + {#each visibleCards as card (card.id)}
From f34c580cbeaf6a2b86639a0401ad6bf8f46d077f Mon Sep 17 00:00:00 2001 From: Alex Gravely Date: Thu, 28 May 2026 09:38:52 -0400 Subject: [PATCH 5/5] Updates --- package.json | 1 + playwright.config.ts | 30 + pnpm-lock.yaml | 95 ++ src/hooks.server.ts | 3 +- src/lib/components/CardFilterBuilder.svelte | 21 + .../components/CardFilterRuleEditor.svelte | 265 ++++ src/lib/components/LinkArrowMaskPicker.svelte | 76 ++ src/lib/db/cardEnums.ts | 48 + src/lib/db/cardFilterEval.test.ts | 160 +++ src/lib/db/cardFilterEval.ts | 148 +++ src/lib/db/cardFilterQuery.ts | 227 ++++ src/lib/db/cardFilterResolve.ts | 217 ++++ src/lib/db/cardFilterRule.ts | 104 ++ src/lib/db/database.types.ts | 1100 +++++++++-------- src/lib/db/linkArrows.ts | 59 + src/lib/rpc/filterCards.remote.ts | 26 + src/routes/database/+page.server.ts | 47 +- src/routes/database/+page.svelte | 376 +++++- .../database/databaseSearchParams.schema.ts | 26 + tests/e2e/database-filters.spec.ts | 33 + 20 files changed, 2503 insertions(+), 559 deletions(-) create mode 100644 playwright.config.ts create mode 100644 src/lib/components/CardFilterBuilder.svelte create mode 100644 src/lib/components/CardFilterRuleEditor.svelte create mode 100644 src/lib/components/LinkArrowMaskPicker.svelte create mode 100644 src/lib/db/cardEnums.ts create mode 100644 src/lib/db/cardFilterEval.test.ts create mode 100644 src/lib/db/cardFilterEval.ts create mode 100644 src/lib/db/cardFilterQuery.ts create mode 100644 src/lib/db/cardFilterResolve.ts create mode 100644 src/lib/db/cardFilterRule.ts create mode 100644 src/lib/db/linkArrows.ts create mode 100644 src/lib/rpc/filterCards.remote.ts create mode 100644 src/routes/database/databaseSearchParams.schema.ts create mode 100644 tests/e2e/database-filters.spec.ts diff --git a/package.json b/package.json index 1d2259a..f9ce5ae 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@iconify-json/mdi": "^1.2.3", "@iconify-json/vscode-icons": "^1.2.49", "@macfja/svelte-persistent-store": "^2.4.2", + "@playwright/test": "^1.60.0", "@skeletonlabs/skeleton": "4.15.2", "@skeletonlabs/skeleton-svelte": "4.15.2", "@supabase/ssr": "^0.10.3", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..652bf90 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,30 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { defineConfig, devices } from '@playwright/test'; + +const root = fileURLToPath(new URL('.', import.meta.url)); + +/** + * Browser tests for /database filtering. + * Starts `pnpm dev --port 5174` (Vite loads `.env` / `.env.local` from the project root). + */ +export default defineConfig({ + testDir: './tests/e2e', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: 'list', + use: { + baseURL: 'http://127.0.0.1:5174', + trace: 'on-first-retry', + }, + projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }], + webServer: { + command: 'pnpm dev --port 5174', + cwd: root, + url: 'http://127.0.0.1:5174', + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 120176b..e8d05f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: '@macfja/svelte-persistent-store': specifier: ^2.4.2 version: 2.4.2(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + '@playwright/test': + specifier: ^1.60.0 + version: 1.60.0 '@skeletonlabs/skeleton': specifier: 4.15.2 version: 4.15.2(tailwindcss@4.3.0) @@ -80,6 +83,12 @@ importers: autoprefixer: specifier: ^10.5.0 version: 10.5.0(postcss@8.5.14) + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + dotenv-cli: + specifier: ^11.0.0 + version: 11.0.0 eslint: specifier: ^10.3.0 version: 10.3.0(jiti@2.7.0) @@ -223,6 +232,9 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@epic-web/invariant@1.0.0': + resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} + '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} @@ -661,6 +673,11 @@ packages: '@oxc-project/types@0.130.0': resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + '@playwright/test@1.60.0': + resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} + engines: {node: '>=18'} + hasBin: true + '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -1360,6 +1377,11 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} + cross-env@10.1.0: + resolution: {integrity: sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==} + engines: {node: '>=20'} + hasBin: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1403,6 +1425,22 @@ packages: devalue@5.8.1: resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + dotenv-cli@11.0.0: + resolution: {integrity: sha512-r5pA8idbk7GFWuHEU7trSTflWcdBpQEK+Aw17UrSHjS6CReuhrrPcyC3zcQBPQvhArRHnBo/h6eLH1fkCvNlww==} + hasBin: true + + dotenv-expand@12.0.3: + resolution: {integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==} + engines: {node: '>=12'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} + electron-to-chromium@1.5.356: resolution: {integrity: sha512-9NgFd7m5t5MCJ5rUSjJITUXAH9mEGlrlofnMf4YEr+pz6JlP7cWmTAH+JFmbPnaSW8koVTkuW7pacORWAnA5Yw==} @@ -1567,6 +1605,11 @@ packages: fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + 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} @@ -1767,6 +1810,9 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} @@ -1861,6 +1907,16 @@ packages: pkg-types@2.3.1: resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + playwright-core@1.60.0: + resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.60.0: + resolution: {integrity: sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==} + engines: {node: '>=18'} + hasBin: true + postcss-load-config@3.1.4: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -2463,6 +2519,8 @@ snapshots: tslib: 2.8.1 optional: true + '@epic-web/invariant@1.0.0': {} + '@esbuild/aix-ppc64@0.27.3': optional: true @@ -2782,6 +2840,10 @@ snapshots: '@oxc-project/types@0.130.0': {} + '@playwright/test@1.60.0': + dependencies: + playwright: 1.60.0 + '@polka/url@1.0.0-next.29': {} '@poppinss/colors@4.1.6': @@ -3650,6 +3712,11 @@ snapshots: cookie@1.1.1: {} + cross-env@10.1.0: + dependencies: + '@epic-web/invariant': 1.0.0 + cross-spawn: 7.0.6 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -3678,6 +3745,21 @@ snapshots: devalue@5.8.1: {} + dotenv-cli@11.0.0: + dependencies: + cross-spawn: 7.0.6 + dotenv: 17.4.2 + dotenv-expand: 12.0.3 + minimist: 1.2.8 + + dotenv-expand@12.0.3: + dependencies: + dotenv: 16.6.1 + + dotenv@16.6.1: {} + + dotenv@17.4.2: {} + electron-to-chromium@1.5.356: {} enhanced-resolve@5.21.3: @@ -3878,6 +3960,9 @@ snapshots: fraction.js@5.3.4: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -4032,6 +4117,8 @@ snapshots: dependencies: brace-expansion: 5.0.6 + minimist@1.2.8: {} + minipass@7.1.3: {} minizlib@3.1.0: @@ -4114,6 +4201,14 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 + playwright-core@1.60.0: {} + + playwright@1.60.0: + dependencies: + playwright-core: 1.60.0 + optionalDependencies: + fsevents: 2.3.2 + postcss-load-config@3.1.4(postcss@8.5.14): dependencies: lilconfig: 2.1.0 diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 5fc5040..4e2cee4 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,5 +1,6 @@ import { env as secretEnv } from '$env/dynamic/private'; import { env } from '$env/dynamic/public'; +import type { Database } from '$lib/db/database.types'; import { createServerClient } from '@supabase/ssr'; import type { Handle } from '@sveltejs/kit'; @@ -11,7 +12,7 @@ export const handle: Handle = async ({ event, resolve }) => { throw new Error('Missing PUBLIC_SUPABASE_URL or SUPABASE_SERVICE_KEY'); } - event.locals.supabase = createServerClient(supabaseUrl, supabaseServiceKey, { + event.locals.supabase = createServerClient(supabaseUrl, supabaseServiceKey, { cookies: { getAll() { return event.cookies.getAll(); diff --git a/src/lib/components/CardFilterBuilder.svelte b/src/lib/components/CardFilterBuilder.svelte new file mode 100644 index 0000000..0710e92 --- /dev/null +++ b/src/lib/components/CardFilterBuilder.svelte @@ -0,0 +1,21 @@ + + + diff --git a/src/lib/components/CardFilterRuleEditor.svelte b/src/lib/components/CardFilterRuleEditor.svelte new file mode 100644 index 0000000..bfbdf0c --- /dev/null +++ b/src/lib/components/CardFilterRuleEditor.svelte @@ -0,0 +1,265 @@ + + +{#if node.kind === 'group'} +
0}> +
+ {depth === 0 ? 'Stat filters' : 'Group'} + + {#if depth > 0} + + {/if} +
+ + {#each node.children as _, i (i)} + removeChild(i)} /> + {/each} + +
+ + +
+
+{:else} + {@const c = node.condition} +
+ + + {#if c.kind === 'num'} + + {#if c.op !== 'isNull' && c.op !== 'notNull' && c.op !== 'isQuestion' && c.op !== 'notQuestion'} + + {/if} + {:else if c.kind === 'cat'} + + {#if c.op === 'in' || c.op === 'notIn'} +
+ Values (toggle) + {#if c.field === 'attribute_id'} + {#each attributeEntries() as o (o.id)} + + {/each} + {:else if c.field === 'species_id'} + {#each lookups.monsterTypes as o (o.id)} + + {/each} + {:else if c.field === 'frame_type_id'} + {#each lookups.complexFrameTypes as o (o.id)} + + {/each} + {:else if c.field === 'effect_id'} + {#each spelltrapEntries() as o (o.id)} + + {/each} + {:else if c.field === 'card_type'} + {#each cardTypeEntries() as o (o.id)} + + {/each} + {:else if c.field === 'frame_subtype'} + {#each lookups.cardFrameTypes as o (o.id)} + + {/each} + {/if} +
+ {/if} + {:else if c.kind === 'bits'} +
+ +
+ {:else if c.kind === 'text'} + + {#if c.op === 'contains' || c.op === 'eq'} + + {/if} + {/if} + + {#if depth > 0} + + {/if} +
+{/if} diff --git a/src/lib/components/LinkArrowMaskPicker.svelte b/src/lib/components/LinkArrowMaskPicker.svelte new file mode 100644 index 0000000..82d8e46 --- /dev/null +++ b/src/lib/components/LinkArrowMaskPicker.svelte @@ -0,0 +1,76 @@ + + +
+ {#each LINK_ARROW_GRID as row, ri (ri)} + {#each row as cell, ci (`${ri}-${ci}`)} + {#if cell === null} + + {:else} + {@const Icon = getArrowIcon(cell.digit)} + + {/if} + {/each} + {/each} +
diff --git a/src/lib/db/cardEnums.ts b/src/lib/db/cardEnums.ts new file mode 100644 index 0000000..da40903 --- /dev/null +++ b/src/lib/db/cardEnums.ts @@ -0,0 +1,48 @@ +export const ATTRIBUTES = { + 1: 'LIGHT', + 2: 'DARK', + 3: 'WATER', + 4: 'FIRE', + 5: 'EARTH', + 6: 'WIND', + 7: 'DIVINE', + 8: 'SPELL', + 9: 'TRAP', +} as const; + +export const SPELLTRAP_SUBTYPES = { + 0: 'Normal', + 1: 'Counter', + 2: 'Field', + 3: 'Equip', + 4: 'Continuous', + 5: 'Quick-Play', + 6: 'Ritual', +} as const; + +export const CARD_TYPES = { + 1: 'Monster', + 2: 'Spell', + 3: 'Trap', +} as const; + +export const LINK_ARROW_VALUES = { + 1: 'NW', + 2: 'N', + 3: 'NE', + 4: 'W', + 6: 'E', + 7: 'SW', + 9: 'SE', +} as const; + +export type AttributeId = keyof typeof ATTRIBUTES; +export type SpelltrapSubtypeId = keyof typeof SPELLTRAP_SUBTYPES; +export type CardTypeId = keyof typeof CARD_TYPES; +export type LinkArrowValueId = keyof typeof LINK_ARROW_VALUES; + +export const attributeName = (id: number): string | undefined => ATTRIBUTES[id as AttributeId]; + +export const spelltrapSubtypeName = (id: number): string | undefined => SPELLTRAP_SUBTYPES[id as SpelltrapSubtypeId]; + +export const cardTypeName = (id: number): string | undefined => CARD_TYPES[id as CardTypeId]; diff --git a/src/lib/db/cardFilterEval.test.ts b/src/lib/db/cardFilterEval.test.ts new file mode 100644 index 0000000..3bdba47 --- /dev/null +++ b/src/lib/db/cardFilterEval.test.ts @@ -0,0 +1,160 @@ +import { describe, expect, it } from 'vitest'; +import { evalRuleNode, type CardFilterRow } from './cardFilterEval'; +import { defaultRuleTree, type RuleNode } from './cardFilterRule'; +import { isStatFilterEmpty, resolveVirtualRuleTree } from './cardFilterResolve'; +import { encodeLinkArrowsValue } from './linkArrows'; + +const row = (partial: Partial & Pick): CardFilterRow => ({ + atk: null, + def: null, + level: null, + link_rating: null, + pend_scale_l: null, + pend_scale_r: null, + attribute_id: null, + species_id: null, + frame_type_id: null, + effect_id: null, + link_arrows: null, + pendulum_text: null, + ...partial, +}); + +describe('cardFilterEval', () => { + it('matches numeric ATK', () => { + const tree: RuleNode = { + kind: 'group', + logic: 'and', + children: [ + { + kind: 'cond', + condition: { kind: 'num', field: 'atk', op: 'gte', value: 3000 }, + }, + ], + }; + expect(evalRuleNode(row({ id: 1, atk: 3200 }), tree)).toBe(true); + expect(evalRuleNode(row({ id: 2, atk: 1000 }), tree)).toBe(false); + }); + + it('matches attribute cat in', () => { + const tree: RuleNode = { + kind: 'group', + logic: 'and', + children: [ + { + kind: 'cond', + condition: { kind: 'cat', field: 'attribute_id', op: 'in', values: [2] }, + }, + ], + }; + expect(evalRuleNode(row({ id: 1, attribute_id: 2 }), tree)).toBe(true); + expect(evalRuleNode(row({ id: 2, attribute_id: 1 }), tree)).toBe(false); + }); + + it('ATK is ? matches -1', () => { + const tree: RuleNode = { + kind: 'group', + logic: 'and', + children: [{ kind: 'cond', condition: { kind: 'num', field: 'atk', op: 'isQuestion' } }], + }; + expect(evalRuleNode(row({ id: 1, atk: -1 }), tree)).toBe(true); + expect(evalRuleNode(row({ id: 2, atk: 2500 }), tree)).toBe(false); + expect(evalRuleNode(row({ id: 3, atk: null }), tree)).toBe(false); + }); + + it('DEF has numeric value excludes ? (-1) and null', () => { + const tree: RuleNode = { + kind: 'group', + logic: 'and', + children: [{ kind: 'cond', condition: { kind: 'num', field: 'def', op: 'notQuestion' } }], + }; + expect(evalRuleNode(row({ id: 1, def: 0 }), tree)).toBe(true); + expect(evalRuleNode(row({ id: 2, def: -1 }), tree)).toBe(false); + expect(evalRuleNode(row({ id: 3, def: null }), tree)).toBe(false); + }); + + it('isQuestion on non-ATK/DEF never matches', () => { + const tree: RuleNode = { + kind: 'group', + logic: 'and', + children: [{ kind: 'cond', condition: { kind: 'num', field: 'level', op: 'isQuestion' } }], + }; + expect(evalRuleNode(row({ id: 1, level: null }), tree)).toBe(false); + }); + + it('matches link_arrows eq exact pattern (S+N → 28)', () => { + const tree: RuleNode = { + kind: 'group', + logic: 'and', + children: [ + { + kind: 'cond', + condition: { kind: 'bits', field: 'link_arrows', op: 'eq', values: [2, 8] }, + }, + ], + }; + expect(evalRuleNode(row({ id: 1, link_arrows: 28 }), tree)).toBe(true); + expect(evalRuleNode(row({ id: 2, link_arrows: 8 }), tree)).toBe(false); + expect(evalRuleNode(row({ id: 3, link_arrows: 280 }), tree)).toBe(false); + }); + + it('matches link_arrows eq for NW+N+NE → 789', () => { + const tree: RuleNode = { + kind: 'group', + logic: 'and', + children: [ + { + kind: 'cond', + condition: { kind: 'bits', field: 'link_arrows', op: 'eq', values: [7, 8, 9] }, + }, + ], + }; + expect(evalRuleNode(row({ id: 1, link_arrows: 789 }), tree)).toBe(true); + expect(evalRuleNode(row({ id: 2, link_arrows: 798 }), tree)).toBe(false); + }); +}); + +describe('linkArrows encoding', () => { + it('matches S+N and four-corner examples', () => { + expect(encodeLinkArrowsValue([2, 8])).toBe(28); + expect(encodeLinkArrowsValue([1, 3, 7, 9])).toBe(1379); + }); + + it('stacks top row as 789 for NW+N+NE', () => { + expect(encodeLinkArrowsValue([7, 8, 9])).toBe(789); + }); + + it('stacks bottom row as 123 for SW+S+SE', () => { + expect(encodeLinkArrowsValue([1, 2, 3])).toBe(123); + }); +}); + +describe('cardFilterResolve', () => { + it('treats empty rule tree as inactive', () => { + expect(isStatFilterEmpty(defaultRuleTree())).toBe(true); + }); + + it('resolves card_type spell to frame_type_id 13', () => { + const root: RuleNode = { + kind: 'group', + logic: 'and', + children: [ + { + kind: 'cond', + condition: { kind: 'cat', field: 'card_type', op: 'in', values: [2] }, + }, + ], + }; + const resolved = resolveVirtualRuleTree(root, []); + expect(resolved).toEqual({ + kind: 'group', + logic: 'and', + children: [ + { + kind: 'cond', + condition: { kind: 'cat', field: 'frame_type_id', op: 'in', values: [13] }, + }, + ], + }); + }); +}); diff --git a/src/lib/db/cardFilterEval.ts b/src/lib/db/cardFilterEval.ts new file mode 100644 index 0000000..b210257 --- /dev/null +++ b/src/lib/db/cardFilterEval.ts @@ -0,0 +1,148 @@ +import type { Condition, RuleNode } from './cardFilterRule'; +import { NEURON_ATK_DEF_QUESTION_MARK } from './cardFilterRule'; +import { encodeLinkArrowsValue } from './linkArrows'; + +/** Minimal row shape for evaluating rules client- or server-side */ +export type CardFilterRow = { + id: number; + atk: number | null; + def: number | null; + level: number | null; + link_rating: number | null; + pend_scale_l: number | null; + pend_scale_r: number | null; + attribute_id: number | null; + species_id: number | null; + frame_type_id: number | null; + effect_id: number | null; + link_arrows: number | null; + pendulum_text: string | null; +}; + +const colNum = (row: CardFilterRow, field: Condition & { kind: 'num' }): number | null => { + switch (field.field) { + case 'atk': + return row.atk; + case 'def': + return row.def; + case 'level': + return row.level; + case 'link_rating': + return row.link_rating; + case 'pend_scale_l': + return row.pend_scale_l; + case 'pend_scale_r': + return row.pend_scale_r; + case 'id': + return row.id; + default: + return null; + } +}; + +const evalNum = (row: CardFilterRow, c: Extract): boolean => { + const v = colNum(row, c); + const atkOrDef = c.field === 'atk' || c.field === 'def'; + switch (c.op) { + case 'isQuestion': + return atkOrDef && v === NEURON_ATK_DEF_QUESTION_MARK; + case 'notQuestion': + return atkOrDef && v !== null && v !== NEURON_ATK_DEF_QUESTION_MARK; + case 'isNull': + return v === null; + case 'notNull': + return v !== null; + case 'eq': + return v === c.value!; + case 'neq': + return v !== c.value!; + case 'gt': + return v !== null && v > c.value!; + case 'gte': + return v !== null && v >= c.value!; + case 'lt': + return v !== null && v < c.value!; + case 'lte': + return v !== null && v <= c.value!; + default: + return false; + } +}; + +const evalCat = (row: CardFilterRow, c: Extract): boolean => { + let col: number | null; + switch (c.field) { + case 'attribute_id': + col = row.attribute_id; + break; + case 'species_id': + col = row.species_id; + break; + case 'frame_type_id': + col = row.frame_type_id; + break; + case 'effect_id': + col = row.effect_id; + break; + default: + return false; + } + + switch (c.op) { + case 'isNull': + return col === null; + case 'notNull': + return col !== null; + case 'in': + return col !== null && (c.values?.includes(col) ?? false); + case 'notIn': + return col === null || !(c.values?.includes(col) ?? false); + default: + return false; + } +}; + +const evalBits = (row: CardFilterRow, c: Extract): boolean => { + const v = row.link_arrows; + if (c.op === 'isNull') return v === null; + if (c.op !== 'eq' || v === null) return false; + + const digits = c.values ?? []; + if (digits.length === 0) return false; + + return v === encodeLinkArrowsValue(digits); +}; + +const evalText = (row: CardFilterRow, c: Extract): boolean => { + const t = row.pendulum_text ?? ''; + switch (c.op) { + case 'isNull': + return row.pendulum_text === null; + case 'notNull': + return row.pendulum_text !== null; + case 'contains': + return c.value !== undefined && t.includes(c.value); + case 'eq': + return c.value !== undefined && t === c.value; + default: + return false; + } +}; + +const evalCond = (row: CardFilterRow, c: Condition): boolean => { + if (c.kind === 'num') return evalNum(row, c); + if (c.kind === 'cat') return evalCat(row, c); + if (c.kind === 'bits') return evalBits(row, c); + if (c.kind === 'text') return evalText(row, c); + return false; +}; + +export const evalRuleNode = (row: CardFilterRow, node: RuleNode): boolean => { + if (node.kind === 'cond') return evalCond(row, node.condition); + if (node.children.length === 0) return true; + if (node.logic === 'and') return node.children.every((ch) => evalRuleNode(row, ch)); + return node.children.some((ch) => evalRuleNode(row, ch)); +}; + +export const filterRowsByRule = (rows: CardFilterRow[], root: RuleNode): CardFilterRow[] => + rows.filter((row) => evalRuleNode(row, root)); diff --git a/src/lib/db/cardFilterQuery.ts b/src/lib/db/cardFilterQuery.ts new file mode 100644 index 0000000..0a852f8 --- /dev/null +++ b/src/lib/db/cardFilterQuery.ts @@ -0,0 +1,227 @@ +import type { PostgrestFilterBuilder, SupabaseClient } from '@supabase/supabase-js'; +import { NEURON_ATK_DEF_QUESTION_MARK, REMOTE_FETCH_LIMIT, type Condition, type RuleNode } from './cardFilterRule'; +import type { Database } from './database.types'; +import { encodeLinkArrowsValue } from './linkArrows'; + +type Db = SupabaseClient; + +type NeuronCardsRow = Database['public']['Tables']['neuron_cards']['Row']; +type NeuronCardsRelationships = Database['public']['Tables']['neuron_cards']['Relationships']; + +type Qb = PostgrestFilterBuilder< + {}, + Database['public'], + NeuronCardsRow, + Pick[], + 'neuron_cards', + NeuronCardsRelationships, + 'GET' +>; + +const buildCondString = (c: Condition): string | null => { + if (c.kind === 'num') { + const col = c.field; + switch (c.op) { + case 'eq': + return c.value === undefined ? null : `${col}.eq.${c.value}`; + case 'neq': + return c.value === undefined ? null : `${col}.neq.${c.value}`; + case 'gt': + return c.value === undefined ? null : `${col}.gt.${c.value}`; + case 'gte': + return c.value === undefined ? null : `${col}.gte.${c.value}`; + case 'lt': + return c.value === undefined ? null : `${col}.lt.${c.value}`; + case 'lte': + return c.value === undefined ? null : `${col}.lte.${c.value}`; + case 'isNull': + return `${col}.is.null`; + case 'notNull': + return `${col}.not.is.null`; + case 'isQuestion': + return col === 'atk' || col === 'def' ? `${col}.eq.${NEURON_ATK_DEF_QUESTION_MARK}` : null; + case 'notQuestion': + return col === 'atk' || col === 'def' ? `and(${col}.not.is.null,${col}.neq.${NEURON_ATK_DEF_QUESTION_MARK})` : null; + default: + return null; + } + } + + if (c.kind === 'cat') { + const col = c.field; + switch (c.op) { + case 'in': { + if (!c.values?.length) return null; + return `${col}.in.(${c.values.join(',')})`; + } + case 'notIn': { + if (!c.values?.length) return null; + return `${col}.not.in.(${c.values.join(',')})`; + } + case 'isNull': + return `${col}.is.null`; + case 'notNull': + return `${col}.not.is.null`; + default: + return null; + } + } + + if (c.kind === 'bits') { + if (c.op === 'isNull') return `link_arrows.is.null`; + if (c.op === 'eq') { + const digits = c.values ?? []; + if (digits.length === 0) return null; + const n = encodeLinkArrowsValue(digits); + return `link_arrows.eq.${n}`; + } + return null; + } + + if (c.kind === 'text') { + const col = c.field; + switch (c.op) { + case 'contains': { + if (c.value === undefined || c.value === '') return null; + const esc = c.value.replaceAll('\\', '\\\\').replaceAll('*', '\\*').replaceAll(',', '\\,'); + return `${col}.ilike.*${esc}*`; + } + case 'eq': { + if (c.value === undefined) return null; + const esc = String(c.value).replaceAll('"', '\\"'); + return `${col}.eq."${esc}"`; + } + case 'isNull': + return `${col}.is.null`; + case 'notNull': + return `${col}.not.is.null`; + default: + return null; + } + } + + return null; +}; + +const buildOrPart = (node: RuleNode): string | null => { + if (node.kind === 'cond') return buildCondString(node.condition); + if (node.kind === 'group' && node.logic === 'and') { + const ps = node.children.map(buildOrPart).filter((x): x is string => Boolean(x)); + if (ps.length === 0) return null; + if (ps.length === 1) return ps[0]!; + return `and(${ps.join(',')})`; + } + if (node.kind === 'group' && node.logic === 'or') { + const ps = node.children.map(buildOrPart).filter((x): x is string => Boolean(x)); + if (ps.length === 0) return null; + if (ps.length === 1) return ps[0]!; + return `or(${ps.join(',')})`; + } + return null; +}; + +const applyCond = (q: Qb, c: Condition): Qb => { + if (c.kind === 'num') { + const col = c.field; + switch (c.op) { + case 'eq': + return c.value === undefined ? q : q.eq(col, c.value); + case 'neq': + return c.value === undefined ? q : q.neq(col, c.value); + case 'gt': + return c.value === undefined ? q : q.gt(col, c.value); + case 'gte': + return c.value === undefined ? q : q.gte(col, c.value); + case 'lt': + return c.value === undefined ? q : q.lt(col, c.value); + case 'lte': + return c.value === undefined ? q : q.lte(col, c.value); + case 'isNull': + return q.is(col, null); + case 'notNull': + return q.not(col, 'is', null); + case 'isQuestion': + return c.field === 'atk' || c.field === 'def' ? q.eq(col, NEURON_ATK_DEF_QUESTION_MARK) : q; + case 'notQuestion': + return c.field === 'atk' || c.field === 'def' ? q.not(col, 'is', null).neq(col, NEURON_ATK_DEF_QUESTION_MARK) : q; + default: + return q; + } + } + + if (c.kind === 'cat') { + if (c.field === 'card_type' || c.field === 'frame_subtype') return q; + const col = c.field; + switch (c.op) { + case 'in': + return c.values?.length ? q.in(col, c.values) : q; + case 'notIn': + return c.values?.length ? q.notIn(col, c.values) : q; + case 'isNull': + return q.is(col, null); + case 'notNull': + return q.not(col, 'is', null); + default: + return q; + } + } + + if (c.kind === 'bits') { + if (c.op === 'isNull') return q.is('link_arrows', null); + if (c.op === 'eq') { + const digits = c.values ?? []; + if (digits.length === 0) return q; + return q.eq('link_arrows', encodeLinkArrowsValue(digits)); + } + return q; + } + + if (c.kind === 'text') { + const col = c.field; + switch (c.op) { + case 'contains': + return c.value === undefined || c.value === '' ? q : q.ilike(col, `%${c.value}%`); + case 'eq': + return c.value === undefined ? q : q.eq(col, c.value); + case 'isNull': + return q.is(col, null); + case 'notNull': + return q.not(col, 'is', null); + default: + return q; + } + } + + return q; +}; + +const applyRuleToQuery = (q: Qb, node: RuleNode): Qb => { + if (node.kind === 'cond') return applyCond(q, node.condition); + if (node.kind === 'group' && node.logic === 'and') { + return node.children.reduce((acc, ch) => applyRuleToQuery(acc, ch), q); + } + if (node.kind === 'group' && node.logic === 'or') { + const parts = node.children.map(buildOrPart).filter((x): x is string => Boolean(x)); + if (parts.length === 0) return q; + return q.or(parts.join(',')); + } + return q; +}; + +export const queryNeuronCardIdsByRule = async (supabase: Db, root: RuleNode): Promise<{ ids: number[]; truncated: boolean; error?: string }> => { + let q: Qb = supabase.from('neuron_cards').select('id').eq('language', 'en').limit(REMOTE_FETCH_LIMIT); + + q = applyRuleToQuery(q, root); + + console.log('q', q); + + const { data, error } = await q; + + if (error) { + console.error('[filterCards] query error', error); + return { ids: [], truncated: false, error: error.message }; + } + + const raw = (data ?? []).map((r: { id: number }) => r.id); + return { ids: raw, truncated: false }; +}; diff --git a/src/lib/db/cardFilterResolve.ts b/src/lib/db/cardFilterResolve.ts new file mode 100644 index 0000000..04fa9ab --- /dev/null +++ b/src/lib/db/cardFilterResolve.ts @@ -0,0 +1,217 @@ +import { + SPELL_FRAME_TYPE_ID, + TRAP_FRAME_TYPE_ID, + type ComplexFrameTypeRow, + type RuleNode, +} from './cardFilterRule'; + +const impossible: RuleNode = { + kind: 'group', + logic: 'and', + children: [ + { kind: 'cond', condition: { kind: 'num', field: 'id', op: 'eq', value: -1 } }, + { kind: 'cond', condition: { kind: 'num', field: 'id', op: 'eq', value: -2 } }, + ], +}; + +const tautology: RuleNode = { + kind: 'group', + logic: 'or', + children: [ + { kind: 'cond', condition: { kind: 'num', field: 'id', op: 'gte', value: 0 } }, + { kind: 'cond', condition: { kind: 'num', field: 'id', op: 'lt', value: 0 } }, + ], +}; + +const complexIdsForSubtypes = (subtypeIds: number[], rows: ComplexFrameTypeRow[]): number[] => { + const want = new Set(subtypeIds); + const out = new Set(); + for (const row of rows) { + const subs = [row.subtype_1, row.subtype_2, row.subtype_3].filter( + (x): x is number => x !== null && x !== undefined, + ); + if (subs.some((s) => want.has(s))) out.add(row.id); + } + return [...out]; +}; + +const cardTypePredicate = (cardTypeId: number): RuleNode => { + if (cardTypeId === 1) { + return { + kind: 'cond', + condition: { + kind: 'cat', + field: 'frame_type_id', + op: 'notIn', + values: [SPELL_FRAME_TYPE_ID, TRAP_FRAME_TYPE_ID], + }, + }; + } + if (cardTypeId === 2) { + return { + kind: 'cond', + condition: { kind: 'cat', field: 'frame_type_id', op: 'in', values: [SPELL_FRAME_TYPE_ID] }, + }; + } + if (cardTypeId === 3) { + return { + kind: 'cond', + condition: { kind: 'cat', field: 'frame_type_id', op: 'in', values: [TRAP_FRAME_TYPE_ID] }, + }; + } + return impossible; +}; + +const expandCardType = (op: 'in' | 'notIn', values: number[]): RuleNode => { + const uniq = [...new Set(values)].filter((id) => id >= 1 && id <= 3); + if (uniq.length === 0) return op === 'in' ? impossible : tautology; + + const preds = uniq.map(cardTypePredicate); + if (op === 'in') { + if (preds.length === 1) return preds[0]!; + return { kind: 'group', logic: 'or', children: preds }; + } + + const negPreds = preds.map(negatePredicate); + if (negPreds.length === 1) return negPreds[0]!; + return { kind: 'group', logic: 'and', children: negPreds }; +}; + +const negatePredicate = (node: RuleNode): RuleNode => { + if (node.kind !== 'cond') { + return { + kind: 'group', + logic: 'or', + children: [node, impossible], + }; + } + const c = node.condition; + if (c.kind === 'cat' && c.field === 'frame_type_id') { + if (c.op === 'in' && c.values?.length) { + return { kind: 'cond', condition: { kind: 'cat', field: 'frame_type_id', op: 'notIn', values: c.values } }; + } + if (c.op === 'notIn' && c.values?.length) { + return { kind: 'cond', condition: { kind: 'cat', field: 'frame_type_id', op: 'in', values: c.values } }; + } + if (c.op === 'isNull') { + return { kind: 'cond', condition: { kind: 'cat', field: 'frame_type_id', op: 'notNull' } }; + } + if (c.op === 'notNull') { + return { kind: 'cond', condition: { kind: 'cat', field: 'frame_type_id', op: 'isNull' } }; + } + } + if (c.kind === 'cat' && c.field === 'attribute_id') { + if (c.op === 'in' && c.values?.length) { + return { kind: 'cond', condition: { kind: 'cat', field: 'attribute_id', op: 'notIn', values: c.values } }; + } + if (c.op === 'notIn' && c.values?.length) { + return { kind: 'cond', condition: { kind: 'cat', field: 'attribute_id', op: 'in', values: c.values } }; + } + if (c.op === 'isNull') { + return { kind: 'cond', condition: { kind: 'cat', field: 'attribute_id', op: 'notNull' } }; + } + if (c.op === 'notNull') { + return { kind: 'cond', condition: { kind: 'cat', field: 'attribute_id', op: 'isNull' } }; + } + } + if (c.kind === 'cat' && c.field === 'species_id') { + if (c.op === 'in' && c.values?.length) { + return { kind: 'cond', condition: { kind: 'cat', field: 'species_id', op: 'notIn', values: c.values } }; + } + if (c.op === 'notIn' && c.values?.length) { + return { kind: 'cond', condition: { kind: 'cat', field: 'species_id', op: 'in', values: c.values } }; + } + if (c.op === 'isNull') { + return { kind: 'cond', condition: { kind: 'cat', field: 'species_id', op: 'notNull' } }; + } + if (c.op === 'notNull') { + return { kind: 'cond', condition: { kind: 'cat', field: 'species_id', op: 'isNull' } }; + } + } + if (c.kind === 'cat' && c.field === 'effect_id') { + if (c.op === 'in' && c.values?.length) { + return { kind: 'cond', condition: { kind: 'cat', field: 'effect_id', op: 'notIn', values: c.values } }; + } + if (c.op === 'notIn' && c.values?.length) { + return { kind: 'cond', condition: { kind: 'cat', field: 'effect_id', op: 'in', values: c.values } }; + } + if (c.op === 'isNull') { + return { kind: 'cond', condition: { kind: 'cat', field: 'effect_id', op: 'notNull' } }; + } + if (c.op === 'notNull') { + return { kind: 'cond', condition: { kind: 'cat', field: 'effect_id', op: 'isNull' } }; + } + } + return { + kind: 'group', + logic: 'or', + children: [node, impossible], + }; +}; + +const expandFrameSubtype = (op: 'in' | 'notIn', values: number[], complexRows: ComplexFrameTypeRow[]): RuleNode => { + const uniq = [...new Set(values)]; + const ids = complexIdsForSubtypes(uniq, complexRows); + if (op === 'in') { + if (ids.length === 0) return impossible; + return { kind: 'cond', condition: { kind: 'cat', field: 'frame_type_id', op: 'in', values: ids } }; + } + if (ids.length === 0) return tautology; + return { kind: 'cond', condition: { kind: 'cat', field: 'frame_type_id', op: 'notIn', values: ids } }; +}; + +const resolveNode = (node: RuleNode, complexRows: ComplexFrameTypeRow[]): RuleNode => { + if (node.kind === 'group') { + return { + kind: 'group', + logic: node.logic, + children: node.children.map((ch) => resolveNode(ch, complexRows)), + }; + } + + const c = node.condition; + if (c.kind === 'cat' && c.field === 'card_type') { + const vals = c.values ?? []; + if (c.op === 'in' || c.op === 'notIn') return expandCardType(c.op, vals); + if (c.op === 'isNull') { + return { + kind: 'cond', + condition: { + kind: 'cat', + field: 'frame_type_id', + op: 'isNull', + }, + }; + } + if (c.op === 'notNull') { + return { + kind: 'cond', + condition: { + kind: 'cat', + field: 'frame_type_id', + op: 'notNull', + }, + }; + } + } + + if (c.kind === 'cat' && c.field === 'frame_subtype') { + const vals = c.values ?? []; + if (c.op === 'in' || c.op === 'notIn') return expandFrameSubtype(c.op, vals, complexRows); + return node; + } + + return node; +}; + +export const resolveVirtualRuleTree = (root: RuleNode, complexRows: ComplexFrameTypeRow[]): RuleNode => + resolveNode(root, complexRows); + +export const isStatFilterEmpty = (node: RuleNode): boolean => { + if (node.kind === 'cond') return false; + if (node.children.length === 0) return true; + return node.children.every((ch) => isStatFilterEmpty(ch)); +}; + +/** Reserved: true if some resolved rule cannot be expressed in `queryNeuronCardIdsByRule` and must use `evalRuleNode` on loaded rows. */ +export const treeNeedsClientEval = (_node: RuleNode): boolean => false; diff --git a/src/lib/db/cardFilterRule.ts b/src/lib/db/cardFilterRule.ts new file mode 100644 index 0000000..08fc834 --- /dev/null +++ b/src/lib/db/cardFilterRule.ts @@ -0,0 +1,104 @@ +import { z } from 'zod'; + +/** Complex frame row subset — matches DB load for lookups */ +export type ComplexFrameTypeRow = { + id: number; + subtype_1: number | null; + subtype_2: number | null; + subtype_3: number | null; +}; + +export const SPELL_FRAME_TYPE_ID = 13; +export const TRAP_FRAME_TYPE_ID = 14; + +/** DB value for printed \"?\" ATK/DEF on monsters. */ +export const NEURON_ATK_DEF_QUESTION_MARK = -1; + +const numFieldSchema = z.enum(['atk', 'def', 'level', 'link_rating', 'pend_scale_l', 'pend_scale_r', 'id']); + +const numOpSchema = z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'isNull', 'notNull', 'isQuestion', 'notQuestion']); + +const catFieldSchema = z.enum(['attribute_id', 'species_id', 'frame_type_id', 'effect_id', 'card_type', 'frame_subtype']); + +const catOpSchema = z.enum(['in', 'notIn', 'isNull', 'notNull']); + +const bitsOpSchema = z.enum(['eq', 'isNull']); + +const textOpSchema = z.enum(['contains', 'eq', 'isNull', 'notNull']); + +export const conditionSchema = z.discriminatedUnion('kind', [ + z.object({ + kind: z.literal('num'), + field: numFieldSchema, + op: numOpSchema, + value: z.number().optional(), + }), + z.object({ + kind: z.literal('cat'), + field: catFieldSchema, + op: catOpSchema, + values: z.array(z.number()).optional(), + }), + z.object({ + kind: z.literal('bits'), + field: z.literal('link_arrows'), + op: bitsOpSchema, + /** Selected directions; combined with `eq` to match raw `link_arrows` exactly (see `encodeLinkArrowsValue`). */ + values: z.array(z.number().int()).optional(), + }), + z.object({ + kind: z.literal('text'), + field: z.literal('pendulum_text'), + op: textOpSchema, + value: z.string().optional(), + }), +]); + +export type Condition = z.infer; + +export type RuleNode = { kind: 'group'; logic: 'and' | 'or'; children: RuleNode[] } | { kind: 'cond'; condition: Condition }; + +export const ruleNodeSchema: z.ZodType = z.lazy(() => + z.discriminatedUnion('kind', [ + z.object({ + kind: z.literal('group'), + logic: z.enum(['and', 'or']), + children: z.array(ruleNodeSchema), + }), + z.object({ + kind: z.literal('cond'), + condition: conditionSchema, + }), + ]), +); + +export const MAX_RULE_DEPTH = 5; +export const MAX_RULE_LEAVES = 50; +export const REMOTE_FETCH_LIMIT = 200; + +export const defaultRuleTree = (): RuleNode => ({ + kind: 'group', + logic: 'and', + children: [], +}); + +export const countRuleLeaves = (node: RuleNode): number => { + if (node.kind === 'cond') return 1; + return node.children.reduce((acc, ch) => acc + countRuleLeaves(ch), 0); +}; + +export const maxRuleDepth = (node: RuleNode, depth = 1): number => { + if (node.kind === 'cond') return depth; + if (node.children.length === 0) return depth; + return Math.max(...node.children.map((ch) => maxRuleDepth(ch, depth + 1))); +}; + +export const validateRuleLimits = (node: RuleNode): { ok: true } | { ok: false; message: string } => { + if (countRuleLeaves(node) > MAX_RULE_LEAVES) { + return { ok: false, message: `Too many conditions (max ${MAX_RULE_LEAVES})` }; + } + if (maxRuleDepth(node) > MAX_RULE_DEPTH) { + return { ok: false, message: `Nesting too deep (max ${MAX_RULE_DEPTH})` }; + } + return { ok: true }; +}; diff --git a/src/lib/db/database.types.ts b/src/lib/db/database.types.ts index 1677489..ef50474 100644 --- a/src/lib/db/database.types.ts +++ b/src/lib/db/database.types.ts @@ -1,599 +1,695 @@ -export type Json = - | string - | number - | boolean - | null - | { [key: string]: Json | undefined } - | Json[] +export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[]; export type Database = { public: { Tables: { db_metadata: { Row: { - created_at: string | null - downloaded: boolean - game: Database["public"]["Enums"]["game"] | null - skipped: boolean - source: string - updated_at: string | null - uploaded: boolean - version: string - } + created_at: string; + downloaded: boolean | null; + game: Database['public']['Enums']['game'] | null; + skipped: boolean | null; + source: string; + updated_at: string | null; + uploaded: boolean | null; + version: string; + }; Insert: { - created_at?: string | null - downloaded?: boolean - game?: Database["public"]["Enums"]["game"] | null - skipped?: boolean - source: string - updated_at?: string | null - uploaded?: boolean - version: string - } + created_at?: string; + downloaded?: boolean | null; + game?: Database['public']['Enums']['game'] | null; + skipped?: boolean | null; + source: string; + updated_at?: string | null; + uploaded?: boolean | null; + version: string; + }; Update: { - created_at?: string | null - downloaded?: boolean - game?: Database["public"]["Enums"]["game"] | null - skipped?: boolean - source?: string - updated_at?: string | null - uploaded?: boolean - version?: string - } - Relationships: [] - } + created_at?: string; + downloaded?: boolean | null; + game?: Database['public']['Enums']['game'] | null; + skipped?: boolean | null; + source?: string; + updated_at?: string | null; + uploaded?: boolean | null; + version?: string; + }; + Relationships: []; + }; neuron_attributes: { Row: { - created_at: string - id: number - language: string - name: string | null - updated_at: string | null - version: string - } + created_at: string; + id: number; + language: string; + name: string | null; + updated_at: string | null; + version: string; + }; Insert: { - created_at?: string - id?: number - language: string - name?: string | null - updated_at?: string | null - version: string - } + created_at?: string; + id?: number; + language: string; + name?: string | null; + updated_at?: string | null; + version: string; + }; Update: { - created_at?: string - id?: number - language?: string - name?: string | null - updated_at?: string | null - version?: string - } - Relationships: [] - } + created_at?: string; + id?: number; + language?: string; + name?: string | null; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; neuron_card_frame_types: { Row: { - created_at: string - id: number - language: string - name: string - updated_at: string | null - version: string - } + created_at: string; + id: number; + language: string; + name: string; + updated_at: string | null; + version: string; + }; Insert: { - created_at?: string - id?: number - language: string - name: string - updated_at?: string | null - version: string - } + created_at?: string; + id?: number; + language: string; + name: string; + updated_at?: string | null; + version: string; + }; Update: { - created_at?: string - id?: number - language?: string - name?: string - updated_at?: string | null - version?: string - } - Relationships: [] - } + created_at?: string; + id?: number; + language?: string; + name?: string; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; neuron_card_relations: { Row: { - card_id: number - created_at: string - language: string | null - relation_card_id: number - updated_at: string | null - version: string - } + card_id: number; + created_at: string; + language: string | null; + relation_card_id: number; + updated_at: string | null; + version: string; + }; Insert: { - card_id: number - created_at?: string - language?: string | null - relation_card_id: number - updated_at?: string | null - version: string - } + card_id?: number; + created_at?: string; + language?: string | null; + relation_card_id: number; + updated_at?: string | null; + version: string; + }; Update: { - card_id?: number - created_at?: string - language?: string | null - relation_card_id?: number - updated_at?: string | null - version?: string - } - Relationships: [] - } + card_id?: number; + created_at?: string; + language?: string | null; + relation_card_id?: number; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; + neuron_card_treat: { + Row: { + card_id: number; + language: string | null; + treated_card_id: number; + version: string; + }; + Insert: { + card_id: number; + language?: string | null; + treated_card_id: number; + version: string; + }; + Update: { + card_id?: number; + language?: string | null; + treated_card_id?: number; + version?: string; + }; + Relationships: []; + }; neuron_card_types: { Row: { - created_at: string - id: number - language: string - name: string - updated_at: string | null - version: string - } + created_at: string; + id: number; + language: string; + name: string | null; + updated_at: string | null; + version: string | null; + }; Insert: { - created_at?: string - id?: number - language: string - name: string - updated_at?: string | null - version: string - } + created_at?: string; + id?: number; + language: string; + name?: string | null; + updated_at?: string | null; + version?: string | null; + }; Update: { - created_at?: string - id?: number - language?: string - name?: string - updated_at?: string | null - version?: string - } - Relationships: [] - } + created_at?: string; + id?: number; + language?: string; + name?: string | null; + updated_at?: string | null; + version?: string | null; + }; + Relationships: []; + }; neuron_cards: { Row: { - atk: number | null - attribute_id: number | null - created_at: string - def: number | null - effect_id: number | null - effect_text: string | null - frame_type_id: number | null - id: number - language: string - level: number | null - link_arrows: number | null - link_rating: number | null - name: string - pend_scale_l: number | null - pend_scale_r: number | null - pendulum_text: string | null - species_id: number | null - updated_at: string | null - version: string - } + atk: number | null; + attribute_id: number | null; + created_at: string; + def: number | null; + effect_id: number | null; + effect_text: string | null; + frame_type_id: number | null; + id: number; + language: string; + level: number | null; + link_arrows: number | null; + link_rating: number | null; + name: string; + pend_scale_l: number | null; + pend_scale_r: number | null; + pendulum_text: string | null; + species_id: number | null; + updated_at: string | null; + version: string; + }; Insert: { - atk?: number | null - attribute_id?: number | null - created_at?: string - def?: number | null - effect_id?: number | null - effect_text?: string | null - frame_type_id?: number | null - id?: number - language: string - level?: number | null - link_arrows?: number | null - link_rating?: number | null - name: string - pend_scale_l?: number | null - pend_scale_r?: number | null - pendulum_text?: string | null - species_id?: number | null - updated_at?: string | null - version: string - } + atk?: number | null; + attribute_id?: number | null; + created_at?: string; + def?: number | null; + effect_id?: number | null; + effect_text?: string | null; + frame_type_id?: number | null; + id?: number; + language: string; + level?: number | null; + link_arrows?: number | null; + link_rating?: number | null; + name: string; + pend_scale_l?: number | null; + pend_scale_r?: number | null; + pendulum_text?: string | null; + species_id?: number | null; + updated_at?: string | null; + version: string; + }; Update: { - atk?: number | null - attribute_id?: number | null - created_at?: string - def?: number | null - effect_id?: number | null - effect_text?: string | null - frame_type_id?: number | null - id?: number - language?: string - level?: number | null - link_arrows?: number | null - link_rating?: number | null - name?: string - pend_scale_l?: number | null - pend_scale_r?: number | null - pendulum_text?: string | null - species_id?: number | null - updated_at?: string | null - version?: string - } - Relationships: [] - } + atk?: number | null; + attribute_id?: number | null; + created_at?: string; + def?: number | null; + effect_id?: number | null; + effect_text?: string | null; + frame_type_id?: number | null; + id?: number; + language?: string; + level?: number | null; + link_arrows?: number | null; + link_rating?: number | null; + name?: string; + pend_scale_l?: number | null; + pend_scale_r?: number | null; + pendulum_text?: string | null; + species_id?: number | null; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; neuron_cardsets: { Row: { - card_id: number - card_image_id: number - card_number: string - created_at: string - language: string - pack_id: string - rarity_id: number - updated_at: string | null - version: string - } + card_id: number; + card_image_id: number; + card_number: string; + created_at: string; + language: string; + pack_id: number; + rarity_id: number; + updated_at: string | null; + version: string; + }; Insert: { - card_id: number - card_image_id: number - card_number: string - created_at?: string - language: string - pack_id: string - rarity_id: number - updated_at?: string | null - version: string - } + card_id: number; + card_image_id: number; + card_number: string; + created_at?: string; + language: string; + pack_id: number; + rarity_id: number; + updated_at?: string | null; + version: string; + }; Update: { - card_id?: number - card_image_id?: number - card_number?: string - created_at?: string - language?: string - pack_id?: string - rarity_id?: number - updated_at?: string | null - version?: string - } - Relationships: [] - } + card_id?: number; + card_image_id?: number; + card_number?: string; + created_at?: string; + language?: string; + pack_id?: number; + rarity_id?: number; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; neuron_complex_frame_types: { Row: { - created_at: string - id: number - language: string - name: string - subtype_1: number | null - subtype_2: number | null - subtype_3: number | null - updated_at: string | null - version: string - } + created_at: string; + id: number; + language: string; + name: string; + subtype_1: number | null; + subtype_2: number | null; + subtype_3: number | null; + updated_at: string | null; + version: string; + }; Insert: { - created_at?: string - id?: number - language: string - name: string - subtype_1?: number | null - subtype_2?: number | null - subtype_3?: number | null - updated_at?: string | null - version: string - } + created_at?: string; + id?: number; + language: string; + name: string; + subtype_1?: number | null; + subtype_2?: number | null; + subtype_3?: number | null; + updated_at?: string | null; + version: string; + }; Update: { - created_at?: string - id?: number - language?: string - name?: string - subtype_1?: number | null - subtype_2?: number | null - subtype_3?: number | null - updated_at?: string | null - version?: string - } - Relationships: [] - } + created_at?: string; + id?: number; + language?: string; + name?: string; + subtype_1?: number | null; + subtype_2?: number | null; + subtype_3?: number | null; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; neuron_monster_types: { Row: { - created_at: string - id: number - language: string - name: string - updated_at: string | null - version: string - } + created_at: string; + id: number; + language: string; + name: string | null; + updated_at: string | null; + version: string; + }; Insert: { - created_at?: string - id?: number - language: string - name: string - updated_at?: string | null - version: string - } + created_at?: string; + id?: number; + language: string; + name?: string | null; + updated_at?: string | null; + version: string; + }; Update: { - created_at?: string - id?: number - language?: string - name?: string - updated_at?: string | null - version?: string - } - Relationships: [] - } + created_at?: string; + id?: number; + language?: string; + name?: string | null; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; + neuron_pack_class: { + Row: { + created_at: string; + id: number; + language: string; + name: string; + sort: number | null; + unit_type: number | null; + version: string | null; + }; + Insert: { + created_at?: string; + id?: number; + language: string; + name: string; + sort?: number | null; + unit_type?: number | null; + version?: string | null; + }; + Update: { + created_at?: string; + id?: number; + language?: string; + name?: string; + sort?: number | null; + unit_type?: number | null; + version?: string | null; + }; + Relationships: []; + }; neuron_packs: { Row: { - created_at: string - id: string - language: string - name: string - set_code: string - updated_at: string | null - version: string - } + created_at: string; + id: number; + language: string; + name: string; + set_code: string; + updated_at: string | null; + version: string; + }; Insert: { - created_at?: string - id: string - language: string - name: string - set_code: string - updated_at?: string | null - version: string - } + created_at?: string; + id?: number; + language: string; + name: string; + set_code: string; + updated_at?: string | null; + version: string; + }; Update: { - created_at?: string - id?: string - language?: string - name?: string - set_code?: string - updated_at?: string | null - version?: string - } - Relationships: [] - } + created_at?: string; + id?: number; + language?: string; + name?: string; + set_code?: string; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; neuron_rarities: { Row: { - background_color: string - color: string - created_at: string - id: number - language: string - name: string - updated_at: string | null - version: string - } + background_color: string; + color: string; + created_at: string; + id: number; + language: string; + name: string; + updated_at: string | null; + version: string; + }; Insert: { - background_color: string - color: string - created_at?: string - id?: number - language: string - name: string - updated_at?: string | null - version: string - } + background_color: string; + color: string; + created_at?: string; + id?: number; + language: string; + name: string; + updated_at?: string | null; + version: string; + }; Update: { - background_color?: string - color?: string - created_at?: string - id?: number - language?: string - name?: string - updated_at?: string | null - version?: string - } - Relationships: [] - } + background_color?: string; + color?: string; + created_at?: string; + id?: number; + language?: string; + name?: string; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; neuron_spelltrap_types: { Row: { - created_at: string - id: number - language: string - name: string - updated_at: string | null - version: string - } + created_at: string; + icon: string | null; + icon_display_flag: boolean | null; + id: number; + language: string; + magic: boolean | null; + name: string; + sort: number | null; + trap: boolean | null; + updated_at: string | null; + version: string; + }; Insert: { - created_at?: string - id?: number - language: string - name: string - updated_at?: string | null - version: string - } + created_at?: string; + icon?: string | null; + icon_display_flag?: boolean | null; + id?: number; + language: string; + magic?: boolean | null; + name: string; + sort?: number | null; + trap?: boolean | null; + updated_at?: string | null; + version: string; + }; Update: { - created_at?: string - id?: number - language?: string - name?: string - updated_at?: string | null - version?: string - } - Relationships: [] - } + created_at?: string; + icon?: string | null; + icon_display_flag?: boolean | null; + id?: number; + language?: string; + magic?: boolean | null; + name?: string; + sort?: number | null; + trap?: boolean | null; + updated_at?: string | null; + version?: string; + }; + Relationships: []; + }; ygoprodeck_archetypes: { Row: { - created_at: string | null - name: string - updated_at: string | null - } + created_at: string; + name: string; + updated_at: string | null; + }; Insert: { - created_at?: string | null - name: string - updated_at?: string | null - } + created_at?: string; + name: string; + updated_at?: string | null; + }; Update: { - created_at?: string | null - name?: string - updated_at?: string | null - } - Relationships: [] - } + created_at?: string; + name?: string; + updated_at?: string | null; + }; + Relationships: []; + }; ygoprodeck_cards: { Row: { - atk: number | null - attribute: string | null - banlistinfo: Json | null - cardimages: Json | null - cardsets: Json | null - created_at: string | null - def: number | null - desc: string | null - frametype: string | null - id: number - level: number | null - linkarrows: string[] | null - linkrating: number | null - miscinfo: Json | null - name: string | null - race: string | null - scale: number | null - type: string | null - } + atk: number | null; + attribute: string | null; + banlistinfo: Json | null; + cardimages: Json | null; + cardsets: Json | null; + created_at: string; + def: number | null; + desc: string | null; + frametype: string | null; + id: number; + level: number | null; + linkarrows: string | null; + linkrating: number | null; + miscinfo: Json | null; + name: string | null; + race: string | null; + scale: number | null; + type: string | null; + }; Insert: { - atk?: number | null - attribute?: string | null - banlistinfo?: Json | null - cardimages?: Json | null - cardsets?: Json | null - created_at?: string | null - def?: number | null - desc?: string | null - frametype?: string | null - id?: number - level?: number | null - linkarrows?: string[] | null - linkrating?: number | null - miscinfo?: Json | null - name?: string | null - race?: string | null - scale?: number | null - type?: string | null - } + atk?: number | null; + attribute?: string | null; + banlistinfo?: Json | null; + cardimages?: Json | null; + cardsets?: Json | null; + created_at?: string; + def?: number | null; + desc?: string | null; + frametype?: string | null; + id?: number; + level?: number | null; + linkarrows?: string | null; + linkrating?: number | null; + miscinfo?: Json | null; + name?: string | null; + race?: string | null; + scale?: number | null; + type?: string | null; + }; Update: { - atk?: number | null - attribute?: string | null - banlistinfo?: Json | null - cardimages?: Json | null - cardsets?: Json | null - created_at?: string | null - def?: number | null - desc?: string | null - frametype?: string | null - id?: number - level?: number | null - linkarrows?: string[] | null - linkrating?: number | null - miscinfo?: Json | null - name?: string | null - race?: string | null - scale?: number | null - type?: string | null - } - Relationships: [] - } - } + atk?: number | null; + attribute?: string | null; + banlistinfo?: Json | null; + cardimages?: Json | null; + cardsets?: Json | null; + created_at?: string; + def?: number | null; + desc?: string | null; + frametype?: string | null; + id?: number; + level?: number | null; + linkarrows?: string | null; + linkrating?: number | null; + miscinfo?: Json | null; + name?: string | null; + race?: string | null; + scale?: number | null; + type?: string | null; + }; + Relationships: []; + }; + }; Views: { - [_ in never]: never - } + [_ in never]: never; + }; Functions: { + get_cards_with_special_chars: { + Args: never; + Returns: { + id: number; + name: string; + }[]; + }; search_cards: { - Args: { - card_name: string - } + Args: { card_name: string }; Returns: { - id: number - name: string - language: string - effect_text: string - word_similarity: number - strict_similarity: number - word_dist: number - avg_similarity: number - }[] - } - } + avg_similarity: number; + effect_text: string; + id: number; + language: string; + name: string; + strict_similarity: number; + word_dist: number; + word_similarity: number; + }[]; + }; + }; Enums: { - game: "TCG" | "OCG" | "Rush" - } + game: 'TCG' | 'OCG' | 'Rush'; + }; CompositeTypes: { - [_ in never]: never - } - } -} + [_ in never]: never; + }; + }; +}; + +type DatabaseWithoutInternals = Omit; -type PublicSchema = Database[Extract] +export type DefaultSchema = DatabaseWithoutInternals[Extract]; export type Tables< - PublicTableNameOrOptions extends - | keyof (PublicSchema["Tables"] & PublicSchema["Views"]) - | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] & - Database[PublicTableNameOrOptions["schema"]]["Views"]) + DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema['Tables'] & DefaultSchema['Views']) | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; + } + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Views']) : never = never, -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? (Database[PublicTableNameOrOptions["schema"]]["Tables"] & - Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends { - Row: infer R +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; +} + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Views'])[TableName] extends { + Row: infer R; } ? R : never - : PublicTableNameOrOptions extends keyof (PublicSchema["Tables"] & - PublicSchema["Views"]) - ? (PublicSchema["Tables"] & - PublicSchema["Views"])[PublicTableNameOrOptions] extends { - Row: infer R + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema['Tables'] & DefaultSchema['Views']) + ? (DefaultSchema['Tables'] & DefaultSchema['Views'])[DefaultSchemaTableNameOrOptions] extends { + Row: infer R; } ? R : never - : never + : never; export type TablesInsert< - PublicTableNameOrOptions extends - | keyof PublicSchema["Tables"] - | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"] + DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] : never = never, -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Insert: infer I +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'][TableName] extends { + Insert: infer I; } ? I : never - : PublicTableNameOrOptions extends keyof PublicSchema["Tables"] - ? PublicSchema["Tables"][PublicTableNameOrOptions] extends { - Insert: infer I + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] + ? DefaultSchema['Tables'][DefaultSchemaTableNameOrOptions] extends { + Insert: infer I; } ? I : never - : never + : never; export type TablesUpdate< - PublicTableNameOrOptions extends - | keyof PublicSchema["Tables"] - | { schema: keyof Database }, - TableName extends PublicTableNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"] + DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] | { schema: keyof DatabaseWithoutInternals }, + TableName extends DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; + } + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] : never = never, -> = PublicTableNameOrOptions extends { schema: keyof Database } - ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { - Update: infer U +> = DefaultSchemaTableNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; +} + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'][TableName] extends { + Update: infer U; } ? U : never - : PublicTableNameOrOptions extends keyof PublicSchema["Tables"] - ? PublicSchema["Tables"][PublicTableNameOrOptions] extends { - Update: infer U + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] + ? DefaultSchema['Tables'][DefaultSchemaTableNameOrOptions] extends { + Update: infer U; } ? U : never - : never + : never; export type Enums< - PublicEnumNameOrOptions extends - | keyof PublicSchema["Enums"] - | { schema: keyof Database }, - EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database } - ? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"] + DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema['Enums'] | { schema: keyof DatabaseWithoutInternals }, + EnumName extends DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; + } + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions['schema']]['Enums'] : never = never, -> = PublicEnumNameOrOptions extends { schema: keyof Database } - ? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName] - : PublicEnumNameOrOptions extends keyof PublicSchema["Enums"] - ? PublicSchema["Enums"][PublicEnumNameOrOptions] - : never +> = DefaultSchemaEnumNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; +} + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions['schema']]['Enums'][EnumName] + : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema['Enums'] + ? DefaultSchema['Enums'][DefaultSchemaEnumNameOrOptions] + : never; + +export type CompositeTypes< + PublicCompositeTypeNameOrOptions extends keyof DefaultSchema['CompositeTypes'] | { schema: keyof DatabaseWithoutInternals }, + CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; + } + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'] + : never = never, +> = PublicCompositeTypeNameOrOptions extends { + schema: keyof DatabaseWithoutInternals; +} + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema['CompositeTypes'] + ? DefaultSchema['CompositeTypes'][PublicCompositeTypeNameOrOptions] + : never; + +export const Constants = { + public: { + Enums: { + game: ['TCG', 'OCG', 'Rush'], + }, + }, +} as const; diff --git a/src/lib/db/linkArrows.ts b/src/lib/db/linkArrows.ts new file mode 100644 index 0000000..c5be149 --- /dev/null +++ b/src/lib/db/linkArrows.ts @@ -0,0 +1,59 @@ +/** + * `neuron_cards.link_arrows` stores link markers as a decimal number: concat digit codes + * bottom → top, within each row left → right. + * + * Rows: bottom [SW=1, S=2, SE=3], middle [W=4, E=6], top [NW=7, N=8, NE=9]. (5 = unused.) + * + * Examples: S+N only → 28; SW+SE+NW+NE → 1379. + */ +export const LINK_ARROW_DIGIT = { + NW: 7, + N: 8, + NE: 9, + W: 4, + E: 6, + SW: 1, + S: 2, + SE: 3, +} as const; + +export type LinkArrowCell = { + label: string; + /** Single digit 1–9 (no 5). */ + digit: number; +}; + +/** Top = far from player; bottom = near. Center cell has no arrow. */ +export const LINK_ARROW_GRID: (LinkArrowCell | null)[][] = [ + [ + { label: 'NW', digit: LINK_ARROW_DIGIT.NW }, + { label: 'N', digit: LINK_ARROW_DIGIT.N }, + { label: 'NE', digit: LINK_ARROW_DIGIT.NE }, + ], + [ + { label: 'W', digit: LINK_ARROW_DIGIT.W }, + null, + { label: 'E', digit: LINK_ARROW_DIGIT.E }, + ], + [ + { label: 'SW', digit: LINK_ARROW_DIGIT.SW }, + { label: 'S', digit: LINK_ARROW_DIGIT.S }, + { label: 'SE', digit: LINK_ARROW_DIGIT.SE }, + ], +]; + +/** Encode an active set of direction digits into the DB `link_arrows` integer (canonical order). */ +export const encodeLinkArrowsValue = (digits: Iterable): number => { + const set = new Set(digits); + const pieces: number[] = []; + for (const d of [LINK_ARROW_DIGIT.SW, LINK_ARROW_DIGIT.S, LINK_ARROW_DIGIT.SE]) { + if (set.has(d)) pieces.push(d); + } + for (const d of [LINK_ARROW_DIGIT.W, LINK_ARROW_DIGIT.E]) { + if (set.has(d)) pieces.push(d); + } + for (const d of [LINK_ARROW_DIGIT.NW, LINK_ARROW_DIGIT.N, LINK_ARROW_DIGIT.NE]) { + if (set.has(d)) pieces.push(d); + } + return pieces.length ? Number(pieces.join('')) : 0; +}; diff --git a/src/lib/rpc/filterCards.remote.ts b/src/lib/rpc/filterCards.remote.ts new file mode 100644 index 0000000..1cc54ab --- /dev/null +++ b/src/lib/rpc/filterCards.remote.ts @@ -0,0 +1,26 @@ +import { getRequestEvent, query } from '$app/server'; +import { queryNeuronCardIdsByRule } from '$lib/db/cardFilterQuery'; +import { ruleNodeSchema, validateRuleLimits, type RuleNode } from '$lib/db/cardFilterRule'; + +const hasVirtualCat = (node: RuleNode): boolean => { + if (node.kind === 'cond' && node.condition.kind === 'cat') { + const f = node.condition.field; + return f === 'card_type' || f === 'frame_subtype'; + } + return node.kind === 'group' && node.children.some(hasVirtualCat); +}; + +export const filterNeuronCardIds = query( + ruleNodeSchema, + async (tree): Promise<{ ids: number[]; truncated: boolean; error?: string }> => { + if (hasVirtualCat(tree)) { + return { ids: [], truncated: false, error: 'Virtual filter fields must be resolved client-side' }; + } + const lim = validateRuleLimits(tree); + if (!lim.ok) { + return { ids: [], truncated: false, error: lim.message }; + } + const { locals } = getRequestEvent(); + return queryNeuronCardIdsByRule(locals.supabase, tree); + }, +); diff --git a/src/routes/database/+page.server.ts b/src/routes/database/+page.server.ts index deda310..83645b5 100644 --- a/src/routes/database/+page.server.ts +++ b/src/routes/database/+page.server.ts @@ -1,17 +1,48 @@ import type { PageServerLoad } from './$types'; +const CARD_SELECT = + 'id,name,effect_text,frame_type_id,atk,def,level,attribute_id,species_id,effect_id,link_rating,link_arrows,pend_scale_l,pend_scale_r,pendulum_text'; + export const load: PageServerLoad = async ({ locals }) => { - const { data, error } = await locals.supabase.from('neuron_cards').select('id,name,effect_text,frame_type_id').eq('language', 'en'); + const [cardsRes, monsterTypesRes, cardFrameTypesRes, complexFrameTypesRes] = await Promise.all([ + locals.supabase.from('neuron_cards').select(CARD_SELECT).eq('language', 'en'), + locals.supabase.from('neuron_monster_types').select('id,name').eq('language', 'en'), + locals.supabase.from('neuron_card_frame_types').select('id,name').eq('language', 'en'), + locals.supabase + .from('neuron_complex_frame_types') + .select('id,name,subtype_1,subtype_2,subtype_3') + .eq('language', 'en'), + ]); - if (error) { - console.error('error loading cards from database', error); - return { - cards: [], - }; + if (cardsRes.error) { + console.error('error loading cards from database', cardsRes.error); + return { cards: [], lookups: emptyLookups() }; } - console.log('loaded cards from database', data?.length ?? 0); + if (monsterTypesRes.error) console.error('neuron_monster_types', monsterTypesRes.error); + if (cardFrameTypesRes.error) console.error('neuron_card_frame_types', cardFrameTypesRes.error); + if (complexFrameTypesRes.error) console.error('neuron_complex_frame_types', complexFrameTypesRes.error); + + console.log('loaded cards from database', cardsRes.data?.length ?? 0); + return { - cards: data ?? [], + cards: cardsRes.data ?? [], + lookups: { + monsterTypes: monsterTypesRes.data ?? [], + cardFrameTypes: cardFrameTypesRes.data ?? [], + complexFrameTypes: complexFrameTypesRes.data ?? [], + }, }; }; + +const emptyLookups = () => ({ + monsterTypes: [] as { id: number; name: string | null }[], + cardFrameTypes: [] as { id: number; name: string }[], + complexFrameTypes: [] as { + id: number; + name: string; + subtype_1: number | null; + subtype_2: number | null; + subtype_3: number | null; + }[], +}); diff --git a/src/routes/database/+page.svelte b/src/routes/database/+page.svelte index b89914f..dd0a30c 100644 --- a/src/routes/database/+page.svelte +++ b/src/routes/database/+page.svelte @@ -1,55 +1,159 @@ -
- - +
+
+
+ Card name + +
+ +
+ Effect + +
+ + +
+ {#if params.regexEffectSearch} +

+ Effect active flags: + {regexEffectFlagsPreview} + — delimiter forms ignore this box. +

+ {/if} +
+ +
+ Pendulum + +
+ + +
+ {#if params.regexPendulumSearch} +

+ Pendulum active flags: + {regexPendulumFlagsPreview} + — delimiter forms ignore this box. +

+ {/if} +
+ + +
-

{displayedCards.length} results

- Hide effect text +

{displayedCards.length} results

+
{#each visibleCards as card (card.id)}
@@ -128,9 +402,15 @@
-

+

{@html card.effect_text?.replaceAll('\n', '
')}

+ {#if card.pendulum_text} +

+ Pendulum: + {@html card.pendulum_text.replaceAll('\n', '
')} +

+ {/if}
Yugipedia diff --git a/src/routes/database/databaseSearchParams.schema.ts b/src/routes/database/databaseSearchParams.schema.ts new file mode 100644 index 0000000..bcaa22c --- /dev/null +++ b/src/routes/database/databaseSearchParams.schema.ts @@ -0,0 +1,26 @@ +import { defaultRuleTree, ruleNodeSchema } from '$lib/db/cardFilterRule'; +import { z } from 'zod'; + +/** + * URL-backed search state for `/database`. Consumed by `useSearchParams` in + * `+page.svelte`; every form control on the page binds to one of these keys + * so the entire search is shareable via a single URL. + * + * Runed pre-parses `"true"`/`"false"` to booleans and JSON-decodes `{…}` / + * `[…]` payloads before handing values to this schema, so plain Zod types + * are sufficient — no `coerce` wrappers required. + */ +export const databaseSearchParamsSchema = z.object({ + name: z.string().default(''), + effectText: z.string().default(''), + pendulumText: z.string().default(''), + regexEffectSearch: z.boolean().default(false), + regexPendulumSearch: z.boolean().default(false), + regexEffectFlags: z.string().default(''), + regexPendulumFlags: z.string().default(''), + hideEffectText: z.boolean().default(false), + ruleDraft: ruleNodeSchema.default(defaultRuleTree()), + ruleApplied: ruleNodeSchema.default(defaultRuleTree()), +}); + +export type DatabaseSearchParams = z.infer; diff --git a/tests/e2e/database-filters.spec.ts b/tests/e2e/database-filters.spec.ts new file mode 100644 index 0000000..62fe8b2 --- /dev/null +++ b/tests/e2e/database-filters.spec.ts @@ -0,0 +1,33 @@ +import { expect, test } from '@playwright/test'; + +test.describe('/database card search', () => { + test('shows 0 results when no name, effect, pendulum, or stat filters are active', async ({ page }) => { + await page.goto('/database'); + await expect(page.getByTestId('database-results-count')).toHaveText(/0 results/); + }); + + test('name search returns results after debounce', async ({ page }) => { + await page.goto('/database'); + await page.getByTestId('database-search-name').fill('a'); + await expect.poll(async () => page.getByTestId('database-results-count').textContent(), { + timeout: 15_000, + }).not.toMatch(/^0 results$/); + const text = await page.getByTestId('database-results-count').textContent(); + const n = Number(text?.replace(/\D/g, '') ?? '0'); + expect(n).toBeGreaterThan(0); + }); + + test('stat filter: attribute DARK applies after debounce', async ({ page }) => { + await page.goto('/database'); + await page.getByTestId('filter-add-condition').click(); + await page.getByTestId('filter-condition-field').selectOption('cat:attribute_id'); + await page.getByTestId('filter-attribute-dark').check(); + await expect(page.getByTestId('database-results-count')).toHaveText(/0 results/); + await expect.poll(async () => page.getByTestId('database-results-count').textContent(), { + timeout: 15_000, + }).not.toMatch(/^0 results$/); + const text = await page.getByTestId('database-results-count').textContent(); + const n = Number(text?.replace(/\D/g, '') ?? '0'); + expect(n).toBeGreaterThan(0); + }); +});