diff --git a/apps/desktop/README.md b/apps/desktop/README.md index e69de29b..39054d19 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -0,0 +1,45 @@ +# SyntaxSenpai Desktop + +Primary SyntaxSenpai app: Electron main/preload, Vue 3 renderer, Pinia state, UnoCSS styling, keychain-backed provider keys, agent tools, mobile QR pairing, plugins, custom waifus, Live2D avatar support, and strict-mode shell gating. + +## Run + +From the repository root: + +```bash +pnpm install +pnpm dev:desktop +``` + +Package-local commands: + +```bash +pnpm --filter syntax-senpai-desktop run dev +pnpm --filter syntax-senpai-desktop run build +pnpm --filter syntax-senpai-desktop run start +pnpm --filter syntax-senpai-desktop run typecheck +pnpm --filter syntax-senpai-desktop run test:unit +pnpm --filter syntax-senpai-desktop run lint +``` + +## Important Paths + +| Path | Purpose | +|---|---| +| `src/main/` | Electron main process, IPC, tray, shortcuts, crash logging | +| `src/preload/` | Safe bridge exposed to the renderer | +| `src/renderer/src/App.vue` | Main desktop UI | +| `src/renderer/src/stores/chat.ts` | Chat orchestration, provider calls, tools, prompt assembly | +| `src/renderer/src/agent-tools.ts` | Renderer-side tool definitions | +| `src/main/ipc/` | IPC handlers for tools, settings, storage, plugins, waifus, strict mode, WeChat, and runtime helpers | +| `scripts/verify-live2d-render.mjs` | Live2D smoke verification script | +| `src/main/agent/executor.ts` | Allowlist-based strict-mode executor and shared shell helpers | + +## Provider Keys + +Configure keys in **Settings -> AI**. Desktop stores keys through the OS keychain path; do not use committed `.env` files for normal app usage. + +## Notes + +- `pnpm dev:desktop` is the normal entry point from the repository root. +- The renderer owns the tool list; main-process IPC just executes the requested action safely. diff --git a/apps/desktop/src/renderer/src/components/ChatBubble.vue b/apps/desktop/src/renderer/src/components/ChatBubble.vue index 736b222f..9b317b5a 100644 --- a/apps/desktop/src/renderer/src/components/ChatBubble.vue +++ b/apps/desktop/src/renderer/src/components/ChatBubble.vue @@ -24,6 +24,10 @@ type RenderedPart = const copied = ref(false) const containerRef = ref() +function sanitizeForBubble(value: string): string { + return String(value || '').replace(/\[emotion:\s*[a-z]+\]/gi, '').replace(/\s{2,}/g, ' ').trim() +} + function escapeHtml(value: string): string { return value .replace(/&/g, '&') @@ -164,7 +168,7 @@ function renderMarkdown(value: string): string { async function handleCopy() { try { - const text = props.content || containerRef.value?.innerText || '' + const text = displayContent.value || containerRef.value?.innerText || '' if (!text) return await navigator.clipboard.writeText(text) copied.value = true @@ -175,6 +179,7 @@ async function handleCopy() { } const hasCard = computed(() => renderedParts.value.some((p) => p.kind === 'card')) +const displayContent = computed(() => sanitizeForBubble(props.content ?? '')) const bubbleClasses = computed(() => [ 'relative px-4 py-3 rounded-xl', @@ -217,7 +222,7 @@ function splitOnCardFences(raw: string): RenderedPart[] { } const renderedParts = computed(() => { - const raw = props.content || '' + const raw = displayContent.value || '' if (!raw) return [] if (!raw.includes(CARD_FENCE)) { return [{ kind: 'html', html: renderMarkdown(raw) }] diff --git a/apps/desktop/src/renderer/src/components/Live2DAvatar.vue b/apps/desktop/src/renderer/src/components/Live2DAvatar.vue index ceef4247..564dbabe 100644 --- a/apps/desktop/src/renderer/src/components/Live2DAvatar.vue +++ b/apps/desktop/src/renderer/src/components/Live2DAvatar.vue @@ -9,6 +9,8 @@ type Live2DModelType = any // pixi-live2d-display types vary by cubism version const props = withDefaults(defineProps<{ /** Absolute file:// path (or URL) to the .model3.json / .model.json */ modelPath: string + /** Optional directory upload FileList generated from . */ + folderFiles?: File[] | FileList | null /** WaifuExpression name; component maps it to a motion group */ expression?: string /** Bump to force reapplying an unchanged expression value. */ @@ -71,6 +73,8 @@ const DEFAULT_MOTION_MAP: Record = { embarrassed: 'TapBody', determined: 'TapBody', sad: 'FlickHead', + angry: 'FlickHead', + surprised: 'TapBody', } // Expression name → Cubism named-expression ID map. @@ -78,12 +82,14 @@ const DEFAULT_MOTION_MAP: Record = { // We try these IDs first before falling back to raw parameter blending. const EXPRESSION_NAME_MAP: Record = { happy: ['Happy', 'Smile', 'Joy', 'fun'], - excited: ['Excited', 'Surprised', 'Energetic', 'fun'], - thinking: ['Thinking', 'Ponder', 'Worry', 'angry'], - confused: ['Confused', 'Puzzle', 'Question', 'angry'], + excited: ['Excited', 'Energetic', 'fun'], + thinking: ['Thinking', 'Ponder', 'Worry'], + confused: ['Confused', 'Puzzle', 'Question'], embarrassed: ['Embarrassed', 'Shy', 'Blush', 'sad'], determined: ['Determined', 'Serious', 'Confident', 'angry', 'fun'], sad: ['Sad', 'Cry', 'Sorrow', 'sad'], + angry: ['Angry', 'Mad', 'angry'], + surprised: ['Surprised', 'Surprise', 'Amazed', 'excited'], neutral: ['Neutral', 'Default', 'Idle', 'base'], } @@ -159,6 +165,24 @@ const EXPRESSION_PARAMS: Record = { { id: ['ParamBrowLAngle', 'PARAM_BROW_L_ANGLE'], value: 0.3 }, { id: ['ParamBrowRAngle', 'PARAM_BROW_R_ANGLE'], value: -0.3 }, ], + angry: [ + { id: ['ParamMouthForm', 'PARAM_MOUTH_FORM'], value: -0.2 }, + { id: ['ParamMouthOpenY', 'PARAM_MOUTH_OPEN_Y'], value: 0.2 }, + { id: ['ParamEyeLOpen', 'PARAM_EYE_L_OPEN'], value: 0.42 }, + { id: ['ParamEyeROpen', 'PARAM_EYE_R_OPEN'], value: 0.42 }, + { id: ['ParamBrowLY', 'PARAM_BROW_L_Y'], value: 0.24 }, + { id: ['ParamBrowRY', 'PARAM_BROW_R_Y'], value: 0.24 }, + { id: ['ParamBrowLAngle', 'PARAM_BROW_L_ANGLE'], value: -0.4 }, + { id: ['ParamBrowRAngle', 'PARAM_BROW_R_ANGLE'], value: -0.4 }, + ], + surprised: [ + { id: ['ParamMouthForm', 'PARAM_MOUTH_FORM'], value: 0.20 }, + { id: ['ParamMouthOpenY', 'PARAM_MOUTH_OPEN_Y'], value: 0.70 }, + { id: ['ParamEyeLOpen', 'PARAM_EYE_L_OPEN'], value: 1.00 }, + { id: ['ParamEyeROpen', 'PARAM_EYE_R_OPEN'], value: 1.00 }, + { id: ['ParamBrowLY', 'PARAM_BROW_L_Y'], value: -0.1 }, + { id: ['ParamBrowRY', 'PARAM_BROW_R_Y'], value: -0.1 }, + ], neutral: [ { id: ['ParamMouthForm', 'PARAM_MOUTH_FORM'], value: 0.0 }, { id: ['ParamMouthOpenY', 'PARAM_MOUTH_OPEN_Y'], value: 0.0 }, @@ -247,6 +271,9 @@ async function initModel() { const modelUrl = props.modelPath const isCubism4 = modelUrl.includes('.model3.json') + const folderFiles = props.folderFiles + const hasDirectoryFileList = !!folderFiles && Array.from(folderFiles as FileList).length > 0 + // Load the runtime that this model needs BEFORE importing the // pixi-live2d-display submodule — the submodule's module-level // initialization probes for the runtime as it loads. @@ -288,7 +315,14 @@ async function initModel() { autoDensity: true, }) - live2dModel = await Live2DModel.from(modelUrl, { autoInteract: false }) + if (hasDirectoryFileList && typeof (live2dModule as any).FileLoader?.createSettings === 'function') { + const files = Array.from(folderFiles as File[] | FileList) + const settings = await (live2dModule as any).FileLoader.createSettings(files) + await (live2dModule as any).FileLoader.upload(files, settings) + live2dModel = await Live2DModel.from(settings, { autoInteract: false }) + } else { + live2dModel = await Live2DModel.from(modelUrl, { autoInteract: false }) + } layoutModel() pixiApp.ticker.add(applyCursorFocus) @@ -327,6 +361,47 @@ function layoutModel() { live2dModel.y = props.offsetY } +async function setLive2DExpression(live2dModelTarget: Live2DModelType | null, emotion: string | null | undefined) { + if (!live2dModelTarget || !emotion) return + const normalized = String(emotion || '').trim().toLowerCase() + if (!normalized) return + + const exprMgr = live2dModelTarget.internalModel?.motionManager?.expressionManager + const candidates = EXPRESSION_NAME_MAP[normalized] + let namedExpressionSet = false + + if (exprMgr?.definitions?.length && candidates) { + for (const name of candidates) { + const index = exprMgr.getExpressionIndex(name) + if (index >= 0 && index < exprMgr.definitions.length) { + try { + await live2dModelTarget.expression(name) + namedExpressionSet = true + break + } catch { + /* try next expression id */ + } + } + } + } + + if (!namedExpressionSet) { + const params = EXPRESSION_PARAMS[normalized] + if (params) { + for (const p of params) { + setCoreParameter(p.id, p.value) + } + } + } + + try { + const motionName = resolveMotion(normalized) + live2dModelTarget.motion(motionName) + } catch { + /* motion optional */ + } +} + async function setExpression(expression: string) { if (!live2dModel) return diff --git a/apps/desktop/src/renderer/src/stores/chat.ts b/apps/desktop/src/renderer/src/stores/chat.ts index 1e90a6d9..c2b60c4a 100644 --- a/apps/desktop/src/renderer/src/stores/chat.ts +++ b/apps/desktop/src/renderer/src/stores/chat.ts @@ -394,6 +394,27 @@ function extractExplicitTerminalCommand(text: string): string | null { return null } +const EMOTION_TAG_RE = /\[emotion:\s*([a-z]+)\]/i +const EMOTION_LABELS = new Set(['happy', 'sad', 'angry', 'surprised', 'neutral', 'excited', 'thinking', 'confused', 'embarrassed', 'determined']) + +function buildEmotionPromptBlock(): string { + return ` + +[Emotion Tags] +When you answer in chat, you MUST emit a single final emotion tag somewhere in your visible reply body using the exact format [emotion: ], where is one of: happy, sad, angry, surprised, neutral, excited, thinking, confused, embarrassed, determined. +Keep the tag as runtime metadata for the avatar; do not explain it. Strip it from the live rendered text before the user sees it.` +} + +function parseEmotionTag(content: string): { emotion: string | null; content: string } { + const raw = String(content || '') + const match = raw.match(EMOTION_TAG_RE) + if (!match?.[1]) return { emotion: null, content: raw } + const emotion = match[1].toLowerCase() + if (!EMOTION_LABELS.has(emotion)) return { emotion: null, content: raw } + const stripped = raw.replace(EMOTION_TAG_RE, '').replace(/\s{2,}/g, ' ').trim() + return { emotion, content: stripped } +} + function createWaifuSystemPrompt(waifu: any, provider: string, model: string, affection: number) { return buildSystemPrompt( waifu, @@ -1841,6 +1862,7 @@ export const useChatStore = defineStore('chat', () => { let cachedSystemPrompt = createWaifuSystemPrompt(waifu, selectedProvider.value, model, affection.value) cachedSystemPrompt += buildMasterContextBlock() cachedSystemPrompt += buildLanguagePromptBlock() + cachedSystemPrompt += buildEmotionPromptBlock() cachedSystemPrompt += buildSkillsAuthoringPromptBlock() cachedSystemPrompt += formatSkillsForPrompt(availableSkills.value) cachedSystemPrompt += buildWeChatSessionPromptBlock(currentWeChatBinding.value) @@ -1852,6 +1874,7 @@ export const useChatStore = defineStore('chat', () => { systemPrompt += buildAffectionPrompt(affection.value, waifu.displayName || 'Waifu') systemPrompt += buildMilestoneSidecarBlock(waifu.id) systemPrompt += buildApiTelemetryPrompt() + systemPrompt += buildEmotionPromptBlock() systemPrompt += buildCurrentTimePrompt() systemPrompt += activeCodingRepo.value ? buildActiveCodingRepoPromptBlock(activeCodingRepo.value) @@ -2041,6 +2064,11 @@ export const useChatStore = defineStore('chat', () => { } let finalText = extractMemoryFromAIResponse(finalRaw) if (pendingCards.length > 0) finalText = prependCardMarkers(pendingCards, finalText) + const parsed = parseEmotionTag(finalText) + if (parsed.emotion) { + applyLive2DExpression(parsed.emotion, 'agent') + finalText = parsed.content + } ensureBubble() assistantContent = finalText updateBubble() @@ -2074,7 +2102,11 @@ export const useChatStore = defineStore('chat', () => { assistantContent = extractMemoryFromAIResponse(assistantContent) } - const cleanContent = assistantContent + const parsed = parseEmotionTag(assistantContent) + if (parsed.emotion) { + applyLive2DExpression(parsed.emotion, 'agent') + } + const cleanContent = parsed.content const savedMessage = messages.value.find((m) => m.id === assistantId) if (savedMessage) { savedMessage.content = cleanContent diff --git a/package.json b/package.json index 1508ae7f..e60db4b6 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,52 @@ { - "name": "syntax-senpai", - "version": "0.0.1", - "packageManager": "pnpm@8.13.0", - "description": "AI-powered waifu companion for developers", - "private": true, - "license": "MIT", - "workspaces": [ - "apps/*", - "packages/*" - ], - "scripts": { - "desktop:quick": "pnpm --filter syntax-senpai-desktop run dev:quick", - "dev:mobile": "turbo run dev --filter=syntax-senpai-mobile", - "dev:desktop": "turbo run dev --filter=syntax-senpai-desktop", - "dev:runtime": "pnpm --filter syntax-senpai-runtime run dev", - "build": "turbo run build", - "test": "turbo run test", - "test:unit": "pnpm -r --if-present run test:unit", - "lint": "turbo run lint", - "typecheck": "tsc -p tsconfig.base.json --noEmit", - "docker:build": "docker build -f Dockerfile -t syntax-senpai-runtime:local .", - "docker:up": "docker compose up --build", - "clean": "turbo run clean && rm -rf node_modules" - }, - "devDependencies": { - "@types/node": "20.3.1", - "prebuild-install": "^7.1.3", - "tsdown": "0.21.7", - "turbo": "^2.9.14", - "typescript": "^5.7.2", - "vitest": "^4.1.3" - }, - "engines": { - "node": ">=20.0.0", - "npm": ">=11.0.0" + "name": "syntax-senpai", + "version": "0.0.1", + "packageManager": "pnpm@8.13.0", + "description": "AI-powered waifu companion for developers", + "private": true, + "license": "MIT", + "workspaces": [ + "apps/*", + "packages/*" + ], + "scripts": { + "desktop:quick": "pnpm --filter syntax-senpai-desktop run dev:quick", + "dev:mobile": "turbo run dev --filter=syntax-senpai-mobile", + "dev:desktop": "turbo run dev --filter=syntax-senpai-desktop", + "dev:runtime": "pnpm --filter syntax-senpai-runtime run dev", + "build": "turbo run build", + "test": "turbo run test", + "test:unit": "pnpm -r --if-present run test:unit", + "lint": "turbo run lint", + "typecheck": "tsc -p tsconfig.base.json --noEmit", + "docker:build": "docker build -f Dockerfile -t syntax-senpai-runtime:local .", + "docker:up": "docker compose up --build", + "clean": "turbo run clean && rm -rf node_modules" + }, + "devDependencies": { + "@types/node": "20.3.1", + "prebuild-install": "^7.1.3", + "tsdown": "0.21.7", + "turbo": "^2.9.14", + "typescript": "^5.7.2", + "vitest": "^4.1.3" + }, + "pnpm": { + "overrides": { + "@xmldom/xmldom": "0.8.13", + "brace-expansion": "5.0.6", + "gh-pages": ">=5.0.0", + "postcss": "8.5.15", + "tar": "7.5.15", + "uuid": "11.1.1", + "ws": "8.21.0", + "shell-quote": "1.8.4", + "tmp": "0.2.7", + "esbuild": "0.28.1" } -} \ No newline at end of file + }, + "engines": { + "node": ">=20.0.0", + "npm": ">=11.0.0" + } +} diff --git a/packages/agent-tools/src/live2d-import.ts b/packages/agent-tools/src/live2d-import.ts index 72de8c33..59f08b3d 100644 --- a/packages/agent-tools/src/live2d-import.ts +++ b/packages/agent-tools/src/live2d-import.ts @@ -56,6 +56,54 @@ export function findLive2DModelJson(root: string): string | null { return null; } +/** + * Build a flat file map from a model directory. This mirrors what the + * pixi-live2d-display FileLoader expects from a webkitdirectory upload: + * - every file in the tree becomes a relative path keyed record + * - the model settings file is returned separately so the caller can seed the runtime + * - expression / motion resource names that ship in a folder are retained in the map + */ +export function buildLive2DResourceMap(root: string): { + modelJsonPath: string | null; + resources: Record; +} | null { + if (!fs.existsSync(root) || !fs.statSync(root).isDirectory()) return null; + + const queue: string[] = [root]; + const resources: Record = {}; + let modelJsonPath: string | null = null; + + while (queue.length > 0) { + const dir = queue.shift()!; + let entries: fs.Dirent[]; + try { + entries = fs.readdirSync(dir, { withFileTypes: true }); + } catch { + continue; + } + + for (const entry of entries) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + queue.push(full); + continue; + } + + if (!entry.isFile()) continue; + const rel = path.relative(root, full).replace(/\\/g, '/'); + resources[rel] = full; + if (LIVE2D_MODEL_JSON_RE.test(entry.name)) { + modelJsonPath = full; + } + } + } + + return { + modelJsonPath, + resources, + }; +} + /** * Reduce a model/folder name to a filesystem-safe slug: * - lowercase diff --git a/packages/storage/tsconfig.json b/packages/storage/tsconfig.json index c0733b22..0976da84 100644 --- a/packages/storage/tsconfig.json +++ b/packages/storage/tsconfig.json @@ -7,10 +7,10 @@ "declarationMap": true, "paths": { "@syntax-senpai/ai-core": [ - "packages/ai-core/dist" + "../ai-core/dist" ], "@syntax-senpai/ai-core/*": [ - "packages/ai-core/dist/*" + "../ai-core/dist/*" ] }, "noEmit": false, diff --git a/packages/waifu-core/tsconfig.json b/packages/waifu-core/tsconfig.json index f25b332d..e9e4cac3 100644 --- a/packages/waifu-core/tsconfig.json +++ b/packages/waifu-core/tsconfig.json @@ -6,8 +6,8 @@ "declaration": true, "declarationMap": true, "paths": { - "@syntax-senpai/ai-core": ["packages/ai-core/dist"], - "@syntax-senpai/ai-core/*": ["packages/ai-core/dist/*"] + "@syntax-senpai/ai-core": ["../ai-core/dist"], + "@syntax-senpai/ai-core/*": ["../ai-core/dist/*"] }, "noEmit": false, "allowImportingTsExtensions": false diff --git a/packages/ws-protocol/tsconfig.json b/packages/ws-protocol/tsconfig.json index 98166632..4d1bfbc4 100644 --- a/packages/ws-protocol/tsconfig.json +++ b/packages/ws-protocol/tsconfig.json @@ -6,8 +6,8 @@ "declaration": true, "declarationMap": true, "paths": { - "@syntax-senpai/ai-core": ["packages/ai-core/dist"], - "@syntax-senpai/ai-core/*": ["packages/ai-core/dist/*"] + "@syntax-senpai/ai-core": ["../ai-core/dist"], + "@syntax-senpai/ai-core/*": ["../ai-core/dist/*"] }, "noEmit": false, "allowImportingTsExtensions": false diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 59d7bfeb..7d17866b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,18 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@xmldom/xmldom': 0.8.13 + brace-expansion: 5.0.6 + gh-pages: '>=5.0.0' + postcss: 8.5.15 + tar: 7.5.15 + uuid: 11.1.1 + ws: 8.21.0 + shell-quote: 1.8.4 + tmp: 0.2.7 + esbuild: 0.28.1 + importers: .: @@ -87,7 +99,7 @@ importers: specifier: ^3.5.13 version: 3.5.32(typescript@5.9.3) ws: - specifier: ^8.21.0 + specifier: 8.21.0 version: 8.21.0 devDependencies: '@types/node': @@ -1616,17 +1628,8 @@ packages: dev: true optional: true - /@esbuild/aix-ppc64@0.25.12: - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - - /@esbuild/aix-ppc64@0.27.7: - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + /@esbuild/aix-ppc64@0.28.1: + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1634,8 +1637,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.25.12: - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + /@esbuild/android-arm64@0.28.1: + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1643,17 +1646,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.27.7: - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.25.12: - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + /@esbuild/android-arm@0.28.1: + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1661,26 +1655,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.27.7: - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.25.12: - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.27.7: - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + /@esbuild/android-x64@0.28.1: + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1688,8 +1664,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.25.12: - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + /@esbuild/darwin-arm64@0.28.1: + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1697,17 +1673,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.27.7: - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.25.12: - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + /@esbuild/darwin-x64@0.28.1: + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -1715,26 +1682,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.27.7: - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.25.12: - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.27.7: - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + /@esbuild/freebsd-arm64@0.28.1: + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -1742,17 +1691,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.25.12: - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.27.7: - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + /@esbuild/freebsd-x64@0.28.1: + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -1760,17 +1700,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.25.12: - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.27.7: - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + /@esbuild/linux-arm64@0.28.1: + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -1778,8 +1709,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.25.12: - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + /@esbuild/linux-arm@0.28.1: + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -1787,26 +1718,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.27.7: - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.25.12: - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.27.7: - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + /@esbuild/linux-ia32@0.28.1: + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -1814,8 +1727,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.25.12: - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + /@esbuild/linux-loong64@0.28.1: + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -1823,26 +1736,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.27.7: - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.25.12: - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.27.7: - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + /@esbuild/linux-mips64el@0.28.1: + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -1850,8 +1745,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.25.12: - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + /@esbuild/linux-ppc64@0.28.1: + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1859,26 +1754,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.27.7: - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.25.12: - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.27.7: - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + /@esbuild/linux-riscv64@0.28.1: + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1886,8 +1763,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.25.12: - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + /@esbuild/linux-s390x@0.28.1: + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1895,26 +1772,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.27.7: - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.25.12: - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.27.7: - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + /@esbuild/linux-x64@0.28.1: + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -1922,8 +1781,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-arm64@0.25.12: - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + /@esbuild/netbsd-arm64@0.28.1: + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1931,26 +1790,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-arm64@0.27.7: - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.25.12: - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.27.7: - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + /@esbuild/netbsd-x64@0.28.1: + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -1958,17 +1799,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-arm64@0.25.12: - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-arm64@0.27.7: - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + /@esbuild/openbsd-arm64@0.28.1: + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1976,8 +1808,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.25.12: - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + /@esbuild/openbsd-x64@0.28.1: + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -1985,26 +1817,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.27.7: - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openharmony-arm64@0.25.12: - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openharmony-arm64@0.27.7: - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + /@esbuild/openharmony-arm64@0.28.1: + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2012,8 +1826,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.25.12: - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + /@esbuild/sunos-x64@0.28.1: + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2021,17 +1835,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.27.7: - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.25.12: - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + /@esbuild/win32-arm64@0.28.1: + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2039,26 +1844,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.27.7: - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.25.12: - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.27.7: - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + /@esbuild/win32-ia32@0.28.1: + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2066,17 +1853,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.25.12: - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.27.7: - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + /@esbuild/win32-x64@0.28.1: + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2403,7 +2181,7 @@ packages: jsc-safe-url: 0.2.4 lightningcss: 1.32.0 minimatch: 9.0.9 - postcss: 8.4.49 + postcss: 8.5.15 resolve-from: 5.0.0 transitivePeerDependencies: - bufferutil @@ -2817,12 +2595,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -2830,7 +2606,6 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - dev: true /@nuxt/kit@3.21.2: resolution: {integrity: sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==} @@ -2931,7 +2706,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -2941,7 +2715,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -2951,7 +2724,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -2961,7 +2733,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -2971,7 +2742,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -2981,7 +2751,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -2991,7 +2760,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -3001,7 +2769,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -4148,7 +3915,7 @@ packages: nullthrows: 1.1.1 open: 7.4.2 serve-static: 1.16.3 - ws: 6.2.5 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - supports-color @@ -4376,7 +4143,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4386,7 +4152,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -4396,7 +4161,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4406,7 +4170,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4416,7 +4179,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4426,7 +4188,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -4531,7 +4292,6 @@ packages: resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} cpu: [arm] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4540,7 +4300,6 @@ packages: resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} cpu: [arm] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -4549,7 +4308,6 @@ packages: resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4558,7 +4316,6 @@ packages: resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -4567,7 +4324,6 @@ packages: resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} cpu: [loong64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4576,7 +4332,6 @@ packages: resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} cpu: [loong64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -4585,7 +4340,6 @@ packages: resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} cpu: [ppc64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4594,7 +4348,6 @@ packages: resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} cpu: [ppc64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -4603,7 +4356,6 @@ packages: resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} cpu: [riscv64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4612,7 +4364,6 @@ packages: resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} cpu: [riscv64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -4621,7 +4372,6 @@ packages: resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} cpu: [s390x] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4630,7 +4380,6 @@ packages: resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true @@ -4639,7 +4388,6 @@ packages: resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true @@ -5912,22 +5660,9 @@ packages: resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} dev: false - /array-union@1.0.2: - resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} - engines: {node: '>=0.10.0'} - dependencies: - array-uniq: 1.0.3 - dev: false - /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - dev: true - - /array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} - engines: {node: '>=0.10.0'} - dev: false /array.prototype.findlast@1.2.5: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} @@ -6027,19 +5762,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - dev: false - - /async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} - dependencies: - lodash: 4.18.1 - dev: false - /async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - dev: true /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -6243,9 +5967,6 @@ packages: babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) dev: false - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -6312,17 +6033,6 @@ packages: big-integer: 1.6.52 dev: false - /brace-expansion@1.1.16: - resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - /brace-expansion@2.1.2: - resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} - dependencies: - balanced-match: 1.0.2 - /brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -6690,6 +6400,11 @@ packages: engines: {node: '>=18'} dev: false + /commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + dev: false + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false @@ -6755,9 +6470,6 @@ packages: - supports-color dev: false - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} requiresBuild: true @@ -7018,7 +6730,6 @@ packages: engines: {node: '>=8'} dependencies: path-type: 4.0.0 - dev: true /dmg-builder@26.8.1(electron-builder-squirrel-windows@26.8.1): resolution: {integrity: sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==} @@ -7186,7 +6897,7 @@ packages: '@babel/core': 7.29.0 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) cac: 6.7.14 - esbuild: 0.25.12 + esbuild: 0.28.1 magic-string: 0.30.21 picocolors: 1.1.1 vite: 7.3.3(@types/node@20.19.39) @@ -7223,8 +6934,8 @@ packages: - supports-color dev: true - /email-addresses@3.1.0: - resolution: {integrity: sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==} + /email-addresses@5.0.0: + resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} dev: false /emoji-regex@8.0.0: @@ -7412,72 +7123,38 @@ packages: dev: true optional: true - /esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + /esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - dev: true - - /esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.7 - '@esbuild/android-arm': 0.27.7 - '@esbuild/android-arm64': 0.27.7 - '@esbuild/android-x64': 0.27.7 - '@esbuild/darwin-arm64': 0.27.7 - '@esbuild/darwin-x64': 0.27.7 - '@esbuild/freebsd-arm64': 0.27.7 - '@esbuild/freebsd-x64': 0.27.7 - '@esbuild/linux-arm': 0.27.7 - '@esbuild/linux-arm64': 0.27.7 - '@esbuild/linux-ia32': 0.27.7 - '@esbuild/linux-loong64': 0.27.7 - '@esbuild/linux-mips64el': 0.27.7 - '@esbuild/linux-ppc64': 0.27.7 - '@esbuild/linux-riscv64': 0.27.7 - '@esbuild/linux-s390x': 0.27.7 - '@esbuild/linux-x64': 0.27.7 - '@esbuild/netbsd-arm64': 0.27.7 - '@esbuild/netbsd-x64': 0.27.7 - '@esbuild/openbsd-arm64': 0.27.7 - '@esbuild/openbsd-x64': 0.27.7 - '@esbuild/openharmony-arm64': 0.27.7 - '@esbuild/sunos-x64': 0.27.7 - '@esbuild/win32-arm64': 0.27.7 - '@esbuild/win32-ia32': 0.27.7 - '@esbuild/win32-x64': 0.27.7 + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 dev: true /escalade@3.2.0: @@ -8102,7 +7779,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 - dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -8115,7 +7791,6 @@ packages: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} dependencies: reusify: 1.1.0 - dev: true /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -8316,7 +7991,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.2.0 universalify: 2.0.1 - dev: true /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} @@ -8334,6 +8008,7 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 + dev: true /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} @@ -8446,18 +8121,18 @@ packages: engines: {node: '>=6'} dev: false - /gh-pages@4.0.0: - resolution: {integrity: sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==} + /gh-pages@6.3.0: + resolution: {integrity: sha512-Ot5lU6jK0Eb+sszG8pciXdjMXdBJ5wODvgjR+imihTqsUWF2K6dJ9HST55lgqcs8wWcw6o6wAsUzfcYRhJPXbA==} engines: {node: '>=10'} hasBin: true dependencies: - async: 2.6.4 - commander: 2.20.3 - email-addresses: 3.1.0 + async: 3.2.6 + commander: 13.1.0 + email-addresses: 5.0.0 filenamify: 4.3.0 find-cache-dir: 3.3.2 - fs-extra: 8.1.0 - globby: 6.1.0 + fs-extra: 11.3.5 + globby: 11.1.0 dev: false /giget@3.2.0: @@ -8475,7 +8150,6 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: true /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} @@ -8541,18 +8215,6 @@ packages: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - dev: true - - /globby@6.1.0: - resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} - engines: {node: '>=0.10.0'} - dependencies: - array-union: 1.0.2 - glob: 7.2.3 - object-assign: 4.1.1 - pify: 2.3.0 - pinkie-promise: 2.0.1 - dev: false /gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} @@ -8921,7 +8583,6 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true /is-finalizationregistry@1.1.1: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} @@ -8950,7 +8611,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: true /is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} @@ -9284,6 +8944,7 @@ packages: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 + dev: true /jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} @@ -9291,7 +8952,6 @@ packages: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} @@ -9452,7 +9112,6 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: false optional: true @@ -9462,7 +9121,6 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: false optional: true @@ -9472,7 +9130,6 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: false optional: true @@ -9482,7 +9139,6 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: false optional: true @@ -9492,7 +9148,6 @@ packages: engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: false optional: true @@ -9502,7 +9157,6 @@ packages: engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: false optional: true @@ -9512,7 +9166,6 @@ packages: engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: false optional: true @@ -9522,7 +9175,6 @@ packages: engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: false optional: true @@ -9632,6 +9284,7 @@ packages: /lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + dev: true /log-symbols@2.2.0: resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} @@ -9741,7 +9394,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true /metro-babel-transformer@0.83.3: resolution: {integrity: sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==} @@ -10288,7 +9940,7 @@ packages: serialize-error: 2.1.0 source-map: 0.5.7 throat: 5.0.0 - ws: 7.5.12 + ws: 8.21.0 yargs: 17.7.2 transitivePeerDependencies: - bufferutil @@ -10339,7 +9991,7 @@ packages: serialize-error: 2.1.0 source-map: 0.5.7 throat: 5.0.0 - ws: 7.5.12 + ws: 8.21.0 yargs: 17.7.2 transitivePeerDependencies: - bufferutil @@ -10390,7 +10042,7 @@ packages: serialize-error: 2.1.0 source-map: 0.5.7 throat: 5.0.0 - ws: 7.5.12 + ws: 8.21.0 yargs: 17.7.2 transitivePeerDependencies: - bufferutil @@ -10462,20 +10114,20 @@ packages: /minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} dependencies: - brace-expansion: 1.1.16 + brace-expansion: 5.0.6 /minimatch@5.1.9: resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} dependencies: - brace-expansion: 2.1.2 + brace-expansion: 5.0.6 dev: true /minimatch@9.0.9: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - brace-expansion: 2.1.2 + brace-expansion: 5.0.6 /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -10872,7 +10524,7 @@ packages: resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} hasBin: true peerDependencies: - ws: ^8.18.0 + ws: 8.21.0 zod: ^3.23.8 peerDependenciesMeta: ws: @@ -11054,7 +10706,6 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true /pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -11091,11 +10742,6 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: false - /pinia@3.0.4(typescript@5.9.3)(vue@3.5.32): resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==} peerDependencies: @@ -11110,18 +10756,6 @@ packages: vue: 3.5.32(typescript@5.9.3) dev: false - /pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} - engines: {node: '>=0.10.0'} - dependencies: - pinkie: 2.0.4 - dev: false - - /pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} - engines: {node: '>=0.10.0'} - dev: false - /pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -11143,7 +10777,7 @@ packages: '@pixi/math': 6.5.10 '@pixi/sprite': 6.5.10(@pixi/constants@6.5.10)(@pixi/core@6.5.10)(@pixi/display@6.5.10)(@pixi/math@6.5.10)(@pixi/settings@6.5.10)(@pixi/utils@6.5.10) '@pixi/utils': 6.5.10(@pixi/constants@6.5.10)(@pixi/settings@6.5.10) - gh-pages: 4.0.0 + gh-pages: 6.3.0 dev: false /pixi.js@6.5.10: @@ -11243,15 +10877,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.12 - picocolors: 1.1.1 - source-map-js: 1.2.1 - dev: false - /postcss@8.5.15: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} @@ -11429,7 +11054,6 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true /queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} @@ -11469,7 +11093,7 @@ packages: resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} dependencies: shell-quote: 1.8.4 - ws: 7.5.12 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -11672,7 +11296,7 @@ packages: semver: 7.7.4 stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 - ws: 6.2.5 + ws: 8.21.0 yargs: 17.7.2 transitivePeerDependencies: - '@babel/core' @@ -11961,7 +11585,6 @@ packages: /reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true /rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -12099,7 +11722,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true /safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} @@ -13136,11 +12758,11 @@ packages: /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + dev: true /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - dev: true /unocss@66.6.7(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vite@7.3.3): resolution: {integrity: sha512-TdZ/JnKhrqkknrMvLl0KOwrGzFThEspFIyYiylFYJki2JkMN/5EJIr+vIZEGRX69hFTjTLi6utIpbipueqzNbw==} @@ -13314,8 +12936,8 @@ packages: engines: {node: '>= 0.4.0'} dev: false - /uuid@7.0.3: - resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} + /uuid@11.1.1: + resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} hasBin: true dev: false @@ -13395,7 +13017,7 @@ packages: optional: true dependencies: '@types/node': 20.19.39 - esbuild: 0.27.7 + esbuild: 0.28.1 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.15 @@ -13446,7 +13068,7 @@ packages: optional: true dependencies: '@types/node': 20.3.1 - esbuild: 0.27.7 + esbuild: 0.28.1 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.15 @@ -13828,33 +13450,6 @@ packages: signal-exit: 3.0.7 dev: false - /ws@6.2.5: - resolution: {integrity: sha512-T7pPl+DnmNrKRuttAIQwueReX5GqsedYEWp3/H//CG35+DyUOe1+/voAeE8idxgfLsQf2tO+rdtBd1FnPopgTQ==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - async-limiter: 1.0.1 - dev: false - - /ws@7.5.12: - resolution: {integrity: sha512-1xGnbYN3zbog9CwuNDQULNRrTCLIn46/WmpR1f0w6PsCYQHkylZr5vkd6kfMZYV6pRnQkcPNRyiA8LsrNKyhpg==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /ws@8.21.0: resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} @@ -13873,7 +13468,7 @@ packages: engines: {node: '>=10.0.0'} dependencies: simple-plist: 1.3.1 - uuid: 7.0.3 + uuid: 11.1.1 dev: false /xml2js@0.6.0: