From a034eea831b591bf4e54ee92b93d3a2994df71dd Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 8 Jul 2026 14:46:16 +0800 Subject: [PATCH 01/46] Migrate to svelte ts for API example --- examples/api/index.html | 2 +- examples/api/jsconfig.json | 32 ----- examples/api/src/App.svelte | 77 ++++++----- .../api/src/components/MenuBuilder.svelte | 47 +++++-- .../api/src/components/MenuItemBuilder.svelte | 77 +++++++---- examples/api/src/{main.js => main.ts} | 8 +- examples/api/src/types.ts | 43 ++++++ examples/api/src/views/App.svelte | 13 +- examples/api/src/views/Communication.svelte | 16 ++- examples/api/src/views/Menu.svelte | 48 ++++--- examples/api/src/views/Tray.svelte | 19 ++- examples/api/src/views/WebRTC.svelte | 40 ++++-- examples/api/src/views/Welcome.svelte | 5 +- examples/api/src/views/Window.svelte | 127 +++++++++--------- examples/api/tsconfig.json | 15 +++ 15 files changed, 355 insertions(+), 214 deletions(-) delete mode 100644 examples/api/jsconfig.json rename examples/api/src/{main.js => main.ts} (67%) create mode 100644 examples/api/src/types.ts create mode 100644 examples/api/tsconfig.json diff --git a/examples/api/index.html b/examples/api/index.html index 010944d8e277..5490c5c8e345 100644 --- a/examples/api/index.html +++ b/examples/api/index.html @@ -8,6 +8,6 @@
- + diff --git a/examples/api/jsconfig.json b/examples/api/jsconfig.json deleted file mode 100644 index 5696a2de74a0..000000000000 --- a/examples/api/jsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "moduleResolution": "bundler", - "target": "ESNext", - "module": "ESNext", - /** - * svelte-preprocess cannot figure out whether you have - * a value or a type, so tell TypeScript to enforce using - * `import type` instead of `import` for Types. - */ - "verbatimModuleSyntax": true, - "isolatedModules": true, - "resolveJsonModule": true, - /** - * To have warnings / errors of the Svelte compiler at the - * correct position, enable source maps by default. - */ - "sourceMap": true, - "esModuleInterop": true, - "skipLibCheck": true, - /** - * Typecheck JS in `.svelte` and `.js` files by default. - * Disable this if you'd like to use dynamic types. - */ - "checkJs": true - }, - /** - * Use global.d.ts instead of compilerOptions.types - * to avoid limiting type declarations. - */ - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] -} diff --git a/examples/api/src/App.svelte b/examples/api/src/App.svelte index 7d14871a7944..6ee85245f913 100644 --- a/examples/api/src/App.svelte +++ b/examples/api/src/App.svelte @@ -1,9 +1,10 @@ - diff --git a/examples/api/src/views/Tray.svelte b/examples/api/src/views/Tray.svelte index 9636f00c6806..d70b6348e4fb 100644 --- a/examples/api/src/views/Tray.svelte +++ b/examples/api/src/views/Tray.svelte @@ -1,18 +1,23 @@ -
Not available for Linux
-
diff --git a/examples/api/src/views/Welcome.svelte b/examples/api/src/views/Welcome.svelte index 21fa31c00135..50c972ac59b3 100644 --- a/examples/api/src/views/Welcome.svelte +++ b/examples/api/src/views/Welcome.svelte @@ -6,9 +6,9 @@ getTauriVersion, getBundleType } from '@tauri-apps/api/app' - import type { MessageHandler } from '../types' + import type { ViewProps } from '../types' - let { onMessage }: { onMessage: MessageHandler } = $props() + let { onMessage }: ViewProps = $props() let version = $state('1.0.0') let tauriVersion = $state('1.0.0') diff --git a/examples/api/src/views/Window.svelte b/examples/api/src/views/Window.svelte index 83144a8b3505..9f36ba930515 100644 --- a/examples/api/src/views/Window.svelte +++ b/examples/api/src/views/Window.svelte @@ -12,9 +12,9 @@ import { WebviewWindow } from '@tauri-apps/api/webviewWindow' import type { CursorIcon, Effects, Theme } from '@tauri-apps/api/window' import type { UnlistenFn } from '@tauri-apps/api/event' - import type { MessageHandler } from '../types' + import type { ViewProps } from '../types' - let { onMessage }: { onMessage: MessageHandler } = $props() + let { onMessage }: ViewProps = $props() const webview = WebviewWindow.getCurrent() From a87146c34a2e93694703c15a030f54bb80c8bde3 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 8 Jul 2026 16:18:01 +0800 Subject: [PATCH 12/46] Use same button spacing through out --- examples/api/src/views/App.svelte | 2 +- examples/api/src/views/Communication.svelte | 6 +++--- examples/api/src/views/Menu.svelte | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/api/src/views/App.svelte b/examples/api/src/views/App.svelte index a886772eba30..035cc0ce138f 100644 --- a/examples/api/src/views/App.svelte +++ b/examples/api/src/views/App.svelte @@ -46,7 +46,7 @@ } -
+
- - + +
diff --git a/examples/api/src/views/Menu.svelte b/examples/api/src/views/Menu.svelte index fafa49358391..a542b1db6ca6 100644 --- a/examples/api/src/views/Menu.svelte +++ b/examples/api/src/views/Menu.svelte @@ -83,7 +83,7 @@
-
+
- +
From 2a286eb3e712566019f0cc927ad157281c8991f6 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 8 Jul 2026 17:11:42 +0800 Subject: [PATCH 15/46] More cleanups --- examples/api/src/views/Communication.svelte | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/examples/api/src/views/Communication.svelte b/examples/api/src/views/Communication.svelte index 3d6b858071fc..68dcdc2bd33c 100644 --- a/examples/api/src/views/Communication.svelte +++ b/examples/api/src/views/Communication.svelte @@ -2,7 +2,6 @@ import { getCurrentWebviewWindow } from '@tauri-apps/api/webviewWindow' import { Channel, invoke } from '@tauri-apps/api/core' import { onMount, onDestroy } from 'svelte' - import type { Event } from '@tauri-apps/api/event' import type { UnlistenFn } from '@tauri-apps/api/event' import type { ViewProps } from '../types' @@ -12,9 +11,8 @@ const webviewWindow = getCurrentWebviewWindow() onMount(async () => { - unlisten = await webviewWindow.listen( - 'rust-event', - (event: Event) => onMessage(event) + unlisten = await webviewWindow.listen('rust-event', (event) => + onMessage(event) ) }) onDestroy(() => { @@ -53,7 +51,7 @@ } function spam() { - const channel = new Channel() + const channel = new Channel() channel.onmessage = onMessage invoke('spam', { channel }) } From 31f1bc9094f28d16257699d80fe352d880d09c35 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 8 Jul 2026 17:19:23 +0800 Subject: [PATCH 16/46] Final cleanup --- examples/api/src/views/Communication.svelte | 10 +++---- examples/api/src/views/Menu.svelte | 30 +++++++++------------ 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/examples/api/src/views/Communication.svelte b/examples/api/src/views/Communication.svelte index 68dcdc2bd33c..dc0fcfdfe020 100644 --- a/examples/api/src/views/Communication.svelte +++ b/examples/api/src/views/Communication.svelte @@ -6,19 +6,15 @@ import type { ViewProps } from '../types' let { onMessage }: ViewProps = $props() - let unlisten: UnlistenFn | undefined const webviewWindow = getCurrentWebviewWindow() + let unlisten: UnlistenFn | undefined onMount(async () => { - unlisten = await webviewWindow.listen('rust-event', (event) => - onMessage(event) - ) + unlisten = await webviewWindow.listen('rust-event', onMessage) }) onDestroy(() => { - if (unlisten) { - unlisten() - } + unlisten?.() }) function log() { diff --git a/examples/api/src/views/Menu.svelte b/examples/api/src/views/Menu.svelte index c828464db364..bbca97ab6742 100644 --- a/examples/api/src/views/Menu.svelte +++ b/examples/api/src/views/Menu.svelte @@ -39,8 +39,7 @@ return submenu } - async function create() { - const submenu = await createSubmenu() + async function setMenu(submenu: Submenu) { menuItemCount = items.length menu = await Menu.new({ items: [submenu] @@ -48,32 +47,27 @@ await (macOS ? menu.setAsAppMenu() : menu.setAsWindowMenu()) } + async function create() { + await setMenu(await createSubmenu()) + } + async function createWithNativeIcon() { - const submenu = await createSubmenuWithNativeIcon() - menuItemCount = items.length - menu = await Menu.new({ - items: [submenu] - }) - await (macOS ? menu.setAsAppMenu() : menu.setAsWindowMenu()) + await setMenu(await createSubmenuWithNativeIcon()) } async function createWithImageIcon() { - const submenu = await createSubmenuWithImageIcon() - menuItemCount = items.length - menu = await Menu.new({ - items: [submenu] - }) - await (macOS ? menu.setAsAppMenu() : menu.setAsWindowMenu()) + await setMenu(await createSubmenuWithImageIcon()) } async function popup() { if (!submenu || menuItemCount !== items.length) { await createSubmenu() } - if (!submenu) return - // we can't popup the same menu because it's the app menu (it crashes on macOS) - const m = await Menu.new({ items: [submenu] }) - m.popup() + if (submenu) { + // we can't popup the same menu because it's the app menu (it crashes on macOS) + const m = await Menu.new({ items: [submenu] }) + m.popup() + } } function onItemClick(detail: MenuItemClickDetail) { From 43bd0a51656bbbf96a33b7b114f245415e7c57ff Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 8 Jul 2026 17:38:05 +0800 Subject: [PATCH 17/46] Move types to svelte files --- examples/api/src/App.svelte | 6 +++ .../api/src/components/MenuBuilder.svelte | 52 +++++++++++++++---- .../api/src/components/MenuItemBuilder.svelte | 5 +- examples/api/src/types.ts | 49 ----------------- examples/api/src/views/App.svelte | 2 +- examples/api/src/views/Communication.svelte | 2 +- examples/api/src/views/Menu.svelte | 7 ++- examples/api/src/views/Tray.svelte | 7 ++- examples/api/src/views/WebRTC.svelte | 2 +- examples/api/src/views/Welcome.svelte | 2 +- examples/api/src/views/Window.svelte | 2 +- 11 files changed, 67 insertions(+), 69 deletions(-) delete mode 100644 examples/api/src/types.ts diff --git a/examples/api/src/App.svelte b/examples/api/src/App.svelte index ea5f25fd4897..980ca0e954fc 100644 --- a/examples/api/src/App.svelte +++ b/examples/api/src/App.svelte @@ -1,3 +1,9 @@ + + +
- +
{#each items as item} diff --git a/examples/api/src/components/MenuItemBuilder.svelte b/examples/api/src/components/MenuItemBuilder.svelte index 4d4777bf3f50..47b34b9733b7 100644 --- a/examples/api/src/components/MenuItemBuilder.svelte +++ b/examples/api/src/components/MenuItemBuilder.svelte @@ -11,7 +11,10 @@ MenuItemOptions, PredefinedMenuItemOptions } from '@tauri-apps/api/menu' - import type { BuiltMenuItem, MenuItemClickHandler } from '../types' + import type { + BuiltMenuItem, + MenuItemClickHandler + } from './MenuBuilder.svelte' type PredefinedItem = PredefinedMenuItemOptions['item'] diff --git a/examples/api/src/types.ts b/examples/api/src/types.ts deleted file mode 100644 index 288974f0ac6d..000000000000 --- a/examples/api/src/types.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2019-2024 Tauri Programme within The Commons Conservancy -// SPDX-License-Identifier: Apache-2.0 -// SPDX-License-Identifier: MIT - -import type { - CheckMenuItem, - CheckMenuItemOptions, - IconMenuItem, - IconMenuItemOptions, - MenuItem, - MenuItemOptions, - PredefinedMenuItem, - PredefinedMenuItemOptions -} from '@tauri-apps/api/menu' - -export type MessageHandler = (value: unknown) => void - -export type ViewProps = { - onMessage: MessageHandler -} - -export interface MenuItemClickDetail { - id: string - text: string -} - -export type MenuItemClickHandler = (detail: MenuItemClickDetail) => void - -export type BuiltMenuItem = - | { - kind: 'Normal' - item: MenuItem - options: MenuItemOptions - } - | { - kind: 'Icon' - item: IconMenuItem - options: IconMenuItemOptions - } - | { - kind: 'Check' - item: CheckMenuItem - options: CheckMenuItemOptions - } - | { - kind: 'Predefined' - item: PredefinedMenuItem - options: PredefinedMenuItemOptions - } diff --git a/examples/api/src/views/App.svelte b/examples/api/src/views/App.svelte index c187130d5acb..13fe5662b534 100644 --- a/examples/api/src/views/App.svelte +++ b/examples/api/src/views/App.svelte @@ -1,6 +1,6 @@ From 7905fa93f78dda6603b67ff34fa03e2ad43b23e5 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 13:40:43 +0800 Subject: [PATCH 19/46] Initial work --- examples/api/package.json | 2 + examples/api/src-tauri/src/lib.rs | 1 + .../api/src/components/MenuItemBuilder.svelte | 98 ++++++++++++++++++- .../src/components/MenuItemComponent.svelte | 42 ++++++++ pnpm-lock.yaml | 16 +++ 5 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 examples/api/src/components/MenuItemComponent.svelte diff --git a/examples/api/package.json b/examples/api/package.json index c0f15c0f1bac..443f5e18ea11 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -16,7 +16,9 @@ "@iconify-json/codicon": "^1.2.49", "@iconify-json/ph": "^1.2.2", "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@types/sortablejs": "^1.15.9", "@unocss/extractor-svelte": "^66.6.6", + "sortablejs": "^1.15.7", "svelte": "^5.55.7", "unocss": "^66.6.6", "vite": "^8.0.16" diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index b569f25cb550..876978fdaecd 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -67,6 +67,7 @@ pub fn run_app) + Send + 'static>( #[allow(unused_mut)] let mut window_builder = WebviewWindowBuilder::new(app, "main", WebviewUrl::default()) + .disable_drag_drop_handler() .on_document_title_changed(|_window, title| { println!("document title changed: {title}"); }); diff --git a/examples/api/src/components/MenuItemBuilder.svelte b/examples/api/src/components/MenuItemBuilder.svelte index 47b34b9733b7..1bc5f3898a1f 100644 --- a/examples/api/src/components/MenuItemBuilder.svelte +++ b/examples/api/src/components/MenuItemBuilder.svelte @@ -15,6 +15,9 @@ BuiltMenuItem, MenuItemClickHandler } from './MenuBuilder.svelte' + import Sortable from 'sortablejs' + import { onMount } from 'svelte' + import MenuItemComponent from './MenuItemComponent.svelte' type PredefinedItem = PredefinedMenuItemOptions['item'] @@ -99,9 +102,100 @@ text = '' predefinedItem = undefined } + + // function reorder( + // array: T[], + // evt: Sortable.SortableEvent + // ): $state.Snapshot[] { + // // should have no effect on stores or regular array + // const workArray = $state.snapshot(array) + + // // get changes + // const { oldIndex, newIndex } = evt + + // if (oldIndex === undefined || newIndex === undefined) { + // return workArray + // } + // if (newIndex === oldIndex) { + // return workArray + // } + + // // move elements + // const target = workArray[oldIndex] + // const increment = newIndex < oldIndex ? -1 : 1 + + // for (let k = oldIndex; k !== newIndex; k += increment) { + // workArray[k] = workArray[k + increment] + // } + // workArray[newIndex] = target + // return workArray + // } + + let sourceSortableEl1: HTMLElement + let sourceSortableEl2: HTMLElement + let targetSortableEl: HTMLElement + + function makeSourceSortable(sourceSortableEl: HTMLElement) { + return new Sortable(sourceSortableEl, { + draggable: 'div.menu-item', + group: { + name: 'shared', + pull: 'clone', + put: false + }, + sort: false, + delayOnTouchOnly: true, + delay: 500 + }) + } + + onMount(() => { + const sourceSortable1 = makeSourceSortable(sourceSortableEl1) + const sourceSortable2 = makeSourceSortable(sourceSortableEl2) + const targetSortable = new Sortable(targetSortableEl, { + group: { + name: 'shared' + }, + delayOnTouchOnly: true, + delay: 500, + animation: 200 + }) + return () => { + targetSortable.destroy() + sourceSortable1.destroy() + sourceSortable2.destroy() + } + }) -
+
+
+
+

Custom

+
+ + + +
+
+
+

Predefined

+
+ {#each predefinedOptions as predefinedOption} + + {/each} +
+
+
+
+
+
+
+ + diff --git a/examples/api/src/components/MenuItemComponent.svelte b/examples/api/src/components/MenuItemComponent.svelte new file mode 100644 index 000000000000..c8e3ed60805d --- /dev/null +++ b/examples/api/src/components/MenuItemComponent.svelte @@ -0,0 +1,42 @@ + + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8a5c38769ca..36f4535e3d24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,9 +37,15 @@ importers: '@sveltejs/vite-plugin-svelte': specifier: ^7.0.0 version: 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.2))(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) + '@types/sortablejs': + specifier: ^1.15.9 + version: 1.15.9 '@unocss/extractor-svelte': specifier: ^66.6.6 version: 66.6.6 + sortablejs: + specifier: ^1.15.7 + version: 1.15.7 svelte: specifier: ^5.55.7 version: 5.55.7(@typescript-eslint/types@8.58.2) @@ -1591,6 +1597,9 @@ packages: '@types/node@24.11.0': resolution: {integrity: sha512-fPxQqz4VTgPI/IQ+lj9r0h+fDR66bzoeMGHp8ASee+32OSGIkeASsoZuJixsQoVef1QJbeubcPBxKk22QVoWdw==} + '@types/sortablejs@1.15.9': + resolution: {integrity: sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -2440,6 +2449,9 @@ packages: resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==} engines: {node: '>=20.0.0'} + sortablejs@1.15.7: + resolution: {integrity: sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3791,6 +3803,8 @@ snapshots: dependencies: undici-types: 7.16.0 + '@types/sortablejs@1.15.9': {} + '@types/trusted-types@2.0.7': {} '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.2))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.2)': @@ -4759,6 +4773,8 @@ snapshots: smob@1.6.1: {} + sortablejs@1.15.7: {} + source-map-js@1.2.1: {} source-map-support@0.5.21: From 36428a907dc48d2882fa72196d644b9ffd556111 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 15:15:00 +0800 Subject: [PATCH 20/46] Bump deps --- examples/api/package.json | 10 +- pnpm-lock.yaml | 820 ++++++++++++++++++++------------------ 2 files changed, 433 insertions(+), 397 deletions(-) diff --git a/examples/api/package.json b/examples/api/package.json index 443f5e18ea11..0ba26f005ea4 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -15,12 +15,12 @@ "devDependencies": { "@iconify-json/codicon": "^1.2.49", "@iconify-json/ph": "^1.2.2", - "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@sveltejs/vite-plugin-svelte": "^7.2.0", "@types/sortablejs": "^1.15.9", - "@unocss/extractor-svelte": "^66.6.6", + "@unocss/extractor-svelte": "^66.7.5", "sortablejs": "^1.15.7", - "svelte": "^5.55.7", - "unocss": "^66.6.6", - "vite": "^8.0.16" + "svelte": "^5.56.4", + "unocss": "^66.7.5", + "vite": "^8.1.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 36f4535e3d24..a030abe21393 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,26 +35,26 @@ importers: specifier: ^1.2.2 version: 1.2.2 '@sveltejs/vite-plugin-svelte': - specifier: ^7.0.0 - version: 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.2))(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) + specifier: ^7.2.0 + version: 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.58.2))(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) '@types/sortablejs': specifier: ^1.15.9 version: 1.15.9 '@unocss/extractor-svelte': - specifier: ^66.6.6 - version: 66.6.6 + specifier: ^66.7.5 + version: 66.7.5 sortablejs: specifier: ^1.15.7 version: 1.15.7 svelte: - specifier: ^5.55.7 - version: 5.55.7(@typescript-eslint/types@8.58.2) + specifier: ^5.56.4 + version: 5.56.4(@typescript-eslint/types@8.58.2) unocss: - specifier: ^66.6.6 - version: 66.6.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) + specifier: ^66.7.5 + version: 66.7.5(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) vite: - specifier: ^8.0.16 - version: 8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) + specifier: ^8.1.4 + version: 8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) examples/file-associations: {} @@ -109,7 +109,7 @@ importers: devDependencies: '@napi-rs/cli': specifier: 3.7.2 - version: 3.7.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)(@types/node@24.11.0) + version: 3.7.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.11.0) '@types/node': specifier: ^24.11.0 version: 24.11.0 @@ -118,7 +118,7 @@ importers: version: 10.1.0 vitest: specifier: ^4.0.18 - version: 4.1.0(@types/node@24.11.0)(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) + version: 4.1.0(@types/node@24.11.0)(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) packages: @@ -175,6 +175,9 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} @@ -184,6 +187,9 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} @@ -407,8 +413,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@3.1.0': - resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} + '@iconify/utils@3.1.4': + resolution: {integrity: sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==} '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} @@ -987,6 +993,12 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-tools-android-arm-eabi@1.0.1': resolution: {integrity: sha512-lr07E/l571Gft5v4aA1dI8koJEmF1F0UigBbsqg9OWNzg80H3lDPO+auv85y3T/NHE3GirDk7x/D3sLO57vayw==} engines: {node: '>= 10'} @@ -1136,138 +1148,138 @@ packages: '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@oxc-parser/binding-android-arm-eabi@0.115.0': - resolution: {integrity: sha512-VoB2rhgoqgYf64d6Qs5emONQW8ASiTc0xp+aUE4JUhxjX+0pE3gblTYDO0upcN5vt9UlBNmUhAwfSifkfre7nw==} + '@oxc-parser/binding-android-arm-eabi@0.131.0': + resolution: {integrity: sha512-t2xicr9pfzkSRYx5aPqZqlLaayIwJTqgQ81Jor31Xep2nGyL2Aq3d0K5wOfeR7VevaSdxaS9dzSQP9xDwn8fDg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.115.0': - resolution: {integrity: sha512-lWRX75u+gqfB4TF3pWCHuvhaeneAmRl2b2qNBcl4S6yJ0HtnT4VXOMEZrq747i4Zby1ZTxj6mtOe678Bg8gRLw==} + '@oxc-parser/binding-android-arm64@0.131.0': + resolution: {integrity: sha512-nlGIod6gw75x1aEDgLS+srj+JRGY0HHm9MI9YgzE/B64l6d6+H3MSP9NOgp0+HTg8tp4vV9rVfgQGgd+TfVZcA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.115.0': - resolution: {integrity: sha512-ii/oOZjfGY1aszXTy29Z5DRyCEnBOrAXDVCvfdfXFQsOZlbbOa7NMHD7D+06YFe5qdxfmbWAYv4yn6QJi/0d2g==} + '@oxc-parser/binding-darwin-arm64@0.131.0': + resolution: {integrity: sha512-jukuV6xe5RbQKFo7QD34NDCLDZp4PSOm8rmckhNdH/60ymG5zXbDzGBEyc+nTkuLQNama2aSGCt+CPfpjNTqyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.115.0': - resolution: {integrity: sha512-R/sW/p8l77wglbjpMcF+h/3rWbp9zk1mRP3U14mxTYIC2k3m+aLBpXXgk2zksqf9qKk5mcc4GIYsuCn9l8TgDg==} + '@oxc-parser/binding-darwin-x64@0.131.0': + resolution: {integrity: sha512-g3JOo4khe9rslHm5WYaVDWb0HS/M1MLR3I9S8560MkKIcC96VQY00QjOlsuRyfSj/JDXj8i9T7ryPO2RidiXVg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.115.0': - resolution: {integrity: sha512-CSJ5ldNm9wIGGkhaIJeGmxRMZbgxThRN+X1ufYQQUNi5jZDV/U3C2QDMywpP93fczNBj961hXtcUPO/oVGq4Pw==} + '@oxc-parser/binding-freebsd-x64@0.131.0': + resolution: {integrity: sha512-1hziITDTxjMePnX+dR9ocVT+EuZkQ8wm4FPAbmbEiKG+Phbo73J1ZnPAA6Y/aGsWF3McOFnQuZIktAFwalkfJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.115.0': - resolution: {integrity: sha512-uWFwssE5dHfQ8lH+ktrsD9JA49+Qa0gtxZHUs62z1e91NgGz6O7jefHGI6aygNyKNS45pnnBSDSP/zV977MsOQ==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': + resolution: {integrity: sha512-9uRxfXwyKG9+MwmGQBo2ncPNwZH5HTmCETFM2WiuDBNDCW4NC5ttSQkwCAMrTAWgwMzVBH1CP8pM0v7nebCWXQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.115.0': - resolution: {integrity: sha512-fZbqt8y/sKQ+v6bBCuv/mYYFoC0+fZI3mGDDEemmDOhT78+aUs2+4ZMdbd2btlXmnLaScl37r8IRbhnok5Ka9w==} + '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': + resolution: {integrity: sha512-mgbLvzRShXOLBdWGInf08Af4q+pfj1xD8hSgLClDZ9of/BXkB6+LIhTH7fihiDUipqB3yoSkKBWaZ3Ejlf5Yag==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.115.0': - resolution: {integrity: sha512-1ej/MjuTY9tJEunU/hUPIFmgH5PqgMQoRjNOvOkibtJ3Zqlw/+Lc+HGHDNET8sjbgIkWzdhX+p4J96A5CPdbag==} + '@oxc-parser/binding-linux-arm64-gnu@0.131.0': + resolution: {integrity: sha512-OPT8++4aN6j2GJ8+3IZHS/byXoZP4aSBn+FoG6rgBJ2fKwPKXWF3MqrFMNW7NKHM28FLY579xYLxJSfgobEqPA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.115.0': - resolution: {integrity: sha512-HjsZbJPH9mMd4swJRywVMsDZsJX0hyKb1iNHo5ijRl5yhtbO3lj7ImSrrL1oZ1VEg0te4iKmDGGz/6YPLd1G8w==} + '@oxc-parser/binding-linux-arm64-musl@0.131.0': + resolution: {integrity: sha512-vtPiwmfVTAXzaxDKsOXG+LwgRAA7WEnaeHzhS5z0GE89gAK18KSXnly7Z6saXXq6L3dVMyK44uoTI03zKxrpmw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.115.0': - resolution: {integrity: sha512-zhhePoBrd7kQx3oClX/W6NldsuCbuMqaN9rRsY+6/WoorAb4j490PG/FjqgAXscWp2uSW2WV9L+ksn0wHrvsrg==} + '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': + resolution: {integrity: sha512-8AW8L7w5cGHSdZPcyZX2yR0+GUODsT15rbRjfdD54rv6DMbtuEB19ysLOpKJlRGfH6UNYNpCHaU1uJWgTWf1/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.115.0': - resolution: {integrity: sha512-t/IRojvUE9XrKu+/H1b8YINug+7Q6FLls5rsm2lxB5mnS8GN/eYAYrPgHkcg9/1SueRDSzGpDYu3lGWTObk1zw==} + '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': + resolution: {integrity: sha512-vvpjkjEOUsPcsYf8evE4MO3aGx9+3wodXEBOicGNnOwTuAik8eBONNkgSdhkGsAblQmfVHJyanRnpxglddTXIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.115.0': - resolution: {integrity: sha512-79jBHSSh/YpQRAmvYoaCfpyToRbJ/HBrdB7hxK2ku2JMehjopTVo+xMJss/RV7/ZYqeezgjvKDQzapJbgcjVZA==} + '@oxc-parser/binding-linux-riscv64-musl@0.131.0': + resolution: {integrity: sha512-AqmcNC3fClXX+fxQ6VGEN1667xVFiRBkY0CZmDMSiaeFUsv1+UkBPYYi48IUKcA9/ivvoKNRzQl2I4//kT9F/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.115.0': - resolution: {integrity: sha512-nA1TpxkhNTIOMMyiSSsa7XIVJVoOU/SsVrHIz3gHvWweB5PHCQfO7w+Lb2EP0lBWokv7HtA/KbF7aLDoXzmuMw==} + '@oxc-parser/binding-linux-s390x-gnu@0.131.0': + resolution: {integrity: sha512-7d3jOMKy7RSQCcDLIci+ySll2FgsOMl/GiRux4q2JNv0zg4EdhFISa9idvrdN/HEUIQQJNg6dmveUeJl2YErGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.115.0': - resolution: {integrity: sha512-9iVX789DoC3SaOOG+X6NcF/tVChgLp2vcHffzOC2/Z1JTPlz6bMG2ogvcW6/9s0BG2qvhNQImd+gbWYeQbOwVw==} + '@oxc-parser/binding-linux-x64-gnu@0.131.0': + resolution: {integrity: sha512-JHK/h95qVqVQ+ITER837kcTdwBDFpFaNnOTYGCP0zdUSX/mLKC7tXOoyrTb6vG7iRPwGlcgBil3v2IjYw1FqJA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.115.0': - resolution: {integrity: sha512-RmQmk+mjCB0nMNfEYhaCxwofLo1Z95ebHw1AGvRiWGCd4zhCNOyskgCbMogIcQzSB3SuEKWgkssyaiQYVAA4hQ==} + '@oxc-parser/binding-linux-x64-musl@0.131.0': + resolution: {integrity: sha512-b2BO82O8azXAyf7EUgOPKu145nWypbNyk07HbU09fkzhm9lEA5oPvaN/M8Nlo7tOErVTa2WOgS4QbOnxAPXdDQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.115.0': - resolution: {integrity: sha512-viigraWWQhhDvX5aGq+wrQq58k00Xq3MHz/0R4AFMxGlZ8ogNonpEfNc73Q5Ly87Z6sU9BvxEdG0dnYTfVnmew==} + '@oxc-parser/binding-openharmony-arm64@0.131.0': + resolution: {integrity: sha512-GHO9glZaX7LkX/OGfluEPf1yjg+ehiFbUdowbX6uNWOQhmwKWU4m4+nZ9FJkrHNKuxyI1KKertMdGjVKCApKWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.115.0': - resolution: {integrity: sha512-IzGCrMwXhpb4kTXy/8lnqqqwjI7eOvy+r9AhVw+hsr8t1ecBBEHprcNy0aKatFHN6hsX7UMHHQmBAQjVvL/p1A==} - engines: {node: '>=14.0.0'} + '@oxc-parser/binding-wasm32-wasi@0.131.0': + resolution: {integrity: sha512-3SkikPaEFoih1N83qLVEDLRLeY4nYsf6JT9SnWiMCQ5lGQdKup6bEuKCqkRiG9dD1IIaFeYz9RjlciPmYoFIWA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.115.0': - resolution: {integrity: sha512-/ym+Absk/TLFvbhh3se9XYuI1D7BrUVHw4RaG/2dmWKgBenrZHaJsgnRb7NJtaOyjEOLIPtULx1wDdVL0SX2eg==} + '@oxc-parser/binding-win32-arm64-msvc@0.131.0': + resolution: {integrity: sha512-Os5bEhryeA2jkH+ZrnZyAC1EP5gs+X4YB1Fjqml7UPD5kU7ecsK1MPEVMfCrdt/GDNpDbavYXiOXOdyJ5b3OPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.115.0': - resolution: {integrity: sha512-AQSZjIR+b+Te7uaO/hGTMjT8/oxlYrvKrOTi4KTHF/O6osjHEatUQ3y6ZW2+8+lJxy20zIcGz6iQFmFq/qDKkg==} + '@oxc-parser/binding-win32-ia32-msvc@0.131.0': + resolution: {integrity: sha512-m+jNz9EuF0NXoiptc6B9h5yompZQVW/a5MJeOu5zojfH5yWk82tvF2ccrHkfhgtrS9h9DD5l1Qv8dWlfY7Nz8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.115.0': - resolution: {integrity: sha512-oxUl82N+fIO9jIaXPph8SPPHQXrA08BHokBBJW8ct9F/x6o6bZE6eUAhUtWajbtvFhL8UYcCWRMba+kww6MBlA==} + '@oxc-parser/binding-win32-x64-msvc@0.131.0': + resolution: {integrity: sha512-o14Hk8dAyiEUMFEWEgmAwFZvBt1RzAYLM3xeQ+5315JXgVYhoemivgYcbYVRbsFkS71ShMGlAFE0kPnr460rww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.115.0': - resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} + '@oxc-project/types@0.131.0': + resolution: {integrity: sha512-PgnWDfV0h+b16XNKbXU7Daib/BFSt/J2mEzfYIBu6JB/wNdlU+kVYXCkGA1A9fWkTbOgbjh4e6NhPeQOYvFhEA==} - '@oxc-project/types@0.133.0': - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -1284,97 +1296,97 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.0.3': - resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.3': - resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.3': - resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.3': - resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': - resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.3': - resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.3': - resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.3': - resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.3': - resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.3': - resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.3': - resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.3': - resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.3': - resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.3': - resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.3': - resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1561,13 +1573,13 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@sveltejs/acorn-typescript@1.0.9': - resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + '@sveltejs/acorn-typescript@1.0.11': + resolution: {integrity: sha512-LFuZUkjJ9iF7JZye/aG5XM0SFcQ5VyL0oVX4WJ9dc0Va3R3s0OauX1BESVCb+YN/ol8TAfqGDDAQsTG627Y5kw==} peerDependencies: acorn: ^8.9.0 - '@sveltejs/vite-plugin-svelte@7.0.0': - resolution: {integrity: sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==} + '@sveltejs/vite-plugin-svelte@7.2.0': + resolution: {integrity: sha512-1SpkuMSRLfugrVX+IrKfE1RUegzo8AQzKQ6qQPfVzbcWi5IhuTPaKb5ZrLpucleFznkc4/RTeSPoRnGWFxX+EQ==} engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: svelte: ^5.46.4 @@ -1576,6 +1588,9 @@ packages: '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1662,77 +1677,74 @@ packages: resolution: {integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unocss/cli@66.6.6': - resolution: {integrity: sha512-78SY8j4hAVelK+vP/adsDGaSjEITasYLFECJLHWxUJSzK+G9UIc5wtL/u4jA+zKvwVkHcDvbkcO5K6wwwpAixg==} - engines: {node: '>=14'} + '@unocss/cli@66.7.5': + resolution: {integrity: sha512-fgWkECRn2LGVo9sEpmjk/KJ3NSKUDitaZCNrJcEYM93DG+ELriTHcL+VWBlF4rcZf9fdGlq1nKbbRHUZirFCHQ==} hasBin: true - '@unocss/config@66.6.6': - resolution: {integrity: sha512-menlnkqAFX/4wR2aandY8hSqrt01JE+rOzvtQxWaBt8kf1du62b0sS72FE5Z40n6HlEsEbF91N9FCfhnzG6i6g==} - engines: {node: '>=14'} + '@unocss/config@66.7.5': + resolution: {integrity: sha512-dkPl9glhEahJ+Xoja5ZseKKnH+vZaeaKQzg8b0otcKcPPNrHQgu1nu3QgfeOjnXOGrjZIotHwUeVtt4ZA2Skgg==} - '@unocss/core@66.6.6': - resolution: {integrity: sha512-Sbbx0ZQqmV8K2lg8E+z9MJzWb1MgRtJnvqzxDIrNuBjXasKhbcFt5wEMBtEZJOr63Z4ck0xThhZK53HmYT2jmg==} + '@unocss/core@66.7.5': + resolution: {integrity: sha512-UdJb8MiMywcau8QrWEVgUAz0kvoFHyR+sACwYCgmBh/BpKJGyR/zw/Ys3wvysbm0f+i/20VGBex/QQxYVlzdyQ==} - '@unocss/extractor-arbitrary-variants@66.6.6': - resolution: {integrity: sha512-uMzekF2miZRUwSZGvy3yYQiBAcSAs9LiXK8e3NjldxEw8xcRDWgTErxgStRoBeAD6UyzDcg/Cvwtf2guMbtR+g==} + '@unocss/extractor-arbitrary-variants@66.7.5': + resolution: {integrity: sha512-5zOkbnLIJc8E749qNjLXfPHl3FdHloop12h706/ojr6idK4ix0KLm43R//uLnphixCehdHJRuHnavnM4C/kQbA==} - '@unocss/extractor-svelte@66.6.6': - resolution: {integrity: sha512-5+Et3jiSFlMqxkoyVLsoT2/Rd8x/Jd65i5KzIyXMtQccDmqN2wSXuyvB2h5sLauHn4bBe/qOWO3PfGjbXBGWOA==} + '@unocss/extractor-svelte@66.7.5': + resolution: {integrity: sha512-9H6uQ5MvNIEJ6AshxPeCFkbCloDInEETq0OOVusd79vSi4SJKvWvLOnd7Wnnc24JrKt59qTnb9dJi1ZNAgkGUw==} - '@unocss/inspector@66.6.6': - resolution: {integrity: sha512-CpXIsqHwxCXJtUjUz6S29diHCIA+EJ1u5WML/6m2YPI4ObgWAVKrExy09inSg2icS52lFkWWdWQSeqc9kl5W6Q==} + '@unocss/inspector@66.7.5': + resolution: {integrity: sha512-WmTJMnj8bmRxvw/wGeShmL2eEHr2/L0BdGTXSxhfzwcO8y5XZEbBmVciLcM7pqaTXQ6JY4+KnITrDUf1urjZxQ==} - '@unocss/preset-attributify@66.6.6': - resolution: {integrity: sha512-3H12UI1rBt60PQy+S4IEeFYWu1/WQFuc2yhJ5mu/RCvX5/qwlIGanBpuh+xzTPXU1fWBlZN68yyO9uWOQgTqZQ==} + '@unocss/preset-attributify@66.7.5': + resolution: {integrity: sha512-1Oi1Cp81pqYJwG3h4+OlP5A0FKyaa07MFBXaXc4Yr3faiTbsI8SKj2TqnZCb+NQvBsEqslEd+jKXGZ3lKzCVOQ==} - '@unocss/preset-icons@66.6.6': - resolution: {integrity: sha512-HfIEEqf3jyKexOB2Sux556n0NkPoUftb2H4+Cf7prJvKHopMkZ/OUkXjwvUlxt1e5UpAEaIa0A2Ir7+ApxXoGA==} + '@unocss/preset-icons@66.7.5': + resolution: {integrity: sha512-ZsxadWnGGtHdANTikuMnjkQaT1qwUFJHZBF4fzVsPMnUiiKGs8rzXukwM9w3Gi9ontM7nbG2FYi9clWETSlpFg==} - '@unocss/preset-mini@66.6.6': - resolution: {integrity: sha512-k+/95PKMPOK57cJcSmz34VkIFem8BlujRRx6/L0Yusw7vLJMh98k0rPhC5s+NomZ/d9ZPgbNylskLhItJlak3w==} + '@unocss/preset-mini@66.7.5': + resolution: {integrity: sha512-o37TSl4ecT0dKu+3/TYuTYht75h82SEwDNl476m9ve0KW4Pv1O2tT/9TWd7N5cutEpySr8/YtjMwtWBD+drxBg==} - '@unocss/preset-tagify@66.6.6': - resolution: {integrity: sha512-KgBXYPYS0g4TVC3NLiIB78YIqUlvDLanz1EHIDo34rOTUfMgY8Uf5VuDJAzMu4Sc0LiwwBJbk6nIG9/Zm7ufWg==} + '@unocss/preset-tagify@66.7.5': + resolution: {integrity: sha512-/8YB1tXVi+WmNKPhsCdtO1xnQKEkshSnWDp6AbvVP3f6qOF7adlMYpAt3kpWCoVUBsfOQ06ZQlnfricMjObyoQ==} - '@unocss/preset-typography@66.6.6': - resolution: {integrity: sha512-SM1km5nqt15z4sTabfOobSC633I5Ol5nnme6JFTra4wiyCUNs+Cg31nJ6jnopWDUT4SEAXqfUH7jKSSoCnI6ZA==} + '@unocss/preset-typography@66.7.5': + resolution: {integrity: sha512-2dxC8LT9KYa29UZT4muDFl7DbIXvKktTfeSMbUGMdZKbHcuMtKSP2U52wti1PL5I9duqp4v+8G33EeVutGTUaQ==} - '@unocss/preset-uno@66.6.6': - resolution: {integrity: sha512-40PcBDtlhW7QP7e/WOxC684IhN5T1dXvj1dgx9ZzK+8lEDGjcX7bN2noW4aSenzSrHymeSsMrL/0ltL4ED/5Zw==} + '@unocss/preset-uno@66.7.5': + resolution: {integrity: sha512-zaUlYgNngbt50fZA/LbtsEnmPKojPqeiXCyUUiKQMv2uJQhncR32xhLZXVQ+TJD7hlfZ+6FAqlco1NIiAcub9w==} - '@unocss/preset-web-fonts@66.6.6': - resolution: {integrity: sha512-5ikwgrJB8VPzKd0bqgGNgYUGix90KFnVtKJPjWTP5qsv3+ZtZnea1rRbAFl8i2t52hg35msNBsQo+40IC3xB6A==} + '@unocss/preset-web-fonts@66.7.5': + resolution: {integrity: sha512-OLLTK7kswdSu51qxEm6O+AehecgCfS08Ivqo+280lKzFW7V1jXr5okeJ1ty+85oHCprJqzcD9iG1khxNRLomcA==} - '@unocss/preset-wind3@66.6.6': - resolution: {integrity: sha512-rk6gPPIQ7z2DVucOqp7XZ4vGpKAuzBV1vtUDvDh5WscxzO/QlqaeTfTALk5YgGpmLaF4+ns6FrTgLjV+wHgHuQ==} + '@unocss/preset-wind3@66.7.5': + resolution: {integrity: sha512-atFe/7Qein+oMdyZs0hEo+3EjV99Av2LVxDbzpCungxIfbS3TnQt70EIuHXMPNCVWLYwrMV+/P1n9Ntb0E3mow==} - '@unocss/preset-wind4@66.6.6': - resolution: {integrity: sha512-caTDM9rZSlp4tyPWWAnwMvQr2PXq53LsEYwd3N8zj0ou2hcsqptJvF+mFvyhvGF66x26wWJr/FwuUEhh7qycaw==} + '@unocss/preset-wind4@66.7.5': + resolution: {integrity: sha512-n3jIvQv8x1jXpmWfvNFBIqHNARki4mKZXfxAA31gekpXsRRTg16u1+yC1+PBBJgoEDFEnnmKnG7EZP88S8LVXA==} - '@unocss/preset-wind@66.6.6': - resolution: {integrity: sha512-TMy3lZ35FP/4QqDHOLWZmV+RoOGWUDqnDEOTjOKI1CQARGta0ppUmq+IZMuI1ZJLuOa4OZ9V6SfnwMXwRLgXmw==} + '@unocss/preset-wind@66.7.5': + resolution: {integrity: sha512-LVKgGr0A9Lc7F85xGXrrb71DDXMlHGA8bcj/Kht8BCsuRdBZadNbLlnv5qnSJiHYhi3/blzcgVoaeRor6L9yNA==} - '@unocss/rule-utils@66.6.6': - resolution: {integrity: sha512-krWtQKGshOaqQMuxeGq1NOA8NL35VdpYlmQEWOe39BY6TACT51bgQFu40MRfsAIMZZtoGS2YYTrnHojgR92omw==} - engines: {node: '>=14'} + '@unocss/rule-utils@66.7.5': + resolution: {integrity: sha512-/AKHBRF6ZOexE3EDDv8ZEYh40P5e2Eha41IYUbE1wjigW7++ssmvimSTdufJzZvU5DGP++E3B3WEsFPprZMjAg==} - '@unocss/transformer-attributify-jsx@66.6.6': - resolution: {integrity: sha512-NnDchmN2EeFLy4lfVqDgNe9j1+w2RLL2L9zKECXs5g6rDVfeeEK6FNgxSq3XnPcKltjNCy1pF4MaDOROG7r8yA==} + '@unocss/transformer-attributify-jsx@66.7.5': + resolution: {integrity: sha512-r8qDwNSt0eGSwWws3xsuIHb3PZYR2embFdYoE67hD/xlYgLjX1uPy/HUlGCSSh4uLc4vVYjurr0Oq5xF/B8YiA==} - '@unocss/transformer-compile-class@66.6.6': - resolution: {integrity: sha512-KKssJxU8fZ9x84yznIirbtta2sB0LN/3lm0bp+Wl1298HITaNiVeG2n26iStQ3N7r240xRN2RarxncSVCMFwWw==} + '@unocss/transformer-compile-class@66.7.5': + resolution: {integrity: sha512-KuECgsGF7tGe808vIvKViEjI0UCUgYgneJfK+/TWBkjC7s8dLVaUtJzzcP9/r6OfGlgyn/x1YTdRqTaCENa7Xg==} - '@unocss/transformer-directives@66.6.6': - resolution: {integrity: sha512-CReFTcBfMtKkRvzIqxL20VptWt5C1Om27dwoKzyVFBXv0jzViWysbu0y0AQg3bsgD4cFqndFyAGyeL84j0nbKg==} + '@unocss/transformer-directives@66.7.5': + resolution: {integrity: sha512-VMJApXXOwlDubkW+cNMmOkfxLefFupJr+yU23gGYUB2NPsuVltc8H5CDM0gfVebpeL5CUW05evxzEAk2wsju+Q==} - '@unocss/transformer-variant-group@66.6.6': - resolution: {integrity: sha512-j4L/0Tw6AdMVB2dDnuBlDbevyL1/0CAk88a77VF/VjgEIBwB9VXsCCUsxz+2Dohcl7N2GMm7+kpaWA6qt2PSaA==} + '@unocss/transformer-variant-group@66.7.5': + resolution: {integrity: sha512-iDmP3mM8J+IxuQf5Uh33zsi528xnGxTpKRJ0c+LCrqBTTkR2tZr4aCzNmJ0g29Js2yEOsyNXRRc8BNTuvgn0AA==} - '@unocss/vite@66.6.6': - resolution: {integrity: sha512-DgG7KcUUMtoDhPOlFf2l4dR+66xZ23SdZvTYpikk5nZfLCzZd62vedutD7x0bTR6VpK2YRq39B+F+Z6TktNY/w==} + '@unocss/vite@66.7.5': + resolution: {integrity: sha512-1z1TBCNJCR2WzjPtjzmCHr8rtzXHosMjLdsCNe6Mzsfwiw044gzzLVuiEZO9vIjkI50lvQ+gIOxOiVQG0hGAeA==} peerDependencies: - vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 + vite: ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 '@vitest/expect@4.1.0': resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} @@ -1812,9 +1824,9 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + cac@7.0.0: + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} + engines: {node: '>=20.19.0'} chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} @@ -1869,8 +1881,8 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} debug@4.4.3: @@ -1974,8 +1986,8 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.8: - resolution: {integrity: sha512-MPweq2EvEGj8jwOI7Hgycw/QIHzqA1EbAM8lG7p+FBfZbZq/hQ6h3AMsqnu/djzisH1KVWNzbb7LSgIVtMlPSg==} + esrap@2.2.13: + resolution: {integrity: sha512-m8jH5hZgJE2RRUK/jjkGPcJEDAV+dYnZYFkosQaPTcE+Yw4xynXHOo6FUdwaWBtdR3b1MMa7wEDTSHeR2VWsGA==} peerDependencies: '@typescript-eslint/types': ^8.2.0 peerDependenciesMeta: @@ -2100,6 +2112,9 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2244,8 +2259,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -2300,8 +2315,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxc-parser@0.115.0: - resolution: {integrity: sha512-2w7Xn3CbS/zwzSY82S5WLemrRu3CT57uF7Lx8llrE/2bul6iMTcJE4Rbls7GDNbLn3ttATI68PfOz2Pt3KZ2cQ==} + oxc-parser@0.131.0: + resolution: {integrity: sha512-SJ3/7ZPbgie8dr5Z9BI/M51zZbpXba+hRSG0MDzVwMW5CRQg2fjYE0jHGlLX4eeiibGgC/mzoDFKSDHwVZEHRQ==} engines: {node: ^20.19.0 || >=22.12.0} oxc-walker@0.7.0: @@ -2351,11 +2366,15 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2394,8 +2413,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.0.3: - resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2477,8 +2496,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte@5.55.7: - resolution: {integrity: sha512-ymI5ykLPwIHW839E053FQbI1G+jnRFJEw3Kv5Y4njixVWywQBx+NUFpkkKyk5LIb36Fg9DVXSYpqiGekLD0hyw==} + svelte@5.56.4: + resolution: {integrity: sha512-/d0QHehmRuJW8gVz395MTkPcPozxzdjBMBE8oEYGz8O3b9KTMzzQ9ZHJQLuFKOHOPQbU6kx/X4iid/EBBzH7iw==} engines: {node: '>=18'} terser@5.46.0: @@ -2562,13 +2581,12 @@ packages: universal-user-agent@7.0.3: resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - unocss@66.6.6: - resolution: {integrity: sha512-PRKK945e2oZKHV664MA5Z9CDHbvY/V79IvTOUWKZ514jpl3UsJU3sS+skgxmKJSmwrWvXE5OVcmPthJrD/7vxg==} - engines: {node: '>=14'} + unocss@66.7.5: + resolution: {integrity: sha512-nAdmU8TwnQoiLnQjZ6Hm1GmHy9lTexKsAZNEJtZnxN9wyFRc1eLjQgmh9r7UEGxBQMQLD8OZOgmk5HpwObbh0Q==} peerDependencies: - '@unocss/astro': 66.6.6 - '@unocss/postcss': 66.6.6 - '@unocss/webpack': 66.6.6 + '@unocss/astro': 66.7.5 + '@unocss/postcss': 66.7.5 + '@unocss/webpack': 66.7.5 peerDependenciesMeta: '@unocss/astro': optional: true @@ -2588,13 +2606,13 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - vite@8.0.16: - resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} + vite@8.1.4: + resolution: {integrity: sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 + '@vitejs/devtools': ^0.3.0 esbuild: '>=0.28.1' jiti: '>=1.21.0' less: ^4.0.0 @@ -2771,6 +2789,12 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 @@ -2786,6 +2810,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + '@epic-web/invariant@1.0.0': {} '@esbuild/aix-ppc64@0.28.1': @@ -2921,11 +2950,11 @@ snapshots: '@iconify/types@2.0.0': {} - '@iconify/utils@3.1.0': + '@iconify/utils@3.1.4': dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/types': 2.0.0 - mlly: 1.8.0 + import-meta-resolve: 4.2.0 '@img/colour@1.1.0': {} @@ -3171,11 +3200,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@napi-rs/cli@3.7.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)(@types/node@24.11.0)': + '@napi-rs/cli@3.7.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@24.11.0)': dependencies: '@inquirer/prompts': 8.5.2(@types/node@24.11.0) - '@napi-rs/cross-toolchain': 1.0.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) - '@napi-rs/wasm-tools': 1.0.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + '@napi-rs/cross-toolchain': 1.0.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-tools': 1.0.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@octokit/rest': 22.0.1 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 @@ -3203,10 +3232,10 @@ snapshots: - node-addon-api - supports-color - '@napi-rs/cross-toolchain@1.0.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@napi-rs/cross-toolchain@1.0.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/lzma': 1.4.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) - '@napi-rs/tar': 1.1.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + '@napi-rs/lzma': 1.4.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@napi-rs/tar': 1.1.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) debug: 4.4.3 transitivePeerDependencies: - '@emnapi/core' @@ -3252,9 +3281,9 @@ snapshots: '@napi-rs/lzma-linux-x64-musl@1.4.5': optional: true - '@napi-rs/lzma-wasm32-wasi@1.4.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@napi-rs/lzma-wasm32-wasi@1.4.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -3269,7 +3298,7 @@ snapshots: '@napi-rs/lzma-win32-x64-msvc@1.4.5': optional: true - '@napi-rs/lzma@1.4.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@napi-rs/lzma@1.4.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': optionalDependencies: '@napi-rs/lzma-android-arm-eabi': 1.4.5 '@napi-rs/lzma-android-arm64': 1.4.5 @@ -3284,7 +3313,7 @@ snapshots: '@napi-rs/lzma-linux-s390x-gnu': 1.4.5 '@napi-rs/lzma-linux-x64-gnu': 1.4.5 '@napi-rs/lzma-linux-x64-musl': 1.4.5 - '@napi-rs/lzma-wasm32-wasi': 1.4.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + '@napi-rs/lzma-wasm32-wasi': 1.4.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@napi-rs/lzma-win32-arm64-msvc': 1.4.5 '@napi-rs/lzma-win32-ia32-msvc': 1.4.5 '@napi-rs/lzma-win32-x64-msvc': 1.4.5 @@ -3328,9 +3357,9 @@ snapshots: '@napi-rs/tar-linux-x64-musl@1.1.0': optional: true - '@napi-rs/tar-wasm32-wasi@1.1.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@napi-rs/tar-wasm32-wasi@1.1.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -3345,7 +3374,7 @@ snapshots: '@napi-rs/tar-win32-x64-msvc@1.1.0': optional: true - '@napi-rs/tar@1.1.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@napi-rs/tar@1.1.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': optionalDependencies: '@napi-rs/tar-android-arm-eabi': 1.1.0 '@napi-rs/tar-android-arm64': 1.1.0 @@ -3359,7 +3388,7 @@ snapshots: '@napi-rs/tar-linux-s390x-gnu': 1.1.0 '@napi-rs/tar-linux-x64-gnu': 1.1.0 '@napi-rs/tar-linux-x64-musl': 1.1.0 - '@napi-rs/tar-wasm32-wasi': 1.1.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + '@napi-rs/tar-wasm32-wasi': 1.1.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@napi-rs/tar-win32-arm64-msvc': 1.1.0 '@napi-rs/tar-win32-ia32-msvc': 1.1.0 '@napi-rs/tar-win32-x64-msvc': 1.1.0 @@ -3374,13 +3403,20 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true - '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@emnapi/core': 1.10.0 + '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 '@tybys/wasm-util': 0.10.2 optional: true + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + '@napi-rs/wasm-tools-android-arm-eabi@1.0.1': optional: true @@ -3408,9 +3444,9 @@ snapshots: '@napi-rs/wasm-tools-linux-x64-musl@1.0.1': optional: true - '@napi-rs/wasm-tools-wasm32-wasi@1.0.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-tools-wasm32-wasi@1.0.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -3425,7 +3461,7 @@ snapshots: '@napi-rs/wasm-tools-win32-x64-msvc@1.0.1': optional: true - '@napi-rs/wasm-tools@1.0.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-tools@1.0.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': optionalDependencies: '@napi-rs/wasm-tools-android-arm-eabi': 1.0.1 '@napi-rs/wasm-tools-android-arm64': 1.0.1 @@ -3436,7 +3472,7 @@ snapshots: '@napi-rs/wasm-tools-linux-arm64-musl': 1.0.1 '@napi-rs/wasm-tools-linux-x64-gnu': 1.0.1 '@napi-rs/wasm-tools-linux-x64-musl': 1.0.1 - '@napi-rs/wasm-tools-wasm32-wasi': 1.0.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-tools-wasm32-wasi': 1.0.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@napi-rs/wasm-tools-win32-arm64-msvc': 1.0.1 '@napi-rs/wasm-tools-win32-ia32-msvc': 1.0.1 '@napi-rs/wasm-tools-win32-x64-msvc': 1.0.1 @@ -3519,74 +3555,73 @@ snapshots: dependencies: '@octokit/openapi-types': 27.0.0 - '@oxc-parser/binding-android-arm-eabi@0.115.0': + '@oxc-parser/binding-android-arm-eabi@0.131.0': optional: true - '@oxc-parser/binding-android-arm64@0.115.0': + '@oxc-parser/binding-android-arm64@0.131.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.115.0': + '@oxc-parser/binding-darwin-arm64@0.131.0': optional: true - '@oxc-parser/binding-darwin-x64@0.115.0': + '@oxc-parser/binding-darwin-x64@0.131.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.115.0': + '@oxc-parser/binding-freebsd-x64@0.131.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.115.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.115.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.115.0': + '@oxc-parser/binding-linux-arm64-gnu@0.131.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.115.0': + '@oxc-parser/binding-linux-arm64-musl@0.131.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.115.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.115.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.115.0': + '@oxc-parser/binding-linux-riscv64-musl@0.131.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.115.0': + '@oxc-parser/binding-linux-s390x-gnu@0.131.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.115.0': + '@oxc-parser/binding-linux-x64-gnu@0.131.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.115.0': + '@oxc-parser/binding-linux-x64-musl@0.131.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.115.0': + '@oxc-parser/binding-openharmony-arm64@0.131.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.115.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@oxc-parser/binding-wasm32-wasi@0.131.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.115.0': + '@oxc-parser/binding-win32-arm64-msvc@0.131.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.115.0': + '@oxc-parser/binding-win32-ia32-msvc@0.131.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.115.0': + '@oxc-parser/binding-win32-x64-msvc@0.131.0': optional: true - '@oxc-project/types@0.115.0': {} + '@oxc-project/types@0.131.0': {} - '@oxc-project/types@0.133.0': {} + '@oxc-project/types@0.139.0': {} '@polka/url@1.0.0-next.29': {} @@ -3606,53 +3641,53 @@ snapshots: dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.0.3': + '@rolldown/binding-android-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-arm64@1.0.3': + '@rolldown/binding-darwin-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-x64@1.0.3': + '@rolldown/binding-darwin-x64@1.1.5': optional: true - '@rolldown/binding-freebsd-x64@1.0.3': + '@rolldown/binding-freebsd-x64@1.1.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.3': + '@rolldown/binding-linux-arm64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.3': + '@rolldown/binding-linux-arm64-musl@1.1.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.3': + '@rolldown/binding-linux-ppc64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.3': + '@rolldown/binding-linux-s390x-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.3': + '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-musl@1.0.3': + '@rolldown/binding-linux-x64-musl@1.1.5': optional: true - '@rolldown/binding-openharmony-arm64@1.0.3': + '@rolldown/binding-openharmony-arm64@1.1.5': optional: true - '@rolldown/binding-wasm32-wasi@1.0.3': + '@rolldown/binding-wasm32-wasi@1.1.5': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.3': + '@rolldown/binding-win32-arm64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.3': + '@rolldown/binding-win32-x64-msvc@1.1.5': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -3763,24 +3798,29 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': + '@sveltejs/acorn-typescript@1.0.11(acorn@8.16.0)': dependencies: acorn: 8.16.0 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.2))(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0))': + '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.58.2))(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.3 - svelte: 5.55.7(@typescript-eslint/types@8.58.2) - vite: 8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) - vitefu: 1.1.2(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) + svelte: 5.56.4(@typescript-eslint/types@8.58.2) + vite: 8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) + vitefu: 1.1.2(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -3898,15 +3938,15 @@ snapshots: '@typescript-eslint/types': 8.58.2 eslint-visitor-keys: 5.0.1 - '@unocss/cli@66.6.6': + '@unocss/cli@66.7.5': dependencies: '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.6.6 - '@unocss/core': 66.6.6 - '@unocss/preset-wind3': 66.6.6 - '@unocss/preset-wind4': 66.6.6 - '@unocss/transformer-directives': 66.6.6 - cac: 6.7.14 + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 + '@unocss/preset-wind4': 66.7.5 + '@unocss/transformer-directives': 66.7.5 + cac: 7.0.0 chokidar: 5.0.0 colorette: 2.0.20 consola: 3.4.2 @@ -3916,121 +3956,118 @@ snapshots: tinyglobby: 0.2.17 unplugin-utils: 0.3.1 - '@unocss/config@66.6.6': + '@unocss/config@66.7.5': dependencies: - '@unocss/core': 66.6.6 + '@unocss/core': 66.7.5 colorette: 2.0.20 consola: 3.4.2 unconfig: 7.5.0 - '@unocss/core@66.6.6': {} + '@unocss/core@66.7.5': {} - '@unocss/extractor-arbitrary-variants@66.6.6': + '@unocss/extractor-arbitrary-variants@66.7.5': dependencies: - '@unocss/core': 66.6.6 + '@unocss/core': 66.7.5 - '@unocss/extractor-svelte@66.6.6': {} + '@unocss/extractor-svelte@66.7.5': {} - '@unocss/inspector@66.6.6': + '@unocss/inspector@66.7.5': dependencies: - '@unocss/core': 66.6.6 - '@unocss/rule-utils': 66.6.6 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 colorette: 2.0.20 gzip-size: 6.0.0 sirv: 3.0.2 - '@unocss/preset-attributify@66.6.6': + '@unocss/preset-attributify@66.7.5': dependencies: - '@unocss/core': 66.6.6 + '@unocss/core': 66.7.5 - '@unocss/preset-icons@66.6.6': + '@unocss/preset-icons@66.7.5': dependencies: - '@iconify/utils': 3.1.0 - '@unocss/core': 66.6.6 + '@iconify/utils': 3.1.4 + '@unocss/core': 66.7.5 ofetch: 1.5.1 - '@unocss/preset-mini@66.6.6': + '@unocss/preset-mini@66.7.5': dependencies: - '@unocss/core': 66.6.6 - '@unocss/extractor-arbitrary-variants': 66.6.6 - '@unocss/rule-utils': 66.6.6 + '@unocss/core': 66.7.5 + '@unocss/extractor-arbitrary-variants': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-tagify@66.6.6': + '@unocss/preset-tagify@66.7.5': dependencies: - '@unocss/core': 66.6.6 + '@unocss/core': 66.7.5 - '@unocss/preset-typography@66.6.6': + '@unocss/preset-typography@66.7.5': dependencies: - '@unocss/core': 66.6.6 - '@unocss/rule-utils': 66.6.6 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-uno@66.6.6': + '@unocss/preset-uno@66.7.5': dependencies: - '@unocss/core': 66.6.6 - '@unocss/preset-wind3': 66.6.6 + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 - '@unocss/preset-web-fonts@66.6.6': + '@unocss/preset-web-fonts@66.7.5': dependencies: - '@unocss/core': 66.6.6 + '@unocss/core': 66.7.5 ofetch: 1.5.1 - '@unocss/preset-wind3@66.6.6': + '@unocss/preset-wind3@66.7.5': dependencies: - '@unocss/core': 66.6.6 - '@unocss/preset-mini': 66.6.6 - '@unocss/rule-utils': 66.6.6 + '@unocss/core': 66.7.5 + '@unocss/preset-mini': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-wind4@66.6.6': + '@unocss/preset-wind4@66.7.5': dependencies: - '@unocss/core': 66.6.6 - '@unocss/extractor-arbitrary-variants': 66.6.6 - '@unocss/rule-utils': 66.6.6 + '@unocss/core': 66.7.5 + '@unocss/extractor-arbitrary-variants': 66.7.5 + '@unocss/rule-utils': 66.7.5 - '@unocss/preset-wind@66.6.6': + '@unocss/preset-wind@66.7.5': dependencies: - '@unocss/core': 66.6.6 - '@unocss/preset-wind3': 66.6.6 + '@unocss/core': 66.7.5 + '@unocss/preset-wind3': 66.7.5 - '@unocss/rule-utils@66.6.6': + '@unocss/rule-utils@66.7.5': dependencies: - '@unocss/core': 66.6.6 + '@unocss/core': 66.7.5 magic-string: 0.30.21 - '@unocss/transformer-attributify-jsx@66.6.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)': + '@unocss/transformer-attributify-jsx@66.7.5': dependencies: - '@unocss/core': 66.6.6 - oxc-parser: 0.115.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) - oxc-walker: 0.7.0(oxc-parser@0.115.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@unocss/core': 66.7.5 + oxc-parser: 0.131.0 + oxc-walker: 0.7.0(oxc-parser@0.131.0) - '@unocss/transformer-compile-class@66.6.6': + '@unocss/transformer-compile-class@66.7.5': dependencies: - '@unocss/core': 66.6.6 + '@unocss/core': 66.7.5 - '@unocss/transformer-directives@66.6.6': + '@unocss/transformer-directives@66.7.5': dependencies: - '@unocss/core': 66.6.6 - '@unocss/rule-utils': 66.6.6 - css-tree: 3.1.0 + '@unocss/core': 66.7.5 + '@unocss/rule-utils': 66.7.5 + css-tree: 3.2.1 - '@unocss/transformer-variant-group@66.6.6': + '@unocss/transformer-variant-group@66.7.5': dependencies: - '@unocss/core': 66.6.6 + '@unocss/core': 66.7.5 - '@unocss/vite@66.6.6(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0))': + '@unocss/vite@66.7.5(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0))': dependencies: '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.6.6 - '@unocss/core': 66.6.6 - '@unocss/inspector': 66.6.6 + '@unocss/config': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/inspector': 66.7.5 chokidar: 5.0.0 magic-string: 0.30.21 pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.1 - vite: 8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) + vite: 8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) '@vitest/expect@4.1.0': dependencies: @@ -4041,13 +4078,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.0(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0))': + '@vitest/mocker@4.1.0(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) + vite: 8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) '@vitest/pretty-format@4.1.0': dependencies: @@ -4110,7 +4147,7 @@ snapshots: buffer-from@1.1.2: {} - cac@6.7.14: {} + cac@7.0.0: {} chai@6.2.2: {} @@ -4151,9 +4188,9 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-tree@3.1.0: + css-tree@3.2.1: dependencies: - mdn-data: 2.12.2 + mdn-data: 2.27.1 source-map-js: 1.2.1 debug@4.4.3: @@ -4281,7 +4318,7 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.8(@typescript-eslint/types@8.58.2): + esrap@2.2.13(@typescript-eslint/types@8.58.2): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 optionalDependencies: @@ -4388,6 +4425,8 @@ snapshots: ignore@7.0.5: {} + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} is-core-module@2.16.1: @@ -4502,7 +4541,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - mdn-data@2.12.2: {} + mdn-data@2.27.1: {} merge2@1.4.1: {} @@ -4563,38 +4602,35 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxc-parser@0.115.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1): + oxc-parser@0.131.0: dependencies: - '@oxc-project/types': 0.115.0 + '@oxc-project/types': 0.131.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.115.0 - '@oxc-parser/binding-android-arm64': 0.115.0 - '@oxc-parser/binding-darwin-arm64': 0.115.0 - '@oxc-parser/binding-darwin-x64': 0.115.0 - '@oxc-parser/binding-freebsd-x64': 0.115.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.115.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.115.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.115.0 - '@oxc-parser/binding-linux-arm64-musl': 0.115.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.115.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.115.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.115.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.115.0 - '@oxc-parser/binding-linux-x64-gnu': 0.115.0 - '@oxc-parser/binding-linux-x64-musl': 0.115.0 - '@oxc-parser/binding-openharmony-arm64': 0.115.0 - '@oxc-parser/binding-wasm32-wasi': 0.115.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) - '@oxc-parser/binding-win32-arm64-msvc': 0.115.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.115.0 - '@oxc-parser/binding-win32-x64-msvc': 0.115.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-walker@0.7.0(oxc-parser@0.115.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)): + '@oxc-parser/binding-android-arm-eabi': 0.131.0 + '@oxc-parser/binding-android-arm64': 0.131.0 + '@oxc-parser/binding-darwin-arm64': 0.131.0 + '@oxc-parser/binding-darwin-x64': 0.131.0 + '@oxc-parser/binding-freebsd-x64': 0.131.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.131.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.131.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.131.0 + '@oxc-parser/binding-linux-arm64-musl': 0.131.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.131.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.131.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.131.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.131.0 + '@oxc-parser/binding-linux-x64-gnu': 0.131.0 + '@oxc-parser/binding-linux-x64-musl': 0.131.0 + '@oxc-parser/binding-openharmony-arm64': 0.131.0 + '@oxc-parser/binding-wasm32-wasi': 0.131.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.131.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.131.0 + '@oxc-parser/binding-win32-x64-msvc': 0.131.0 + + oxc-walker@0.7.0(oxc-parser@0.131.0): dependencies: magic-regexp: 0.10.0 - oxc-parser: 0.115.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) + oxc-parser: 0.131.0 p-limit@3.1.0: dependencies: @@ -4624,13 +4660,15 @@ snapshots: picomatch@4.0.4: {} + picomatch@4.0.5: {} + pkg-types@1.3.1: dependencies: confbox: 0.1.8 mlly: 1.8.0 pathe: 2.0.3 - postcss@8.5.15: + postcss@8.5.16: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -4658,26 +4696,26 @@ snapshots: reusify@1.1.0: {} - rolldown@1.0.3: + rolldown@1.1.5: dependencies: - '@oxc-project/types': 0.133.0 + '@oxc-project/types': 0.139.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.3 - '@rolldown/binding-darwin-arm64': 1.0.3 - '@rolldown/binding-darwin-x64': 1.0.3 - '@rolldown/binding-freebsd-x64': 1.0.3 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 - '@rolldown/binding-linux-arm64-gnu': 1.0.3 - '@rolldown/binding-linux-arm64-musl': 1.0.3 - '@rolldown/binding-linux-ppc64-gnu': 1.0.3 - '@rolldown/binding-linux-s390x-gnu': 1.0.3 - '@rolldown/binding-linux-x64-gnu': 1.0.3 - '@rolldown/binding-linux-x64-musl': 1.0.3 - '@rolldown/binding-openharmony-arm64': 1.0.3 - '@rolldown/binding-wasm32-wasi': 1.0.3 - '@rolldown/binding-win32-arm64-msvc': 1.0.3 - '@rolldown/binding-win32-x64-msvc': 1.0.3 + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 rollup@4.62.2: dependencies: @@ -4792,11 +4830,11 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.55.7(@typescript-eslint/types@8.58.2): + svelte@5.56.4(@typescript-eslint/types@8.58.2): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@sveltejs/acorn-typescript': 1.0.11(acorn@8.16.0) '@types/estree': 1.0.9 '@types/trusted-types': 2.0.7 acorn: 8.16.0 @@ -4805,7 +4843,7 @@ snapshots: clsx: 2.1.1 devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.8(@typescript-eslint/types@8.58.2) + esrap: 2.2.13(@typescript-eslint/types@8.58.2) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -4889,28 +4927,26 @@ snapshots: universal-user-agent@7.0.3: {} - unocss@66.6.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1)(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)): - dependencies: - '@unocss/cli': 66.6.6 - '@unocss/core': 66.6.6 - '@unocss/preset-attributify': 66.6.6 - '@unocss/preset-icons': 66.6.6 - '@unocss/preset-mini': 66.6.6 - '@unocss/preset-tagify': 66.6.6 - '@unocss/preset-typography': 66.6.6 - '@unocss/preset-uno': 66.6.6 - '@unocss/preset-web-fonts': 66.6.6 - '@unocss/preset-wind': 66.6.6 - '@unocss/preset-wind3': 66.6.6 - '@unocss/preset-wind4': 66.6.6 - '@unocss/transformer-attributify-jsx': 66.6.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.11.1) - '@unocss/transformer-compile-class': 66.6.6 - '@unocss/transformer-directives': 66.6.6 - '@unocss/transformer-variant-group': 66.6.6 - '@unocss/vite': 66.6.6(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) + unocss@66.7.5(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)): + dependencies: + '@unocss/cli': 66.7.5 + '@unocss/core': 66.7.5 + '@unocss/preset-attributify': 66.7.5 + '@unocss/preset-icons': 66.7.5 + '@unocss/preset-mini': 66.7.5 + '@unocss/preset-tagify': 66.7.5 + '@unocss/preset-typography': 66.7.5 + '@unocss/preset-uno': 66.7.5 + '@unocss/preset-web-fonts': 66.7.5 + '@unocss/preset-wind': 66.7.5 + '@unocss/preset-wind3': 66.7.5 + '@unocss/preset-wind4': 66.7.5 + '@unocss/transformer-attributify-jsx': 66.7.5 + '@unocss/transformer-compile-class': 66.7.5 + '@unocss/transformer-directives': 66.7.5 + '@unocss/transformer-variant-group': 66.7.5 + '@unocss/vite': 66.7.5(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - vite unplugin-utils@0.3.1: @@ -4929,12 +4965,12 @@ snapshots: dependencies: punycode: 2.3.1 - vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0): + vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0): dependencies: lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.15 - rolldown: 1.0.3 + picomatch: 4.0.5 + postcss: 8.5.16 + rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 24.11.0 @@ -4943,14 +4979,14 @@ snapshots: jiti: 2.6.1 terser: 5.46.0 - vitefu@1.1.2(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)): + vitefu@1.1.2(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)): optionalDependencies: - vite: 8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) + vite: 8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) - vitest@4.1.0(@types/node@24.11.0)(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)): + vitest@4.1.0(@types/node@24.11.0)(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) + '@vitest/mocker': 4.1.0(vite@8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -4967,7 +5003,7 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.0.16(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) + vite: 8.1.4(@types/node@24.11.0)(esbuild@0.28.1)(jiti@2.6.1)(terser@5.46.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.11.0 From a700e241bdd0d120b0ce762e2a6db9ec3c40c5ee Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 15:15:34 +0800 Subject: [PATCH 21/46] Make dragging with states work --- .../api/src/components/MenuItemBuilder.svelte | 112 +++++++----------- .../src/components/MenuItemComponent.svelte | 39 ++++-- 2 files changed, 72 insertions(+), 79 deletions(-) diff --git a/examples/api/src/components/MenuItemBuilder.svelte b/examples/api/src/components/MenuItemBuilder.svelte index 1bc5f3898a1f..b5781e350312 100644 --- a/examples/api/src/components/MenuItemBuilder.svelte +++ b/examples/api/src/components/MenuItemBuilder.svelte @@ -17,7 +17,9 @@ } from './MenuBuilder.svelte' import Sortable from 'sortablejs' import { onMount } from 'svelte' - import MenuItemComponent from './MenuItemComponent.svelte' + import MenuItemComponent, { + type MenuItemComponentKind + } from './MenuItemComponent.svelte' type PredefinedItem = PredefinedMenuItemOptions['item'] @@ -131,6 +133,17 @@ // return workArray // } + const targetList: { + kind: MenuItemComponentKind + text: string | undefined + iconPath: string | undefined + checked: boolean | undefined + }[] = $state([]) + + $effect(() => { + $inspect(targetList) + }) + let sourceSortableEl1: HTMLElement let sourceSortableEl2: HTMLElement let targetSortableEl: HTMLElement @@ -156,6 +169,25 @@ group: { name: 'shared' }, + onAdd(event) { + const item = event.item + const kind = item.dataset.kind as MenuItemComponentKind + const text = item.dataset.text + const iconPath = item.dataset.iconPath + const checked = item.dataset.checked + const newItem = { + kind, + text, + iconPath, + checked: checked !== undefined ? checked === 'true' : checked + } + if (event.newIndex !== undefined) { + targetList.splice(event.newIndex, 0, newItem) + } else { + targetList.push(newItem) + } + item.remove() + }, delayOnTouchOnly: true, delay: 500, animation: 200 @@ -173,9 +205,9 @@

Custom

- - - + + +
@@ -191,67 +223,15 @@
-
-
- - +
+
diff --git a/examples/api/src/components/MenuItemComponent.svelte b/examples/api/src/components/MenuItemComponent.svelte index c8e3ed60805d..87063b39de29 100644 --- a/examples/api/src/components/MenuItemComponent.svelte +++ b/examples/api/src/components/MenuItemComponent.svelte @@ -1,42 +1,55 @@ - - const { + From ed4f25c6e9511a3a67e7f507b00900ea42ddc3b2 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 16:03:52 +0800 Subject: [PATCH 22/46] Fix sorting --- .../api/src/components/MenuItemBuilder.svelte | 46 ++++++++----------- .../src/components/MenuItemComponent.svelte | 3 ++ 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/examples/api/src/components/MenuItemBuilder.svelte b/examples/api/src/components/MenuItemBuilder.svelte index b5781e350312..f760069759ad 100644 --- a/examples/api/src/components/MenuItemBuilder.svelte +++ b/examples/api/src/components/MenuItemBuilder.svelte @@ -105,35 +105,10 @@ predefinedItem = undefined } - // function reorder( - // array: T[], - // evt: Sortable.SortableEvent - // ): $state.Snapshot[] { - // // should have no effect on stores or regular array - // const workArray = $state.snapshot(array) - - // // get changes - // const { oldIndex, newIndex } = evt - - // if (oldIndex === undefined || newIndex === undefined) { - // return workArray - // } - // if (newIndex === oldIndex) { - // return workArray - // } - - // // move elements - // const target = workArray[oldIndex] - // const increment = newIndex < oldIndex ? -1 : 1 - - // for (let k = oldIndex; k !== newIndex; k += increment) { - // workArray[k] = workArray[k + increment] - // } - // workArray[newIndex] = target - // return workArray - // } + let currentId = 0 const targetList: { + id: number kind: MenuItemComponentKind text: string | undefined iconPath: string | undefined @@ -166,6 +141,7 @@ const sourceSortable1 = makeSourceSortable(sourceSortableEl1) const sourceSortable2 = makeSourceSortable(sourceSortableEl2) const targetSortable = new Sortable(targetSortableEl, { + dataIdAttr: 'data-id', group: { name: 'shared' }, @@ -176,18 +152,31 @@ const iconPath = item.dataset.iconPath const checked = item.dataset.checked const newItem = { + id: currentId, kind, text, iconPath, checked: checked !== undefined ? checked === 'true' : checked } + currentId += 1 if (event.newIndex !== undefined) { targetList.splice(event.newIndex, 0, newItem) } else { targetList.push(newItem) } + // HACK: We can't track the element created by Sortable, + // just make a new one and delete the one from Sortable item.remove() }, + onUpdate(event) { + // HACK: Svelte `#each` can't track external changes, + // and will revert changes made by Sortable, + // so we store the order and restore it after updating the svelte state + const order = targetSortable.toArray() + const [item] = targetList.splice(event.oldIndex!, 1) + targetList.splice(event.newIndex!, 0, item!) + targetSortable.sort(order) + }, delayOnTouchOnly: true, delay: 500, animation: 200 @@ -224,9 +213,10 @@ bind:this={targetSortableEl} class="p-2 border border-solid border-neutral-300 rounded-md max-w-lg min-h-24 grid items-start gap-1" > - {#each targetList as item} + {#each targetList as item (item.id)} let { + id, kind, text = $bindable(), iconPath = $bindable(), checked = $bindable() }: { + id?: number kind: MenuItemComponentKind text?: string iconPath?: string @@ -29,6 +31,7 @@ data-text={text} data-icon-path={iconPath} data-checked={checked} + data-id={id} > {kind} {#if text !== undefined} From 0866502440d298db42334c9385433a723da1f44c Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 16:15:14 +0800 Subject: [PATCH 23/46] Move everything to `MenuBuilder.svelte` --- .../api/src/components/MenuBuilder.svelte | 232 +++++++++++++++--- .../api/src/components/MenuItemBuilder.svelte | 227 ----------------- 2 files changed, 193 insertions(+), 266 deletions(-) delete mode 100644 examples/api/src/components/MenuItemBuilder.svelte diff --git a/examples/api/src/components/MenuBuilder.svelte b/examples/api/src/components/MenuBuilder.svelte index 006afecf5201..6d2cacafc081 100644 --- a/examples/api/src/components/MenuBuilder.svelte +++ b/examples/api/src/components/MenuBuilder.svelte @@ -1,13 +1,13 @@ -
- + onMount(() => { + const sourceSortable1 = makeSourceSortable(sourceSortableEl1) + const sourceSortable2 = makeSourceSortable(sourceSortableEl2) + const targetSortable = new Sortable(targetSortableEl, { + dataIdAttr: 'data-id', + group: { + name: 'shared' + }, + onAdd(event) { + const item = event.item + const kind = item.dataset.kind as MenuItemComponentKind + const text = item.dataset.text + const iconPath = item.dataset.iconPath + const checked = item.dataset.checked + const newItem = { + id: currentId, + kind, + text, + iconPath, + checked: checked !== undefined ? checked === 'true' : checked + } + currentId += 1 + if (event.newIndex !== undefined) { + targetList.splice(event.newIndex, 0, newItem) + } else { + targetList.push(newItem) + } + // HACK: We can't track the element created by Sortable, + // just make a new one and delete the one from Sortable + item.remove() + }, + onUpdate(event) { + // HACK: Svelte `#each` can't track external changes, + // and will revert changes made by Sortable, + // so we store the order and restore it after updating the svelte state + const order = targetSortable.toArray() + const [item] = targetList.splice(event.oldIndex!, 1) + targetList.splice(event.newIndex!, 0, item!) + targetSortable.sort(order) + }, + delayOnTouchOnly: true, + delay: 500, + animation: 200 + }) + return () => { + targetSortable.destroy() + sourceSortable1.destroy() + sourceSortable2.destroy() + } + }) + -
- {#each items as item} -
-
-

{itemToString(item)}

+
+
+
+

Custom

+
+ + +
+
+
+

Predefined

+
+ {#each predefinedOptions as predefinedOption} + + {/each} +
+
+
+
+
+ {#each targetList as item (item.id)} + {/each}
+
diff --git a/examples/api/src/components/MenuItemBuilder.svelte b/examples/api/src/components/MenuItemBuilder.svelte deleted file mode 100644 index f760069759ad..000000000000 --- a/examples/api/src/components/MenuItemBuilder.svelte +++ /dev/null @@ -1,227 +0,0 @@ - - -
-
-
-

Custom

-
- - - -
-
-
-

Predefined

-
- {#each predefinedOptions as predefinedOption} - - {/each} -
-
-
-
-
- {#each targetList as item (item.id)} - - {/each} -
-
-
From 96447a47197cdbd1012411ca4b5d57ff68d9ea04 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 16:35:49 +0800 Subject: [PATCH 24/46] Add remove button --- .../api/src/components/MenuBuilder.svelte | 37 ++++++++++--------- .../src/components/MenuItemComponent.svelte | 12 +++++- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/examples/api/src/components/MenuBuilder.svelte b/examples/api/src/components/MenuBuilder.svelte index 6d2cacafc081..dc31a4ee6d24 100644 --- a/examples/api/src/components/MenuBuilder.svelte +++ b/examples/api/src/components/MenuBuilder.svelte @@ -45,14 +45,13 @@ import MenuItemComponent, { type MenuItemComponentKind } from './MenuItemComponent.svelte' + import type { MenuItemBase } from '@tauri-apps/api/menu/base' type PredefinedItem = PredefinedMenuItemOptions['item'] let { - newItem, itemClick }: { - newItem: (item: BuiltMenuItem) => void itemClick: MenuItemClickHandler } = $props() @@ -86,9 +85,7 @@ text, action: (id) => itemClick({ id, text: text }) } - const item = await MenuItem.new(options) - newItem({ kind, item, options }) - break + return await MenuItem.new(options) } case 'Icon': { const options: IconMenuItemOptions = { @@ -96,9 +93,7 @@ icon: iconPath, action: (id) => itemClick({ id, text: text }) } - const item = await IconMenuItem.new(options) - newItem({ kind, item, options }) - break + return await IconMenuItem.new(options) } case 'Check': { const options: CheckMenuItemOptions = { @@ -106,17 +101,13 @@ checked, action: (id) => itemClick({ id, text: text }) } - const item = await CheckMenuItem.new(options) - newItem({ kind, item, options }) - break + return await CheckMenuItem.new(options) } default: { const options: PredefinedMenuItemOptions = { item: kind } - const item = await PredefinedMenuItem.new(options) - newItem({ kind: 'Predefined', item, options }) - break + return await PredefinedMenuItem.new(options) } } } @@ -131,7 +122,9 @@ checked: boolean | undefined } - const targetList: MenuOptions[] = $state([]) + type Target = MenuOptions & { menu?: MenuItemBase } + + const targetList: Target[] = $state([]) $effect(() => { $inspect(targetList) @@ -163,20 +156,22 @@ group: { name: 'shared' }, - onAdd(event) { + async onAdd(event) { const item = event.item const kind = item.dataset.kind as MenuItemComponentKind const text = item.dataset.text const iconPath = item.dataset.iconPath const checked = item.dataset.checked + const newItem = { id: currentId, kind, text, iconPath, checked: checked !== undefined ? checked === 'true' : checked - } + } as Target currentId += 1 + if (event.newIndex !== undefined) { targetList.splice(event.newIndex, 0, newItem) } else { @@ -185,6 +180,8 @@ // HACK: We can't track the element created by Sortable, // just make a new one and delete the one from Sortable item.remove() + + newItem.menu = await create(newItem) }, onUpdate(event) { // HACK: Svelte `#each` can't track external changes, @@ -231,13 +228,17 @@ bind:this={targetSortableEl} class="p-2 border border-solid border-neutral-300 rounded-md max-w-lg min-h-24 grid items-start gap-1" > - {#each targetList as item (item.id)} + {#each targetList as item, i (item.id)} { + targetList.splice(i, 1) + item.menu?.close() + }} /> {/each}
diff --git a/examples/api/src/components/MenuItemComponent.svelte b/examples/api/src/components/MenuItemComponent.svelte index b92f80f9bf1b..f708acedf8cb 100644 --- a/examples/api/src/components/MenuItemComponent.svelte +++ b/examples/api/src/components/MenuItemComponent.svelte @@ -15,18 +15,20 @@ kind, text = $bindable(), iconPath = $bindable(), - checked = $bindable() + checked = $bindable(), + onRemove }: { id?: number kind: MenuItemComponentKind text?: string iconPath?: string checked?: boolean + onRemove?: () => void } = $props() From 29415b7b9dada59d9ad995a90ac858a5204fe50b Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 16:42:50 +0800 Subject: [PATCH 25/46] Fix Menu and Tray --- .../api/src/components/MenuBuilder.svelte | 65 ++++++------------- examples/api/src/views/Menu.svelte | 16 +++-- examples/api/src/views/Tray.svelte | 8 ++- 3 files changed, 36 insertions(+), 53 deletions(-) diff --git a/examples/api/src/components/MenuBuilder.svelte b/examples/api/src/components/MenuBuilder.svelte index dc31a4ee6d24..06ae8ca927a4 100644 --- a/examples/api/src/components/MenuBuilder.svelte +++ b/examples/api/src/components/MenuBuilder.svelte @@ -10,27 +10,17 @@ type PredefinedMenuItemOptions } from '@tauri-apps/api/menu' - export type BuiltMenuItem = - | { - kind: 'Normal' - item: MenuItem - options: MenuItemOptions - } - | { - kind: 'Icon' - item: IconMenuItem - options: IconMenuItemOptions - } - | { - kind: 'Check' - item: CheckMenuItem - options: CheckMenuItemOptions - } - | { - kind: 'Predefined' - item: PredefinedMenuItem - options: PredefinedMenuItemOptions - } + export type MenuOptions = { + id: number + kind: MenuItemComponentKind + text: string | undefined + iconPath: string | undefined + checked: boolean | undefined + } + + export type Item = MenuOptions & { + menu?: MenuItem | IconMenuItem | CheckMenuItem | PredefinedMenuItem + } export type MenuItemClickDetail = { id: string @@ -45,13 +35,14 @@ import MenuItemComponent, { type MenuItemComponentKind } from './MenuItemComponent.svelte' - import type { MenuItemBase } from '@tauri-apps/api/menu/base' type PredefinedItem = PredefinedMenuItemOptions['item'] let { + items = $bindable(), itemClick }: { + items: Item[] itemClick: MenuItemClickHandler } = $props() @@ -114,22 +105,6 @@ let currentId = 0 - type MenuOptions = { - id: number - kind: MenuItemComponentKind - text: string | undefined - iconPath: string | undefined - checked: boolean | undefined - } - - type Target = MenuOptions & { menu?: MenuItemBase } - - const targetList: Target[] = $state([]) - - $effect(() => { - $inspect(targetList) - }) - let sourceSortableEl1: HTMLElement let sourceSortableEl2: HTMLElement let targetSortableEl: HTMLElement @@ -169,13 +144,13 @@ text, iconPath, checked: checked !== undefined ? checked === 'true' : checked - } as Target + } as Item currentId += 1 if (event.newIndex !== undefined) { - targetList.splice(event.newIndex, 0, newItem) + items.splice(event.newIndex, 0, newItem) } else { - targetList.push(newItem) + items.push(newItem) } // HACK: We can't track the element created by Sortable, // just make a new one and delete the one from Sortable @@ -188,8 +163,8 @@ // and will revert changes made by Sortable, // so we store the order and restore it after updating the svelte state const order = targetSortable.toArray() - const [item] = targetList.splice(event.oldIndex!, 1) - targetList.splice(event.newIndex!, 0, item!) + const [item] = items.splice(event.oldIndex!, 1) + items.splice(event.newIndex!, 0, item!) targetSortable.sort(order) }, delayOnTouchOnly: true, @@ -228,7 +203,7 @@ bind:this={targetSortableEl} class="p-2 border border-solid border-neutral-300 rounded-md max-w-lg min-h-24 grid items-start gap-1" > - {#each targetList as item, i (item.id)} + {#each items as item, i (item.id)} { - targetList.splice(i, 1) + items.splice(i, 1) item.menu?.close() }} /> diff --git a/examples/api/src/views/Menu.svelte b/examples/api/src/views/Menu.svelte index 6613d3ab3210..4ccff3def627 100644 --- a/examples/api/src/views/Menu.svelte +++ b/examples/api/src/views/Menu.svelte @@ -1,14 +1,14 @@ @@ -43,6 +49,7 @@ placeholder="text" class="border border-solid border-neutral-200 focus-visible:border-accent outline-none p-inline-2 p-block-1 rounded-sm" bind:value={text} + onchange={onTextChange} /> {/if} {#if iconPath !== undefined} @@ -52,10 +59,16 @@ placeholder="icon path" class="border border-solid border-neutral-200 focus-visible:border-accent outline-none p-inline-2 p-block-1 rounded-sm" bind:value={iconPath} + onchange={onIconPathChange} /> {/if} {#if checked !== undefined} - + {/if} {#if onRemove !== undefined} From af1103a0b40a545aaab1c1cc82db9460f0f3816f Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 17:00:15 +0800 Subject: [PATCH 27/46] Sync checked states --- .../api/src/components/MenuBuilder.svelte | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/examples/api/src/components/MenuBuilder.svelte b/examples/api/src/components/MenuBuilder.svelte index e3e4588bbd66..503fe0e46f39 100644 --- a/examples/api/src/components/MenuBuilder.svelte +++ b/examples/api/src/components/MenuBuilder.svelte @@ -72,33 +72,36 @@ switch (kind) { case 'Normal': { - const options: MenuItemOptions = { + return await MenuItem.new({ text, action: (id) => itemClick({ id, text: text }) - } - return await MenuItem.new(options) + }) } case 'Icon': { - const options: IconMenuItemOptions = { + return await IconMenuItem.new({ text, icon: iconPath, action: (id) => itemClick({ id, text: text }) - } - return await IconMenuItem.new(options) + }) } case 'Check': { - const options: CheckMenuItemOptions = { + const checkItem = await CheckMenuItem.new({ text, checked, - action: (id) => itemClick({ id, text: text }) - } - return await CheckMenuItem.new(options) + action: async (id) => { + itemClick({ id, text: text }) + const item = items.find((item) => item.id === options.id) + if (item) { + item.checked = await checkItem.isChecked() + } + } + }) + return checkItem } default: { - const options: PredefinedMenuItemOptions = { + return await PredefinedMenuItem.new({ item: kind - } - return await PredefinedMenuItem.new(options) + }) } } } From a61af0c047ad1b0bc6c80f554b51882a24f711c9 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 9 Jul 2026 17:06:58 +0800 Subject: [PATCH 28/46] Add placeholder to menu builder --- examples/api/src/components/MenuBuilder.svelte | 4 ++++ examples/api/src/views/Menu.svelte | 2 +- examples/api/src/views/Tray.svelte | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/api/src/components/MenuBuilder.svelte b/examples/api/src/components/MenuBuilder.svelte index 503fe0e46f39..704c00a205a2 100644 --- a/examples/api/src/components/MenuBuilder.svelte +++ b/examples/api/src/components/MenuBuilder.svelte @@ -235,6 +235,10 @@ item.menu?.close() }} /> + {:else} +
+ Drag and drop the menu items above to start building +
{/each}
diff --git a/examples/api/src/views/Menu.svelte b/examples/api/src/views/Menu.svelte index 4ccff3def627..5c8813b62788 100644 --- a/examples/api/src/views/Menu.svelte +++ b/examples/api/src/views/Menu.svelte @@ -84,7 +84,7 @@ } -
+
diff --git a/examples/api/src/views/Tray.svelte b/examples/api/src/views/Tray.svelte index e12fce09ca7e..9cfec33f901d 100644 --- a/examples/api/src/views/Tray.svelte +++ b/examples/api/src/views/Tray.svelte @@ -37,7 +37,7 @@ } -
+
Date: Thu, 9 Jul 2026 17:14:26 +0800 Subject: [PATCH 29/46] Set user-select to none --- examples/api/src/components/MenuItemComponent.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/api/src/components/MenuItemComponent.svelte b/examples/api/src/components/MenuItemComponent.svelte index 82bde96a94ba..61cb4793a9c3 100644 --- a/examples/api/src/components/MenuItemComponent.svelte +++ b/examples/api/src/components/MenuItemComponent.svelte @@ -34,7 +34,7 @@