From 12d6c06bd5a3fee63e5c7692429d8b22cde22980 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 5 Sep 2026 12:34:46 +0200 Subject: [PATCH 1/4] perf(react): reuse incremental parsing in streams --- AGENTS.md | 2 +- docs/content/3.rendering/5.react.md | 4 +- packages/comark-react/README.md | 2 + packages/comark-react/package.json | 1 + .../comark-react/src/components/Markdown.tsx | 7 +- .../src/components/MarkdownClient.tsx | 36 +++- .../test/streaming.browser.test.tsx | 155 ++++++++++++++++++ packages/comark-react/vitest.config.ts | 16 +- packages/comark/src/parse.ts | 3 +- packages/comark/test/streaming.test.ts | 12 ++ pnpm-lock.yaml | 3 + test/bundle.test.ts | 2 +- 12 files changed, 228 insertions(+), 15 deletions(-) create mode 100644 packages/comark-react/test/streaming.browser.test.tsx diff --git a/AGENTS.md b/AGENTS.md index 0336235ee..0da64d1dc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -218,7 +218,7 @@ packages/comark-react/ │ ├── components/ │ │ ├── Markdown.tsx # High-level markdown → render component │ │ ├── MarkdownDocument.tsx # Low-level AST → render component -│ │ ├── MarkdownClient.tsx # Client-only markdown component +│ │ ├── MarkdownClient.tsx # Client-only markdown with a serialized incremental parser │ │ ├── MarkdownLive.tsx # Streaming/live markdown component │ │ ├── Math.tsx # Math rendering component │ │ └── Mermaid.tsx # Mermaid rendering component diff --git a/docs/content/3.rendering/5.react.md b/docs/content/3.rendering/5.react.md index 9ec2deb10..5d22b4888 100644 --- a/docs/content/3.rendering/5.react.md +++ b/docs/content/3.rendering/5.react.md @@ -635,7 +635,9 @@ Enable real-time rendering as content arrives, ideal for AI chat interfaces and ### Setup -Set `streaming` to `true` while content is being received, then `false` when done: +The client component reuses completed blocks while text is appended. Keep `options` and `plugins` references stable between updates. Replacing either creates a new parser. + +Set `streaming` to `true` while content is being received, then `false` when done. The final update parses the complete document: ```tsx [components/AiChat.tsx] import { useState } from 'react' diff --git a/packages/comark-react/README.md b/packages/comark-react/README.md index 0acd2fbee..b3adb01c1 100644 --- a/packages/comark-react/README.md +++ b/packages/comark-react/README.md @@ -61,6 +61,8 @@ Heads up! ### Streaming +Streaming reuses completed blocks while text is appended. Keep parser options and plugin references stable between updates. Set `streaming` to `false` when the stream ends to parse the complete document. + ```tsx {content} diff --git a/packages/comark-react/package.json b/packages/comark-react/package.json index 593005198..7b00ca4d6 100644 --- a/packages/comark-react/package.json +++ b/packages/comark-react/package.json @@ -55,6 +55,7 @@ "devDependencies": { "@types/react": "catalog:", "@types/react-dom": "catalog:", + "@vitest/browser-playwright": "catalog:", "react": "^19.2.7", "react-dom": "catalog:", "vitest": "catalog:" diff --git a/packages/comark-react/src/components/Markdown.tsx b/packages/comark-react/src/components/Markdown.tsx index 6b54f7979..51cf63a3b 100644 --- a/packages/comark-react/src/components/Markdown.tsx +++ b/packages/comark-react/src/components/Markdown.tsx @@ -105,8 +105,8 @@ export interface MarkdownProps { export async function Markdown({ children, value, - options = {}, - plugins = [], + options, + plugins, unwrap = false, components: customComponents = {}, componentsManifest, @@ -139,7 +139,8 @@ export async function Markdown({ return ( { + let parser: ReturnType | undefined + let pending: Promise = Promise.resolve() + + // Keep streaming state in order without hiding plugin errors from Suspense. + return (source: string, streaming: boolean) => { + const run = () => { + parser ??= createMarkdownParser({ ...options, ...(unwrap ? { unwrap } : {}), plugins }) + return parser(source, { streaming }) + } + const result = pending.then(run, run) + pending = result + return result + } + }, [options, plugins, unwrap]) + const parsePromise = useMemo( - () => (isMarkdownDocument(content) ? Promise.resolve(content) : parseMarkdown(content, { ...options, plugins })), - [content] + () => (isMarkdownDocument(content) ? Promise.resolve(content) : parse(content, streaming)), + [content, parse, streaming] ) // Keep showing the previous parsed result while a new parse is pending — @@ -59,6 +80,7 @@ export function MarkdownClient({ children, value, options = {}, plugins = [], .. ) diff --git a/packages/comark-react/test/streaming.browser.test.tsx b/packages/comark-react/test/streaming.browser.test.tsx new file mode 100644 index 000000000..d8d8e4a05 --- /dev/null +++ b/packages/comark-react/test/streaming.browser.test.tsx @@ -0,0 +1,155 @@ +import React, { act, Component } from 'react' +import { createRoot } from 'react-dom/client' +import { afterEach, beforeEach, describe, expect, it } from 'vitest' +import type { ComarkPlugin, MarkdownDocument } from 'comark' +import { MarkdownClient } from '../src/components/MarkdownClient' +import { Markdown } from '../src/components/Markdown' +import type { MarkdownProps } from '../src/components/Markdown' + +Object.assign(globalThis, { IS_REACT_ACT_ENVIRONMENT: true }) + +let container: HTMLDivElement +let root: ReturnType +beforeEach(() => { + container = document.createElement('div') + document.body.append(container) + root = createRoot(container) +}) +afterEach(async () => { + await act(async () => root.unmount()) + container.remove() +}) +async function render(props: MarkdownProps) { + await act(async () => { + root.render() + }) +} +function observe() { + const inputs: string[] = [] + const trees: MarkdownDocument[] = [] + const plugin: ComarkPlugin = { + name: 'observe-stream', + pre(state) { + inputs.push(state.markdown) + }, + post(state) { + trees.push(state.tree) + }, + } + return { inputs, trees, plugins: [plugin] } +} + +describe('MarkdownClient streaming', () => { + it('reuses completed blocks and parses the whole input when streaming ends', async () => { + const probe = observe() + const first = '# Completed\n\nFirst paragraph.\n\nLast paragraph' + await render({ value: first, streaming: true, plugins: probe.plugins }) + const heading = probe.trees[0].nodes[0] + const next = first + ' grows' + await render({ value: next, streaming: true, plugins: probe.plugins }) + expect(probe.inputs[1]).not.toContain('# Completed') + expect(probe.trees[1].nodes[0]).toBe(heading) + expect(container.textContent).toContain('Last paragraph grows') + + await render({ value: next, streaming: false, plugins: probe.plugins }) + expect(probe.inputs.at(-1)).toBe(next) + expect(probe.trees.at(-1)?.nodes[0]).not.toBe(heading) + expect(container.querySelector('h1')?.textContent).toBe('Completed') + }) + + it('reuses completed blocks through the public Markdown wrapper', async () => { + const probe = observe() + const first = '# Completed\n\nFirst paragraph.\n\nLast paragraph' + await act(async () => { + root.render(await Markdown({ value: first, streaming: true, plugins: probe.plugins })) + }) + await act(async () => { + root.render(await Markdown({ value: first + ' grows', streaming: true, plugins: probe.plugins })) + }) + expect(probe.inputs[1]).not.toContain('# Completed') + expect(probe.trees[1].nodes[0]).toBe(probe.trees[0].nodes[0]) + expect(container.textContent).toContain('Last paragraph grows') + }) + + it('recreates the parser for option and plugin changes with unchanged input', async () => { + const initial = observe() + const value = '# Heading\n\nParagraph' + await render({ value, streaming: true, plugins: initial.plugins }) + expect(container.querySelector('h1')?.id).toBe('heading') + await render({ value, streaming: true, plugins: initial.plugins, options: { headingIds: false } }) + expect(container.querySelector('h1')?.hasAttribute('id')).toBe(false) + const replacement = observe() + await render({ value, streaming: true, plugins: replacement.plugins }) + expect(replacement.inputs).toEqual([value]) + expect(container.querySelector('h1')?.id).toBe('heading') + }) + + it('applies unwrap changes and bypasses parsing for documents', async () => { + const probe = observe() + await render({ value: 'Paragraph', plugins: probe.plugins }) + expect(container.querySelector('p')).not.toBeNull() + await render({ value: 'Paragraph', plugins: probe.plugins, unwrap: true }) + expect(container.querySelector('p')).toBeNull() + const count = probe.inputs.length + await render({ value: { nodes: [['p', {}, 'Already parsed']], frontmatter: {}, meta: {} }, plugins: probe.plugins }) + expect(probe.inputs).toHaveLength(count) + expect(container.textContent).toBe('Already parsed') + }) + + it('serializes overlapping plugin work and renders the latest update', async () => { + const { promise: gate, resolve: release } = Promise.withResolvers() + let active = 0 + let maxActive = 0 + let calls = 0 + const plugins: ComarkPlugin[] = [ + { + name: 'deferred', + async pre() { + calls++ + active++ + maxActive = Math.max(maxActive, active) + if (calls === 1) await gate + active-- + }, + }, + ] + await render({ value: 'First', plugins, streaming: true }) + await render({ value: 'First grows', plugins, streaming: true }) + expect(calls).toBe(1) + await act(async () => release()) + expect(maxActive).toBe(1) + expect(container.textContent).toBe('First grows') + }) + + it('delivers plugin errors to the error boundary', async () => { + class Boundary extends Component<{ children: React.ReactNode }, { error: boolean }> { + state = { error: false } + static getDerivedStateFromError() { + return { error: true } + } + render() { + return this.state.error ?

Parse failed

: this.props.children + } + } + const plugins: ComarkPlugin[] = [ + { + name: 'failure', + pre() { + throw new Error('plugin failed') + }, + }, + ] + await act(async () => { + root.render( + + + + ) + }) + expect(container.textContent).toBe('Parse failed') + }) +}) diff --git a/packages/comark-react/vitest.config.ts b/packages/comark-react/vitest.config.ts index 78919820e..709431126 100644 --- a/packages/comark-react/vitest.config.ts +++ b/packages/comark-react/vitest.config.ts @@ -1,7 +1,21 @@ import { defineConfig } from 'vitest/config' +import { playwright } from '@vitest/browser-playwright' export default defineConfig({ test: { - include: ['test/**/*.test.{ts,tsx}'], + projects: [ + { test: { name: 'server', include: ['test/**/*.test.{ts,tsx}'], exclude: ['test/**/*.browser.test.tsx'] } }, + { + test: { + name: 'client', + include: ['test/**/*.browser.test.tsx'], + browser: { + enabled: true, + provider: playwright(), + instances: [{ browser: 'chromium', headless: true }], + }, + }, + }, + ], }, }) diff --git a/packages/comark/src/parse.ts b/packages/comark/src/parse.ts index fa55a4228..ea538a4b3 100644 --- a/packages/comark/src/parse.ts +++ b/packages/comark/src/parse.ts @@ -191,7 +191,8 @@ export function createMarkdownParser { expect(result1.frontmatter).toEqual({ title: 'Hello' }) expect(result2.frontmatter).toEqual({ title: 'Hello' }) }) + + it.each([ + ['without frontmatter', '# Replacement', {}], + ['with new frontmatter', '---\ntitle: New\n---\n\n# Replacement', { title: 'New' }], + ])('replaces stream frontmatter when the source changes %s', async (_, replacement, frontmatter) => { + const parse = createMarkdownParser() + await parse('---\ntitle: Old\n---\n\n# Original', { streaming: true }) + + const result = await parse(replacement, { streaming: true }) + + expect(result.frontmatter).toEqual(frontmatter) + }) }) describe('streaming with MDC components', () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 202e99c18..b8e091885 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1395,6 +1395,9 @@ importers: specifier: 'catalog:' version: 4.3.1 devDependencies: + '@vitest/browser-playwright': + specifier: 'catalog:' + version: 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.99.0)(terser@5.49.0)(tsx@4.23.0)(yaml@2.9.0))(vitest@4.1.10) '@types/react': specifier: 'catalog:' version: 19.2.17 diff --git a/test/bundle.test.ts b/test/bundle.test.ts index c0dc230ea..5ab298aa3 100644 --- a/test/bundle.test.ts +++ b/test/bundle.test.ts @@ -64,7 +64,7 @@ describe('package bundle size', { timeout: 60_000 }, () => { "@comark/ansi": "36.6k (98 files)", "@comark/html": "15.7k (58 files)", "@comark/nuxt": "11.8k (58 files)", - "@comark/react": "36.9k (74 files)", + "@comark/react": "37.6k (74 files)", "@comark/svelte": "43.9k (82 files)", "@comark/vue": "51.7k (78 files)", "comark": "363k (156 files)", From 1a793ab61503ac8a82a61dbcce99c8323e708a7c Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 5 Sep 2026 13:04:19 +0200 Subject: [PATCH 2/4] fix(react): preserve factory parsers and streamed links --- docs/content/3.rendering/5.react.md | 2 +- packages/comark-react/README.md | 2 +- packages/comark-react/src/index.ts | 19 ++++++++--- .../test/streaming.browser.test.tsx | 33 +++++++++++++++++++ .../src/internal/parse/token-processor.ts | 2 ++ packages/comark/src/parse.ts | 11 ++++--- packages/comark/test/streaming.test.ts | 25 ++++++++++++++ test/bundle.test.ts | 2 +- 8 files changed, 84 insertions(+), 12 deletions(-) diff --git a/docs/content/3.rendering/5.react.md b/docs/content/3.rendering/5.react.md index 5d22b4888..bf021f01e 100644 --- a/docs/content/3.rendering/5.react.md +++ b/docs/content/3.rendering/5.react.md @@ -635,7 +635,7 @@ Enable real-time rendering as content arrives, ideal for AI chat interfaces and ### Setup -The client component reuses completed blocks while text is appended. Keep `options` and `plugins` references stable between updates. Replacing either creates a new parser. +The client component reuses completed blocks while text is appended. Keep `options` and `plugins` references stable between updates. Replacing either creates a new parser. Heading tails and reference definitions use a full parse to preserve heading IDs and links. Set `streaming` to `true` while content is being received, then `false` when done. The final update parses the complete document: diff --git a/packages/comark-react/README.md b/packages/comark-react/README.md index b3adb01c1..1ccc09ceb 100644 --- a/packages/comark-react/README.md +++ b/packages/comark-react/README.md @@ -61,7 +61,7 @@ Heads up! ### Streaming -Streaming reuses completed blocks while text is appended. Keep parser options and plugin references stable between updates. Set `streaming` to `false` when the stream ends to parse the complete document. +Streaming reuses completed blocks while text is appended. Keep parser options and plugin references stable between updates. Set `streaming` to `false` when the stream ends to parse the complete document. Heading tails and reference definitions use a full parse to preserve heading IDs and links. ```tsx diff --git a/packages/comark-react/src/index.ts b/packages/comark-react/src/index.ts index c6e4c9944..b946800e4 100644 --- a/packages/comark-react/src/index.ts +++ b/packages/comark-react/src/index.ts @@ -59,13 +59,22 @@ export function defineMarkdownComponent(config: DefineMarkdownComponentOptions = ...parseOptions } = config + // Keep parser inputs stable across renders without client-only hooks. + const optionsCache = new WeakMap() + const pluginsCache = new WeakMap, NonNullable>() + const configPlugins = config.plugins ?? [] + const MarkdownComponent: React.FC = (props) => { - const mergedOptions: Exclude = { - ...parseOptions, - ...props.options, + let mergedOptions = parseOptions + if (props.options) { + mergedOptions = optionsCache.get(props.options) ?? { ...parseOptions, ...props.options } + optionsCache.set(props.options, mergedOptions) + } + let mergedPlugins = configPlugins + if (props.plugins) { + mergedPlugins = pluginsCache.get(props.plugins) ?? [...configPlugins, ...props.plugins] + pluginsCache.set(props.plugins, mergedPlugins) } - - const mergedPlugins = [...(config.plugins || []), ...(props.plugins || [])] const mergedComponents = { ...configComponents, diff --git a/packages/comark-react/test/streaming.browser.test.tsx b/packages/comark-react/test/streaming.browser.test.tsx index d8d8e4a05..3de904317 100644 --- a/packages/comark-react/test/streaming.browser.test.tsx +++ b/packages/comark-react/test/streaming.browser.test.tsx @@ -5,6 +5,7 @@ import type { ComarkPlugin, MarkdownDocument } from 'comark' import { MarkdownClient } from '../src/components/MarkdownClient' import { Markdown } from '../src/components/Markdown' import type { MarkdownProps } from '../src/components/Markdown' +import { defineMarkdownComponent } from '../src/index' Object.assign(globalThis, { IS_REACT_ACT_ENVIRONMENT: true }) @@ -84,6 +85,38 @@ describe('MarkdownClient streaming', () => { expect(container.querySelector('h1')?.id).toBe('heading') }) + it.each([false, true])('reuses factory configuration with caller overrides: %s', async (override) => { + const probe = observe() + const Base = defineMarkdownComponent({ extends: MarkdownClient, plugins: probe.plugins, headingIds: false }) + const Defined = defineMarkdownComponent({ extends: Base }) + const props = override ? { options: { headingIds: true }, plugins: [{ name: 'caller' }] } : {} + const first = '# Completed\n\nFirst paragraph.\n\nLast paragraph' + async function update(value: string, config: Pick = props) { + await act(async () => + root.render( + + ) + ) + } + await update(first) + expect(container.querySelector('h1')?.hasAttribute('id')).toBe(override) + await update(first + ' grows') + expect(probe.inputs.at(-1)).not.toContain('# Completed') + expect(container.textContent).toContain('Last paragraph grows') + + await update(first + ' grows', { ...props, options: { headingIds: !override } }) + expect(probe.inputs.at(-1)).toBe(first + ' grows') + expect(container.querySelector('h1')?.hasAttribute('id')).toBe(!override) + const replacement = observe() + replacement.plugins[0].name = 'replacement' + await update(first + ' grows', { ...props, plugins: replacement.plugins }) + expect(replacement.inputs).toEqual([first + ' grows']) + }) + it('applies unwrap changes and bypasses parsing for documents', async () => { const probe = observe() await render({ value: 'Paragraph', plugins: probe.plugins }) diff --git a/packages/comark/src/internal/parse/token-processor.ts b/packages/comark/src/internal/parse/token-processor.ts index 6e157e267..a6a2d0980 100644 --- a/packages/comark/src/internal/parse/token-processor.ts +++ b/packages/comark/src/internal/parse/token-processor.ts @@ -299,6 +299,8 @@ function processBlockToken( ): { node: Node | null; nextIndex: number } { const token = tokens[startIndex] + if (token.type === 'reference') return { node: null, nextIndex: startIndex + 1 } + if (token.type === 'hr') { return { node: ['hr', {}] as Node, nextIndex: startIndex + 1 } } diff --git a/packages/comark/src/parse.ts b/packages/comark/src/parse.ts index ea538a4b3..56ac8695f 100644 --- a/packages/comark/src/parse.ts +++ b/packages/comark/src/parse.ts @@ -124,7 +124,7 @@ export function createMarkdownParser { + it.each([false, true])('omits reference definitions with streaming: %s', async (streaming) => { + const result = await createMarkdownParser()('# Heading\n\n[ref]: https://example.com\n\n[link][ref]', { streaming }) + expect(result.nodes).toMatchObject([ + ['h1', {}, 'Heading'], + ['p', {}, ['a', { href: 'https://example.com' }, 'link']], + ]) + }) + + it.each([ + ['duplicate headings', '# Same\n\nIntro\n\n# Same', '\n\nTail'], + ['nested headings', '## Parent\n\nIntro\n\n### Child', '\n\nTail'], + ['setext headings', 'Same\n====\n\nIntro\n\nSame\n====', '\n\nTail'], + ['CRLF setext headings', 'Same\r\n====\r\n\r\nIntro\r\n\r\nSame\r\n====', '\r\n\r\nTail'], + ['headings in lists', '# Same\n\nIntro\n\n- # Same', '\n\nTail'], + ['existing references', '[ref]: https://example.com\n\n# Heading\n\nIntro\n\n[link][ref]', ' grows'], + ['new references', '[link][ref]\n\nIntro\n\nTail', '\n\n[ref]: https://example.com'], + ])('matches a full parse after appending to %s', async (_, source, appended) => { + const parse = createMarkdownParser() + await parse(source, { streaming: true }) + + const result = await parse(source + appended, { streaming: true }) + + expect(result).toMatchObject(await createMarkdownParser()(source + appended)) + }) + describe('$.line metadata', () => { it('preserves position metadata on nodes in streaming mode', async () => { const parse = createMarkdownParser() diff --git a/test/bundle.test.ts b/test/bundle.test.ts index 5ab298aa3..8b8587627 100644 --- a/test/bundle.test.ts +++ b/test/bundle.test.ts @@ -64,7 +64,7 @@ describe('package bundle size', { timeout: 60_000 }, () => { "@comark/ansi": "36.6k (98 files)", "@comark/html": "15.7k (58 files)", "@comark/nuxt": "11.8k (58 files)", - "@comark/react": "37.6k (74 files)", + "@comark/react": "38.2k (74 files)", "@comark/svelte": "43.9k (82 files)", "@comark/vue": "51.7k (78 files)", "comark": "363k (156 files)", From 7ca19c536527ecd9f6375a894befd1f3242f3421 Mon Sep 17 00:00:00 2001 From: Farnabaz Date: Thu, 15 Oct 2026 15:40:30 +0200 Subject: [PATCH 3/4] refactor(react): use createSerializedMarkdownParser in MarkdownClient --- .../src/components/MarkdownClient.tsx | 24 +- pnpm-lock.yaml | 771 ++++++++++++++++-- 2 files changed, 705 insertions(+), 90 deletions(-) diff --git a/packages/comark-react/src/components/MarkdownClient.tsx b/packages/comark-react/src/components/MarkdownClient.tsx index 128d00402..952980c5c 100644 --- a/packages/comark-react/src/components/MarkdownClient.tsx +++ b/packages/comark-react/src/components/MarkdownClient.tsx @@ -1,7 +1,7 @@ 'use client' import { use, useDeferredValue, useMemo, Suspense } from 'react' -import { createMarkdownParser } from 'comark' +import { createSerializedMarkdownParser } from 'comark' import type { MarkdownDocument as MarkdownDocumentType } from 'comark' import { isMarkdownDocument } from 'comark/utils' import { MarkdownLive } from './MarkdownLive.tsx' @@ -50,24 +50,14 @@ export function MarkdownClient({ ? String(children) : ((value as string | undefined) ?? '') - const parse = useMemo(() => { - let parser: ReturnType | undefined - let pending: Promise = Promise.resolve() - - // Keep streaming state in order without hiding plugin errors from Suspense. - return (source: string, streaming: boolean) => { - const run = () => { - parser ??= createMarkdownParser({ ...options, ...(unwrap ? { unwrap } : {}), plugins }) - return parser(source, { streaming }) - } - const result = pending.then(run, run) - pending = result - return result - } - }, [options, plugins, unwrap]) + // Recreated only when parser inputs change, so streaming updates reuse nodes. + const parse = useMemo( + () => createSerializedMarkdownParser({ ...options, ...(unwrap ? { unwrap } : {}), plugins }), + [options, plugins, unwrap] + ) const parsePromise = useMemo( - () => (isMarkdownDocument(content) ? Promise.resolve(content) : parse(content, streaming)), + () => (isMarkdownDocument(content) ? Promise.resolve(content) : parse(content, { streaming })), [content, parse, streaming] ) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c374ec181..1b84d68da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -690,7 +690,7 @@ importers: version: link:../../../packages/comark-vue '@nuxt/ui': specifier: 'catalog:' - version: 4.11.2(4b0897582682e6d02cf53b6c671c253a) + version: 4.11.2(a6d9b05792209d74448bfe0eff9282db) nuxt: specifier: 'catalog:' version: 4.6.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.150.0)(@parcel/watcher@2.6.0)(@types/node@26.6.5)(@vercel/functions@3.9.8(ws@8.21.3))(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(mlly@1.8.2)(oxc-parser@0.149.0)(oxlint@1.87.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.63.4))(rollup@4.63.4)(sass-embedded@1.104.1)(sass@1.104.1)(srvx@1.0.5)(supports-color@10.2.2)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.1) @@ -937,7 +937,7 @@ importers: version: link:../../../packages/comark-vue '@nuxt/ui': specifier: 'catalog:' - version: 4.11.2(4b0897582682e6d02cf53b6c671c253a) + version: 4.11.2(132b3a71867f87f5a8dc824f2a4fc8bd) '@shikijs/langs': specifier: 'catalog:' version: 4.4.3 @@ -1187,7 +1187,7 @@ importers: version: link:../../../packages/comark-vue '@nuxt/ui': specifier: 'catalog:' - version: 4.11.2(1a8b2b83617866e23a59431b12d70dbe) + version: 4.11.2(535ef7ecd71e6a3ff9c0e232f278de81) '@shikijs/themes': specifier: 'catalog:' version: 4.4.3 @@ -1339,7 +1339,7 @@ importers: version: link:../../../packages/comark-vue '@nuxt/ui': specifier: 'catalog:' - version: 4.11.2(1a8b2b83617866e23a59431b12d70dbe) + version: 4.11.2(@oxc-project/types@0.153.0)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(embla-carousel@8.6.0)(esbuild@0.28.2)(focus-trap@7.8.0)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(lightningcss@1.33.0)(oxc-parser@0.150.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(rolldown@1.2.13)(rollup@4.63.4)(tailwindcss@4.3.3)(typescript@6.0.3)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) '@shikijs/langs': specifier: 'catalog:' version: 4.4.3 @@ -1391,7 +1391,7 @@ importers: version: link:../../../packages/comark-nuxt '@nuxt/ui': specifier: 'catalog:' - version: 4.11.2(4b0897582682e6d02cf53b6c671c253a) + version: 4.11.2(a6d9b05792209d74448bfe0eff9282db) ai: specifier: 'catalog:' version: 7.0.112(zod@4.6.5) @@ -1572,15 +1572,15 @@ importers: specifier: 'catalog:' version: 4.4.3 devDependencies: - '@vitest/browser-playwright': - specifier: 'catalog:' - version: 4.1.10(playwright@1.61.1)(vite@8.1.4(@types/node@26.2.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.99.0)(terser@5.49.0)(tsx@4.23.0)(yaml@2.9.0))(vitest@4.1.10) '@types/react': specifier: 'catalog:' version: 19.3.0 '@types/react-dom': specifier: 'catalog:' version: 19.3.0(@types/react@19.3.0) + '@vitest/browser-playwright': + specifier: 'catalog:' + version: 4.1.11(playwright@1.64.0)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vitest@4.1.11) react: specifier: 'catalog:' version: 19.3.0 @@ -12812,6 +12812,23 @@ snapshots: - rolldown - unplugin + '@nuxt/devtools-kit@3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))': + dependencies: + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + execa: 8.0.1 + vite: 8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) + transitivePeerDependencies: + - '@nuxt/schema' + - confbox + - dotenv + - giget + - jiti + - magic-string + - mlly + - oxc-parser + - rolldown + - unplugin + '@nuxt/devtools-kit@4.0.0-alpha.7(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))': dependencies: '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) @@ -12967,6 +12984,62 @@ snapshots: - vite - webpack + '@nuxt/fonts@0.14.0(@nuxt/schema@4.6.1)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))': + dependencies: + '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + consola: 3.4.2 + defu: 6.1.7 + fontless: 0.2.1(@vercel/functions@3.9.8(ws@8.21.3))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + h3: 1.15.11 + magic-regexp: 0.10.0 + ofetch: 1.5.1 + pathe: 2.0.3 + sirv: 3.0.2 + tinyglobby: 0.2.17 + ufo: 1.6.4 + unifont: 0.7.5 + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unstorage: 1.17.5(@vercel/functions@3.9.8(ws@8.21.3))(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@farmfe/core' + - '@netlify/blobs' + - '@nuxt/schema' + - '@planetscale/database' + - '@rsbuild/core' + - '@rspack/core' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bun-types-no-globals + - confbox + - db0 + - dotenv + - esbuild + - giget + - idb-keyval + - ioredis + - jiti + - magic-string + - mlly + - oxc-parser + - rolldown + - rollup + - unloader + - uploadthing + - vite + - webpack + '@nuxt/icon@2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3))': dependencies: '@iconify/collections': 1.0.739 @@ -12996,6 +13069,35 @@ snapshots: - vite - vue + '@nuxt/icon@2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3))': + dependencies: + '@iconify/collections': 1.0.739 + '@iconify/types': 2.0.0 + '@iconify/utils': 3.1.7 + '@iconify/vue': 5.0.2(vue@3.5.43(typescript@6.0.3)) + '@nuxt/devtools-kit': 3.4.2(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + consola: 3.4.2 + local-pkg: 1.2.1 + mlly: 1.8.2 + ohash: 2.0.12 + picomatch: 4.0.7 + std-env: 4.3.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 + transitivePeerDependencies: + - '@nuxt/schema' + - confbox + - dotenv + - giget + - jiti + - magic-string + - oxc-parser + - rolldown + - unplugin + - vite + - vue + '@nuxt/kit@3.21.11(magicast@0.5.5)': dependencies: c12: 3.3.4(magicast@0.5.5) @@ -13113,6 +13215,39 @@ snapshots: - magic-string - unplugin + '@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))': + dependencies: + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.2.2 + exsolve: 1.1.3 + ignore: 7.0.12 + klona: 2.0.6 + microdiff: 1.6.0 + nostics: 1.3.0 + package-manager-detector: 1.9.0 + pathe: 2.0.3 + rc9: 3.1.0 + scule: 1.3.0 + std-env: 4.3.0 + tinyexec: 1.3.1 + tinyglobby: 0.2.17 + unctx: 3.0.1(magic-string@1.4.3)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + verkit: 0.5.0 + optionalDependencies: + '@nuxt/schema': 4.6.1 + confbox: 0.3.1 + dotenv: 17.4.2 + giget: 3.3.1 + jiti: 2.7.0 + mlly: 1.8.2 + oxc-parser: 0.150.0 + rolldown: 1.2.13 + transitivePeerDependencies: + - magic-string + - unplugin + '@nuxt/nitro-server@4.6.1(7262aeceaf55377965d1dd2cf1874b48)': dependencies: '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) @@ -13222,17 +13357,17 @@ snapshots: rc9: 3.1.0 std-env: 4.3.0 - '@nuxt/ui@4.11.2(1a8b2b83617866e23a59431b12d70dbe)': + '@nuxt/ui@4.11.2(132b3a71867f87f5a8dc824f2a4fc8bd)': dependencies: '@floating-ui/dom': 1.8.0 '@iconify/vue': 5.0.2(vue@3.5.43(typescript@6.0.3)) '@internationalized/date': 3.12.4 '@internationalized/number': 3.6.8 - '@nuxt/fonts': 0.14.0(@nuxt/schema@4.6.1)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) - '@nuxt/icon': 2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) - '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@nuxt/fonts': 0.14.0(@nuxt/schema@4.6.1)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@nuxt/icon': 2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) '@nuxt/schema': 4.6.1 - '@nuxtjs/color-mode': 4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@nuxtjs/color-mode': 4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) '@standard-schema/spec': 1.1.0 '@tailwindcss/postcss': 4.3.3 '@tailwindcss/vite': 4.3.3(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) @@ -13255,7 +13390,7 @@ snapshots: '@tiptap/starter-kit': 3.31.3 '@tiptap/suggestion': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) '@tiptap/vue-3': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(vue@3.5.43(typescript@6.0.3)) - '@unhead/vue': 3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@unhead/vue': 3.4.3(@oxc-project/types@0.150.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) '@vueuse/core': 14.4.0(vue@3.5.43(typescript@6.0.3)) '@vueuse/integrations': 14.4.0(focus-trap@7.8.0)(fuse.js@7.5.0)(vue@3.5.43(typescript@6.0.3)) '@vueuse/shared': 14.4.0(vue@3.5.43(typescript@6.0.3)) @@ -13286,7 +13421,7 @@ snapshots: typescript: 6.0.3 ufo: 1.6.4 unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) - unplugin-auto-import: 21.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(esbuild@0.28.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-auto-import: 21.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(esbuild@0.28.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) unplugin-vue-components: 32.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) vaul-vue: 0.4.1(reka-ui@2.10.4(vue@3.5.43(typescript@6.0.3)))(vue@3.5.43(typescript@6.0.3)) vue-component-type-helpers: 3.3.13 @@ -13349,17 +13484,17 @@ snapshots: - vue - webpack - '@nuxt/ui@4.11.2(4b0897582682e6d02cf53b6c671c253a)': + '@nuxt/ui@4.11.2(535ef7ecd71e6a3ff9c0e232f278de81)': dependencies: '@floating-ui/dom': 1.8.0 '@iconify/vue': 5.0.2(vue@3.5.43(typescript@6.0.3)) '@internationalized/date': 3.12.4 '@internationalized/number': 3.6.8 - '@nuxt/fonts': 0.14.0(@nuxt/schema@4.6.1)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) - '@nuxt/icon': 2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) - '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@nuxt/fonts': 0.14.0(@nuxt/schema@4.6.1)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@nuxt/icon': 2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) '@nuxt/schema': 4.6.1 - '@nuxtjs/color-mode': 4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@nuxtjs/color-mode': 4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) '@standard-schema/spec': 1.1.0 '@tailwindcss/postcss': 4.3.3 '@tailwindcss/vite': 4.3.3(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) @@ -13382,7 +13517,7 @@ snapshots: '@tiptap/starter-kit': 3.31.3 '@tiptap/suggestion': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) '@tiptap/vue-3': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(vue@3.5.43(typescript@6.0.3)) - '@unhead/vue': 3.4.3(@oxc-project/types@0.150.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@unhead/vue': 3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) '@vueuse/core': 14.4.0(vue@3.5.43(typescript@6.0.3)) '@vueuse/integrations': 14.4.0(focus-trap@7.8.0)(fuse.js@7.5.0)(vue@3.5.43(typescript@6.0.3)) '@vueuse/shared': 14.4.0(vue@3.5.43(typescript@6.0.3)) @@ -13413,7 +13548,7 @@ snapshots: typescript: 6.0.3 ufo: 1.6.4 unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) - unplugin-auto-import: 21.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(esbuild@0.28.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-auto-import: 21.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(esbuild@0.28.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) unplugin-vue-components: 32.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) vaul-vue: 0.4.1(reka-ui@2.10.4(vue@3.5.43(typescript@6.0.3)))(vue@3.5.43(typescript@6.0.3)) vue-component-type-helpers: 3.3.13 @@ -13476,68 +13611,427 @@ snapshots: - vue - webpack - '@nuxt/vite-builder@4.6.1(d5f143258d2bc90e8ff623ea5e71ec45)': + '@nuxt/ui@4.11.2(@oxc-project/types@0.153.0)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(embla-carousel@8.6.0)(esbuild@0.28.2)(focus-trap@7.8.0)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(lightningcss@1.33.0)(oxc-parser@0.150.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(rolldown@1.2.13)(rollup@4.63.4)(tailwindcss@4.3.3)(typescript@6.0.3)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3))': dependencies: - '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) - '@vitejs/plugin-vue': 6.0.10(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) - autoprefixer: 10.6.1(postcss@8.5.30) - clickable-path: 0.1.1 + '@floating-ui/dom': 1.8.0 + '@iconify/vue': 5.0.2(vue@3.5.43(typescript@6.0.3)) + '@internationalized/date': 3.12.4 + '@internationalized/number': 3.6.8 + '@nuxt/fonts': 0.14.0(@nuxt/schema@4.6.1)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@nuxt/icon': 2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@nuxt/schema': 4.6.1 + '@nuxtjs/color-mode': 4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@standard-schema/spec': 1.1.0 + '@tailwindcss/postcss': 4.3.3 + '@tailwindcss/vite': 4.3.3(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@tanstack/vue-table': 8.21.3(vue@3.5.43(typescript@6.0.3)) + '@tanstack/vue-virtual': 3.13.39(vue@3.5.43(typescript@6.0.3)) + '@unhead/vue': 3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@vueuse/core': 14.4.0(vue@3.5.43(typescript@6.0.3)) + '@vueuse/integrations': 14.4.0(focus-trap@7.8.0)(fuse.js@7.5.0)(vue@3.5.43(typescript@6.0.3)) + '@vueuse/shared': 14.4.0(vue@3.5.43(typescript@6.0.3)) + colortranslator: 5.0.0 consola: 3.4.2 - cssnano: 9.8.0(postcss@8.5.30) defu: 6.1.7 - escape-string-regexp: 5.0.0 - exsolve: 1.1.3 - generic-names: 4.0.0 - get-port-please: 3.2.0 - js-tokens: 10.0.0 + embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0) + embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0) + embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) + embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0) + embla-carousel-fade: 8.6.0(embla-carousel@8.6.0) + embla-carousel-vue: 8.6.0(vue@3.5.43(typescript@6.0.3)) + embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0) + fuse.js: 7.5.0 + hookable: 6.1.2 knitwork: 1.3.0 - mocked-exports: 0.1.1 - my-bad: 0.2.11(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) - nuxt: 4.6.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.150.0)(@parcel/watcher@2.6.0)(@types/node@26.6.5)(@vercel/functions@3.9.8(ws@8.21.3))(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(mlly@1.8.2)(oxc-parser@0.149.0)(oxlint@1.87.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.63.4))(rollup@4.63.4)(sass-embedded@1.104.1)(sass@1.104.1)(srvx@1.0.5)(supports-color@10.2.2)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.1) + magic-string: 1.4.3 + mlly: 1.8.2 + motion-v: 2.4.4(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vue@3.5.43(typescript@6.0.3)) + ohash: 2.0.12 pathe: 2.0.3 - pkg-types: 2.3.3 - postcss: 8.5.30 - rolldown-string: 0.3.1(rolldown@1.2.13) - seroval: 1.6.9 - std-env: 4.3.0 + reka-ui: 2.10.4(vue@3.5.43(typescript@6.0.3)) + scule: 1.3.0 + tailwind-merge: 3.7.0 + tailwind-variants: 3.3.1(tailwind-merge@3.7.0)(tailwindcss@4.3.3) + tailwindcss: 4.3.3 + tinyglobby: 0.2.17 + typescript: 6.0.3 ufo: 1.6.4 - unenv: 2.0.0-rc.24 unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) - vite: 8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - vite-node: 6.0.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - vite-plugin-checker: 0.14.5(oxlint@1.87.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue-tsc@3.3.11(typescript@6.0.3)) - vue: 3.5.43(typescript@6.0.3) - vue-bundle-renderer: 2.4.0 - optionalDependencies: - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) - rolldown: 1.2.13 - rollup-plugin-visualizer: 7.1.1(rolldown@1.2.13)(rollup@4.63.4) + unplugin-auto-import: 21.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(esbuild@0.28.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-vue-components: 32.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + vaul-vue: 0.4.1(reka-ui@2.10.4(vue@3.5.43(typescript@6.0.3)))(vue@3.5.43(typescript@6.0.3)) + vue-component-type-helpers: 3.3.13 transitivePeerDependencies: - - '@biomejs/biome' + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' - '@farmfe/core' - - '@nuxt/schema' + - '@netlify/blobs' + - '@oxc-project/types' + - '@planetscale/database' - '@rsbuild/core' - '@rspack/core' - - '@types/node' - - '@vitejs/devtools' + - '@unhead/cli' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools-kit' + - '@vue/composition-api' + - async-validator + - aws4fetch + - axios - bun-types-no-globals + - change-case - confbox + - db0 - dotenv + - drauu + - embla-carousel - esbuild - - eslint + - focus-trap - giget + - idb-keyval + - ioredis - jiti - - less - - magic-string - - meow - - mlly - - optionator + - jwt-decode + - lightningcss + - nprogress - oxc-parser - - oxlint + - qrcode + - react + - react-dom + - rolldown - rollup - - sass - - sass-embedded + - sortablejs + - universal-cookie + - unloader + - uploadthing + - vite + - vue + - webpack + + '@nuxt/ui@4.11.2(a6d9b05792209d74448bfe0eff9282db)': + dependencies: + '@floating-ui/dom': 1.8.0 + '@iconify/vue': 5.0.2(vue@3.5.43(typescript@6.0.3)) + '@internationalized/date': 3.12.4 + '@internationalized/number': 3.6.8 + '@nuxt/fonts': 0.14.0(@nuxt/schema@4.6.1)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@nuxt/icon': 2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@nuxt/schema': 4.6.1 + '@nuxtjs/color-mode': 4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@standard-schema/spec': 1.1.0 + '@tailwindcss/postcss': 4.3.3 + '@tailwindcss/vite': 4.3.3(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@tanstack/vue-table': 8.21.3(vue@3.5.43(typescript@6.0.3)) + '@tanstack/vue-virtual': 3.13.39(vue@3.5.43(typescript@6.0.3)) + '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) + '@tiptap/extension-bubble-menu': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/extension-code': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) + '@tiptap/extension-collaboration': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32))(yjs@13.6.32) + '@tiptap/extension-drag-handle': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/extension-collaboration@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32))(yjs@13.6.32))(@tiptap/extension-node-range@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32)) + '@tiptap/extension-drag-handle-vue-3': 3.31.3(@tiptap/extension-drag-handle@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/extension-collaboration@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32))(yjs@13.6.32))(@tiptap/extension-node-range@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32)))(@tiptap/pm@3.31.3)(@tiptap/vue-3@3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(vue@3.5.43(typescript@6.0.3)))(vue@3.5.43(typescript@6.0.3)) + '@tiptap/extension-floating-menu': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/extension-horizontal-rule': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/extension-image': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) + '@tiptap/extension-mention': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/suggestion@3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) + '@tiptap/extension-node-range': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/extension-placeholder': 3.31.3(@tiptap/extensions@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) + '@tiptap/markdown': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/pm': 3.31.3 + '@tiptap/starter-kit': 3.31.3 + '@tiptap/suggestion': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/vue-3': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(vue@3.5.43(typescript@6.0.3)) + '@unhead/vue': 3.4.3(@oxc-project/types@0.150.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@vueuse/core': 14.4.0(vue@3.5.43(typescript@6.0.3)) + '@vueuse/integrations': 14.4.0(focus-trap@7.8.0)(fuse.js@7.5.0)(vue@3.5.43(typescript@6.0.3)) + '@vueuse/shared': 14.4.0(vue@3.5.43(typescript@6.0.3)) + colortranslator: 5.0.0 + consola: 3.4.2 + defu: 6.1.7 + embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0) + embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0) + embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) + embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0) + embla-carousel-fade: 8.6.0(embla-carousel@8.6.0) + embla-carousel-vue: 8.6.0(vue@3.5.43(typescript@6.0.3)) + embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0) + fuse.js: 7.5.0 + hookable: 6.1.2 + knitwork: 1.3.0 + magic-string: 1.4.3 + mlly: 1.8.2 + motion-v: 2.4.4(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vue@3.5.43(typescript@6.0.3)) + ohash: 2.0.12 + pathe: 2.0.3 + reka-ui: 2.10.4(vue@3.5.43(typescript@6.0.3)) + scule: 1.3.0 + tailwind-merge: 3.7.0 + tailwind-variants: 3.3.1(tailwind-merge@3.7.0)(tailwindcss@4.3.3) + tailwindcss: 4.3.3 + tinyglobby: 0.2.17 + typescript: 6.0.3 + ufo: 1.6.4 + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-auto-import: 21.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(esbuild@0.28.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-vue-components: 32.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + vaul-vue: 0.4.1(reka-ui@2.10.4(vue@3.5.43(typescript@6.0.3)))(vue@3.5.43(typescript@6.0.3)) + vue-component-type-helpers: 3.3.13 + optionalDependencies: + ai: 7.0.112(zod@4.6.5) + vue-router: 5.4.0(@vue/compiler-sfc@3.5.43)(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + zod: 4.6.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@farmfe/core' + - '@netlify/blobs' + - '@oxc-project/types' + - '@planetscale/database' + - '@rsbuild/core' + - '@rspack/core' + - '@unhead/cli' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools-kit' + - '@vue/composition-api' + - async-validator + - aws4fetch + - axios + - bun-types-no-globals + - change-case + - confbox + - db0 + - dotenv + - drauu + - embla-carousel + - esbuild + - focus-trap + - giget + - idb-keyval + - ioredis + - jiti + - jwt-decode + - lightningcss + - nprogress + - oxc-parser + - qrcode + - react + - react-dom + - rolldown + - rollup + - sortablejs + - universal-cookie + - unloader + - uploadthing + - vite + - vue + - webpack + + '@nuxt/ui@4.11.2(bcd98a3b21c1cc6530c50811bdd045dc)': + dependencies: + '@floating-ui/dom': 1.8.0 + '@iconify/vue': 5.0.2(vue@3.5.43(typescript@6.0.3)) + '@internationalized/date': 3.12.4 + '@internationalized/number': 3.6.8 + '@nuxt/fonts': 0.14.0(@nuxt/schema@4.6.1)(@vercel/functions@3.9.8(ws@8.21.3))(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@nuxt/icon': 2.5.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@nuxt/schema': 4.6.1 + '@nuxtjs/color-mode': 4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@standard-schema/spec': 1.1.0 + '@tailwindcss/postcss': 4.3.3 + '@tailwindcss/vite': 4.3.3(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@tanstack/vue-table': 8.21.3(vue@3.5.43(typescript@6.0.3)) + '@tanstack/vue-virtual': 3.13.39(vue@3.5.43(typescript@6.0.3)) + '@tiptap/core': 3.31.3(@tiptap/pm@3.31.3) + '@tiptap/extension-bubble-menu': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/extension-code': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) + '@tiptap/extension-collaboration': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32))(yjs@13.6.32) + '@tiptap/extension-drag-handle': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/extension-collaboration@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32))(yjs@13.6.32))(@tiptap/extension-node-range@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32)) + '@tiptap/extension-drag-handle-vue-3': 3.31.3(@tiptap/extension-drag-handle@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/extension-collaboration@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32))(yjs@13.6.32))(@tiptap/extension-node-range@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/y-tiptap@3.0.9(prosemirror-model@1.25.11)(prosemirror-state@1.4.4)(prosemirror-view@1.42.4)(y-protocols@1.0.7(yjs@13.6.32))(yjs@13.6.32)))(@tiptap/pm@3.31.3)(@tiptap/vue-3@3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(vue@3.5.43(typescript@6.0.3)))(vue@3.5.43(typescript@6.0.3)) + '@tiptap/extension-floating-menu': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/extension-horizontal-rule': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/extension-image': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3)) + '@tiptap/extension-mention': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(@tiptap/suggestion@3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) + '@tiptap/extension-node-range': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/extension-placeholder': 3.31.3(@tiptap/extensions@3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)) + '@tiptap/markdown': 3.31.3(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/pm': 3.31.3 + '@tiptap/starter-kit': 3.31.3 + '@tiptap/suggestion': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3) + '@tiptap/vue-3': 3.31.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.31.3(@tiptap/pm@3.31.3))(@tiptap/pm@3.31.3)(vue@3.5.43(typescript@6.0.3)) + '@unhead/vue': 3.4.3(@oxc-project/types@0.150.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@vueuse/core': 14.4.0(vue@3.5.43(typescript@6.0.3)) + '@vueuse/integrations': 14.4.0(focus-trap@7.8.0)(fuse.js@7.5.0)(vue@3.5.43(typescript@6.0.3)) + '@vueuse/shared': 14.4.0(vue@3.5.43(typescript@6.0.3)) + colortranslator: 5.0.0 + consola: 3.4.2 + defu: 6.1.7 + embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0) + embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0) + embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) + embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0) + embla-carousel-fade: 8.6.0(embla-carousel@8.6.0) + embla-carousel-vue: 8.6.0(vue@3.5.43(typescript@6.0.3)) + embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0) + fuse.js: 7.5.0 + hookable: 6.1.2 + knitwork: 1.3.0 + magic-string: 1.4.3 + mlly: 1.8.2 + motion-v: 2.4.4(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vue@3.5.43(typescript@6.0.3)) + ohash: 2.0.12 + pathe: 2.0.3 + reka-ui: 2.10.4(vue@3.5.43(typescript@6.0.3)) + scule: 1.3.0 + tailwind-merge: 3.7.0 + tailwind-variants: 3.3.1(tailwind-merge@3.7.0)(tailwindcss@4.3.3) + tailwindcss: 4.3.3 + tinyglobby: 0.2.17 + typescript: 6.0.3 + ufo: 1.6.4 + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-auto-import: 21.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(esbuild@0.28.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-vue-components: 32.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + vaul-vue: 0.4.1(reka-ui@2.10.4(vue@3.5.43(typescript@6.0.3)))(vue@3.5.43(typescript@6.0.3)) + vue-component-type-helpers: 3.3.13 + optionalDependencies: + ai: 7.0.112(zod@4.6.5) + zod: 4.6.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@farmfe/core' + - '@netlify/blobs' + - '@oxc-project/types' + - '@planetscale/database' + - '@rsbuild/core' + - '@rspack/core' + - '@unhead/cli' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools-kit' + - '@vue/composition-api' + - async-validator + - aws4fetch + - axios + - bun-types-no-globals + - change-case + - confbox + - db0 + - dotenv + - drauu + - embla-carousel + - esbuild + - focus-trap + - giget + - idb-keyval + - ioredis + - jiti + - jwt-decode + - lightningcss + - nprogress + - oxc-parser + - qrcode + - react + - react-dom + - rolldown + - rollup + - sortablejs + - universal-cookie + - unloader + - uploadthing + - vite + - vue + - webpack + + '@nuxt/vite-builder@4.6.1(d5f143258d2bc90e8ff623ea5e71ec45)': + dependencies: + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@vitejs/plugin-vue': 6.0.10(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3)) + autoprefixer: 10.6.1(postcss@8.5.30) + clickable-path: 0.1.1 + consola: 3.4.2 + cssnano: 9.8.0(postcss@8.5.30) + defu: 6.1.7 + escape-string-regexp: 5.0.0 + exsolve: 1.1.3 + generic-names: 4.0.0 + get-port-please: 3.2.0 + js-tokens: 10.0.0 + knitwork: 1.3.0 + mocked-exports: 0.1.1 + my-bad: 0.2.11(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + nuxt: 4.6.1(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@oxc-project/types@0.150.0)(@parcel/watcher@2.6.0)(@types/node@26.6.5)(@vercel/functions@3.9.8(ws@8.21.3))(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(lightningcss@1.33.0)(mlly@1.8.2)(oxc-parser@0.149.0)(oxlint@1.87.0)(rolldown@1.2.13)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.13)(rollup@4.63.4))(rollup@4.63.4)(sass-embedded@1.104.1)(sass@1.104.1)(srvx@1.0.5)(supports-color@10.2.2)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue-tsc@3.3.11(typescript@6.0.3))(yaml@2.9.1) + pathe: 2.0.3 + pkg-types: 2.3.3 + postcss: 8.5.30 + rolldown-string: 0.3.1(rolldown@1.2.13) + seroval: 1.6.9 + std-env: 4.3.0 + ufo: 1.6.4 + unenv: 2.0.0-rc.24 + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + vite: 8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) + vite-node: 6.0.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) + vite-plugin-checker: 0.14.5(oxlint@1.87.0)(typescript@6.0.3)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue-tsc@3.3.11(typescript@6.0.3)) + vue: 3.5.43(typescript@6.0.3) + vue-bundle-renderer: 2.4.0 + optionalDependencies: + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + rolldown: 1.2.13 + rollup-plugin-visualizer: 7.1.1(rolldown@1.2.13)(rollup@4.63.4) + transitivePeerDependencies: + - '@biomejs/biome' + - '@farmfe/core' + - '@nuxt/schema' + - '@rsbuild/core' + - '@rspack/core' + - '@types/node' + - '@vitejs/devtools' + - bun-types-no-globals + - confbox + - dotenv + - esbuild + - eslint + - giget + - jiti + - less + - magic-string + - meow + - mlly + - optionator + - oxc-parser + - oxlint + - rollup + - sass + - sass-embedded - stylelint - stylus - sugarss @@ -13596,6 +14090,25 @@ snapshots: - rolldown - unplugin + '@nuxtjs/color-mode@4.0.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))': + dependencies: + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + exsolve: 1.1.3 + pathe: 2.0.3 + pkg-types: 2.3.3 + semver: 7.8.5 + transitivePeerDependencies: + - '@nuxt/schema' + - confbox + - dotenv + - giget + - jiti + - magic-string + - mlly + - oxc-parser + - rolldown + - unplugin + '@nuxtjs/mcp-toolkit@0.21.0(@nuxt/schema@4.6.1)(@vue/compiler-sfc@3.5.43)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(h3@1.15.11)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3))(zod@4.6.5)': dependencies: '@modelcontextprotocol/sdk': 1.30.0(supports-color@10.2.2)(zod@4.6.5) @@ -15224,16 +15737,37 @@ snapshots: - rollup - unloader - '@unhead/bundler@3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(unhead@3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))': + '@unhead/bundler@3.4.3(@oxc-project/types@0.150.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(unhead@3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))': dependencies: magic-string: 1.4.3 - oxc-walker: 1.1.1(@oxc-project/types@0.153.0)(oxc-parser@0.149.0)(rolldown@1.2.13) + oxc-walker: 1.1.1(@oxc-project/types@0.150.0)(oxc-parser@0.150.0)(rolldown@1.2.13) unhead: 3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) optionalDependencies: esbuild: 0.28.2 lightningcss: 1.33.0 - oxc-parser: 0.149.0 + oxc-parser: 0.150.0 + rolldown: 1.2.13 + vite: 8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) + transitivePeerDependencies: + - '@farmfe/core' + - '@oxc-project/types' + - '@rsbuild/core' + - '@rspack/core' + - bun-types-no-globals + - rollup + - unloader + + '@unhead/bundler@3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(unhead@3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))': + dependencies: + magic-string: 1.4.3 + oxc-walker: 1.1.1(@oxc-project/types@0.153.0)(oxc-parser@0.150.0)(rolldown@1.2.13) + unhead: 3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + optionalDependencies: + esbuild: 0.28.2 + lightningcss: 1.33.0 + oxc-parser: 0.150.0 rolldown: 1.2.13 vite: 8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) transitivePeerDependencies: @@ -15269,9 +15803,33 @@ snapshots: - rollup - unloader - '@unhead/vue@3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3))': + '@unhead/vue@3.4.3(@oxc-project/types@0.150.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3))': + dependencies: + '@unhead/bundler': 3.4.3(@oxc-project/types@0.150.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(unhead@3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + hookable: 6.1.2 + unhead: 3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + vue: 3.5.43(typescript@6.0.3) + optionalDependencies: + vite: 8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) + transitivePeerDependencies: + - '@farmfe/core' + - '@oxc-project/types' + - '@rsbuild/core' + - '@rspack/core' + - '@unhead/cli' + - '@vitejs/devtools-kit' + - bun-types-no-globals + - esbuild + - lightningcss + - oxc-parser + - rolldown + - rollup + - unloader + + '@unhead/vue@3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3))': dependencies: - '@unhead/bundler': 3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(unhead@3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + '@unhead/bundler': 3.4.3(@oxc-project/types@0.153.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(unhead@3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) hookable: 6.1.2 unhead: 3.4.3(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) @@ -16293,7 +16851,7 @@ snapshots: '@iconify-json/vscode-icons': 1.2.79 '@iconify/vue': 5.0.2(vue@3.5.43(typescript@6.0.3)) '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) - '@nuxt/ui': 4.11.2(4b0897582682e6d02cf53b6c671c253a) + '@nuxt/ui': 4.11.2(bcd98a3b21c1cc6530c50811bdd045dc) '@nuxtjs/mcp-toolkit': 0.21.0(@nuxt/schema@4.6.1)(@vue/compiler-sfc@3.5.43)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(h3@1.15.11)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(supports-color@10.2.2)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(vue@3.5.43(typescript@6.0.3))(zod@4.6.5) '@nuxtjs/robots': 6.2.3(6a1be41e09627cb8c3da328ae62b758c) '@nuxtjs/sitemap': 8.5.1(6a1be41e09627cb8c3da328ae62b758c) @@ -19332,10 +19890,16 @@ snapshots: oxc-parser: 0.149.0 rolldown: 1.2.13 - oxc-walker@1.1.1(@oxc-project/types@0.153.0)(oxc-parser@0.149.0)(rolldown@1.2.13): + oxc-walker@1.1.1(@oxc-project/types@0.150.0)(oxc-parser@0.150.0)(rolldown@1.2.13): + optionalDependencies: + '@oxc-project/types': 0.150.0 + oxc-parser: 0.150.0 + rolldown: 1.2.13 + + oxc-walker@1.1.1(@oxc-project/types@0.153.0)(oxc-parser@0.150.0)(rolldown@1.2.13): optionalDependencies: '@oxc-project/types': 0.153.0 - oxc-parser: 0.149.0 + oxc-parser: 0.150.0 rolldown: 1.2.13 oxfmt@0.70.0(svelte@5.57.2): @@ -20883,6 +21447,13 @@ snapshots: rolldown: 1.2.13 unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unctx@3.0.1(magic-string@1.4.3)(oxc-parser@0.150.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))): + optionalDependencies: + magic-string: 1.4.3 + oxc-parser: 0.150.0 + rolldown: 1.2.13 + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + undici-types@8.9.0: {} undici@7.28.0: {} @@ -20967,6 +21538,36 @@ snapshots: - vite - webpack + unimport@6.5.0(esbuild@0.28.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)): + dependencies: + acorn: 8.18.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.2.1 + magic-string: 1.4.3 + mlly: 1.8.2 + pathe: 2.0.3 + picomatch: 4.0.7 + pkg-types: 2.3.3 + scule: 1.3.0 + strip-literal: 4.0.0 + tinyglobby: 0.2.17 + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-utils: 0.3.2 + optionalDependencies: + oxc-parser: 0.150.0 + rolldown: 1.2.13 + transitivePeerDependencies: + - '@farmfe/core' + - '@rsbuild/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rollup + - unloader + - vite + - webpack + unimport@7.0.2(acorn@8.18.0)(esbuild@0.28.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)): dependencies: escape-string-regexp: 5.0.0 @@ -21048,6 +21649,30 @@ snapshots: - vite - webpack + unplugin-auto-import@21.1.0(@nuxt/kit@4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))))(@vueuse/core@14.4.0(vue@3.5.43(typescript@6.0.3)))(esbuild@0.28.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)): + dependencies: + local-pkg: 1.2.1 + magic-string: 1.4.3 + picomatch: 4.0.7 + unimport: 6.5.0(esbuild@0.28.2)(oxc-parser@0.150.0)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin: 3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + unplugin-utils: 0.3.2 + optionalDependencies: + '@nuxt/kit': 4.6.1(@nuxt/schema@4.6.1)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.3)(mlly@1.8.2)(oxc-parser@0.149.0)(rolldown@1.2.13)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.13)(rollup@4.63.4)(vite@8.3.4(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))) + '@vueuse/core': 14.4.0(vue@3.5.43(typescript@6.0.3)) + transitivePeerDependencies: + - '@farmfe/core' + - '@rsbuild/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - oxc-parser + - rolldown + - rollup + - unloader + - vite + - webpack + unplugin-utils@0.3.2: dependencies: pathe: 2.0.3 From 2b6b76b0eb282fbca131b8965ae111504ff55bc6 Mon Sep 17 00:00:00 2001 From: onmax Date: Sun, 25 Oct 2026 17:02:29 +0100 Subject: [PATCH 4/4] fix(react): preserve parsed document bypass and consolidate tests --- AGENTS.md | 2 + CONTRIBUTING.md | 2 +- packages/comark-react/README.md | 2 + .../src/components/MarkdownClient.tsx | 13 +- .../test/markdown-client.browser.test.tsx | 118 ------------------ .../test/streaming.browser.test.tsx | 97 +++++++++++++- test/bundle.test.ts | 2 +- 7 files changed, 110 insertions(+), 126 deletions(-) delete mode 100644 packages/comark-react/test/markdown-client.browser.test.tsx diff --git a/AGENTS.md b/AGENTS.md index d1c5b5487..7402393f4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -312,6 +312,8 @@ import math, { Math } from '@comark/react/plugins/math' import mermaid, { Mermaid } from '@comark/react/plugins/mermaid' ``` +React tests have two projects: `server` runs the Node/SSR tests, and `client` runs `*.browser.test.tsx` in headless Chromium. Install the browser with `pnpm exec playwright install chromium` before running the package tests. CI runs both projects. + ## Package: @comark/svelte Svelte 5 renderer for Comark. Located at `packages/comark-svelte/`: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 71f42737b..0a897df21 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -76,7 +76,7 @@ pnpm vitest run test/parse/sub-sup.test.ts Parser fixtures live in `packages/comark/SPEC` and run through `test/index.test.ts`. Parser changes should also preserve streaming behavior in `test/streaming.test.ts`. -Svelte's local tests include a headless Chromium project. Install the browser if needed: +React and Svelte tests include a headless Chromium project. Install the browser if needed: ```sh pnpm exec playwright install chromium diff --git a/packages/comark-react/README.md b/packages/comark-react/README.md index 0acd2fbee..43237f766 100644 --- a/packages/comark-react/README.md +++ b/packages/comark-react/README.md @@ -61,6 +61,8 @@ Heads up! ### Streaming +Streaming reuses completed blocks as text is appended. Keep parser options and plugins stable between updates. Set `streaming` to `false` when the stream ends to parse the complete document. + ```tsx {content} diff --git a/packages/comark-react/src/components/MarkdownClient.tsx b/packages/comark-react/src/components/MarkdownClient.tsx index 7ece781e5..8e32210be 100644 --- a/packages/comark-react/src/components/MarkdownClient.tsx +++ b/packages/comark-react/src/components/MarkdownClient.tsx @@ -52,12 +52,15 @@ export function MarkdownClient({ ? String(children) : ((value as string | undefined) ?? '') - const parse = useMemo( - () => createSerializedMarkdownParser({ ...options, ...(unwrap ? { unwrap } : {}), plugins }), - [options, plugins, unwrap] - ) + const parse = useMemo(() => { + let parser: ReturnType | undefined + return (source: string, streaming: boolean): Promise => { + parser ??= createSerializedMarkdownParser({ ...options, ...(unwrap ? { unwrap } : {}), plugins }) + return parser(source, { streaming }) + } + }, [options, plugins, unwrap]) const parsePromise = useMemo( - () => isMarkdownDocument(content) ? Promise.resolve(content) : parse(content, { streaming }), + () => (isMarkdownDocument(content) ? Promise.resolve(content) : parse(content, streaming)), [content, parse, streaming] ) diff --git a/packages/comark-react/test/markdown-client.browser.test.tsx b/packages/comark-react/test/markdown-client.browser.test.tsx deleted file mode 100644 index ba0fa8099..000000000 --- a/packages/comark-react/test/markdown-client.browser.test.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import { afterEach, describe, expect, it } from 'vitest' -import { StrictMode } from 'react' -import { createRoot, type Root } from 'react-dom/client' -import { parseMarkdown, type ComarkPlugin } from 'comark' -import { MarkdownClient } from '../src/components/MarkdownClient' -import type { MarkdownProps } from '../src/components/Markdown' - -let root: Root | undefined -let container: HTMLDivElement - -afterEach(() => { - root?.unmount() - container?.remove() -}) - -function mount(initial: MarkdownProps, strict = false): (next: Partial) => void { - container = document.createElement('div') - document.body.append(container) - root = createRoot(container) - let props = initial - const update = (next: Partial): void => { - props = { ...props, ...next } - const element = - root!.render(strict ? {element} : element) - } - update({}) - return update -} - -async function shows(text: string): Promise { - await expect.poll(() => container.textContent).toBe(text) -} - -describe('MarkdownClient streaming', () => { - it.each([false, true])('reuses the parsed prefix, including Strict Mode: %s', async (strict) => { - const inputs: string[] = [] - const plugin: ComarkPlugin = { - name: 'inputs', - pre(state) { inputs.push(state.markdown) }, - } - const initial = 'First\n\nSecond\n\nThird' - const update = mount({ value: initial, streaming: true, plugins: [plugin] }, strict) - await shows('FirstSecondThird') - inputs.length = 0 - update({ value: `${initial} grows` }) - await shows('FirstSecondThird grows') - expect(inputs.length).toBeGreaterThan(0) - expect(inputs.every((input) => !input.includes('First'))).toBe(true) - - inputs.length = 0 - update({ streaming: false }) - await expect.poll(() => inputs.length).toBeGreaterThan(0) - expect(inputs).toContain(`${initial} grows`) - update({ value: 'Replacement', streaming: true }) - await shows('Replacement') - }) - - it('reparses when options, plugins or unwrap change', async () => { - const update = mount({ value: 'https://example.com\n\nTail', streaming: true, options: { linkify: false } }) - await shows('https://example.comTail') - expect(container.querySelector('a')).toBeNull() - update({ options: { linkify: true } }) - await expect.poll(() => container.querySelector('a')?.href).toBe('https://example.com/') - update({ plugins: [{ name: 'replace', pre(state) { state.markdown = state.markdown.replace('Tail', 'Changed') } }] }) - await shows('https://example.comChanged') - update({ unwrap: true }) - await expect.poll(() => container.querySelector('p')).toBeNull() - }) - - it('keeps the newest configuration when an initial suspended parse finishes late', async () => { - const { promise, resolve } = Promise.withResolvers() - let finished = false - let started = false - const update = mount({ value: 'Old', streaming: true, plugins: [{ name: 'slow', async pre() { started = true; await promise; finished = true } }] }) - await expect.poll(() => started).toBe(true) - update({ value: 'New', plugins: [] }) - await shows('New') - resolve() - await expect.poll(() => finished).toBe(true) - await shows('New') - }) - - it('serializes async post hooks and keeps the previous display while parsing', async () => { - const { promise, resolve } = Promise.withResolvers() - let active = 0 - let maxActive = 0 - const started: string[] = [] - const update = mount({ value: 'Ready', streaming: true, plugins: [{ - name: 'slow', - async post(state) { - active++ - maxActive = Math.max(active, maxActive) - started.push(state.markdown) - if (state.markdown === 'Slow') await promise - active-- - }, - }] }) - await shows('Ready') - update({ value: 'Slow' }) - await expect.poll(() => started).toContain('Slow') - await shows('Ready') - update({ value: 'Latest' }) - await new Promise((done) => requestAnimationFrame(() => requestAnimationFrame(() => done()))) - resolve() - await shows('Latest') - expect(maxActive).toBe(1) - }) - - it('bypasses parsing for documents and resumes parsing strings', async () => { - let calls = 0 - const update = mount({ value: await parseMarkdown('Document'), streaming: true, plugins: [{ name: 'count', pre() { calls++ } }] }) - await shows('Document') - expect(calls).toBe(0) - update({ value: 'String' }) - await shows('String') - expect(calls).toBe(1) - }) -}) diff --git a/packages/comark-react/test/streaming.browser.test.tsx b/packages/comark-react/test/streaming.browser.test.tsx index 3de904317..60bb1a580 100644 --- a/packages/comark-react/test/streaming.browser.test.tsx +++ b/packages/comark-react/test/streaming.browser.test.tsx @@ -1,4 +1,4 @@ -import React, { act, Component } from 'react' +import React, { act, Component, StrictMode } from 'react' import { createRoot } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import type { ComarkPlugin, MarkdownDocument } from 'comark' @@ -186,3 +186,98 @@ describe('MarkdownClient streaming', () => { expect(container.textContent).toBe('Parse failed') }) }) + +it('reuses the completed prefix in Strict Mode', async () => { + const probe = observe() + const value = 'First\n\nSecond\n\nTail' + const update = async (value: string): Promise => { + await act(async () => { + root.render( + + + + ) + }) + } + await update(value) + probe.inputs.length = 0 + await update(`${value} grows`) + expect(container.textContent).toBe('FirstSecondTail grows') + expect(probe.inputs.length).toBeGreaterThan(0) + expect(probe.inputs.every((input) => !input.includes('First'))).toBe(true) +}) + +it('keeps the newest configuration when an initial suspended parse finishes late', async () => { + const { promise, resolve } = Promise.withResolvers() + let started = false + let finished = false + await render({ + value: 'Old', + streaming: true, + plugins: [ + { + name: 'slow', + async pre() { + started = true + await promise + finished = true + }, + }, + ], + }) + expect(started).toBe(true) + await render({ value: 'New', streaming: true, plugins: [] }) + expect(container.textContent).toBe('New') + await act(async () => resolve()) + expect(finished).toBe(true) + expect(container.textContent).toBe('New') +}) + +it('serializes async post hooks and keeps the previous display while parsing', async () => { + const { promise, resolve } = Promise.withResolvers() + let active = 0 + let maxActive = 0 + const started: string[] = [] + const plugins: ComarkPlugin[] = [ + { + name: 'slow', + async post(state) { + active++ + maxActive = Math.max(active, maxActive) + started.push(state.markdown) + if (state.markdown === 'Slow') await promise + active-- + }, + }, + ] + await render({ value: 'Ready', streaming: true, plugins }) + expect(container.textContent).toBe('Ready') + await render({ value: 'Slow', streaming: true, plugins }) + expect(started).toContain('Slow') + expect(container.textContent).toBe('Ready') + await render({ value: 'Latest', streaming: true, plugins }) + await act(async () => resolve()) + expect(container.textContent).toBe('Latest') + expect(maxActive).toBe(1) +}) + +it('does not initialize tokenizer plugins for a pre-parsed document', async () => { + await render({ + value: { nodes: [['p', {}, 'Already parsed']], frontmatter: {}, meta: {} }, + plugins: [ + { + name: 'throwing-initializer', + markdownItPlugins: [ + () => { + throw new Error('Tokenizer initialized') + }, + ], + }, + ], + }) + expect(container.textContent).toBe('Already parsed') +}) diff --git a/test/bundle.test.ts b/test/bundle.test.ts index f70e6b6fc..85dd671b6 100644 --- a/test/bundle.test.ts +++ b/test/bundle.test.ts @@ -64,7 +64,7 @@ describe('package bundle size', { timeout: 60_000 }, () => { "@comark/ansi": "37.3k (98 files)", "@comark/html": "16.5k (58 files)", "@comark/nuxt": "11.9k (58 files)", - "@comark/react": "38.6k (76 files)", + "@comark/react": "39.6k (76 files)", "@comark/svelte": "46.8k (84 files)", "@comark/vue": "56.4k (80 files)", "comark": "389k (152 files)",