diff --git a/.env.example b/.env.example index 9194c4d..b5ac4cd 100644 --- a/.env.example +++ b/.env.example @@ -1,9 +1,19 @@ -# Leave empty for local environment / no api authentication -API_URL=http://localhost:3000 - # Set to production NODE_ENV=development +# OFFLINE or ONLINE, change editor mode beetween local execution and online execution +PUBLIC_MODE=OFFLINE + +# Project Manager +PUBLIC_PM_URL=https://projects.nanoforge.eu + +# Api params (required if PUBLIC_MODE=ONLINE) +API_URL=http://localhost:3000 +API_KEY=test + +# Fs root dir read/write projects (leave empty to select current directory) (if you use relative path, it will be /) +FS_ROOT= + # Leaving this empty will generate a new unique random session secret at start SESSION_SECRET= diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 41961b7..8273a67 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -30,6 +30,9 @@ jobs: - name: Prepare uses: ./.github/actions/prepare + env: + PUBLIC_MODE: ${{ vars.PUBLIC_MODE }} + PUBLIC_PM_URL: ${{ vars.PUBLIC_PM_URL }} - name: Release packages uses: ./node_modules/@nanoforge-dev/actions/dist/create-release-pr diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index 69e84c1..8e92df5 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -21,6 +21,9 @@ jobs: - name: Prepare uses: ./.github/actions/prepare + env: + PUBLIC_MODE: ${{ vars.PUBLIC_MODE }} + PUBLIC_PM_URL: ${{ vars.PUBLIC_PM_URL }} - name: Create release tag uses: ./node_modules/@nanoforge-dev/actions/dist/create-release-tag diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0faa30a..1bd5b12 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,6 +34,9 @@ jobs: - name: Prepare uses: ./.github/actions/prepare + env: + PUBLIC_MODE: ${{ vars.PUBLIC_MODE }} + PUBLIC_PM_URL: ${{ vars.PUBLIC_PM_URL }} - name: Release packages uses: ./node_modules/@nanoforge-dev/actions/dist/release-packages diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 30c2e07..c91deaa 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,6 +18,9 @@ jobs: - name: Prepare uses: ./.github/actions/prepare + env: + PUBLIC_MODE: ${{ vars.PUBLIC_MODE }} + PUBLIC_PM_URL: ${{ vars.PUBLIC_PM_URL }} - name: Run linter run: pnpm lint diff --git a/.gitignore b/.gitignore index b2b5556..e8c9d59 100644 --- a/.gitignore +++ b/.gitignore @@ -229,6 +229,5 @@ dist .svelte-kit/ test-results/ -package public/ \ No newline at end of file diff --git a/.idea/[NanoForge] Editor.iml b/.idea/[NanoForge] Editor.iml index 24643cc..668cacb 100644 --- a/.idea/[NanoForge] Editor.iml +++ b/.idea/[NanoForge] Editor.iml @@ -2,9 +2,13 @@ - - + + + + + + diff --git a/components.json b/components.json new file mode 100644 index 0000000..a74b7b4 --- /dev/null +++ b/components.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://shadcn-svelte.com/schema.json", + "style": "nova", + "aliases": { + "lib": "$lib", + "components": "$lib/components/ui", + "hooks": "$lib/hooks", + "utils": "@utils/ui" + }, + "tailwind": { + "baseColor": "neutral", + "css": "src/app.css" + }, + "typescript": true +} diff --git a/eslint.config.js b/eslint.config.js index 5fa6710..5f52b7a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -24,6 +24,8 @@ export default [ { rules: { 'svelte/no-unused-svelte-ignore': 'off', + 'svelte/no-navigation-without-resolve': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', }, }, ]; diff --git a/package.json b/package.json index 4f66737..5495ed1 100644 --- a/package.json +++ b/package.json @@ -35,9 +35,9 @@ }, "funding": "https://github.com/NanoForge-dev/Editor?sponsor", "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", + "dev": "bun --bun run vite dev", + "build": "bun --bun run vite build", + "preview": "bun --bun run vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "lint": "prettier --check . && eslint --format=pretty src", @@ -61,6 +61,8 @@ "@iconify-json/material-icon-theme": "catalog:icons", "@iconify-json/solar": "catalog:icons", "@inlang/paraglide-js": "catalog:i18n", + "@internationalized/date": "^3.12.0", + "@lucide/svelte": "^1.16.0", "@nanoforge-dev/actions": "catalog:ci", "@nanoforge-dev/ecs-lib": "catalog:core", "@nanoforge-dev/utils-eslint-config": "catalog:lint", @@ -68,6 +70,7 @@ "@playwright/test": "catalog:test", "@sveltejs/kit": "catalog:core", "@sveltejs/vite-plugin-svelte": "catalog:core", + "@tanstack/svelte-query": "catalog:libs-front", "@trivago/prettier-plugin-sort-imports": "catalog:lint", "@tsconfig/svelte": "catalog:build", "@types/bun": "catalog:core", @@ -77,13 +80,19 @@ "@unocss/preset-wind4": "catalog:css", "@vitest/browser-playwright": "catalog:test", "@vitest/coverage-v8": "catalog:test", + "bits-ui": "^2.16.3", + "bun": "catalog:core", + "clsx": "catalog:css", + "dotenv": "catalog:libs-back", "eslint": "catalog:lint", "eslint-plugin-svelte": "catalog:lint", "flowbite": "catalog:components", "flowbite-svelte": "catalog:components", + "formsnap": "catalog:libs-front", "globals": "catalog:lint", "husky": "catalog:ci", "lint-staged": "catalog:ci", + "mode-watcher": "catalog:libs-front", "monaco-editor": "catalog:components", "playwright": "catalog:test", "prettier": "catalog:lint", @@ -92,13 +101,18 @@ "svelte-adapter-bun": "catalog:build", "svelte-check": "catalog:core", "svelte-kit-sessions": "catalog:core", - "svelte-sonner": "catalog:components", + "svelte-sonner": "catalog:libs-front", + "sveltekit-superforms": "catalog:libs-front", + "tailwind-merge": "catalog:css", + "tailwind-variants": "catalog:css", + "tailwindcss": "catalog:css", "typescript": "catalog:build", "typescript-eslint": "catalog:lint", "unocss": "catalog:css", "vite": "catalog:core", "vitest": "catalog:test", - "vitest-browser-svelte": "catalog:test" + "vitest-browser-svelte": "catalog:test", + "zod": "catalog:libs-front" }, "packageManager": "pnpm@10.33.0", "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a85d308..c3c23f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,98 +13,133 @@ catalogs: specifier: ^1.0.1 version: 1.0.1 typescript: - specifier: ^6.0.2 + specifier: ^6.0.3 version: 6.0.3 ci: '@commitlint/cli': - specifier: ^20.5.0 - version: 20.5.0 + specifier: ^21.0.1 + version: 21.0.1 '@commitlint/config-conventional': - specifier: ^20.5.0 - version: 20.5.0 + specifier: ^21.0.1 + version: 21.0.1 '@favware/cliff-jumper': specifier: ^6.1.0 version: 6.1.0 '@nanoforge-dev/actions': - specifier: ^1.2.3 - version: 1.2.3 + specifier: ^1.4.2 + version: 1.4.2 husky: specifier: ^9.1.7 version: 9.1.7 lint-staged: - specifier: ^16.4.0 - version: 16.4.0 + specifier: ^17.0.5 + version: 17.0.5 components: flowbite: - specifier: ^4.0.1 - version: 4.0.1 + specifier: ^4.0.2 + version: 4.0.2 flowbite-svelte: specifier: ^1.33.1 version: 1.33.1 monaco-editor: specifier: ^0.55.1 version: 0.55.1 - svelte-sonner: - specifier: ^1.1.0 - version: 1.1.0 core: '@nanoforge-dev/ecs-lib': specifier: ^1.1.2 version: 1.1.2 '@sveltejs/kit': - specifier: ^2.57.1 - version: 2.57.1 + specifier: ^2.60.1 + version: 2.60.1 '@sveltejs/vite-plugin-svelte': - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.1.2 + version: 7.1.2 '@types/bun': - specifier: ^1.3.12 - version: 1.3.12 + specifier: ^1.3.14 + version: 1.3.14 + bun: + specifier: ^1.3.14 + version: 1.3.14 svelte: - specifier: ^5.55.3 - version: 5.55.4 + specifier: ^5.55.9 + version: 5.55.9 svelte-check: - specifier: ^4.4.6 - version: 4.4.6 + specifier: ^4.4.8 + version: 4.4.8 svelte-kit-sessions: specifier: ^0.4.0 version: 0.4.0 vite: - specifier: ^8.0.8 - version: 8.0.8 + specifier: ^8.0.14 + version: 8.0.14 css: '@alexanderniebuhr/prettier-plugin-unocss': specifier: ^0.0.4 version: 0.0.4 '@unocss/extractor-svelte': - specifier: ^66.6.8 - version: 66.6.8 + specifier: ^66.7.0 + version: 66.7.0 '@unocss/preset-icons': - specifier: ^66.6.8 - version: 66.6.8 + specifier: ^66.7.0 + version: 66.7.0 '@unocss/preset-web-fonts': - specifier: ^66.6.8 - version: 66.6.8 + specifier: ^66.7.0 + version: 66.7.0 '@unocss/preset-wind4': - specifier: ^66.6.8 - version: 66.6.8 + specifier: ^66.7.0 + version: 66.7.0 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + tailwind-merge: + specifier: ^3.6.0 + version: 3.6.0 + tailwind-variants: + specifier: ^3.2.2 + version: 3.2.2 + tailwindcss: + specifier: ^4.3.0 + version: 4.3.0 unocss: - specifier: ^66.6.8 - version: 66.6.8 + specifier: ^66.7.0 + version: 66.7.0 i18n: '@inlang/paraglide-js': - specifier: ^2.15.3 - version: 2.16.0 + specifier: ^2.18.1 + version: 2.18.1 icons: '@iconify-json/ic': specifier: ^1.2.4 version: 1.2.4 '@iconify-json/material-icon-theme': - specifier: ^1.2.58 - version: 1.2.59 + specifier: ^1.2.64 + version: 1.2.64 '@iconify-json/solar': specifier: ^1.2.5 version: 1.2.5 + libs-back: + dotenv: + specifier: ^17.4.2 + version: 17.4.2 + libs-front: + '@tanstack/svelte-query': + specifier: ^6.1.30 + version: 6.1.30 + formsnap: + specifier: ^2.0.1 + version: 2.0.1 + mode-watcher: + specifier: ^1.1.0 + version: 1.1.0 + svelte-sonner: + specifier: ^1.1.1 + version: 1.1.1 + sveltekit-superforms: + specifier: ^2.30.1 + version: 2.30.1 + zod: + specifier: ^4.4.3 + version: 4.4.3 lint: '@nanoforge-dev/utils-eslint-config': specifier: ^1.0.2 @@ -116,39 +151,39 @@ catalogs: specifier: ^6.0.2 version: 6.0.2 eslint: - specifier: ^10.2.0 - version: 10.2.1 + specifier: ^10.4.0 + version: 10.4.0 eslint-plugin-svelte: - specifier: ^3.17.0 - version: 3.17.0 + specifier: ^3.17.1 + version: 3.17.1 globals: - specifier: ^17.5.0 - version: 17.5.0 + specifier: ^17.6.0 + version: 17.6.0 prettier: - specifier: ^3.8.2 + specifier: ^3.8.3 version: 3.8.3 prettier-plugin-svelte: - specifier: ^3.5.1 - version: 3.5.1 + specifier: ^4.0.1 + version: 4.0.1 typescript-eslint: - specifier: ^8.58.2 - version: 8.58.2 + specifier: ^8.59.4 + version: 8.59.4 test: '@playwright/test': - specifier: ^1.59.1 - version: 1.59.1 + specifier: ^1.60.0 + version: 1.60.0 '@vitest/browser-playwright': - specifier: ^4.1.4 - version: 4.1.4 + specifier: ^4.1.7 + version: 4.1.7 '@vitest/coverage-v8': - specifier: ^4.1.4 - version: 4.1.4 + specifier: ^4.1.7 + version: 4.1.7 playwright: - specifier: ^1.59.1 - version: 1.59.1 + specifier: ^1.60.0 + version: 1.60.0 vitest: - specifier: ^4.1.4 - version: 4.1.4 + specifier: ^4.1.7 + version: 4.1.7 vitest-browser-svelte: specifier: ^2.1.1 version: 2.1.1 @@ -162,10 +197,10 @@ importers: version: 0.0.4 '@commitlint/cli': specifier: catalog:ci - version: 20.5.0(@types/node@25.6.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) + version: 21.0.1(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3) '@commitlint/config-conventional': specifier: catalog:ci - version: 20.5.0 + version: 21.0.1 '@favware/cliff-jumper': specifier: catalog:ci version: 6.1.0 @@ -174,144 +209,186 @@ importers: version: 1.2.4 '@iconify-json/material-icon-theme': specifier: catalog:icons - version: 1.2.59 + version: 1.2.64 '@iconify-json/solar': specifier: catalog:icons version: 1.2.5 '@inlang/paraglide-js': specifier: catalog:i18n - version: 2.16.0 + version: 2.18.1(typescript@6.0.3) + '@internationalized/date': + specifier: ^3.12.0 + version: 3.12.1 + '@lucide/svelte': + specifier: ^1.16.0 + version: 1.16.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@nanoforge-dev/actions': specifier: catalog:ci - version: 1.2.3 + version: 1.4.2 '@nanoforge-dev/ecs-lib': specifier: catalog:core version: 1.1.2 '@nanoforge-dev/utils-eslint-config': specifier: catalog:lint - version: 1.0.2(@types/eslint@9.6.1)(eslint@10.2.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3) + version: 1.0.2(@types/eslint@9.6.1)(eslint@10.4.0(jiti@2.7.0))(prettier@3.8.3)(typescript@6.0.3) '@nanoforge-dev/utils-prettier-config': specifier: catalog:lint version: 1.0.2 '@playwright/test': specifier: catalog:test - version: 1.59.1 + version: 1.60.0 '@sveltejs/kit': specifier: catalog:core - version: 2.57.1(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + version: 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': specifier: catalog:core - version: 7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + version: 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@tanstack/svelte-query': + specifier: catalog:libs-front + version: 6.1.30(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@trivago/prettier-plugin-sort-imports': specifier: catalog:lint - version: 6.0.2(prettier-plugin-svelte@3.5.1(prettier@3.8.3)(svelte@5.55.4(@typescript-eslint/types@8.58.2)))(prettier@3.8.3)(svelte@5.55.4(@typescript-eslint/types@8.58.2)) + version: 6.0.2(prettier-plugin-svelte@4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)))(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) '@tsconfig/svelte': specifier: catalog:build version: 5.0.8 '@types/bun': specifier: catalog:core - version: 1.3.12 + version: 1.3.14 '@unocss/extractor-svelte': specifier: catalog:css - version: 66.6.8 + version: 66.7.0 '@unocss/preset-icons': specifier: catalog:css - version: 66.6.8 + version: 66.7.0 '@unocss/preset-web-fonts': specifier: catalog:css - version: 66.6.8 + version: 66.7.0 '@unocss/preset-wind4': specifier: catalog:css - version: 66.6.8 + version: 66.7.0 '@vitest/browser-playwright': specifier: catalog:test - version: 4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))(vitest@4.1.4) + version: 4.1.7(playwright@1.60.0)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) '@vitest/coverage-v8': specifier: catalog:test - version: 4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4) + version: 4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7) + bits-ui: + specifier: ^2.16.3 + version: 2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + bun: + specifier: catalog:core + version: 1.3.14 + clsx: + specifier: catalog:css + version: 2.1.1 + dotenv: + specifier: catalog:libs-back + version: 17.4.2 eslint: specifier: catalog:lint - version: 10.2.1(jiti@2.6.1) + version: 10.4.0(jiti@2.7.0) eslint-plugin-svelte: specifier: catalog:lint - version: 3.17.0(eslint@10.2.1(jiti@2.6.1))(svelte@5.55.4(@typescript-eslint/types@8.58.2)) + version: 3.17.1(eslint@10.4.0(jiti@2.7.0))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) flowbite: specifier: catalog:components - version: 4.0.1 + version: 4.0.2 flowbite-svelte: specifier: catalog:components - version: 1.33.1(svelte@5.55.4(@typescript-eslint/types@8.58.2))(tailwindcss@4.2.2) + version: 1.33.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(tailwindcss@4.3.0) + formsnap: + specifier: catalog:libs-front + version: 2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)) globals: specifier: catalog:lint - version: 17.5.0 + version: 17.6.0 husky: specifier: catalog:ci version: 9.1.7 lint-staged: specifier: catalog:ci - version: 16.4.0 + version: 17.0.5 + mode-watcher: + specifier: catalog:libs-front + version: 1.1.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) monaco-editor: specifier: catalog:components version: 0.55.1 playwright: specifier: catalog:test - version: 1.59.1 + version: 1.60.0 prettier: specifier: catalog:lint version: 3.8.3 prettier-plugin-svelte: specifier: catalog:lint - version: 3.5.1(prettier@3.8.3)(svelte@5.55.4(@typescript-eslint/types@8.58.2)) + version: 4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte: specifier: catalog:core - version: 5.55.4(@typescript-eslint/types@8.58.2) + version: 5.55.9(@typescript-eslint/types@8.59.4) svelte-adapter-bun: specifier: catalog:build - version: 1.0.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(typescript@6.0.3) + version: 1.0.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(typescript@6.0.3) svelte-check: specifier: catalog:core - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3) + version: 4.4.8(picomatch@4.0.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) svelte-kit-sessions: specifier: catalog:core - version: 0.4.0(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2)) + version: 0.4.0(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) svelte-sonner: - specifier: catalog:components - version: 1.1.0(svelte@5.55.4(@typescript-eslint/types@8.58.2)) + specifier: catalog:libs-front + version: 1.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + sveltekit-superforms: + specifier: catalog:libs-front + version: 2.30.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) + tailwind-merge: + specifier: catalog:css + version: 3.6.0 + tailwind-variants: + specifier: catalog:css + version: 3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.0) + tailwindcss: + specifier: catalog:css + version: 4.3.0 typescript: specifier: catalog:build version: 6.0.3 typescript-eslint: specifier: catalog:lint - version: 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) + version: 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) unocss: specifier: catalog:css - version: 66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + version: 66.7.0(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) vite: specifier: catalog:core - version: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) + version: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) vitest: specifier: catalog:test - version: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + version: 4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) vitest-browser-svelte: specifier: catalog:test - version: 2.1.1(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vitest@4.1.4) + version: 2.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7) + zod: + specifier: catalog:libs-front + version: 4.4.3 packages: - '@actions/core@3.0.0': - resolution: {integrity: sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==} + '@actions/core@3.0.1': + resolution: {integrity: sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==} '@actions/exec@3.0.0': resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==} - '@actions/github@9.1.0': - resolution: {integrity: sha512-u0hDGQeCS+7VNoLA8hYG65RLdPLMaPGfka0sZ0up7P0AiShqfX6xcuXNteGkQ7X7Tod7AMNwHd4p7DS63i8zzA==} + '@actions/github@9.1.1': + resolution: {integrity: sha512-tL5JbYOBZHc0ngEnCsaDcryUizIUIlQyIMwy1Wkx93H5HzbBJ7TbiPx2PnFjBwZW0Vh05JmfFZhecE6gglYegA==} '@actions/http-client@3.0.2': resolution: {integrity: sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==} - '@actions/http-client@4.0.0': - resolution: {integrity: sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==} + '@actions/http-client@4.0.1': + resolution: {integrity: sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==} '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} @@ -326,6 +403,12 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@ark/schema@0.56.0': + resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==} + + '@ark/util@0.56.0': + resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==} + '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -346,11 +429,15 @@ packages: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -370,74 +457,74 @@ packages: '@blazediff/core@1.9.1': resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} - '@commitlint/cli@20.5.0': - resolution: {integrity: sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==} - engines: {node: '>=v18'} + '@commitlint/cli@21.0.1': + resolution: {integrity: sha512-8vq10krmbJwBkvzXKhbs4o4JQEVscd3pqOlWuDUaDBwbeL694/P33UC29tZQFTAgPU9fVJ2+f2m3zw16yKWxHg==} + engines: {node: '>=22.12.0'} hasBin: true - '@commitlint/config-conventional@20.5.0': - resolution: {integrity: sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==} - engines: {node: '>=v18'} + '@commitlint/config-conventional@21.0.1': + resolution: {integrity: sha512-gRorrkfWOh/+V5X8GYWWbQvrzPczopGMS4CCNrQdHkK4xWElv82BDvIsDhJZWTlI7TazOlYea6VATufCsFs+sw==} + engines: {node: '>=22.12.0'} - '@commitlint/config-validator@20.5.0': - resolution: {integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==} - engines: {node: '>=v18'} + '@commitlint/config-validator@21.0.1': + resolution: {integrity: sha512-Zd2UFdndeMMaW2O96HK0tdfT4gOImUvidMpAd/pws2zZ4m1nrAZ/9b/v2JYuE8fs86GpXv9F7LNaIuCIWhY+pA==} + engines: {node: '>=22.12.0'} - '@commitlint/ensure@20.5.0': - resolution: {integrity: sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==} - engines: {node: '>=v18'} + '@commitlint/ensure@21.0.1': + resolution: {integrity: sha512-jJ1037967wU7YN/xkv+iRlOBlmaOXPhPO5KQSqya6GyXzBlwuLzELBFao16DVg9dZyqmNrhewzwZ3SAibetHBQ==} + engines: {node: '>=22.12.0'} - '@commitlint/execute-rule@20.0.0': - resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} - engines: {node: '>=v18'} + '@commitlint/execute-rule@21.0.1': + resolution: {integrity: sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==} + engines: {node: '>=22.12.0'} - '@commitlint/format@20.5.0': - resolution: {integrity: sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==} - engines: {node: '>=v18'} + '@commitlint/format@21.0.1': + resolution: {integrity: sha512-ksmG2+cHGtuDPQQbhBbC4unwm444+6TiPw0d1bKf67hntgZqZ8E0g1MuYKUuyT5IH4IMmXZhKq22/Z3jBvtQIw==} + engines: {node: '>=22.12.0'} - '@commitlint/is-ignored@20.5.0': - resolution: {integrity: sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==} - engines: {node: '>=v18'} + '@commitlint/is-ignored@21.0.1': + resolution: {integrity: sha512-iNDP8SFdw8JEkM0CHZ2XFnhTN4Zg5jKUY2d8kBOSFrI2aA+3YJI7fcqVpfgbpJ9xtxFVYpi+DBATU5AvhoTq8g==} + engines: {node: '>=22.12.0'} - '@commitlint/lint@20.5.0': - resolution: {integrity: sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==} - engines: {node: '>=v18'} + '@commitlint/lint@21.0.1': + resolution: {integrity: sha512-gF+iYtUw1gBG3HUH9z3VxwUjGg2R2G5j+nmvPs8aIeYkiB7TtneBu3wO85I0bUl93bYNsvsCNI9Nte2fmDUMww==} + engines: {node: '>=22.12.0'} - '@commitlint/load@20.5.0': - resolution: {integrity: sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==} - engines: {node: '>=v18'} + '@commitlint/load@21.0.1': + resolution: {integrity: sha512-Btg1q1mKmiihN4W3x0EsPDrJMOQfMa9NIqlzlJyXAfxvsOGdGXOW5p3R3RcSxDCaY7JabY9flIl+Om1af3PSrw==} + engines: {node: '>=22.12.0'} - '@commitlint/message@20.4.3': - resolution: {integrity: sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==} - engines: {node: '>=v18'} + '@commitlint/message@21.0.1': + resolution: {integrity: sha512-R3dVQeJQ0B6yqrZEjkUHD4r7UJYLV9Lvk2xs3PTOmtWk2G3mI6Xgc+YdRxL1PwcDfBiUjv2SkIkW4AUc976w1w==} + engines: {node: '>=22.12.0'} - '@commitlint/parse@20.5.0': - resolution: {integrity: sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==} - engines: {node: '>=v18'} + '@commitlint/parse@21.0.1': + resolution: {integrity: sha512-oh/nCSOqdoeQNA1tO8aAmxkq5EBo8/NzcFQRvv66AWc9HpED28sL2iSicCKU6hPintWuscL6BJEWi77Wq1LPMQ==} + engines: {node: '>=22.12.0'} - '@commitlint/read@20.5.0': - resolution: {integrity: sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==} - engines: {node: '>=v18'} + '@commitlint/read@21.0.1': + resolution: {integrity: sha512-pMEu4lbpC8W0ZgKJj2U6WaobXIZWdFlULpIEewYhkPXx+WZcnoO53YrVPc7QErQuNolq2Me8dP58Wu7YAVXVOA==} + engines: {node: '>=22.12.0'} - '@commitlint/resolve-extends@20.5.0': - resolution: {integrity: sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==} - engines: {node: '>=v18'} + '@commitlint/resolve-extends@21.0.1': + resolution: {integrity: sha512-0DhjYWL6uYrY16Efa032fYk3woGJDU4AGWiG1XXltT9AMUNYKyb5cIZU2ivbaMZ3+kKFqUjikD2cjh66Sbh/Sg==} + engines: {node: '>=22.12.0'} - '@commitlint/rules@20.5.0': - resolution: {integrity: sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==} - engines: {node: '>=v18'} + '@commitlint/rules@21.0.1': + resolution: {integrity: sha512-VMooYpz4nJg7xlaUso6CCOWEz8D/ChkvsvZUMARcoJ1ZpfKPyFCGrHNha2tbsETNAb6ErgiRuCr2DvghrvPDYQ==} + engines: {node: '>=22.12.0'} - '@commitlint/to-lines@20.0.0': - resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} - engines: {node: '>=v18'} + '@commitlint/to-lines@21.0.1': + resolution: {integrity: sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==} + engines: {node: '>=22.12.0'} - '@commitlint/top-level@20.4.3': - resolution: {integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==} - engines: {node: '>=v18'} + '@commitlint/top-level@21.0.1': + resolution: {integrity: sha512-4esUYqzY7K0FCgcJ/1xWEZekV7Ch4yZT1+xjEb7KzqbJ05XEkxHVsTfC8ADKNNtlCE2pj98KEbPGZWw9WwEnVw==} + engines: {node: '>=22.12.0'} - '@commitlint/types@20.5.0': - resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==} - engines: {node: '>=v18'} + '@commitlint/types@21.0.1': + resolution: {integrity: sha512-4u7w8jcoCUFWhjWnASYzZHAP34OqOtuFBN87nQmFvqda03YU0T6z+yB4w0gSAMpekiRqqGk5rt+qSlW+a2vSEg==} + engines: {node: '>=22.12.0'} '@conventional-changelog/git-client@2.7.0': resolution: {integrity: sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==} @@ -460,11 +547,11 @@ packages: '@dprint/toml@0.7.0': resolution: {integrity: sha512-eFaQTcfxKHB+YyTh83x7GEv+gDPuj9q5NFOTaoj5rZmQTbj6OgjjMxUicmS1R8zYcx8YAq5oA9J3YFa5U6x2gA==} - '@emnapi/core@1.9.2': - resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - '@emnapi/runtime@1.9.2': - resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} @@ -483,8 +570,8 @@ packages: resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.5': - resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.2.1': @@ -503,6 +590,9 @@ packages: resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@exodus/schemasafe@1.3.0': + resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} + '@favware/cliff-jumper@6.1.0': resolution: {integrity: sha512-BTuJ3evIMbkXgcQSk9K9B2vAuENi0bzS6qhtKLx6ZO/LTUIuoJfG05IsLqTngwBsJ6ZGnN3dXYGK/ANVMT8Xrw==} engines: {node: '>=v18'} @@ -521,6 +611,12 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} @@ -544,8 +640,8 @@ packages: '@iconify-json/ic@1.2.4': resolution: {integrity: sha512-pzPMmrZrBQuwT7nmtrYdkttun8KalRGgZPIL1Ny9KpF2zjRGIUPN+npTfuD3lrgO/OnSwAoJWuekQwBpt/Cqrw==} - '@iconify-json/material-icon-theme@1.2.59': - resolution: {integrity: sha512-tm5at2S/bm/WMkkQNDD9szc0v1F0Zx2nqdsu5F6SDmK60UJTOZeNqIDEflSXHjptVCepq05/sDh3vLgEHDhqnQ==} + '@iconify-json/material-icon-theme@1.2.64': + resolution: {integrity: sha512-YUTQ7IQ919XwcSz7qKDixj5+63PD8lDgimtRtQwo5clcLZAwf9SyzeUOTLTPR17plPNo0xjlgDi4UcMXfz2xFQ==} '@iconify-json/solar@1.2.5': resolution: {integrity: sha512-WMAiNwchU8zhfrySww6KQBRIBbsQ6SvgIu2yA+CHGyMima/0KQwT5MXogrZPJGoQF+1Ye3Qj6K+1CiyNn3YkoA==} @@ -553,20 +649,28 @@ packages: '@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==} - '@inlang/paraglide-js@2.16.0': - resolution: {integrity: sha512-O7KKvVoTsGqPRt1VfSvd0UyfSjU2qHiABx968M2decgG7Af6TddW3dTJrTS3I78nOUgRAlYwCYfKefSGD4rGMA==} + '@inlang/paraglide-js@2.18.1': + resolution: {integrity: sha512-YzIrJ34KbsJwzvVKBzcBEgp4AqmhNYD1EF2pOV+g87L024XTFmcmikI4/NMfb63H9zJ6UeEPTOmEK7Nzu/4E2Q==} hasBin: true + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true '@inlang/recommend-sherlock@0.2.1': resolution: {integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==} - '@inlang/sdk@2.9.1': - resolution: {integrity: sha512-y0C3xaKo6pSGDr3p5OdreRVT3THJpgKVe1lLvG3BE4v9lskp3UfI9cPCbN8X2dpfLt/4ljtehMb5SykpMfJrMg==} + '@inlang/sdk@2.9.3': + resolution: {integrity: sha512-E/SxcSji8WIt4DqQG9APlOs6tVtJxrrOUS3dE4ho3pWRCLLIY0PIVzgNwSukuFT+m8LuJDFwpRY5VY3ryzyGWQ==} engines: {node: '>=20.0.0'} + '@internationalized/date@3.12.1': + resolution: {integrity: sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==} + '@isaacs/ttlcache@1.4.1': resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} @@ -587,15 +691,20 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@lix-js/sdk@0.4.9': - resolution: {integrity: sha512-30mDkXpx704359oRrJI42bjfCspCiaMItngVBbPkiTGypS7xX4jYbHWQkXI8XuJ7VDB69D0MsVU6xfrBAIrM4A==} + '@lix-js/sdk@0.4.10': + resolution: {integrity: sha512-0dMInAJK/67guTG5rRZaCEhvzC5cCXENOjaePA5AqMXrCE97kaY7SRor9e2vnoGsFIiGqXKlT0MCIoZj36G0gg==} engines: {node: '>=18'} '@lix-js/server-protocol-schema@0.1.1': resolution: {integrity: sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==} - '@nanoforge-dev/actions@1.2.3': - resolution: {integrity: sha512-YVQ1e3H5MVHGBku2bA+lMLb+mkDXvJvYN228V6L0R+HXxo82X3Y1oVDKzlsnz+GRvYejJXEsY6jzPrV3pzbGwA==} + '@lucide/svelte@1.16.0': + resolution: {integrity: sha512-AvvPJnaWxeiNkAljI5MsSEc84yHPLMaWQIAJOcbX7k9au/f9ITS7cxTTQiautDiOFKVOXiYdZ+d6mtl88J+Kbg==} + peerDependencies: + svelte: ^5 + + '@nanoforge-dev/actions@1.4.2': + resolution: {integrity: sha512-7oUAcsNLxGDjLIzYe2z57qPS/OkOFBf8jKPF0Xn1lC5fZzpej7U+x3TG2J3JsmmX4ar1D5QYRkRgR4E9wD9VNw==} engines: {node: '25'} '@nanoforge-dev/common@1.1.0': @@ -661,145 +770,225 @@ packages: resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.8': - resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==} + '@octokit/request@10.0.9': + resolution: {integrity: sha512-o8Bi3f608eyM+7BmBiUWxFsdjLb3/ym1cQek5LZOv9KkZcxRrHCPhhRzm6xjO6HVZ85ItD6+sTsjxo821SVa/A==} engines: {node: '>= 20'} '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@oxc-parser/binding-android-arm-eabi@0.124.0': - resolution: {integrity: sha512-+R9zCafSL8ovjokdPtorUp3sXrh8zQ2AC2L0ivXNvlLR0WS+5WdPkNVrnENq5UvzagM4Xgl0NPsJKz3Hv9+y8g==} + '@oven/bun-darwin-aarch64@1.3.14': + resolution: {integrity: sha512-Omj20SuiHBOUjUBIyqtkNjSUIjOtEOJwmbix/ZyFH4BaQ6OZTaaRWIR4TjHVz0yadHgli6lLTiAh1uarnvD49A==} + cpu: [arm64] + os: [darwin] + + '@oven/bun-darwin-x64-baseline@1.3.14': + resolution: {integrity: sha512-OSfsTZstc898HHElhU4NccaBGOSSDn5VfahiVTnidZ9B/+wb7WTyfZJaBeJcfjwJ9H2W9uTh2TGtl3UfcXgV9g==} + cpu: [x64] + os: [darwin] + + '@oven/bun-darwin-x64@1.3.14': + resolution: {integrity: sha512-FFj3QdU/OhlDyZOJ8CWfN5eWLpRlT4qjZg7lMQi7jA6GuoY5ajlO1zWLP/MuHYRSbXQUvV52RejNi8DVnAp13w==} + cpu: [x64] + os: [darwin] + + '@oven/bun-freebsd-aarch64@1.3.14': + resolution: {integrity: sha512-LIKrXaFxAHybVO5Pf+9XP2FHUj/5APvXTUKk9dqHm5iFz4oH+W24cmhjkJirNujh9hKeTyrpWSe3no9JZKowIw==} + cpu: [arm64] + os: [freebsd] + + '@oven/bun-freebsd-x64@1.3.14': + resolution: {integrity: sha512-uwD+fGUH1ADpIF3B1U2jWzzb20QwRLZfj5QZ28GUCGrAJ/nTmWrD6YYGsblCY1wuhldRez3lU40AyuvSCyLYmw==} + cpu: [x64] + os: [freebsd] + + '@oven/bun-linux-aarch64-android@1.3.14': + resolution: {integrity: sha512-y4kq5b85lsrmFb9Xvi4w9mA5IEFJkLMrSmYn06q24KjL9rUWDWO3VFZEtteZxUN5+ec3Zm5S8OnJw1umaCbVjA==} + cpu: [arm64] + os: [android] + + '@oven/bun-linux-aarch64-musl@1.3.14': + resolution: {integrity: sha512-jmqOA92Cd1NL/1XBd4bFkJLxQ86K0RW7ohxS2qzzAvuitO4JiIxjjTeCspoU44zCozH72HpfZfUE2On31OjnWA==} + cpu: [arm64] + os: [linux] + + '@oven/bun-linux-aarch64@1.3.14': + resolution: {integrity: sha512-X5SsPZHs+iYO8R/efIcRtc7gT2Q2DgPfliCxEkx4cXBumwkw0c/EsHMNwH3EgGpCDaZ7IYVPhpCG/xBOQHEwZw==} + cpu: [arm64] + os: [linux] + + '@oven/bun-linux-x64-android@1.3.14': + resolution: {integrity: sha512-qe9e1d+3VAEU7nAA2ol9Jvmy/o99PVMSgZhHn7Q/9O3YcDrfEqyQ8zm4zoe5qTEo8HZH0dN03Le0Ys2eQPs7eg==} + cpu: [x64] + os: [android] + + '@oven/bun-linux-x64-baseline@1.3.14': + resolution: {integrity: sha512-q/8EdOC0yUE8FPeoOVq8/Pw5I9/tJaYmUfO/uDUAREx8IUnOJH1RJ5A3BjFqre8pvJoiZA9AovPJq5FnNNjSxA==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64-musl-baseline@1.3.14': + resolution: {integrity: sha512-n6iE71G4lQE4XkrZhQQcL5YUlxDbnq6nqV7zeQi33PMsLT/0kYE+RvHOtBWZ3w0wMdXZfINmp63hIb9ijUBGtw==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64-musl@1.3.14': + resolution: {integrity: sha512-GBCB/k/sIqcr06eTNgg7g46qiUv35Jasx4XiccJ/n7RGqrE4RWUD/XJBbWFprVPjvqd59+QtSnS99XGqvftHfg==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64@1.3.14': + resolution: {integrity: sha512-7OVTAKvwfPmSbIV1HpdOoVVx5VRc427GuPPne93N6vk4eQBPId9nXmZDh9/zGaKPdbVjVtQSZafWQoUjx38Utw==} + cpu: [x64] + os: [linux] + + '@oven/bun-windows-aarch64@1.3.14': + resolution: {integrity: sha512-T7s3x/BsVKQObGU6QDkZeI6wKynzqGbBH1yI77jrrj5siElclxr3DQrDIk8CV4G5/SJq2HHq4kpLyYY2DKCSmA==} + cpu: [arm64] + os: [win32] + + '@oven/bun-windows-x64-baseline@1.3.14': + resolution: {integrity: sha512-uIjLUC1S9DWgICzuoMba7vurBJnBruE4S5CxnvmZkdqWVXRzx1Rgu636HoH+k0qeaQCFh3jeG3JQ1y6fRHv0sw==} + cpu: [x64] + os: [win32] + + '@oven/bun-windows-x64@1.3.14': + resolution: {integrity: sha512-mUFWL3BoYkNpjd8e9PqROiFF/1Xeotq20mABJsiQH62jM1g5zqWh4khw1RZ6bX8Q8fWvlPaxG1PjofkmjUi3vg==} + cpu: [x64] + os: [win32] + + '@oxc-parser/binding-android-arm-eabi@0.131.0': + resolution: {integrity: sha512-t2xicr9pfzkSRYx5aPqZqlLaayIwJTqgQ81Jor31Xep2nGyL2Aq3d0K5wOfeR7VevaSdxaS9dzSQP9xDwn8fDg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.124.0': - resolution: {integrity: sha512-ULHC/gVZ+nP4pd3kNNQTYaQ/e066BW/KuY5qUsvwkVWwOUQGDg+WpfyVOmQ4xfxoue6cMlkKkJ+ntdzfDXpNlg==} + '@oxc-parser/binding-android-arm64@0.131.0': + resolution: {integrity: sha512-nlGIod6gw75x1aEDgLS+srj+JRGY0HHm9MI9YgzE/B64l6d6+H3MSP9NOgp0+HTg8tp4vV9rVfgQGgd+TfVZcA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.124.0': - resolution: {integrity: sha512-fGJ2hw7bnbUYn6UvTjp0m4WJ9zXz3cohgcwcgeo7gUZehpPNpvcVEVeIVHNmHnAuAw/ysf4YJR8DA1E+xCA4Lw==} + '@oxc-parser/binding-darwin-arm64@0.131.0': + resolution: {integrity: sha512-jukuV6xe5RbQKFo7QD34NDCLDZp4PSOm8rmckhNdH/60ymG5zXbDzGBEyc+nTkuLQNama2aSGCt+CPfpjNTqyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.124.0': - resolution: {integrity: sha512-j0+re9pgps5BH2Tk3fm59Hi3QuLP3C4KhqXi6A+wRHHHJWDFR8mc/KI9mBrfk2JRT+15doGo+zv1eN75/9DuOw==} + '@oxc-parser/binding-darwin-x64@0.131.0': + resolution: {integrity: sha512-g3JOo4khe9rslHm5WYaVDWb0HS/M1MLR3I9S8560MkKIcC96VQY00QjOlsuRyfSj/JDXj8i9T7ryPO2RidiXVg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.124.0': - resolution: {integrity: sha512-0k5mS0npnrhKy72UfF51lpOZ2ESoPWn6gdFw+RdeRWcokraDW1O2kSx3laQ+yk7cCEavQdJSpWCYS/GvBbUCXQ==} + '@oxc-parser/binding-freebsd-x64@0.131.0': + resolution: {integrity: sha512-1hziITDTxjMePnX+dR9ocVT+EuZkQ8wm4FPAbmbEiKG+Phbo73J1ZnPAA6Y/aGsWF3McOFnQuZIktAFwalkfJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.124.0': - resolution: {integrity: sha512-P/i4eguRWvAUfGdfhQYg1jpwYkyUV6D3gefIH7HhmRl1Ph6P4IqTIEVcyJr1i/3vr1V5OHU4wonH6/ue/Qzvrw==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': + resolution: {integrity: sha512-9uRxfXwyKG9+MwmGQBo2ncPNwZH5HTmCETFM2WiuDBNDCW4NC5ttSQkwCAMrTAWgwMzVBH1CP8pM0v7nebCWXQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.124.0': - resolution: {integrity: sha512-/ameqFQH5fFP+66Atr8Ynv/2rYe4utcU7L4MoWS5JtrFLVO78g4qDLavyIlJxa6caSwYOvG/eO3c/DXqY5/6Rw==} + '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': + resolution: {integrity: sha512-mgbLvzRShXOLBdWGInf08Af4q+pfj1xD8hSgLClDZ9of/BXkB6+LIhTH7fihiDUipqB3yoSkKBWaZ3Ejlf5Yag==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.124.0': - resolution: {integrity: sha512-gNeyEcXTtfrRCbj2EfxWU85Fs0wIX3p44Y3twnvuMfkWlLrb9M1Z25AYNSKjJM+fdAjeeQCjw0on47zFuBYwQw==} + '@oxc-parser/binding-linux-arm64-gnu@0.131.0': + resolution: {integrity: sha512-OPT8++4aN6j2GJ8+3IZHS/byXoZP4aSBn+FoG6rgBJ2fKwPKXWF3MqrFMNW7NKHM28FLY579xYLxJSfgobEqPA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.124.0': - resolution: {integrity: sha512-uvG7v4Tz9S8/PVqY0SP0DLHxo4hZGe+Pv2tGVnwcsjKCCUPjplbrFVvDzXq+kOaEoUkiCY0Kt1hlZ6FDJ1LKNQ==} + '@oxc-parser/binding-linux-arm64-musl@0.131.0': + resolution: {integrity: sha512-vtPiwmfVTAXzaxDKsOXG+LwgRAA7WEnaeHzhS5z0GE89gAK18KSXnly7Z6saXXq6L3dVMyK44uoTI03zKxrpmw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.124.0': - resolution: {integrity: sha512-t7KZaaUhfp2au0MRpoENEFqwLKYDdptEry6V7pTAVdPEcFG4P6ii8yeGU9m6p5vb+b8WEKmdpGMNXBEYy7iJdw==} + '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': + resolution: {integrity: sha512-8AW8L7w5cGHSdZPcyZX2yR0+GUODsT15rbRjfdD54rv6DMbtuEB19ysLOpKJlRGfH6UNYNpCHaU1uJWgTWf1/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.124.0': - resolution: {integrity: sha512-eurGGaxHZiIQ+fBSageS8TAkRqZgdOiBeqNrWAqAPup9hXBTmQ0WcBjwsLElf+3jvDL9NhnX0dOgOqPfsjSjdg==} + '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': + resolution: {integrity: sha512-vvpjkjEOUsPcsYf8evE4MO3aGx9+3wodXEBOicGNnOwTuAik8eBONNkgSdhkGsAblQmfVHJyanRnpxglddTXIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.124.0': - resolution: {integrity: sha512-d1V7/ll1i/LhqE/gZy6Wbz6evlk0egh2XKkwMI3epiojtbtUwQSLIER0Y3yDBBocPuWOjJdvmjtEmPTTLXje/w==} + '@oxc-parser/binding-linux-riscv64-musl@0.131.0': + resolution: {integrity: sha512-AqmcNC3fClXX+fxQ6VGEN1667xVFiRBkY0CZmDMSiaeFUsv1+UkBPYYi48IUKcA9/ivvoKNRzQl2I4//kT9F/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.124.0': - resolution: {integrity: sha512-w1+cBvriUteOpox6ATqCFVkpGL47PFdcfCPGmgUZbd78Fw44U0gQkc+kVGvAOTvGrptMYgwomD1c6OTVvkrpGg==} + '@oxc-parser/binding-linux-s390x-gnu@0.131.0': + resolution: {integrity: sha512-7d3jOMKy7RSQCcDLIci+ySll2FgsOMl/GiRux4q2JNv0zg4EdhFISa9idvrdN/HEUIQQJNg6dmveUeJl2YErGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.124.0': - resolution: {integrity: sha512-RRB1evQiXRtMCsQQiAh9U0H3HzguLpE0ytfStuhRgmOj7tqUCOVxkHsvM9geZjAax6NqVRj7VXx32qjjkZPsBw==} + '@oxc-parser/binding-linux-x64-gnu@0.131.0': + resolution: {integrity: sha512-JHK/h95qVqVQ+ITER837kcTdwBDFpFaNnOTYGCP0zdUSX/mLKC7tXOoyrTb6vG7iRPwGlcgBil3v2IjYw1FqJA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.124.0': - resolution: {integrity: sha512-asVYN0qmSHlCU8H9Q47SmeJ/Z5EG4IWCC+QGxkfFboI5qh15aLlJnHmnrV61MwQRPXGnVC/sC3qKhrUyqGxUqw==} + '@oxc-parser/binding-linux-x64-musl@0.131.0': + resolution: {integrity: sha512-b2BO82O8azXAyf7EUgOPKu145nWypbNyk07HbU09fkzhm9lEA5oPvaN/M8Nlo7tOErVTa2WOgS4QbOnxAPXdDQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.124.0': - resolution: {integrity: sha512-nhwuxm6B8pn9lzAzMUfa571L5hCXYwQo8C8cx5aGOuHWCzruR8gPJnRRXGBci+uGaIIQEZDyU/U6HDgrSp/JlQ==} + '@oxc-parser/binding-openharmony-arm64@0.131.0': + resolution: {integrity: sha512-GHO9glZaX7LkX/OGfluEPf1yjg+ehiFbUdowbX6uNWOQhmwKWU4m4+nZ9FJkrHNKuxyI1KKertMdGjVKCApKWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.124.0': - resolution: {integrity: sha512-LWuq4Dl9tff7n+HjJcqoBjDlVCtruc0shgtdtGM+rTUIE9aFxHA/P+wCYR+aWMjN8m9vNaRME/sKXErmhmeKrA==} - engines: {node: '>=14.0.0'} + '@oxc-parser/binding-wasm32-wasi@0.131.0': + resolution: {integrity: sha512-3SkikPaEFoih1N83qLVEDLRLeY4nYsf6JT9SnWiMCQ5lGQdKup6bEuKCqkRiG9dD1IIaFeYz9RjlciPmYoFIWA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.124.0': - resolution: {integrity: sha512-aOh3Lf3AeH0dgzT4yBXcArFZ8VhqNXwZ/xlN0GqBtgVaGoHOOqL2YHlcVIgT+ghsXPVR2PTtYgBiQ1CNK7jp5A==} + '@oxc-parser/binding-win32-arm64-msvc@0.131.0': + resolution: {integrity: sha512-Os5bEhryeA2jkH+ZrnZyAC1EP5gs+X4YB1Fjqml7UPD5kU7ecsK1MPEVMfCrdt/GDNpDbavYXiOXOdyJ5b3OPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.124.0': - resolution: {integrity: sha512-sib5xC0nz/+SCpaETBuHBz4SXS02KuG5HtyOcHsO/SK5ZvLRGhOZx0elDKawjb6adFkD7dQCqpXUS25wY6ELKQ==} + '@oxc-parser/binding-win32-ia32-msvc@0.131.0': + resolution: {integrity: sha512-m+jNz9EuF0NXoiptc6B9h5yompZQVW/a5MJeOu5zojfH5yWk82tvF2ccrHkfhgtrS9h9DD5l1Qv8dWlfY7Nz8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.124.0': - resolution: {integrity: sha512-UgojtjGUgZgAZQYt7SC6VO65OVdxEkRe2q+2vbHJO//18qw3Hrk6UvHGQKldsQKgbVcIBT/YBrt85YberiYIPQ==} + '@oxc-parser/binding-win32-x64-msvc@0.131.0': + resolution: {integrity: sha512-o14Hk8dAyiEUMFEWEgmAwFZvBt1RzAYLM3xeQ+5315JXgVYhoemivgYcbYVRbsFkS71ShMGlAFE0kPnr460rww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.124.0': - resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} + '@oxc-project/types@0.131.0': + resolution: {integrity: sha512-PgnWDfV0h+b16XNKbXU7Daib/BFSt/J2mEzfYIBu6JB/wNdlU+kVYXCkGA1A9fWkTbOgbjh4e6NhPeQOYvFhEA==} - '@oxc-project/types@0.126.0': - resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==} + '@oxc-project/types@0.132.0': + resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} '@oxfmt/binding-android-arm-eabi@0.35.0': resolution: {integrity: sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA==} @@ -927,8 +1116,8 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.59.1': - resolution: {integrity: sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==} + '@playwright/test@1.60.0': + resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} engines: {node: '>=18'} hasBin: true @@ -938,204 +1127,109 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@poppinss/macroable@1.1.2': + resolution: {integrity: sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA==} + '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-android-arm64@1.0.0-rc.16': - resolution: {integrity: sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==} + '@rolldown/binding-android-arm64@1.0.2': + resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-arm64@1.0.0-rc.16': - resolution: {integrity: sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==} + '@rolldown/binding-darwin-arm64@1.0.2': + resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.15': - resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0-rc.16': - resolution: {integrity: sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==} + '@rolldown/binding-darwin-x64@1.0.2': + resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': - resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-freebsd-x64@1.0.0-rc.16': - resolution: {integrity: sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==} + '@rolldown/binding-freebsd-x64@1.0.2': + resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': - resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': - resolution: {integrity: sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': - resolution: {integrity: sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==} + '@rolldown/binding-linux-arm64-gnu@1.0.2': + resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': - resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} + '@rolldown/binding-linux-arm64-musl@1.0.2': + resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': - resolution: {integrity: sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': - resolution: {integrity: sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==} + '@rolldown/binding-linux-ppc64-gnu@1.0.2': + resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': - resolution: {integrity: sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.2': + resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': - resolution: {integrity: sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==} + '@rolldown/binding-linux-x64-gnu@1.0.2': + resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': - resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': - resolution: {integrity: sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==} + '@rolldown/binding-linux-x64-musl@1.0.2': + resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': - resolution: {integrity: sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==} + '@rolldown/binding-openharmony-arm64@1.0.2': + resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': - resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': - resolution: {integrity: sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==} + '@rolldown/binding-wasm32-wasi@1.0.2': + resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': - resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} + '@rolldown/binding-win32-arm64-msvc@1.0.2': + resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': - resolution: {integrity: sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': - resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': - resolution: {integrity: sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==} + '@rolldown/binding-win32-x64-msvc@1.0.2': + resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.15': - resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} - - '@rolldown/pluginutils@1.0.0-rc.16': - resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@rollup/plugin-node-resolve@15.3.1': resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} @@ -1166,6 +1260,15 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@simple-libs/child-process-utils@1.0.2': resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} engines: {node: '>=18'} @@ -1188,13 +1291,13 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@sveltejs/acorn-typescript@1.0.9': - resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + '@sveltejs/acorn-typescript@1.0.10': + resolution: {integrity: sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==} peerDependencies: acorn: ^8.9.0 - '@sveltejs/kit@2.57.1': - resolution: {integrity: sha512-VRdSbB96cI1EnRh09CqmnQqP/YJvET5buj8S6k7CxaJqBJD4bw4fRKDjcarAj/eX9k2eHifQfDH8NtOh+ZxxPw==} + '@sveltejs/kit@2.60.1': + resolution: {integrity: sha512-mQjlkNo+rJvpln7V2IGY2j99BqhcFbS4UN0AQNKNYfhBAFZTuCDAdW3a1sgf330mvtNvsBXn3HpAhcmvdJTcIQ==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1209,76 +1312,79 @@ 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 - '@tailwindcss/node@4.2.2': - resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} + '@swc/helpers@0.5.21': + resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} - '@tailwindcss/oxide-android-arm64@4.2.2': - resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} + + '@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: @@ -1289,24 +1395,32 @@ 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/postcss@4.2.2': - resolution: {integrity: sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==} + '@tailwindcss/postcss@4.3.0': + resolution: {integrity: sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w==} + + '@tanstack/query-core@5.100.11': + resolution: {integrity: sha512-lmE0994apShXPj8CUxgx4ch5yUJhE9k/+tVwihBvPOyerACWdBocfFg24t8+0RhtlTd7tEgchDkhlCxNssvDxw==} + + '@tanstack/svelte-query@6.1.30': + resolution: {integrity: sha512-4yqDsEGF8ESvQJj+bcpe2/rlOejo4gboQe1an2ned7Q3OcivXTe4nrak+EYcvuVeY7lfxRC1ouBGFkNAimM7LA==} + peerDependencies: + svelte: ^5.25.0 '@testing-library/svelte-core@1.0.0': resolution: {integrity: sha512-VkUePoLV6oOYwSUvX6ShA8KLnJqZiYMIbP2JW2t0GLWLkJxKGvuH5qrrZBV/X7cXFnLGuFQEC7RheYiZOW68KQ==} @@ -1336,11 +1450,11 @@ packages: '@tsconfig/svelte@5.0.8': resolution: {integrity: sha512-UkNnw1/oFEfecR8ypyHIQuWYdkPvHiwcQ78sh+ymIiYoF+uc5H1UBetbjyqT+vgGJ3qQN6nhucJviX6HesWtKQ==} - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} - '@types/bun@1.3.12': - resolution: {integrity: sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A==} + '@types/bun@1.3.14': + resolution: {integrity: sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1357,14 +1471,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.6.0': - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -1372,174 +1486,203 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@typescript-eslint/eslint-plugin@8.58.2': - resolution: {integrity: sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==} + '@types/validator@13.15.10': + resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==} + + '@typeschema/class-validator@0.3.0': + resolution: {integrity: sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==} + peerDependencies: + class-validator: ^0.14.1 + peerDependenciesMeta: + class-validator: + optional: true + + '@typeschema/core@0.14.0': + resolution: {integrity: sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w==} + peerDependencies: + '@types/json-schema': ^7.0.15 + peerDependenciesMeta: + '@types/json-schema': + optional: true + + '@typescript-eslint/eslint-plugin@8.59.4': + resolution: {integrity: sha512-PegsU+XfyJJNjd4+u/k6f9yTyp0lEXXiPopUNobZcIAUJFGICFLN+sP0Rb3JehVmiij1Ph0dFGYqODoRo/2+6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.58.2 + '@typescript-eslint/parser': ^8.59.4 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.58.2': - resolution: {integrity: sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==} + '@typescript-eslint/parser@8.59.4': + resolution: {integrity: sha512-zORHqO/tuhxY1zWuTvMUqddRxpiFJ72xVfcNoWpqdLjs6lfPbuQBJuW4pk+49/uBMy7Ssr4bzgjiKmmDB1UbZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.58.2': - resolution: {integrity: sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==} + '@typescript-eslint/project-service@8.59.4': + resolution: {integrity: sha512-Ly00Vu4oAacfDeHp2Zg85ioNG6l8HG+tN1D7J+xTHSxu9y0awYKJ2zH1rFBn8ZSfuGK+7FxK3Cgl3uAz0aZZLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.58.2': - resolution: {integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==} + '@typescript-eslint/scope-manager@8.59.4': + resolution: {integrity: sha512-mUeR/3H1WrTAddJrwut8OoPjfauaztMQmRwV5fQTUyNVJCLiUXXe4lGEyYIL2oFDpP7UtgbGJXCt72wT0z2S3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.58.2': - resolution: {integrity: sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==} + '@typescript-eslint/tsconfig-utils@8.59.4': + resolution: {integrity: sha512-DLCpnKgD4alVxTBSKulK+gU1KCqOgUXfDRDXh2mZgzokQKa/70ax93I2uVO3m/LLvIAtWZIFoiifudmIqAxpMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.58.2': - resolution: {integrity: sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==} + '@typescript-eslint/type-utils@8.59.4': + resolution: {integrity: sha512-uonTuPAAKr9XaBGqJ3LjYTh72zy5DyGesljO9gtmk/eFW0W1fRHjnwVYKB35Lm8d5Q5CluEW3gPHjTvZTmgrfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.58.2': - resolution: {integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==} + '@typescript-eslint/types@8.59.4': + resolution: {integrity: sha512-F1o7WJcCq+bc8dwcO/YsSEOudAH8RDtaOhM6wcAQhcUsFhnWQl81JKy48q1hoxAU0qrzM89+31GYh1515Zde3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.58.2': - resolution: {integrity: sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==} + '@typescript-eslint/typescript-estree@8.59.4': + resolution: {integrity: sha512-F+RuOmcDXo4+TPdfd/TCLS3m2nw8gE9XXyZLrA3JBfaA5tz9TtdkyD3YJFmPxulyc2cKbEok/CvFE3MgSLWnag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.58.2': - resolution: {integrity: sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==} + '@typescript-eslint/utils@8.59.4': + resolution: {integrity: sha512-cYXeNAUsG4lJo5dbc1FcKm+JwIWrj1/UpTORsC6tGMjEZ81DYcvIr9/ueikhMa/Y/gDQYGp+YX9/xQrXje5BJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.58.2': - resolution: {integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==} + '@typescript-eslint/visitor-keys@8.59.4': + resolution: {integrity: sha512-U3gxVaDVnuZKhSspW/MzMxE1kq7zOdc072FcSNoqA1I9p8HyKbBFfEHoWckBAMgNMph4MamwS5iTVzFmrnt8TQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unocss/cli@66.6.8': - resolution: {integrity: sha512-dJ4AmrhCtQwEDJtpFG7AgJ4Qi4GWnNgWWlLWq4DhKBOCcvldr9k98mscdhs3MOwph25DIxU5MdLRAg/OS1JryQ==} - engines: {node: '>=14'} + '@unocss/cli@66.7.0': + resolution: {integrity: sha512-Pkd/R+WDs8gc1i9fI5XDW8N5r7aoCWjNzt8wGGj5FWTbmsEzewueaL5LQTH4ymv/BhSHFcYpL7geQ5vYont+BA==} hasBin: true - '@unocss/config@66.6.8': - resolution: {integrity: sha512-f+a8OyhD7ZoK8Pa1b3Cbx1RQc3n5x+Qht/cHg3wh/g4DNQIjBI2EqwSLfBigWhdO96zIqFAdyTlO3onmrJwUOw==} - engines: {node: '>=14'} + '@unocss/config@66.7.0': + resolution: {integrity: sha512-C6waL+xzqAPzz5n47qnrs4GbyAtlusNYYmcV6DKYh1MgUP4EFhMnEMyuR2mw3M3tsBpyGuehLdRK5+ECF5yLkA==} '@unocss/core@0.25.1': resolution: {integrity: sha512-YYX40KA2rhsm6aTKTGpE0bi9E7RoAcuqMo/L+f6DmBSwtTXdflckoa903rxgOa6HOLH9fXgOJP9jHt3O/5ysPA==} - '@unocss/core@66.6.8': - resolution: {integrity: sha512-P9IlQfgms+8/nka7fBhiiWU4SPwrTNKbTdK0z1SLnttXMHHjsB2zpG+Vi1JQDpICfY9Y1/2pWtguPE+zeOVu9Q==} + '@unocss/core@66.7.0': + resolution: {integrity: sha512-j6MFMx5C3iIwW4T4hVbh+30fKWgSGkmS3bCcdjlfqM88lRT+dHFBN9nkfNOBJT6e6IHN9415nexuzcQvTjJXxw==} - '@unocss/extractor-arbitrary-variants@66.6.8': - resolution: {integrity: sha512-cOXstpPTOLt/HYcL0OsqFkNau0e8ktZ5Q8fgnXBZjmLGmi+VzdESNlwxZyCXLuamZGnbrZ8lDsKdsGG7P1pMKQ==} + '@unocss/extractor-arbitrary-variants@66.7.0': + resolution: {integrity: sha512-iHMlXmb8aGtYgPQ8o3D4rMz9DKOqSp8g/LWvEoiM7arSjJF9jMpcpYlqZXzkg1mSQX23TRW76Qxj1gyI4lRd9w==} - '@unocss/extractor-svelte@66.6.8': - resolution: {integrity: sha512-wd18VGnhtj+UXsVJ6gMGb3QN2/lgoZsHZ7kQO/nDcCBKJdVMygzz4a0Di30qJDSx5VuOqMVNFv9bO/ERBjxdQw==} + '@unocss/extractor-svelte@66.7.0': + resolution: {integrity: sha512-5T0FQdM2lNv6Q2BTynbsHX9dZ2gRkdnwmc43h+sDobdEOo9oBUiOzVsmez1AAyMvh/UPZF9Bz/UM4qKBuWZr2Q==} - '@unocss/inspector@66.6.8': - resolution: {integrity: sha512-g8uRzXDdmoNRjXX/mZP7m0rWXLtOimyOW7+VFK6FNxRWBmvIGYgTLHkutF6Wyh9lLPDYx3pkkEmfgL35BDT3Sg==} + '@unocss/inspector@66.7.0': + resolution: {integrity: sha512-W1MOO2d/1ZHwFR8+mrUUW6KW3MgJ6FdrSWfWeQ1+fgb0TVj8CweNzeSh46sTEXEcpvlui5mnGYFxanpLMoyOtA==} - '@unocss/preset-attributify@66.6.8': - resolution: {integrity: sha512-YxyRSF5rq0WbY8kCG0gpj3DSXPL89QGxZeqABmceCzPJbXJBBHEJz/pgBPmzSa2Ziulgs0AEkHzWFPfpb2uGTA==} + '@unocss/preset-attributify@66.7.0': + resolution: {integrity: sha512-n8ikthHHkAOeHWUwqRNIMGijV6LuIhiZb3D6kreV3oK98wJYupGNGYMByx7R9gQD9uBNLGs0f1jsaAScV3S2Sw==} - '@unocss/preset-icons@66.6.8': - resolution: {integrity: sha512-+zD5TNGZIXvVOMcvDIYaTXinffpDMERGj6Ch8WTtJluA6qHHBvRuFexoU2bY8nF1r0HZkYzNT9C+RujFSP+6TA==} + '@unocss/preset-icons@66.7.0': + resolution: {integrity: sha512-y6I2qZ2cwNAS2XRBig1lHzdFG9qTnZM/mx3fL3XnURnEYZird4uidLyWOyUGcdy1kMot1QcYVb0D/s9NgrEOgQ==} '@unocss/preset-mini@0.25.1': resolution: {integrity: sha512-NBfa2/t0TIAT//L8OVskDDQJ3OREjLwDzWMBNO86rvM0VPCIBvCmkKuFR3zxQcWK+aegISeScJA9Zcdk3qJjHA==} - '@unocss/preset-mini@66.6.8': - resolution: {integrity: sha512-vAechrReO7LtWzFAeF54P7CintG2m65SlVlBsi1x2Ru7IdgUNJEHII0MfXUvf9r1x8vsIlhATyaqqtBVT6ps/w==} + '@unocss/preset-mini@66.7.0': + resolution: {integrity: sha512-+YtRlr1Fjd24GYWhPB93r6fjefTBCnFUsZCASncSEU29u2Mi8MYINjefLfKlSJFMKg6AKzWbelKMCQfoKlUkbg==} - '@unocss/preset-tagify@66.6.8': - resolution: {integrity: sha512-cG6zBYswtWTpeQe/Lb1Bh+IzU4Ck+VI8rpYvrnvSGl22rJjAsXd+buB1P0PjyDpoe924rq0bLTayZ8r6Ayyyvw==} + '@unocss/preset-tagify@66.7.0': + resolution: {integrity: sha512-MaM07ChHsX8XZM3tlMPuRsZxbNvRVTbmIncOj9cCCrFpeOu8hy2ggRAgGOalWIwnIHc+5KQIkqucbgmXN7KBdA==} - '@unocss/preset-typography@66.6.8': - resolution: {integrity: sha512-wOApJpE0QfeOTWN5RuQts8zS6PXhTZIfjpt6cBj8dmv7+GlIQlwopxL7wcDb2wVwdCByuMvUbWl7nC3kz/iFTA==} + '@unocss/preset-typography@66.7.0': + resolution: {integrity: sha512-Ekdz7jw/TYTiH+QFqMWcWNMnvBnUZ/XPUF938C8DfqD79hZyLdRPo0kQaZh62cit13xNRAb49QP3HIUJIUxoGA==} '@unocss/preset-uno@0.25.1': resolution: {integrity: sha512-e5lvCF5GD52nD/7l/k4TJedw5AgsVGTs/6rKxE9DP0G5oGszKjx+oHLzoYvCP2aQAcallnZ/CxXTbOvqCQCVxQ==} - '@unocss/preset-uno@66.6.8': - resolution: {integrity: sha512-z01Rw/rBuahRulwQRnobUFnGqyU+UenOLz72KGn4p0Yh8gBC44fPlNHsOWA0TNediHRJg33HptX4kx16HCVWDg==} + '@unocss/preset-uno@66.7.0': + resolution: {integrity: sha512-fcLTj5Wax3QydCSdJq9yQHhqKph6Mx9exwNnkaBCXtmBvrSBd2O6O9ZAylcISnACeXJkjSverU8qVu1X2tITdA==} - '@unocss/preset-web-fonts@66.6.8': - resolution: {integrity: sha512-AgEHO8h0AkeOT57AOE9PS7dJOa5Rfr0gIyz/FxA7vJ/FwgQL70uX+bRW8kmoH81zcjo5xBP2IX3Z6A8VAOo3Vw==} + '@unocss/preset-web-fonts@66.7.0': + resolution: {integrity: sha512-jpNLjo/2X/J2J+G/M9W+y6VuiIhjZ9AyOnyNJHsdhmSJYCsnMuaYtP9eFn4d9+oe3Sz2lVNPV0A9RiqQ+xVAyQ==} - '@unocss/preset-wind3@66.6.8': - resolution: {integrity: sha512-WNTeDAYCatmEFjBJ4itUmz0TElBvNFqjh5i2/ianDJO/vkd+IYUb03jEPLUppVlvMhy8bN8AunP0AtW3Xf2psA==} + '@unocss/preset-wind3@66.7.0': + resolution: {integrity: sha512-1xxHBV4TtUHXPpYnWH8J2UHhxaMF84fTvadVzRRaXkyVrXD86Hveh/lfbXHXnCyf0JxwqsleOq8CnCTT8AgoAg==} - '@unocss/preset-wind4@66.6.8': - resolution: {integrity: sha512-CheOm7KXOsTI5t4RXgeYz95CO5p589F6jsyYp+inOCk4N0/d+DWiDHrQ+V0x0HWs3JXWlD+/Va/yXjlc3o2sIw==} + '@unocss/preset-wind4@66.7.0': + resolution: {integrity: sha512-5o3y2BcImLbkxa0fNtwaH8iB47FrOKzT7Xogni5PIDOX/DsoHfDLNiNBRrHHHHBeZ3jqvjv2T9T5kEkD5/WtYQ==} '@unocss/preset-wind@0.25.1': resolution: {integrity: sha512-y5gkCCNiGsonqI8OOmtMVXgEMjPDtr+ihxnS3oDptYR4CcBE1cREhLgZocChHHQNEMN9Qx2GsoMN9l6RsoExiA==} - '@unocss/preset-wind@66.6.8': - resolution: {integrity: sha512-F0mdmwK/HelYOgBRMHl+Yx/VyARCQJtPlcgPBejI3E9ZWOZlKS7hvPqPrgvS63WTGMHgM3/22cGuYYFjpi/ugA==} + '@unocss/preset-wind@66.7.0': + resolution: {integrity: sha512-K2cCgQawl4GzFyI9almN4jZ33OJNI6U7WxZ9s7D5bivZYfHPaStLTPffNxWlmawwUZF0qpH0S+S7H745ZzgajQ==} - '@unocss/rule-utils@66.6.8': - resolution: {integrity: sha512-WR35L07mLP6PElD4hlUHo5KbQ48uz2HT/XCuJyAsHP+15Gv6539hPWA5SresPuva9r8rl+PeGIgMSIKf4A5Ihw==} - engines: {node: '>=14'} + '@unocss/rule-utils@66.7.0': + resolution: {integrity: sha512-DMJIiey/m+xr0hpSbxFhSbKlC3e7QsuwdAEdgMmIM7pEcu/AEMl7oH198QYX9880P2X0hy5iFE6UCWx9CwGAXQ==} - '@unocss/transformer-attributify-jsx@66.6.8': - resolution: {integrity: sha512-g+7lvm+8V1MnJ21ialTxFBonCTtenn/KcZQbm0JfvQjgG+KuuSnt3BGEcXAHQZu3eBDGuJuasTHiXWwzCYIRBQ==} + '@unocss/transformer-attributify-jsx@66.7.0': + resolution: {integrity: sha512-mmsAUluRprSyejbzeQnC3ST056EUj2IxD2hMpPJPtnA4QkkyIgBNCmi2OSeVcEWMat1s3r4LcYSTqN88EcX5Kg==} - '@unocss/transformer-compile-class@66.6.8': - resolution: {integrity: sha512-37dFuzgYo8ki033KmuvyZXugQRVH1c3+/z5kcWLPhcMR8UJscAtjgRx80S1UvWup2q6TPxPpmy/rMbqWvs3jfg==} + '@unocss/transformer-compile-class@66.7.0': + resolution: {integrity: sha512-Z3K/s3TmUqUBGgB2SThWbUAP5E9VIFacbs2+bNJNn+53y1kqdLA1MIje3xlU5hig3OzGk8newwiMflh3s3Jzhg==} - '@unocss/transformer-directives@66.6.8': - resolution: {integrity: sha512-9hC3mQ8eycliW/igI9le0LovTIMBKoL6crucTkr4MmWuNqICMvNxTmGj5Xh64olBPnascevFwam6xsy+J1lX4Q==} + '@unocss/transformer-directives@66.7.0': + resolution: {integrity: sha512-6T9JxrPfLQlJFNLv7paG4yGiIgGrJY30268HWLkBFwgsldNPtQ+GeQJOzfemCH19UXXqqXMP0WnvbsFucdclmg==} - '@unocss/transformer-variant-group@66.6.8': - resolution: {integrity: sha512-+t7gJDW3W3z3/f8zBf0DfV2UZyGyFOwG5CIsIj5ofu3VJ91mKD/5ZAH8fD3cryXCBSqslj4yv+8R+BLV07T5AA==} + '@unocss/transformer-variant-group@66.7.0': + resolution: {integrity: sha512-2TXYLowPMXszGNYRXAWzQ1G9nGP6EYv9XeJvwNvnf0w9J6qOQVVtW/ZViIz61Kk083c06cZ6nai8pCBnc8aPAw==} - '@unocss/vite@66.6.8': - resolution: {integrity: sha512-bXfEnEHdW7zTGLIYU16MsfKSFy3Q47Pevhrt5f9fOGzC4UI1JGkkoQSfoFpXZGliDrhoSFK4Msz9Jt43Ta4j+w==} + '@unocss/vite@66.7.0': + resolution: {integrity: sha512-7J8Mk9M1j55S3bXL87/yHOspnuAaftQWbc3HjCH0/sXNLZJZnlpmUue3EtT5Ez+PE01T3DK1D9Xxn/MvtdvXtA==} peerDependencies: - vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 + vite: ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 + + '@valibot/to-json-schema@1.7.0': + resolution: {integrity: sha512-Y3pPVibbIOHzohrlxSINvO7w/bvXkoYS3BQHoImV9ynE+bXKf171bdMucPurV2zp7gdmt0L1HCcNAsbo7cFRQw==} + peerDependencies: + valibot: ^1.4.0 + + '@vinejs/compiler@3.0.0': + resolution: {integrity: sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==} + engines: {node: '>=18.0.0'} + + '@vinejs/vine@3.0.1': + resolution: {integrity: sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==} + engines: {node: '>=18.16.0'} - '@vitest/browser-playwright@4.1.4': - resolution: {integrity: sha512-q3PchVhZINX23Pv+RERgAtDlp6wzVkID/smOPnZ5YGWpeWUe3jMNYppeVh15j4il3G7JIJty1d1Kicpm0HSMig==} + '@vitest/browser-playwright@4.1.7': + resolution: {integrity: sha512-OlTlJej7YN6VwV7zJJoNeaCsctF+JXpzpZ4oBHUbrQFfIq+0KW2f07rprCLh9N/zRIZ0v4Mchn1QDDmWMUhPKw==} peerDependencies: playwright: '*' - vitest: 4.1.4 + vitest: 4.1.7 - '@vitest/browser@4.1.4': - resolution: {integrity: sha512-TrNaY/yVOwxtrxNsDUC/wQ56xSwplpytTeRAqF/197xV/ZddxxulBsxR6TrhVMyniJmp9in8d5u0AcDaNRY30w==} + '@vitest/browser@4.1.7': + resolution: {integrity: sha512-N2JFGfXoEGVAut+kHeru9dD4BUMq/q5xDvBARNl0tUsly3m5KglLOu8VO/6MkDfOlgxXTycojkt6gBKsuyR+IQ==} peerDependencies: - vitest: 4.1.4 + vitest: 4.1.7 - '@vitest/coverage-v8@4.1.4': - resolution: {integrity: sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w==} + '@vitest/coverage-v8@4.1.7': + resolution: {integrity: sha512-qsYPeXc5Q9dFLd1i8Ap+Bx8sQgcp+rFVQo4R0dDsWNBzl26ldVF1qOO+RL24K7FDrR6pA+50XedRLSoSG24bVQ==} peerDependencies: - '@vitest/browser': 4.1.4 - vitest: 4.1.4 + '@vitest/browser': 4.1.7 + vitest: 4.1.7 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.1.4': - resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} + '@vitest/expect@4.1.7': + resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} - '@vitest/mocker@4.1.4': - resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} + '@vitest/mocker@4.1.7': + resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1549,20 +1692,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.4': - resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} + '@vitest/pretty-format@4.1.7': + resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} - '@vitest/runner@4.1.4': - resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} + '@vitest/runner@4.1.7': + resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} - '@vitest/snapshot@4.1.4': - resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} + '@vitest/snapshot@4.1.7': + resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} - '@vitest/spy@4.1.4': - resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} + '@vitest/spy@4.1.7': + resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} - '@vitest/utils@4.1.4': - resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} + '@vitest/utils@4.1.7': + resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1574,34 +1717,26 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} engines: {node: '>=18'} - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - ansi-regex@6.2.2: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - apexcharts@5.10.6: - resolution: {integrity: sha512-FJQGbso3iRuOwUYnj0yUhkWeKeJE6aboVol+ae09lsc+lbLMWZqSRbrAWVa/qishLiaeG2icxdvmVkm+9n6kOQ==} + apexcharts@5.13.0: + resolution: {integrity: sha512-PJuXT6zdiCbv0IkX5cqkKFVIIh+9v3kqP9zsOHEGpIWi7DfTgzvfOKc8icw6G3/ulR3V1alDDUtOVH0zWCWGEQ==} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1610,6 +1745,12 @@ packages: resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} engines: {node: '>= 0.4'} + arkregex@0.0.5: + resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==} + + arktype@2.2.0: + resolution: {integrity: sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ==} + array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} @@ -1637,18 +1778,31 @@ packages: before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} + bits-ui@2.18.1: + resolution: {integrity: sha512-KkemzKFH4T3gt3H+P86JcnAWExjByv/6vlwjm/BoCwTPHu03yiCdxbghdJLvFReQTe0acCAiRcKfmixxD6XvlA==} + engines: {node: '>=20'} + peerDependencies: + '@internationalized/date': ^3.8.1 + svelte: ^5.33.0 + bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} brace-expansion@2.1.0: resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} - bun-types@1.3.12: - resolution: {integrity: sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA==} + bun-types@1.3.14: + resolution: {integrity: sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ==} + + bun@1.3.14: + resolution: {integrity: sha512-aB6GVd42x1Y5ie1K16SF+oLGtgSkwX9hgoDdIW88pjvfTccU8F1vfpoOt34QLv0dZ1v3XimtaxPlZUG81Gx9Zg==} + cpu: [arm64, x64] + os: [darwin, linux, android, freebsd, win32] + hasBin: true cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} @@ -1658,6 +1812,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -1674,6 +1832,9 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + class-validator@0.14.4: + resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -1682,21 +1843,14 @@ packages: resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} engines: {node: '>=20'} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -1726,6 +1880,10 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + conventional-changelog-angular@8.3.1: resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} engines: {node: '>=18'} @@ -1789,8 +1947,11 @@ packages: engines: {node: '>=4'} hasBin: true - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + date-fns@4.2.1: + resolution: {integrity: sha512-37RhSdxaG1suen6VDCza6rNrQfooyQh57HFVPwQGEq2QWliVLzPQZ8Oa017weOu+HZCnzI7N3Pf/wyoBKfEqrA==} + + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -1819,6 +1980,10 @@ packages: defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} @@ -1826,8 +1991,11 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devalue@5.7.1: - resolution: {integrity: sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA==} + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dompurify@3.2.7: resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} @@ -1836,17 +2004,21 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + effect@3.21.2: + resolution: {integrity: sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg==} + emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + enhanced-resolve@5.21.6: + resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} engines: {node: '>=10.13.0'} env-paths@2.2.1: @@ -1864,8 +2036,11 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + + es-toolkit@1.46.1: + resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} @@ -1912,8 +2087,8 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-svelte@3.17.0: - resolution: {integrity: sha512-sF6wgd5FLS2P8CCaOy2HdYYYEcZ6TwL251dLHUkNmtLnWECk1Dwc+j6VeulmmnFxr7Xs0WNtjweOA+bJ0PnaFw==} + 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 @@ -1945,8 +2120,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.2.1: - resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==} + eslint@10.4.0: + resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1975,8 +2150,8 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.5: - resolution: {integrity: sha512-/yLB1538mag+dn0wsePTe8C0rDIjUOaJpMs2McodSzmM2msWcZsBSdRtg6HOBt0A/r82BN+Md3pgwSc/uWt2Ig==} + esrap@2.2.9: + resolution: {integrity: sha512-4KijP+NxCWthMCUC3qHbE6n4vCjqgJS1uAYKhuT/GWfFTf1Qyive2TgOjep+gzbSzRfnNyaN/UU9YmdOt8Eg0A==} peerDependencies: '@typescript-eslint/types': ^8.2.0 peerDependenciesMeta: @@ -2012,6 +2187,10 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + fast-content-type-parse@3.0.0: resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} @@ -2027,8 +2206,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -2076,8 +2255,15 @@ packages: flowbite@3.1.2: resolution: {integrity: sha512-MkwSgbbybCYgMC+go6Da5idEKUFfMqc/AmSjm/2ZbdmvoKf5frLPq/eIhXc9P+rC8t9boZtUXzHDgt5whZ6A/Q==} - flowbite@4.0.1: - resolution: {integrity: sha512-UwUjvnqrQTiFm3uMJ0WWnzKXKoDyNyfyEzoNnxmZo6KyDzCedjqZw1UW0Oqdn+E0iYVdPu0fizydJN6e4pP9Rw==} + flowbite@4.0.2: + resolution: {integrity: sha512-TxBdfZpd3HktHH4ashiYjirrSZeVPtG1OCRZMKTeXUa9FOlMxSF98zgjMB/AxE49KZ+rlfgWynAlaNpWxrqZmA==} + + formsnap@2.0.1: + resolution: {integrity: sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0 + sveltekit-superforms: ^2.19.0 fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} @@ -2096,47 +2282,47 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} get-stream@9.0.1: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - git-cliff-darwin-arm64@2.12.0: - resolution: {integrity: sha512-k3jzFDmkjc+6MjpnqvRenzMWRbZN5J+w3iQ8WNt9pSmPewNJIm92O/G6AbAxQaCbSfzQapeZ0e+5wSacVc62GA==} + git-cliff-darwin-arm64@2.13.1: + resolution: {integrity: sha512-3ebPUnUlLmrSZDHknSZQmyZV7DEJVtKse8I25Am0cENET5Py9u9Hg9k8IRXdiDtHtPDs6MYZx7BOi11WtcfqSg==} cpu: [arm64] os: [darwin] - git-cliff-darwin-x64@2.12.0: - resolution: {integrity: sha512-Kkoe+nfmXM/WMcZuC+OaIGA5vj847Ima6NEaaHnyb7Xsri+OAJryPXlABV7q6UeGfiiN2MlL8UsoHgnIEIQLqQ==} + git-cliff-darwin-x64@2.13.1: + resolution: {integrity: sha512-KZfggGAiw1EvZH3BOUclEU4eGCP2+Z+lH/N2Ni3FH9L2M1U7FYJqqaMhqgO8azTj67betvDshH8WBUkIkSsVxA==} cpu: [x64] os: [darwin] - git-cliff-linux-arm64@2.12.0: - resolution: {integrity: sha512-eTp2gZjV4LmfzdlhFsYFYuWf5mojALU03X/37r3VmnpuabaijuTEQo/zm/0BKP8gPiLKLR4ofdUvE1OSisCE1A==} + git-cliff-linux-arm64@2.13.1: + resolution: {integrity: sha512-clNRcNzdvk4GKyTt3ZhhWqcrjVRghcUcGNSV/Y87YJf3Mc/zl9ajUAhnXPOBSX/KWBr2od5SmkCt0qGYagY07g==} cpu: [arm64] os: [linux] - git-cliff-linux-x64@2.12.0: - resolution: {integrity: sha512-abidFG6dH2N5hPUF245/kRYdwViP11Pz7ZwIW/a86CJLZ/WSE7dJt0f2cUIkxTcFSsp11OwuLc5k1hAbwmiIRw==} + git-cliff-linux-x64@2.13.1: + resolution: {integrity: sha512-gZcIQhIQ1lDUMD8UieUSEZAYoyZN7nPd8O3VQoj1Ddhqll4UAS1Zxms1SU3U8pb0UTdc2m3ia/wtOnyhvbjdjQ==} cpu: [x64] os: [linux] - git-cliff-windows-arm64@2.12.0: - resolution: {integrity: sha512-rFuI+D/3Yq3jqafazZw5E68HsXEvcwI/B/5IPDIZD+QqZh8vETf4IXs7wVxYWWtHQJDC+G9ZrR3vE5648mdG3A==} + git-cliff-windows-arm64@2.13.1: + resolution: {integrity: sha512-+XubuQv68DuDwF0u6Af5d889MEf/RD48VBQS7ZmPi4sUSCXAZqRm1/ApCsStLqxMDCf1+7s05B/kNbm9wjV80A==} cpu: [arm64] os: [win32] - git-cliff-windows-x64@2.12.0: - resolution: {integrity: sha512-jskb3nyVGr4dekHSCDM/J6iho45t37wnmMGkPNq42kOoUp04JS96yMBrNRdXfXV9ViZsaZq3NaNu1e3QkhFlyA==} + git-cliff-windows-x64@2.13.1: + resolution: {integrity: sha512-Bi8ehp1VMkomY7M/356PgovKQ8CBRiuOOkq+aWC2evQuMFfXWjG0GBlPED9QkZoUJ4iQ5ygB5DYdK3BjhaOyPw==} cpu: [x64] os: [win32] - git-cliff@2.12.0: - resolution: {integrity: sha512-kjTm5439LsvMs/xRxndWBUetrA4aQfLE8DTbR/ER5H7fGn7ioeFG9YNAK1V7dpTtNi6k2uKYY4f3EvT8J1d+1Q==} - engines: {node: '>=18.19 || >=20.6 || >=21'} + git-cliff@2.13.1: + resolution: {integrity: sha512-2BzXwrom+SMHeNA5Ut+MtzqXejg0wbVwmzj3k7e9w62UQoyCDrM9UIcvtl6hnT3jocEQ1zLRQBaXXx97Gmnk7A==} + engines: {node: ^18.19 || >=20.6} hasBin: true git-raw-commits@5.0.1: @@ -2148,16 +2334,16 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} + global-directory@5.0.0: + resolution: {integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==} + engines: {node: '>=20'} globals@16.5.0: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - globals@17.5.0: - resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==} + globals@17.6.0: + resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} engines: {node: '>=18'} graceful-fs@4.2.11: @@ -2218,9 +2404,12 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} irregular-plurals@3.5.0: resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} @@ -2229,18 +2418,14 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - is-fullwidth-code-point@5.1.0: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} @@ -2293,6 +2478,13 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + js-sha256@0.11.1: resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} @@ -2317,6 +2509,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-to-ts@3.1.1: + resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} + engines: {node: '>=16'} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -2344,14 +2540,17 @@ packages: known-css-properties@0.37.0: resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} - kysely@0.28.16: - resolution: {integrity: sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww==} + kysely@0.28.17: + resolution: {integrity: sha512-nbD8lB9EB3wNdMhOCdx5Li8DxnLbvKByylRLcJ1h+4SkrowVeECAyZlyiKMThF7xFdRz0jSQ2MoJr+wXux2y0Q==} engines: {node: '>=20.0.0'} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libphonenumber-js@1.13.2: + resolution: {integrity: sha512-S3kmBrptp3yRTm83NUcHy9g1vbwiWMzI8WvY22+koBJ6zkRteLnedBL2VX0MIAGwx2yiyxX4J85pceZyQ6ffgg==} + lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -2433,14 +2632,14 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.4.0: - resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==} - engines: {node: '>=20.17'} + lint-staged@17.0.5: + resolution: {integrity: sha512-d12yC+/e8RhBjZtaxZn71FyrgU/P5e+uAPifhCLwdosQZP/zamSdKRWDC30ocVIbzDKiFG1McHc/LUgB92GIPw==} + engines: {node: '>=22.22.1'} hasBin: true - listr2@9.0.5: - resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} - engines: {node: '>=20.0.0'} + listr2@10.2.1: + resolution: {integrity: sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==} + engines: {node: '>=22.13.0'} locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -2452,24 +2651,6 @@ packages: lodash-es@4.18.1: resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} @@ -2478,14 +2659,18 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-regexp@0.10.0: resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==} magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.2: - resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -2499,6 +2684,9 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + memoize-weak@1.0.2: + resolution: {integrity: sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==} + meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -2519,12 +2707,14 @@ packages: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + mode-watcher@1.1.0: + resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==} + peerDependencies: + svelte: ^5.27.0 + monaco-editor@0.55.1: resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==} @@ -2539,8 +2729,8 @@ 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 @@ -2550,6 +2740,10 @@ packages: node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} + engines: {node: '>=14.16'} + npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} @@ -2571,8 +2765,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxc-parser@0.124.0: - resolution: {integrity: sha512-h07SFj/tp2U3cf3+LFX6MmOguQiM9ahwpGs0ZK5CGhgL8p4kk24etrJKsEzhXAvo7mfvoKTZooZ5MLKAPRmJ1g==} + oxc-parser@0.131.0: + resolution: {integrity: sha512-SJ3/7ZPbgie8dr5Z9BI/M51zZbpXba+hRSG0MDzVwMW5CRQg2fjYE0jHGlLX4eeiibGgC/mzoDFKSDHwVZEHRQ==} engines: {node: ^20.19.0 || >=22.12.0} oxc-walker@0.7.0: @@ -2645,13 +2839,13 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.59.1: - resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} + playwright-core@1.60.0: + resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} engines: {node: '>=18'} hasBin: true - playwright@1.59.1: - resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} + playwright@1.60.0: + resolution: {integrity: sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==} engines: {node: '>=18'} hasBin: true @@ -2691,8 +2885,8 @@ packages: resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} - postcss@8.5.10: - resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2703,11 +2897,12 @@ packages: resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} - prettier-plugin-svelte@3.5.1: - resolution: {integrity: sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg==} + prettier-plugin-svelte@4.0.1: + resolution: {integrity: sha512-oDVmtKi+M8bJeUoMfPvulUqZYcuXrs5AmhhLYPKtBeg6hcpMdx7UYYisVCqEaLQuKtiPSYFpotfwp4cZK3D4xw==} + engines: {node: '>=20'} peerDependencies: prettier: ^3.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + svelte: ^5.0.0 prettier@2.5.1: resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==} @@ -2723,10 +2918,16 @@ packages: resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} + property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + quansync@1.0.0: resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} @@ -2742,10 +2943,6 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -2770,27 +2967,41 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown@1.0.0-rc.15: - resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} + rolldown@1.0.2: + resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.0-rc.16: - resolution: {integrity: sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true + runed@0.23.4: + resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==} + peerDependencies: + svelte: ^5.7.0 + + runed@0.25.0: + resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==} + peerDependencies: + svelte: ^5.7.0 runed@0.28.0: resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==} peerDependencies: svelte: ^5.7.0 + runed@0.35.1: + resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==} + peerDependencies: + '@sveltejs/kit': ^2.21.0 + svelte: ^5.7.0 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} engines: {node: '>=10'} hasBin: true @@ -2847,22 +3058,14 @@ packages: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.2.0: - resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} engines: {node: '>=20'} - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - strip-ansi@7.2.0: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} @@ -2871,6 +3074,13 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + supports-color@10.2.2: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} @@ -2893,17 +3103,17 @@ packages: '@sveltejs/kit': ^2.4.0 typescript: ^5 - svelte-check@4.4.6: - resolution: {integrity: sha512-kP1zG81EWaFe9ZyTv4ZXv44Csi6Pkdpb7S3oj6m+K2ec/IcDg/a8LsFsnVLqm2nxtkSwsd5xPj/qFkTBgXHXjg==} + 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.6.0: - resolution: {integrity: sha512-qoB1ehychT6OxEtQAqc/guSqLS20SlA53Uijl7x375s8nlUT0lb9ol/gzraEEatQwsyPTJo87s2CmKL9Xab+Uw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.30.3} + 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: @@ -2916,21 +3126,48 @@ packages: '@sveltejs/kit': ^1.0.0 || ^2.0.0 svelte: ^5.1.13 - 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-toolbelt@0.10.6: + resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.30.2 + + svelte-toolbelt@0.5.0: + resolution: {integrity: sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0-next.126 + + svelte-toolbelt@0.7.1: + resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} peerDependencies: svelte: ^5.0.0 - svelte@5.55.4: - resolution: {integrity: sha512-q8DFohk6vUswSng95IZb9nzWJnbINZsK7OiM1snAa3qCjJBL0ZQpvMyAaVXjUukdM75J/m8UE8xwqat8Ors/zQ==} + svelte@5.55.9: + resolution: {integrity: sha512-fTjjT8cHLDwigcu2j3pv7Jq04LklXevPB8uBgyHNiTXv+RMNvVnrjS4UEYrLMkhuq1vpCodHjiW+z/95SDs/fg==} engines: {node: '>=18'} + sveltekit-superforms@2.30.1: + resolution: {integrity: sha512-wBzyqsE0idvEJWuNJ+HCiAtdxa7Z55GZ8jmtlVHJfonrk9bRYC49MoPaloYyFoYuU3QPy6Omna/Qzn1kaIkgew==} + peerDependencies: + '@sveltejs/kit': 1.x || 2.x + svelte: 3.x || 4.x || >=5.0.0-next.51 + synckit@0.11.12: resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} - tailwind-merge@3.5.0: - resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + + tailwind-merge@3.6.0: + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} tailwind-variants@3.2.2: resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==} @@ -2942,18 +3179,21 @@ packages: tailwind-merge: optional: true - tailwindcss@4.2.2: - resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} - tapable@2.3.2: - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} + tiny-case@1.0.3: + resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.1.1: - resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} engines: {node: '>=18'} tinyglobby@0.2.16: @@ -2968,16 +3208,26 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + ts-algebra@2.0.0: + resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} + ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' + ts-deepmerge@7.0.3: + resolution: {integrity: sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==} + engines: {node: '>=14.13.1'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -2989,11 +3239,18 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + type-level-regexp@0.1.17: resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} - typescript-eslint@8.58.2: - resolution: {integrity: sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==} + typebox@1.1.38: + resolution: {integrity: sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==} + + typescript-eslint@8.59.4: + resolution: {integrity: sha512-Rw6+44QNFaXtgHSjPy+Kw8hrJniMYzR85E9yLmOLcfZ91/rz+JXQbDTCmc6ccxMPY6K6PgAq26f0JCBfR7LIPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3004,8 +3261,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} unconfig-core@7.5.0: resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} @@ -3013,8 +3270,8 @@ packages: unconfig@7.5.0: resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==} - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} undici@6.25.0: resolution: {integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==} @@ -3027,13 +3284,12 @@ packages: universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - unocss@66.6.8: - resolution: {integrity: sha512-stq9FbxedTDkoWrxnNQNnPQXOaM6L2Lobq8HzjXdR2tMc55gtfqDArqL7TESfnN7qeZsIocNYCHLNA4DXq50YQ==} - engines: {node: '>=14'} + unocss@66.7.0: + resolution: {integrity: sha512-dVfkL7SQv3fOiZdqeRX1PdpQqXlB+wHcEQjVR0D/2nXsuqmUqTVnX3EUUWFjqVR83Z51zQ0EyVgym8ooDfcVvw==} peerDependencies: - '@unocss/astro': 66.6.8 - '@unocss/postcss': 66.6.8 - '@unocss/webpack': 66.6.8 + '@unocss/astro': 66.7.0 + '@unocss/postcss': 66.7.0 + '@unocss/webpack': 66.7.0 peerDependenciesMeta: '@unocss/astro': optional: true @@ -3059,21 +3315,29 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + uuid@14.0.0: + resolution: {integrity: sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==} hasBin: true - uuid@13.0.0: - resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} - hasBin: true + valibot@1.4.0: + resolution: {integrity: sha512-iC/x7fVcSyOwlm/VSt7RlHnzNGLGvR9GnxdifUeWoCJo0q4ZZvrVkIHC6faTlkxG47I2Y4UrFquPuVHCrOnrLg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + validator@13.15.35: + resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==} + engines: {node: '>= 0.10'} - vite@8.0.8: - resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} + vite@8.0.14: + resolution: {integrity: sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw==} 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 @@ -3124,20 +3388,20 @@ packages: svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 vitest: ^4.0.0 - vitest@4.1.4: - resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} + vitest@4.1.7: + resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} 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.4 - '@vitest/browser-preview': 4.1.4 - '@vitest/browser-webdriverio': 4.1.4 - '@vitest/coverage-istanbul': 4.1.4 - '@vitest/coverage-v8': 4.1.4 - '@vitest/ui': 4.1.4 + '@vitest/browser-playwright': 4.1.7 + '@vitest/browser-preview': 4.1.7 + '@vitest/browser-webdriverio': 4.1.7 + '@vitest/coverage-istanbul': 4.1.7 + '@vitest/coverage-v8': 4.1.7 + '@vitest/ui': 4.1.7 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3182,16 +3446,16 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@10.0.0: + resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} + engines: {node: '>=20'} wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3210,18 +3474,18 @@ packages: resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -3231,27 +3495,38 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} + yup@1.7.1: + resolution: {integrity: sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==} + zimmerframe@1.1.4: resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + zod-v3-to-json-schema@4.0.0: + resolution: {integrity: sha512-KixLrhX/uPmRFnDgsZrzrk4x5SSJA+PmaE5adbfID9+3KPJcdxqRobaHU397EfWBqfQircrjKqvEqZ/mW5QH6w==} + peerDependencies: + zod: ^3.25 || ^4.0.14 + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + snapshots: - '@actions/core@3.0.0': + '@actions/core@3.0.1': dependencies: '@actions/exec': 3.0.0 - '@actions/http-client': 4.0.0 + '@actions/http-client': 4.0.1 '@actions/exec@3.0.0': dependencies: '@actions/io': 3.0.2 - '@actions/github@9.1.0': + '@actions/github@9.1.1': dependencies: '@actions/http-client': 3.0.2 '@octokit/core': 7.0.6 '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/request-error': 7.1.0 undici: 6.25.0 @@ -3260,7 +3535,7 @@ snapshots: tunnel: 0.0.6 undici: 6.25.0 - '@actions/http-client@4.0.0': + '@actions/http-client@4.0.1': dependencies: tunnel: 0.0.6 undici: 6.25.0 @@ -3278,7 +3553,15 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 - tinyexec: 1.1.1 + tinyexec: 1.1.2 + + '@ark/schema@0.56.0': + dependencies: + '@ark/util': 0.56.0 + optional: true + + '@ark/util@0.56.0': + optional: true '@babel/code-frame@7.29.0': dependencies: @@ -3288,7 +3571,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -3300,14 +3583,17 @@ snapshots: '@babel/helper-validator-identifier@7.28.5': {} - '@babel/parser@7.29.2': + '@babel/parser@7.29.3': dependencies: '@babel/types': 7.29.0 + '@babel/runtime@7.29.2': + optional: true + '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -3315,7 +3601,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -3331,116 +3617,110 @@ snapshots: '@blazediff/core@1.9.1': {} - '@commitlint/cli@20.5.0(@types/node@25.6.0)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': + '@commitlint/cli@21.0.1(@types/node@25.9.1)(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)(typescript@6.0.3)': dependencies: - '@commitlint/format': 20.5.0 - '@commitlint/lint': 20.5.0 - '@commitlint/load': 20.5.0(@types/node@25.6.0)(typescript@6.0.3) - '@commitlint/read': 20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) - '@commitlint/types': 20.5.0 - tinyexec: 1.1.1 - yargs: 17.7.2 + '@commitlint/format': 21.0.1 + '@commitlint/lint': 21.0.1 + '@commitlint/load': 21.0.1(@types/node@25.9.1)(typescript@6.0.3) + '@commitlint/read': 21.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) + '@commitlint/types': 21.0.1 + tinyexec: 1.1.2 + yargs: 18.0.0 transitivePeerDependencies: - '@types/node' - conventional-commits-filter - conventional-commits-parser - typescript - '@commitlint/config-conventional@20.5.0': + '@commitlint/config-conventional@21.0.1': dependencies: - '@commitlint/types': 20.5.0 + '@commitlint/types': 21.0.1 conventional-changelog-conventionalcommits: 9.3.1 - '@commitlint/config-validator@20.5.0': + '@commitlint/config-validator@21.0.1': dependencies: - '@commitlint/types': 20.5.0 - ajv: 8.18.0 + '@commitlint/types': 21.0.1 + ajv: 8.20.0 - '@commitlint/ensure@20.5.0': + '@commitlint/ensure@21.0.1': dependencies: - '@commitlint/types': 20.5.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 + '@commitlint/types': 21.0.1 + es-toolkit: 1.46.1 - '@commitlint/execute-rule@20.0.0': {} + '@commitlint/execute-rule@21.0.1': {} - '@commitlint/format@20.5.0': + '@commitlint/format@21.0.1': dependencies: - '@commitlint/types': 20.5.0 + '@commitlint/types': 21.0.1 picocolors: 1.1.1 - '@commitlint/is-ignored@20.5.0': + '@commitlint/is-ignored@21.0.1': dependencies: - '@commitlint/types': 20.5.0 - semver: 7.7.4 + '@commitlint/types': 21.0.1 + semver: 7.8.1 - '@commitlint/lint@20.5.0': + '@commitlint/lint@21.0.1': dependencies: - '@commitlint/is-ignored': 20.5.0 - '@commitlint/parse': 20.5.0 - '@commitlint/rules': 20.5.0 - '@commitlint/types': 20.5.0 + '@commitlint/is-ignored': 21.0.1 + '@commitlint/parse': 21.0.1 + '@commitlint/rules': 21.0.1 + '@commitlint/types': 21.0.1 - '@commitlint/load@20.5.0(@types/node@25.6.0)(typescript@6.0.3)': + '@commitlint/load@21.0.1(@types/node@25.9.1)(typescript@6.0.3)': dependencies: - '@commitlint/config-validator': 20.5.0 - '@commitlint/execute-rule': 20.0.0 - '@commitlint/resolve-extends': 20.5.0 - '@commitlint/types': 20.5.0 + '@commitlint/config-validator': 21.0.1 + '@commitlint/execute-rule': 21.0.1 + '@commitlint/resolve-extends': 21.0.1 + '@commitlint/types': 21.0.1 cosmiconfig: 9.0.1(typescript@6.0.3) - cosmiconfig-typescript-loader: 6.3.0(@types/node@25.6.0)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + es-toolkit: 1.46.1 is-plain-obj: 4.1.0 - lodash.mergewith: 4.6.2 picocolors: 1.1.1 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/message@20.4.3': {} + '@commitlint/message@21.0.1': {} - '@commitlint/parse@20.5.0': + '@commitlint/parse@21.0.1': dependencies: - '@commitlint/types': 20.5.0 + '@commitlint/types': 21.0.1 conventional-changelog-angular: 8.3.1 conventional-commits-parser: 6.4.0 - '@commitlint/read@20.5.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': + '@commitlint/read@21.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: - '@commitlint/top-level': 20.4.3 - '@commitlint/types': 20.5.0 + '@commitlint/top-level': 21.0.1 + '@commitlint/types': 21.0.1 git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) - minimist: 1.2.8 - tinyexec: 1.1.1 + tinyexec: 1.1.2 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - '@commitlint/resolve-extends@20.5.0': + '@commitlint/resolve-extends@21.0.1': dependencies: - '@commitlint/config-validator': 20.5.0 - '@commitlint/types': 20.5.0 - global-directory: 4.0.1 - import-meta-resolve: 4.2.0 - lodash.mergewith: 4.6.2 + '@commitlint/config-validator': 21.0.1 + '@commitlint/types': 21.0.1 + es-toolkit: 1.46.1 + global-directory: 5.0.0 resolve-from: 5.0.0 - '@commitlint/rules@20.5.0': + '@commitlint/rules@21.0.1': dependencies: - '@commitlint/ensure': 20.5.0 - '@commitlint/message': 20.4.3 - '@commitlint/to-lines': 20.0.0 - '@commitlint/types': 20.5.0 + '@commitlint/ensure': 21.0.1 + '@commitlint/message': 21.0.1 + '@commitlint/to-lines': 21.0.1 + '@commitlint/types': 21.0.1 - '@commitlint/to-lines@20.0.0': {} + '@commitlint/to-lines@21.0.1': {} - '@commitlint/top-level@20.4.3': + '@commitlint/top-level@21.0.1': dependencies: escalade: 3.2.0 - '@commitlint/types@20.5.0': + '@commitlint/types@21.0.1': dependencies: conventional-commits-parser: 6.4.0 picocolors: 1.1.1 @@ -3449,7 +3729,7 @@ snapshots: dependencies: '@simple-libs/child-process-utils': 1.0.2 '@simple-libs/stream-utils': 1.2.0 - semver: 7.7.4 + semver: 7.8.1 optionalDependencies: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.4.0 @@ -3460,13 +3740,13 @@ snapshots: '@dprint/toml@0.7.0': {} - '@emnapi/core@1.9.2': + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.2': + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true @@ -3476,9 +3756,9 @@ snapshots: tslib: 2.8.1 optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0(jiti@2.7.0))': dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -3491,7 +3771,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.5': + '@eslint/config-helpers@0.6.0': dependencies: '@eslint/core': 1.2.1 @@ -3508,6 +3788,9 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 + '@exodus/schemasafe@1.3.0': + optional: true + '@favware/cliff-jumper@6.1.0': dependencies: '@favware/colorette-spinner': 1.0.1 @@ -3520,9 +3803,9 @@ snapshots: commander: 14.0.3 conventional-recommended-bump: 11.2.0 execa: 9.6.1 - git-cliff: 2.12.0 + git-cliff: 2.13.1 js-yaml: 4.1.1 - semver: 7.7.4 + semver: 7.8.1 smol-toml: 1.6.1 '@favware/colorette-spinner@1.0.1': @@ -3540,6 +3823,14 @@ snapshots: '@floating-ui/utils@0.2.11': {} + '@hapi/hoek@9.3.0': + optional: true + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + optional: true + '@humanfs/core@0.19.2': dependencies: '@humanfs/types': 0.15.0 @@ -3560,7 +3851,7 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/material-icon-theme@1.2.59': + '@iconify-json/material-icon-theme@1.2.64': dependencies: '@iconify/types': 2.0.0 @@ -3570,21 +3861,23 @@ snapshots: '@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.2 + import-meta-resolve: 4.2.0 - '@inlang/paraglide-js@2.16.0': + '@inlang/paraglide-js@2.18.1(typescript@6.0.3)': dependencies: '@inlang/recommend-sherlock': 0.2.1 - '@inlang/sdk': 2.9.1 + '@inlang/sdk': 2.9.3 commander: 11.1.0 consola: 3.4.0 json5: 2.2.3 unplugin: 2.3.11 urlpattern-polyfill: 10.1.0 + optionalDependencies: + typescript: 6.0.3 transitivePeerDependencies: - babel-plugin-macros @@ -3592,16 +3885,20 @@ snapshots: dependencies: comment-json: 4.6.2 - '@inlang/sdk@2.9.1': + '@inlang/sdk@2.9.3': dependencies: - '@lix-js/sdk': 0.4.9 + '@lix-js/sdk': 0.4.10 '@sinclair/typebox': 0.31.28 - kysely: 0.28.16 - sqlite-wasm-kysely: 0.3.0(kysely@0.28.16) - uuid: 13.0.0 + kysely: 0.28.17 + sqlite-wasm-kysely: 0.3.0(kysely@0.28.17) + uuid: 14.0.0 transitivePeerDependencies: - babel-plugin-macros + '@internationalized/date@3.12.1': + dependencies: + '@swc/helpers': 0.5.21 + '@isaacs/ttlcache@1.4.1': {} '@jridgewell/gen-mapping@0.3.13': @@ -3623,24 +3920,28 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lix-js/sdk@0.4.9': + '@lix-js/sdk@0.4.10': dependencies: '@lix-js/server-protocol-schema': 0.1.1 dedent: 1.5.1 human-id: 4.1.3 js-sha256: 0.11.1 - kysely: 0.28.16 - sqlite-wasm-kysely: 0.3.0(kysely@0.28.16) - uuid: 10.0.0 + kysely: 0.28.17 + sqlite-wasm-kysely: 0.3.0(kysely@0.28.17) + uuid: 14.0.0 transitivePeerDependencies: - babel-plugin-macros '@lix-js/server-protocol-schema@0.1.1': {} - '@nanoforge-dev/actions@1.2.3': + '@lucide/svelte@1.16.0(svelte@5.55.9(@typescript-eslint/types@8.59.4))': dependencies: - '@actions/core': 3.0.0 - '@actions/github': 9.1.0 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + + '@nanoforge-dev/actions@1.4.2': + dependencies: + '@actions/core': 3.0.1 + '@actions/github': 9.1.1 commander: 14.0.3 '@nanoforge-dev/common@1.1.0': {} @@ -3649,16 +3950,16 @@ snapshots: dependencies: '@nanoforge-dev/common': 1.1.0 - '@nanoforge-dev/utils-eslint-config@1.0.2(@types/eslint@9.6.1)(eslint@10.2.1(jiti@2.6.1))(prettier@3.8.3)(typescript@6.0.3)': + '@nanoforge-dev/utils-eslint-config@1.0.2(@types/eslint@9.6.1)(eslint@10.4.0(jiti@2.7.0))(prettier@3.8.3)(typescript@6.0.3)': dependencies: '@eslint/js': 9.39.4 '@favware/cliff-jumper': 6.1.0 - eslint-config-prettier: 10.1.8(eslint@10.2.1(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.4.0(jiti@2.7.0)) eslint-formatter-pretty: 7.1.0 - eslint-plugin-format: 1.5.0(eslint@10.2.1(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.6.1)))(eslint@10.2.1(jiti@2.6.1))(prettier@3.8.3) + eslint-plugin-format: 1.5.0(eslint@10.4.0(jiti@2.7.0)) + eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.7.0)))(eslint@10.4.0(jiti@2.7.0))(prettier@3.8.3) globals: 16.5.0 - typescript-eslint: 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) + typescript-eslint: 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - '@types/eslint' - eslint @@ -3668,11 +3969,11 @@ snapshots: '@nanoforge-dev/utils-prettier-config@1.0.2': {} - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 optional: true '@octokit/auth-token@6.0.0': {} @@ -3681,7 +3982,7 @@ snapshots: dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 before-after-hook: 4.0.0 @@ -3694,7 +3995,7 @@ snapshots: '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -3721,11 +4022,12 @@ snapshots: dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.8': + '@octokit/request@10.0.9': dependencies: '@octokit/endpoint': 11.0.3 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 + content-type: 2.0.0 fast-content-type-parse: 3.0.0 json-with-bigint: 3.5.8 universal-user-agent: 7.0.3 @@ -3734,74 +4036,121 @@ snapshots: dependencies: '@octokit/openapi-types': 27.0.0 - '@oxc-parser/binding-android-arm-eabi@0.124.0': + '@oven/bun-darwin-aarch64@1.3.14': + optional: true + + '@oven/bun-darwin-x64-baseline@1.3.14': + optional: true + + '@oven/bun-darwin-x64@1.3.14': optional: true - '@oxc-parser/binding-android-arm64@0.124.0': + '@oven/bun-freebsd-aarch64@1.3.14': optional: true - '@oxc-parser/binding-darwin-arm64@0.124.0': + '@oven/bun-freebsd-x64@1.3.14': optional: true - '@oxc-parser/binding-darwin-x64@0.124.0': + '@oven/bun-linux-aarch64-android@1.3.14': optional: true - '@oxc-parser/binding-freebsd-x64@0.124.0': + '@oven/bun-linux-aarch64-musl@1.3.14': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.124.0': + '@oven/bun-linux-aarch64@1.3.14': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.124.0': + '@oven/bun-linux-x64-android@1.3.14': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.124.0': + '@oven/bun-linux-x64-baseline@1.3.14': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.124.0': + '@oven/bun-linux-x64-musl-baseline@1.3.14': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.124.0': + '@oven/bun-linux-x64-musl@1.3.14': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.124.0': + '@oven/bun-linux-x64@1.3.14': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.124.0': + '@oven/bun-windows-aarch64@1.3.14': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.124.0': + '@oven/bun-windows-x64-baseline@1.3.14': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.124.0': + '@oven/bun-windows-x64@1.3.14': optional: true - '@oxc-parser/binding-linux-x64-musl@0.124.0': + '@oxc-parser/binding-android-arm-eabi@0.131.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.124.0': + '@oxc-parser/binding-android-arm64@0.131.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@oxc-parser/binding-darwin-arm64@0.131.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.131.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.131.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.131.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.131.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.131.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.131.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.131.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.131.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - 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 - '@oxc-parser/binding-win32-arm64-msvc@0.124.0': + '@oxc-parser/binding-win32-arm64-msvc@0.131.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.124.0': + '@oxc-parser/binding-win32-ia32-msvc@0.131.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.124.0': + '@oxc-parser/binding-win32-x64-msvc@0.131.0': optional: true - '@oxc-project/types@0.124.0': {} + '@oxc-project/types@0.131.0': {} - '@oxc-project/types@0.126.0': {} + '@oxc-project/types@0.132.0': {} '@oxfmt/binding-android-arm-eabi@0.35.0': optional: true @@ -3862,119 +4211,71 @@ snapshots: '@pkgr/core@0.2.9': {} - '@playwright/test@1.59.1': + '@playwright/test@1.60.0': dependencies: - playwright: 1.59.1 + playwright: 1.60.0 '@polka/url@1.0.0-next.29': {} '@popperjs/core@2.11.8': {} + '@poppinss/macroable@1.1.2': + optional: true + '@quansync/fs@1.0.0': dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.0.0-rc.15': - optional: true - - '@rolldown/binding-android-arm64@1.0.0-rc.16': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-rc.16': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0-rc.15': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0-rc.16': - optional: true - - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': - optional: true - - '@rolldown/binding-freebsd-x64@1.0.0-rc.16': + '@rolldown/binding-android-arm64@1.0.2': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + '@rolldown/binding-darwin-arm64@1.0.2': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': + '@rolldown/binding-darwin-x64@1.0.2': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + '@rolldown/binding-freebsd-x64@1.0.2': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': + '@rolldown/binding-linux-arm-gnueabihf@1.0.2': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + '@rolldown/binding-linux-arm64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': + '@rolldown/binding-linux-arm64-musl@1.0.2': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-ppc64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': + '@rolldown/binding-linux-s390x-gnu@1.0.2': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-x64-gnu@1.0.2': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': + '@rolldown/binding-linux-x64-musl@1.0.2': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + '@rolldown/binding-openharmony-arm64@1.0.2': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + '@rolldown/binding-wasm32-wasi@1.0.2': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@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-wasm32-wasi@1.0.0-rc.16': - dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@rolldown/binding-win32-arm64-msvc@1.0.2': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + '@rolldown/binding-win32-x64-msvc@1.0.2': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': - optional: true - - '@rolldown/pluginutils@1.0.0-rc.15': {} - - '@rolldown/pluginutils@1.0.0-rc.16': {} + '@rolldown/pluginutils@1.0.1': {} '@rollup/plugin-node-resolve@15.3.1': dependencies: @@ -3986,7 +4287,7 @@ snapshots: '@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 @@ -3996,6 +4297,17 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + optional: true + + '@sideway/formula@3.0.1': + optional: true + + '@sideway/pinpoint@2.0.0': + optional: true + '@simple-libs/child-process-utils@1.0.2': dependencies: '@simple-libs/stream-utils': 1.2.0 @@ -4010,116 +4322,127 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': + '@sveltejs/acorn-typescript@1.0.10(acorn@8.16.0)': dependencies: acorn: 8.16.0 - '@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))': + '@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.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.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) + '@sveltejs/vite-plugin-svelte': 7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 - devalue: 5.7.1 + devalue: 5.8.1 esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.21 mrmime: 2.0.1 set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.55.4(@typescript-eslint/types@8.58.2) - vite: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) optionalDependencies: typescript: 6.0.3 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))': + '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.55.4(@typescript-eslint/types@8.58.2) - vite: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) - vitefu: 1.1.3(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + + '@swc/helpers@0.5.21': + dependencies: + tslib: 2.8.1 - '@tailwindcss/node@4.2.2': + '@tailwindcss/node@4.3.0': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.20.1 - jiti: 2.6.1 + enhanced-resolve: 5.21.6 + 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/postcss@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/postcss@4.3.0': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.2.2 - '@tailwindcss/oxide': 4.2.2 - postcss: 8.5.10 - tailwindcss: 4.2.2 + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + postcss: 8.5.15 + tailwindcss: 4.3.0 + + '@tanstack/query-core@5.100.11': {} + + '@tanstack/svelte-query@6.1.30(svelte@5.55.9(@typescript-eslint/types@8.59.4))': + dependencies: + '@tanstack/query-core': 5.100.11 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - '@testing-library/svelte-core@1.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))': + '@testing-library/svelte-core@1.0.0(svelte@5.55.9(@typescript-eslint/types@8.59.4))': dependencies: - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - '@trivago/prettier-plugin-sort-imports@6.0.2(prettier-plugin-svelte@3.5.1(prettier@3.8.3)(svelte@5.55.4(@typescript-eslint/types@8.58.2)))(prettier@3.8.3)(svelte@5.55.4(@typescript-eslint/types@8.58.2))': + '@trivago/prettier-plugin-sort-imports@6.0.2(prettier-plugin-svelte@4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)))(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))': dependencies: '@babel/generator': 7.29.1 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 javascript-natural-sort: 0.7.1 @@ -4128,21 +4451,21 @@ snapshots: parse-imports-exports: 0.2.4 prettier: 3.8.3 optionalDependencies: - prettier-plugin-svelte: 3.5.1(prettier@3.8.3)(svelte@5.55.4(@typescript-eslint/types@8.58.2)) - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + prettier-plugin-svelte: 4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) transitivePeerDependencies: - supports-color '@tsconfig/svelte@5.0.8': {} - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true - '@types/bun@1.3.12': + '@types/bun@1.3.14': dependencies: - bun-types: 1.3.12 + bun-types: 1.3.14 '@types/chai@5.2.3': dependencies: @@ -4155,32 +4478,49 @@ 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.6.0': + '@types/node@25.9.1': dependencies: - undici-types: 7.19.2 + undici-types: 7.24.6 '@types/resolve@1.20.2': {} '@types/trusted-types@2.0.7': {} - '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': + '@types/validator@13.15.10': + optional: true + + '@typeschema/class-validator@0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.4)': + dependencies: + '@typeschema/core': 0.14.0(@types/json-schema@7.0.15) + optionalDependencies: + class-validator: 0.14.4 + transitivePeerDependencies: + - '@types/json-schema' + optional: true + + '@typeschema/core@0.14.0(@types/json-schema@7.0.15)': + optionalDependencies: + '@types/json-schema': 7.0.15 + optional: true + + '@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/type-utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.58.2 - eslint: 10.2.1(jiti@2.6.1) + '@typescript-eslint/parser': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/type-utils': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.4 + eslint: 10.4.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -4188,89 +4528,89 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.58.2 + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.4 debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.58.2(typescript@6.0.3)': + '@typescript-eslint/project-service@8.59.4(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@6.0.3) - '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/tsconfig-utils': 8.59.4(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.58.2': + '@typescript-eslint/scope-manager@8.59.4': dependencies: - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/visitor-keys': 8.58.2 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/visitor-keys': 8.59.4 - '@typescript-eslint/tsconfig-utils@8.58.2(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.59.4(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@6.0.3) - '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.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.58.2': {} + '@typescript-eslint/types@8.59.4': {} - '@typescript-eslint/typescript-estree@8.58.2(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.59.4(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.58.2(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@6.0.3) - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/visitor-keys': 8.58.2 + '@typescript-eslint/project-service': 8.59.4(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.59.4(typescript@6.0.3) + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/visitor-keys': 8.59.4 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.7.4 + semver: 7.8.1 tinyglobby: 0.2.16 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/utils@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@6.0.3) - eslint: 10.2.1(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.59.4 + '@typescript-eslint/types': 8.59.4 + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + eslint: 10.4.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.58.2': + '@typescript-eslint/visitor-keys@8.59.4': dependencies: - '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/types': 8.59.4 eslint-visitor-keys: 5.0.1 - '@unocss/cli@66.6.8': + '@unocss/cli@66.7.0': dependencies: '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.6.8 - '@unocss/core': 66.6.8 - '@unocss/preset-wind3': 66.6.8 - '@unocss/preset-wind4': 66.6.8 - '@unocss/transformer-directives': 66.6.8 + '@unocss/config': 66.7.0 + '@unocss/core': 66.7.0 + '@unocss/preset-wind3': 66.7.0 + '@unocss/preset-wind4': 66.7.0 + '@unocss/transformer-directives': 66.7.0 cac: 7.0.0 chokidar: 5.0.0 colorette: 2.0.20 @@ -4281,59 +4621,59 @@ snapshots: tinyglobby: 0.2.16 unplugin-utils: 0.3.1 - '@unocss/config@66.6.8': + '@unocss/config@66.7.0': dependencies: - '@unocss/core': 66.6.8 + '@unocss/core': 66.7.0 colorette: 2.0.20 consola: 3.4.2 unconfig: 7.5.0 '@unocss/core@0.25.1': {} - '@unocss/core@66.6.8': {} + '@unocss/core@66.7.0': {} - '@unocss/extractor-arbitrary-variants@66.6.8': + '@unocss/extractor-arbitrary-variants@66.7.0': dependencies: - '@unocss/core': 66.6.8 + '@unocss/core': 66.7.0 - '@unocss/extractor-svelte@66.6.8': {} + '@unocss/extractor-svelte@66.7.0': {} - '@unocss/inspector@66.6.8': + '@unocss/inspector@66.7.0': dependencies: - '@unocss/core': 66.6.8 - '@unocss/rule-utils': 66.6.8 + '@unocss/core': 66.7.0 + '@unocss/rule-utils': 66.7.0 colorette: 2.0.20 gzip-size: 6.0.0 sirv: 3.0.2 - '@unocss/preset-attributify@66.6.8': + '@unocss/preset-attributify@66.7.0': dependencies: - '@unocss/core': 66.6.8 + '@unocss/core': 66.7.0 - '@unocss/preset-icons@66.6.8': + '@unocss/preset-icons@66.7.0': dependencies: - '@iconify/utils': 3.1.0 - '@unocss/core': 66.6.8 + '@iconify/utils': 3.1.3 + '@unocss/core': 66.7.0 ofetch: 1.5.1 '@unocss/preset-mini@0.25.1': dependencies: '@unocss/core': 0.25.1 - '@unocss/preset-mini@66.6.8': + '@unocss/preset-mini@66.7.0': dependencies: - '@unocss/core': 66.6.8 - '@unocss/extractor-arbitrary-variants': 66.6.8 - '@unocss/rule-utils': 66.6.8 + '@unocss/core': 66.7.0 + '@unocss/extractor-arbitrary-variants': 66.7.0 + '@unocss/rule-utils': 66.7.0 - '@unocss/preset-tagify@66.6.8': + '@unocss/preset-tagify@66.7.0': dependencies: - '@unocss/core': 66.6.8 + '@unocss/core': 66.7.0 - '@unocss/preset-typography@66.6.8': + '@unocss/preset-typography@66.7.0': dependencies: - '@unocss/core': 66.6.8 - '@unocss/rule-utils': 66.6.8 + '@unocss/core': 66.7.0 + '@unocss/rule-utils': 66.7.0 '@unocss/preset-uno@0.25.1': dependencies: @@ -4341,163 +4681,180 @@ snapshots: '@unocss/preset-mini': 0.25.1 '@unocss/preset-wind': 0.25.1 - '@unocss/preset-uno@66.6.8': + '@unocss/preset-uno@66.7.0': dependencies: - '@unocss/core': 66.6.8 - '@unocss/preset-wind3': 66.6.8 + '@unocss/core': 66.7.0 + '@unocss/preset-wind3': 66.7.0 - '@unocss/preset-web-fonts@66.6.8': + '@unocss/preset-web-fonts@66.7.0': dependencies: - '@unocss/core': 66.6.8 + '@unocss/core': 66.7.0 ofetch: 1.5.1 - '@unocss/preset-wind3@66.6.8': + '@unocss/preset-wind3@66.7.0': dependencies: - '@unocss/core': 66.6.8 - '@unocss/preset-mini': 66.6.8 - '@unocss/rule-utils': 66.6.8 + '@unocss/core': 66.7.0 + '@unocss/preset-mini': 66.7.0 + '@unocss/rule-utils': 66.7.0 - '@unocss/preset-wind4@66.6.8': + '@unocss/preset-wind4@66.7.0': dependencies: - '@unocss/core': 66.6.8 - '@unocss/extractor-arbitrary-variants': 66.6.8 - '@unocss/rule-utils': 66.6.8 + '@unocss/core': 66.7.0 + '@unocss/extractor-arbitrary-variants': 66.7.0 + '@unocss/rule-utils': 66.7.0 '@unocss/preset-wind@0.25.1': dependencies: '@unocss/core': 0.25.1 '@unocss/preset-mini': 0.25.1 - '@unocss/preset-wind@66.6.8': + '@unocss/preset-wind@66.7.0': dependencies: - '@unocss/core': 66.6.8 - '@unocss/preset-wind3': 66.6.8 + '@unocss/core': 66.7.0 + '@unocss/preset-wind3': 66.7.0 - '@unocss/rule-utils@66.6.8': + '@unocss/rule-utils@66.7.0': dependencies: - '@unocss/core': 66.6.8 + '@unocss/core': 66.7.0 magic-string: 0.30.21 - '@unocss/transformer-attributify-jsx@66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@unocss/transformer-attributify-jsx@66.7.0': dependencies: - '@unocss/core': 66.6.8 - oxc-parser: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-walker: 0.7.0(oxc-parser@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@unocss/core': 66.7.0 + oxc-parser: 0.131.0 + oxc-walker: 0.7.0(oxc-parser@0.131.0) - '@unocss/transformer-compile-class@66.6.8': + '@unocss/transformer-compile-class@66.7.0': dependencies: - '@unocss/core': 66.6.8 + '@unocss/core': 66.7.0 - '@unocss/transformer-directives@66.6.8': + '@unocss/transformer-directives@66.7.0': dependencies: - '@unocss/core': 66.6.8 - '@unocss/rule-utils': 66.6.8 + '@unocss/core': 66.7.0 + '@unocss/rule-utils': 66.7.0 css-tree: 3.2.1 - '@unocss/transformer-variant-group@66.6.8': + '@unocss/transformer-variant-group@66.7.0': dependencies: - '@unocss/core': 66.6.8 + '@unocss/core': 66.7.0 - '@unocss/vite@66.6.8(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))': + '@unocss/vite@66.7.0(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))': dependencies: '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.6.8 - '@unocss/core': 66.6.8 - '@unocss/inspector': 66.6.8 + '@unocss/config': 66.7.0 + '@unocss/core': 66.7.0 + '@unocss/inspector': 66.7.0 chokidar: 5.0.0 magic-string: 0.30.21 pathe: 2.0.3 tinyglobby: 0.2.16 unplugin-utils: 0.3.1 - vite: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) - '@vitest/browser-playwright@4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))(vitest@4.1.4)': + '@valibot/to-json-schema@1.7.0(valibot@1.4.0(typescript@6.0.3))': dependencies: - '@vitest/browser': 4.1.4(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))(vitest@4.1.4) - '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) - playwright: 1.59.1 + valibot: 1.4.0(typescript@6.0.3) + optional: true + + '@vinejs/compiler@3.0.0': + optional: true + + '@vinejs/vine@3.0.1': + dependencies: + '@poppinss/macroable': 1.1.2 + '@types/validator': 13.15.10 + '@vinejs/compiler': 3.0.0 + camelcase: 8.0.0 + dayjs: 1.11.20 + dlv: 1.1.3 + normalize-url: 8.1.1 + validator: 13.15.35 + optional: true + + '@vitest/browser-playwright@4.1.7(playwright@1.60.0)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7)': + dependencies: + '@vitest/browser': 4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/mocker': 4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + playwright: 1.60.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + vitest: 4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.4(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))(vitest@4.1.4)': + '@vitest/browser@4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) - '@vitest/utils': 4.1.4 + '@vitest/mocker': 4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/utils': 4.1.7 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) - ws: 8.20.0 + vitest: 4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + ws: 8.20.1 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/coverage-v8@4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4)': + '@vitest/coverage-v8@4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.4 + '@vitest/utils': 4.1.7 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.2 + magicast: 0.5.3 obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + vitest: 4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) optionalDependencies: - '@vitest/browser': 4.1.4(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/browser': 4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) - '@vitest/expect@4.1.4': + '@vitest/expect@4.1.7': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))': + '@vitest/mocker@4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.4 + '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) - '@vitest/pretty-format@4.1.4': + '@vitest/pretty-format@4.1.7': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.4': + '@vitest/runner@4.1.7': dependencies: - '@vitest/utils': 4.1.4 + '@vitest/utils': 4.1.7 pathe: 2.0.3 - '@vitest/snapshot@4.1.4': + '@vitest/snapshot@4.1.7': dependencies: - '@vitest/pretty-format': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/pretty-format': 4.1.7 + '@vitest/utils': 4.1.7 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.4': {} + '@vitest/spy@4.1.7': {} - '@vitest/utils@4.1.4': + '@vitest/utils@4.1.7': dependencies: - '@vitest/pretty-format': 4.1.4 + '@vitest/pretty-format': 4.1.7 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -4507,17 +4864,17 @@ snapshots: acorn@8.16.0: {} - ajv@6.14.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 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -4525,22 +4882,28 @@ snapshots: dependencies: environment: 1.1.0 - ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - ansi-styles@6.2.3: {} - apexcharts@5.10.6: {} + apexcharts@5.13.0: {} argparse@2.0.1: {} aria-query@5.3.1: {} + arkregex@0.0.5: + dependencies: + '@ark/util': 0.56.0 + optional: true + + arktype@2.2.0: + dependencies: + '@ark/schema': 0.56.0 + '@ark/util': 0.56.0 + arkregex: 0.0.5 + optional: true + array-ify@1.0.0: {} array-timsort@1.0.3: {} @@ -4561,24 +4924,59 @@ snapshots: before-after-hook@4.0.0: {} + bits-ui@2.18.1(@internationalized/date@3.12.1)(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/dom': 1.7.6 + '@internationalized/date': 3.12.1 + esm-env: 1.2.2 + runed: 0.35.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + tabbable: 6.4.0 + transitivePeerDependencies: + - '@sveltejs/kit' + bottleneck@2.19.5: {} brace-expansion@2.1.0: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 - bun-types@1.3.12: + bun-types@1.3.14: dependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 + + bun@1.3.14: + optionalDependencies: + '@oven/bun-darwin-aarch64': 1.3.14 + '@oven/bun-darwin-x64': 1.3.14 + '@oven/bun-darwin-x64-baseline': 1.3.14 + '@oven/bun-freebsd-aarch64': 1.3.14 + '@oven/bun-freebsd-x64': 1.3.14 + '@oven/bun-linux-aarch64': 1.3.14 + '@oven/bun-linux-aarch64-android': 1.3.14 + '@oven/bun-linux-aarch64-musl': 1.3.14 + '@oven/bun-linux-x64': 1.3.14 + '@oven/bun-linux-x64-android': 1.3.14 + '@oven/bun-linux-x64-baseline': 1.3.14 + '@oven/bun-linux-x64-musl': 1.3.14 + '@oven/bun-linux-x64-musl-baseline': 1.3.14 + '@oven/bun-windows-aarch64': 1.3.14 + '@oven/bun-windows-x64': 1.3.14 + '@oven/bun-windows-x64-baseline': 1.3.14 cac@7.0.0: {} callsites@3.1.0: {} + camelcase@8.0.0: + optional: true + chai@6.2.2: {} chalk@5.6.2: {} @@ -4591,6 +4989,13 @@ snapshots: dependencies: readdirp: 5.0.0 + class-validator@0.14.4: + dependencies: + '@types/validator': 13.15.10 + libphonenumber-js: 1.13.2 + validator: 13.15.35 + optional: true + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -4598,22 +5003,16 @@ snapshots: cli-truncate@5.2.0: dependencies: slice-ansi: 8.0.0 - string-width: 8.2.0 + string-width: 8.2.1 - cliui@8.0.1: + cliui@9.0.1: dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 clsx@2.1.1: {} - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - colorette@2.0.20: {} commander@11.1.0: {} @@ -4636,6 +5035,8 @@ snapshots: consola@3.4.2: {} + content-type@2.0.0: {} + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 @@ -4665,9 +5066,9 @@ snapshots: cookie@0.6.0: {} - cosmiconfig-typescript-loader@6.3.0(@types/node@25.6.0)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@25.9.1)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 cosmiconfig: 9.0.1(typescript@6.0.3) jiti: 2.6.1 typescript: 6.0.3 @@ -4694,7 +5095,10 @@ snapshots: cssesc@3.0.0: {} - date-fns@4.1.0: {} + date-fns@4.2.1: {} + + dayjs@1.11.20: + optional: true debug@4.4.3: dependencies: @@ -4708,11 +5112,16 @@ snapshots: defu@6.1.7: {} + dequal@2.0.3: {} + destr@2.0.5: {} detect-libc@2.1.2: {} - devalue@5.7.1: {} + devalue@5.8.1: {} + + dlv@1.1.3: + optional: true dompurify@3.2.7: optionalDependencies: @@ -4722,16 +5131,22 @@ snapshots: dependencies: is-obj: 2.0.0 + dotenv@17.4.2: {} + duplexer@0.1.2: {} - emoji-regex@10.6.0: {} + effect@3.21.2: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 3.23.2 + optional: true - emoji-regex@8.0.0: {} + emoji-regex@10.6.0: {} - enhanced-resolve@5.20.1: + enhanced-resolve@5.21.6: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.2 + tapable: 2.3.3 env-paths@2.2.1: {} @@ -4743,15 +5158,17 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@2.0.0: {} + es-module-lexer@2.1.0: {} + + es-toolkit@1.46.1: {} escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.7.0)): dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.7.0) eslint-formatter-pretty@7.1.0: dependencies: @@ -4761,54 +5178,54 @@ snapshots: eslint-rule-docs: 1.1.235 log-symbols: 7.0.1 plur: 5.1.0 - string-width: 8.2.0 + string-width: 8.2.1 supports-hyperlinks: 4.4.0 - eslint-formatting-reporter@0.0.0(eslint@10.2.1(jiti@2.6.1)): + eslint-formatting-reporter@0.0.0(eslint@10.4.0(jiti@2.7.0)): dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.7.0) prettier-linter-helpers: 1.0.1 eslint-parser-plain@0.1.1: {} - eslint-plugin-format@1.5.0(eslint@10.2.1(jiti@2.6.1)): + eslint-plugin-format@1.5.0(eslint@10.4.0(jiti@2.7.0)): dependencies: '@dprint/formatter': 0.5.1 '@dprint/markdown': 0.21.1 '@dprint/toml': 0.7.0 - eslint: 10.2.1(jiti@2.6.1) - eslint-formatting-reporter: 0.0.0(eslint@10.2.1(jiti@2.6.1)) + eslint: 10.4.0(jiti@2.7.0) + eslint-formatting-reporter: 0.0.0(eslint@10.4.0(jiti@2.7.0)) eslint-parser-plain: 0.1.1 ohash: 2.0.11 oxfmt: 0.35.0 prettier: 3.8.3 synckit: 0.11.12 - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.6.1)))(eslint@10.2.1(jiti@2.6.1))(prettier@3.8.3): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.4.0(jiti@2.7.0)))(eslint@10.4.0(jiti@2.7.0))(prettier@3.8.3): dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.7.0) prettier: 3.8.3 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.2.1(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.4.0(jiti@2.7.0)) - eslint-plugin-svelte@3.17.0(eslint@10.2.1(jiti@2.6.1))(svelte@5.55.4(@typescript-eslint/types@8.58.2)): + eslint-plugin-svelte@3.17.1(eslint@10.4.0(jiti@2.7.0))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.4.0(jiti@2.7.0) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.10 - postcss-load-config: 3.1.4(postcss@8.5.10) - postcss-safe-parser: 7.0.1(postcss@8.5.10) - semver: 7.7.4 - svelte-eslint-parser: 1.6.0(svelte@5.55.4(@typescript-eslint/types@8.58.2)) + postcss: 8.5.15 + postcss-load-config: 3.1.4(postcss@8.5.15) + postcss-safe-parser: 7.0.1(postcss@8.5.15) + semver: 7.8.1 + svelte-eslint-parser: 1.6.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) optionalDependencies: - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) transitivePeerDependencies: - ts-node @@ -4822,7 +5239,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 @@ -4832,19 +5249,19 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.1(jiti@2.6.1): + eslint@10.4.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.5.5 + '@eslint/config-helpers': 0.6.0 '@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 escape-string-regexp: 4.0.0 @@ -4865,7 +5282,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -4889,11 +5306,11 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.5(@typescript-eslint/types@8.58.2): + esrap@2.2.9(@typescript-eslint/types@8.59.4): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 optionalDependencies: - '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/types': 8.59.4 esrecurse@4.3.0: dependencies: @@ -4905,7 +5322,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -4928,6 +5345,11 @@ snapshots: expect-type@1.3.0: {} + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + optional: true + fast-content-type-parse@3.0.0: {} fast-deep-equal@3.1.3: {} @@ -4938,7 +5360,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.0: {} + fast-uri@3.1.2: {} fdir@6.5.0(picomatch@4.0.4): optionalDependencies: @@ -4974,23 +5396,23 @@ snapshots: flowbite-datepicker@2.0.0: dependencies: '@rollup/plugin-node-resolve': 15.3.1 - '@tailwindcss/postcss': 4.2.2 + '@tailwindcss/postcss': 4.3.0 transitivePeerDependencies: - rollup - flowbite-svelte@1.33.1(svelte@5.55.4(@typescript-eslint/types@8.58.2))(tailwindcss@4.2.2): + flowbite-svelte@1.33.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(tailwindcss@4.3.0): dependencies: '@floating-ui/dom': 1.7.6 '@floating-ui/utils': 0.2.11 - apexcharts: 5.10.6 + apexcharts: 5.13.0 clsx: 2.1.1 - date-fns: 4.1.0 + date-fns: 4.2.1 esm-env: 1.2.2 flowbite: 3.1.2 - svelte: 5.55.4(@typescript-eslint/types@8.58.2) - tailwind-merge: 3.5.0 - tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.2) - tailwindcss: 4.2.2 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + tailwind-merge: 3.6.0 + tailwind-variants: 3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.0) + tailwindcss: 4.3.0 transitivePeerDependencies: - rollup @@ -5007,20 +5429,26 @@ snapshots: '@popperjs/core': 2.11.8 flowbite-datepicker: 1.3.2 mini-svg-data-uri: 1.4.4 - postcss: 8.5.10 + postcss: 8.5.15 transitivePeerDependencies: - rollup - flowbite@4.0.1: + flowbite@4.0.2: dependencies: '@popperjs/core': 2.11.8 flowbite-datepicker: 2.0.0 mini-svg-data-uri: 1.4.4 - postcss: 8.5.10 - tailwindcss: 4.2.2 + postcss: 8.5.15 + tailwindcss: 4.3.0 transitivePeerDependencies: - rollup + formsnap@2.0.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)): + dependencies: + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + svelte-toolbelt: 0.5.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + sveltekit-superforms: 2.30.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3) + fsevents@2.3.2: optional: true @@ -5031,41 +5459,41 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} + get-east-asian-width@1.6.0: {} get-stream@9.0.1: dependencies: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - git-cliff-darwin-arm64@2.12.0: + git-cliff-darwin-arm64@2.13.1: optional: true - git-cliff-darwin-x64@2.12.0: + git-cliff-darwin-x64@2.13.1: optional: true - git-cliff-linux-arm64@2.12.0: + git-cliff-linux-arm64@2.13.1: optional: true - git-cliff-linux-x64@2.12.0: + git-cliff-linux-x64@2.13.1: optional: true - git-cliff-windows-arm64@2.12.0: + git-cliff-windows-arm64@2.13.1: optional: true - git-cliff-windows-x64@2.12.0: + git-cliff-windows-x64@2.13.1: optional: true - git-cliff@2.12.0: + git-cliff@2.13.1: dependencies: execa: 9.6.1 optionalDependencies: - git-cliff-darwin-arm64: 2.12.0 - git-cliff-darwin-x64: 2.12.0 - git-cliff-linux-arm64: 2.12.0 - git-cliff-linux-x64: 2.12.0 - git-cliff-windows-arm64: 2.12.0 - git-cliff-windows-x64: 2.12.0 + git-cliff-darwin-arm64: 2.13.1 + git-cliff-darwin-x64: 2.13.1 + git-cliff-linux-arm64: 2.13.1 + git-cliff-linux-x64: 2.13.1 + git-cliff-windows-arm64: 2.13.1 + git-cliff-windows-x64: 2.13.1 git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0): dependencies: @@ -5079,13 +5507,13 @@ snapshots: dependencies: is-glob: 4.0.3 - global-directory@4.0.1: + global-directory@5.0.0: dependencies: - ini: 4.1.1 + ini: 6.0.0 globals@16.5.0: {} - globals@17.5.0: {} + globals@17.6.0: {} graceful-fs@4.2.11: {} @@ -5127,23 +5555,23 @@ snapshots: imurmurhash@0.1.4: {} - ini@4.1.1: {} + ini@6.0.0: {} + + inline-style-parser@0.2.7: {} irregular-plurals@3.5.0: {} is-arrayish@0.2.1: {} - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: hasown: 2.0.3 is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 is-glob@4.0.3: dependencies: @@ -5157,7 +5585,7 @@ snapshots: is-reference@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 is-stream@4.0.1: {} @@ -5182,6 +5610,17 @@ snapshots: jiti@2.6.1: {} + jiti@2.7.0: {} + + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + optional: true + js-sha256@0.11.1: {} js-tokens@10.0.0: {} @@ -5198,6 +5637,12 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-schema-to-ts@3.1.1: + dependencies: + '@babel/runtime': 7.29.2 + ts-algebra: 2.0.0 + optional: true + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -5216,13 +5661,16 @@ snapshots: known-css-properties@0.37.0: {} - kysely@0.28.16: {} + kysely@0.28.17: {} levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + libphonenumber-js@1.13.2: + optional: true + lightningcss-android-arm64@1.32.0: optional: true @@ -5276,23 +5724,22 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.4.0: + lint-staged@17.0.5: dependencies: - commander: 14.0.3 - listr2: 9.0.5 + listr2: 10.2.1 picomatch: 4.0.4 string-argv: 0.3.2 - tinyexec: 1.1.1 - yaml: 2.8.3 + tinyexec: 1.1.2 + optionalDependencies: + yaml: 2.9.0 - listr2@9.0.5: + listr2@10.2.1: dependencies: cli-truncate: 5.2.0 - colorette: 2.0.20 eventemitter3: 5.0.4 log-update: 6.1.0 rfdc: 1.4.1 - wrap-ansi: 9.0.2 + wrap-ansi: 10.0.0 locate-character@3.0.0: {} @@ -5302,18 +5749,6 @@ snapshots: lodash-es@4.18.1: {} - lodash.camelcase@4.3.0: {} - - lodash.kebabcase@4.1.1: {} - - lodash.mergewith@4.6.2: {} - - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - - lodash.upperfirst@4.3.1: {} - log-symbols@7.0.1: dependencies: is-unicode-supported: 2.1.0 @@ -5327,6 +5762,8 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 9.0.2 + lz-string@1.5.0: {} + magic-regexp@0.10.0: dependencies: estree-walker: 3.0.3 @@ -5334,27 +5771,29 @@ snapshots: mlly: 1.8.2 regexp-tree: 0.1.27 type-level-regexp: 0.1.17 - ufo: 1.6.3 + ufo: 1.6.4 unplugin: 2.3.11 magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.2: + magicast@0.5.3: dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 source-map-js: 1.2.1 make-dir@4.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.1 marked@14.0.0: {} mdn-data@2.27.1: {} + memoize-weak@1.0.2: {} + meow@13.2.0: {} mimic-function@5.0.1: {} @@ -5363,20 +5802,24 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minimatch@9.0.9: dependencies: brace-expansion: 2.1.0 - minimist@1.2.8: {} - 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 + + mode-watcher@1.1.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + dependencies: + runed: 0.25.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + svelte-toolbelt: 0.7.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)) monaco-editor@0.55.1: dependencies: @@ -5389,12 +5832,15 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.11: {} + nanoid@3.3.12: {} natural-compare@1.4.0: {} node-fetch-native@1.6.7: {} + normalize-url@8.1.1: + optional: true + npm-run-path@6.0.0: dependencies: path-key: 4.0.0 @@ -5406,7 +5852,7 @@ snapshots: dependencies: destr: 2.0.5 node-fetch-native: 1.6.7 - ufo: 1.6.3 + ufo: 1.6.4 ohash@2.0.11: {} @@ -5423,38 +5869,35 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxc-parser@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + oxc-parser@0.131.0: dependencies: - '@oxc-project/types': 0.124.0 + '@oxc-project/types': 0.131.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.124.0 - '@oxc-parser/binding-android-arm64': 0.124.0 - '@oxc-parser/binding-darwin-arm64': 0.124.0 - '@oxc-parser/binding-darwin-x64': 0.124.0 - '@oxc-parser/binding-freebsd-x64': 0.124.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.124.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.124.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.124.0 - '@oxc-parser/binding-linux-arm64-musl': 0.124.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.124.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.124.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.124.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.124.0 - '@oxc-parser/binding-linux-x64-gnu': 0.124.0 - '@oxc-parser/binding-linux-x64-musl': 0.124.0 - '@oxc-parser/binding-openharmony-arm64': 0.124.0 - '@oxc-parser/binding-wasm32-wasi': 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - '@oxc-parser/binding-win32-arm64-msvc': 0.124.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.124.0 - '@oxc-parser/binding-win32-x64-msvc': 0.124.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-walker@0.7.0(oxc-parser@0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)): + '@oxc-parser/binding-android-arm-eabi': 0.131.0 + '@oxc-parser/binding-android-arm64': 0.131.0 + '@oxc-parser/binding-darwin-arm64': 0.131.0 + '@oxc-parser/binding-darwin-x64': 0.131.0 + '@oxc-parser/binding-freebsd-x64': 0.131.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.131.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.131.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.131.0 + '@oxc-parser/binding-linux-arm64-musl': 0.131.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.131.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.131.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.131.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.131.0 + '@oxc-parser/binding-linux-x64-gnu': 0.131.0 + '@oxc-parser/binding-linux-x64-musl': 0.131.0 + '@oxc-parser/binding-openharmony-arm64': 0.131.0 + '@oxc-parser/binding-wasm32-wasi': 0.131.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.131.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.131.0 + '@oxc-parser/binding-win32-x64-msvc': 0.131.0 + + oxc-walker@0.7.0(oxc-parser@0.131.0): dependencies: magic-regexp: 0.10.0 - oxc-parser: 0.124.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-parser: 0.131.0 oxfmt@0.35.0: dependencies: @@ -5531,11 +5974,11 @@ snapshots: mlly: 1.8.2 pathe: 2.0.3 - playwright-core@1.59.1: {} + playwright-core@1.60.0: {} - playwright@1.59.1: + playwright@1.60.0: dependencies: - playwright-core: 1.59.1 + playwright-core: 1.60.0 optionalDependencies: fsevents: 2.3.2 @@ -5545,29 +5988,29 @@ snapshots: pngjs@7.0.0: {} - postcss-load-config@3.1.4(postcss@8.5.10): + postcss-load-config@3.1.4(postcss@8.5.15): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: - postcss: 8.5.10 + postcss: 8.5.15 - postcss-safe-parser@7.0.1(postcss@8.5.10): + postcss-safe-parser@7.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 - postcss-scss@4.0.9(postcss@8.5.10): + postcss-scss@4.0.9(postcss@8.5.15): dependencies: - postcss: 8.5.10 + postcss: 8.5.15 postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.10: + postcss@8.5.15: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -5577,10 +6020,10 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-svelte@3.5.1(prettier@3.8.3)(svelte@5.55.4(@typescript-eslint/types@8.58.2)): + prettier-plugin-svelte@4.0.1(prettier@3.8.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: prettier: 3.8.3 - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) prettier@2.5.1: {} @@ -5590,8 +6033,14 @@ snapshots: dependencies: parse-ms: 4.0.0 + property-expr@2.0.6: + optional: true + punycode@2.3.1: {} + pure-rand@6.1.0: + optional: true + quansync@1.0.0: {} readdirp@4.1.2: {} @@ -5600,8 +6049,6 @@ snapshots: regexp-tree@0.1.27: {} - require-directory@2.1.1: {} - require-from-string@2.0.2: {} resolve-from@4.0.0: {} @@ -5611,7 +6058,7 @@ snapshots: resolve@1.22.12: dependencies: es-errors: 1.3.0 - is-core-module: 2.16.1 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -5622,58 +6069,56 @@ snapshots: rfdc@1.4.1: {} - rolldown@1.0.0-rc.15: + rolldown@1.0.2: dependencies: - '@oxc-project/types': 0.124.0 - '@rolldown/pluginutils': 1.0.0-rc.15 + '@oxc-project/types': 0.132.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.15 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 - '@rolldown/binding-darwin-x64': 1.0.0-rc.15 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 - - rolldown@1.0.0-rc.16: - dependencies: - '@oxc-project/types': 0.126.0 - '@rolldown/pluginutils': 1.0.0-rc.16 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.16 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.16 - '@rolldown/binding-darwin-x64': 1.0.0-rc.16 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.16 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.16 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.16 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.16 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.16 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.16 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.16 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.16 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.16 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.16 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.16 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.16 - - runed@0.28.0(svelte@5.55.4(@typescript-eslint/types@8.58.2)): + '@rolldown/binding-android-arm64': 1.0.2 + '@rolldown/binding-darwin-arm64': 1.0.2 + '@rolldown/binding-darwin-x64': 1.0.2 + '@rolldown/binding-freebsd-x64': 1.0.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 + '@rolldown/binding-linux-arm64-gnu': 1.0.2 + '@rolldown/binding-linux-arm64-musl': 1.0.2 + '@rolldown/binding-linux-ppc64-gnu': 1.0.2 + '@rolldown/binding-linux-s390x-gnu': 1.0.2 + '@rolldown/binding-linux-x64-gnu': 1.0.2 + '@rolldown/binding-linux-x64-musl': 1.0.2 + '@rolldown/binding-openharmony-arm64': 1.0.2 + '@rolldown/binding-wasm32-wasi': 1.0.2 + '@rolldown/binding-win32-arm64-msvc': 1.0.2 + '@rolldown/binding-win32-x64-msvc': 1.0.2 + + runed@0.23.4(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + + runed@0.25.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + dependencies: + esm-env: 1.2.2 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + + runed@0.28.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: esm-env: 1.2.2 - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + + runed@0.35.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + dependencies: + dequal: 2.0.3 + esm-env: 1.2.2 + lz-string: 1.5.0 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + optionalDependencies: + '@sveltejs/kit': 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) sade@1.8.1: dependencies: mri: 1.2.0 - semver@7.7.4: {} + semver@7.8.1: {} set-cookie-parser@3.1.0: {} @@ -5707,10 +6152,10 @@ snapshots: source-map-js@1.2.1: {} - sqlite-wasm-kysely@0.3.0(kysely@0.28.16): + sqlite-wasm-kysely@0.3.0(kysely@0.28.17): dependencies: '@sqlite.org/sqlite-wasm': 3.48.0-build4 - kysely: 0.28.16 + kysely: 0.28.17 stackback@0.0.2: {} @@ -5718,33 +6163,30 @@ snapshots: string-argv@0.3.2: {} - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - string-width@8.2.0: + string-width@8.2.1: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 strip-final-newline@4.0.0: {} + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + superstruct@2.0.2: + optional: true + supports-color@10.2.2: {} supports-color@7.2.0: @@ -5758,61 +6200,83 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-adapter-bun@1.0.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(typescript@6.0.3): + svelte-adapter-bun@1.0.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(typescript@6.0.3): dependencies: - '@sveltejs/kit': 2.57.1(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) - rolldown: 1.0.0-rc.16 + '@sveltejs/kit': 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + rolldown: 1.0.2 typescript: 6.0.3 - svelte-check@4.4.6(picomatch@4.0.4)(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3): + svelte-check@4.4.8(picomatch@4.0.4)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.4) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) typescript: 6.0.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.6.0(svelte@5.55.4(@typescript-eslint/types@8.58.2)): + svelte-eslint-parser@1.6.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.10 - postcss-scss: 4.0.9(postcss@8.5.10) + postcss: 8.5.15 + postcss-scss: 4.0.9(postcss@8.5.15) postcss-selector-parser: 7.1.1 - semver: 7.7.4 + semver: 7.8.1 optionalDependencies: - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte-kit-sessions@0.4.0(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2)): + svelte-kit-sessions@0.4.0(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: '@isaacs/ttlcache': 1.4.1 - '@sveltejs/kit': 2.57.1(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)))(svelte@5.55.4(@typescript-eslint/types@8.58.2))(typescript@6.0.3)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + '@sveltejs/kit': 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + + svelte-sonner@1.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + dependencies: + runed: 0.28.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + + svelte-toolbelt@0.10.6(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + dependencies: + clsx: 2.1.1 + runed: 0.35.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + style-to-object: 1.0.14 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + transitivePeerDependencies: + - '@sveltejs/kit' - svelte-sonner@1.1.0(svelte@5.55.4(@typescript-eslint/types@8.58.2)): + svelte-toolbelt@0.5.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)): dependencies: - runed: 0.28.0(svelte@5.55.4(@typescript-eslint/types@8.58.2)) - svelte: 5.55.4(@typescript-eslint/types@8.58.2) + clsx: 2.1.1 + style-to-object: 1.0.14 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) - svelte@5.55.4(@typescript-eslint/types@8.58.2): + svelte-toolbelt@0.7.1(svelte@5.55.9(@typescript-eslint/types@8.59.4)): + dependencies: + clsx: 2.1.1 + runed: 0.23.4(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + style-to-object: 1.0.14 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + + svelte@5.55.9(@typescript-eslint/types@8.59.4): 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 + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) + '@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.7.1 + devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.5(@typescript-eslint/types@8.58.2) + esrap: 2.2.9(@typescript-eslint/types@8.59.4) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -5820,25 +6284,58 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' + sveltekit-superforms@2.30.1(@sveltejs/kit@2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(@types/json-schema@7.0.15)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3): + dependencies: + '@sveltejs/kit': 2.60.1(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)))(svelte@5.55.9(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + devalue: 5.8.1 + memoize-weak: 1.0.2 + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + ts-deepmerge: 7.0.3 + optionalDependencies: + '@exodus/schemasafe': 1.3.0 + '@standard-schema/spec': 1.1.0 + '@typeschema/class-validator': 0.3.0(@types/json-schema@7.0.15)(class-validator@0.14.4) + '@valibot/to-json-schema': 1.7.0(valibot@1.4.0(typescript@6.0.3)) + '@vinejs/vine': 3.0.1 + arktype: 2.2.0 + class-validator: 0.14.4 + effect: 3.21.2 + joi: 17.13.3 + json-schema-to-ts: 3.1.1 + superstruct: 2.0.2 + typebox: 1.1.38 + valibot: 1.4.0(typescript@6.0.3) + yup: 1.7.1 + zod: 4.4.3 + zod-v3-to-json-schema: 4.0.0(zod@4.4.3) + transitivePeerDependencies: + - '@types/json-schema' + - typescript + synckit@0.11.12: dependencies: '@pkgr/core': 0.2.9 - tailwind-merge@3.5.0: {} + tabbable@6.4.0: {} + + tailwind-merge@3.6.0: {} - tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.2): + tailwind-variants@3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.0): dependencies: - tailwindcss: 4.2.2 + tailwindcss: 4.3.0 optionalDependencies: - tailwind-merge: 3.5.0 + tailwind-merge: 3.6.0 - tailwindcss@4.2.2: {} + tailwindcss@4.3.0: {} - tapable@2.3.2: {} + tapable@2.3.3: {} + + tiny-case@1.0.3: + optional: true tinybench@2.9.0: {} - tinyexec@1.1.1: {} + tinyexec@1.1.2: {} tinyglobby@0.2.16: dependencies: @@ -5849,14 +6346,21 @@ snapshots: tinyrainbow@3.1.0: {} + toposort@2.0.2: + optional: true + totalist@3.0.1: {} + ts-algebra@2.0.0: + optional: true + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: typescript: 6.0.3 - tslib@2.8.1: - optional: true + ts-deepmerge@7.0.3: {} + + tslib@2.8.1: {} tunnel@0.0.6: {} @@ -5864,22 +6368,28 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@2.19.0: + optional: true + type-level-regexp@0.1.17: {} - typescript-eslint@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3): + typebox@1.1.38: + optional: true + + typescript-eslint@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/parser': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.58.2(typescript@6.0.3) - '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.2.1(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.59.4(@typescript-eslint/parser@8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.59.4(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.4.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color typescript@6.0.3: {} - ufo@1.6.3: {} + ufo@1.6.4: {} unconfig-core@7.5.0: dependencies: @@ -5890,11 +6400,11 @@ snapshots: dependencies: '@quansync/fs': 1.0.0 defu: 6.1.7 - jiti: 2.6.1 + jiti: 2.7.0 quansync: 1.0.0 unconfig-core: 7.5.0 - undici-types@7.19.2: {} + undici-types@7.24.6: {} undici@6.25.0: {} @@ -5902,28 +6412,26 @@ snapshots: universal-user-agent@7.0.3: {} - unocss@66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)): - dependencies: - '@unocss/cli': 66.6.8 - '@unocss/core': 66.6.8 - '@unocss/preset-attributify': 66.6.8 - '@unocss/preset-icons': 66.6.8 - '@unocss/preset-mini': 66.6.8 - '@unocss/preset-tagify': 66.6.8 - '@unocss/preset-typography': 66.6.8 - '@unocss/preset-uno': 66.6.8 - '@unocss/preset-web-fonts': 66.6.8 - '@unocss/preset-wind': 66.6.8 - '@unocss/preset-wind3': 66.6.8 - '@unocss/preset-wind4': 66.6.8 - '@unocss/transformer-attributify-jsx': 66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - '@unocss/transformer-compile-class': 66.6.8 - '@unocss/transformer-directives': 66.6.8 - '@unocss/transformer-variant-group': 66.6.8 - '@unocss/vite': 66.6.8(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + unocss@66.7.0(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)): + dependencies: + '@unocss/cli': 66.7.0 + '@unocss/core': 66.7.0 + '@unocss/preset-attributify': 66.7.0 + '@unocss/preset-icons': 66.7.0 + '@unocss/preset-mini': 66.7.0 + '@unocss/preset-tagify': 66.7.0 + '@unocss/preset-typography': 66.7.0 + '@unocss/preset-uno': 66.7.0 + '@unocss/preset-web-fonts': 66.7.0 + '@unocss/preset-wind': 66.7.0 + '@unocss/preset-wind3': 66.7.0 + '@unocss/preset-wind4': 66.7.0 + '@unocss/transformer-attributify-jsx': 66.7.0 + '@unocss/transformer-compile-class': 66.7.0 + '@unocss/transformer-directives': 66.7.0 + '@unocss/transformer-variant-group': 66.7.0 + '@unocss/vite': 66.7.0(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - vite unplugin-utils@0.3.1: @@ -5946,43 +6454,49 @@ snapshots: util-deprecate@1.0.2: {} - uuid@10.0.0: {} + uuid@14.0.0: {} + + valibot@1.4.0(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 + optional: true - uuid@13.0.0: {} + validator@13.15.35: + optional: true - vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3): + vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.10 - rolldown: 1.0.0-rc.15 + postcss: 8.5.15 + rolldown: 1.0.2 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 fsevents: 2.3.3 - jiti: 2.6.1 - yaml: 2.8.3 + jiti: 2.7.0 + yaml: 2.9.0 - vitefu@1.1.3(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)): + vitefu@1.1.3(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)): optionalDependencies: - vite: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) - vitest-browser-svelte@2.1.1(svelte@5.55.4(@typescript-eslint/types@8.58.2))(vitest@4.1.4): + vitest-browser-svelte@2.1.1(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vitest@4.1.7): dependencies: - '@testing-library/svelte-core': 1.0.0(svelte@5.55.4(@typescript-eslint/types@8.58.2)) - svelte: 5.55.4(@typescript-eslint/types@8.58.2) - vitest: 4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) + '@testing-library/svelte-core': 1.0.0(svelte@5.55.9(@typescript-eslint/types@8.59.4)) + svelte: 5.55.9(@typescript-eslint/types@8.59.4) + vitest: 4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) - vitest@4.1.4(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)): + vitest@4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(@vitest/coverage-v8@4.1.7)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.4 - '@vitest/runner': 4.1.4 - '@vitest/snapshot': 4.1.4 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 - es-module-lexer: 2.0.0 + '@vitest/expect': 4.1.7 + '@vitest/mocker': 4.1.7(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.7 + '@vitest/runner': 4.1.7 + '@vitest/snapshot': 4.1.7 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 @@ -5990,15 +6504,15 @@ snapshots: picomatch: 4.0.4 std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.1.1 + tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) + vite: 8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.6.0 - '@vitest/browser-playwright': 4.1.4(playwright@1.59.1)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3))(vitest@4.1.4) - '@vitest/coverage-v8': 4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4) + '@types/node': 25.9.1 + '@vitest/browser-playwright': 4.1.7(playwright@1.60.0)(vite@8.0.14(@types/node@25.9.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/coverage-v8': 4.1.7(@vitest/browser@4.1.7)(vitest@4.1.7) transitivePeerDependencies: - msw @@ -6015,11 +6529,11 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@7.0.0: + wrap-ansi@10.0.0: dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 + ansi-styles: 6.2.3 + string-width: 8.2.1 + strip-ansi: 7.2.0 wrap-ansi@9.0.2: dependencies: @@ -6027,28 +6541,43 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 - ws@8.20.0: {} + ws@8.20.1: {} y18n@5.0.8: {} yaml@1.10.3: {} - yaml@2.8.3: {} + yaml@2.9.0: + optional: true - yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} - yargs@17.7.2: + yargs@18.0.0: dependencies: - cliui: 8.0.1 + cliui: 9.0.1 escalade: 3.2.0 get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 + string-width: 7.2.0 y18n: 5.0.8 - yargs-parser: 21.1.1 + yargs-parser: 22.0.0 yocto-queue@0.1.0: {} yoctocolors@2.1.2: {} + yup@1.7.1: + dependencies: + property-expr: 2.0.6 + tiny-case: 1.0.3 + toposort: 2.0.2 + type-fest: 2.19.0 + optional: true + zimmerframe@1.1.4: {} + + zod-v3-to-json-schema@4.0.0(zod@4.4.3): + dependencies: + zod: 4.4.3 + optional: true + + zod@4.4.3: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 57782b5..479b221 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,59 +2,77 @@ catalogs: build: '@tsconfig/svelte': ^5.0.8 'svelte-adapter-bun': ^1.0.1 - typescript: ^6.0.2 + typescript: ^6.0.3 ci: - '@commitlint/cli': ^20.5.0 - '@commitlint/config-conventional': ^20.5.0 + '@commitlint/cli': ^21.0.1 + '@commitlint/config-conventional': ^21.0.1 '@favware/cliff-jumper': ^6.1.0 - '@nanoforge-dev/actions': ^1.2.3 + '@nanoforge-dev/actions': ^1.4.2 husky: ^9.1.7 - lint-staged: ^16.4.0 + lint-staged: ^17.0.5 components: - flowbite: ^4.0.1 + bits-ui: ^2.18.1 + flowbite: ^4.0.2 flowbite-svelte: ^1.33.1 monaco-editor: ^0.55.1 - svelte-sonner: ^1.1.0 + svelte-sonner: ^1.1.1 core: '@nanoforge-dev/ecs-lib': ^1.1.2 '@sveltejs/adapter-auto': ^7.0.1 - '@sveltejs/kit': ^2.57.1 - '@sveltejs/vite-plugin-svelte': ^7.0.0 - '@types/bun': ^1.3.12 - svelte: ^5.55.3 - svelte-check: ^4.4.6 - svelte-kit-sessions: "^0.4.0" - vite: ^8.0.8 + '@sveltejs/kit': ^2.60.1 + '@sveltejs/vite-plugin-svelte': ^7.1.2 + '@types/bun': ^1.3.14 + bun: ^1.3.14 + svelte: ^5.55.9 + svelte-check: ^4.4.8 + svelte-kit-sessions: ^0.4.0 + vite: ^8.0.14 css: '@alexanderniebuhr/prettier-plugin-unocss': ^0.0.4 - '@unocss/extractor-svelte': ^66.6.8 - '@unocss/preset-icons': ^66.6.8 - '@unocss/preset-web-fonts': ^66.6.8 - '@unocss/preset-wind4': ^66.6.8 - unocss: ^66.6.8 + '@unocss/extractor-svelte': ^66.7.0 + '@unocss/preset-icons': ^66.7.0 + '@unocss/preset-web-fonts': ^66.7.0 + '@unocss/preset-wind4': ^66.7.0 + clsx: ^2.1.1 + tailwind-merge: ^3.6.0 + tailwind-variants: ^3.2.2 + tailwindcss: ^4.3.0 + unocss: ^66.7.0 i18n: - '@inlang/paraglide-js': ^2.15.3 + '@inlang/paraglide-js': ^2.18.1 icons: '@iconify-json/ic': ^1.2.4 - '@iconify-json/material-icon-theme': ^1.2.58 + '@iconify-json/material-icon-theme': ^1.2.64 '@iconify-json/solar': ^1.2.5 + '@lucide/svelte': ^1.16.0 + libs-back: + dotenv: ^17.4.2 + libs-front: + '@internationalized/date': ^3.12.1 + '@tanstack/svelte-query': ^6.1.30 + formsnap: ^2.0.1 + mode-watcher: ^1.1.0 + svelte-sonner: ^1.1.1 + sveltekit-superforms: ^2.30.1 + zod: ^4.4.3 lint: '@nanoforge-dev/utils-eslint-config': ^1.0.2 '@nanoforge-dev/utils-prettier-config': ^1.0.2 '@trivago/prettier-plugin-sort-imports': ^6.0.2 - eslint: ^10.2.0 - eslint-plugin-svelte: ^3.17.0 - globals: ^17.5.0 - prettier: ^3.8.2 - prettier-plugin-svelte: ^3.5.1 - typescript-eslint: ^8.58.2 + eslint: ^10.4.0 + eslint-plugin-svelte: ^3.17.1 + globals: ^17.6.0 + prettier: ^3.8.3 + prettier-plugin-svelte: ^4.0.1 + typescript-eslint: ^8.59.4 test: - '@playwright/test': ^1.59.1 - '@vitest/browser-playwright': ^4.1.4 - '@vitest/coverage-v8': ^4.1.4 - playwright: ^1.59.1 - vitest: ^4.1.4 + '@playwright/test': ^1.60.0 + '@vitest/browser-playwright': ^4.1.7 + '@vitest/coverage-v8': ^4.1.7 + playwright: ^1.60.0 + vitest: ^4.1.7 vitest-browser-svelte: ^2.1.1 onlyBuiltDependencies: + - bun - esbuild diff --git a/src/app.css b/src/app.css index 3131c5a..8c7e6e2 100644 --- a/src/app.css +++ b/src/app.css @@ -10,8 +10,77 @@ } } +/* White theme */ +/*:root {*/ +/* --background: 0.9851 0 0;*/ +/* --foreground: 0.2046 0 0;*/ + +/* --border: 0.9288 0.0126 255.51;*/ +/* --input: 0.9683 0.0069 247.9;*/ +/* --ring: 0.4493 0.1953 294.69;*/ + +/* --card: 1 0 0;*/ +/* --card-foreground: 0.2046 0 0;*/ + +/* --popover: 1 0 0;*/ +/* --popover-foreground: 0.2046 0 0;*/ + +/* --primary: 0.4493 0.1953 294.69;*/ +/* --primary-foreground: 0.9842 0.0034 247.86;*/ + +/* --secondary: 0.9683 0.0069 247.9;*/ +/* --secondary-foreground: 0.2077 0.0398 265.75;*/ + +/* --muted: 0.9683 0.0069 247.9;*/ +/* --muted-foreground: 0.5544 0.0407 257.42;*/ + +/* --accent: 0.4493 0.1953 294.69;*/ +/* --accent-foreground: 0.9842 0.0034 247.86;*/ + +/* --destructive: 0.6368 0.2078 25.33;*/ +/* --destructive-foreground: 0.9842 0.0034 247.86;*/ +/*}*/ + +/* Dark theme */ +/*.dark {*/ :root { + --background: 0.115 0 89.876; + --foreground: 0.9461 0 0; + + --border: 0.264 0 89.876; + --input: 0.244 0 89.876; + --ring: 0.4493 0.1953 294.69; + + --card: 0.1683 0 0; + --card-foreground: 0.9461 0 0; + + --popover: 0.115 0 89.876; + --popover-foreground: 0.9461 0 0; + + --primary: 0.4493 0.1953 294.69; + --primary-foreground: 0.9461 0 0; + + --secondary: 0.244 0 89.876; + --secondary-foreground: 0.9461 0 0; + + --muted: 0.205 0 89.876; + --muted-foreground: 0.7107 0.0351 256.79; + + --accent: 0.4493 0.1953 294.69; + --accent-foreground: 0.9461 0 0; + + --success: 0.4546 0.1348 141.88; + --success-foreground: 0.9461 0 0; + + --destructive: 0.3958 0.1331 25.72; + --destructive-foreground: 0.9461 0 0; +} + +body { + background: oklch(var(--background)); + color: oklch(var(--foreground)); font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; font-weight: 400; @@ -19,8 +88,6 @@ text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - - @apply color-neutral-200 bg-neutral-900; } html { @@ -41,3 +108,21 @@ html::-webkit-scrollbar-thumb { background: #52525b; border-radius: 9999px; } + +@keyframes enter { + from { + opacity: var(--un-enter-opacity, 1); + transform: translate3d(var(--un-enter-translate-x, 0), var(--un-enter-translate-y, 0), 0) + scale3d(var(--un-enter-scale, 1), var(--un-enter-scale, 1), var(--un-enter-scale, 1)) + rotate(var(--un-enter-rotate, 0)); + } +} + +@keyframes exit { + to { + opacity: var(--un-exit-opacity, 1); + transform: translate3d(var(--un-exit-translate-x, 0), var(--un-exit-translate-y, 0), 0) + scale3d(var(--un-exit-scale, 1), var(--un-exit-scale, 1), var(--un-exit-scale, 1)) + rotate(var(--un-exit-rotate, 0)); + } +} diff --git a/src/app.d.ts b/src/app.d.ts index ba56e29..85e7cdf 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,7 +1,5 @@ // See https://svelte.dev/docs/kit/types#app.d.ts // for information about these interfaces -import child_process from 'node:child_process'; - declare global { namespace App { // interface Error {} @@ -14,8 +12,7 @@ declare global { declare module 'svelte-kit-sessions' { interface SessionData { - path: string; - projectPid?: number; + id: string; } } diff --git a/src/demo.spec.ts b/src/demo.spec.ts new file mode 100644 index 0000000..e2efa47 --- /dev/null +++ b/src/demo.spec.ts @@ -0,0 +1,5 @@ +import { expect, it } from 'vitest'; + +it('expect 1 + 2 = 3', async () => { + expect(1 + 2).equal(3); +}); diff --git a/src/hooks.server.ts b/src/hooks.server.ts index dcbf401..2b5b4b4 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,31 +1,8 @@ -import { type Handle, redirect } from '@sveltejs/kit'; +import { type Handle } from '@sveltejs/kit'; import { sequence } from '@sveltejs/kit/hooks'; -import * as crypto from 'node:crypto'; -import { sveltekitSessionHandle } from 'svelte-kit-sessions'; - -import { env } from '$env/dynamic/private'; import { paraglideMiddleware } from '$lib/paraglide/server'; - -if (!env.SESSION_SECRET) { - env.SESSION_SECRET = crypto.randomBytes(20).toString('hex'); - console.log(`SESSION_SECRET not found, generating a temporary one: ${env.SESSION_SECRET}`); -} - -const sessionHandle = sveltekitSessionHandle({ - secret: env.SESSION_SECRET, -}); - -const checkAuthorizationHandle: Handle = async ({ event, resolve }) => { - if ( - !event.locals.session.data.path && - event.url.pathname !== '/load-project' && - event.url.pathname + event.url.search !== '/cli?/new' - ) { - throw redirect(302, '/load-project'); - } - return resolve(event); -}; +import { checkAuthorizationHandle, sessionHandle } from '$lib/server/session'; const handleParaglide: Handle = ({ event, resolve }) => paraglideMiddleware(event.request, ({ request, locale }) => { diff --git a/src/lib/client/action/base.repository.ts b/src/lib/client/action/base.repository.ts new file mode 100644 index 0000000..2cea8a8 --- /dev/null +++ b/src/lib/client/action/base.repository.ts @@ -0,0 +1,58 @@ +import { deserialize } from '$app/forms'; + +import { Exception } from '@utils/exception'; +import type { HttpClient, RequestOptions } from '@utils/http'; + +export class BaseRepository { + private readonly _client: HttpClient; + + constructor(client: HttpClient) { + this._client = client; + } + + protected run( + path: string, + body?: I, + options?: RequestOptions, + ): Promise { + return this.runRequestBody(path, body, options); + } + + private async runRequestBody(path: string, body?: I, options?: RequestOptions): Promise { + const rawResult = await this._client.post(path, this._parseBodyToFormData(body), options); + const result = deserialize(await rawResult.text()); + + if (result.type === 'redirect') + throw new Error(`Redirect (${result.status}) - ${result.location}`); + if (result.type === 'error') { + if (result.error?.error && result.error?.message && result.status) + throw new Exception(result.error.error, result.error.message, result.status); + throw new Error(`Error (${result.status}) - ${result.error}`); + } + + if (result.type === 'failure') { + if (result.data?.error && result.data?.message && result.status) + throw new Exception( + result.data.error as string, + result.data.message as string, + result.status, + ); + throw new Error(`Failure (${result.status}) - ${result.data}`); + } + + return result.data as R; + } + + private _parseBodyToFormData(body?: any): FormData { + const formData = new FormData(); + if (body) { + for (const [key, baseValue] of Object.entries(body)) { + let value: Blob | string; + if (baseValue instanceof File) value = baseValue; + else value = JSON.stringify(baseValue); + formData.append(key, value); + } + } + return formData; + } +} diff --git a/src/lib/client/action/client.ts b/src/lib/client/action/client.ts new file mode 100644 index 0000000..22c7d58 --- /dev/null +++ b/src/lib/client/action/client.ts @@ -0,0 +1,33 @@ +import { SESSION_PROJECT_HEADER } from '@utils/const'; +import { HttpClient } from '@utils/http'; + +import { ProjectFsRepository } from './repositories/fs.repository'; +import { ProjectLoaderRepository } from './repositories/loader.repository'; +import { ProjectPackageRepository } from './repositories/package.repository'; +import { ProjectRepository } from './repositories/project.repository'; +import { ProjectSaveRepository } from './repositories/save.repository'; + +export interface ActionClient { + fs: ProjectFsRepository; + loader: ProjectLoaderRepository; + package: ProjectPackageRepository; + project: ProjectRepository; + save: ProjectSaveRepository; +} + +export const getActionClient = (projectId?: string): ActionClient => { + const client = new HttpClient( + '', + projectId ? { headers: { [SESSION_PROJECT_HEADER]: projectId } } : {}, + ); + + return { + fs: new ProjectFsRepository(client), + loader: new ProjectLoaderRepository(client), + package: new ProjectPackageRepository(client), + project: new ProjectRepository(client), + save: new ProjectSaveRepository(client), + }; +}; + +export const noProjectActions = getActionClient(); diff --git a/src/lib/client/action/index.ts b/src/lib/client/action/index.ts new file mode 100644 index 0000000..c2c5d62 --- /dev/null +++ b/src/lib/client/action/index.ts @@ -0,0 +1,2 @@ +export { noProjectActions, type ActionClient, getActionClient } from './client'; +export * from './types'; diff --git a/src/lib/client/action/repositories/fs.repository.ts b/src/lib/client/action/repositories/fs.repository.ts new file mode 100644 index 0000000..e19e0de --- /dev/null +++ b/src/lib/client/action/repositories/fs.repository.ts @@ -0,0 +1,8 @@ +import { BaseRepository } from '../base.repository'; +import type { ReaddirFsActionInput, ReaddirFsActionResult } from '../types'; + +export class ProjectFsRepository extends BaseRepository { + readdir(input: ReaddirFsActionInput): Promise { + return this.run(`/actions/project/fs?/readdir`, input); + } +} diff --git a/src/lib/client/action/repositories/loader.repository.ts b/src/lib/client/action/repositories/loader.repository.ts new file mode 100644 index 0000000..d7dd052 --- /dev/null +++ b/src/lib/client/action/repositories/loader.repository.ts @@ -0,0 +1,16 @@ +import { BaseRepository } from '../base.repository'; +import type { ActionLoaderEnv, ActionLoaderManifest } from '../types'; + +export class ProjectLoaderRepository extends BaseRepository { + env(): Promise { + return this.run(`/actions/project/loader?/env`); + } + + manifest(): Promise { + return this.run(`/actions/project/loader?/manifest`); + } + + build(): Promise { + return this.run(`/actions/project/loader?/build`); + } +} diff --git a/src/lib/client/action/repositories/package.repository.ts b/src/lib/client/action/repositories/package.repository.ts new file mode 100644 index 0000000..a3e98d7 --- /dev/null +++ b/src/lib/client/action/repositories/package.repository.ts @@ -0,0 +1,41 @@ +import type { EditorComponentManifest, EditorSystemManifest } from '@nanoforge-dev/ecs-lib'; + +import { BaseRepository } from '../base.repository'; +import type { + AddComponentsActionInput, + AddSystemsActionInput, + CreateComponentActionInput, + CreateSystemActionInput, + GetComponentsManifestsActionInput, + GetSystemsManifestsActionInput, + NewComponentPackageResult, + NewSystemPackageResult, +} from '../types'; + +export class ProjectPackageRepository extends BaseRepository { + addComponents(input: AddComponentsActionInput): Promise { + return this.run(`/actions/project/package?/add-components`, input); + } + + addSystems(input: AddSystemsActionInput): Promise { + return this.run(`/actions/project/package?/add-systems`, input); + } + + createComponent(input: CreateComponentActionInput): Promise { + return this.run(`/actions/project/package?/create-component`, input); + } + + createSystem(input: CreateSystemActionInput): Promise { + return this.run(`/actions/project/package?/create-system`, input); + } + + getComponentsManifests( + input: GetComponentsManifestsActionInput, + ): Promise { + return this.run(`/actions/project/package?/get-components-manifests`, input); + } + + getSystemsManifests(input: GetSystemsManifestsActionInput): Promise { + return this.run(`/actions/project/package?/get-systems-manifests`, input); + } +} diff --git a/src/lib/client/action/repositories/project.repository.ts b/src/lib/client/action/repositories/project.repository.ts new file mode 100644 index 0000000..068795b --- /dev/null +++ b/src/lib/client/action/repositories/project.repository.ts @@ -0,0 +1,31 @@ +import { BaseRepository } from '../base.repository'; +import type { + ActionProject, + CreateProjectActionInput, + GatewayProjectResult, + InfoProjectInput, + InfoProjectResult, + LoadProjectActionInput, +} from '../types'; + +export class ProjectRepository extends BaseRepository { + load(input: LoadProjectActionInput): Promise { + return this.run(`/actions/project?/load`, input); + } + + new(input: CreateProjectActionInput): Promise { + return this.run(`/actions/project?/new`, input); + } + + getInfo(): Promise { + return this.run(`/actions/project?/get-info`); + } + + setInfo(input: InfoProjectInput): Promise { + return this.run(`/actions/project?/set-info`, input); + } + + getGatewayProjects(): Promise { + return this.run(`/actions/project?/get-gateway-projects`); + } +} diff --git a/src/lib/client/action/repositories/save.repository.ts b/src/lib/client/action/repositories/save.repository.ts new file mode 100644 index 0000000..e2939f4 --- /dev/null +++ b/src/lib/client/action/repositories/save.repository.ts @@ -0,0 +1,11 @@ +import { BaseRepository } from '../base.repository'; +import type { GetSaveResult, SetSaveInput } from '../types'; + +export class ProjectSaveRepository extends BaseRepository { + get(): Promise { + return this.run(`/actions/project/save?/get`); + } + set(input: SetSaveInput): Promise { + return this.run(`/actions/project/save?/set`, input); + } +} diff --git a/src/lib/client/action/types/fs.type.ts b/src/lib/client/action/types/fs.type.ts new file mode 100644 index 0000000..ee72695 --- /dev/null +++ b/src/lib/client/action/types/fs.type.ts @@ -0,0 +1,6 @@ +import type { ReaddirFsBody } from '$lib/server/actions/project/fs/readdir.action'; +import type { DirectoryContent } from '$lib/server/file-system/project-directory'; + +export type ReaddirFsActionInput = ReaddirFsBody; + +export type ReaddirFsActionResult = DirectoryContent; diff --git a/src/lib/client/action/types/index.ts b/src/lib/client/action/types/index.ts new file mode 100644 index 0000000..78759b4 --- /dev/null +++ b/src/lib/client/action/types/index.ts @@ -0,0 +1,5 @@ +export * from './fs.type'; +export * from './loader.type'; +export * from './project.type'; +export * from './package.type'; +export * from './save.type'; diff --git a/src/lib/client/action/types/loader.type.ts b/src/lib/client/action/types/loader.type.ts new file mode 100644 index 0000000..3b24c56 --- /dev/null +++ b/src/lib/client/action/types/loader.type.ts @@ -0,0 +1,5 @@ +import type { Loader } from '$lib/server/project/loader'; + +export type ActionLoaderManifest = ReturnType; + +export type ActionLoaderEnv = ReturnType; diff --git a/src/lib/client/action/types/package.type.ts b/src/lib/client/action/types/package.type.ts new file mode 100644 index 0000000..c347943 --- /dev/null +++ b/src/lib/client/action/types/package.type.ts @@ -0,0 +1,26 @@ +import type { AddComponentBody } from '$lib/server/actions/project/package/add-components.action'; +import type { AddSystemBody } from '$lib/server/actions/project/package/add-systems.action'; +import type { CreateComponentBody } from '$lib/server/actions/project/package/create-component.action'; +import type { CreateSystemBody } from '$lib/server/actions/project/package/create-system.action'; +import type { GetComponentManifestBody } from '$lib/server/actions/project/package/get-components-manifests.action'; +import type { GetSystemManifestBody } from '$lib/server/actions/project/package/get-systems-manifests.action'; +import type { + NewComponentPackage, + NewSystemPackage, +} from '$lib/server/project/package/package.type'; + +export type NewComponentPackageResult = NewComponentPackage; + +export type NewSystemPackageResult = NewSystemPackage; + +export type AddComponentsActionInput = AddComponentBody; + +export type AddSystemsActionInput = AddSystemBody; + +export type GetComponentsManifestsActionInput = GetComponentManifestBody; + +export type GetSystemsManifestsActionInput = GetSystemManifestBody; + +export type CreateComponentActionInput = CreateComponentBody; + +export type CreateSystemActionInput = CreateSystemBody; diff --git a/src/lib/client/action/types/project.type.ts b/src/lib/client/action/types/project.type.ts new file mode 100644 index 0000000..67c7660 --- /dev/null +++ b/src/lib/client/action/types/project.type.ts @@ -0,0 +1,16 @@ +import type { GatewayProject } from '$lib/server/actions/project/gateway.action'; +import type { InfoProject, InfoProjectBody } from '$lib/server/actions/project/info.action'; +import type { LoadProjectBody } from '$lib/server/actions/project/load.action'; +import type { CreateProjectBody } from '$lib/server/actions/project/new.action'; +import type { Project } from '$lib/server/project'; + +export type ActionProject = Project; + +export type LoadProjectActionInput = LoadProjectBody; + +export type CreateProjectActionInput = CreateProjectBody; + +export type InfoProjectResult = InfoProject; +export type InfoProjectInput = InfoProjectBody; + +export type GatewayProjectResult = GatewayProject; diff --git a/src/lib/client/action/types/save.type.ts b/src/lib/client/action/types/save.type.ts new file mode 100644 index 0000000..3f71760 --- /dev/null +++ b/src/lib/client/action/types/save.type.ts @@ -0,0 +1,7 @@ +import type { SetSaveBody } from '$lib/server/actions/project/save/set-save.action'; + +import type { Save } from '@utils/types'; + +export type GetSaveResult = Save; + +export type SetSaveInput = SetSaveBody; diff --git a/src/lib/client/config/config.ts b/src/lib/client/config/config.ts new file mode 100644 index 0000000..03da139 --- /dev/null +++ b/src/lib/client/config/config.ts @@ -0,0 +1,9 @@ +import { PUBLIC_MODE } from '$env/static/public'; + +import type { Config } from './config.type'; + +export const getConfig = (): Config => { + return { + mode: PUBLIC_MODE === 'online' ? 'online' : 'offline', + }; +}; diff --git a/src/lib/client/config/config.type.ts b/src/lib/client/config/config.type.ts new file mode 100644 index 0000000..0b54c05 --- /dev/null +++ b/src/lib/client/config/config.type.ts @@ -0,0 +1,3 @@ +export interface Config { + mode: 'offline' | 'online'; +} diff --git a/src/lib/client/config/index.ts b/src/lib/client/config/index.ts new file mode 100644 index 0000000..ce28a64 --- /dev/null +++ b/src/lib/client/config/index.ts @@ -0,0 +1,2 @@ +export type { Config } from './config.type'; +export { getConfig } from './config'; diff --git a/src/lib/client/event/event-emitter.ts b/src/lib/client/event/event-emitter.ts new file mode 100644 index 0000000..09e5956 --- /dev/null +++ b/src/lib/client/event/event-emitter.ts @@ -0,0 +1,72 @@ +import type { IEventEmitter, ListenerType, QueuedEvent } from './types'; + +export class EventEmitter< + Events extends string, + EventsMap extends Record, +> implements IEventEmitter { + public listeners: { + [K in keyof EventsMap]?: ListenerType[]; + } = {}; + + public eventQueue: QueuedEvent[] = []; + + runEvents(): void { + this.eventQueue.forEach((e) => { + this._executeEvent(e); + }); + + this.eventQueue = []; + } + + emitEvent(event: K, ...args: EventsMap[K]): void { + this.eventQueue.push({ + event, + args, + }); + } + addListener( + event: K, + listener: ListenerType, + ): void { + if (!this.listeners[event]) this.listeners[event] = []; + this.listeners[event].push(listener); + } + on(event: K, listener: ListenerType): void { + this.addListener(event, listener); + } + + removeListener( + event: K, + listener: ListenerType, + ): void { + if (!this.listeners[event]) return; + const index = this.listeners[event].indexOf(listener); + if (index >= 0) { + this.listeners[event].splice(index, 1); + } + } + off(event: K, listener: ListenerType): void { + this.removeListener(event, listener); + } + + removeListenersForEvent(event: keyof EventsMap): void { + if (!this.listeners[event]) return; + this.listeners[event] = []; + } + removeAllListeners(): void { + this.listeners = {}; + } + + private _executeEvent({ + event, + args, + }: QueuedEvent): void { + this.listeners[event]?.forEach((listener) => { + try { + listener(...args); + } catch (error) { + console.error(`Error handling event [${String(event)}]:`, error); + } + }); + } +} diff --git a/src/lib/client/event/event-handler.ts b/src/lib/client/event/event-handler.ts new file mode 100644 index 0000000..27af05d --- /dev/null +++ b/src/lib/client/event/event-handler.ts @@ -0,0 +1,20 @@ +import { EventEmitter } from './event-emitter'; +import { type CoreEvents, type CoreEventsMap } from './events/core-events'; +import { type EditorEvents, type EditorEventsMap } from './events/editor-events'; +import type { ListenerType } from './types'; + +export class EventHandler { + public readonly _coreEvents = new EventEmitter(); + public readonly _editorEvents = new EventEmitter(); + + emit(event: K, ...args: CoreEventsMap[K]) { + this._coreEvents.emitEvent(event, ...args); + } + + on( + event: K, + callback: ListenerType, + ) { + this._editorEvents.on(event, callback); + } +} diff --git a/src/lib/client/event/events/core-events.ts b/src/lib/client/event/events/core-events.ts new file mode 100644 index 0000000..fda6f18 --- /dev/null +++ b/src/lib/client/event/events/core-events.ts @@ -0,0 +1,15 @@ +export enum CoreEvents { + HOT_RELOAD = 'hot-reload', + HARD_RELOAD = 'hard-reload', + PAUSE_GAME = 'pause-game', + STOP_GAME = 'stop-game', + UNPAUSE_GAME = 'unpause-game', +} + +export interface CoreEventsMap { + [CoreEvents.HOT_RELOAD]: []; + [CoreEvents.HARD_RELOAD]: []; + [CoreEvents.PAUSE_GAME]: [duration: number]; + [CoreEvents.STOP_GAME]: []; + [CoreEvents.UNPAUSE_GAME]: []; +} diff --git a/src/lib/client/event/events/editor-events.ts b/src/lib/client/event/events/editor-events.ts new file mode 100644 index 0000000..85b6752 --- /dev/null +++ b/src/lib/client/event/events/editor-events.ts @@ -0,0 +1,9 @@ +// ! Please do not remove this event unless a new one replaces it, it causes types issues + +export enum EditorEvents { + EMPTY = 'empty', +} + +export interface EditorEventsMap { + [EditorEvents.EMPTY]: []; +} diff --git a/src/lib/client/event/index.ts b/src/lib/client/event/index.ts new file mode 100644 index 0000000..7a43e86 --- /dev/null +++ b/src/lib/client/event/index.ts @@ -0,0 +1,4 @@ +export { EventHandler } from './event-handler'; +export type * from './types'; +export * from './events/core-events'; +export * from './events/editor-events'; diff --git a/src/lib/client/event/types/event-emitter.type.ts b/src/lib/client/event/types/event-emitter.type.ts new file mode 100644 index 0000000..1e23f07 --- /dev/null +++ b/src/lib/client/event/types/event-emitter.type.ts @@ -0,0 +1,40 @@ +export type ListenerType< + Events extends string, + EventsMap extends Record, + K extends keyof EventsMap, +> = (...args: EventsMap[K]) => void; + +export type QueuedEvent = { + event: K; + args: EventsMap[K]; +}; + +export interface IEventEmitter> { + listeners: { + [K in keyof EventsMap]?: ListenerType[]; + }; + + eventQueue: QueuedEvent[]; + + runEvents(): void; + + emitEvent(event: K, ...args: EventsMap[K]): void; + + addListener( + event: K, + listener: ListenerType, + ): void; + + on(event: K, listener: ListenerType): void; + + removeListener( + event: K, + listener: ListenerType, + ): void; + + off(event: K, listener: ListenerType): void; + + removeListenersForEvent(event: keyof EventsMap): void; + + removeAllListeners(): void; +} diff --git a/src/lib/client/event/types/index.ts b/src/lib/client/event/types/index.ts new file mode 100644 index 0000000..532d572 --- /dev/null +++ b/src/lib/client/event/types/index.ts @@ -0,0 +1 @@ +export * from './event-emitter.type'; diff --git a/src/lib/client/info/index.ts b/src/lib/client/info/index.ts new file mode 100644 index 0000000..6297afe --- /dev/null +++ b/src/lib/client/info/index.ts @@ -0,0 +1 @@ +export { InfoHandler } from './info'; diff --git a/src/lib/client/info/info.store.ts b/src/lib/client/info/info.store.ts new file mode 100644 index 0000000..3fb9af4 --- /dev/null +++ b/src/lib/client/info/info.store.ts @@ -0,0 +1,5 @@ +import { writable } from 'svelte/store'; + +import type { ProjectInfo } from './info.type'; + +export const infoStore = writable(); diff --git a/src/lib/client/info/info.ts b/src/lib/client/info/info.ts new file mode 100644 index 0000000..e2093a3 --- /dev/null +++ b/src/lib/client/info/info.ts @@ -0,0 +1,36 @@ +import { get } from 'svelte/store'; + +import { type Project } from '$lib/client/project'; + +import { infoStore } from './info.store'; +import type { ProjectInfo, ProjectInfoInput } from './info.type'; + +export class InfoHandler { + static reset(): void { + infoStore.set(null); + } + + constructor(private readonly core: Project) {} + + get(cacheOnly: true): ProjectInfo | null; + get(): Promise; + get(cacheOnly?: boolean): ProjectInfo | null | Promise { + if (cacheOnly) return get(infoStore); + return this.fetch(); + } + + async fetch(noCache: boolean = false): Promise { + if (!noCache) { + const cache = get(infoStore); + if (cache) return cache; + } + const res = await this.core.actions.project.getInfo(); + infoStore.set(res); + return res; + } + + async set(input: ProjectInfoInput): Promise { + await this.core.actions.project.setInfo(input); + await this.fetch(true); + } +} diff --git a/src/lib/client/info/info.type.ts b/src/lib/client/info/info.type.ts new file mode 100644 index 0000000..775aa38 --- /dev/null +++ b/src/lib/client/info/info.type.ts @@ -0,0 +1,5 @@ +import type { InfoProject, InfoProjectBody } from '$lib/server/actions/project/info.action'; + +export type ProjectInfo = InfoProject; + +export type ProjectInfoInput = InfoProjectBody; diff --git a/src/lib/client/loader/index.ts b/src/lib/client/loader/index.ts new file mode 100644 index 0000000..a172c26 --- /dev/null +++ b/src/lib/client/loader/index.ts @@ -0,0 +1,3 @@ +export { Loader } from './loader'; +export * from './types/game.type'; +export * from './types/manifest.type'; diff --git a/src/lib/client/loader/loader.ts b/src/lib/client/loader/loader.ts new file mode 100644 index 0000000..a88d42b --- /dev/null +++ b/src/lib/client/loader/loader.ts @@ -0,0 +1,84 @@ +import type { Project } from '$lib/client/project'; +import { SyncFileSystem } from '$lib/client/sync-file-system'; + +import type { RawEventEmitter } from './types/event-emitter.type'; +import type { IGameOptions } from './types/game.type'; +import type { IExtendedManifestFile, IManifest } from './types/manifest.type'; + +type MainFunction = (options: IGameOptions) => Promise; + +export class Loader { + private readonly fs: SyncFileSystem; + + constructor(private readonly core: Project) { + this.fs = new SyncFileSystem(this.core, 'build'); + } + + async build(): Promise { + await this.core.actions.loader.build(); + } + + async start(container: HTMLDivElement): Promise { + const manifest = await this.fetchManifest(); + const env = await this.fetchEnv(); + const { mainFile, files } = await this.resolveGameFiles(manifest); + const save = this.core.save.save; + + const main = await this.loadMainFile(mainFile); + + main({ + files, + env, + editor: { + save, + coreEvents: this.core.event._coreEvents as unknown as RawEventEmitter, + editorEvents: this.core.event._editorEvents as unknown as RawEventEmitter, + }, + container, + }).then(() => console.log('Game started!')); + } + + private async loadMainFile(file: string): Promise { + const res = await import(/* @vite-ignore */ file); + if (res['main']) return res['main']; + throw new Error('No main function found in the main.js file'); + } + + private fetchEnv(): Promise> { + return this.core.actions.loader.env(); + } + + private fetchManifest(): Promise { + return this.core.actions.loader.manifest(); + } + + private async resolveGameFiles( + manifest: IManifest, + ): Promise<{ mainFile: string; files: Map }> { + const files = await this.fetchFiles(manifest); + + let mainFile: string | undefined; + const resMap = new Map(); + + for (const file of files) { + if (file.gamePath === '/main.js') { + mainFile = file.localPath; + continue; + } + resMap.set(file.gamePath, file.localPath); + } + + if (!mainFile) throw new Error('No main.js file found in the manifest'); + return { mainFile, files: resMap }; + } + + private async fetchFiles(manifest: IManifest): Promise { + return await Promise.all( + manifest.files.map(async ({ path }) => { + const file = await this.fs.getFile(path); + await file.fetch(); + return { gamePath: path, localPath: await file.getUrl() }; + }), + ); + } +} diff --git a/src/lib/client/loader/types/event-emitter.type.ts b/src/lib/client/loader/types/event-emitter.type.ts new file mode 100644 index 0000000..c74d027 --- /dev/null +++ b/src/lib/client/loader/types/event-emitter.type.ts @@ -0,0 +1,3 @@ +import type { IEventEmitter } from '$lib/client/event'; + +export type RawEventEmitter = IEventEmitter>; diff --git a/src/lib/client/loader/types/game.type.ts b/src/lib/client/loader/types/game.type.ts new file mode 100644 index 0000000..c02a445 --- /dev/null +++ b/src/lib/client/loader/types/game.type.ts @@ -0,0 +1,14 @@ +import type { Save } from '@utils/types'; + +import type { RawEventEmitter } from './event-emitter.type'; + +export interface IGameOptions { + container: HTMLDivElement; + files: Map; + env: Record; + editor: { + save: Save; + coreEvents: RawEventEmitter; + editorEvents: RawEventEmitter; + }; +} diff --git a/src/lib/loader/client/types/manifest.type.ts b/src/lib/client/loader/types/manifest.type.ts similarity index 82% rename from src/lib/loader/client/types/manifest.type.ts rename to src/lib/client/loader/types/manifest.type.ts index 580f9a2..a9b59a4 100644 --- a/src/lib/loader/client/types/manifest.type.ts +++ b/src/lib/client/loader/types/manifest.type.ts @@ -1,6 +1,6 @@ export interface IManifest { version: string; - files: string[]; + files: { path: string }[]; } export interface IExtendedManifestFile { diff --git a/src/lib/client/project/index.ts b/src/lib/client/project/index.ts new file mode 100644 index 0000000..64cf9e3 --- /dev/null +++ b/src/lib/client/project/index.ts @@ -0,0 +1,3 @@ +export { Project } from './project'; +export { ProjectCache, type ProjectDataCache } from './project-loader/project-cache'; +export { ProjectLoader, useProject, getProject } from './project-loader/project-loader'; diff --git a/src/lib/client/project/package-handler.ts b/src/lib/client/project/package-handler.ts new file mode 100644 index 0000000..d3e0a01 --- /dev/null +++ b/src/lib/client/project/package-handler.ts @@ -0,0 +1,73 @@ +import type { EditorComponentManifest, EditorSystemManifest } from '@nanoforge-dev/ecs-lib'; + +import type { Project } from '$lib/client/project'; + +export class PackageHandler { + private _project: Project; + + private _componentsManifests: Map = new Map(); + private _systemsManifests: Map = new Map(); + + constructor(project: Project) { + this._project = project; + } + + async init() { + if (this._project.save.save.components.length > 0) { + this._componentsManifests = new Map( + ( + await this._project.actions.package.getComponentsManifests({ + componentPaths: this._project.save.save.components.map((c) => c.path) as [ + string, + ...string[], + ], + }) + ).map((e, index) => [this._project.save.save.components[index].name, e]), + ); + } + if (this._project.save.save.systems.length > 0) { + this._systemsManifests = new Map( + ( + await this._project.actions.package.getSystemsManifests({ + systemPaths: this._project.save.save.systems.map((s) => s.path) as [ + string, + ...string[], + ], + }) + ).map((e, index) => [this._project.save.save.systems[index].name, e]), + ); + } + } + + getComponentManifest(componentName: string): EditorComponentManifest | undefined { + return this._componentsManifests.get(componentName); + } + + getSystemManifest(systemName: string): EditorSystemManifest | undefined { + return this._systemsManifests.get(systemName); + } + + async installComponent(name: string): Promise { + const newComponent = ( + await this._project.actions.package.addComponents({ componentNames: [name] }) + )[0]; + + this._project.save.save.components.push(newComponent.save); + this._componentsManifests.set(newComponent.save.name, newComponent.manifest); + } + + async installSystem(name: string): Promise { + const newSystem = (await this._project.actions.package.addSystems({ systemNames: [name] }))[0]; + + this._project.save.save.systems.push(newSystem.save); + this._systemsManifests.set(newSystem.save.name, newSystem.manifest); + } + + addComponentManifest(componentName: string, component: EditorComponentManifest) { + this._componentsManifests.set(componentName, component); + } + + addSystemManifest(systemName: string, system: EditorSystemManifest) { + this._systemsManifests.set(systemName, system); + } +} diff --git a/src/lib/client/project/project-loader/project-cache.ts b/src/lib/client/project/project-loader/project-cache.ts new file mode 100644 index 0000000..e513379 --- /dev/null +++ b/src/lib/client/project/project-loader/project-cache.ts @@ -0,0 +1,94 @@ +import { noProjectActions } from '$lib/client/action'; +import { getConfig } from '$lib/client/config'; + +import { generateKey } from '@utils/string'; + +export interface ProjectDataCache { + id: string; + resolvable: string; + lastOpened: number; + name?: string; + imageUrl?: string; + invalid?: boolean; +} + +export class ProjectCache { + private static storageKey = 'projects'; + private static isOnline = getConfig().mode === 'online'; + + static async getProjects(): Promise { + if (this.isOnline) return ProjectCache.getOnlineProjects(); + const storedProjects = localStorage.getItem(this.storageKey); + if (storedProjects) { + return (JSON.parse(storedProjects) as ProjectDataCache[]).sort( + (a, b) => b.lastOpened - a.lastOpened, + ); + } + return []; + } + + static async getOnlineProjects(): Promise { + const projects = await noProjectActions.project.getGatewayProjects(); + return projects.map((project) => ({ + id: generateKey(10), + resolvable: project.gatewayId, + lastOpened: Date.now(), + name: project.name, + })); + } + + static async getProject(id: string): Promise { + const projects = await this.getProjects(); + const project = projects.find((project) => project.id === id); + if (project) return project; + throw new Error('Project not found'); + } + + static async addProject(project: ProjectDataCache): Promise { + if (this.isOnline) return; + const projects = await this.getProjects(); + projects.push(project); + localStorage.setItem(this.storageKey, JSON.stringify(projects)); + } + + static async removeProject(id: string): Promise { + if (this.isOnline) return; + let projects = await this.getProjects(); + projects = projects.filter((project) => project.id !== id); + localStorage.setItem(this.storageKey, JSON.stringify(projects)); + } + + static async updateProject(id: string, updatedProject: Partial): Promise { + if (this.isOnline) return; + const projects = await this.getProjects(); + const projectIndex = projects.findIndex((project) => project.id === id); + + if (projectIndex !== -1) { + projects[projectIndex] = { ...projects[projectIndex], ...updatedProject }; + localStorage.setItem(this.storageKey, JSON.stringify(projects)); + } + } + + static async invalidateProject(id: string): Promise { + return ProjectCache.updateProject(id, { invalid: true }); + } + + static async clearProjects(): Promise { + if (this.isOnline) return; + localStorage.removeItem(this.storageKey); + } + + static async addOrUpdateProject(project: ProjectDataCache): Promise { + if (this.isOnline) return; + const projects = await this.getProjects(); + const projectIndex = projects.findIndex( + (p) => p.id === project.id || p.resolvable === project.resolvable, + ); + if (projectIndex !== -1) { + projects[projectIndex] = { ...projects[projectIndex], ...project }; + } else { + projects.push(project); + } + localStorage.setItem(this.storageKey, JSON.stringify(projects)); + } +} diff --git a/src/lib/client/project/project-loader/project-loader.ts b/src/lib/client/project/project-loader/project-loader.ts new file mode 100644 index 0000000..2474e24 --- /dev/null +++ b/src/lib/client/project/project-loader/project-loader.ts @@ -0,0 +1,106 @@ +import { get, writable } from 'svelte/store'; + +import { + type ActionProject, + type CreateProjectActionInput, + noProjectActions, +} from '$lib/client/action'; +import { getConfig } from '$lib/client/config/config'; +import { Project, ProjectCache, type ProjectDataCache } from '$lib/client/project'; +import { SfsTreeCache } from '$lib/client/sync-file-system'; + +import { FileSystemManager } from '@utils-client/file-system'; + +const projectStore = writable(null); + +export class ProjectLoader { + static async create(input: CreateProjectActionInput) { + const res = await noProjectActions.project.new(input); + + return ProjectLoader.init(res); + } + + static async loadFromCacheWithTryId(cache: ProjectDataCache) { + try { + return await ProjectLoader.loadFromId(cache.id); + } catch { + /* empty */ + } + + return ProjectLoader.loadFromCache(cache); + } + + static async loadFromIdWithCacheFetching(id: string) { + try { + return await ProjectLoader.loadFromId(id); + } catch { + /* empty */ + } + + const cache = await ProjectCache.getProject(id); + + return ProjectLoader.loadFromCache(cache); + } + + static async loadFromCache(cache: ProjectDataCache) { + await ProjectCache.removeProject(cache.id); + const config = getConfig(); + const input = + config.mode === 'offline' ? { path: cache.resolvable } : { gatewayId: cache.resolvable }; + + const res = await noProjectActions.project.load(input); + + const treeCache = new SfsTreeCache(cache.id); + await treeCache.init(); + await treeCache.changeId(res.id); + + const fs = new FileSystemManager('projects'); + const dir = await fs.getDirectory(cache.id); + await dir.rename(res.id); + + return ProjectLoader.init(res); + } + + static async loadFromPath(path: string) { + const res = await noProjectActions.project.load({ path }); + + return ProjectLoader.init(res); + } + + static async loadFromId(id: string) { + const res = await noProjectActions.project.load({ id }); + + return ProjectLoader.init(res); + } + + static unload() { + projectStore.set(null); + Project.reset(); + } + + static async init(input: ActionProject): Promise { + Project.reset(); + + const project = new Project(input.id); + // @todo add a route to check if the project is valid + projectStore.set(project); + + const infos = await project.info.get(); + + await ProjectCache.addOrUpdateProject({ + id: input.id, + resolvable: input.cacheResolvable, + name: infos.name, + lastOpened: Date.now(), + }); + return project; + } +} + +export const useProject = () => { + const project = get(projectStore); + if (!project) throw new Error('Project not loaded'); + return project; +}; + +export const getProject = () => get(projectStore); diff --git a/src/lib/client/project/project.ts b/src/lib/client/project/project.ts new file mode 100644 index 0000000..e2ef54c --- /dev/null +++ b/src/lib/client/project/project.ts @@ -0,0 +1,75 @@ +import { type ActionClient, getActionClient } from '$lib/client/action'; +import { EventHandler } from '$lib/client/event'; +import { InfoHandler } from '$lib/client/info'; +import { Loader } from '$lib/client/loader'; +import { PackageHandler } from '$lib/client/project/package-handler'; +import { SaveHandler } from '$lib/client/project/save-handler'; +import { SyncFileSystem } from '$lib/client/sync-file-system'; + +export class Project { + private _info: InfoHandler | undefined; + private _actions: ActionClient | undefined; + private _fs: SyncFileSystem | undefined; + private _loader: Loader | undefined; + private _save: SaveHandler | undefined; + private _packageHandler: PackageHandler | undefined; + private _eventHandler: EventHandler | undefined; + + private _inited = false; + + static reset(): void { + InfoHandler.reset(); + } + + constructor(public id: string) { + this._save = new SaveHandler(this); + this._packageHandler = new PackageHandler(this); + } + + async init(): Promise { + await this.fs.init(); + await this.save.init(); + await this.packages.init(); + this._inited = true; + return this; + } + + isReady(): boolean { + return this._inited; + } + + get info(): InfoHandler { + if (!this._info) this._info = new InfoHandler(this); + return this._info; + } + + get actions(): ActionClient { + if (!this._actions) this._actions = getActionClient(this.id); + return this._actions; + } + + get fs(): SyncFileSystem { + if (!this._fs) this._fs = new SyncFileSystem(this, 'project'); + return this._fs; + } + + get loader(): Loader { + if (!this._loader) this._loader = new Loader(this); + return this._loader; + } + + get save(): SaveHandler { + if (!this._save) this._save = new SaveHandler(this); + return this._save; + } + + get packages(): PackageHandler { + if (!this._packageHandler) this._packageHandler = new PackageHandler(this); + return this._packageHandler; + } + + get event(): EventHandler { + if (!this._eventHandler) this._eventHandler = new EventHandler(); + return this._eventHandler; + } +} diff --git a/src/lib/client/project/save-handler.ts b/src/lib/client/project/save-handler.ts new file mode 100644 index 0000000..ada63c0 --- /dev/null +++ b/src/lib/client/project/save-handler.ts @@ -0,0 +1,58 @@ +import type { EditorComponentManifest } from '@nanoforge-dev/ecs-lib'; +import { type Writable, get, writable } from 'svelte/store'; + +import type { Project } from '$lib/client/project'; + +import type { Save, SaveComponent, SaveEntity, SaveSystem } from '@utils/types'; + +export class SaveHandler { + private _project: Project; + private _save: Writable = writable({ + libraries: [], + entities: [], + components: [], + systems: [], + }); + + constructor(project: Project) { + this._project = project; + } + + async init() { + await this.fetchFromServer(); + } + + async fetchFromServer() { + this._save.set(await this._project.actions.save.get()); + } + + get save(): Save { + return get(this._save); + } + + addComponent(component: SaveComponent) { + get(this._save).components.push(component); + } + + addEntity(entity: SaveEntity) { + get(this._save).entities.push(entity); + } + + addSystem(system: SaveSystem) { + get(this._save).systems.push(system); + } + + addComponentToEntity( + entityId: string, + componentName: string, + componentManifest: EditorComponentManifest, + ) { + const entity = get(this._save).entities.find((e) => e.id === entityId); + if (!entity) { + throw new Error('Entity not found: ' + entityId); + } + const newComp: Record = {}; + componentManifest.params.forEach((c) => (newComp[c.name] = c.default)); + entity.components[componentName] = newComp; + } +} diff --git a/src/lib/client/sync-file-system/index.ts b/src/lib/client/sync-file-system/index.ts new file mode 100644 index 0000000..4cca18a --- /dev/null +++ b/src/lib/client/sync-file-system/index.ts @@ -0,0 +1,4 @@ +export { SyncFileSystem } from './sfs'; +export { SfsDirectory, type SfsDirectoryMap } from './sfs-directory'; +export { SfsFile } from './sfs-file'; +export { SfsTreeCache } from './sfs-tree-cache'; diff --git a/src/lib/client/sync-file-system/sfs-directory.ts b/src/lib/client/sync-file-system/sfs-directory.ts new file mode 100644 index 0000000..c8a54f5 --- /dev/null +++ b/src/lib/client/sync-file-system/sfs-directory.ts @@ -0,0 +1,46 @@ +import { type SyncFileSystem } from '$lib/client/sync-file-system/sfs'; +import type { DirectoryContent } from '$lib/server/file-system/project-directory'; + +import { type FileSystemDirectory } from '@utils-client/file-system'; + +import { SfsFile } from './sfs-file'; + +export type SfsDirectoryMap = DirectoryContent; + +export class SfsDirectory { + constructor( + private readonly _handler: SyncFileSystem, + private _cache: FileSystemDirectory, + private readonly _path: string, + ) {} + + get path(): string { + return this._path; + } + + async getFile(path: string): Promise { + const fullPath = `${this._path}/${path}`; + if (await this._cache.fileExist(path)) + return new SfsFile(this._handler, await this._cache?.getFile(path, false), fullPath); + return new SfsFile(this._handler, null, fullPath); + } + + async getDirectory(path: string): Promise { + const fullPath = `${this._path}/${path}`; + return new SfsDirectory(this._handler, await this._cache.getDirectory(path, true), fullPath); + } + + async readdir(noCache: boolean = false): Promise { + let res: SfsDirectoryMap | null = null; + + if (!noCache && this._handler.treeCache) res = await this._handler.treeCache.read(this._path); + + if (res) return res; + + res = await this._handler.project.actions.fs.readdir({ path: this._path }); + + if (this._handler.treeCache) await this._handler.treeCache.write(this._path, res); + + return res; + } +} diff --git a/src/lib/client/sync-file-system/sfs-file.ts b/src/lib/client/sync-file-system/sfs-file.ts new file mode 100644 index 0000000..83ab34f --- /dev/null +++ b/src/lib/client/sync-file-system/sfs-file.ts @@ -0,0 +1,89 @@ +import type { SyncFileSystem } from '$lib/client/sync-file-system/sfs'; + +import { SESSION_PROJECT_HEADER } from '@utils/const'; + +import { type FileSystemFile } from '@utils-client/file-system'; + +export class SfsFile { + private readonly _route: string; + + constructor( + private readonly _handler: SyncFileSystem, + private _cache: FileSystemFile | null, + private readonly _path: string, + ) { + this._route = `${this._handler.route}?path=${encodeURIComponent(`${this._path}?url`)}`; + } + + get path(): string { + return this._path; + } + + async getUrl(): Promise { + await this._preRead(); + return this._cache!.getUrl(); + } + + async read(): Promise { + await this._preRead(); + return this._cache!.read(); + } + + async readJson(): Promise { + await this._preRead(); + return this._cache!.readJson(); + } + + async fetch(): Promise { + await this._preWrite(); + const res = await fetch(this._route, { + method: 'GET', + headers: { [SESSION_PROJECT_HEADER]: this._handler.project.id }, + }); + if (!res.ok || !res.body) { + throw new Error('Failed to fetch file'); + } + const stream = await this._cache!.handle.createWritable(); + await res.body.pipeTo(stream); + } + + async write(test: string): Promise { + await this._preWrite(); + await this._cache!.write(test); + await this.sync(); + } + + async writeJson(content: any): Promise { + await this._preWrite(); + await this._cache!.writeJson(content); + await this.sync(); + } + + async sync(): Promise { + if (!this._cache) return; + const file = await this._cache.getFile(); + const res = await fetch(this._route, { + body: file.stream(), + method: 'POST', + headers: { [SESSION_PROJECT_HEADER]: this._handler.project.id }, + }); + if (!res.ok) throw new Error('Failed to sync file'); + } + + async getFile(): Promise { + await this._preRead(); + return this._cache!; + } + + private async _preRead() { + if (!this._cache) { + await this.fetch(); + } + } + + private async _preWrite() { + if (!this._cache) { + this._cache = await this._handler.cache.getFile(this.path, true); + } + } +} diff --git a/src/lib/client/sync-file-system/sfs-tree-cache.ts b/src/lib/client/sync-file-system/sfs-tree-cache.ts new file mode 100644 index 0000000..a27d6dc --- /dev/null +++ b/src/lib/client/sync-file-system/sfs-tree-cache.ts @@ -0,0 +1,78 @@ +import { IndexedDB } from '@utils-client/indexed-db'; + +import { type SfsDirectoryMap } from './sfs-directory'; + +export const SFS_DB_STORE_NAME = 'fs-project-tree'; + +export class SfsTreeCache extends IndexedDB { + constructor(private readonly projectId: string) { + super(); + } + + init(): Promise { + return this.open(1, async (db) => { + db.createObjectStore(SFS_DB_STORE_NAME); + }); + } + + async changeId(newId: string): Promise { + const store = this.getStore(SFS_DB_STORE_NAME); + const data = await store.get(this.projectId); + if (!data) return; + await store.set(newId, data); + await store.delete(this.projectId); + } + + async read(path: string): Promise { + const store = this.getStore(SFS_DB_STORE_NAME); + const data = await store.get(this.projectId); + return this._extractMapFromPath(path, data ?? null); + } + + async write(path: string, data: SfsDirectoryMap): Promise { + const currentData = await this.read(path); + const store = this.getStore(SFS_DB_STORE_NAME); + const map = this._generateMapFromPath( + path, + currentData ?? { files: [], directories: {} }, + data, + ); + await store.set(this.projectId, map); + } + + private _extractMapFromPath(path: string, map: SfsDirectoryMap | null): SfsDirectoryMap | null { + const parts = path.split('/'); + let currentMap: SfsDirectoryMap | null = map; + for (const part of parts) { + if (currentMap === null) return null; + if (part in currentMap.directories) currentMap = currentMap.directories[part] ?? null; + } + return currentMap; + } + + private _generateMapFromPath( + path: string, + map: SfsDirectoryMap, + data: SfsDirectoryMap, + ): SfsDirectoryMap | null { + if (!path) return data; + const parts = path.split('/'); + return this._generateMapFromPathRec(parts, map, data); + } + + private _generateMapFromPathRec( + parts: string[], + map: SfsDirectoryMap, + data: SfsDirectoryMap, + ): SfsDirectoryMap | null { + if (parts.length === 0) return data; + const [part, ...rest] = parts; + + map.directories[part] = this._generateMapFromPathRec( + rest, + map.directories[part] ?? { files: [], directories: {} }, + data, + ); + return map; + } +} diff --git a/src/lib/client/sync-file-system/sfs.ts b/src/lib/client/sync-file-system/sfs.ts new file mode 100644 index 0000000..4a325e6 --- /dev/null +++ b/src/lib/client/sync-file-system/sfs.ts @@ -0,0 +1,44 @@ +import type { Project } from '$lib/client/project'; + +import { FileSystemManager } from '@utils-client/file-system'; + +import { SfsDirectory } from './sfs-directory'; +import { SfsFile } from './sfs-file'; +import { SfsTreeCache } from './sfs-tree-cache'; + +export type SyncFileSystemPart = 'build' | 'project'; + +const FS_ROUTE: Record = { + build: '/fs/build', + project: '/fs/project', +}; + +export class SyncFileSystem { + public readonly project: Project; + public readonly route: string; + public readonly cache: FileSystemManager; + public readonly treeCache: SfsTreeCache | undefined; + + constructor(project: Project, part: SyncFileSystemPart) { + this.project = project; + this.route = FS_ROUTE[part]; + this.cache = new FileSystemManager(`projects/${project.id}/${part}`); + if (part === 'project') this.treeCache = new SfsTreeCache(project.id); + } + + async init(): Promise { + await this.treeCache?.init(); + } + + async getFile(path: string): Promise { + return new SfsFile( + this, + (await this.cache.fileExist(path)) ? await this.cache.getFile(path, false) : null, + path, + ); + } + + async getDirectory(path?: string): Promise { + return new SfsDirectory(this, await this.cache.getDirectory(path, true), path ?? ''); + } +} diff --git a/src/lib/client/utils/error.ts b/src/lib/client/utils/error.ts new file mode 100644 index 0000000..5402375 --- /dev/null +++ b/src/lib/client/utils/error.ts @@ -0,0 +1,29 @@ +import { Exception } from '@utils/exception'; +import type { MaybePromise } from '@utils/types'; + +import { toastError } from '@utils-client/toasts'; + +export const handleError = (error: unknown, context?: string) => { + const message = `Failed to ${context ?? 'execute'}`; + if (error instanceof Exception) { + console.error(`${message} (${error.error} - ${error.status}): ${error.message}`); + toastError(message, error.message); + return; + } + console.error(`${message}: ${error}`); + toastError(message, `${error}`); +}; + +export const runSafe = async ( + context: string, + cb: () => Promise, + fallback?: () => MaybePromise, +): Promise => { + try { + return await cb(); + } catch (error) { + handleError(error, context); + } + fallback?.(); + return null; +}; diff --git a/src/lib/utils-client/file-system/file-system-directory.ts b/src/lib/client/utils/file-system/file-system-directory.ts similarity index 87% rename from src/lib/utils-client/file-system/file-system-directory.ts rename to src/lib/client/utils/file-system/file-system-directory.ts index 7a6ee6e..725225b 100644 --- a/src/lib/utils-client/file-system/file-system-directory.ts +++ b/src/lib/client/utils/file-system/file-system-directory.ts @@ -13,7 +13,7 @@ export class FileSystemDirectory { this.handle = handle; } - getName(): string { + get name(): string { return this.handle.name; } @@ -21,6 +21,15 @@ export class FileSystemDirectory { return new FileSystemFile(await this.handle.getFileHandle(name, { create })); } + async fileExist(name: string): Promise { + try { + await this.handle.getFileHandle(name, { create: false }); + return true; + } catch { + return false; + } + } + async getDirectory(name: string, create = true): Promise { return new FileSystemDirectory(await this.handle.getDirectoryHandle(name, { create })); } @@ -63,4 +72,8 @@ export class FileSystemDirectory { await this.removeChild(name); } } + + async rename(name: string): Promise { + await (this.handle as any).move(name); + } } diff --git a/src/lib/client/utils/file-system/file-system-file.ts b/src/lib/client/utils/file-system/file-system-file.ts new file mode 100644 index 0000000..5806181 --- /dev/null +++ b/src/lib/client/utils/file-system/file-system-file.ts @@ -0,0 +1,151 @@ +const FILE_TYPES = { + aac: 'audio/aac', + abw: 'application/x-abiword', + apng: 'image/apng', + arc: 'application/x-freearc', + avi: 'video/x-msvideo', + avif: 'image/avif', + azw: 'application/vnd.amazon.ebook', + bin: 'application/octet-stream', + bmp: 'image/bmp', + bz: 'application/x-bzip', + bz2: 'application/x-bzip2', + cda: 'application/x-cdf', + cjs: 'text/javascript', + csh: 'application/x-csh', + css: 'text/css', + csv: 'text/csv', + doc: 'application/msword', + docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + eot: 'application/vnd.ms-fontobject', + epub: 'application/epub+zip', + gz: 'application/gzip', + gif: 'image/gif', + htm: 'text/html', + html: 'text/html', + ico: 'image/vnd.microsoft.icon', + ics: 'text/calendar', + jar: 'application/java-archive', + jpeg: 'image/jpeg', + jpg: 'image/jpeg', + js: 'application/javascript', + json: 'application/json', + jsonld: 'application/ld+json', + md: 'text/markdown', + mid: 'audio/midi', + midi: 'audio/midi', + mjs: 'text/javascript', + mp3: 'audio/mpeg', + mp4: 'video/mp4', + mpeg: 'video/mpeg', + mpkg: 'application/vnd.apple.installer+xml', + odp: 'application/vnd.oasis.opendocument.presentation', + ods: 'application/vnd.oasis.opendocument.spreadsheet', + odt: 'application/vnd.oasis.opendocument.text', + oga: 'audio/ogg', + ogv: 'video/ogg', + ogx: 'application/ogg', + opus: 'audio/ogg', + otf: 'font/otf', + png: 'image/png', + pdf: 'application/pdf', + php: 'application/x-httpd-php', + ppt: 'application/vnd.ms-powerpoint', + pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + rar: 'application/vnd.rar', + rtf: 'application/rtf', + sh: 'application/x-sh', + svg: 'image/svg+xml', + swf: 'application/x-shockwave-flash', + tar: 'application/x-tar', + tif: 'image/tiff', + tiff: 'image/tiff', + ts: 'text/plain', + ttf: 'font/ttf', + txt: 'text/plain', + vsd: 'application/vnd.visio', + wasm: 'application/wasm', + wav: 'audio/x-wav', + weba: 'audio/webm', + webm: 'video/webm', + webmanifest: 'application/manifest+json', + webp: 'image/webp', + wgsl: 'text/wgsl', + woff: 'font/woff', + woff2: 'font/woff2', + xhtml: 'application/xhtml+xml', + xls: 'application/vnd.ms-excel', + xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + xml: 'application/xml', + xul: 'application/vnd.mozilla.xul+xml', + zip: 'application/zip', + '3gp': 'video/3gpp', + '3g2': 'video/3gpp2', + '7z': 'application/x-7z-compressed', +}; + +const URL_CACHE = new Map(); + +export class FileSystemFile { + readonly handle: FileSystemFileHandle; + + constructor(handle: FileSystemFileHandle) { + this.handle = handle; + } + + get name(): string { + return this.handle.name; + } + + getFile(): Promise { + return this.handle.getFile(); + } + + async isSameFile(file: FileSystemFile): Promise { + return await this.handle.isSameEntry(file.handle); + } + + async read(): Promise { + const file = await this.handle.getFile(); + return file.text(); + } + + async readJson(): Promise { + const raw = await this.read(); + return JSON.parse(raw) as T; + } + + async write(text: string): Promise { + const writable = await this.handle.createWritable(); + await writable.write(text); + await writable.close(); + } + + async writeBinary(base64: string): Promise { + const binary = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)); + const writable = await this.handle.createWritable(); + await writable.write(binary); + await writable.close(); + } + + async writeJson(content: any): Promise { + const raw = JSON.stringify(content); + return this.write(raw); + } + + async getUrl(): Promise { + if (URL_CACHE.has(this.handle.name)) URL.revokeObjectURL(URL_CACHE.get(this.handle.name)!); + const file = await this.handle.getFile(); + const blob = new Blob([await file.arrayBuffer()], { type: this._resolveFileType(file.name) }); + const url = URL.createObjectURL(blob); + URL_CACHE.set(this.handle.name, url); + return url; + } + + private _resolveFileType(name: string): string { + const extension = name.split('.').pop(); + const type = FILE_TYPES[extension as keyof typeof FILE_TYPES]; + if (type) return type; + return 'text/plain'; + } +} diff --git a/src/lib/utils-client/file-system/file-system-handler.ts b/src/lib/client/utils/file-system/file-system-handler.ts similarity index 100% rename from src/lib/utils-client/file-system/file-system-handler.ts rename to src/lib/client/utils/file-system/file-system-handler.ts diff --git a/src/lib/utils-client/file-system/file-system-manager.ts b/src/lib/client/utils/file-system/file-system-manager.ts similarity index 100% rename from src/lib/utils-client/file-system/file-system-manager.ts rename to src/lib/client/utils/file-system/file-system-manager.ts diff --git a/src/lib/utils-client/file-system/index.ts b/src/lib/client/utils/file-system/index.ts similarity index 100% rename from src/lib/utils-client/file-system/index.ts rename to src/lib/client/utils/file-system/index.ts diff --git a/src/lib/client/utils/indexed-db/idb-object.ts b/src/lib/client/utils/indexed-db/idb-object.ts new file mode 100644 index 0000000..436274e --- /dev/null +++ b/src/lib/client/utils/indexed-db/idb-object.ts @@ -0,0 +1,35 @@ +export class IndexedDBObject { + private readonly _store: IDBObjectStore; + + constructor(store: IDBObjectStore) { + this._store = store; + } + + get store(): IDBObjectStore { + return this._store; + } + + get(key: string): Promise { + return new Promise((resolve, reject) => { + const request = this._store.get(key); + request.onsuccess = () => resolve((request.result as T) ?? null); + request.onerror = () => reject(request.error); + }); + } + + set(key: string, data: T): Promise { + return new Promise((resolve, reject) => { + const request = this._store.put(data, key); + request.onsuccess = () => resolve(); + request.onerror = () => reject(request.error); + }); + } + + delete(key: string): Promise { + return new Promise((resolve, reject) => { + const request = this._store.delete(key); + request.onsuccess = () => resolve(); + request.onerror = () => reject(request.error); + }); + } +} diff --git a/src/lib/client/utils/indexed-db/idb.ts b/src/lib/client/utils/indexed-db/idb.ts new file mode 100644 index 0000000..634111b --- /dev/null +++ b/src/lib/client/utils/indexed-db/idb.ts @@ -0,0 +1,69 @@ +import { IndexedDBObject } from './idb-object'; + +const DB_NAME = 'nanoforge'; + +export class IndexedDB { + private _db: IDBDatabase | undefined; + + protected constructor() {} + + protected get db(): IDBDatabase { + if (!this._db) { + throw new Error('Database is not open'); + } + return this._db; + } + + protected async open( + version?: number, + upgrade?: (db: IDBDatabase) => Promise, + ): Promise { + const window = (await import('@utils-client/window')).default; + if (!window.indexedDB) { + throw new Error("Your browser doesn't support a stable version of IndexedDB."); + } + const request = window.indexedDB.open(DB_NAME, version ?? 1); + + [this._db] = await Promise.all([ + new Promise((resolve, reject) => { + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + }), + new Promise | undefined>((resolve) => { + request.onupgradeneeded = () => { + upgrade?.(request.result); + }; + // * I don't know how to do it :/ + setTimeout(resolve, 500); + }), + ]); + } + + protected close() { + this._db?.close(); + } + + protected createStore(name: string, keyPath?: string): void { + this._assertDB(); + + this._db!.createObjectStore(name, { keyPath }); + } + + protected getStore(name: string) { + this._assertDB(); + + return new IndexedDBObject(this._db!.transaction(name, 'readwrite').objectStore(name)); + } + + protected deleteStore(name: string) { + this._assertDB(); + + this._db!.deleteObjectStore(name); + } + + private _assertDB() { + if (!this._db) { + throw new Error('Database is not open'); + } + } +} diff --git a/src/lib/client/utils/indexed-db/index.ts b/src/lib/client/utils/indexed-db/index.ts new file mode 100644 index 0000000..b6dc134 --- /dev/null +++ b/src/lib/client/utils/indexed-db/index.ts @@ -0,0 +1 @@ +export { IndexedDB } from './idb'; diff --git a/src/lib/utils-client/local-file-system/project-file-system.ts b/src/lib/client/utils/local-file-system/project-file-system.ts similarity index 100% rename from src/lib/utils-client/local-file-system/project-file-system.ts rename to src/lib/client/utils/local-file-system/project-file-system.ts diff --git a/src/lib/components/Utils/LocalStorage/persistedWritable.ts b/src/lib/client/utils/store.ts similarity index 100% rename from src/lib/components/Utils/LocalStorage/persistedWritable.ts rename to src/lib/client/utils/store.ts diff --git a/src/lib/client/utils/toasts.ts b/src/lib/client/utils/toasts.ts new file mode 100644 index 0000000..42f35fe --- /dev/null +++ b/src/lib/client/utils/toasts.ts @@ -0,0 +1,8 @@ +import { toast } from 'svelte-sonner'; + +export const toastError = (message: string, description?: string) => + toast.error(message, { + description, + position: 'top-right', + style: 'background: oklch(var(--destructive)); color: oklch(var(--destructive-foreground));', + }); diff --git a/src/lib/client/utils/window.ts b/src/lib/client/utils/window.ts new file mode 100644 index 0000000..76f1ace --- /dev/null +++ b/src/lib/client/utils/window.ts @@ -0,0 +1 @@ +export default window; diff --git a/src/lib/components/Entity/types.ts b/src/lib/components/Entity/types.ts deleted file mode 100644 index 79d7c19..0000000 --- a/src/lib/components/Entity/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface RegistryComponentManifest { - name: string; - type: 'component' | 'system'; - description: string; - tags: string[]; - _file: string; -} diff --git a/src/lib/components/Menu/MenuBar.svelte b/src/lib/components/Menu/MenuBar.svelte index 77e98b4..fa023b3 100644 --- a/src/lib/components/Menu/MenuBar.svelte +++ b/src/lib/components/Menu/MenuBar.svelte @@ -35,9 +35,7 @@ /> Export - goto(resolve('/load-project'))} - >Exit + goto(resolve('/'))}>Exit Undo diff --git a/src/lib/components/ProjectLoader/CreateProject.svelte b/src/lib/components/ProjectLoader/CreateProject.svelte deleted file mode 100644 index 97adcef..0000000 --- a/src/lib/components/ProjectLoader/CreateProject.svelte +++ /dev/null @@ -1,191 +0,0 @@ - - - -{#if projectLoading !== null} - newProject()} - /> -{/if} diff --git a/src/lib/components/ProjectLoader/LoadProject.svelte b/src/lib/components/ProjectLoader/LoadProject.svelte deleted file mode 100644 index e58c4a9..0000000 --- a/src/lib/components/ProjectLoader/LoadProject.svelte +++ /dev/null @@ -1,81 +0,0 @@ - - - diff --git a/src/lib/components/Tabs/MainTab/MainTab.svelte b/src/lib/components/Tabs/MainTab/MainTab.svelte index d38b6c7..76631f9 100644 --- a/src/lib/components/Tabs/MainTab/MainTab.svelte +++ b/src/lib/components/Tabs/MainTab/MainTab.svelte @@ -40,5 +40,5 @@
- +
diff --git a/src/lib/components/Tabs/store.ts b/src/lib/components/Tabs/store.ts index 0e40a73..b4fbc47 100644 --- a/src/lib/components/Tabs/store.ts +++ b/src/lib/components/Tabs/store.ts @@ -1,6 +1,6 @@ import { get } from 'svelte/store'; -import { persistedWritable } from '$lib/components/Utils/LocalStorage/persistedWritable'; +import { persistedWritable } from '@utils-client/store'; import type { TabInstance, TabsState } from './types'; diff --git a/src/lib/components/Tabs/types.ts b/src/lib/components/Tabs/types.ts index 81c9ff8..7e79694 100644 --- a/src/lib/components/Tabs/types.ts +++ b/src/lib/components/Tabs/types.ts @@ -2,7 +2,7 @@ import type { Component } from 'svelte'; import type { FileSystemFile } from '@utils-client/file-system'; -export type TabTypeId = 'main' | 'ts' | '3d' | 'song'; +export type TabTypeId = 'main' | 'ts' | '3d' | 'song' | 'img' | 'unknown'; export interface Tab { id: TabTypeId; diff --git a/src/lib/components/Utils/LocalStorage/ProjectCache.ts b/src/lib/components/Utils/LocalStorage/ProjectCache.ts deleted file mode 100644 index cf33d0b..0000000 --- a/src/lib/components/Utils/LocalStorage/ProjectCache.ts +++ /dev/null @@ -1,45 +0,0 @@ -export interface ProjectDataCache { - name: string; - path: string; - imageUrl: string; -} - -class ProjectCache { - private static storageKey = 'projects'; - - static getProjects(): Array { - const storedProjects = localStorage.getItem(this.storageKey); - if (storedProjects) { - return JSON.parse(storedProjects); - } - return []; - } - - static addProject(project: ProjectDataCache) { - const projects = this.getProjects(); - projects.push(project); - localStorage.setItem(this.storageKey, JSON.stringify(projects)); - } - - static removeProject(projectName: string) { - let projects = this.getProjects(); - projects = projects.filter((project) => project.name !== projectName); - localStorage.setItem(this.storageKey, JSON.stringify(projects)); - } - - static updateProject(updatedProject: ProjectDataCache) { - const projects = this.getProjects(); - const projectIndex = projects.findIndex((project) => project.name === updatedProject.name); - - if (projectIndex !== -1) { - projects[projectIndex] = updatedProject; - localStorage.setItem(this.storageKey, JSON.stringify(projects)); - } - } - - static clearProjects() { - localStorage.removeItem(this.storageKey); - } -} - -export default ProjectCache; diff --git a/src/lib/components/Utils/api/api.ts b/src/lib/components/Utils/api/api.ts deleted file mode 100644 index 222ba3c..0000000 --- a/src/lib/components/Utils/api/api.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LocalAPI } from '$lib/components/Utils/api/local-api'; -import { NanoforgeApi } from '$lib/components/Utils/api/nanoforge-api'; - -export const localApi = new LocalAPI(); -export const nanoforgeApi = new NanoforgeApi(); diff --git a/src/lib/components/Utils/api/local-api.ts b/src/lib/components/Utils/api/local-api.ts deleted file mode 100644 index c856ecd..0000000 --- a/src/lib/components/Utils/api/local-api.ts +++ /dev/null @@ -1,260 +0,0 @@ -import type { EditorComponentManifest } from '@nanoforge-dev/ecs-lib'; - -import { deserialize } from '$app/forms'; - -import { type DirectoryRec, ProjectApi } from '$lib/components/Utils/api/project-api'; -import { env, save } from '$lib/components/Widget/EditorGame/game.svelte'; -import type { IManifest } from '$lib/loader/client/types/manifest.type'; -import type { Save } from '$lib/loader/client/types/save.type'; - -import { FileSystemDirectory } from '@utils-client/file-system'; -import { projectFileSystem } from '@utils-client/local-file-system/project-file-system'; - -export class LocalAPI extends ProjectApi { - async createProject(formData: FormData): Promise { - const resp = await fetch('/cli?/new', { - method: 'POST', - body: JSON.stringify(Object.fromEntries(formData.entries())), - }); - const result = deserialize(await resp.text()); - if (result.type !== 'success') { - if (result.type === 'failure' && result.data) throw new Error(result.data.errorMsg as string); - throw new Error('Failed to load remote project'); - } - } - - async loadProject(formData: FormData): Promise { - const loadResp = await fetch('/load-project?/loadProject', { - method: 'POST', - body: JSON.stringify({ projectPath: formData.get('projectPath') }), - }); - const loadResult = deserialize(await loadResp.text()); - if (loadResult.type !== 'success') { - if (loadResult.type === 'failure' && loadResult.data) - throw new Error(loadResult.data.errorMsg as string); - throw new Error('Failed to load remote project'); - } - } - async buildProject(): Promise { - await this._generateProject(); - const resp = await fetch('/cli?/build', { - method: 'POST', - body: JSON.stringify({}), - }); - const result = deserialize(await resp.text()); - if (result.type !== 'success') { - if (result.type === 'failure' && result.data) throw new Error(result.data.errorMsg as string); - throw new Error('Failed to start project'); - } - } - - async addComponent(componentName: string): Promise { - const resp = await fetch('/cli?/addComponent', { - method: 'POST', - body: JSON.stringify({ - componentName, - }), - }); - const result = deserialize(await resp.text()); - if (result.type !== 'success') { - if (result.type === 'failure' && result.data) throw new Error(result.data.errorMsg as string); - throw new Error('Failed to start project'); - } - } - - async fetchSave(side: 'client' | 'server'): Promise { - const res = await fetch(`/game-loader?/getSave`, { - method: 'POST', - body: JSON.stringify({ side }), - }); - - const saveResult = deserialize(await res.text()); - if (saveResult.type !== 'success' || !saveResult.data) { - if (saveResult.type === 'failure' && saveResult.data) - throw new Error(saveResult.data.errorMsg as string); - throw new Error('Failed to read remote directory'); - } - save.set(saveResult.data.save as Save); - } - - async updateSave(save: Save, side: 'client' | 'server'): Promise { - const res = await fetch(`/game-loader?/updateSave`, { - method: 'POST', - body: JSON.stringify({ save, side }), - }); - - const saveResult = deserialize(await res.text()); - if (saveResult.type !== 'success' || !saveResult.data) { - if (saveResult.type === 'failure' && saveResult.data) - throw new Error(saveResult.data.errorMsg as string); - throw new Error('Failed to update save'); - } - } - - async fetchEnv(side: 'client' | 'server'): Promise { - const res = await fetch(`/game-loader?/getEnv`, { - method: 'POST', - body: JSON.stringify({ side }), - }); - - const envResult = deserialize(await res.text()); - if (envResult.type !== 'success' || !envResult.data) { - if (envResult.type === 'failure' && envResult.data) - throw new Error(envResult.data.errorMsg as string); - throw new Error('Failed to read remote directory'); - } - env.set(envResult.data.env as Record); - } - - async getComponentManifest( - componentPath: string, - side: 'client' | 'server', - ): Promise { - const res = await fetch(`/game-loader?/getComponentManifest`, { - method: 'POST', - body: JSON.stringify({ side, componentPath }), - }); - const manifestResult = deserialize(await res.text()); - if (manifestResult.type !== 'success' || !manifestResult.data) { - if (manifestResult.type === 'failure' && manifestResult.data) - throw new Error(manifestResult.data.errorMsg as string); - throw new Error('Failed to read remote directory'); - } - return manifestResult.data.manifest as EditorComponentManifest; - } - - async getGameLoadManifest(side: 'client' | 'server'): Promise { - const res = await fetch(`/game-loader?/getManifest`, { - method: 'POST', - body: JSON.stringify({ side }), - }); - const manifestResult = deserialize(await res.text()); - if (manifestResult.type !== 'success' || !manifestResult.data) { - if (manifestResult.type === 'failure' && manifestResult.data) - throw new Error(manifestResult.data.errorMsg as string); - throw new Error('Failed to read remote directory'); - } - return manifestResult.data.manifest as IManifest; - } - - async getGameBuildFile( - filePath: string, - encoding: string, - side: 'client' | 'server', - ): Promise { - const res = await fetch('/game-loader?/getBuildFile', { - method: 'POST', - body: JSON.stringify({ - side, - filePath, - encoding, - }), - }); - const fileResult = deserialize(await res.text()); - if (fileResult.type !== 'success' || !fileResult.data) { - if (fileResult.type === 'failure' && fileResult.data) { - throw Error(fileResult.data.errorMsg as string); - } - throw Error('Failed to read remote directory'); - } - return fileResult.data.fileContent as string; - } - - async _generateProject(): Promise { - const resp = await fetch('/cli?/generate', { - method: 'POST', - body: JSON.stringify({}), - }); - const result = deserialize(await resp.text()); - if (result.type !== 'success') { - if (result.type === 'failure' && result.data) throw new Error(result.data.errorMsg as string); - throw new Error('Failed to stop project'); - } - } - - async uploadFiles(): Promise { - await this._uploadDirectoryRec(await projectFileSystem.getDirectory('/'), []); - } - - async downloadFiles(): Promise[]> { - const readDirResp = await fetch('/fs?/readDirRec', { - method: 'POST', - body: JSON.stringify({ dirPath: '/' }), - }); - - const readDirResult = deserialize(await readDirResp.text()); - - if (readDirResult.type !== 'success' || !readDirResult.data) { - if (readDirResult.type === 'failure' && readDirResult.data) - throw new Error(readDirResult.data.errorMsg as string); - throw new Error('Failed to read remote directory'); - } - - await projectFileSystem.clear(); - return this._downloadDirectoryRec(readDirResult.data.dirContent as DirectoryRec); - } - - private async _uploadDirectoryRec(directory: FileSystemDirectory, path: string[]): Promise { - const children = await directory.getChildren(); - - for (const [name, handle] of children) { - const childPath = [...path, name]; - - if (handle instanceof FileSystemDirectory) { - await this._uploadDirectoryRec(handle, childPath); - } else { - const content = await handle.read(); - - const formData = new FormData(); - formData.append('filePath', childPath.join('/')); - formData.append('fileContent', content); - - await fetch('/fs?/writeFile', { - method: 'POST', - body: JSON.stringify({ - filePath: formData.get('filePath'), - fileContent: formData.get('fileContent'), - }), - }); - } - } - } - - private async _downloadDirectoryRec( - dir: DirectoryRec, - currentPath: string = '', - ): Promise[]> { - const promises: Promise[] = []; - - for (const file of dir.files) { - const filePath = '/' + currentPath + file; - const filePromise = fetch('/fs?/readFile', { - method: 'POST', - body: JSON.stringify({ filePath: filePath }), - }).then(async (fileRes) => { - const fileResult = deserialize(await fileRes.text()); - if (fileResult.type === 'success' && fileResult.data) { - const file = await projectFileSystem.getFile(filePath, true); - await file.write(fileResult.data.fileContent as string); - } - }); - promises.push(filePromise); - } - - for (const [dirName, children] of Object.entries(dir.directories)) { - await projectFileSystem.getDirectory(currentPath + dirName, true); - if (dirName !== 'node_modules') { - const dirPromise: Promise = this._downloadDirectoryRec( - children, - currentPath + dirName + '/', - ).then((subDirPromises) => { - promises.push(...subDirPromises); - return; - }); - - promises.push(dirPromise); - } - } - return promises; - } -} diff --git a/src/lib/components/Utils/api/nanoforge-api.ts b/src/lib/components/Utils/api/nanoforge-api.ts deleted file mode 100644 index 60924b9..0000000 --- a/src/lib/components/Utils/api/nanoforge-api.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { RegistryComponentManifest } from '$lib/components/Entity/types'; - -export class NanoforgeApi { - async getRegistryComponentManifest(componentName: string): Promise { - const res = await fetch('https://api.nanoforge.eu/registry/' + componentName, { - method: 'GET', - }); - return (await res.json()) as RegistryComponentManifest; - } -} diff --git a/src/lib/components/Utils/api/project-api.ts b/src/lib/components/Utils/api/project-api.ts deleted file mode 100644 index 5ab09f0..0000000 --- a/src/lib/components/Utils/api/project-api.ts +++ /dev/null @@ -1,14 +0,0 @@ -export interface DirectoryRec { - files: string[]; - directories: Record; -} - -export abstract class ProjectApi { - abstract createProject(formData: FormData): Promise; - abstract loadProject(formData: FormData): Promise; - - abstract buildProject(): Promise; - - abstract uploadFiles(): Promise; - abstract downloadFiles(): Promise[]>; -} diff --git a/src/lib/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte b/src/lib/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte deleted file mode 100644 index eeb93b1..0000000 --- a/src/lib/components/Widget/ContentBrowser/ContentBrowserItemCard.svelte +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/src/lib/components/Widget/ContentBrowser/ContentBrowserListFolder.svelte b/src/lib/components/Widget/ContentBrowser/ContentBrowserListFolder.svelte deleted file mode 100644 index b5a06c4..0000000 --- a/src/lib/components/Widget/ContentBrowser/ContentBrowserListFolder.svelte +++ /dev/null @@ -1,83 +0,0 @@ - - - - -{#if open && childFolders.size > 0} - {#each childFolders as [childName, handle] (childName)} - - {/each} -{/if} diff --git a/src/lib/components/Widget/ContentBrowser/ContentBrowserWidget.svelte b/src/lib/components/Widget/ContentBrowser/ContentBrowserWidget.svelte deleted file mode 100644 index 2281366..0000000 --- a/src/lib/components/Widget/ContentBrowser/ContentBrowserWidget.svelte +++ /dev/null @@ -1,90 +0,0 @@ - - -
-
- {#if contents && rootDirectoryHandle} - {#each rootDirectoryChildren.entries().filter(isDirectory) as [name, handle] (name)} - - {/each} - {/if} -
-
-
- - {#each foldersParent as folder, index (folder)} - {#if index < foldersParent.length} - - {/if} - - {/each} -
-
-
- {#if contents} - {#each contents as [name, handle] (name)} - - {/each} - {/if} -
-
-
-
diff --git a/src/lib/components/Widget/ContentBrowser/store.ts b/src/lib/components/Widget/ContentBrowser/store.ts deleted file mode 100644 index 2477dd4..0000000 --- a/src/lib/components/Widget/ContentBrowser/store.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { type Writable, writable } from 'svelte/store'; - -import type { FileSystemDirectory } from '@utils-client/file-system'; - -export const CurrentDirectory: Writable = writable(); diff --git a/src/lib/components/Widget/ContentBrowser/types.ts b/src/lib/components/Widget/ContentBrowser/types.ts deleted file mode 100644 index d5404db..0000000 --- a/src/lib/components/Widget/ContentBrowser/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -export interface ContentBrowserItem { - id: string; - name: string; - type: string; - children?: ContentBrowserItem[]; -} - -export interface ContentBrowserItemType { - type: string; - suffix: string; - icon: string; -} - -export const contentBrowserItemType: ContentBrowserItemType[] = [ - { type: 'folder', suffix: '/', icon: 'i-material-icon-theme-folder-interceptor' }, - { - type: 'ts', - suffix: '.ts', - icon: 'i-material-icon-theme-typescript', - }, - { type: 'fbx', suffix: '.fbx', icon: 'i-material-icon-theme-3d' }, - { type: 'song', suffix: '.mp3', icon: 'i-material-icon-theme-lyric' }, - { type: 'json', suffix: '.json', icon: 'i-material-icon-theme-json' }, - { type: 'git', suffix: '.gitignore', icon: 'i-material-icon-theme-git' }, -]; diff --git a/src/lib/components/Widget/ECSTree/ECSTree.svelte b/src/lib/components/Widget/ECSTree/ECSTree.svelte index cdced49..6fa5e02 100644 --- a/src/lib/components/Widget/ECSTree/ECSTree.svelte +++ b/src/lib/components/Widget/ECSTree/ECSTree.svelte @@ -1,40 +1,30 @@
- {#if !loading} -
- - -
- Entities -
- {#each $save.entities as entity (entity.id)} +
+ + +
+ Entities +
+ {#if save.save} + {#each save.save.entities as entity (entity.id)} {/each} -
- {/if} + {/if} +
diff --git a/src/lib/components/Widget/ECSTree/EntityItem.svelte b/src/lib/components/Widget/ECSTree/EntityItem.svelte index bc9d38c..d34400f 100644 --- a/src/lib/components/Widget/ECSTree/EntityItem.svelte +++ b/src/lib/components/Widget/ECSTree/EntityItem.svelte @@ -1,6 +1,6 @@ @@ -104,14 +100,14 @@
- +