From 58eb36a5f41d7dc506ef3d32b5bbdcdacdee8a73 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Wed, 1 Jul 2026 05:10:43 +0000 Subject: [PATCH 1/5] feat(storybook): unify plugin Storybooks into one composed host Add a single Storybook UI that composes every plugin's framework-specific Storybook (React, Vue, Svelte, Solid, vanilla) as its own section, so the whole devframe surface can be browsed in one place. - add the @devframes/storybook host that composes each plugin via refs (live dev-server ports in dev, per-plugin static subfolders in build) - scaffold Storybooks for terminals (Svelte) and a11y (Solid) - align every Storybook on Storybook 10 and a shared dark/light theme toggle --- package.json | 2 + plugins/a11y/.storybook/main.ts | 23 + plugins/a11y/.storybook/preview.tsx | 42 + plugins/a11y/package.json | 4 + .../src/spa/components/summary.stories.tsx | 35 + plugins/code-server/.storybook/preview.ts | 31 +- plugins/code-server/package.json | 2 +- .../src/client/code-server.stories.ts | 2 +- plugins/git/package.json | 2 +- plugins/inspect/.storybook/main.ts | 2 +- plugins/inspect/.storybook/preview.ts | 45 +- plugins/inspect/package.json | 5 +- .../src/spa/components/AgentView.stories.ts | 2 +- .../spa/components/FunctionsView.stories.ts | 2 +- .../src/spa/components/HistoryView.stories.ts | 2 +- .../src/spa/components/StateView.stories.ts | 2 +- plugins/terminals/.storybook/main.ts | 26 + plugins/terminals/.storybook/preview.ts | 42 + plugins/terminals/package.json | 5 + plugins/terminals/src/client/App.stories.ts | 39 + pnpm-lock.yaml | 2034 ++++++++--------- pnpm-workspace.yaml | 11 +- storybook/.storybook/main.ts | 39 + storybook/.storybook/preview.ts | 41 + storybook/package.json | 20 + storybook/scripts/build.mjs | 42 + storybook/src/Introduction.stories.ts | 69 + storybook/tsconfig.json | 11 + storybook/uno.config.ts | 43 + 29 files changed, 1569 insertions(+), 1056 deletions(-) create mode 100644 plugins/a11y/.storybook/main.ts create mode 100644 plugins/a11y/.storybook/preview.tsx create mode 100644 plugins/a11y/src/spa/components/summary.stories.tsx create mode 100644 plugins/terminals/.storybook/main.ts create mode 100644 plugins/terminals/.storybook/preview.ts create mode 100644 plugins/terminals/src/client/App.stories.ts create mode 100644 storybook/.storybook/main.ts create mode 100644 storybook/.storybook/preview.ts create mode 100644 storybook/package.json create mode 100644 storybook/scripts/build.mjs create mode 100644 storybook/src/Introduction.stories.ts create mode 100644 storybook/tsconfig.json create mode 100644 storybook/uno.config.ts diff --git a/package.json b/package.json index 57c70ac..22b0faf 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "docs": "pnpm -C docs run docs", "docs:build": "pnpm -C docs run docs:build", "docs:serve": "pnpm -C docs run docs:serve", + "storybook": "pnpm -r --parallel --if-present run storybook", + "storybook:build": "pnpm --filter @devframes/storybook run storybook:build", "lint": "eslint --cache", "test": "turbo run build && vitest", "test:e2e": "turbo run build && playwright test", diff --git a/plugins/a11y/.storybook/main.ts b/plugins/a11y/.storybook/main.ts new file mode 100644 index 0000000..9c5e530 --- /dev/null +++ b/plugins/a11y/.storybook/main.ts @@ -0,0 +1,23 @@ +import type { StorybookConfig } from 'storybook-solidjs-vite' +import UnoCSS from 'unocss/vite' +import { mergeConfig } from 'vite' +import { alias } from '../../../alias' + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.@(ts|tsx)'], + framework: { + name: 'storybook-solidjs-vite', + options: {}, + }, + // `storybook-solidjs-vite` wires `vite-plugin-solid` itself; we only add UnoCSS + // (auto-loading the plugin-root `uno.config.ts`) and the shared source aliases + // so `devframe/*` imports resolve without a prior build. + async viteFinal(config) { + return mergeConfig(config, { + resolve: { alias }, + plugins: [UnoCSS()], + }) + }, +} + +export default config diff --git a/plugins/a11y/.storybook/preview.tsx b/plugins/a11y/.storybook/preview.tsx new file mode 100644 index 0000000..453fafc --- /dev/null +++ b/plugins/a11y/.storybook/preview.tsx @@ -0,0 +1,42 @@ +import type { Preview } from 'storybook-solidjs-vite' +import 'virtual:uno.css' +import '@antfu/design/styles.css' +import '../src/spa/styles.css' + +// Drive the shared `@antfu/design` tokens off the toolbar theme toggle: dark mode +// is the `.dark` class on ``, and the canvas takes the semantic +// `bg-base`/`color-base` surface — matching every other devframe surface. +function applyTheme(theme: string): void { + document.documentElement.classList.toggle('dark', theme !== 'light') + document.body.classList.add('bg-base', 'color-base', 'font-sans') +} + +const preview: Preview = { + parameters: { + layout: 'fullscreen', + controls: { expanded: true }, + }, + globalTypes: { + theme: { + description: 'Color theme', + defaultValue: 'dark', + toolbar: { + title: 'Theme', + icon: 'contrast', + items: [ + { value: 'light', title: 'Light', icon: 'sun' }, + { value: 'dark', title: 'Dark', icon: 'moon' }, + ], + dynamicTitle: true, + }, + }, + }, + decorators: [ + (Story, context) => { + applyTheme(context.globals.theme ?? 'dark') + return + }, + ], +} + +export default preview diff --git a/plugins/a11y/package.json b/plugins/a11y/package.json index 09574f2..99bdc0e 100644 --- a/plugins/a11y/package.json +++ b/plugins/a11y/package.json @@ -43,6 +43,8 @@ "build:inject": "vite build --config src/inject/vite.config.ts", "watch": "tsdown --watch", "dev": "node bin.mjs", + "storybook": "storybook dev -p 6015 --host 0.0.0.0", + "build-storybook": "storybook build", "cli:build": "node bin.mjs build --out-dir dist/static", "demo": "node demo/server.mjs", "demo:build": "node demo/server.mjs build", @@ -69,6 +71,8 @@ "devframe": "workspace:*", "get-port-please": "catalog:deps", "h3": "catalog:deps", + "storybook": "catalog:storybook", + "storybook-solidjs-vite": "catalog:storybook", "tsdown": "catalog:build", "unocss": "catalog:frontend", "vite": "catalog:build", diff --git a/plugins/a11y/src/spa/components/summary.stories.tsx b/plugins/a11y/src/spa/components/summary.stories.tsx new file mode 100644 index 0000000..addc03e --- /dev/null +++ b/plugins/a11y/src/spa/components/summary.stories.tsx @@ -0,0 +1,35 @@ +import type { Meta, StoryObj } from 'storybook-solidjs-vite' +import { Summary } from './header.tsx' + +// The severity summary chips — the one expressive, domain-specific color in the +// inspector. Presentational: driven entirely by the per-impact counts, so it +// stories offline without a live scan. +const meta = { + title: 'A11y/Summary', + component: Summary, + parameters: { layout: 'centered' }, +} satisfies Meta + +export default meta +type Story = StoryObj + +const counts = { critical: 3, serious: 5, moderate: 2, minor: 8 } + +/** A spread of violations across every severity bucket. */ +export const Issues: Story = { + args: { counts, active: null, onToggle: () => {} }, +} + +/** One severity selected as the active filter. */ +export const Filtered: Story = { + args: { counts, active: 'serious', onToggle: () => {} }, +} + +/** A clean report — every bucket at zero. */ +export const Clean: Story = { + args: { + counts: { critical: 0, serious: 0, moderate: 0, minor: 0 }, + active: null, + onToggle: () => {}, + }, +} diff --git a/plugins/code-server/.storybook/preview.ts b/plugins/code-server/.storybook/preview.ts index 5cbde29..37011df 100644 --- a/plugins/code-server/.storybook/preview.ts +++ b/plugins/code-server/.storybook/preview.ts @@ -1,13 +1,42 @@ -import type { Preview } from '@storybook/html-vite' +import type { Decorator, Preview } from '@storybook/html-vite' import 'virtual:uno.css' import '@antfu/design/styles.css' import '../src/client/style.css' +// Drive the shared `@antfu/design` tokens off the toolbar theme toggle: dark mode +// is the `.dark` class on ``, and the canvas takes the semantic +// `bg-base`/`color-base` surface — matching every other devframe surface. +function applyTheme(theme: string): void { + document.documentElement.classList.toggle('dark', theme !== 'light') + document.body.classList.add('bg-base', 'color-base', 'font-sans') +} + +const withTheme: Decorator = (story, context) => { + applyTheme(context.globals.theme ?? 'dark') + return story(context) +} + const preview: Preview = { parameters: { layout: 'fullscreen', controls: { expanded: true }, }, + globalTypes: { + theme: { + description: 'Color theme', + defaultValue: 'dark', + toolbar: { + title: 'Theme', + icon: 'contrast', + items: [ + { value: 'light', title: 'Light', icon: 'sun' }, + { value: 'dark', title: 'Dark', icon: 'moon' }, + ], + dynamicTitle: true, + }, + }, + }, + decorators: [withTheme], } export default preview diff --git a/plugins/code-server/package.json b/plugins/code-server/package.json index 8ed6f0f..dd27a7d 100644 --- a/plugins/code-server/package.json +++ b/plugins/code-server/package.json @@ -44,7 +44,7 @@ "watch": "tsdown --watch", "typecheck": "tsc --noEmit", "dev": "vite --config src/spa/vite.config.ts --host 0.0.0.0", - "storybook": "storybook dev -p 6006 --host 0.0.0.0", + "storybook": "storybook dev -p 6013 --host 0.0.0.0", "build-storybook": "storybook build", "test": "vitest run", "prepack": "pnpm run build" diff --git a/plugins/code-server/src/client/code-server.stories.ts b/plugins/code-server/src/client/code-server.stories.ts index 4cf03d8..7c42b14 100644 --- a/plugins/code-server/src/client/code-server.stories.ts +++ b/plugins/code-server/src/client/code-server.stories.ts @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/html' +import type { Meta, StoryObj } from '@storybook/html-vite' import type { CodeServerViewState } from './view' import { createCodeServerView } from './view' import './style.css' diff --git a/plugins/git/package.json b/plugins/git/package.json index 2654c01..a63ba34 100644 --- a/plugins/git/package.json +++ b/plugins/git/package.json @@ -39,7 +39,7 @@ "dev": "node scripts/dev.mjs", "dev:server": "node src/cli.ts", "dev:client": "next dev src/client", - "storybook": "storybook dev -p 6006", + "storybook": "storybook dev -p 6011 --host 0.0.0.0", "storybook:build": "storybook build -o storybook-static", "watch": "tsdown --watch", "typecheck": "tsc --noEmit", diff --git a/plugins/inspect/.storybook/main.ts b/plugins/inspect/.storybook/main.ts index 7eb4457..677ef98 100644 --- a/plugins/inspect/.storybook/main.ts +++ b/plugins/inspect/.storybook/main.ts @@ -6,7 +6,7 @@ import { alias } from '../../../alias' const config: StorybookConfig = { stories: ['../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], - addons: ['@storybook/addon-essentials'], + addons: ['@storybook/addon-docs'], framework: { name: '@storybook/vue3-vite', options: {}, diff --git a/plugins/inspect/.storybook/preview.ts b/plugins/inspect/.storybook/preview.ts index 27c7aa7..bab616f 100644 --- a/plugins/inspect/.storybook/preview.ts +++ b/plugins/inspect/.storybook/preview.ts @@ -1,33 +1,48 @@ -import type { Preview } from '@storybook/vue3' +import type { Decorator, Preview } from '@storybook/vue3-vite' import 'virtual:uno.css' import '@antfu/design/styles.css' import '../src/spa/style.css' -// Stories default to the dark canvas; drive the shared tokens to match. -document.documentElement.classList.add('dark') +// Drive the shared `@antfu/design` tokens off the toolbar theme toggle: dark mode +// is the `.dark` class on ``, and the canvas takes the semantic +// `bg-base`/`color-base` surface — matching every other devframe surface. +function applyTheme(theme: string): void { + document.documentElement.classList.toggle('dark', theme !== 'light') + document.body.classList.add('bg-base', 'color-base', 'font-sans') +} + +const withTheme: Decorator = (story, context) => { + applyTheme(context.globals.theme ?? 'dark') + return { components: { story }, template: '' } +} const preview: Preview = { parameters: { + layout: 'fullscreen', controls: { + expanded: true, matchers: { color: /(background|color)$/i, date: /Date$/i, }, }, - backgrounds: { - default: 'dark', - values: [ - { - name: 'dark', - value: '#111111', - }, - { - name: 'light', - value: '#ffffff', - }, - ], + }, + globalTypes: { + theme: { + description: 'Color theme', + defaultValue: 'dark', + toolbar: { + title: 'Theme', + icon: 'contrast', + items: [ + { value: 'light', title: 'Light', icon: 'sun' }, + { value: 'dark', title: 'Dark', icon: 'moon' }, + ], + dynamicTitle: true, + }, }, }, + decorators: [withTheme], } export default preview diff --git a/plugins/inspect/package.json b/plugins/inspect/package.json index a9455df..52178dc 100644 --- a/plugins/inspect/package.json +++ b/plugins/inspect/package.json @@ -42,7 +42,7 @@ "watch": "tsdown --watch", "cli:build": "node bin.mjs build --out-dir dist/static", "prepack": "pnpm build", - "storybook": "storybook dev -p 6006", + "storybook": "storybook dev -p 6012 --host 0.0.0.0", "build-storybook": "storybook build", "test": "vitest run" }, @@ -62,8 +62,7 @@ "devDependencies": { "@antfu/design": "catalog:frontend", "@iconify-json/ph": "catalog:frontend", - "@storybook/addon-essentials": "catalog:storybook", - "@storybook/vue3": "catalog:storybook", + "@storybook/addon-docs": "catalog:storybook", "@storybook/vue3-vite": "catalog:storybook", "@unocss/preset-icons": "catalog:frontend", "@vitejs/plugin-vue": "catalog:build", diff --git a/plugins/inspect/src/spa/components/AgentView.stories.ts b/plugins/inspect/src/spa/components/AgentView.stories.ts index fe08621..695b4bb 100644 --- a/plugins/inspect/src/spa/components/AgentView.stories.ts +++ b/plugins/inspect/src/spa/components/AgentView.stories.ts @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/vue3' +import type { Meta, StoryObj } from '@storybook/vue3-vite' import AgentView from './AgentView.vue' const meta = { diff --git a/plugins/inspect/src/spa/components/FunctionsView.stories.ts b/plugins/inspect/src/spa/components/FunctionsView.stories.ts index eaf073b..96a6251 100644 --- a/plugins/inspect/src/spa/components/FunctionsView.stories.ts +++ b/plugins/inspect/src/spa/components/FunctionsView.stories.ts @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/vue3' +import type { Meta, StoryObj } from '@storybook/vue3-vite' import FunctionsView from './FunctionsView.vue' const meta = { diff --git a/plugins/inspect/src/spa/components/HistoryView.stories.ts b/plugins/inspect/src/spa/components/HistoryView.stories.ts index 5d9144c..429f251 100644 --- a/plugins/inspect/src/spa/components/HistoryView.stories.ts +++ b/plugins/inspect/src/spa/components/HistoryView.stories.ts @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/vue3' +import type { Meta, StoryObj } from '@storybook/vue3-vite' import HistoryView from './HistoryView.vue' const meta = { diff --git a/plugins/inspect/src/spa/components/StateView.stories.ts b/plugins/inspect/src/spa/components/StateView.stories.ts index 445eaad..6a1961d 100644 --- a/plugins/inspect/src/spa/components/StateView.stories.ts +++ b/plugins/inspect/src/spa/components/StateView.stories.ts @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from '@storybook/vue3' +import type { Meta, StoryObj } from '@storybook/vue3-vite' import StateView from './StateView.vue' const meta = { diff --git a/plugins/terminals/.storybook/main.ts b/plugins/terminals/.storybook/main.ts new file mode 100644 index 0000000..9b81779 --- /dev/null +++ b/plugins/terminals/.storybook/main.ts @@ -0,0 +1,26 @@ +import type { StorybookConfig } from '@storybook/svelte-vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' +import UnoCSS from 'unocss/vite' +import { mergeConfig } from 'vite' +import { alias } from '../../../alias' + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.@(ts|tsx|svelte)'], + framework: { + name: '@storybook/svelte-vite', + options: {}, + }, + // `@storybook/svelte-vite` only wires Svelte docgen — it expects the Svelte + // compiler plugin to come from a project `vite.config` (ours lives at a + // non-default path), so add `svelte()` here. UnoCSS auto-loads the plugin-root + // `uno.config.ts`; the shared aliases let `devframe/*` imports resolve without + // a prior build. + async viteFinal(config) { + return mergeConfig(config, { + resolve: { alias }, + plugins: [svelte(), UnoCSS()], + }) + }, +} + +export default config diff --git a/plugins/terminals/.storybook/preview.ts b/plugins/terminals/.storybook/preview.ts new file mode 100644 index 0000000..6eaae83 --- /dev/null +++ b/plugins/terminals/.storybook/preview.ts @@ -0,0 +1,42 @@ +import type { Decorator, Preview } from '@storybook/svelte-vite' +import 'virtual:uno.css' +import '@antfu/design/styles.css' +import '../src/client/styles.css' + +// Drive the shared `@antfu/design` tokens off the toolbar theme toggle: dark mode +// is the `.dark` class on ``, and the canvas takes the semantic +// `bg-base`/`color-base` surface — matching every other devframe surface. +function applyTheme(theme: string): void { + document.documentElement.classList.toggle('dark', theme !== 'light') + document.body.classList.add('bg-base', 'color-base', 'font-sans') +} + +const withTheme: Decorator = (story, context) => { + applyTheme(context.globals.theme ?? 'dark') + return story(context) +} + +const preview: Preview = { + parameters: { + layout: 'fullscreen', + controls: { expanded: true }, + }, + globalTypes: { + theme: { + description: 'Color theme', + defaultValue: 'dark', + toolbar: { + title: 'Theme', + icon: 'contrast', + items: [ + { value: 'light', title: 'Light', icon: 'sun' }, + { value: 'dark', title: 'Dark', icon: 'moon' }, + ], + dynamicTitle: true, + }, + }, + }, + decorators: [withTheme], +} + +export default preview diff --git a/plugins/terminals/package.json b/plugins/terminals/package.json index ed038e0..7bd2ef4 100644 --- a/plugins/terminals/package.json +++ b/plugins/terminals/package.json @@ -43,6 +43,8 @@ "build": "tsdown && vite build --config src/client/vite.config.ts && vite build --config src/spa/vite.config.ts", "watch": "tsdown --watch", "dev": "node bin.mjs", + "storybook": "storybook dev -p 6014 --host 0.0.0.0", + "build-storybook": "storybook build", "test": "vitest run", "typecheck": "tsc --noEmit", "prepack": "pnpm run build" @@ -69,14 +71,17 @@ "devDependencies": { "@antfu/design": "catalog:frontend", "@iconify-json/ph": "catalog:frontend", + "@storybook/svelte-vite": "catalog:storybook", "@sveltejs/vite-plugin-svelte": "catalog:frontend", "@types/node": "catalog:types", "colorjs.io": "catalog:frontend", "devframe": "workspace:*", "get-port-please": "catalog:deps", "h3": "catalog:deps", + "storybook": "catalog:storybook", "svelte": "catalog:frontend", "tsdown": "catalog:build", + "typescript": "catalog:tooling", "unocss": "catalog:frontend", "vite": "catalog:build", "vite-plugin-css-injected-by-js": "catalog:frontend", diff --git a/plugins/terminals/src/client/App.stories.ts b/plugins/terminals/src/client/App.stories.ts new file mode 100644 index 0000000..044a52b --- /dev/null +++ b/plugins/terminals/src/client/App.stories.ts @@ -0,0 +1,39 @@ +import type { Meta, StoryObj } from '@storybook/svelte-vite' +import App from './App.svelte' + +// A hermetic stand-in for the devframe RPC client so the panel renders without a +// live backend: shared state resolves to its initial value, `list` returns no +// sessions, and the stream never yields. Enough to exercise the real Svelte +// surface + `@antfu/design` chrome (nav, empty state) offline. +function mockRpc() { + const state = (initial: unknown) => + Promise.resolve({ value: () => initial, on: () => () => {} }) + return { + sharedState: { + get: (_key: string, opts?: { initialValue?: unknown }) => state(opts?.initialValue ?? {}), + }, + call: async (method: string) => (method.endsWith(':list') ? [] : undefined), + streaming: { + subscribe: () => ({ + [Symbol.asyncIterator]() { + return { next: () => new Promise(() => {}) } + }, + cancel() {}, + }), + }, + } +} + +const meta = { + title: 'Terminals/Panel', + component: App, + parameters: { layout: 'fullscreen' }, +} satisfies Meta + +export default meta +type Story = StoryObj + +/** No sessions yet — the empty state with a "New terminal" affordance. */ +export const Empty: Story = { + args: { rpc: mockRpc(), autostart: false }, +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db565db..ef59f71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -215,27 +215,27 @@ catalogs: '@storybook/addon-docs': specifier: ^10.4.6 version: 10.4.6 - '@storybook/addon-essentials': - specifier: ^8.6.14 - version: 8.6.14 '@storybook/html-vite': - specifier: ^8.6.14 - version: 8.6.18 + specifier: ^10.4.6 + version: 10.4.6 '@storybook/react-vite': specifier: ^10.4.6 version: 10.4.6 - '@storybook/vue3': - specifier: ^8.6.14 - version: 8.6.18 + '@storybook/svelte-vite': + specifier: ^10.4.6 + version: 10.4.6 '@storybook/vue3-vite': - specifier: ^8.6.14 - version: 8.6.18 + specifier: ^10.4.6 + version: 10.4.6 '@vitejs/plugin-react-oxc': specifier: ^0.4.3 version: 0.4.3 storybook: - specifier: ^8.6.14 - version: 8.6.18 + specifier: ^10.4.6 + version: 10.4.6 + storybook-solidjs-vite: + specifier: ^10.5.2 + version: 10.5.2 testing: '@playwright/test': specifier: ^1.60.0 @@ -325,7 +325,7 @@ importers: version: 1.1.1 tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@6.0.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3) tsnapi: specifier: catalog:testing version: 0.3.3(vitest@4.1.7(@types/node@25.9.1)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))) @@ -667,7 +667,7 @@ importers: version: 0.2.16 tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@6.0.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3) ua-parser-modern: specifier: catalog:inlined version: 0.1.1 @@ -701,7 +701,7 @@ importers: version: 1.8.2 tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@6.0.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3) packages/nuxt: devDependencies: @@ -719,7 +719,7 @@ importers: version: 4.4.6(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.2)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.2)(rollup@4.60.3))(rollup@4.60.3)(srvx@0.11.15)(terser@5.47.1)(tsx@4.22.3)(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))(yaml@2.8.4) tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@6.0.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3) plugins/a11y: dependencies: @@ -745,9 +745,15 @@ importers: h3: specifier: catalog:deps version: 2.0.1-rc.22(crossws@0.4.5(srvx@0.11.15)) + storybook: + specifier: catalog:storybook + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + storybook-solidjs-vite: + specifier: catalog:storybook + version: 10.5.2(esbuild@0.28.0)(rollup@4.60.3)(solid-js@1.9.13)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3)(vite-plugin-solid@2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.13)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@6.0.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3) unocss: specifier: catalog:frontend version: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) @@ -756,7 +762,7 @@ importers: version: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) vite-plugin-solid: specifier: catalog:build - version: 2.11.12(solid-js@1.9.13)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + version: 2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.13)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) vitest: specifier: catalog:testing version: 4.1.7(@types/node@25.9.1)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) @@ -775,13 +781,13 @@ importers: devDependencies: '@antfu/design': specifier: catalog:frontend - version: 0.2.1(@antfu/utils@9.3.0)(@tanstack/vue-virtual@3.13.30(vue@3.5.34(typescript@6.0.3)))(@unocss/core@66.7.2)(colorjs.io@0.6.1)(floating-vue@5.2.2(vue@3.5.34(typescript@6.0.3)))(playwright@1.60.0)(reka-ui@2.10.1(vue@3.5.34(typescript@6.0.3)))(unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vue@3.5.34(typescript@6.0.3)) + version: 0.2.1(@antfu/utils@9.3.0)(@tanstack/vue-virtual@3.13.30(vue@3.5.34(typescript@6.0.3)))(@unocss/core@66.7.2)(colorjs.io@0.6.1)(floating-vue@5.2.2(vue@3.5.34(typescript@6.0.3)))(playwright@1.60.0)(reka-ui@2.10.1(vue@3.5.34(typescript@6.0.3)))(unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vue@3.5.34(typescript@6.0.3)) '@iconify-json/ph': specifier: catalog:frontend version: 1.2.2 '@storybook/html-vite': specifier: catalog:storybook - version: 8.6.18(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + version: 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) '@types/node': specifier: catalog:types version: 25.9.1 @@ -796,19 +802,19 @@ importers: version: 2.0.1-rc.22(crossws@0.4.5(srvx@0.11.15)) storybook: specifier: catalog:storybook - version: 8.6.18 + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@6.0.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3) unocss: specifier: catalog:frontend - version: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + version: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) vite: specifier: catalog:build - version: 8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) + version: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) vitest: specifier: catalog:testing - version: 4.1.7(@types/node@25.9.1)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + version: 4.1.7(@types/node@25.9.1)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) ws: specifier: catalog:deps version: 8.21.0 @@ -839,13 +845,13 @@ importers: version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@storybook/addon-a11y': specifier: catalog:storybook - version: 10.4.6(storybook@8.6.18) + version: 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)) '@storybook/addon-docs': specifier: catalog:storybook - version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(rollup@4.60.3)(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) '@storybook/react-vite': specifier: catalog:storybook - version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(rollup@4.60.3)(storybook@8.6.18)(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) '@types/react': specifier: catalog:types version: 19.2.15 @@ -884,13 +890,13 @@ importers: version: 19.2.6(react@19.2.6) storybook: specifier: catalog:storybook - version: 8.6.18 + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tailwind-merge: specifier: catalog:frontend version: 3.6.0 tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@6.0.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3) unocss: specifier: catalog:frontend version: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) @@ -916,15 +922,12 @@ importers: '@iconify-json/ph': specifier: catalog:frontend version: 1.2.2 - '@storybook/addon-essentials': - specifier: catalog:storybook - version: 8.6.14(@types/react@19.2.15)(storybook@8.6.18) - '@storybook/vue3': + '@storybook/addon-docs': specifier: catalog:storybook - version: 8.6.18(storybook@8.6.18)(vue@3.5.34(typescript@5.9.3)) + version: 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) '@storybook/vue3-vite': specifier: catalog:storybook - version: 8.6.18(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3)) + version: 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3)) '@unocss/preset-icons': specifier: catalog:frontend version: 66.7.2 @@ -951,10 +954,10 @@ importers: version: 2.10.1(vue@3.5.34(typescript@5.9.3)) storybook: specifier: catalog:storybook - version: 8.6.18 + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@5.9.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@5.9.3) unocss: specifier: catalog:frontend version: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) @@ -995,6 +998,9 @@ importers: '@iconify-json/ph': specifier: catalog:frontend version: 1.2.2 + '@storybook/svelte-vite': + specifier: catalog:storybook + version: 10.4.6(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.3(@typescript-eslint/types@8.59.2))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(svelte@5.56.3(@typescript-eslint/types@8.59.2))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) '@sveltejs/vite-plugin-svelte': specifier: catalog:frontend version: 5.1.1(svelte@5.56.3(@typescript-eslint/types@8.59.2))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) @@ -1013,12 +1019,18 @@ importers: h3: specifier: catalog:deps version: 2.0.1-rc.22(crossws@0.4.5(srvx@0.11.15)) + storybook: + specifier: catalog:storybook + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) svelte: specifier: catalog:frontend version: 5.56.3(@typescript-eslint/types@8.59.2) tsdown: specifier: catalog:build - version: 0.22.0(tsx@4.22.3)(typescript@6.0.3) + version: 0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3) + typescript: + specifier: catalog:tooling + version: 6.0.3 unocss: specifier: catalog:frontend version: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) @@ -1039,8 +1051,32 @@ importers: specifier: catalog:deps version: 0.13.1 + storybook: + devDependencies: + '@antfu/design': + specifier: catalog:frontend + version: 0.2.1(@antfu/utils@9.3.0)(@tanstack/vue-virtual@3.13.30(vue@3.5.34(typescript@6.0.3)))(@unocss/core@66.7.2)(colorjs.io@0.6.1)(floating-vue@5.2.2(vue@3.5.34(typescript@6.0.3)))(playwright@1.60.0)(reka-ui@2.10.1(vue@3.5.34(typescript@6.0.3)))(unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vue@3.5.34(typescript@6.0.3)) + '@iconify-json/ph': + specifier: catalog:frontend + version: 1.2.2 + '@storybook/html-vite': + specifier: catalog:storybook + version: 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + storybook: + specifier: catalog:storybook + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + unocss: + specifier: catalog:frontend + version: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + vite: + specifier: catalog:build + version: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) + packages: + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + '@antfu/design@0.2.1': resolution: {integrity: sha512-t35soHI1CNJn86aDgLb1AymekL9J+GG3DXEt/eFg9y5nf7E9ijeMGvjCsI8VZS0/Q6JxO4iTT7jbG26vqfwvUw==} peerDependencies: @@ -1381,15 +1417,27 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.11.0': + resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==} + + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} '@emnapi/runtime@1.11.0': resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==} + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@es-joy/jsdoccomment@0.84.0': resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -1402,12 +1450,6 @@ packages: resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==} engines: {node: '>=10'} - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} @@ -1420,12 +1462,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} @@ -1438,12 +1474,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.27.7': resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} @@ -1456,12 +1486,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.27.7': resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} @@ -1474,12 +1498,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} @@ -1492,12 +1510,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.27.7': resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} @@ -1510,12 +1522,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} @@ -1528,12 +1534,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.27.7': resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} @@ -1546,12 +1546,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} @@ -1564,12 +1558,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.27.7': resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} @@ -1582,12 +1570,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.27.7': resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} @@ -1600,12 +1582,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.27.7': resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} @@ -1618,12 +1594,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.27.7': resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} @@ -1636,12 +1606,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.27.7': resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} @@ -1654,12 +1618,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.27.7': resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} @@ -1672,12 +1630,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.27.7': resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} @@ -1690,12 +1642,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.27.7': resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} @@ -1708,12 +1654,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} @@ -1726,12 +1666,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.27.7': resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} @@ -1744,12 +1678,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} @@ -1762,12 +1690,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.27.7': resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} @@ -1780,12 +1702,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/openharmony-arm64@0.27.7': resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} @@ -1798,12 +1714,6 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} @@ -1816,12 +1726,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} @@ -1834,12 +1738,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.27.7': resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} @@ -1852,12 +1750,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.27.7': resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} @@ -2502,6 +2394,12 @@ packages: cpu: [x64] os: [win32] + '@oxc-parser/binding-android-arm-eabi@0.127.0': + resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + '@oxc-parser/binding-android-arm-eabi@0.129.0': resolution: {integrity: sha512-sG37CfXLlYXdDrggAFO/mKcO4w36piwf862xAZXIuf3nzKhWK1FvW4dqie+06++z+mDto2QeOQSvhyzBeK5jsQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2514,6 +2412,12 @@ packages: cpu: [arm] os: [android] + '@oxc-parser/binding-android-arm64@0.127.0': + resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@oxc-parser/binding-android-arm64@0.129.0': resolution: {integrity: sha512-DVyLFN2+S0VOhT6lm5++tFqlu3x2Njiby6y5DhTzjV5uRsZWpifsBn6+yjtwAxl105peEjs5BHE3ToBJuQjLTg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2526,6 +2430,12 @@ packages: cpu: [arm64] os: [android] + '@oxc-parser/binding-darwin-arm64@0.127.0': + resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@oxc-parser/binding-darwin-arm64@0.129.0': resolution: {integrity: sha512-QeqThtB8qax4IL+NFBWgshudyKkj5c076L8vyd8PCEx7U1wHyIbH49MEQ5J5iURFhUW5jiFmdnLKEwyOo0GAJA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2538,6 +2448,12 @@ packages: cpu: [arm64] os: [darwin] + '@oxc-parser/binding-darwin-x64@0.127.0': + resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@oxc-parser/binding-darwin-x64@0.129.0': resolution: {integrity: sha512-zn5+7nv4DlK4uFgblmhKm6xRV0QUHXOHyIDkjmhxJ53xSA9ahkb3pHNiHesNPXn/nK/VWU+C+Z6JYHdatZBh7g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2550,6 +2466,12 @@ packages: cpu: [x64] os: [darwin] + '@oxc-parser/binding-freebsd-x64@0.127.0': + resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@oxc-parser/binding-freebsd-x64@0.129.0': resolution: {integrity: sha512-SPTcDBiHWlgRpWFC1jnoi0sBWqCw4DFR+4b8+dV+NAhUu2ONERWyIVIOCfcE9a8BlvZsDCuXf3l/x7wQUs1Rsw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2562,6 +2484,12 @@ packages: cpu: [x64] os: [freebsd] + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm-gnueabihf@0.129.0': resolution: {integrity: sha512-Rgc9+WNKLbc+chyDTXyyJ7gbgLo+ve27CrRnmIwGgucGflrBZbutge5jdPPegcgf46RrR4dkBbMCp0/x16mdig==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2574,6 +2502,12 @@ packages: cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm-musleabihf@0.129.0': resolution: {integrity: sha512-YtSsJ51VysXqlO8Cs2mWTyXvxBRemTHj4WDQjXwKl0SAxh+CVrEdXrdH+RnjxLj3JCUMFeYuHs5c+/DImfbKkg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2586,6 +2520,13 @@ packages: cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-arm64-gnu@0.129.0': resolution: {integrity: sha512-9oK8iQr9KtgI5JhaJ+5IwiQsXEo6NuasFgovtJGrdK/RxbA0bO4YKRvVY7M+8lozUCVz1U7XrFFODv3emIOPRA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2600,6 +2541,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-arm64-musl@0.129.0': resolution: {integrity: sha512-GghE/bf9ZqgqZFxLacgP0ImVD6UiLKQOpvpgUoIsqjopu2ms/+p1L0d0Dv2Sck+8p0FbKS2WE3IjqmIlLbxJgA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2614,6 +2562,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-ppc64-gnu@0.129.0': resolution: {integrity: sha512-A2PW0UbERzKGV6fKX1zoe2Tkc1zVcEJSSPW9IUSKbZAPuPe+M5/5hTA+6fQbWmevabe2B3IDky66a1lFGjpBKA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2628,6 +2583,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.129.0': resolution: {integrity: sha512-omwxd9H+jrl1T72RI666k4ho7Eli2iHdELzf+dL0D+uXThNZXYJCbKjm5rK2hrHmDy4O+NWv7+khBrEkorLsgw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2642,6 +2604,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-riscv64-musl@0.129.0': resolution: {integrity: sha512-v2hi8id+M8C0uY8uuG2t2a5vr8H9XyHXiHL12yMdMNtgn04nnM/8hlOGuoJuxVc07PhClNiaoSaY2eXehSRa7w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2656,6 +2625,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-s390x-gnu@0.129.0': resolution: {integrity: sha512-UXrdDyLh1Obgj5X+IVVXWoo5/FJbFsU8/uLQ/M9lkVUwBUKpRFxNEhzwBNv21qqdKgAh+pr2CCVD8J1JfRPsIQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2670,6 +2646,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.129.0': resolution: {integrity: sha512-hsL/3/kdX9FGLqOj8DR3Eki4Y6zO1i3+ZHhiPwX0hDt4n+18abkfUzePCv3h8SShprwCmwdxPnlrebZ5+MZ+cw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2684,6 +2667,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-musl@0.127.0': + resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-x64-musl@0.129.0': resolution: {integrity: sha512-kdXvJ4crOeRld3vWl0J0VU4nmnT4pZ3lKGA5tZ1y0UPWsBtElDYd+jsz4lE36tpAbCiWm0M0PG0laUNBSE+Wlw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2698,6 +2688,12 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-openharmony-arm64@0.127.0': + resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@oxc-parser/binding-openharmony-arm64@0.129.0': resolution: {integrity: sha512-DusJfcK7EGwf9TEakB+z6SXCLdHGvDZ8U8882bzWb4oVrORHpbkFl9npS7cN3YC2axcVKoktbxZevS1nxVCKFw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2710,6 +2706,11 @@ packages: cpu: [arm64] os: [openharmony] + '@oxc-parser/binding-wasm32-wasi@0.127.0': + resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + '@oxc-parser/binding-wasm32-wasi@0.129.0': resolution: {integrity: sha512-Iie9CcII+ELSinKFnxTR15xhI9qriVivEhbFh3driRNbzms/5ioDAU0fwe8Mf1FEaz3n2FtiUVX0h0nwKLYk0A==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2720,6 +2721,12 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] + '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@oxc-parser/binding-win32-arm64-msvc@0.129.0': resolution: {integrity: sha512-99kH1udLyrts+wGm+u0VhPbogkb2wxc/6J1XMKOpS6Kx5DjBWGRZZfBjfCGI3xKSInpYbZn4TLWLX1Q1GURYwg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2732,6 +2739,12 @@ packages: cpu: [arm64] os: [win32] + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + '@oxc-parser/binding-win32-ia32-msvc@0.129.0': resolution: {integrity: sha512-tmSBR1A4yH697qV291xKyDe4OAWFchJ+cXf2wuipx/vK3n5d5Ej9MVLRtXlIcZ38n8qAjsF0/AnskaYgxM151A==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2744,6 +2757,12 @@ packages: cpu: [ia32] os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.129.0': resolution: {integrity: sha512-Z1PbJvkPeLASIUxa3AnrQ5H+vv1K9zC0IGnQqoKfM0ZvsvCSe0d3u5m7d9iuy+HB7GrcElHuwKb0d0qFdtG0iA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2756,6 +2775,9 @@ packages: cpu: [x64] os: [win32] + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + '@oxc-project/types@0.129.0': resolution: {integrity: sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==} @@ -2765,38 +2787,141 @@ packages: '@oxc-project/types@0.132.0': resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} - '@oxc-transform/binding-android-arm-eabi@0.131.0': - resolution: {integrity: sha512-rcNvLlbNnxTfYVlZVF+Rev2AyCpJDpwVPphG4HOJxauaT1+w5VxL+kRdxCReof4A8ZsszbvIYlvkqvaJKO4Mog==} - engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-resolver/binding-android-arm-eabi@11.21.3': + resolution: {integrity: sha512-eNU11A2WNizh04v3uyaJCootrHIaS0B9aHYXvAvVnPNk4xYSjMUjHnhQ6dewPN2MRYDskV85d1N0Aw0WNWhcyg==} cpu: [arm] os: [android] - '@oxc-transform/binding-android-arm64@0.131.0': - resolution: {integrity: sha512-/y+EH6QYQB2ZDQNvMlzItc36mw16GZwCDlvGYbQ4GCTE+7ZtSmx9E/rJOYzYyzMghz0c5dhJquRKScXdOZHpnQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-resolver/binding-android-arm64@11.21.3': + resolution: {integrity: sha512-8Q+ZjTLvn2dIcWsrmhdrEihm7q+ag/k+mkry7Z+t0QbbHaVxXQfvH9AewyVMh/WrpEKhQ3DDgx9fYbqeCpeOEw==} cpu: [arm64] os: [android] - '@oxc-transform/binding-darwin-arm64@0.131.0': - resolution: {integrity: sha512-x1Va8zFomdYghAI0Zkt7kUmG50S65XH1u0EbIDr80M9idfXrQgd08ZGl3ejwRGLBrkbA8tkkmeOu1rWVFf7BXg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-resolver/binding-darwin-arm64@11.21.3': + resolution: {integrity: sha512-wkh0qKZGHXVUDxFw3oA1TXnU2BDYY/r775oJflGeIr8uDPPoN2pk8gijQIzYRT6hoql/lg3+Tx/SaTn9e2/aGg==} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.131.0': - resolution: {integrity: sha512-EwacackWpYYXGZsl0Aj4NKvDdLuxWZg7LQDneFyMwuftpAxPQLRkHFwZib7r6wpIJm4NELhHW261A4vZ8OQqXQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-resolver/binding-darwin-x64@11.21.3': + resolution: {integrity: sha512-HbNc23FAQYbuyDV2vBWMez4u4mrsm5RAkniGZAWqr6lYZ3N4beeqIb776jzwRl8qL2zRhHVXpUj97X0QgogVzg==} cpu: [x64] os: [darwin] - '@oxc-transform/binding-freebsd-x64@0.131.0': - resolution: {integrity: sha512-EhXqWOtL1PWcJ3ktdplV4Wrez2PRuTBSDdB7KF6CN4zuZhohUjxC1bxqDNRbNSX46yaZ27IzJLafah1J6mSA8Q==} - engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-resolver/binding-freebsd-x64@11.21.3': + resolution: {integrity: sha512-K6xNsTUPEUdfrn0+kbMq5nOUB5w1C5pavPQngt4TM2FpN91lP0PBe2srSpamb4d69O7h86oAi/qWX/kZNRSjkw==} cpu: [x64] os: [freebsd] - '@oxc-transform/binding-linux-arm-gnueabihf@0.131.0': - resolution: {integrity: sha512-NfNACr3aqBKeeUh6HCoGGPSjdMkLvyXUZQywCg/DwRkEpqZo55KX65saW1sQdgBcu0SKXrAReTjIm/HDO/OI0Q==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3': + resolution: {integrity: sha512-VcFmOpcpWX1zoEy8M58tR2M9YxM+Z9RuQhqAx5q0CTmrruaP7Gveejg75hzd/5sg5nk9G3aLALEa3hE2FsmmTQ==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3': + resolution: {integrity: sha512-quVoxFLBy43hWaQbbDtQNRwAX5vX76mv7n64icAtQcJ3eNgVeblqmkupF/hAneNthdqSlnd1sTjb3aQSaDPaCQ==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.21.3': + resolution: {integrity: sha512-X0AqNZgcD07Q4V3RDK18/vYOj/HQT/FnmEFGYS2jTWqY7JO13ryE3TEs3eAIgUJhBnNkpEaiXqz3VK8M7qQhWQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-arm64-musl@11.21.3': + resolution: {integrity: sha512-YkaQnaKYdbuaXvRt5Qd0GpbihzVnyfR6z1SpYfIUC6RTu4NF7lDKPjVkYb+jRI2gedVO2rVpN35Y6akG6ud4Lw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3': + resolution: {integrity: sha512-gB9HwhrPiFqUzDeEq+y/CgAijz1YdI6BnXz5GaH2Pa9cWdutchlkGFAiAuGb/PjVQpiK6NFKzFuztxrweoit7A==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3': + resolution: {integrity: sha512-zjDWBlYk8QGv0H8dsPUWqkfjYIIjG2TvspGkzXL0eImbgxtZorA/klKeHyolevoT3Kvbi+1iMr9Lhrh7jf54Og==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-riscv64-musl@11.21.3': + resolution: {integrity: sha512-4UfsQvacV388y1zpXL7C1x1FNYaV52JtuNRiuzrfQA2z1z6ElVrsidkGsrvQ5EgeSq1Pj7kaKqrgGkvFuxJ/tw==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-linux-s390x-gnu@11.21.3': + resolution: {integrity: sha512-b5uH+HKH0MP5mNBYaK75SKsJbw52URqrx2LavYdq6wb0l3ExAG5niYRP9DWUNHdKilpaBVM2bXk9HNWrH3ew7Q==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-gnu@11.21.3': + resolution: {integrity: sha512-PjYlmilBpNRh2ntXNYAK3Am5w/nPfEpnU/96iNx7CI8EzAn12J4JRiec63wHJTH31nLoCNxBg/829pN+3CfG3Q==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-resolver/binding-linux-x64-musl@11.21.3': + resolution: {integrity: sha512-QTBAb7JuHlZ7JUEyM8UiQi2f7m/L4swBhP2TNpYIDc9Wp/wRw1G/8sl6i13aIzQAXH7LKIm294LeOHd0lQR8zA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-resolver/binding-openharmony-arm64@11.21.3': + resolution: {integrity: sha512-4j1DFwjwv36ec9kds0jU/ucQ5Ha4ERO/H95BxR5JFf0kqUUAJ1kwII7XhTc1vZrkdJkvLGC9Q2MbpObpum8RBg==} + cpu: [arm64] + os: [openharmony] + + '@oxc-resolver/binding-wasm32-wasi@11.21.3': + resolution: {integrity: sha512-i8oluoel5kru/j1WNrjmQSiA3GQ7wvIYVR1IwIoZtKogAhya2iub+ZKIeSIkcJOrnzQ18Tzl/F+kL3fYOxZLvA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.21.3': + resolution: {integrity: sha512-M/8dw8dD6aOs+NlPJax401CZB9I7Aut84isQLgALGGwke4Afvw+/7yYhZb94yXf6t2sPLhQLmSmtSV+2FhsOWg==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.21.3': + resolution: {integrity: sha512-H7BCt/VnS9hnmMp42eGhZ99izSCRvlnWwy/N71K1/J8QoExwY4262Z8QiEkMDtduRJrztayDxETTckmUuAVL9Q==} + cpu: [x64] + os: [win32] + + '@oxc-transform/binding-android-arm-eabi@0.131.0': + resolution: {integrity: sha512-rcNvLlbNnxTfYVlZVF+Rev2AyCpJDpwVPphG4HOJxauaT1+w5VxL+kRdxCReof4A8ZsszbvIYlvkqvaJKO4Mog==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-transform/binding-android-arm64@0.131.0': + resolution: {integrity: sha512-/y+EH6QYQB2ZDQNvMlzItc36mw16GZwCDlvGYbQ4GCTE+7ZtSmx9E/rJOYzYyzMghz0c5dhJquRKScXdOZHpnQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-transform/binding-darwin-arm64@0.131.0': + resolution: {integrity: sha512-x1Va8zFomdYghAI0Zkt7kUmG50S65XH1u0EbIDr80M9idfXrQgd08ZGl3ejwRGLBrkbA8tkkmeOu1rWVFf7BXg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-transform/binding-darwin-x64@0.131.0': + resolution: {integrity: sha512-EwacackWpYYXGZsl0Aj4NKvDdLuxWZg7LQDneFyMwuftpAxPQLRkHFwZib7r6wpIJm4NELhHW261A4vZ8OQqXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-transform/binding-freebsd-x64@0.131.0': + resolution: {integrity: sha512-EhXqWOtL1PWcJ3ktdplV4Wrez2PRuTBSDdB7KF6CN4zuZhohUjxC1bxqDNRbNSX46yaZ27IzJLafah1J6mSA8Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-transform/binding-linux-arm-gnueabihf@0.131.0': + resolution: {integrity: sha512-NfNACr3aqBKeeUh6HCoGGPSjdMkLvyXUZQywCg/DwRkEpqZo55KX65saW1sQdgBcu0SKXrAReTjIm/HDO/OI0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -3583,21 +3708,6 @@ packages: peerDependencies: storybook: ^10.4.6 - '@storybook/addon-actions@8.6.14': - resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-backgrounds@8.6.14': - resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-controls@8.6.14': - resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/addon-docs@10.4.6': resolution: {integrity: sha512-aWAfP5JMiT5a3zBJizwroCRzOCqZwDTJmvsYvwMD3ilIEa/kT1vhf6Xrbk4XIPhDwbh8Hpb/Gfnka1xBYEISWg==} peerDependencies: @@ -3607,52 +3717,11 @@ packages: '@types/react': optional: true - '@storybook/addon-docs@8.6.14': - resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-essentials@8.6.14': - resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-highlight@8.6.14': - resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-measure@8.6.14': - resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-outline@8.6.14': - resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} + '@storybook/builder-vite@10.4.4': + resolution: {integrity: sha512-VyuZ4mEvhhVXjJa1qXMWKH8ohnas0rgEuJDf6u4aJ54XeENFebPUEAHde1Qo2PflJ4rUdVdXieOZzKbYwP5RAQ==} peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-toolbars@8.6.14': - resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-viewport@8.6.14': - resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/blocks@8.6.14': - resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^8.6.14 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + storybook: ^10.4.4 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 '@storybook/builder-vite@10.4.6': resolution: {integrity: sha512-BHBtD81HiXUiDQz/CaFynLtWmm7AFUQn8VnXuHipZ8KlnUANopa4yqdVuy/Gwz8ub254uFI5NMZsW/KlgWNgNg==} @@ -3660,23 +3729,22 @@ packages: storybook: ^10.4.6 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/builder-vite@8.6.18': - resolution: {integrity: sha512-XLqnOv4C36jlTd4uC8xpWBxv+7GV4/05zWJ0wAcU4qflorropUTirt4UQPGkwIzi+BVAhs9pJj+m4k0IWJtpHg==} - peerDependencies: - storybook: ^8.6.18 - vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - - '@storybook/components@8.6.18': - resolution: {integrity: sha512-55yViiZzPS/cPBuOeW4QGxGqrusjXVyxuknmbYCIwDtFyyvI/CgbjXRHdxNBaIjz+IlftxvBmmSaOqFG5+/dkA==} + '@storybook/csf-plugin@10.4.4': + resolution: {integrity: sha512-1mzZyAwVUmAcw4WEUsJDVdSupkJf+Kf/f5uNAs4RzlBXA75P8YRkDKAb2EoMwsB5URiXFi9XoeAN/vWke0G6+w==} peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - - '@storybook/core@8.6.18': - resolution: {integrity: sha512-dRBP2TnX6fGdS0T2mXBHjkS/3Nlu1ra1huovZVFuM67CYMzrhM/3hX/zru1vWSC5rqY93ZaAhjMciPW4pK5mMQ==} - peerDependencies: - prettier: ^2 || ^3 + esbuild: '*' + rollup: '*' + storybook: ^10.4.4 + vite: '*' + webpack: '*' peerDependenciesMeta: - prettier: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: optional: true '@storybook/csf-plugin@10.4.6': @@ -3697,37 +3765,19 @@ packages: webpack: optional: true - '@storybook/csf-plugin@8.6.14': - resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/csf-plugin@8.6.18': - resolution: {integrity: sha512-x1ioz/L0CwaelCkHci3P31YtvwayN3FBftvwQOPbvRh9qeb4Cpz5IdVDmyvSxxYwXN66uAORNoqgjTi7B4/y5Q==} - peerDependencies: - storybook: ^8.6.18 - '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - '@storybook/html-vite@8.6.18': - resolution: {integrity: sha512-mi/OqOpYZRFSIm9Jd3rMiieMKnVePlkW0wXKN3ly8UMYeXb/CzHSDEuFbfDXVo48ZOyYHOPRRBLQcjPxT807cw==} - engines: {node: '>=18.0.0'} - peerDependencies: - storybook: ^8.6.18 - - '@storybook/html@8.6.18': - resolution: {integrity: sha512-7yjb09rf7wP4hlVlirVPe+Jjo6kRsr4zEhuHlLM97Jf5Ojf7LH+vtvV9M3F7zs50lm9jTNBd45oWfTX8T7d2mw==} - engines: {node: '>=18.0.0'} + '@storybook/html-vite@10.4.6': + resolution: {integrity: sha512-X5CwPgtEQh5HoH0jSEGHnP8wiUX74xr69M2WOjgX6ll/QW/+mOZw4m0X+CjS+Aq1oDUSMacw+kKg6L230yjOEg==} peerDependencies: - storybook: ^8.6.18 + storybook: ^10.4.6 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/icons@1.6.0': - resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==} - engines: {node: '>=14.0.0'} + '@storybook/html@10.4.6': + resolution: {integrity: sha512-vUITtWVSP70csV10fRJVk5aQeXl9xDYr20IKDRyLtuJDoF+kETrc4nQ8f1/xnFwTg6tHSJuzYxaU8KXpHY3sLg==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^10.4.6 '@storybook/icons@2.0.2': resolution: {integrity: sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw==} @@ -3735,16 +3785,6 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@storybook/manager-api@8.6.18': - resolution: {integrity: sha512-BjIp12gEMgzFkEsgKpDIbZdnSWTZpm2dlws8WiPJCpgJtG+HWSxZ0/Ms30Au9yfwzQEKRSbV/5zpsKMGc2SIJw==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - - '@storybook/preview-api@8.6.18': - resolution: {integrity: sha512-joXRXh3GdVvzhbfIgmix1xs90p8Q/nja7AhEAC2egn5Pl7SKsIYZUCYI6UdrQANb2myg9P552LKXfPect8llKg==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/react-dom-shim@10.4.6': resolution: {integrity: sha512-iGNmKzrq9vgl2PDrYAnZKI+yvac3Ym+lJXXuQaqlFRS23zA5MNm4EBX+rAG7WulqchoK6NaZ0KQOs2mAgEpTMg==} peerDependencies: @@ -3759,13 +3799,6 @@ packages: '@types/react-dom': optional: true - '@storybook/react-dom-shim@8.6.14': - resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.14 - '@storybook/react-vite@10.4.6': resolution: {integrity: sha512-0arEQtybqGYXHbXpTot+Wv9YtG+V5Vp43QayXavPKQ20M8mpEzhyCPKd0EhqMGSC1Z1UEt0hm365WUBhI9LfKA==} peerDependencies: @@ -3791,23 +3824,30 @@ packages: typescript: optional: true - '@storybook/theming@8.6.18': - resolution: {integrity: sha512-n6OEjEtHupa2PdTwWzRepr7cO8NkDd4rgF6BKLitRbujOspLxzMBEqdphs+QLcuiCIgf33SqmEA64QWnbSMhPw==} + '@storybook/svelte-vite@10.4.6': + resolution: {integrity: sha512-zyFg12tksWb0gLK29ucyZO5oNh4veu4biMeJgAEPEALjHw8HysP7mTA4547JYprk3JzORpwSqQ7Y9TPPB0ZwFA==} peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@sveltejs/vite-plugin-svelte': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + storybook: ^10.4.6 + svelte: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/vue3-vite@8.6.18': - resolution: {integrity: sha512-iqRzIEmOOSI4+sAWAJb75FrKcFCAip4ykgwlAdU/SRTI//Cywpj0gN33TUaOBqP+vbqgtz/CJdDS2eozFIipeg==} - engines: {node: '>=18.0.0'} + '@storybook/svelte@10.4.6': + resolution: {integrity: sha512-U73tDy/2vgY83Zjjy7Q5Lz0ElpZZjGQHZHZd1rrD0gv1+Zas/7aTnRjRqIUrBNqHBx1S8VA5Tzp5YI0FkM1IOw==} peerDependencies: - storybook: ^8.6.18 - vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + storybook: ^10.4.6 + svelte: ^5.0.0 - '@storybook/vue3@8.6.18': - resolution: {integrity: sha512-FY6XkM3hW0aHxtrMEUBhlaBrIrS1Ler68mb/oZM2PQ9NqY2Mm9x3B3fZuQgFVzzEi4Vc/XXuYNVuC8+B5S0LhQ==} - engines: {node: '>=18.0.0'} + '@storybook/vue3-vite@10.4.6': + resolution: {integrity: sha512-XUcBOFsS8Btr9s9rC/kHUIrLGgrnXNmzwFldhA0FMf5ywFICGW1DneJpBwWNXabA2ii0GJqit8gaKNvnTf3UWw==} peerDependencies: - storybook: ^8.6.18 + storybook: ^10.4.6 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/vue3@10.4.6': + resolution: {integrity: sha512-X+rSRuhTeG5lL1Ayg/JugAPauqgi33D+y8vode0U5IdwJQUy0ew0kKoMUPd/WGbjcrZI8Pq9T/syX0aMvaPcNw==} + peerDependencies: + storybook: ^10.4.6 vue: ^3.0.0 '@stylistic/eslint-plugin@5.10.0': @@ -3847,6 +3887,20 @@ packages: peerDependencies: vue: ^2.7.0 || ^3.0.0 + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@turbo/darwin-64@2.9.15': resolution: {integrity: sha512-nnDo9R1Df+s2x6jxlERtbg7xRpuicf8p4J2krcnjeaMBt3q9V41pGXa4t9YM2Y4ozozsVJ+CH405CJUrWIQK4Q==} cpu: [x64] @@ -3880,6 +3934,9 @@ packages: '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -4059,9 +4116,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/uuid@9.0.8': - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/web-bluetooth@0.0.21': resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} @@ -4262,6 +4316,9 @@ packages: vitest: optional: true + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.1.7': resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} @@ -4276,6 +4333,9 @@ packages: vite: optional: true + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.1.7': resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} @@ -4285,21 +4345,36 @@ packages: '@vitest/snapshot@4.1.7': resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.1.7': resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.1.7': resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} '@volar/language-core@2.4.15': resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==} + '@volar/language-core@2.4.28': + resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} + '@volar/source-map@2.4.15': resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==} + '@volar/source-map@2.4.28': + resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + '@volar/typescript@2.4.15': resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==} + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + '@vue-macros/common@3.1.2': resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==} engines: {node: '>=20.19.0'} @@ -4434,6 +4509,9 @@ packages: peerDependencies: vue: ^3.5.0 + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + '@xterm/addon-fit@0.11.0': resolution: {integrity: sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==} @@ -4505,6 +4583,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -4539,6 +4621,9 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.1: resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} engines: {node: '>= 0.4'} @@ -4582,10 +4667,6 @@ packages: peerDependencies: postcss: ^8.1.0 - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - axe-core@4.12.1: resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} engines: {node: '>=4'} @@ -4681,10 +4762,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} - bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -4715,9 +4792,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browser-assert@1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - browserslist@4.28.2: resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -4773,10 +4847,6 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} - call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -4790,6 +4860,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -4809,6 +4883,10 @@ packages: character-parser@2.2.0: resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} @@ -5001,6 +5079,9 @@ packages: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -5232,6 +5313,13 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -5251,14 +5339,6 @@ packages: resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} engines: {node: '>=18'} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -5309,6 +5389,12 @@ packages: doctypes@1.1.0: resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -5418,16 +5504,6 @@ packages: es-toolkit@1.46.1: resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' - - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} @@ -5794,9 +5870,6 @@ packages: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} - find-package-json@1.2.0: - resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -5824,10 +5897,6 @@ packages: focus-trap@8.2.0: resolution: {integrity: sha512-CaBdQ9P4fa/yCA6pDf/3aJd8bf9IOG5QGK21/E+86o2V4V8kzXaR4A9E6tNR7KkkS1+T5ZIU1tJDBDLwsucz9g==} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -5870,10 +5939,6 @@ packages: fzf@0.5.2: resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -5989,9 +6054,6 @@ packages: hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -6094,6 +6156,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} @@ -6130,27 +6196,14 @@ packages: iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} - is-arguments@1.2.0: - resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} - engines: {node: '>= 0.4'} - is-builtin-module@5.0.0: resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} engines: {node: '>=18.20'} - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - is-core-module@2.16.2: resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6171,10 +6224,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -6227,18 +6276,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - is-wsl@3.1.1: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} @@ -6276,10 +6317,6 @@ packages: resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true - jsdoc-type-pratt-parser@4.8.0: - resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} - engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@7.1.1: resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==} engines: {node: '>=20.0.0'} @@ -6485,6 +6522,9 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -6499,6 +6539,10 @@ packages: resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} engines: {node: '>=16.14'} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-regexp@0.10.0: resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==} @@ -6515,9 +6559,6 @@ packages: magicast@0.5.2: resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} - map-or-similar@1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} - mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} @@ -6585,9 +6626,6 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memoizerific@1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} - merge-anything@5.1.7: resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} @@ -6721,6 +6759,10 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -6959,10 +7001,6 @@ packages: resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} engines: {node: '>=20'} - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -6971,6 +7009,10 @@ packages: resolution: {integrity: sha512-Ch0sBbrqZpeNZUMhVDbU2yrTWTVrUT/MkXb9E2DAc+hbhxbbO8D/XklUtfPP86/iqrkvl178+YQvh5u8Of1mUg==} engines: {node: ^20.19.0 || >=22.12.0} + oxc-parser@0.127.0: + resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} + engines: {node: ^20.19.0 || >=22.12.0} + oxc-parser@0.129.0: resolution: {integrity: sha512-S6eFI+VLkpyA+/Lf8z6qURjDV6Mgo74SLNznNopHTlQW3hedv2MB/z31kBRuBCCTqZN9HHdva0ojljEhPnBKFA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6979,6 +7021,9 @@ packages: resolution: {integrity: sha512-SJ3/7ZPbgie8dr5Z9BI/M51zZbpXba+hRSG0MDzVwMW5CRQg2fjYE0jHGlLX4eeiibGgC/mzoDFKSDHwVZEHRQ==} engines: {node: ^20.19.0 || >=22.12.0} + oxc-resolver@11.21.3: + resolution: {integrity: sha512-2Mx3fKQz7+xgrBONjsxOgCGtMHOn38/HxMzW1I5efwXB5a4lRN0Vp40gYUJFBWJslcrvwoofTrqoTnLbwTd3pA==} + oxc-transform@0.131.0: resolution: {integrity: sha512-ml0/elXPNnDnuHo3VHmEMN2fnybmKx7YL+0E+gMQ0fuHRZHXYJzF6YJ01KsCWg6FXY6pbZcjm7DC3xwGHnB/BA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -7072,6 +7117,10 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + perfect-debounce@2.1.0: resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} @@ -7119,14 +7168,6 @@ packages: points-on-path@0.2.1: resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - polished@4.3.1: - resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} - engines: {node: '>=10'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - postcss-calc@10.1.1: resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} engines: {node: ^18.12 || ^20.9 || >=22.0} @@ -7325,6 +7366,10 @@ packages: resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} engines: {node: '>=20'} + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -7433,6 +7478,9 @@ packages: peerDependencies: react: ^19.2.6 + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react@19.2.6: resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} engines: {node: '>=0.10.0'} @@ -7459,6 +7507,10 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + redis-errors@1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} @@ -7596,10 +7648,6 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -7651,10 +7699,6 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -7798,17 +7842,38 @@ packages: std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - storybook@8.6.18: - resolution: {integrity: sha512-p8seiSI6FiVY6P3V0pG+5v7c8pDMehMAFRWEhG5XqIBSQszzOjDnW2rNvm3odoLKfo3V3P6Cs6Hv9ILzymULyQ==} - hasBin: true + storybook-solidjs-vite@10.5.2: + resolution: {integrity: sha512-u+XSoTxE8JoVZ4IdI+gJRuNMQL00PCLA1BinBPdwHRKSSSVczf+JQhcfBJ2xxODs430RJp+JjAajKZeaSIHj9Q==} peerDependencies: - prettier: ^2 || ^3 + '@solidjs/web': ^2.0.0-0 + solid-js: ^1.8.0-0 || ^2.0.0-0 + storybook: ^0.0.0-0 || ^10.0.0 + typescript: ^4.0.0 || ^5.0.0 || ^6.0.0 + vite: 7.1.11 + vite-plugin-solid: 2.11.12 peerDependenciesMeta: - prettier: + '@solidjs/web': + optional: true + typescript: optional: true - streamx@2.25.0: - resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} + storybook@10.4.6: + resolution: {integrity: sha512-6wkA6LxfDSSilloITsrFOJfsnw0mDUP2h8Ls+lRt8oRsudtz2RWFhLv+Toiwg6NW7hUpdTDc2hzR7DztJid6+A==} + hasBin: true + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + prettier: ^2 || ^3 + vite-plus: ^0.1.15 + peerDependenciesMeta: + '@types/react': + optional: true + prettier: + optional: true + vite-plus: + optional: true + + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -7851,6 +7916,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + strip-indent@4.1.1: resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} @@ -7895,6 +7964,12 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svelte2tsx@0.7.57: + resolution: {integrity: sha512-nQo0xEfUpSVjfkxan2UmC6Wl9UZVe9+/pglUiyBNMJ7KDQ9DDooucmXdToBOvzSfgYjj/kMYwf6CTTDz/z048w==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 + svelte@5.56.3: resolution: {integrity: sha512-w7JvrM5IFl5cmfbY0TLik9o7mjRUJmRMhOR51tBPu708Gr/MjbGs7VnJnr/B0CaXeI4vtnOh7RKxDr0cwhMdDA==} engines: {node: '>=18'} @@ -7965,10 +8040,18 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -8081,10 +8164,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - type-fest@5.6.0: resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==} engines: {node: '>=20'} @@ -8197,10 +8276,6 @@ packages: resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} engines: {node: '>=20.19.0'} - unplugin@1.16.1: - resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} - engines: {node: '>=14.0.0'} - unplugin@2.3.11: resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} @@ -8297,21 +8372,18 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - uuid@11.1.1: resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} hasBin: true - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). - hasBin: true - valibot@1.4.1: resolution: {integrity: sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g==} peerDependencies: @@ -8665,10 +8737,6 @@ packages: whenexpr@0.1.2: resolution: {integrity: sha512-VVSufnKy206AoAYrxiZ0xof2nx0fqHCFYi7Ox/kAn7azSHsEc4geVlENPb4Nq8mKKlYPRKQrgIQbjrWldMvGCg==} - which-typed-array@1.1.22: - resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -8797,6 +8865,8 @@ packages: snapshots: + '@adobe/css-tools@4.5.0': {} + '@antfu/design@0.2.1(@antfu/utils@9.3.0)(@tanstack/vue-virtual@3.13.30(vue@3.5.34(typescript@5.9.3)))(@unocss/core@66.7.2)(colorjs.io@0.6.1)(floating-vue@5.2.2(vue@3.5.34(typescript@5.9.3)))(playwright@1.60.0)(reka-ui@2.10.1(vue@3.5.34(typescript@5.9.3)))(unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vue@3.5.34(typescript@5.9.3))': dependencies: '@vueuse/core': 14.3.0(vue@3.5.34(typescript@5.9.3)) @@ -8811,20 +8881,6 @@ snapshots: playwright: 1.60.0 reka-ui: 2.10.1(vue@3.5.34(typescript@5.9.3)) - '@antfu/design@0.2.1(@antfu/utils@9.3.0)(@tanstack/vue-virtual@3.13.30(vue@3.5.34(typescript@6.0.3)))(@unocss/core@66.7.2)(colorjs.io@0.6.1)(floating-vue@5.2.2(vue@3.5.34(typescript@6.0.3)))(playwright@1.60.0)(reka-ui@2.10.1(vue@3.5.34(typescript@6.0.3)))(unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vue@3.5.34(typescript@6.0.3))': - dependencies: - '@vueuse/core': 14.3.0(vue@3.5.34(typescript@6.0.3)) - unocss: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) - vue: 3.5.34(typescript@6.0.3) - optionalDependencies: - '@antfu/utils': 9.3.0 - '@tanstack/vue-virtual': 3.13.30(vue@3.5.34(typescript@6.0.3)) - '@unocss/core': 66.7.2 - colorjs.io: 0.6.1 - floating-vue: 5.2.2(vue@3.5.34(typescript@6.0.3)) - playwright: 1.60.0 - reka-ui: 2.10.1(vue@3.5.34(typescript@6.0.3)) - '@antfu/design@0.2.1(@antfu/utils@9.3.0)(@tanstack/vue-virtual@3.13.30(vue@3.5.34(typescript@6.0.3)))(@unocss/core@66.7.2)(colorjs.io@0.6.1)(floating-vue@5.2.2(vue@3.5.34(typescript@6.0.3)))(playwright@1.60.0)(reka-ui@2.10.1(vue@3.5.34(typescript@6.0.3)))(unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vue@3.5.34(typescript@6.0.3))': dependencies: '@vueuse/core': 14.3.0(vue@3.5.34(typescript@6.0.3)) @@ -9179,6 +9235,18 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.0': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 @@ -9189,11 +9257,21 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + '@es-joy/jsdoccomment@0.84.0': dependencies: '@types/estree': 1.0.9 @@ -9212,234 +9290,156 @@ snapshots: '@es-joy/resolve.exports@1.2.0': {} - '@esbuild/aix-ppc64@0.25.12': - optional: true - '@esbuild/aix-ppc64@0.27.7': optional: true '@esbuild/aix-ppc64@0.28.0': optional: true - '@esbuild/android-arm64@0.25.12': - optional: true - '@esbuild/android-arm64@0.27.7': optional: true '@esbuild/android-arm64@0.28.0': optional: true - '@esbuild/android-arm@0.25.12': - optional: true - '@esbuild/android-arm@0.27.7': optional: true '@esbuild/android-arm@0.28.0': optional: true - '@esbuild/android-x64@0.25.12': - optional: true - '@esbuild/android-x64@0.27.7': optional: true '@esbuild/android-x64@0.28.0': optional: true - '@esbuild/darwin-arm64@0.25.12': - optional: true - '@esbuild/darwin-arm64@0.27.7': optional: true '@esbuild/darwin-arm64@0.28.0': optional: true - '@esbuild/darwin-x64@0.25.12': - optional: true - '@esbuild/darwin-x64@0.27.7': optional: true '@esbuild/darwin-x64@0.28.0': optional: true - '@esbuild/freebsd-arm64@0.25.12': - optional: true - '@esbuild/freebsd-arm64@0.27.7': optional: true '@esbuild/freebsd-arm64@0.28.0': optional: true - '@esbuild/freebsd-x64@0.25.12': - optional: true - '@esbuild/freebsd-x64@0.27.7': optional: true '@esbuild/freebsd-x64@0.28.0': optional: true - '@esbuild/linux-arm64@0.25.12': - optional: true - '@esbuild/linux-arm64@0.27.7': optional: true '@esbuild/linux-arm64@0.28.0': optional: true - '@esbuild/linux-arm@0.25.12': - optional: true - '@esbuild/linux-arm@0.27.7': optional: true '@esbuild/linux-arm@0.28.0': optional: true - '@esbuild/linux-ia32@0.25.12': - optional: true - '@esbuild/linux-ia32@0.27.7': optional: true '@esbuild/linux-ia32@0.28.0': optional: true - '@esbuild/linux-loong64@0.25.12': - optional: true - '@esbuild/linux-loong64@0.27.7': optional: true '@esbuild/linux-loong64@0.28.0': optional: true - '@esbuild/linux-mips64el@0.25.12': - optional: true - '@esbuild/linux-mips64el@0.27.7': optional: true '@esbuild/linux-mips64el@0.28.0': optional: true - '@esbuild/linux-ppc64@0.25.12': - optional: true - '@esbuild/linux-ppc64@0.27.7': optional: true '@esbuild/linux-ppc64@0.28.0': optional: true - '@esbuild/linux-riscv64@0.25.12': - optional: true - '@esbuild/linux-riscv64@0.27.7': optional: true '@esbuild/linux-riscv64@0.28.0': optional: true - '@esbuild/linux-s390x@0.25.12': - optional: true - '@esbuild/linux-s390x@0.27.7': optional: true '@esbuild/linux-s390x@0.28.0': optional: true - '@esbuild/linux-x64@0.25.12': - optional: true - '@esbuild/linux-x64@0.27.7': optional: true '@esbuild/linux-x64@0.28.0': optional: true - '@esbuild/netbsd-arm64@0.25.12': - optional: true - '@esbuild/netbsd-arm64@0.27.7': optional: true '@esbuild/netbsd-arm64@0.28.0': optional: true - '@esbuild/netbsd-x64@0.25.12': - optional: true - '@esbuild/netbsd-x64@0.27.7': optional: true '@esbuild/netbsd-x64@0.28.0': optional: true - '@esbuild/openbsd-arm64@0.25.12': - optional: true - '@esbuild/openbsd-arm64@0.27.7': optional: true '@esbuild/openbsd-arm64@0.28.0': optional: true - '@esbuild/openbsd-x64@0.25.12': - optional: true - '@esbuild/openbsd-x64@0.27.7': optional: true '@esbuild/openbsd-x64@0.28.0': optional: true - '@esbuild/openharmony-arm64@0.25.12': - optional: true - '@esbuild/openharmony-arm64@0.27.7': optional: true '@esbuild/openharmony-arm64@0.28.0': optional: true - '@esbuild/sunos-x64@0.25.12': - optional: true - '@esbuild/sunos-x64@0.27.7': optional: true '@esbuild/sunos-x64@0.28.0': optional: true - '@esbuild/win32-arm64@0.25.12': - optional: true - '@esbuild/win32-arm64@0.27.7': optional: true '@esbuild/win32-arm64@0.28.0': optional: true - '@esbuild/win32-ia32@0.25.12': - optional: true - '@esbuild/win32-ia32@0.27.7': optional: true '@esbuild/win32-ia32@0.28.0': optional: true - '@esbuild/win32-x64@0.25.12': - optional: true - '@esbuild/win32-x64@0.27.7': optional: true @@ -9812,6 +9812,20 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.2 + optional: true + '@next/env@16.2.6': {} '@next/swc-darwin-arm64@16.2.6': @@ -10189,102 +10203,157 @@ snapshots: '@oxc-minify/binding-win32-x64-msvc@0.131.0': optional: true + '@oxc-parser/binding-android-arm-eabi@0.127.0': + optional: true + '@oxc-parser/binding-android-arm-eabi@0.129.0': optional: true '@oxc-parser/binding-android-arm-eabi@0.131.0': optional: true + '@oxc-parser/binding-android-arm64@0.127.0': + optional: true + '@oxc-parser/binding-android-arm64@0.129.0': optional: true '@oxc-parser/binding-android-arm64@0.131.0': optional: true + '@oxc-parser/binding-darwin-arm64@0.127.0': + optional: true + '@oxc-parser/binding-darwin-arm64@0.129.0': optional: true '@oxc-parser/binding-darwin-arm64@0.131.0': optional: true + '@oxc-parser/binding-darwin-x64@0.127.0': + optional: true + '@oxc-parser/binding-darwin-x64@0.129.0': optional: true '@oxc-parser/binding-darwin-x64@0.131.0': optional: true + '@oxc-parser/binding-freebsd-x64@0.127.0': + optional: true + '@oxc-parser/binding-freebsd-x64@0.129.0': optional: true '@oxc-parser/binding-freebsd-x64@0.131.0': optional: true + '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + optional: true + '@oxc-parser/binding-linux-arm-gnueabihf@0.129.0': optional: true '@oxc-parser/binding-linux-arm-gnueabihf@0.131.0': optional: true + '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + optional: true + '@oxc-parser/binding-linux-arm-musleabihf@0.129.0': optional: true '@oxc-parser/binding-linux-arm-musleabihf@0.131.0': optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.129.0': optional: true '@oxc-parser/binding-linux-arm64-gnu@0.131.0': optional: true + '@oxc-parser/binding-linux-arm64-musl@0.127.0': + optional: true + '@oxc-parser/binding-linux-arm64-musl@0.129.0': optional: true '@oxc-parser/binding-linux-arm64-musl@0.131.0': optional: true + '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + optional: true + '@oxc-parser/binding-linux-ppc64-gnu@0.129.0': optional: true '@oxc-parser/binding-linux-ppc64-gnu@0.131.0': optional: true + '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + optional: true + '@oxc-parser/binding-linux-riscv64-gnu@0.129.0': optional: true '@oxc-parser/binding-linux-riscv64-gnu@0.131.0': optional: true + '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + optional: true + '@oxc-parser/binding-linux-riscv64-musl@0.129.0': optional: true '@oxc-parser/binding-linux-riscv64-musl@0.131.0': optional: true + '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + optional: true + '@oxc-parser/binding-linux-s390x-gnu@0.129.0': optional: true '@oxc-parser/binding-linux-s390x-gnu@0.131.0': optional: true + '@oxc-parser/binding-linux-x64-gnu@0.127.0': + optional: true + '@oxc-parser/binding-linux-x64-gnu@0.129.0': optional: true '@oxc-parser/binding-linux-x64-gnu@0.131.0': optional: true + '@oxc-parser/binding-linux-x64-musl@0.127.0': + optional: true + '@oxc-parser/binding-linux-x64-musl@0.129.0': optional: true '@oxc-parser/binding-linux-x64-musl@0.131.0': optional: true + '@oxc-parser/binding-openharmony-arm64@0.127.0': + optional: true + '@oxc-parser/binding-openharmony-arm64@0.129.0': optional: true '@oxc-parser/binding-openharmony-arm64@0.131.0': optional: true + '@oxc-parser/binding-wasm32-wasi@0.127.0': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + optional: true + '@oxc-parser/binding-wasm32-wasi@0.129.0': dependencies: '@emnapi/core': 1.10.0 @@ -10299,30 +10368,102 @@ snapshots: '@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.127.0': + optional: true + '@oxc-parser/binding-win32-arm64-msvc@0.129.0': optional: true '@oxc-parser/binding-win32-arm64-msvc@0.131.0': optional: true + '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + optional: true + '@oxc-parser/binding-win32-ia32-msvc@0.129.0': optional: true '@oxc-parser/binding-win32-ia32-msvc@0.131.0': optional: true + '@oxc-parser/binding-win32-x64-msvc@0.127.0': + optional: true + '@oxc-parser/binding-win32-x64-msvc@0.129.0': optional: true '@oxc-parser/binding-win32-x64-msvc@0.131.0': optional: true + '@oxc-project/types@0.127.0': {} + '@oxc-project/types@0.129.0': {} '@oxc-project/types@0.131.0': {} '@oxc-project/types@0.132.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.21.3': + optional: true + + '@oxc-resolver/binding-android-arm64@11.21.3': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.21.3': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.21.3': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.21.3': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.21.3': + optional: true + + '@oxc-resolver/binding-openharmony-arm64@11.21.3': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.21.3': + dependencies: + '@emnapi/core': 1.11.0 + '@emnapi/runtime': 1.11.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0) + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.21.3': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.21.3': + optional: true + '@oxc-transform/binding-android-arm-eabi@0.131.0': optional: true @@ -10920,44 +11061,21 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@storybook/addon-a11y@10.4.6(storybook@8.6.18)': + '@storybook/addon-a11y@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))': dependencies: '@storybook/global': 5.0.0 axe-core: 4.12.1 - storybook: 8.6.18 - - '@storybook/addon-actions@8.6.14(storybook@8.6.18)': - dependencies: - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - storybook: 8.6.18 - uuid: 9.0.1 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@storybook/addon-backgrounds@8.6.14(storybook@8.6.18)': - dependencies: - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - storybook: 8.6.18 - ts-dedent: 2.2.0 - - '@storybook/addon-controls@8.6.14(storybook@8.6.18)': - dependencies: - '@storybook/global': 5.0.0 - dequal: 2.0.3 - storybook: 8.6.18 - ts-dedent: 2.2.0 - - '@storybook/addon-docs@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(rollup@4.60.3)(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': + '@storybook/addon-docs@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.15)(react@19.2.6) - '@storybook/csf-plugin': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + '@storybook/csf-plugin': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) '@storybook/icons': 2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@storybook/react-dom-shim': 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18) + '@storybook/react-dom-shim': 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)) react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - storybook: 8.6.18 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) ts-dedent: 2.2.0 optionalDependencies: '@types/react': 19.2.15 @@ -10968,74 +11086,10 @@ snapshots: - vite - webpack - '@storybook/addon-docs@8.6.14(@types/react@19.2.15)(storybook@8.6.18)': + '@storybook/builder-vite@10.4.4(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: - '@mdx-js/react': 3.1.1(@types/react@19.2.15)(react@19.2.6) - '@storybook/blocks': 8.6.14(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18) - '@storybook/csf-plugin': 8.6.14(storybook@8.6.18) - '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - storybook: 8.6.18 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - '@storybook/addon-essentials@8.6.14(@types/react@19.2.15)(storybook@8.6.18)': - dependencies: - '@storybook/addon-actions': 8.6.14(storybook@8.6.18) - '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.18) - '@storybook/addon-controls': 8.6.14(storybook@8.6.18) - '@storybook/addon-docs': 8.6.14(@types/react@19.2.15)(storybook@8.6.18) - '@storybook/addon-highlight': 8.6.14(storybook@8.6.18) - '@storybook/addon-measure': 8.6.14(storybook@8.6.18) - '@storybook/addon-outline': 8.6.14(storybook@8.6.18) - '@storybook/addon-toolbars': 8.6.14(storybook@8.6.18) - '@storybook/addon-viewport': 8.6.14(storybook@8.6.18) - storybook: 8.6.18 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - '@storybook/addon-highlight@8.6.14(storybook@8.6.18)': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.18 - - '@storybook/addon-measure@8.6.14(storybook@8.6.18)': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.18 - tiny-invariant: 1.3.3 - - '@storybook/addon-outline@8.6.14(storybook@8.6.18)': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.18 - ts-dedent: 2.2.0 - - '@storybook/addon-toolbars@8.6.14(storybook@8.6.18)': - dependencies: - storybook: 8.6.18 - - '@storybook/addon-viewport@8.6.14(storybook@8.6.18)': - dependencies: - memoizerific: 1.11.3 - storybook: 8.6.18 - - '@storybook/blocks@8.6.14(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18)': - dependencies: - '@storybook/icons': 1.6.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - storybook: 8.6.18 - ts-dedent: 2.2.0 - optionalDependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - - '@storybook/builder-vite@10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': - dependencies: - '@storybook/csf-plugin': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) - storybook: 8.6.18 + '@storybook/csf-plugin': 10.4.4(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) ts-dedent: 2.2.0 vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) transitivePeerDependencies: @@ -11043,131 +11097,81 @@ snapshots: - rollup - webpack - '@storybook/builder-vite@8.6.18(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': + '@storybook/builder-vite@10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: - '@storybook/csf-plugin': 8.6.18(storybook@8.6.18) - browser-assert: 1.2.1 - storybook: 8.6.18 - ts-dedent: 2.2.0 - vite: 8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) - - '@storybook/builder-vite@8.6.18(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': - dependencies: - '@storybook/csf-plugin': 8.6.18(storybook@8.6.18) - browser-assert: 1.2.1 - storybook: 8.6.18 + '@storybook/csf-plugin': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) ts-dedent: 2.2.0 vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) - - '@storybook/components@8.6.18(storybook@8.6.18)': - dependencies: - storybook: 8.6.18 - - '@storybook/core@8.6.18(storybook@8.6.18)': - dependencies: - '@storybook/theming': 8.6.18(storybook@8.6.18) - better-opn: 3.0.2 - browser-assert: 1.2.1 - esbuild: 0.25.12 - esbuild-register: 3.6.0(esbuild@0.25.12) - jsdoc-type-pratt-parser: 4.8.0 - process: 0.11.10 - recast: 0.23.11 - semver: 7.8.1 - util: 0.12.5 - ws: 8.21.0 transitivePeerDependencies: - - bufferutil - - storybook - - supports-color - - utf-8-validate + - esbuild + - rollup + - webpack - '@storybook/csf-plugin@10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': + '@storybook/csf-plugin@10.4.4(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: - storybook: 8.6.18 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) unplugin: 2.3.11 optionalDependencies: esbuild: 0.28.0 rollup: 4.60.3 vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) - '@storybook/csf-plugin@8.6.14(storybook@8.6.18)': + '@storybook/csf-plugin@10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: - storybook: 8.6.18 - unplugin: 1.16.1 - - '@storybook/csf-plugin@8.6.18(storybook@8.6.18)': - dependencies: - storybook: 8.6.18 - unplugin: 1.16.1 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.28.0 + rollup: 4.60.3 + vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) '@storybook/global@5.0.0': {} - '@storybook/html-vite@8.6.18(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': + '@storybook/html-vite@10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: - '@storybook/builder-vite': 8.6.18(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) - '@storybook/html': 8.6.18(storybook@8.6.18) - magic-string: 0.30.21 - storybook: 8.6.18 + '@storybook/builder-vite': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + '@storybook/html': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)) + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) transitivePeerDependencies: - - vite + - esbuild + - rollup + - webpack - '@storybook/html@8.6.18(storybook@8.6.18)': + '@storybook/html@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))': dependencies: - '@storybook/components': 8.6.18(storybook@8.6.18) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.18(storybook@8.6.18) - '@storybook/preview-api': 8.6.18(storybook@8.6.18) - '@storybook/theming': 8.6.18(storybook@8.6.18) - storybook: 8.6.18 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) ts-dedent: 2.2.0 - '@storybook/icons@1.6.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - '@storybook/icons@2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - '@storybook/manager-api@8.6.18(storybook@8.6.18)': - dependencies: - storybook: 8.6.18 - - '@storybook/preview-api@8.6.18(storybook@8.6.18)': - dependencies: - storybook: 8.6.18 - - '@storybook/react-dom-shim@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18)': + '@storybook/react-dom-shim@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))': dependencies: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - storybook: 8.6.18 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) optionalDependencies: '@types/react': 19.2.15 '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@storybook/react-dom-shim@8.6.14(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18)': - dependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - storybook: 8.6.18 - - '@storybook/react-vite@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(rollup@4.60.3)(storybook@8.6.18)(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': + '@storybook/react-vite@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(esbuild@0.28.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) '@rollup/pluginutils': 5.3.0(rollup@4.60.3) - '@storybook/builder-vite': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) - '@storybook/react': 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18)(typescript@6.0.3) + '@storybook/builder-vite': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + '@storybook/react': 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3) empathic: 2.0.1 magic-string: 0.30.21 react: 19.2.6 react-docgen: 8.0.3 react-dom: 19.2.6(react@19.2.6) resolve: 1.22.12 - storybook: 8.6.18 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tsconfig-paths: 4.2.0 vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) transitivePeerDependencies: @@ -11179,15 +11183,15 @@ snapshots: - typescript - webpack - '@storybook/react@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18)(typescript@6.0.3)': + '@storybook/react@10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@8.6.18) + '@storybook/react-dom-shim': 10.4.6(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)) react: 19.2.6 react-docgen: 8.0.3 react-docgen-typescript: 2.4.0(typescript@6.0.3) react-dom: 19.2.6(react@19.2.6) - storybook: 8.6.18 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) optionalDependencies: '@types/react': 19.2.15 '@types/react-dom': 19.2.3(@types/react@19.2.15) @@ -11195,35 +11199,50 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/theming@8.6.18(storybook@8.6.18)': + '@storybook/svelte-vite@10.4.6(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.3(@typescript-eslint/types@8.59.2))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(svelte@5.56.3(@typescript-eslint/types@8.59.2))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: - storybook: 8.6.18 + '@storybook/builder-vite': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + '@storybook/svelte': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(svelte@5.56.3(@typescript-eslint/types@8.59.2)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.56.3(@typescript-eslint/types@8.59.2))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + magic-string: 0.30.21 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + svelte: 5.56.3(@typescript-eslint/types@8.59.2) + svelte2tsx: 0.7.57(svelte@5.56.3(@typescript-eslint/types@8.59.2))(typescript@5.9.3) + typescript: 5.9.3 + vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) + transitivePeerDependencies: + - esbuild + - rollup + - webpack - '@storybook/vue3-vite@8.6.18(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))': + '@storybook/svelte@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(svelte@5.56.3(@typescript-eslint/types@8.59.2))': dependencies: - '@storybook/builder-vite': 8.6.18(storybook@8.6.18)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) - '@storybook/vue3': 8.6.18(storybook@8.6.18)(vue@3.5.34(typescript@5.9.3)) - find-package-json: 1.2.0 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + svelte: 5.56.3(@typescript-eslint/types@8.59.2) + ts-dedent: 2.2.0 + type-fest: 5.6.0 + + '@storybook/vue3-vite@10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@storybook/builder-vite': 10.4.6(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + '@storybook/vue3': 10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vue@3.5.34(typescript@5.9.3)) magic-string: 0.30.21 - storybook: 8.6.18 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) typescript: 5.9.3 vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) vue-component-meta: 2.2.12(typescript@5.9.3) vue-docgen-api: 4.79.2(vue@3.5.34(typescript@5.9.3)) transitivePeerDependencies: + - esbuild + - rollup - vue + - webpack - '@storybook/vue3@8.6.18(storybook@8.6.18)(vue@3.5.34(typescript@5.9.3))': + '@storybook/vue3@10.4.6(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vue@3.5.34(typescript@5.9.3))': dependencies: - '@storybook/components': 8.6.18(storybook@8.6.18) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.18(storybook@8.6.18) - '@storybook/preview-api': 8.6.18(storybook@8.6.18) - '@storybook/theming': 8.6.18(storybook@8.6.18) - '@vue/compiler-core': 3.5.34 - storybook: 8.6.18 - ts-dedent: 2.2.0 - type-fest: 2.19.0 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + type-fest: 5.6.0 vue: 3.5.34(typescript@5.9.3) vue-component-type-helpers: 3.3.5 @@ -11280,6 +11299,30 @@ snapshots: vue: 3.5.34(typescript@6.0.3) optional: true + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.29.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.5.0 + aria-query: 5.3.1 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + '@turbo/darwin-64@2.9.15': optional: true @@ -11303,6 +11346,8 @@ snapshots: tslib: 2.8.1 optional: true + '@types/aria-query@5.0.4': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.3 @@ -11507,8 +11552,6 @@ snapshots: '@types/unist@3.0.3': {} - '@types/uuid@9.0.8': {} - '@types/web-bluetooth@0.0.21': {} '@types/ws@8.18.1': @@ -11753,19 +11796,6 @@ snapshots: dependencies: '@unocss/core': 66.7.2 - '@unocss/vite@66.7.2(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': - dependencies: - '@jridgewell/remapping': 2.3.5 - '@unocss/config': 66.7.2 - '@unocss/core': 66.7.2 - '@unocss/inspector': 66.7.2 - chokidar: 5.0.0 - magic-string: 0.30.21 - pathe: 2.0.3 - tinyglobby: 0.2.16 - unplugin-utils: 0.3.1 - vite: 8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) - '@unocss/vite@66.7.2(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: '@jridgewell/remapping': 2.3.5 @@ -11852,6 +11882,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + '@vitest/expect@4.1.7': dependencies: '@standard-schema/spec': 1.1.0 @@ -11861,14 +11899,6 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': - dependencies: - '@vitest/spy': 4.1.7 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) - '@vitest/mocker@4.1.7(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4))': dependencies: '@vitest/spy': 4.1.7 @@ -11877,6 +11907,10 @@ snapshots: optionalDependencies: vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/pretty-format@4.1.7': dependencies: tinyrainbow: 3.1.0 @@ -11893,8 +11927,18 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + '@vitest/spy@4.1.7': {} + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + '@vitest/utils@4.1.7': dependencies: '@vitest/pretty-format': 4.1.7 @@ -11905,14 +11949,26 @@ snapshots: dependencies: '@volar/source-map': 2.4.15 + '@volar/language-core@2.4.28': + dependencies: + '@volar/source-map': 2.4.28 + '@volar/source-map@2.4.15': {} + '@volar/source-map@2.4.28': {} + '@volar/typescript@2.4.15': dependencies: '@volar/language-core': 2.4.15 path-browserify: 1.0.1 vscode-uri: 3.1.0 + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + '@vue-macros/common@3.1.2(vue@3.5.34(typescript@6.0.3))': dependencies: '@vue/compiler-sfc': 3.5.34 @@ -12083,6 +12139,8 @@ snapshots: dependencies: vue: 3.5.34(typescript@6.0.3) + '@webcontainer/env@1.1.1': {} + '@xterm/addon-fit@0.11.0': {} '@xterm/xterm@6.0.0': {} @@ -12140,6 +12198,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} ansis@4.3.0: {} @@ -12185,6 +12245,10 @@ snapshots: dependencies: tslib: 2.8.1 + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + aria-query@5.3.1: {} asap@2.0.6: {} @@ -12226,10 +12290,6 @@ snapshots: postcss: 8.5.15 postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - axe-core@4.12.1: {} axobject-query@4.1.0: {} @@ -12300,10 +12360,6 @@ snapshots: baseline-browser-mapping@2.10.29: {} - better-opn@3.0.2: - dependencies: - open: 8.4.2 - bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -12347,8 +12403,6 @@ snapshots: dependencies: fill-range: 7.1.1 - browser-assert@1.2.1: {} - browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.29 @@ -12418,13 +12472,6 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.9: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -12441,6 +12488,14 @@ snapshots: ccount@2.0.1: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chai@6.2.2: {} change-case@5.4.4: {} @@ -12455,6 +12510,8 @@ snapshots: dependencies: is-regex: 1.2.1 + check-error@2.1.3: {} + chokidar@5.0.0: dependencies: readdirp: 5.0.0 @@ -12617,6 +12674,8 @@ snapshots: css-what@6.2.2: {} + css.escape@1.5.1: {} + cssesc@3.0.0: {} cssnano-preset-default@8.0.1(postcss@8.5.15): @@ -12871,6 +12930,10 @@ snapshots: mimic-response: 3.1.0 optional: true + dedent-js@1.0.1: {} + + deep-eql@5.0.2: {} + deep-extend@0.6.0: optional: true @@ -12885,14 +12948,6 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.1 - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-lazy-prop@2.0.0: {} - define-lazy-prop@3.0.0: {} defu@6.1.7: {} @@ -12927,6 +12982,10 @@ snapshots: doctypes@1.1.0: {} + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -12955,7 +13014,9 @@ snapshots: dotenv@17.4.2: {} - dts-resolver@3.0.0: {} + dts-resolver@3.0.0(oxc-resolver@11.21.3): + optionalDependencies: + oxc-resolver: 11.21.3 dunder-proto@1.0.1: dependencies: @@ -13013,42 +13074,6 @@ snapshots: es-toolkit@1.46.1: {} - esbuild-register@3.6.0(esbuild@0.25.12): - dependencies: - debug: 4.4.3 - esbuild: 0.25.12 - transitivePeerDependencies: - - supports-color - - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -13548,8 +13573,6 @@ snapshots: transitivePeerDependencies: - supports-color - find-package-json@1.2.0: {} - find-up-simple@1.0.1: {} find-up@5.0.0: @@ -13581,10 +13604,6 @@ snapshots: dependencies: tabbable: 6.4.0 - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -13613,8 +13632,6 @@ snapshots: fzf@0.5.2: {} - generator-function@2.0.1: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -13740,10 +13757,6 @@ snapshots: hachure-fill@0.5.2: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -13841,6 +13854,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + indent-string@5.0.0: {} inherits@2.0.4: {} @@ -13874,23 +13889,14 @@ snapshots: iron-webcrypto@1.2.1: {} - is-arguments@1.2.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-builtin-module@5.0.0: dependencies: builtin-modules: 5.2.0 - is-callable@1.2.7: {} - is-core-module@2.16.2: dependencies: hasown: 2.0.3 - is-docker@2.2.1: {} - is-docker@3.0.0: {} is-expression@4.0.0: @@ -13904,14 +13910,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -13956,16 +13954,8 @@ snapshots: is-stream@3.0.0: {} - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.22 - is-what@4.1.16: {} - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -13997,8 +13987,6 @@ snapshots: argparse: 1.0.10 esprima: 4.0.1 - jsdoc-type-pratt-parser@4.8.0: {} - jsdoc-type-pratt-parser@7.1.1: {} jsdoc-type-pratt-parser@7.2.0: {} @@ -14170,6 +14158,8 @@ snapshots: longest-streak@3.1.0: {} + loupe@3.2.1: {} + lru-cache@10.4.3: {} lru-cache@11.3.6: {} @@ -14180,6 +14170,8 @@ snapshots: lru-cache@8.0.5: {} + lz-string@1.5.0: {} + magic-regexp@0.10.0: dependencies: estree-walker: 3.0.3 @@ -14211,8 +14203,6 @@ snapshots: '@babel/types': 7.29.0 source-map-js: 1.2.1 - map-or-similar@1.5.0: {} - mark.js@8.11.1: {} markdown-table@3.0.4: {} @@ -14364,10 +14354,6 @@ snapshots: media-typer@1.1.0: {} - memoizerific@1.11.3: - dependencies: - map-or-similar: 1.5.0 - merge-anything@5.1.7: dependencies: is-what: 4.1.16 @@ -14628,6 +14614,8 @@ snapshots: mimic-response@3.1.0: optional: true + min-indent@1.0.1: {} + minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 @@ -15057,12 +15045,6 @@ snapshots: powershell-utils: 0.1.0 wsl-utils: 0.3.1 - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -15095,6 +15077,31 @@ snapshots: '@oxc-minify/binding-win32-ia32-msvc': 0.131.0 '@oxc-minify/binding-win32-x64-msvc': 0.131.0 + oxc-parser@0.127.0: + dependencies: + '@oxc-project/types': 0.127.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.127.0 + '@oxc-parser/binding-android-arm64': 0.127.0 + '@oxc-parser/binding-darwin-arm64': 0.127.0 + '@oxc-parser/binding-darwin-x64': 0.127.0 + '@oxc-parser/binding-freebsd-x64': 0.127.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.127.0 + '@oxc-parser/binding-linux-arm64-musl': 0.127.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.127.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-gnu': 0.127.0 + '@oxc-parser/binding-linux-x64-musl': 0.127.0 + '@oxc-parser/binding-openharmony-arm64': 0.127.0 + '@oxc-parser/binding-wasm32-wasi': 0.127.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.127.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 + '@oxc-parser/binding-win32-x64-msvc': 0.127.0 + oxc-parser@0.129.0: dependencies: '@oxc-project/types': 0.129.0 @@ -15145,6 +15152,28 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.131.0 '@oxc-parser/binding-win32-x64-msvc': 0.131.0 + oxc-resolver@11.21.3: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.21.3 + '@oxc-resolver/binding-android-arm64': 11.21.3 + '@oxc-resolver/binding-darwin-arm64': 11.21.3 + '@oxc-resolver/binding-darwin-x64': 11.21.3 + '@oxc-resolver/binding-freebsd-x64': 11.21.3 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.21.3 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.21.3 + '@oxc-resolver/binding-linux-arm64-gnu': 11.21.3 + '@oxc-resolver/binding-linux-arm64-musl': 11.21.3 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.21.3 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.21.3 + '@oxc-resolver/binding-linux-riscv64-musl': 11.21.3 + '@oxc-resolver/binding-linux-s390x-gnu': 11.21.3 + '@oxc-resolver/binding-linux-x64-gnu': 11.21.3 + '@oxc-resolver/binding-linux-x64-musl': 11.21.3 + '@oxc-resolver/binding-openharmony-arm64': 11.21.3 + '@oxc-resolver/binding-wasm32-wasi': 11.21.3 + '@oxc-resolver/binding-win32-arm64-msvc': 11.21.3 + '@oxc-resolver/binding-win32-x64-msvc': 11.21.3 + oxc-transform@0.131.0: optionalDependencies: '@oxc-transform/binding-android-arm-eabi': 0.131.0 @@ -15238,6 +15267,8 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.1: {} + perfect-debounce@2.1.0: {} picocolors@1.1.1: {} @@ -15281,12 +15312,6 @@ snapshots: path-data-parser: 0.1.0 points-on-curve: 0.2.0 - polished@4.3.1: - dependencies: - '@babel/runtime': 7.29.7 - - possible-typed-array-names@1.1.0: {} - postcss-calc@10.1.1(postcss@8.5.15): dependencies: postcss: 8.5.15 @@ -15481,6 +15506,12 @@ snapshots: pretty-bytes@7.1.0: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + process-nextick-args@2.0.1: {} process@0.11.10: {} @@ -15635,6 +15666,8 @@ snapshots: react: 19.2.6 scheduler: 0.27.0 + react-is@17.0.2: {} + react@19.2.6: {} readable-stream@2.3.8: @@ -15676,6 +15709,11 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + redis-errors@1.2.0: {} redis-parser@3.0.0: @@ -15761,14 +15799,14 @@ snapshots: robust-predicates@3.0.3: {} - rolldown-plugin-dts@0.25.0(rolldown@1.0.2)(typescript@5.9.3): + rolldown-plugin-dts@0.25.0(oxc-resolver@11.21.3)(rolldown@1.0.2)(typescript@5.9.3): dependencies: '@babel/generator': 8.0.0-rc.4 '@babel/helper-validator-identifier': 8.0.0-rc.4 '@babel/parser': 8.0.0-rc.4 ast-kit: 3.0.0-beta.1 birpc: 4.0.0 - dts-resolver: 3.0.0 + dts-resolver: 3.0.0(oxc-resolver@11.21.3) get-tsconfig: 5.0.0-beta.5 obug: 2.1.1 rolldown: 1.0.2 @@ -15777,14 +15815,14 @@ snapshots: transitivePeerDependencies: - oxc-resolver - rolldown-plugin-dts@0.25.0(rolldown@1.0.2)(typescript@6.0.3): + rolldown-plugin-dts@0.25.0(oxc-resolver@11.21.3)(rolldown@1.0.2)(typescript@6.0.3): dependencies: '@babel/generator': 8.0.0-rc.4 '@babel/helper-validator-identifier': 8.0.0-rc.4 '@babel/parser': 8.0.0-rc.4 ast-kit: 3.0.0-beta.1 birpc: 4.0.0 - dts-resolver: 3.0.0 + dts-resolver: 3.0.0(oxc-resolver@11.21.3) get-tsconfig: 5.0.0-beta.5 obug: 2.1.1 rolldown: 1.0.2 @@ -15886,12 +15924,6 @@ snapshots: safe-buffer@5.2.1: {} - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - safer-buffer@2.1.2: {} sax@1.6.0: {} @@ -15950,15 +15982,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - setprototypeof@1.2.0: {} sharp@0.34.5: @@ -16146,12 +16169,48 @@ snapshots: std-env@4.1.0: {} - storybook@8.6.18: + storybook-solidjs-vite@10.5.2(esbuild@0.28.0)(rollup@4.60.3)(solid-js@1.9.13)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3)(vite-plugin-solid@2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.13)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)): + dependencies: + '@storybook/builder-vite': 10.4.4(esbuild@0.28.0)(rollup@4.60.3)(storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + '@storybook/global': 5.0.0 + '@volar/language-core': 2.4.28 + '@volar/typescript': 2.4.28 + semver: 7.8.1 + solid-js: 1.9.13 + storybook: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) + vite-plugin-solid: 2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.13)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + storybook@10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - '@storybook/core': 8.6.18(storybook@8.6.18) + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + '@webcontainer/env': 1.1.1 + esbuild: 0.28.0 + open: 10.2.0 + oxc-parser: 0.127.0 + oxc-resolver: 11.21.3 + recast: 0.23.11 + semver: 7.8.1 + use-sync-external-store: 1.6.0(react@19.2.6) + ws: 8.21.0 + optionalDependencies: + '@types/react': 19.2.15 transitivePeerDependencies: + - '@testing-library/dom' - bufferutil - - supports-color + - react + - react-dom - utf-8-validate streamx@2.25.0: @@ -16208,6 +16267,10 @@ snapshots: strip-final-newline@3.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + strip-indent@4.1.1: {} strip-json-comments@2.0.1: @@ -16236,6 +16299,13 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svelte2tsx@0.7.57(svelte@5.56.3(@typescript-eslint/types@8.59.2))(typescript@5.9.3): + dependencies: + dedent-js: 1.0.1 + scule: 1.3.0 + svelte: 5.56.3(@typescript-eslint/types@8.59.2) + typescript: 5.9.3 + svelte@5.56.3(@typescript-eslint/types@8.59.2): dependencies: '@jridgewell/remapping': 2.3.5 @@ -16348,8 +16418,12 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyrainbow@2.0.0: {} + tinyrainbow@3.1.0: {} + tinyspy@4.0.4: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -16389,7 +16463,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.22.0(tsx@4.22.3)(typescript@5.9.3): + tsdown@0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@5.9.3): dependencies: ansis: 4.3.0 cac: 7.0.0 @@ -16400,7 +16474,7 @@ snapshots: obug: 2.1.1 picomatch: 4.0.4 rolldown: 1.0.2 - rolldown-plugin-dts: 0.25.0(rolldown@1.0.2)(typescript@5.9.3) + rolldown-plugin-dts: 0.25.0(oxc-resolver@11.21.3)(rolldown@1.0.2)(typescript@5.9.3) semver: 7.8.1 tinyexec: 1.2.2 tinyglobby: 0.2.16 @@ -16415,7 +16489,7 @@ snapshots: - oxc-resolver - vue-tsc - tsdown@0.22.0(tsx@4.22.3)(typescript@6.0.3): + tsdown@0.22.0(oxc-resolver@11.21.3)(tsx@4.22.3)(typescript@6.0.3): dependencies: ansis: 4.3.0 cac: 7.0.0 @@ -16426,7 +16500,7 @@ snapshots: obug: 2.1.1 picomatch: 4.0.4 rolldown: 1.0.2 - rolldown-plugin-dts: 0.25.0(rolldown@1.0.2)(typescript@6.0.3) + rolldown-plugin-dts: 0.25.0(oxc-resolver@11.21.3)(rolldown@1.0.2)(typescript@6.0.3) semver: 7.8.1 tinyexec: 1.2.2 tinyglobby: 0.2.16 @@ -16477,8 +16551,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@2.19.0: {} - type-fest@5.6.0: dependencies: tagged-tag: 1.0.0 @@ -16585,30 +16657,6 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)): - dependencies: - '@unocss/cli': 66.7.2 - '@unocss/core': 66.7.2 - '@unocss/preset-attributify': 66.7.2 - '@unocss/preset-icons': 66.7.2 - '@unocss/preset-mini': 66.7.2 - '@unocss/preset-tagify': 66.7.2 - '@unocss/preset-typography': 66.7.2 - '@unocss/preset-uno': 66.7.2 - '@unocss/preset-web-fonts': 66.7.2 - '@unocss/preset-wind': 66.7.2 - '@unocss/preset-wind3': 66.7.2 - '@unocss/preset-wind4': 66.7.2 - '@unocss/transformer-attributify-jsx': 66.7.2 - '@unocss/transformer-compile-class': 66.7.2 - '@unocss/transformer-directives': 66.7.2 - '@unocss/transformer-variant-group': 66.7.2 - '@unocss/vite': 66.7.2(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) - optionalDependencies: - '@unocss/postcss': 66.7.2(postcss@8.5.15) - transitivePeerDependencies: - - vite - unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)): dependencies: '@unocss/cli': 66.7.2 @@ -16640,11 +16688,6 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.4 - unplugin@1.16.1: - dependencies: - acorn: 8.16.0 - webpack-virtual-modules: 0.6.2 - unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 @@ -16712,19 +16755,13 @@ snapshots: dependencies: punycode: 2.3.1 - util-deprecate@1.0.2: {} - - util@0.12.5: + use-sync-external-store@1.6.0(react@19.2.6): dependencies: - inherits: 2.0.4 - is-arguments: 1.2.0 - is-generator-function: 1.1.2 - is-typed-array: 1.1.15 - which-typed-array: 1.1.22 + react: 19.2.6 - uuid@11.1.1: {} + util-deprecate@1.0.2: {} - uuid@9.0.1: {} + uuid@11.1.1: {} valibot@1.4.1(typescript@5.9.3): optionalDependencies: @@ -16814,7 +16851,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.12(solid-js@1.9.13)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)): + vite-plugin-solid@2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.13)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)): dependencies: '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 @@ -16824,6 +16861,8 @@ snapshots: solid-refresh: 0.6.3(solid-js@1.9.13) vite: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) vitefu: 1.1.3(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + optionalDependencies: + '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color @@ -16864,22 +16903,6 @@ snapshots: tsx: 4.22.3 yaml: 2.8.4 - vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.15 - rolldown: 1.0.2 - tinyglobby: 0.2.16 - optionalDependencies: - '@types/node': 25.9.1 - esbuild: 0.25.12 - fsevents: 2.3.3 - jiti: 2.7.0 - terser: 5.47.1 - tsx: 4.22.3 - yaml: 2.8.4 - vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4): dependencies: lightningcss: 1.32.0 @@ -16956,33 +16979,6 @@ snapshots: - universal-cookie - yaml - vitest@4.1.7(@types/node@25.9.1)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)): - dependencies: - '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) - '@vitest/pretty-format': 4.1.7 - '@vitest/runner': 4.1.7 - '@vitest/snapshot': 4.1.7 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.2.2 - tinyglobby: 0.2.16 - tinyrainbow: 3.1.0 - vite: 8.0.14(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.9.1 - transitivePeerDependencies: - - msw - vitest@4.1.7(@types/node@25.9.1)(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)): dependencies: '@vitest/expect': 4.1.7 @@ -17137,16 +17133,6 @@ snapshots: whenexpr@0.1.2: {} - which-typed-array@1.1.22: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d5ff4aa..f798e8c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -22,6 +22,7 @@ packages: - packages/* - plugins/* - examples/* + - storybook - docs overrides: chokidar: ^5.0.0 @@ -101,13 +102,13 @@ catalogs: storybook: '@storybook/addon-a11y': ^10.4.6 '@storybook/addon-docs': ^10.4.6 - '@storybook/addon-essentials': ^8.6.14 - '@storybook/html-vite': ^8.6.14 + '@storybook/html-vite': ^10.4.6 '@storybook/react-vite': ^10.4.6 - '@storybook/vue3': ^8.6.14 - '@storybook/vue3-vite': ^8.6.14 + '@storybook/svelte-vite': ^10.4.6 + '@storybook/vue3-vite': ^10.4.6 '@vitejs/plugin-react-oxc': ^0.4.3 - storybook: ^8.6.14 + storybook: ^10.4.6 + storybook-solidjs-vite: ^10.5.2 testing: '@playwright/test': ^1.60.0 tsnapi: ^0.3.3 diff --git a/storybook/.storybook/main.ts b/storybook/.storybook/main.ts new file mode 100644 index 0000000..b274ddb --- /dev/null +++ b/storybook/.storybook/main.ts @@ -0,0 +1,39 @@ +import type { StorybookConfig } from '@storybook/html-vite' +import UnoCSS from 'unocss/vite' + +// Each devframe plugin ships its own framework-specific Storybook (React, Vue, +// Svelte, Solid, vanilla). This host is a thin shell that composes them into one +// UI via Storybook refs — every plugin becomes its own top-level section. +// +// - In DEVELOPMENT each plugin runs its own dev server on a fixed port and the +// host references it live (`pnpm storybook` starts all of them in parallel). +// - In PRODUCTION `scripts/build.mjs` builds each plugin's Storybook into a +// subfolder of this host's static output, so the refs resolve on one origin. +const sections = [ + { id: 'git', title: 'Git', port: 6011 }, + { id: 'inspect', title: 'Inspect', port: 6012 }, + { id: 'code-server', title: 'Code Server', port: 6013 }, + { id: 'terminals', title: 'Terminals', port: 6014 }, + { id: 'a11y', title: 'A11y', port: 6015 }, +] + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.@(ts|tsx|mdx)'], + framework: { + name: '@storybook/html-vite', + options: {}, + }, + refs: (_config, { configType }) => Object.fromEntries( + sections.map(({ id, title, port }) => [ + id, + { title, url: configType === 'DEVELOPMENT' ? `http://localhost:${port}` : `./${id}` }, + ]), + ), + viteFinal(viteConfig) { + viteConfig.plugins ??= [] + viteConfig.plugins.push(UnoCSS()) + return viteConfig + }, +} + +export default config diff --git a/storybook/.storybook/preview.ts b/storybook/.storybook/preview.ts new file mode 100644 index 0000000..2b1ef96 --- /dev/null +++ b/storybook/.storybook/preview.ts @@ -0,0 +1,41 @@ +import type { Decorator, Preview } from '@storybook/html-vite' +import 'virtual:uno.css' +import '@antfu/design/styles.css' + +// The host shell tracks the same theme convention as every composed plugin: dark +// mode is the `.dark` class on ``, and the canvas takes the semantic +// `bg-base`/`color-base` surface. +function applyTheme(theme: string): void { + document.documentElement.classList.toggle('dark', theme !== 'light') + document.body.classList.add('bg-base', 'color-base', 'font-sans') +} + +const withTheme: Decorator = (story, context) => { + applyTheme(context.globals.theme ?? 'dark') + return story(context) +} + +const preview: Preview = { + parameters: { + layout: 'fullscreen', + controls: { expanded: true }, + }, + globalTypes: { + theme: { + description: 'Color theme', + defaultValue: 'dark', + toolbar: { + title: 'Theme', + icon: 'contrast', + items: [ + { value: 'light', title: 'Light', icon: 'sun' }, + { value: 'dark', title: 'Dark', icon: 'moon' }, + ], + dynamicTitle: true, + }, + }, + }, + decorators: [withTheme], +} + +export default preview diff --git a/storybook/package.json b/storybook/package.json new file mode 100644 index 0000000..6c04d75 --- /dev/null +++ b/storybook/package.json @@ -0,0 +1,20 @@ +{ + "name": "@devframes/storybook", + "type": "module", + "version": "0.5.4", + "private": true, + "description": "Unified Storybook host — composes every devframe plugin's Storybook (React, Vue, Svelte, Solid, vanilla) into one UI, each plugin its own section.", + "scripts": { + "storybook": "storybook dev -p 6006 --host 0.0.0.0", + "storybook:build": "node scripts/build.mjs", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@antfu/design": "catalog:frontend", + "@iconify-json/ph": "catalog:frontend", + "@storybook/html-vite": "catalog:storybook", + "storybook": "catalog:storybook", + "unocss": "catalog:frontend", + "vite": "catalog:build" + } +} diff --git a/storybook/scripts/build.mjs b/storybook/scripts/build.mjs new file mode 100644 index 0000000..3611fdd --- /dev/null +++ b/storybook/scripts/build.mjs @@ -0,0 +1,42 @@ +// Builds the unified Storybook: the host shell into `storybook-static/`, then +// each plugin's Storybook into a subfolder so the host's production refs +// (`./git`, `./inspect`, …) resolve on a single origin. Serve `storybook-static/` +// (e.g. `npx sirv-cli storybook-static`) to view the composed result. +import { spawnSync } from 'node:child_process' +import process from 'node:process' +import { fileURLToPath } from 'node:url' + +const pkgRoot = fileURLToPath(new URL('..', import.meta.url)) +const repoRoot = fileURLToPath(new URL('../../', import.meta.url)) +const outDir = fileURLToPath(new URL('../storybook-static', import.meta.url)) + +const plugins = ['git', 'inspect', 'code-server', 'terminals', 'a11y'] + +function build(label, cwd, args) { + console.warn(`\n▶ building ${label} Storybook…`) + const result = spawnSync('storybook', ['build', ...args], { + cwd, + stdio: 'inherit', + env: process.env, + }) + if (result.status !== 0) { + console.error(`✗ failed to build ${label} Storybook`) + process.exit(result.status ?? 1) + } +} + +// 1) Host shell → storybook-static/ (this also cleans the output directory). +build('host', pkgRoot, ['--output-dir', outDir]) + +// 2) Each plugin → storybook-static// (created after the host build, so they +// survive the host's clean). +for (const id of plugins) { + build(id, `${repoRoot}plugins/${id}`, [ + '--config-dir', + `${repoRoot}plugins/${id}/.storybook`, + '--output-dir', + `${outDir}/${id}`, + ]) +} + +console.warn(`\n✓ unified Storybook built → ${outDir}`) diff --git a/storybook/src/Introduction.stories.ts b/storybook/src/Introduction.stories.ts new file mode 100644 index 0000000..f6ab7ae --- /dev/null +++ b/storybook/src/Introduction.stories.ts @@ -0,0 +1,69 @@ +import type { Meta, StoryObj } from '@storybook/html-vite' + +interface Section { + icon: string + title: string + framework: string + blurb: string +} + +const sections: Section[] = [ + { icon: 'i-ph:git-branch-duotone', title: 'Git', framework: 'React', blurb: 'Read-only repository dashboard — status, log, branches, diff.' }, + { icon: 'i-ph:magnifying-glass-duotone', title: 'Inspect', framework: 'Vue', blurb: 'Self-inspector for the RPC registry, shared state and agent surface.' }, + { icon: 'i-ph:code-duotone', title: 'Code Server', framework: 'vanilla', blurb: 'Launch code-server and embed the editor in an authenticated iframe.' }, + { icon: 'i-ph:terminal-window-duotone', title: 'Terminals', framework: 'Svelte', blurb: 'Readonly output streams and fully interactive PTY shells.' }, + { icon: 'i-ph:person-arms-spread-duotone', title: 'A11y', framework: 'Solid', blurb: 'Runs axe-core against the host app and surfaces the violations.' }, +] + +function card({ icon, title, framework, blurb }: Section): string { + return ` +
+
+
+ ${title} + ${framework} +
+

${blurb}

+
` +} + +function render(): HTMLElement { + const el = document.createElement('div') + el.className = 'min-h-svh p-8 md:p-12' + el.innerHTML = ` +
+
+
+
+ devframe + Storybook +
+

One Storybook, every surface.

+

+ Each devframe plugin owns a framework-specific Storybook. This host composes + them into a single UI — pick a plugin in the sidebar to browse its stories. + Every surface shares the same @antfu/design + system, so they look and feel like one product across frameworks. +

+
+
+ ${sections.map(card).join('')} +
+
+ Use the theme toggle in the toolbar to switch light / dark. +
+
` + return el +} + +const meta = { + title: 'Overview/Introduction', + parameters: { layout: 'fullscreen' }, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Introduction: Story = { + render, +} diff --git a/storybook/tsconfig.json b/storybook/tsconfig.json new file mode 100644 index 0000000..0572097 --- /dev/null +++ b/storybook/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["vite/client"], + "noEmit": true + }, + "include": ["src"] +} diff --git a/storybook/uno.config.ts b/storybook/uno.config.ts new file mode 100644 index 0000000..ec5943b --- /dev/null +++ b/storybook/uno.config.ts @@ -0,0 +1,43 @@ +import { presetAnthonyDesign } from '@antfu/design/unocss' +import { + defineConfig, + presetIcons, + presetWebFonts, + presetWind4, + transformerDirectives, + transformerVariantGroup, +} from 'unocss' + +// The unified host's own welcome/overview surface uses `@antfu/design` directly, +// with the same stack every plugin composes: the sage-green preset over a Wind4 +// base, Phosphor icons, DM Sans/Mono and the directive/variant-group +// transformers. Only the host shell reads this config; each composed plugin +// generates its own CSS from its own `uno.config.ts`. The welcome page is +// hand-written vanilla `.ts`, so `.ts` is opted into the extraction pipeline. +export default defineConfig({ + presets: [ + presetAnthonyDesign({ primary: '#3a6a45' }), + presetWind4(), + presetIcons({ scale: 1.1 }), + presetWebFonts({ provider: 'none', fonts: { sans: 'DM Sans', mono: 'DM Mono' } }), + ], + transformers: [transformerDirectives(), transformerVariantGroup()], + // Wind4 leaves bare `border`/`border-b` at currentColor; restore the subtle + // shared border color (matching `border-base`) for unqualified borders. + preflights: [{ getCSS: () => '*,::before,::after{border-color:#8882}' }], + shortcuts: { + 'z-nav': 'z-[30]', + 'z-dropdown': 'z-[40]', + 'z-tooltip': 'z-[45]', + 'z-toast': 'z-[50]', + 'z-modal-backdrop': 'z-[60]', + 'z-modal-content': 'z-[70]', + 'z-drawer-backdrop': 'z-[80]', + 'z-drawer-content': 'z-[90]', + }, + content: { + pipeline: { + include: [/\.(?:[cm]?[jt]sx?|html)($|\?)/], + }, + }, +}) From ac8440db50e575572ed6fab518522d335c181bc4 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Wed, 1 Jul 2026 07:20:34 +0000 Subject: [PATCH 2/5] =?UTF-8?q?feat(examples):=20add=20storybook-hub=20?= =?UTF-8?q?=E2=80=94=20dock=20every=20plugin's=20Storybook=20on=20the=20hu?= =?UTF-8?q?b?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A second take on the unified Storybook: instead of Storybook Composition, use @devframes/hub as the shell and surface each plugin's Storybook as its own lazily-mounted iframe dock, alongside the live terminals plugin. - dev: the plugin's `storybook dev` is spawned on first dock open and iframed live (the on-demand embed pattern code-server uses) - build: the pre-built storybook-static/ is served by the hub on one origin - both unified behind a `storybook-hub:ensure` RPC; each dock's iframe is created lazily and kept mounted to preserve its state --- examples/storybook-hub/README.md | 53 ++++ examples/storybook-hub/index.html | 55 ++++ examples/storybook-hub/package.json | 29 ++ examples/storybook-hub/src/client/env.d.ts | 3 + examples/storybook-hub/src/client/icons.ts | 25 ++ examples/storybook-hub/src/client/main.ts | 246 ++++++++++++++++ examples/storybook-hub/src/storybook-hub.ts | 299 ++++++++++++++++++++ examples/storybook-hub/tsconfig.json | 12 + examples/storybook-hub/uno.config.ts | 39 +++ examples/storybook-hub/vite.config.ts | 12 + pnpm-lock.yaml | 37 +++ turbo.json | 5 + 12 files changed, 815 insertions(+) create mode 100644 examples/storybook-hub/README.md create mode 100644 examples/storybook-hub/index.html create mode 100644 examples/storybook-hub/package.json create mode 100644 examples/storybook-hub/src/client/env.d.ts create mode 100644 examples/storybook-hub/src/client/icons.ts create mode 100644 examples/storybook-hub/src/client/main.ts create mode 100644 examples/storybook-hub/src/storybook-hub.ts create mode 100644 examples/storybook-hub/tsconfig.json create mode 100644 examples/storybook-hub/uno.config.ts create mode 100644 examples/storybook-hub/vite.config.ts diff --git a/examples/storybook-hub/README.md b/examples/storybook-hub/README.md new file mode 100644 index 0000000..86d764a --- /dev/null +++ b/examples/storybook-hub/README.md @@ -0,0 +1,53 @@ +# storybook-hub + +A devframe hub, built on `@devframes/hub`, that surfaces every built-in plugin's +Storybook as its own dock — plus the live terminals plugin running as a real +integration. It's a second take on the unified Storybook: instead of Storybook +Composition, the **hub** is the shell and each Storybook is a lazily-mounted +iframe dock (the same on-demand embed pattern the code-server plugin uses). + +## How it works + +The whole host is one Vite plugin (`src/storybook-hub.ts`): it creates a hub +context, implements the framework-neutral `DevframeHost`, registers a dock per +plugin Storybook, mounts the terminals plugin via `mountDevframe`, and starts a +side-car RPC/WS server. + +Each Storybook dock's iframe is created **only when the dock is first opened**, +then kept mounted so its state survives tab switches. Where the iframe points +depends on the mode, unified behind the `storybook-hub:ensure` RPC: + +- **dev** (`vite`) — the plugin's `storybook dev` server is spawned on first + open and the dock iframes it live (HMR). +- **build** (`vite preview`) — the pre-built `storybook/storybook-static/` + is served by the hub on one origin and the dock iframes that. + +## Run it + +Build the plugin SPAs the hub mounts (terminals) once: + +```sh +pnpm build +``` + +### Dev — Storybooks spawned on demand + +```sh +pnpm --filter storybook-hub dev +``` + +Open the printed URL, then click a Storybook in the sidebar; its dev server +boots on first open (subsequent opens are instant). The dev servers listen on +their own ports, so reaching them from a remote browser needs those ports +forwarded. + +### Preview — pre-built Storybooks on one origin + +```sh +pnpm storybook:build # produces storybook/storybook-static/ +pnpm --filter storybook-hub build +pnpm --filter storybook-hub preview +``` + +Everything is served from the single preview origin, so one forwarded port +reaches the whole hub. diff --git a/examples/storybook-hub/index.html b/examples/storybook-hub/index.html new file mode 100644 index 0000000..c022f73 --- /dev/null +++ b/examples/storybook-hub/index.html @@ -0,0 +1,55 @@ + + + + + + Storybook Hub + + + +
+
+

+ Storybook Hub +

+

Connecting…

+

every plugin's Storybook as a lazy dock, on @devframes/hub

+
+ +
+ + +
+
+ +
+
+ +
+
+

Activity

+
  • No activity yet.
+
+ +
+

Commands

+
  • Waiting for snapshot…
+
+ +
+
+
+
+ + + diff --git a/examples/storybook-hub/package.json b/examples/storybook-hub/package.json new file mode 100644 index 0000000..d8bda5d --- /dev/null +++ b/examples/storybook-hub/package.json @@ -0,0 +1,29 @@ +{ + "name": "storybook-hub", + "type": "module", + "version": "0.5.4", + "private": true, + "description": "Example — a devframe hub that docks every built-in plugin's Storybook (lazily spawned in dev, served static in build) alongside the live terminals plugin.", + "homepage": "https://github.com/devframes/devframe/tree/main/examples/storybook-hub", + "scripts": { + "dev": "vite --host", + "build": "vite build", + "preview": "vite preview --host", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@antfu/design": "catalog:frontend", + "@devframes/hub": "workspace:*", + "@devframes/plugin-terminals": "workspace:*", + "colorjs.io": "catalog:frontend", + "devframe": "workspace:*" + }, + "devDependencies": { + "@iconify-json/ph": "catalog:frontend", + "get-port-please": "catalog:deps", + "pathe": "catalog:deps", + "storybook": "catalog:storybook", + "unocss": "catalog:frontend", + "vite": "catalog:build" + } +} diff --git a/examples/storybook-hub/src/client/env.d.ts b/examples/storybook-hub/src/client/env.d.ts new file mode 100644 index 0000000..01b4394 --- /dev/null +++ b/examples/storybook-hub/src/client/env.d.ts @@ -0,0 +1,3 @@ +/// + +declare module 'virtual:uno.css' diff --git a/examples/storybook-hub/src/client/icons.ts b/examples/storybook-hub/src/client/icons.ts new file mode 100644 index 0000000..678c5ba --- /dev/null +++ b/examples/storybook-hub/src/client/icons.ts @@ -0,0 +1,25 @@ +// @unocss-include +// Map a devframe dock `icon` (e.g. `ph:git-branch-duotone`) to a UnoCSS +// `preset-icons` class. Keeping the class strings literal lets UnoCSS +// statically extract them and inline only these glyphs from `@iconify-json/ph` +// at build time. Add a row here to support another dock icon. +const ICON_CLASS: Record = { + 'ph:git-branch-duotone': 'i-ph-git-branch-duotone', + 'ph:magnifying-glass-duotone': 'i-ph-magnifying-glass-duotone', + 'ph:code-duotone': 'i-ph-code-duotone', + 'ph:terminal-window-duotone': 'i-ph-terminal-window-duotone', + 'ph:person-arms-spread-duotone': 'i-ph-person-arms-spread-duotone', + 'ph:books-duotone': 'i-ph-books-duotone', + 'ph:plug-duotone': 'i-ph-plug-duotone', +} + +/** + * Resolve a dock icon to its UnoCSS class, or an empty string when the icon + * isn't mapped (the caller falls back to a text initial). + */ +export function iconClass(name: string | { light: string, dark: string } | undefined): string { + if (!name) + return '' + const id = typeof name === 'string' ? name : name.light + return ICON_CLASS[id] ?? '' +} diff --git a/examples/storybook-hub/src/client/main.ts b/examples/storybook-hub/src/client/main.ts new file mode 100644 index 0000000..d2ab99a --- /dev/null +++ b/examples/storybook-hub/src/client/main.ts @@ -0,0 +1,246 @@ +import type { + DevframeCommandEntry, + DevframeDockEntry, + DevframeMessageEntry, +} from '@devframes/hub/types' +import { connectDevframe } from '@devframes/hub/client' +import { iconClass } from './icons' +import 'virtual:uno.css' +import '@antfu/design/styles.css' + +const HUB_BASE = '/__hub/' + +// Mirror of the host's `storybook-hub:ensure` return shape. +type EnsureResult + = | { ok: true, kind: 'port', port: number } + | { ok: true, kind: 'path', url: string } + | { ok: false, error: string } + +type IframeDock = DevframeDockEntry & { type: 'iframe', url: string } + +/** Sidebar section order; anything else follows alphabetically. */ +const CATEGORY_ORDER = ['Storybooks', 'Plugins'] + +const connEl = document.querySelector('#conn')! +const docksEl = document.querySelector('#docks')! +const stageEl = document.querySelector('#stage')! +const overlayEl = document.querySelector('#overlay')! +const messagesEl = document.querySelector('#messages')! +const commandsEl = document.querySelector('#commands')! +const pingBtn = document.querySelector('#ping')! + +interface DockRuntime { + iframe?: HTMLIFrameElement + status: 'idle' | 'starting' | 'ready' | 'error' + error?: string +} + +const runtimes = new Map() +let docks: IframeDock[] = [] +let selectedId: string | null = null + +function setStatus(text: string, kind?: 'ready' | 'error') { + const dot = kind === 'ready' ? 'bg-success' : kind === 'error' ? 'bg-error' : 'bg-neutral-400' + connEl.innerHTML = `${text}` +} + +function isIframeDock(d: DevframeDockEntry): d is IframeDock { + return d.type === 'iframe' && typeof (d as { url?: unknown }).url === 'string' +} + +function isStorybookDock(id: string): boolean { + return id.startsWith('sb-') +} + +function runtimeFor(id: string): DockRuntime { + let rt = runtimes.get(id) + if (!rt) { + rt = { status: 'idle' } + runtimes.set(id, rt) + } + return rt +} + +function dockIcon(entry: DevframeDockEntry): string { + const cls = iconClass(entry.icon) + if (cls) + return `` + const initial = (entry.title?.[0] ?? '?').toUpperCase() + return `${initial}` +} + +function overlay(kind: 'spin' | 'error' | 'idle', title: string, detail = '') { + const glyph = kind === 'spin' + ? '' + : kind === 'error' + ? '' + : '' + overlayEl.style.display = 'flex' + overlayEl.innerHTML = `
${glyph}
${title}
${detail ? `
${detail}
` : ''}
` +} + +function updateStage() { + for (const [id, rt] of runtimes) { + if (rt.iframe) + rt.iframe.style.display = id === selectedId ? 'block' : 'none' + } + + if (!selectedId) { + overlay('idle', 'No dock selected') + return + } + const rt = runtimes.get(selectedId) + const title = docks.find(d => d.id === selectedId)?.title ?? selectedId + if (!rt || rt.status === 'starting' || (rt.status !== 'error' && !rt.iframe)) { + overlay('spin', isStorybookDock(selectedId) ? `Starting ${title} Storybook…` : `Loading ${title}…`) + return + } + if (rt.status === 'error') { + overlay('error', `Failed to start ${title}`, rt.error) + return + } + overlayEl.style.display = 'none' +} + +async function ensureUrl(rpc: Awaited>, entry: IframeDock): Promise { + // Live plugin docks already carry a hub-served URL; only Storybook docks are + // resolved on demand (spawned in dev, static in build). + if (!isStorybookDock(entry.id)) + return entry.url + + const result = await rpc.call('storybook-hub:ensure' as any, { id: entry.id.slice(3) }) as EnsureResult + if (!result.ok) + throw new Error(result.error) + return result.kind === 'path' + ? result.url + : `${location.protocol}//${location.hostname}:${result.port}/` +} + +function initDock(rpc: Awaited>, entry: IframeDock) { + const rt = runtimeFor(entry.id) + if (rt.status !== 'idle') + return + rt.status = 'starting' + updateStage() + + ensureUrl(rpc, entry) + .then((url) => { + const frame = document.createElement('iframe') + frame.className = 'absolute inset-0 h-full w-full border-0 bg-base' + frame.title = entry.title + frame.setAttribute('allow', 'clipboard-read; clipboard-write') + frame.addEventListener('load', () => { + rt.status = 'ready' + updateStage() + }) + frame.src = url + rt.iframe = frame + // Keep every opened dock mounted so its state survives tab switches. + stageEl.appendChild(frame) + updateStage() + }) + .catch((err: Error) => { + rt.status = 'error' + rt.error = err.message + updateStage() + }) +} + +async function main() { + setStatus('Connecting…') + const rpc = await connectDevframe({ baseURL: HUB_BASE }) + setStatus(`Connected · backend=${rpc.connectionMeta.backend}`, 'ready') + + const switchTo = (id: string) => { + if (!docks.some(d => d.id === id)) + return + selectedId = id + renderSidebar() + const rt = runtimeFor(id) + if (rt.status === 'idle') + initDock(rpc, docks.find(d => d.id === id)!) + updateStage() + } + + function renderSidebar() { + if (!docks.length) { + docksEl.innerHTML = '
  • No docks yet…
  • ' + return + } + const categories = [...new Set(docks.map(d => d.category ?? 'Other'))].sort( + (a, b) => { + const ia = CATEGORY_ORDER.indexOf(a) + const ib = CATEGORY_ORDER.indexOf(b) + return (ia === -1 ? Infinity : ia) - (ib === -1 ? Infinity : ib) || a.localeCompare(b) + }, + ) + docksEl.innerHTML = categories.map((category) => { + const items = docks.filter(d => (d.category ?? 'Other') === category) + const buttons = items.map(d => + `
  • `).join('') + return `
  • ${category}
  • ${buttons}` + }).join('') + } + + // Docks — read from `devframe:docks` shared state. + const docksState = await rpc.sharedState.get('devframe:docks', { initialValue: [] }) + const syncDocks = () => { + docks = (docksState.value() ?? []).filter(isIframeDock) + if (selectedId && !docks.some(d => d.id === selectedId)) + selectedId = null + if (!selectedId && docks.length) + selectedId = docks[0].id + renderSidebar() + if (selectedId) { + const rt = runtimeFor(selectedId) + if (rt.status === 'idle') + initDock(rpc, docks.find(d => d.id === selectedId)!) + } + updateStage() + } + docksState.on('updated', syncDocks) + + docksEl.addEventListener('click', (event) => { + const target = (event.target as HTMLElement).closest('button[data-dock-id]') + if (target?.dataset.dockId) + switchTo(target.dataset.dockId) + }) + syncDocks() + + // Commands — read from `devframe:commands` shared state. + const commands = await rpc.sharedState.get('devframe:commands', { initialValue: [] }) + const renderCommands = () => renderList(commandsEl, commands.value() ?? [], c => + `
  • ${c.title} ${c.id}
  • `) + commands.on('updated', renderCommands) + renderCommands() + + // Activity — poll hub messages (spawn progress, etc.). + const refreshMessages = async () => { + const entries = await rpc.call('storybook-hub:messages:list' as any) as DevframeMessageEntry[] + renderList(messagesEl, entries.slice(-12).reverse(), m => + `
  • [${m.level}] ${m.message}
  • `) + } + await refreshMessages() + setInterval(() => void refreshMessages(), 2000) + + pingBtn.addEventListener('click', async () => { + try { + const result = await rpc.call('hub:commands:execute' as any, 'storybook-hub:ping') + pingBtn.textContent = `Ping returned ${JSON.stringify(result)}` + } + catch (err) { + pingBtn.textContent = `Error: ${(err as Error).message}` + } + }) +} + +function renderList(host: HTMLElement, items: readonly T[], render: (item: T) => string) { + host.innerHTML = items.length + ? items.map(render).join('') + : '
  • empty
  • ' +} + +main().catch((err) => { + setStatus(`Failed: ${(err as Error).message}`, 'error') + console.error(err) +}) diff --git a/examples/storybook-hub/src/storybook-hub.ts b/examples/storybook-hub/src/storybook-hub.ts new file mode 100644 index 0000000..ca43e7d --- /dev/null +++ b/examples/storybook-hub/src/storybook-hub.ts @@ -0,0 +1,299 @@ +import type { DevframeHubContext } from '@devframes/hub/node' +import type { DevframeHost } from 'devframe/types' +import type { ChildProcess } from 'node:child_process' +import type { Plugin, PreviewServer, ResolvedConfig, ViteDevServer } from 'vite' +import { spawn } from 'node:child_process' +import { existsSync } from 'node:fs' +import { createRequire } from 'node:module' +import { homedir } from 'node:os' +import process from 'node:process' +import { fileURLToPath } from 'node:url' +import { defineHubRpcFunction } from '@devframes/hub' +import { createHubContext, mountDevframe } from '@devframes/hub/node' +import terminalsDevframe from '@devframes/plugin-terminals' +import { DEVFRAME_CONNECTION_META_FILENAME } from 'devframe/constants' +import { startHttpAndWs } from 'devframe/node' +import { serveStaticNodeMiddleware } from 'devframe/utils/serve-static' +import { getPort } from 'get-port-please' +import { dirname, join } from 'pathe' + +/** A plugin whose Storybook this hub surfaces as its own dock. */ +interface StorybookMeta { + /** Plugin folder under `plugins/` and the `.storybook` config it owns. */ + id: string + /** Dock title. */ + title: string + /** Dock icon (mapped to a Phosphor glyph client-side). */ + icon: string +} + +const STORYBOOKS: StorybookMeta[] = [ + { id: 'git', title: 'Git', icon: 'ph:git-branch-duotone' }, + { id: 'inspect', title: 'Inspect', icon: 'ph:magnifying-glass-duotone' }, + { id: 'code-server', title: 'Code Server', icon: 'ph:code-duotone' }, + { id: 'terminals', title: 'Terminals', icon: 'ph:terminal-window-duotone' }, + { id: 'a11y', title: 'A11y', icon: 'ph:person-arms-spread-duotone' }, +] + +// Repo root, resolved from this file (…/examples/storybook-hub/src/) so paths +// hold regardless of the process cwd. +const repoRoot = fileURLToPath(new URL('../../../', import.meta.url)) +const require = createRequire(import.meta.url) +// Storybook's CLI entry — run with `node` so we don't depend on PATH/.bin. +const storybookBin = join(dirname(require.resolve('storybook/package.json')), 'dist/bin/dispatcher.js') + +const pluginDir = (id: string): string => join(repoRoot, 'plugins', id) +const storybookConfigDir = (id: string): string => join(pluginDir(id), '.storybook') +const storybookStaticDir = (id: string): string => join(repoRoot, 'storybook', 'storybook-static', id) + +/** What the client needs to point a dock's iframe at the right place. */ +export type EnsureStorybookResult + = | { ok: true, kind: 'port', port: number } + | { ok: true, kind: 'path', url: string } + | { ok: false, error: string } + +// Read-side RPC so the UI can list hub messages (spawn progress, etc.). +const storybookHubMessagesList = defineHubRpcFunction({ + name: 'storybook-hub:messages:list', + type: 'static', + jsonSerializable: true, + setup: (ctx: DevframeHubContext) => ({ + async handler() { + return Array.from(ctx.messages.entries.values()) + }, + }), +}) + +export interface StorybookHubOptions { + /** Mount path for the hub's connection-meta endpoint. Default: `/__hub/`. */ + base?: string + /** Preferred port for the side-car RPC/WS server. Default: a free port near 9787. */ + port?: number +} + +/** + * A Vite plugin that turns a Vite dev/preview server into a devframe hub whose + * docks are the built-in plugins' Storybooks — plus the live terminals plugin. + * + * Each Storybook dock's iframe is created lazily, only when the dock is first + * opened (mirroring how the code-server plugin embeds its editor on demand): + * + * - **dev** (`vite`): the plugin's `storybook dev` server is spawned on first + * open and the dock iframes it live (HMR). + * - **build** (`vite preview`): the pre-built `storybook/storybook-static/` + * is served by the hub and the dock iframes that single origin. + * + * Both paths are unified behind the `storybook-hub:ensure` RPC, so the client + * has one flow regardless of mode. + */ +export function storybookHub(options: StorybookHubOptions = {}): Plugin { + const base = normalizeBase(options.base ?? '/__hub/') + let viteConfig: ResolvedConfig | undefined + let started: { close: () => Promise } | undefined + const devServers = new Map }>() + + function killDevServers(): void { + for (const { proc } of devServers.values()) + proc.kill() + devServers.clear() + } + + /** + * Spawn (once) the `storybook dev` server for a plugin and resolve when it + * answers on its port. Concurrent callers await the same boot. + */ + async function ensureDevServer(ctx: DevframeHubContext, meta: StorybookMeta): Promise { + const existing = devServers.get(meta.id) + if (existing) + return existing.ready + + const port = await getPort({ port: 6100 + STORYBOOKS.findIndex(s => s.id === meta.id), random: true }) + const cwd = pluginDir(meta.id) + const proc = spawn( + process.execPath, + [storybookBin, 'dev', '--config-dir', storybookConfigDir(meta.id), '--port', String(port), '--host', '0.0.0.0', '--no-open', '--quiet'], + { cwd, env: { ...process.env, STORYBOOK_DISABLE_TELEMETRY: '1' }, stdio: 'inherit' }, + ) + proc.on('exit', () => devServers.delete(meta.id)) + + void ctx.messages.add({ + level: 'info', + message: `Starting ${meta.title} Storybook…`, + description: `storybook dev on port ${port}`, + }) + + const ready = waitForPort(port, 180_000).then(() => { + void ctx.messages.add({ level: 'success', message: `${meta.title} Storybook ready`, description: `port ${port}` }) + return port + }) + devServers.set(meta.id, { port, proc, ready }) + return ready + } + + async function startHub(server: ViteDevServer | PreviewServer, mode: 'dev' | 'build'): Promise { + await started?.close().catch(() => {}) + started = undefined + killDevServers() + + const cwd = viteConfig?.root ?? process.cwd() + const port = options.port ?? await getPort({ port: 9787, random: false }) + + const serveConnectionMeta = (metaBase: string): void => { + server.middlewares.use(`${metaBase}${DEVFRAME_CONNECTION_META_FILENAME}`, (_req, res) => { + res.setHeader('Content-Type', 'application/json') + res.end(JSON.stringify({ backend: 'websocket', websocket: port })) + }) + } + + const host: DevframeHost = { + mountStatic(mountBase, distDir) { + server.middlewares.use(mountBase, serveStaticNodeMiddleware(distDir)) + }, + mountConnectionMeta(metaBase) { + serveConnectionMeta(metaBase) + }, + resolveOrigin() { + const resolved = server.resolvedUrls?.local?.[0] + return resolved ? new URL(resolved).origin : 'http://localhost:5173' + }, + getStorageDir(scope) { + return scope === 'workspace' + ? join(cwd, 'node_modules/.storybook-hub') + : join(homedir(), '.storybook-hub') + }, + } + + // Ensure a Storybook is reachable and hand its URL back to the client. In + // dev this spawns the plugin's `storybook dev` on demand; in build it points + // at the pre-built static bundle the hub serves. + const storybookHubEnsure = defineHubRpcFunction({ + name: 'storybook-hub:ensure', + type: 'action', + jsonSerializable: true, + setup: (ctx: DevframeHubContext) => ({ + async handler(input?: { id?: string }): Promise { + const meta = STORYBOOKS.find(s => s.id === input?.id) + if (!meta) + return { ok: false, error: `Unknown storybook "${input?.id}"` } + + if (mode === 'build') { + if (!existsSync(storybookStaticDir(meta.id))) + return { ok: false, error: 'Storybook not built. Run `pnpm storybook:build` first.' } + return { ok: true, kind: 'path', url: `/__sb-${meta.id}/` } + } + + try { + return { ok: true, kind: 'port', port: await ensureDevServer(ctx, meta) } + } + catch (error) { + return { ok: false, error: (error as Error).message } + } + }, + }), + }) + + const context = await createHubContext({ + cwd, + workspaceRoot: cwd, + mode, + host, + builtinRpcDeclarations: [storybookHubEnsure, storybookHubMessagesList], + }) + + // In build mode, serve each pre-built Storybook so its dock iframe resolves + // on this single origin. + if (mode === 'build') { + for (const meta of STORYBOOKS) { + if (existsSync(storybookStaticDir(meta.id))) + context.views.hostStatic(`/__sb-${meta.id}/`, storybookStaticDir(meta.id)) + } + } + + // One dock per plugin Storybook. `url` is only the build-mode static path; + // the client routes these through `storybook-hub:ensure`, so in dev it is + // superseded by the spawned dev-server URL. + for (const meta of STORYBOOKS) { + context.docks.register({ + id: `sb-${meta.id}`, + title: meta.title, + icon: meta.icon, + category: 'Storybooks', + type: 'iframe', + url: `/__sb-${meta.id}/`, + }) + } + + // The live terminals plugin — a real integration docked alongside the + // Storybooks, grouped separately so its "Terminals" reads apart from the + // "Terminals" Storybook. + await mountDevframe(context, terminalsDevframe, { dock: { category: 'Plugins' } }) + + context.commands.register({ + id: 'storybook-hub:ping', + title: 'Storybook Hub · Ping', + icon: 'ph:bell-duotone', + category: 'kit', + handler: () => 'pong', + }) + await context.messages.add({ + level: 'success', + message: 'Storybook Hub started', + description: `${mode} mode · side-car WS on port ${port} · ${STORYBOOKS.length} Storybook dock(s).`, + }) + + started = await startHttpAndWs({ context, port, auth: false }) + serveConnectionMeta(base) + + server.httpServer?.once('close', () => { + killDevServers() + void started?.close().catch(() => {}) + }) + } + + return { + name: 'storybook-hub', + + configResolved(config) { + viteConfig = config + }, + + // `vite` (dev): Storybooks are spawned on demand. + async configureServer(server) { + await startHub(server, 'dev') + }, + + // `vite preview` (after `vite build`): Storybooks are served static. + async configurePreviewServer(server) { + await startHub(server, 'build') + }, + + async closeBundle() { + killDevServers() + await started?.close().catch(() => {}) + started = undefined + }, + } +} + +/** Poll `iframe.html` until the Storybook dev server answers, or time out. */ +async function waitForPort(port: number, timeoutMs: number): Promise { + const deadline = Date.now() + timeoutMs + const url = `http://127.0.0.1:${port}/iframe.html` + while (Date.now() < deadline) { + try { + const res = await fetch(url) + if (res.ok) + return + } + catch {} + await new Promise(resolve => setTimeout(resolve, 500)) + } + throw new Error(`Storybook dev server on port ${port} did not become ready within ${Math.round(timeoutMs / 1000)}s`) +} + +function normalizeBase(base: string): string { + let out = base.startsWith('/') ? base : `/${base}` + if (!out.endsWith('/')) + out = `${out}/` + return out +} diff --git a/examples/storybook-hub/tsconfig.json b/examples/storybook-hub/tsconfig.json new file mode 100644 index 0000000..46dbffd --- /dev/null +++ b/examples/storybook-hub/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "lib": ["ESNext", "DOM"], + "module": "ESNext", + "moduleResolution": "Bundler", + "noEmit": true, + "esModuleInterop": true, + "isolatedDeclarations": false + }, + "include": ["src", "vite.config.ts"] +} diff --git a/examples/storybook-hub/uno.config.ts b/examples/storybook-hub/uno.config.ts new file mode 100644 index 0000000..120a880 --- /dev/null +++ b/examples/storybook-hub/uno.config.ts @@ -0,0 +1,39 @@ +import { presetAnthonyDesign } from '@antfu/design/unocss' +import { + defineConfig, + presetIcons, + presetWebFonts, + presetWind4, + transformerDirectives, + transformerVariantGroup, +} from 'unocss' + +// The hub UI uses `@antfu/design` directly — its preset (tuned to devframe's +// sage green) over a Wind4 base, Phosphor icons, DM Sans/Mono and the +// directive/variant-group transformers. Pair with `@antfu/design/styles.css` +// (imported in `src/client/main.ts`). The named `z-*` layers are the app's to +// own (the preset blocks plain `z-`). `.ts` is opted into extraction since +// the hub authors its class strings in vanilla `src/client/main.ts`. +export default defineConfig({ + presets: [ + presetAnthonyDesign({ primary: '#3a6a45' }), + presetWind4(), + presetIcons({ scale: 1.1 }), + presetWebFonts({ provider: 'none', fonts: { sans: 'DM Sans', mono: 'DM Mono' } }), + ], + transformers: [transformerDirectives(), transformerVariantGroup()], + // Wind4 leaves bare `border`/`border-b` at currentColor; restore the subtle + // shared border color (matching `border-base`) for unqualified borders. + preflights: [{ getCSS: () => '*,::before,::after{border-color:#8882}' }], + shortcuts: { + 'z-nav': 'z-[30]', + 'z-dropdown': 'z-[40]', + 'z-tooltip': 'z-[45]', + 'z-toast': 'z-[50]', + 'z-modal-backdrop': 'z-[60]', + 'z-modal-content': 'z-[70]', + 'z-drawer-backdrop': 'z-[80]', + 'z-drawer-content': 'z-[90]', + }, + content: { pipeline: { include: [/\.(?:[cm]?[jt]sx?|html)($|\?)/] } }, +}) diff --git a/examples/storybook-hub/vite.config.ts b/examples/storybook-hub/vite.config.ts new file mode 100644 index 0000000..06a5c7c --- /dev/null +++ b/examples/storybook-hub/vite.config.ts @@ -0,0 +1,12 @@ +import UnoCSS from 'unocss/vite' +import { defineConfig } from 'vite' +import { alias } from '../../alias' +import { storybookHub } from './src/storybook-hub' + +export default defineConfig({ + resolve: { alias }, + plugins: [ + UnoCSS(), + storybookHub(), + ], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef59f71..f6131a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -562,6 +562,43 @@ importers: specifier: catalog:deps version: 8.21.0 + examples/storybook-hub: + dependencies: + '@antfu/design': + specifier: catalog:frontend + version: 0.2.1(@antfu/utils@9.3.0)(@tanstack/vue-virtual@3.13.30(vue@3.5.34(typescript@6.0.3)))(@unocss/core@66.7.2)(colorjs.io@0.6.1)(floating-vue@5.2.2(vue@3.5.34(typescript@6.0.3)))(playwright@1.60.0)(reka-ui@2.10.1(vue@3.5.34(typescript@6.0.3)))(unocss@66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)))(vue@3.5.34(typescript@6.0.3)) + '@devframes/hub': + specifier: workspace:* + version: link:../../packages/hub + '@devframes/plugin-terminals': + specifier: workspace:* + version: link:../../plugins/terminals + colorjs.io: + specifier: catalog:frontend + version: 0.6.1 + devframe: + specifier: workspace:* + version: link:../../packages/devframe + devDependencies: + '@iconify-json/ph': + specifier: catalog:frontend + version: 1.2.2 + get-port-please: + specifier: catalog:deps + version: 3.2.0 + pathe: + specifier: catalog:deps + version: 2.0.3 + storybook: + specifier: catalog:storybook + version: 10.4.6(@testing-library/dom@10.4.1)(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + unocss: + specifier: catalog:frontend + version: 66.7.2(@unocss/postcss@66.7.2(postcss@8.5.15))(vite@8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4)) + vite: + specifier: catalog:build + version: 8.0.14(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.8.4) + examples/streaming-chat: dependencies: '@antfu/design': diff --git a/turbo.json b/turbo.json index 184caed..0fd5d60 100644 --- a/turbo.json +++ b/turbo.json @@ -59,6 +59,11 @@ ], "outputs": ["dist/**"] }, + "storybook-hub#build": { + "outputLogs": "new-only", + "dependsOn": ["@devframes/hub#build", "devframe#build", "@devframes/plugin-terminals#build"], + "outputs": ["dist/**"] + }, "files-inspector-example#build": { "outputLogs": "new-only", "dependsOn": ["devframe#build"], From 285afc555709556135298727f2b1a7648f0ded28 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Thu, 2 Jul 2026 02:15:51 +0000 Subject: [PATCH 3/5] feat(examples): spawn storybook-hub dev servers via ctx.terminals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Storybook dev servers launched by the hub are now owned by the hub's terminals subsystem, so each spawned Storybook appears as a read-only session in the Terminals dock with its output streaming live. The hub UI drops its bottom panel — the Terminals dock is where process activity lives now. - spawn through ctx.terminals.startChildProcess with a stable session id, title and icon; reflect exit status on the session - remove the Activity/Commands footer and its kit-local RPCs - bind the side-car WS dual-stack ('::') so IPv4 clients and remote browsers can dial it (default 'localhost' bind is ::1-only on some hosts) - safelist the remaining plugin dock icons in the terminals SPA so aggregated sessions render their glyphs --- examples/storybook-hub/README.md | 5 +- examples/storybook-hub/index.html | 15 --- examples/storybook-hub/src/client/main.ts | 41 +------- examples/storybook-hub/src/storybook-hub.ts | 107 +++++++++++--------- plugins/terminals/uno.config.ts | 2 + 5 files changed, 65 insertions(+), 105 deletions(-) diff --git a/examples/storybook-hub/README.md b/examples/storybook-hub/README.md index 86d764a..78c4c82 100644 --- a/examples/storybook-hub/README.md +++ b/examples/storybook-hub/README.md @@ -18,7 +18,10 @@ then kept mounted so its state survives tab switches. Where the iframe points depends on the mode, unified behind the `storybook-hub:ensure` RPC: - **dev** (`vite`) — the plugin's `storybook dev` server is spawned on first - open and the dock iframes it live (HMR). + open and the dock iframes it live (HMR). The process is launched through + `ctx.terminals`, the hub's terminals subsystem, so each spawned Storybook is + a read-only terminal session — open the **Terminals** dock to watch its + output stream live. - **build** (`vite preview`) — the pre-built `storybook/storybook-static/` is served by the hub on one origin and the dock iframes that. diff --git a/examples/storybook-hub/index.html b/examples/storybook-hub/index.html index c022f73..e189b0a 100644 --- a/examples/storybook-hub/index.html +++ b/examples/storybook-hub/index.html @@ -34,21 +34,6 @@

    - -
    -
    -

    Activity

    -
    • No activity yet.
    -
    - -
    -

    Commands

    -
    • Waiting for snapshot…
    -
    - -
    -
    -
    diff --git a/examples/storybook-hub/src/client/main.ts b/examples/storybook-hub/src/client/main.ts index d2ab99a..6015e55 100644 --- a/examples/storybook-hub/src/client/main.ts +++ b/examples/storybook-hub/src/client/main.ts @@ -1,8 +1,4 @@ -import type { - DevframeCommandEntry, - DevframeDockEntry, - DevframeMessageEntry, -} from '@devframes/hub/types' +import type { DevframeDockEntry } from '@devframes/hub/types' import { connectDevframe } from '@devframes/hub/client' import { iconClass } from './icons' import 'virtual:uno.css' @@ -25,9 +21,6 @@ const connEl = document.querySelector('#conn')! const docksEl = document.querySelector('#docks')! const stageEl = document.querySelector('#stage')! const overlayEl = document.querySelector('#overlay')! -const messagesEl = document.querySelector('#messages')! -const commandsEl = document.querySelector('#commands')! -const pingBtn = document.querySelector('#ping')! interface DockRuntime { iframe?: HTMLIFrameElement @@ -206,38 +199,6 @@ async function main() { switchTo(target.dataset.dockId) }) syncDocks() - - // Commands — read from `devframe:commands` shared state. - const commands = await rpc.sharedState.get('devframe:commands', { initialValue: [] }) - const renderCommands = () => renderList(commandsEl, commands.value() ?? [], c => - `
  • ${c.title} ${c.id}
  • `) - commands.on('updated', renderCommands) - renderCommands() - - // Activity — poll hub messages (spawn progress, etc.). - const refreshMessages = async () => { - const entries = await rpc.call('storybook-hub:messages:list' as any) as DevframeMessageEntry[] - renderList(messagesEl, entries.slice(-12).reverse(), m => - `
  • [${m.level}] ${m.message}
  • `) - } - await refreshMessages() - setInterval(() => void refreshMessages(), 2000) - - pingBtn.addEventListener('click', async () => { - try { - const result = await rpc.call('hub:commands:execute' as any, 'storybook-hub:ping') - pingBtn.textContent = `Ping returned ${JSON.stringify(result)}` - } - catch (err) { - pingBtn.textContent = `Error: ${(err as Error).message}` - } - }) -} - -function renderList(host: HTMLElement, items: readonly T[], render: (item: T) => string) { - host.innerHTML = items.length - ? items.map(render).join('') - : '
  • empty
  • ' } main().catch((err) => { diff --git a/examples/storybook-hub/src/storybook-hub.ts b/examples/storybook-hub/src/storybook-hub.ts index ca43e7d..eb1ffa1 100644 --- a/examples/storybook-hub/src/storybook-hub.ts +++ b/examples/storybook-hub/src/storybook-hub.ts @@ -1,8 +1,7 @@ import type { DevframeHubContext } from '@devframes/hub/node' +import type { DevframeChildProcessTerminalSession } from '@devframes/hub/types' import type { DevframeHost } from 'devframe/types' -import type { ChildProcess } from 'node:child_process' import type { Plugin, PreviewServer, ResolvedConfig, ViteDevServer } from 'vite' -import { spawn } from 'node:child_process' import { existsSync } from 'node:fs' import { createRequire } from 'node:module' import { homedir } from 'node:os' @@ -45,6 +44,7 @@ const storybookBin = join(dirname(require.resolve('storybook/package.json')), 'd const pluginDir = (id: string): string => join(repoRoot, 'plugins', id) const storybookConfigDir = (id: string): string => join(pluginDir(id), '.storybook') const storybookStaticDir = (id: string): string => join(repoRoot, 'storybook', 'storybook-static', id) +const sessionIdFor = (id: string): string => `storybook-hub:${id}` /** What the client needs to point a dock's iframe at the right place. */ export type EnsureStorybookResult @@ -52,18 +52,6 @@ export type EnsureStorybookResult | { ok: true, kind: 'path', url: string } | { ok: false, error: string } -// Read-side RPC so the UI can list hub messages (spawn progress, etc.). -const storybookHubMessagesList = defineHubRpcFunction({ - name: 'storybook-hub:messages:list', - type: 'static', - jsonSerializable: true, - setup: (ctx: DevframeHubContext) => ({ - async handler() { - return Array.from(ctx.messages.entries.values()) - }, - }), -}) - export interface StorybookHubOptions { /** Mount path for the hub's connection-meta endpoint. Default: `/__hub/`. */ base?: string @@ -79,7 +67,9 @@ export interface StorybookHubOptions { * opened (mirroring how the code-server plugin embeds its editor on demand): * * - **dev** (`vite`): the plugin's `storybook dev` server is spawned on first - * open and the dock iframes it live (HMR). + * open — through `ctx.terminals`, so it lives as a read-only hub terminal + * session whose output streams into the Terminals dock — and the dock + * iframes it live (HMR). * - **build** (`vite preview`): the pre-built `storybook/storybook-static/` * is served by the hub and the dock iframes that single origin. * @@ -90,17 +80,20 @@ export function storybookHub(options: StorybookHubOptions = {}): Plugin { const base = normalizeBase(options.base ?? '/__hub/') let viteConfig: ResolvedConfig | undefined let started: { close: () => Promise } | undefined - const devServers = new Map }>() + const devServers = new Map, session: DevframeChildProcessTerminalSession }>() function killDevServers(): void { - for (const { proc } of devServers.values()) - proc.kill() + for (const { session } of devServers.values()) + void session.terminate().catch(() => {}) devServers.clear() } /** * Spawn (once) the `storybook dev` server for a plugin and resolve when it - * answers on its port. Concurrent callers await the same boot. + * answers on its port. Concurrent callers await the same boot. The process + * is owned by the hub's terminals subsystem (`ctx.terminals`), so it shows + * up as a read-only session — proper title + icon, output streamed live — + * in the Terminals dock. */ async function ensureDevServer(ctx: DevframeHubContext, meta: StorybookMeta): Promise { const existing = devServers.get(meta.id) @@ -108,25 +101,49 @@ export function storybookHub(options: StorybookHubOptions = {}): Plugin { return existing.ready const port = await getPort({ port: 6100 + STORYBOOKS.findIndex(s => s.id === meta.id), random: true }) - const cwd = pluginDir(meta.id) - const proc = spawn( - process.execPath, - [storybookBin, 'dev', '--config-dir', storybookConfigDir(meta.id), '--port', String(port), '--host', '0.0.0.0', '--no-open', '--quiet'], - { cwd, env: { ...process.env, STORYBOOK_DISABLE_TELEMETRY: '1' }, stdio: 'inherit' }, + const sessionId = sessionIdFor(meta.id) + const title = `${meta.title} Storybook` + + // Drop a stale session left by a crashed/stopped previous run so the + // stable id is free to re-register. (`remove` exists on the hub's + // terminals host; the public interface doesn't surface it yet.) + const stale = ctx.terminals.sessions.get(sessionId) + if (stale) + (ctx.terminals as unknown as { remove?: (s: typeof stale) => void }).remove?.(stale) + + const session = await ctx.terminals.startChildProcess( + { + command: process.execPath, + args: [storybookBin, 'dev', '--config-dir', storybookConfigDir(meta.id), '--port', String(port), '--host', '0.0.0.0', '--no-open', '--quiet'], + cwd: pluginDir(meta.id), + env: { STORYBOOK_DISABLE_TELEMETRY: '1' }, + }, + { + id: sessionId, + title, + description: `storybook dev · port ${port}`, + icon: meta.icon, + }, ) - proc.on('exit', () => devServers.delete(meta.id)) - void ctx.messages.add({ - level: 'info', - message: `Starting ${meta.title} Storybook…`, - description: `storybook dev on port ${port}`, + const child = session.getChildProcess() + const ready = new Promise((resolvePort, reject) => { + // Fail fast when the process dies before serving. + child?.once('exit', (code) => { + reject(new Error(`storybook dev exited before becoming ready (code ${code ?? 'null'})`)) + }) + waitForPort(port, 180_000).then(() => resolvePort(port), reject) }) - const ready = waitForPort(port, 180_000).then(() => { - void ctx.messages.add({ level: 'success', message: `${meta.title} Storybook ready`, description: `port ${port}` }) - return port + // Reflect the outcome on the hub terminal session (the hub does not + // update a child-process session's status on its own exit). + child?.on('exit', (code) => { + devServers.delete(meta.id) + if (ctx.terminals.sessions.has(sessionId)) + ctx.terminals.update({ id: sessionId, title, status: code === 0 ? 'stopped' : 'error' }) }) - devServers.set(meta.id, { port, proc, ready }) + + devServers.set(meta.id, { ready, session }) return ready } @@ -197,7 +214,7 @@ export function storybookHub(options: StorybookHubOptions = {}): Plugin { workspaceRoot: cwd, mode, host, - builtinRpcDeclarations: [storybookHubEnsure, storybookHubMessagesList], + builtinRpcDeclarations: [storybookHubEnsure], }) // In build mode, serve each pre-built Storybook so its dock iframe resolves @@ -225,23 +242,15 @@ export function storybookHub(options: StorybookHubOptions = {}): Plugin { // The live terminals plugin — a real integration docked alongside the // Storybooks, grouped separately so its "Terminals" reads apart from the - // "Terminals" Storybook. + // "Terminals" Storybook. It also mirrors the hub's `ctx.terminals` + // sessions, so the spawned `storybook dev` processes appear inside it. await mountDevframe(context, terminalsDevframe, { dock: { category: 'Plugins' } }) - context.commands.register({ - id: 'storybook-hub:ping', - title: 'Storybook Hub · Ping', - icon: 'ph:bell-duotone', - category: 'kit', - handler: () => 'pong', - }) - await context.messages.add({ - level: 'success', - message: 'Storybook Hub started', - description: `${mode} mode · side-car WS on port ${port} · ${STORYBOOKS.length} Storybook dock(s).`, - }) - - started = await startHttpAndWs({ context, port, auth: false }) + // Bind dual-stack (`::` accepts IPv6 + IPv4-mapped) so the side-car is + // dialable via `::1`, `127.0.0.1`, and from outside the machine — the + // default `localhost` bind resolves to `::1` only on some hosts, which + // strands IPv4 clients and remote browsers. + started = await startHttpAndWs({ context, port, host: '::', auth: false }) serveConnectionMeta(base) server.httpServer?.once('close', () => { diff --git a/plugins/terminals/uno.config.ts b/plugins/terminals/uno.config.ts index 908b606..87f357a 100644 --- a/plugins/terminals/uno.config.ts +++ b/plugins/terminals/uno.config.ts @@ -29,6 +29,8 @@ export default defineConfig({ 'i-ph-code-duotone', 'i-ph-terminal-window-duotone', 'i-ph-git-branch-duotone', + 'i-ph-magnifying-glass-duotone', + 'i-ph-person-arms-spread-duotone', ], // Wind4 leaves bare `border`/`border-b` at currentColor; restore the subtle // shared border color (matching `border-base`) for unqualified borders. From 6d122b528cba163d12356721bf8b624bce5cb9dc Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Thu, 2 Jul 2026 04:33:12 +0000 Subject: [PATCH 4/5] fix(examples): accept any dev-server host (tailnets, tunnels, LAN) Vite's default allowedHosts blocks requests arriving under a hostname it doesn't recognize (e.g. a tailnet or tunneled domain), which broke the hub examples and every Storybook dev server reached remotely. Allow any Host header on the example hubs and on all six Storybook configs, and keep ports non-strict so busy ports fall back to the next free one. --- examples/minimal-vite-devframe-hub/vite.config.ts | 3 +++ examples/storybook-hub/vite.config.ts | 4 ++++ plugins/a11y/.storybook/main.ts | 3 +++ plugins/code-server/.storybook/main.ts | 3 +++ plugins/git/.storybook/main.ts | 3 +++ plugins/inspect/.storybook/main.ts | 3 +++ plugins/terminals/.storybook/main.ts | 3 +++ storybook/.storybook/main.ts | 2 ++ 8 files changed, 24 insertions(+) diff --git a/examples/minimal-vite-devframe-hub/vite.config.ts b/examples/minimal-vite-devframe-hub/vite.config.ts index 53158fb..f1eb052 100644 --- a/examples/minimal-vite-devframe-hub/vite.config.ts +++ b/examples/minimal-vite-devframe-hub/vite.config.ts @@ -12,6 +12,9 @@ import { minimalViteDevframeHub } from './src/minimal-vite-devframe-hub' export default defineConfig({ resolve: { alias }, + // Dev tooling reached from arbitrary hostnames (LAN IPs, tunnels, tailnets): + // accept any Host header and fall back to the next free port when busy. + server: { allowedHosts: true, strictPort: false }, plugins: [ UnoCSS(), minimalViteDevframeHub({ diff --git a/examples/storybook-hub/vite.config.ts b/examples/storybook-hub/vite.config.ts index 06a5c7c..ba80dbb 100644 --- a/examples/storybook-hub/vite.config.ts +++ b/examples/storybook-hub/vite.config.ts @@ -5,6 +5,10 @@ import { storybookHub } from './src/storybook-hub' export default defineConfig({ resolve: { alias }, + // Dev tooling reached from arbitrary hostnames (LAN IPs, tunnels, tailnets): + // accept any Host header and fall back to the next free port when busy. + server: { allowedHosts: true, strictPort: false }, + preview: { allowedHosts: true, strictPort: false }, plugins: [ UnoCSS(), storybookHub(), diff --git a/plugins/a11y/.storybook/main.ts b/plugins/a11y/.storybook/main.ts index 9c5e530..a6f9ba1 100644 --- a/plugins/a11y/.storybook/main.ts +++ b/plugins/a11y/.storybook/main.ts @@ -16,6 +16,9 @@ const config: StorybookConfig = { return mergeConfig(config, { resolve: { alias }, plugins: [UnoCSS()], + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, + // tailnets), e.g. when iframed by the storybook-hub example. + server: { allowedHosts: true }, }) }, } diff --git a/plugins/code-server/.storybook/main.ts b/plugins/code-server/.storybook/main.ts index 6697301..504078d 100644 --- a/plugins/code-server/.storybook/main.ts +++ b/plugins/code-server/.storybook/main.ts @@ -10,6 +10,9 @@ const config: StorybookConfig = { viteFinal(viteConfig) { viteConfig.plugins ??= [] viteConfig.plugins.push(UnoCSS()) + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, tailnets), + // e.g. when iframed by the storybook-hub example: accept any Host header. + viteConfig.server = { ...viteConfig.server, allowedHosts: true } return viteConfig }, } diff --git a/plugins/git/.storybook/main.ts b/plugins/git/.storybook/main.ts index 5c73b56..4245973 100644 --- a/plugins/git/.storybook/main.ts +++ b/plugins/git/.storybook/main.ts @@ -15,6 +15,9 @@ const config: StorybookConfig = { // own; the React plugin wires up the automatic runtime so `.tsx` stories // and views parse. viteConfig.plugins.push(react(), UnoCSS()) + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, tailnets), + // e.g. when iframed by the storybook-hub example: accept any Host header. + viteConfig.server = { ...viteConfig.server, allowedHosts: true } return viteConfig }, } diff --git a/plugins/inspect/.storybook/main.ts b/plugins/inspect/.storybook/main.ts index 677ef98..cecaf8c 100644 --- a/plugins/inspect/.storybook/main.ts +++ b/plugins/inspect/.storybook/main.ts @@ -16,6 +16,9 @@ const config: StorybookConfig = { return mergeConfig(config, { resolve: { alias }, plugins: [vue(), UnoCSS()], + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, + // tailnets), e.g. when iframed by the storybook-hub example. + server: { allowedHosts: true }, }) }, } diff --git a/plugins/terminals/.storybook/main.ts b/plugins/terminals/.storybook/main.ts index 9b81779..fedd816 100644 --- a/plugins/terminals/.storybook/main.ts +++ b/plugins/terminals/.storybook/main.ts @@ -19,6 +19,9 @@ const config: StorybookConfig = { return mergeConfig(config, { resolve: { alias }, plugins: [svelte(), UnoCSS()], + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, + // tailnets), e.g. when iframed by the storybook-hub example. + server: { allowedHosts: true }, }) }, } diff --git a/storybook/.storybook/main.ts b/storybook/.storybook/main.ts index b274ddb..03c0469 100644 --- a/storybook/.storybook/main.ts +++ b/storybook/.storybook/main.ts @@ -32,6 +32,8 @@ const config: StorybookConfig = { viteFinal(viteConfig) { viteConfig.plugins ??= [] viteConfig.plugins.push(UnoCSS()) + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, tailnets). + viteConfig.server = { ...viteConfig.server, allowedHosts: true } return viteConfig }, } From abeef3782d8727b3199e8d081826e05f4c3226cf Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Thu, 2 Jul 2026 04:45:10 +0000 Subject: [PATCH 5/5] fix(examples): auto-assign the hub side-car port instead of failing hard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getPort({ random: false }) throws when the preferred side-car port is taken (e.g. by a lingering previous hub instance), so `vite dev` refused to start while the old instance kept serving — which made it look like new code changes (like ctx.terminals spawning) had no effect. Walk a port range and fall back to a random free port instead; clients discover the chosen port via __connection.json either way. --- .../src/minimal-vite-devframe-hub.ts | 5 ++++- examples/storybook-hub/src/storybook-hub.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/examples/minimal-vite-devframe-hub/src/minimal-vite-devframe-hub.ts b/examples/minimal-vite-devframe-hub/src/minimal-vite-devframe-hub.ts index 3125416..9224f3d 100644 --- a/examples/minimal-vite-devframe-hub/src/minimal-vite-devframe-hub.ts +++ b/examples/minimal-vite-devframe-hub/src/minimal-vite-devframe-hub.ts @@ -77,7 +77,10 @@ export function minimalViteDevframeHub(options: MinimalViteDevframeHubOptions = started = undefined const cwd = viteConfig!.root - const port = options.port ?? await getPort({ port: 9777, random: false }) + // Prefer 9777 but keep booting when it's taken (e.g. a lingering + // previous instance) — walk the range, then fall back to a random free + // port. Clients discover whatever was chosen via `__connection.json`. + const port = options.port ?? await getPort({ port: 9777, portRange: [9777, 9877] }) // Serve the side-car's connection meta (`__connection.json`) at a URL // base so a browser loaded there can discover the WS endpoint via diff --git a/examples/storybook-hub/src/storybook-hub.ts b/examples/storybook-hub/src/storybook-hub.ts index eb1ffa1..100bc9e 100644 --- a/examples/storybook-hub/src/storybook-hub.ts +++ b/examples/storybook-hub/src/storybook-hub.ts @@ -153,7 +153,10 @@ export function storybookHub(options: StorybookHubOptions = {}): Plugin { killDevServers() const cwd = viteConfig?.root ?? process.cwd() - const port = options.port ?? await getPort({ port: 9787, random: false }) + // Prefer 9787 but keep booting when it's taken (e.g. a lingering previous + // instance) — walk the range, then fall back to a random free port. The + // client discovers whatever was chosen via `__connection.json`. + const port = options.port ?? await getPort({ port: 9787, portRange: [9787, 9887] }) const serveConnectionMeta = (metaBase: string): void => { server.middlewares.use(`${metaBase}${DEVFRAME_CONNECTION_META_FILENAME}`, (_req, res) => {