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/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/README.md b/examples/storybook-hub/README.md new file mode 100644 index 0000000..78c4c82 --- /dev/null +++ b/examples/storybook-hub/README.md @@ -0,0 +1,56 @@ +# 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). 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. + +## 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..e189b0a --- /dev/null +++ b/examples/storybook-hub/index.html @@ -0,0 +1,40 @@ + + + + + + Storybook Hub + + + +
+
+

+ Storybook Hub +

+

Connecting…

+

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

+
+ +
+ + +
+
+ +
+
+
+ + + 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..6015e55 --- /dev/null +++ b/examples/storybook-hub/src/client/main.ts @@ -0,0 +1,207 @@ +import type { DevframeDockEntry } 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')! + +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() +} + +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..100bc9e --- /dev/null +++ b/examples/storybook-hub/src/storybook-hub.ts @@ -0,0 +1,311 @@ +import type { DevframeHubContext } from '@devframes/hub/node' +import type { DevframeChildProcessTerminalSession } from '@devframes/hub/types' +import type { DevframeHost } from 'devframe/types' +import type { Plugin, PreviewServer, ResolvedConfig, ViteDevServer } from 'vite' +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) +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 + = | { ok: true, kind: 'port', port: number } + | { ok: true, kind: 'path', url: string } + | { ok: false, error: string } + +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 — 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. + * + * 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, session: DevframeChildProcessTerminalSession }>() + + function killDevServers(): void { + 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. 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) + if (existing) + return existing.ready + + const port = await getPort({ port: 6100 + STORYBOOKS.findIndex(s => s.id === meta.id), random: true }) + 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, + }, + ) + + 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) + }) + + // 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, { ready, session }) + 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() + // 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) => { + 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], + }) + + // 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. 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' } }) + + // 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', () => { + 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..ba80dbb --- /dev/null +++ b/examples/storybook-hub/vite.config.ts @@ -0,0 +1,16 @@ +import UnoCSS from 'unocss/vite' +import { defineConfig } from 'vite' +import { alias } from '../../alias' +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/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..a6f9ba1 --- /dev/null +++ b/plugins/a11y/.storybook/main.ts @@ -0,0 +1,26 @@ +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()], + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, + // tailnets), e.g. when iframed by the storybook-hub example. + server: { allowedHosts: true }, + }) + }, +} + +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/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/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/.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/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..cecaf8c 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: {}, @@ -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/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..fedd816 --- /dev/null +++ b/plugins/terminals/.storybook/main.ts @@ -0,0 +1,29 @@ +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()], + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, + // tailnets), e.g. when iframed by the storybook-hub example. + server: { allowedHosts: true }, + }) + }, +} + +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/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. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db565db..f6131a4 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))) @@ -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': @@ -667,7 +704,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 +738,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 +756,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 +782,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 +799,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 +818,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 +839,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 +882,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 +927,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 +959,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 +991,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 +1035,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 +1056,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 +1088,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 +1454,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 +1487,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 +1499,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 +1511,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 +1523,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 +1535,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 +1547,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 +1559,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 +1571,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 +1583,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 +1595,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 +1607,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 +1619,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 +1631,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 +1643,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 +1655,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 +1667,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 +1679,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 +1691,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 +1703,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 +1715,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 +1727,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 +1739,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 +1751,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 +1763,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 +1775,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 +1787,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 +2431,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 +2449,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 +2467,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 +2485,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 +2503,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 +2521,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 +2539,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 +2557,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 +2578,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 +2599,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 +2620,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 +2641,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 +2662,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 +2683,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 +2704,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,8 +2725,14 @@ packages: os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.129.0': - resolution: {integrity: sha512-DusJfcK7EGwf9TEakB+z6SXCLdHGvDZ8U8882bzWb4oVrORHpbkFl9npS7cN3YC2axcVKoktbxZevS1nxVCKFw==} + '@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} cpu: [arm64] os: [openharmony] @@ -2710,6 +2743,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 +2758,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 +2776,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 +2794,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 +2812,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,6 +2824,109 @@ packages: '@oxc-project/types@0.132.0': resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} + '@oxc-resolver/binding-android-arm-eabi@11.21.3': + resolution: {integrity: sha512-eNU11A2WNizh04v3uyaJCootrHIaS0B9aHYXvAvVnPNk4xYSjMUjHnhQ6dewPN2MRYDskV85d1N0Aw0WNWhcyg==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.21.3': + resolution: {integrity: sha512-8Q+ZjTLvn2dIcWsrmhdrEihm7q+ag/k+mkry7Z+t0QbbHaVxXQfvH9AewyVMh/WrpEKhQ3DDgx9fYbqeCpeOEw==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.21.3': + resolution: {integrity: sha512-wkh0qKZGHXVUDxFw3oA1TXnU2BDYY/r775oJflGeIr8uDPPoN2pk8gijQIzYRT6hoql/lg3+Tx/SaTn9e2/aGg==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.21.3': + resolution: {integrity: sha512-HbNc23FAQYbuyDV2vBWMez4u4mrsm5RAkniGZAWqr6lYZ3N4beeqIb776jzwRl8qL2zRhHVXpUj97X0QgogVzg==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.21.3': + resolution: {integrity: sha512-K6xNsTUPEUdfrn0+kbMq5nOUB5w1C5pavPQngt4TM2FpN91lP0PBe2srSpamb4d69O7h86oAi/qWX/kZNRSjkw==} + cpu: [x64] + os: [freebsd] + + '@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} @@ -3583,21 +3745,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 +3754,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==} - 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==} + '@storybook/builder-vite@10.4.4': + resolution: {integrity: sha512-VyuZ4mEvhhVXjJa1qXMWKH8ohnas0rgEuJDf6u4aJ54XeENFebPUEAHde1Qo2PflJ4rUdVdXieOZzKbYwP5RAQ==} 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 +3766,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==} - 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==} + '@storybook/csf-plugin@10.4.4': + resolution: {integrity: sha512-1mzZyAwVUmAcw4WEUsJDVdSupkJf+Kf/f5uNAs4RzlBXA75P8YRkDKAb2EoMwsB5URiXFi9XoeAN/vWke0G6+w==} 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 +3802,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 +3822,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 +3836,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 +3861,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: ^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: ^8.6.18 + storybook: ^10.4.6 vue: ^3.0.0 '@stylistic/eslint-plugin@5.10.0': @@ -3847,6 +3924,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 +3971,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 +4153,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 +4353,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 +4370,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 +4382,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 +4546,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 +4620,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 +4658,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 +4704,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 +4799,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 +4829,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 +4884,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 +4897,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 +4920,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 +5116,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 +5350,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 +5376,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 +5426,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 +5541,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 +5907,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 +5934,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 +5976,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 +6091,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 +6193,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 +6233,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 +6261,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 +6313,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 +6354,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 +6559,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 +6576,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 +6596,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 +6663,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 +6796,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 +7038,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 +7046,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 +7058,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 +7154,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 +7205,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 +7403,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 +7515,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 +7544,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 +7685,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 +7736,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,14 +7879,35 @@ 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: + '@solidjs/web': + optional: true + typescript: + optional: true + + 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==} @@ -7851,6 +7953,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 +8001,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 +8077,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 +8201,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 +8313,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 +8409,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 +8774,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 +8902,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 +8918,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 +9272,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 +9294,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 +9327,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 +9849,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 +10240,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 +10405,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 +11098,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 +11123,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 +11134,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 +11220,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 +11236,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 +11336,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 +11383,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 +11589,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 +11833,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 +11919,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 +11936,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 +11944,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 +11964,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 +11986,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 +12176,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 +12235,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} ansis@4.3.0: {} @@ -12185,6 +12282,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 +12327,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 +12397,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 +12440,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 +12509,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 +12525,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 +12547,8 @@ snapshots: dependencies: is-regex: 1.2.1 + check-error@2.1.3: {} + chokidar@5.0.0: dependencies: readdirp: 5.0.0 @@ -12617,6 +12711,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 +12967,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 +12985,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 +13019,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 +13051,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 +13111,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 +13610,6 @@ snapshots: transitivePeerDependencies: - supports-color - find-package-json@1.2.0: {} - find-up-simple@1.0.1: {} find-up@5.0.0: @@ -13581,10 +13641,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 +13669,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 +13794,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 +13891,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + indent-string@5.0.0: {} inherits@2.0.4: {} @@ -13874,23 +13926,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 +13947,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 +13991,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 +14024,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 +14195,8 @@ snapshots: longest-streak@3.1.0: {} + loupe@3.2.1: {} + lru-cache@10.4.3: {} lru-cache@11.3.6: {} @@ -14180,6 +14207,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 +14240,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 +14391,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 +14651,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 +15082,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 +15114,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 +15189,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 +15304,8 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.1: {} + perfect-debounce@2.1.0: {} picocolors@1.1.1: {} @@ -15281,12 +15349,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 +15543,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 +15703,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 +15746,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 +15836,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 +15852,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 +15961,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 +16019,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 +16206,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 +16304,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 +16336,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 +16455,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 +16500,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 +16511,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 +16526,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 +16537,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 +16588,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 +16694,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 +16725,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 +16792,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 +16888,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 +16898,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 +16940,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 +17016,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 +17170,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..03c0469 --- /dev/null +++ b/storybook/.storybook/main.ts @@ -0,0 +1,41 @@ +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()) + // Dev tool reached from arbitrary hostnames (LAN IPs, tunnels, tailnets). + viteConfig.server = { ...viteConfig.server, allowedHosts: true } + 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('')} +
    + +
    ` + 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)($|\?)/], + }, + }, +}) 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"],