diff --git a/app/game-frontend/index.html b/app/game-frontend/index.html
new file mode 100644
index 0000000..626cb68
--- /dev/null
+++ b/app/game-frontend/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Sammo HiDCHe - Game
+
+
+
+
+
+
diff --git a/app/game-frontend/package.json b/app/game-frontend/package.json
index e149ab5..e67a4fa 100644
--- a/app/game-frontend/package.json
+++ b/app/game-frontend/package.json
@@ -4,18 +4,37 @@
"version": "0.0.0",
"type": "module",
"scripts": {
- "build": "tsc -p tsconfig.build.json",
- "dev": "node -e \"console.log('dev not configured')\"",
+ "dev": "vite",
+ "build": "vue-tsc && vite build",
+ "preview": "vite preview",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"test": "node -e \"console.log('test not configured')\"",
- "typecheck": "tsc -b"
+ "typecheck": "vue-tsc --noEmit"
},
"dependencies": {
- "@vueuse/core": "^13.9.0",
+ "@sammo-ts/common": "workspace:*",
+ "@sammo-ts/game-api": "workspace:*",
+ "@sammo-ts/logic": "workspace:*",
+ "@trpc/client": "^11.8.1",
+ "@trpc/server": "^11.8.1",
+ "@vueuse/core": "^14.1.0",
"date-fns": "^4.1.0",
"es-toolkit": "^1.43.0",
"mitt": "^3.0.1",
- "zod": "^4.3.4"
+ "pinia": "^3.0.4",
+ "vue": "^3.5.26",
+ "vue-router": "^4.6.4",
+ "zod": "^4.3.5"
+ },
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.1.18",
+ "@vitejs/plugin-vue": "^6.0.3",
+ "autoprefixer": "^10.4.23",
+ "postcss": "^8.5.6",
+ "tailwindcss": "^4.1.18",
+ "typescript": "^5.9.3",
+ "vite": "^7.3.1",
+ "vue-tsc": "^3.2.2"
}
}
diff --git a/app/game-frontend/src/App.vue b/app/game-frontend/src/App.vue
new file mode 100644
index 0000000..27ba3b6
--- /dev/null
+++ b/app/game-frontend/src/App.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/app/game-frontend/src/assets/main.css b/app/game-frontend/src/assets/main.css
new file mode 100644
index 0000000..ee1697a
--- /dev/null
+++ b/app/game-frontend/src/assets/main.css
@@ -0,0 +1,12 @@
+@import 'tailwindcss';
+
+@theme {
+ --color-sammo-ink: #101010;
+ --color-sammo-parchment: #e8ddc4;
+ --color-sammo-gold: #c9a45a;
+}
+
+body {
+ @apply bg-sammo-ink text-sammo-parchment;
+ font-family: 'Galmuri11', 'Noto Serif KR', 'Malgun Gothic', serif;
+}
diff --git a/app/game-frontend/src/env.d.ts b/app/game-frontend/src/env.d.ts
new file mode 100644
index 0000000..f089962
--- /dev/null
+++ b/app/game-frontend/src/env.d.ts
@@ -0,0 +1,7 @@
+///
+
+declare module '*.vue' {
+ import type { DefineComponent } from 'vue';
+ const component: DefineComponent, Record, Record>;
+ export default component;
+}
diff --git a/app/game-frontend/src/main.ts b/app/game-frontend/src/main.ts
index cb0ff5c..2e552ae 100644
--- a/app/game-frontend/src/main.ts
+++ b/app/game-frontend/src/main.ts
@@ -1 +1,12 @@
-export {};
+import { createApp } from 'vue';
+import { createPinia } from 'pinia';
+import App from './App.vue';
+import router from './router';
+import './assets/main.css';
+
+const app = createApp(App);
+
+app.use(createPinia());
+app.use(router);
+
+app.mount('#app');
diff --git a/app/game-frontend/src/router/index.ts b/app/game-frontend/src/router/index.ts
new file mode 100644
index 0000000..1fd3c8e
--- /dev/null
+++ b/app/game-frontend/src/router/index.ts
@@ -0,0 +1,65 @@
+import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router';
+import MainView from '../views/MainView.vue';
+import PublicView from '../views/PublicView.vue';
+import LoginView from '../views/LoginView.vue';
+import NotFoundView from '../views/NotFoundView.vue';
+import { useSessionStore } from '../stores/session';
+
+const routes = [
+ {
+ path: '/',
+ name: 'home',
+ component: MainView,
+ meta: {
+ requiresAuth: true,
+ requiresGeneral: true,
+ },
+ },
+ {
+ path: '/public',
+ name: 'public',
+ component: PublicView,
+ },
+ {
+ path: '/login',
+ name: 'login',
+ component: LoginView,
+ meta: {
+ publicOnly: true,
+ },
+ },
+ {
+ path: '/:pathMatch(.*)*',
+ name: 'not-found',
+ component: NotFoundView,
+ },
+] satisfies RouteRecordRaw[];
+
+const router = createRouter({
+ history: createWebHistory(import.meta.env.BASE_URL),
+ routes,
+});
+
+router.beforeEach((to) => {
+ const session = useSessionStore();
+
+ if (!session.isReady) {
+ return true;
+ }
+
+ if (to.meta.publicOnly && session.isAuthed) {
+ return { name: 'home' };
+ }
+
+ if (to.meta.requiresAuth && !session.isAuthed) {
+ return { name: 'public' };
+ }
+
+ if (to.meta.requiresGeneral && !session.hasGeneral) {
+ return { name: 'public' };
+ }
+
+ return true;
+});
+
+export default router;
diff --git a/app/game-frontend/src/router/meta.d.ts b/app/game-frontend/src/router/meta.d.ts
new file mode 100644
index 0000000..8802019
--- /dev/null
+++ b/app/game-frontend/src/router/meta.d.ts
@@ -0,0 +1,9 @@
+import 'vue-router';
+
+declare module 'vue-router' {
+ interface RouteMeta {
+ requiresAuth?: boolean;
+ requiresGeneral?: boolean;
+ publicOnly?: boolean;
+ }
+}
diff --git a/app/game-frontend/src/stores/session.ts b/app/game-frontend/src/stores/session.ts
new file mode 100644
index 0000000..3c34b30
--- /dev/null
+++ b/app/game-frontend/src/stores/session.ts
@@ -0,0 +1,23 @@
+import { defineStore } from 'pinia';
+
+export type SessionStatus = 'unknown' | 'public' | 'authed' | 'general';
+
+interface SessionState {
+ status: SessionStatus;
+}
+
+export const useSessionStore = defineStore('session', {
+ state: (): SessionState => ({
+ status: 'unknown',
+ }),
+ getters: {
+ isReady: (state) => state.status !== 'unknown',
+ isAuthed: (state) => state.status === 'authed' || state.status === 'general',
+ hasGeneral: (state) => state.status === 'general',
+ },
+ actions: {
+ setStatus(status: SessionStatus) {
+ this.status = status;
+ },
+ },
+});
diff --git a/app/game-frontend/src/utils/trpc.ts b/app/game-frontend/src/utils/trpc.ts
new file mode 100644
index 0000000..494a6ce
--- /dev/null
+++ b/app/game-frontend/src/utils/trpc.ts
@@ -0,0 +1,22 @@
+import { createTRPCProxyClient, httpBatchLink } from '@trpc/client';
+import type { AppRouter } from '@sammo-ts/game-api';
+
+const getSessionToken = (): string | null => {
+ if (typeof window === 'undefined') {
+ return null;
+ }
+
+ return window.localStorage.getItem('sammo-session-token');
+};
+
+export const trpc = createTRPCProxyClient({
+ links: [
+ httpBatchLink({
+ url: '/api/trpc',
+ headers() {
+ const token = getSessionToken();
+ return token ? { 'x-session-token': token } : {};
+ },
+ }),
+ ],
+});
diff --git a/app/game-frontend/src/views/LoginView.vue b/app/game-frontend/src/views/LoginView.vue
new file mode 100644
index 0000000..23937d6
--- /dev/null
+++ b/app/game-frontend/src/views/LoginView.vue
@@ -0,0 +1,8 @@
+
+
+
+
+ Login
+ Authentication entry point.
+
+
diff --git a/app/game-frontend/src/views/MainView.vue b/app/game-frontend/src/views/MainView.vue
new file mode 100644
index 0000000..f3c9105
--- /dev/null
+++ b/app/game-frontend/src/views/MainView.vue
@@ -0,0 +1,10 @@
+
+
+
+
+ Game Home
+
+ Authenticated main screen placeholder.
+
+
+
diff --git a/app/game-frontend/src/views/NotFoundView.vue b/app/game-frontend/src/views/NotFoundView.vue
new file mode 100644
index 0000000..c94c9a2
--- /dev/null
+++ b/app/game-frontend/src/views/NotFoundView.vue
@@ -0,0 +1,10 @@
+
+
+
+
+ Not Found
+
+ The requested page does not exist.
+
+
+
diff --git a/app/game-frontend/src/views/PublicView.vue b/app/game-frontend/src/views/PublicView.vue
new file mode 100644
index 0000000..26ec321
--- /dev/null
+++ b/app/game-frontend/src/views/PublicView.vue
@@ -0,0 +1,10 @@
+
+
+
+
+ Public Lobby
+
+ Public cached map and world trend entry point.
+
+
+
diff --git a/app/game-frontend/tsconfig.json b/app/game-frontend/tsconfig.json
index 02c4202..d06457d 100644
--- a/app/game-frontend/tsconfig.json
+++ b/app/game-frontend/tsconfig.json
@@ -1,9 +1,46 @@
{
- "extends": "../../tsconfig.paths.json",
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
- "outDir": "dist",
- "composite": true,
- "lib": ["ES2022", "DOM", "DOM.Iterable"]
+ "target": "ESNext",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "preserve",
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"],
+ "@sammo-ts/common": ["../../packages/common/src/index.ts"],
+ "@sammo-ts/common/*": ["../../packages/common/src/*"],
+ "@sammo-ts/infra": ["../../packages/infra/src/index.ts"],
+ "@sammo-ts/infra/*": ["../../packages/infra/src/*"],
+ "@sammo-ts/logic": ["../../packages/logic/src/index.ts"],
+ "@sammo-ts/logic/*": ["../../packages/logic/src/*"],
+ "@sammo-ts/game-engine": ["../../app/game-engine/src/index.ts"],
+ "@sammo-ts/game-engine/*": ["../../app/game-engine/src/*"],
+ "@sammo-ts/game-api": ["../../app/game-api/src/index.ts"],
+ "@sammo-ts/game-api/*": ["../../app/game-api/src/*"]
+ }
},
- "include": ["src", "test", "*.ts"]
+ "include": [
+ "src/**/*.ts",
+ "src/**/*.d.ts",
+ "src/**/*.tsx",
+ "src/**/*.vue",
+ "test/**/*.ts"
+ ],
+ "references": [
+ {
+ "path": "./tsconfig.node.json"
+ }
+ ]
}
diff --git a/app/game-frontend/tsconfig.node.json b/app/game-frontend/tsconfig.node.json
new file mode 100644
index 0000000..6675f46
--- /dev/null
+++ b/app/game-frontend/tsconfig.node.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true,
+ "strict": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/app/game-frontend/vite.config.ts b/app/game-frontend/vite.config.ts
new file mode 100644
index 0000000..b1a3573
--- /dev/null
+++ b/app/game-frontend/vite.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
+import tailwindcss from '@tailwindcss/vite';
+import path from 'path';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [vue(), tailwindcss()],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, './src'),
+ },
+ },
+ server: {
+ port: 3001,
+ },
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9c788ef..1a69e05 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -40,7 +40,7 @@ importers:
version: 3.7.4
tsdown:
specifier: ^0.18.4
- version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))
+ version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3))
turbo:
specifier: ^2.7.2
version: 2.7.2
@@ -89,10 +89,10 @@ importers:
devDependencies:
tsdown:
specifier: ^0.18.4
- version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))
+ version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3))
vite-tsconfig-paths:
specifier: ^6.0.3
- version: 6.0.3(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
+ version: 6.0.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
vitest:
specifier: ^4.0.16
version: 4.0.16(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
@@ -120,19 +120,34 @@ importers:
devDependencies:
tsdown:
specifier: ^0.18.4
- version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))
+ version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3))
vite-tsconfig-paths:
specifier: ^6.0.3
- version: 6.0.3(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
+ version: 6.0.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
vitest:
specifier: ^4.0.16
version: 4.0.16(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
app/game-frontend:
dependencies:
+ '@sammo-ts/common':
+ specifier: workspace:*
+ version: link:../../packages/common
+ '@sammo-ts/game-api':
+ specifier: workspace:*
+ version: link:../game-api
+ '@sammo-ts/logic':
+ specifier: workspace:*
+ version: link:../../packages/logic
+ '@trpc/client':
+ specifier: ^11.8.1
+ version: 11.8.1(@trpc/server@11.8.1(typescript@5.9.3))(typescript@5.9.3)
+ '@trpc/server':
+ specifier: ^11.8.1
+ version: 11.8.1(typescript@5.9.3)
'@vueuse/core':
- specifier: ^13.9.0
- version: 13.9.0(vue@3.5.26(typescript@5.9.3))
+ specifier: ^14.1.0
+ version: 14.1.0(vue@3.5.26(typescript@5.9.3))
date-fns:
specifier: ^4.1.0
version: 4.1.0
@@ -142,9 +157,43 @@ importers:
mitt:
specifier: ^3.0.1
version: 3.0.1
+ pinia:
+ specifier: ^3.0.4
+ version: 3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3))
+ vue:
+ specifier: ^3.5.26
+ version: 3.5.26(typescript@5.9.3)
+ vue-router:
+ specifier: ^4.6.4
+ version: 4.6.4(vue@3.5.26(typescript@5.9.3))
zod:
- specifier: ^4.3.4
- version: 4.3.4
+ specifier: ^4.3.5
+ version: 4.3.5
+ devDependencies:
+ '@tailwindcss/vite':
+ specifier: ^4.1.18
+ version: 4.1.18(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
+ '@vitejs/plugin-vue':
+ specifier: ^6.0.3
+ version: 6.0.3(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.9.3))
+ autoprefixer:
+ specifier: ^10.4.23
+ version: 10.4.23(postcss@8.5.6)
+ postcss:
+ specifier: ^8.5.6
+ version: 8.5.6
+ tailwindcss:
+ specifier: ^4.1.18
+ version: 4.1.18
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+ vite:
+ specifier: ^7.3.1
+ version: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
+ vue-tsc:
+ specifier: ^3.2.2
+ version: 3.2.2(typescript@5.9.3)
app/gateway-api:
dependencies:
@@ -187,10 +236,10 @@ importers:
devDependencies:
tsdown:
specifier: ^0.18.4
- version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))
+ version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3))
vite-tsconfig-paths:
specifier: ^6.0.3
- version: 6.0.3(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
+ version: 6.0.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
vitest:
specifier: ^4.0.16
version: 4.0.16(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
@@ -276,7 +325,7 @@ importers:
devDependencies:
tsdown:
specifier: ^0.18.4
- version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))
+ version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3))
vitest:
specifier: ^4.0.16
version: 4.0.16(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
@@ -313,7 +362,7 @@ importers:
version: 7.2.0(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
tsdown:
specifier: ^0.18.4
- version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))
+ version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3))
packages/logic:
dependencies:
@@ -332,10 +381,10 @@ importers:
devDependencies:
tsdown:
specifier: ^0.18.4
- version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))
+ version: 0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3))
vite-tsconfig-paths:
specifier: ^6.0.3
- version: 6.0.3(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
+ version: 6.0.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
vitest:
specifier: ^4.0.16
version: 4.0.16(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
@@ -361,10 +410,19 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/parser@7.28.6':
+ resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
'@babel/types@7.28.5':
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.28.6':
+ resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
+ engines: {node: '>=6.9.0'}
+
'@chevrotain/cst-dts-gen@10.5.0':
resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==}
@@ -948,111 +1006,236 @@ packages:
cpu: [arm]
os: [android]
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==}
+ cpu: [arm]
+ os: [android]
+
'@rollup/rollup-android-arm64@4.54.0':
resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==}
cpu: [arm64]
os: [android]
+ '@rollup/rollup-android-arm64@4.55.1':
+ resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==}
+ cpu: [arm64]
+ os: [android]
+
'@rollup/rollup-darwin-arm64@4.54.0':
resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==}
cpu: [arm64]
os: [darwin]
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==}
+ cpu: [arm64]
+ os: [darwin]
+
'@rollup/rollup-darwin-x64@4.54.0':
resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==}
cpu: [x64]
os: [darwin]
+ '@rollup/rollup-darwin-x64@4.55.1':
+ resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==}
+ cpu: [x64]
+ os: [darwin]
+
'@rollup/rollup-freebsd-arm64@4.54.0':
resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==}
cpu: [arm64]
os: [freebsd]
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==}
+ cpu: [arm64]
+ os: [freebsd]
+
'@rollup/rollup-freebsd-x64@4.54.0':
resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==}
cpu: [x64]
os: [freebsd]
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==}
+ cpu: [x64]
+ os: [freebsd]
+
'@rollup/rollup-linux-arm-gnueabihf@4.54.0':
resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==}
cpu: [arm]
os: [linux]
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==}
+ cpu: [arm]
+ os: [linux]
+
'@rollup/rollup-linux-arm-musleabihf@4.54.0':
resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==}
cpu: [arm]
os: [linux]
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==}
+ cpu: [arm]
+ os: [linux]
+
'@rollup/rollup-linux-arm64-gnu@4.54.0':
resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==}
cpu: [arm64]
os: [linux]
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==}
+ cpu: [arm64]
+ os: [linux]
+
'@rollup/rollup-linux-arm64-musl@4.54.0':
resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==}
cpu: [arm64]
os: [linux]
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==}
+ cpu: [arm64]
+ os: [linux]
+
'@rollup/rollup-linux-loong64-gnu@4.54.0':
resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==}
cpu: [loong64]
os: [linux]
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==}
+ cpu: [loong64]
+ os: [linux]
+
'@rollup/rollup-linux-ppc64-gnu@4.54.0':
resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==}
cpu: [ppc64]
os: [linux]
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==}
+ cpu: [ppc64]
+ os: [linux]
+
'@rollup/rollup-linux-riscv64-gnu@4.54.0':
resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==}
cpu: [riscv64]
os: [linux]
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==}
+ cpu: [riscv64]
+ os: [linux]
+
'@rollup/rollup-linux-riscv64-musl@4.54.0':
resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==}
cpu: [riscv64]
os: [linux]
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==}
+ cpu: [riscv64]
+ os: [linux]
+
'@rollup/rollup-linux-s390x-gnu@4.54.0':
resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==}
cpu: [s390x]
os: [linux]
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==}
+ cpu: [s390x]
+ os: [linux]
+
'@rollup/rollup-linux-x64-gnu@4.54.0':
resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==}
cpu: [x64]
os: [linux]
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==}
+ cpu: [x64]
+ os: [linux]
+
'@rollup/rollup-linux-x64-musl@4.54.0':
resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==}
cpu: [x64]
os: [linux]
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==}
+ cpu: [x64]
+ os: [openbsd]
+
'@rollup/rollup-openharmony-arm64@4.54.0':
resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==}
cpu: [arm64]
os: [openharmony]
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==}
+ cpu: [arm64]
+ os: [openharmony]
+
'@rollup/rollup-win32-arm64-msvc@4.54.0':
resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==}
cpu: [arm64]
os: [win32]
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==}
+ cpu: [arm64]
+ os: [win32]
+
'@rollup/rollup-win32-ia32-msvc@4.54.0':
resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==}
cpu: [ia32]
os: [win32]
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==}
+ cpu: [ia32]
+ os: [win32]
+
'@rollup/rollup-win32-x64-gnu@4.54.0':
resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==}
cpu: [x64]
os: [win32]
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==}
+ cpu: [x64]
+ os: [win32]
+
'@rollup/rollup-win32-x64-msvc@4.54.0':
resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==}
cpu: [x64]
os: [win32]
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==}
+ cpu: [x64]
+ os: [win32]
+
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
@@ -1318,6 +1501,9 @@ packages:
'@vue/language-core@3.2.1':
resolution: {integrity: sha512-g6oSenpnGMtpxHGAwKuu7HJJkNZpemK/zg3vZzZbJ6cnnXq1ssxuNrXSsAHYM3NvH8p4IkTw+NLmuxyeYz4r8A==}
+ '@vue/language-core@3.2.2':
+ resolution: {integrity: sha512-5DAuhxsxBN9kbriklh3Q5AMaJhyOCNiQJvCskN9/30XOpdLiqZU9Q+WvjArP17ubdGEyZtBzlIeG5nIjEbNOrQ==}
+
'@vue/reactivity@3.5.26':
resolution: {integrity: sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==}
@@ -1340,14 +1526,27 @@ packages:
peerDependencies:
vue: ^3.5.0
+ '@vueuse/core@14.1.0':
+ resolution: {integrity: sha512-rgBinKs07hAYyPF834mDTigH7BtPqvZ3Pryuzt1SD/lg5wEcWqvwzXXYGEDb2/cP0Sj5zSvHl3WkmMELr5kfWw==}
+ peerDependencies:
+ vue: ^3.5.0
+
'@vueuse/metadata@13.9.0':
resolution: {integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==}
+ '@vueuse/metadata@14.1.0':
+ resolution: {integrity: sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==}
+
'@vueuse/shared@13.9.0':
resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==}
peerDependencies:
vue: ^3.5.0
+ '@vueuse/shared@14.1.0':
+ resolution: {integrity: sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==}
+ peerDependencies:
+ vue: ^3.5.0
+
abstract-logging@2.0.1:
resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
@@ -1446,8 +1645,8 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- baseline-browser-mapping@2.9.11:
- resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
+ baseline-browser-mapping@2.9.14:
+ resolution: {integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==}
hasBin: true
basic-ftp@5.1.0:
@@ -1509,8 +1708,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001762:
- resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==}
+ caniuse-lite@1.0.30001764:
+ resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==}
chai@6.2.2:
resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
@@ -2664,6 +2863,11 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ rollup@4.55.1:
+ resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
run-series@1.1.9:
resolution: {integrity: sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==}
@@ -2804,7 +3008,6 @@ packages:
tailwindcss@4.1.18:
resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
- hasBin: true
tapable@2.3.0:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
@@ -3032,6 +3235,46 @@ packages:
yaml:
optional: true
+ vite@7.3.1:
+ resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
vitest@4.0.16:
resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
@@ -3090,6 +3333,12 @@ packages:
peerDependencies:
typescript: '>=5.0.0'
+ vue-tsc@3.2.2:
+ resolution: {integrity: sha512-r9YSia/VgGwmbbfC06hDdAatH634XJ9nVl6Zrnz1iK4ucp8Wu78kawplXnIDa3MSu1XdQQePTHLXYwPDWn+nyQ==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.0.0'
+
vue@3.5.26:
resolution: {integrity: sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==}
peerDependencies:
@@ -3145,6 +3394,9 @@ packages:
zod@4.3.4:
resolution: {integrity: sha512-Zw/uYiiyF6pUT1qmKbZziChgNPRu+ZRneAsMUDU6IwmXdWt5JwcUfy2bvLOCUtz5UniaN/Zx5aFttZYbYc7O/A==}
+ zod@4.3.5:
+ resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==}
+
snapshots:
'@babel/generator@7.28.5':
@@ -3163,11 +3415,20 @@ snapshots:
dependencies:
'@babel/types': 7.28.5
+ '@babel/parser@7.28.6':
+ dependencies:
+ '@babel/types': 7.28.6
+
'@babel/types@7.28.5':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
+ '@babel/types@7.28.6':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
'@chevrotain/cst-dts-gen@10.5.0':
dependencies:
'@chevrotain/gast': 10.5.0
@@ -3670,69 +3931,144 @@ snapshots:
'@rollup/rollup-android-arm-eabi@4.54.0':
optional: true
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ optional: true
+
'@rollup/rollup-android-arm64@4.54.0':
optional: true
+ '@rollup/rollup-android-arm64@4.55.1':
+ optional: true
+
'@rollup/rollup-darwin-arm64@4.54.0':
optional: true
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ optional: true
+
'@rollup/rollup-darwin-x64@4.54.0':
optional: true
+ '@rollup/rollup-darwin-x64@4.55.1':
+ optional: true
+
'@rollup/rollup-freebsd-arm64@4.54.0':
optional: true
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ optional: true
+
'@rollup/rollup-freebsd-x64@4.54.0':
optional: true
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-arm-gnueabihf@4.54.0':
optional: true
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-arm-musleabihf@4.54.0':
optional: true
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-arm64-gnu@4.54.0':
optional: true
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-arm64-musl@4.54.0':
optional: true
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-loong64-gnu@4.54.0':
optional: true
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-ppc64-gnu@4.54.0':
optional: true
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-riscv64-gnu@4.54.0':
optional: true
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-riscv64-musl@4.54.0':
optional: true
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-s390x-gnu@4.54.0':
optional: true
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-x64-gnu@4.54.0':
optional: true
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ optional: true
+
'@rollup/rollup-linux-x64-musl@4.54.0':
optional: true
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ optional: true
+
'@rollup/rollup-openharmony-arm64@4.54.0':
optional: true
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ optional: true
+
'@rollup/rollup-win32-arm64-msvc@4.54.0':
optional: true
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ optional: true
+
'@rollup/rollup-win32-ia32-msvc@4.54.0':
optional: true
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ optional: true
+
'@rollup/rollup-win32-x64-gnu@4.54.0':
optional: true
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ optional: true
+
'@rollup/rollup-win32-x64-msvc@4.54.0':
optional: true
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ optional: true
+
'@standard-schema/spec@1.1.0': {}
'@tailwindcss/node@4.1.18':
@@ -3803,6 +4139,13 @@ snapshots:
tailwindcss: 4.1.18
vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
+ '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))':
+ dependencies:
+ '@tailwindcss/node': 4.1.18
+ '@tailwindcss/oxide': 4.1.18
+ tailwindcss: 4.1.18
+ vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
+
'@tootallnate/quickjs-emscripten@0.23.0': {}
'@trpc/client@11.8.1(@trpc/server@11.8.1(typescript@5.9.3))(typescript@5.9.3)':
@@ -3943,6 +4286,12 @@ snapshots:
vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
vue: 3.5.26(typescript@5.9.3)
+ '@vitejs/plugin-vue@6.0.3(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.9.3))':
+ dependencies:
+ '@rolldown/pluginutils': 1.0.0-beta.53
+ vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
+ vue: 3.5.26(typescript@5.9.3)
+
'@vitest/expect@4.0.16':
dependencies:
'@standard-schema/spec': 1.1.0
@@ -3952,13 +4301,13 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.0.3
- '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))':
+ '@vitest/mocker@4.0.16(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))':
dependencies:
'@vitest/spy': 4.0.16
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
'@vitest/pretty-format@4.0.16':
dependencies:
@@ -3996,7 +4345,7 @@ snapshots:
'@vue/compiler-core@3.5.26':
dependencies:
- '@babel/parser': 7.28.5
+ '@babel/parser': 7.28.6
'@vue/shared': 3.5.26
entities: 7.0.0
estree-walker: 2.0.2
@@ -4009,7 +4358,7 @@ snapshots:
'@vue/compiler-sfc@3.5.26':
dependencies:
- '@babel/parser': 7.28.5
+ '@babel/parser': 7.28.6
'@vue/compiler-core': 3.5.26
'@vue/compiler-dom': 3.5.26
'@vue/compiler-ssr': 3.5.26
@@ -4054,6 +4403,16 @@ snapshots:
path-browserify: 1.0.1
picomatch: 4.0.3
+ '@vue/language-core@3.2.2':
+ dependencies:
+ '@volar/language-core': 2.4.27
+ '@vue/compiler-dom': 3.5.26
+ '@vue/shared': 3.5.26
+ alien-signals: 3.1.2
+ muggle-string: 0.4.1
+ path-browserify: 1.0.1
+ picomatch: 4.0.3
+
'@vue/reactivity@3.5.26':
dependencies:
'@vue/shared': 3.5.26
@@ -4085,12 +4444,25 @@ snapshots:
'@vueuse/shared': 13.9.0(vue@3.5.26(typescript@5.9.3))
vue: 3.5.26(typescript@5.9.3)
+ '@vueuse/core@14.1.0(vue@3.5.26(typescript@5.9.3))':
+ dependencies:
+ '@types/web-bluetooth': 0.0.21
+ '@vueuse/metadata': 14.1.0
+ '@vueuse/shared': 14.1.0(vue@3.5.26(typescript@5.9.3))
+ vue: 3.5.26(typescript@5.9.3)
+
'@vueuse/metadata@13.9.0': {}
+ '@vueuse/metadata@14.1.0': {}
+
'@vueuse/shared@13.9.0(vue@3.5.26(typescript@5.9.3))':
dependencies:
vue: 3.5.26(typescript@5.9.3)
+ '@vueuse/shared@14.1.0(vue@3.5.26(typescript@5.9.3))':
+ dependencies:
+ vue: 3.5.26(typescript@5.9.3)
+
abstract-logging@2.0.1: {}
acorn-jsx@5.3.2(acorn@8.15.0):
@@ -4164,7 +4536,7 @@ snapshots:
autoprefixer@10.4.23(postcss@8.5.6):
dependencies:
browserslist: 4.28.1
- caniuse-lite: 1.0.30001762
+ caniuse-lite: 1.0.30001764
fraction.js: 5.3.4
picocolors: 1.1.1
postcss: 8.5.6
@@ -4179,7 +4551,7 @@ snapshots:
balanced-match@1.0.2: {}
- baseline-browser-mapping@2.9.11: {}
+ baseline-browser-mapping@2.9.14: {}
basic-ftp@5.1.0: {}
@@ -4210,8 +4582,8 @@ snapshots:
browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.9.11
- caniuse-lite: 1.0.30001762
+ baseline-browser-mapping: 2.9.14
+ caniuse-lite: 1.0.30001764
electron-to-chromium: 1.5.267
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
@@ -4237,7 +4609,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001762: {}
+ caniuse-lite@1.0.30001764: {}
chai@6.2.2: {}
@@ -5346,7 +5718,7 @@ snapshots:
rfdc@1.4.1: {}
- rolldown-plugin-dts@0.20.0(rolldown@1.0.0-beta.57)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3)):
+ rolldown-plugin-dts@0.20.0(rolldown@1.0.0-beta.57)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)):
dependencies:
'@babel/generator': 7.28.5
'@babel/parser': 7.28.5
@@ -5359,7 +5731,7 @@ snapshots:
rolldown: 1.0.0-beta.57
optionalDependencies:
typescript: 5.9.3
- vue-tsc: 3.2.1(typescript@5.9.3)
+ vue-tsc: 3.2.2(typescript@5.9.3)
transitivePeerDependencies:
- oxc-resolver
@@ -5429,6 +5801,37 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.54.0
fsevents: 2.3.3
+ rollup@4.55.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.55.1
+ '@rollup/rollup-android-arm64': 4.55.1
+ '@rollup/rollup-darwin-arm64': 4.55.1
+ '@rollup/rollup-darwin-x64': 4.55.1
+ '@rollup/rollup-freebsd-arm64': 4.55.1
+ '@rollup/rollup-freebsd-x64': 4.55.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.55.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.55.1
+ '@rollup/rollup-linux-arm64-gnu': 4.55.1
+ '@rollup/rollup-linux-arm64-musl': 4.55.1
+ '@rollup/rollup-linux-loong64-gnu': 4.55.1
+ '@rollup/rollup-linux-loong64-musl': 4.55.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.55.1
+ '@rollup/rollup-linux-ppc64-musl': 4.55.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.55.1
+ '@rollup/rollup-linux-riscv64-musl': 4.55.1
+ '@rollup/rollup-linux-s390x-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-musl': 4.55.1
+ '@rollup/rollup-openbsd-x64': 4.55.1
+ '@rollup/rollup-openharmony-arm64': 4.55.1
+ '@rollup/rollup-win32-arm64-msvc': 4.55.1
+ '@rollup/rollup-win32-ia32-msvc': 4.55.1
+ '@rollup/rollup-win32-x64-gnu': 4.55.1
+ '@rollup/rollup-win32-x64-msvc': 4.55.1
+ fsevents: 2.3.3
+
run-series@1.1.9: {}
safe-buffer@5.2.1: {}
@@ -5567,7 +5970,7 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
- tsdown@0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3)):
+ tsdown@0.18.4(synckit@0.11.11)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)):
dependencies:
ansis: 4.2.0
cac: 6.7.14
@@ -5578,7 +5981,7 @@ snapshots:
obug: 2.1.1
picomatch: 4.0.3
rolldown: 1.0.0-beta.57
- rolldown-plugin-dts: 0.20.0(rolldown@1.0.0-beta.57)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))
+ rolldown-plugin-dts: 0.20.0(rolldown@1.0.0-beta.57)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3))
semver: 7.7.3
tinyexec: 1.0.2
tinyglobby: 0.2.15
@@ -5680,13 +6083,13 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
- vite-tsconfig-paths@6.0.3(typescript@5.9.3)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)):
+ vite-tsconfig-paths@6.0.3(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)):
dependencies:
debug: 4.4.3
globrex: 0.1.2
tsconfck: 3.1.6(typescript@5.9.3)
optionalDependencies:
- vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
transitivePeerDependencies:
- supports-color
- typescript
@@ -5705,10 +6108,24 @@ snapshots:
jiti: 2.6.1
lightningcss: 1.30.2
+ vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2):
+ dependencies:
+ esbuild: 0.27.2
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.55.1
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.0.3
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+
vitest@4.0.16(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2):
dependencies:
'@vitest/expect': 4.0.16
- '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
+ '@vitest/mocker': 4.0.16(vite@7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
'@vitest/pretty-format': 4.0.16
'@vitest/runner': 4.0.16
'@vitest/snapshot': 4.0.16
@@ -5725,7 +6142,7 @@ snapshots:
tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 25.0.3
@@ -5774,6 +6191,12 @@ snapshots:
'@vue/language-core': 3.2.1
typescript: 5.9.3
+ vue-tsc@3.2.2(typescript@5.9.3):
+ dependencies:
+ '@volar/typescript': 2.4.27
+ '@vue/language-core': 3.2.2
+ typescript: 5.9.3
+
vue@3.5.26(typescript@5.9.3):
dependencies:
'@vue/compiler-dom': 3.5.26
@@ -5810,3 +6233,5 @@ snapshots:
grammex: 3.1.12
zod@4.3.4: {}
+
+ zod@4.3.5: {}