From 49081273f595a5d0638cc520b6d545baf55c6af3 Mon Sep 17 00:00:00 2001 From: Elliott Johnson Date: Tue, 3 Mar 2026 16:27:33 -0700 Subject: [PATCH 01/10] feat: Svelte renderer --- .gitignore | 3 + AGENTS.md | 92 +- package.json | 2 +- packages/comark-svelte/package.json | 55 + packages/comark-svelte/src/Comark.svelte | 65 + packages/comark-svelte/src/ComarkAsync.svelte | 59 + packages/comark-svelte/src/ComarkNode.svelte | 110 + .../src/ComarkNode.svelte.test.ts | 167 ++ packages/comark-svelte/src/ComarkNode.test.ts | 208 ++ .../comark-svelte/src/ComarkRenderer.svelte | 54 + packages/comark-svelte/src/index.ts | 5 + packages/comark-svelte/src/types.ts | 30 + packages/comark-svelte/svelte.config.js | 10 + packages/comark-svelte/tsconfig.json | 16 + packages/comark-svelte/vitest.config.ts | 32 + pnpm-lock.yaml | 2041 ++++++++++++----- 16 files changed, 2403 insertions(+), 546 deletions(-) create mode 100644 packages/comark-svelte/package.json create mode 100644 packages/comark-svelte/src/Comark.svelte create mode 100644 packages/comark-svelte/src/ComarkAsync.svelte create mode 100644 packages/comark-svelte/src/ComarkNode.svelte create mode 100644 packages/comark-svelte/src/ComarkNode.svelte.test.ts create mode 100644 packages/comark-svelte/src/ComarkNode.test.ts create mode 100644 packages/comark-svelte/src/ComarkRenderer.svelte create mode 100644 packages/comark-svelte/src/index.ts create mode 100644 packages/comark-svelte/src/types.ts create mode 100644 packages/comark-svelte/svelte.config.js create mode 100644 packages/comark-svelte/tsconfig.json create mode 100644 packages/comark-svelte/vitest.config.ts diff --git a/.gitignore b/.gitignore index 74f7674..39d700d 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,6 @@ logs .vscode .history + +# Svelte +.svelte-kit diff --git a/AGENTS.md b/AGENTS.md index 1ea725a..8ff7623 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,7 +10,7 @@ This is a **monorepo** containing multiple packages related to Comark (Component - Fast synchronous and async parsing via markdown-it - Streaming support for real-time/incremental parsing -- Vue and React renderers +- Vue, React and Svelte renderers - Syntax highlighting via Shiki - Auto-close utilities for incomplete markdown (useful for AI streaming) @@ -21,7 +21,8 @@ This is a **monorepo** containing multiple packages related to Comark (Component ├── packages/ # All publishable packages │ ├── comark/ # Main Comark parser package │ ├── comark-cjk/ # CJK support plugin (@comark/cjk) -│ └── comark-math/ # Math formula support (@comark/math) +│ ├── comark-math/ # Math formula support (@comark/math) +│ └── comark-svelte/ # Svelte renderer (@comark/svelte) ├── examples/ # Example applications │ ├── vue-vite/ # Vue + Vite + Tailwind CSS v4 │ ├── react-vite/ # React 19 + Vite + Tailwind CSS v4 @@ -197,6 +198,58 @@ $$ - Vue and React components for easy integration - Automatic tokenization at parse time (not render time) for performance +## Package: @comark/svelte + +Svelte 5 renderer for Comark. Located at `packages/comark-svelte/`: + +``` +packages/comark-svelte/ +├── src/ +│ ├── index.ts # Entry point (@comark/svelte) +│ ├── types.ts # Shared prop interfaces +│ ├── Comark.svelte # High-level markdown → render ($state + $effect) +│ ├── ComarkAsync.svelte # High-level markdown → render (experimental await) +│ ├── ComarkRenderer.svelte # Low-level AST → render component +│ └── ComarkNode.svelte # Recursive AST node renderer +├── svelte.config.js # Svelte config (experimental.async enabled) +├── vitest.config.ts # Dual test config (server + client browser) +├── tsconfig.json +└── package.json +``` + +### Build + +Uses `@sveltejs/package` (`svelte-package`) — the standard Svelte library packaging tool. Ships `.svelte` source files (compiled by consumer's bundler) with `.d.ts` type definitions generated via `svelte2tsx`. + +### Testing + +Uses Vitest with two test projects: +- **`server`**: Node environment, `*.test.ts` files — SSR tests using `svelte/server` `render()` +- **`client`**: Browser environment (Playwright/Chromium), `*.svelte.test.ts` files — real DOM tests using `vitest-browser-svelte` + +### Usage + +**Manual state (stable API)**: +```svelte + + +``` + +**Experimental async** (requires `experimental.async` in Svelte config): +```svelte + + + + {#snippet pending()} +

Loading...

+ {/snippet} +
+``` + ## Package Exports ```typescript @@ -216,6 +269,9 @@ import { Comark } from 'comark/vue' // React components import { Comark } from 'comark/react' + +// Svelte components +import { Comark, ComarkAsync, ComarkRenderer } from '@comark/svelte' ``` ## Coding Principles @@ -250,7 +306,7 @@ const matches = line.match(/\*+/g) // Don't do this 1. Keep internal implementation in `packages/comark/src/internal/` (parsing in `internal/parse/`, stringification in `internal/stringify/`) 2. AST types and utilities in `packages/comark/src/ast/` -3. Framework-specific code in `packages/comark/src/vue/` and `packages/comark/src/react/` +3. Framework-specific code in `packages/comark/src/vue/`, `packages/comark/src/react/`, and `packages/comark-svelte/src/` 4. Export public APIs from entry points (`index.ts`, `ast/index.ts`) 5. Document exported functions with JSDoc including `@example` @@ -351,7 +407,7 @@ Example: } ``` -## Vue/React Components +## Vue/React/Svelte Components ### Comark Component (High-level) @@ -371,6 +427,31 @@ Accepts markdown string, handles parsing internally. {content} ``` +**Svelte** (manual state — stable API, uses `$state` + `$effect`): + +```svelte + + + +``` + +**Svelte** (experimental async — requires `experimental.async` in Svelte config): + +```svelte + + + + + {#snippet pending()} +

Loading...

+ {/snippet} +
+``` + ## Common Tasks ### Adding a new utility function @@ -390,7 +471,8 @@ Accepts markdown string, handles parsing internally. 1. Vue components in `packages/comark/src/vue/components/` 2. React components in `packages/comark/src/react/components/` -3. Both should have similar APIs for consistency +3. Svelte components in `packages/comark-svelte/src/` +4. All three should have similar APIs for consistency ### Adding a new package diff --git a/package.json b/package.json index 22c2a48..1c42336 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "verify": "pnpm run lint && pnpm run test && pnpm run typecheck", "release": "pnpm --filter 'comark' run release && pnpm --filter '@comark/cjk' run release && pnpm --filter '@comark/math' run release", "release:dry": "pnpm --filter 'comark' run release:dry && pnpm --filter '@comark/cjk' run release:dry && pnpm --filter '@comark/math' run release:dry", - "postinstall": "pnpm --filter 'comark' run build --stub && pnpm --filter '@comark/*' run build --stub" + "postinstall": "pnpm --filter 'comark' run build --stub && pnpm --filter '@comark/*' --filter '!@comark/svelte' run build --stub" }, "devDependencies": { "@nuxt/eslint-config": "^1.15.1", diff --git a/packages/comark-svelte/package.json b/packages/comark-svelte/package.json new file mode 100644 index 0000000..f09e12f --- /dev/null +++ b/packages/comark-svelte/package.json @@ -0,0 +1,55 @@ +{ + "name": "@comark/svelte", + "version": "1.0.0", + "description": "Svelte renderer for Comark (Components in Markdown)", + "svelte": "./dist/index.js", + "types": "./dist/index.d.ts", + "type": "module", + "license": "MIT", + "repository": "comarkdown/comark", + "keywords": [ + "markdown", + "mdc", + "comark", + "svelte", + "renderer", + "streaming" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js" + } + }, + "files": [ + "dist", + "!dist/**/*.test.*", + "!dist/**/*.spec.*" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "svelte-package --input src", + "build:watch": "svelte-package --input src --watch", + "test": "vitest run", + "check": "svelte-check --tsconfig ./tsconfig.json" + }, + "peerDependencies": { + "svelte": "^5.0.0" + }, + "dependencies": { + "comark": "workspace:*", + "scule": "^1.3.0" + }, + "devDependencies": { + "@sveltejs/package": "^2.5.7", + "@sveltejs/vite-plugin-svelte": "^6.2.4", + "@vitest/browser": "^4.0.18", + "@vitest/browser-playwright": "^4.0.18", + "svelte": "^5.53.7", + "svelte-check": "^4.2.1", + "vitest": "^4.0.18", + "vitest-browser-svelte": "^0.1.0" + } +} diff --git a/packages/comark-svelte/src/Comark.svelte b/packages/comark-svelte/src/Comark.svelte new file mode 100644 index 0000000..36b899c --- /dev/null +++ b/packages/comark-svelte/src/Comark.svelte @@ -0,0 +1,65 @@ + + + +{#if parsed} + +{/if} diff --git a/packages/comark-svelte/src/ComarkAsync.svelte b/packages/comark-svelte/src/ComarkAsync.svelte new file mode 100644 index 0000000..5991281 --- /dev/null +++ b/packages/comark-svelte/src/ComarkAsync.svelte @@ -0,0 +1,59 @@ + + + + diff --git a/packages/comark-svelte/src/ComarkNode.svelte b/packages/comark-svelte/src/ComarkNode.svelte new file mode 100644 index 0000000..e665a36 --- /dev/null +++ b/packages/comark-svelte/src/ComarkNode.svelte @@ -0,0 +1,110 @@ + + + +{#if isText} + {node}{#if caretClass !== null}{CARET_TEXT}{/if} +{:else if Component} + + {#each children as child, i} + + {/each} + +{:else if tag} + + {#each children as child, i} + + {/each} + +{/if} diff --git a/packages/comark-svelte/src/ComarkNode.svelte.test.ts b/packages/comark-svelte/src/ComarkNode.svelte.test.ts new file mode 100644 index 0000000..861563c --- /dev/null +++ b/packages/comark-svelte/src/ComarkNode.svelte.test.ts @@ -0,0 +1,167 @@ +/// +import { describe, expect, it } from 'vitest' +import { render } from 'vitest-browser-svelte' +import { parse } from 'comark' +import ComarkRenderer from './ComarkRenderer.svelte' +import ComarkNode from './ComarkNode.svelte' + +describe('ComarkNode', () => { + it('renders a text node', async () => { + const { container } = render(ComarkNode, { node: 'Hello world' }) + await expect.element(container).toHaveTextContent('Hello world') + }) + + it('renders a paragraph element with correct text', async () => { + const { container } = render(ComarkNode, { + node: ['p', {}, 'A paragraph'], + }) + const p = container.querySelector('p')! + expect(p).not.toBeNull() + await expect.element(p).toHaveTextContent('A paragraph') + }) + + it('renders nested elements with correct structure', async () => { + const { container } = render(ComarkNode, { + node: ['p', {}, 'Hello ', ['strong', {}, 'World']], + }) + const p = container.querySelector('p')! + expect(p).not.toBeNull() + await expect.element(p).toHaveTextContent('Hello World') + + const strong = p.querySelector('strong')! + expect(strong).not.toBeNull() + await expect.element(strong).toHaveTextContent('World') + }) + + it('maps className to class attribute', async () => { + const { container } = render(ComarkNode, { + node: ['div', { className: 'my-class' }, 'content'], + }) + const div = container.querySelector('div')! + expect(div).not.toBeNull() + await expect.element(div).toHaveClass('my-class') + await expect.element(div).toHaveTextContent('content') + }) + + it('renders HTML attributes correctly', async () => { + const { container } = render(ComarkNode, { + node: ['a', { href: '/about', target: '_blank' }, 'link'], + }) + const a = container.querySelector('a')! + expect(a).not.toBeNull() + await expect.element(a).toHaveAttribute('href', '/about') + await expect.element(a).toHaveAttribute('target', '_blank') + await expect.element(a).toHaveTextContent('link') + }) + + it('renders caret span with custom class', async () => { + const { container } = render(ComarkNode, { + node: 'text', + caretClass: 'test-caret', + }) + const caret = container.querySelector('span.test-caret')! + expect(caret).not.toBeNull() + await expect.element(caret).toHaveStyle({ display: 'inline-block' }) + }) + + it('does not render caret when caretClass is null', async () => { + const { container } = render(ComarkNode, { + node: 'text', + caretClass: null, + }) + expect(container.querySelector('span')).toBeNull() + await expect.element(container).toHaveTextContent('text') + }) + + it('threads caret to deepest last text node', async () => { + const { container } = render(ComarkNode, { + node: ['p', {}, 'first ', ['strong', {}, 'last']], + caretClass: 'caret', + }) + // Caret should be inside , not outside it + const strong = container.querySelector('strong')! + const caret = strong.querySelector('span.caret')! + expect(caret).not.toBeNull() + + // Only one caret in the entire tree + expect(container.querySelectorAll('span.caret').length).toBe(1) + }) +}) + +describe('ComarkRenderer', () => { + it('renders a heading with inline markup', async () => { + const tree = await parse('# Hello **World**') + const { container } = render(ComarkRenderer, { tree }) + + const wrapper = container.querySelector('div.comark-content')! + expect(wrapper).not.toBeNull() + + const h1 = wrapper.querySelector('h1')! + expect(h1).not.toBeNull() + await expect.element(h1).toHaveAttribute('id', 'hello-strong-world') + await expect.element(h1).toHaveTextContent('Hello World') + + const strong = h1.querySelector('strong')! + expect(strong).not.toBeNull() + await expect.element(strong).toHaveTextContent('World') + }) + + it('renders multiple block elements with correct content', async () => { + const tree = await parse('# Heading\n\nA paragraph\n\n- item 1\n- item 2') + const { container } = render(ComarkRenderer, { tree }) + + const h1 = container.querySelector('h1')! + expect(h1).not.toBeNull() + await expect.element(h1).toHaveTextContent('Heading') + + const p = container.querySelector('p')! + await expect.element(p).toHaveTextContent('A paragraph') + + const items = container.querySelectorAll('li') + expect(items.length).toBe(2) + await expect.element(items[0]).toHaveTextContent('item 1') + await expect.element(items[1]).toHaveTextContent('item 2') + }) + + it('renders empty tree as empty wrapper', async () => { + const tree = { nodes: [], frontmatter: {}, meta: {} } + const { container } = render(ComarkRenderer, { tree }) + const wrapper = container.querySelector('div.comark-content')! + expect(wrapper).not.toBeNull() + expect(wrapper.children.length).toBe(0) + }) + + it('applies custom class to wrapper', async () => { + const tree = await parse('hello') + const { container } = render(ComarkRenderer, { tree, class: 'prose' }) + const wrapper = container.querySelector('div.comark-content')! + expect(wrapper).not.toBeNull() + await expect.element(wrapper).toHaveClass('prose') + }) + + it('renders inline code', async () => { + const tree = await parse('use `const x = 1`') + const { container } = render(ComarkRenderer, { tree }) + const code = container.querySelector('code')! + expect(code).not.toBeNull() + await expect.element(code).toHaveTextContent('const x = 1') + }) + + it('renders links with href', async () => { + const tree = await parse('[click](https://example.com)') + const { container } = render(ComarkRenderer, { tree }) + const a = container.querySelector('a')! + expect(a).not.toBeNull() + await expect.element(a).toHaveAttribute('href', 'https://example.com') + await expect.element(a).toHaveTextContent('click') + }) + + it('renders images with src and alt', async () => { + const tree = await parse('![alt](image.png)') + const { container } = render(ComarkRenderer, { tree }) + const img = container.querySelector('img')! + expect(img).not.toBeNull() + await expect.element(img).toHaveAttribute('src', 'image.png') + await expect.element(img).toHaveAttribute('alt', 'alt') + }) +}) diff --git a/packages/comark-svelte/src/ComarkNode.test.ts b/packages/comark-svelte/src/ComarkNode.test.ts new file mode 100644 index 0000000..634b578 --- /dev/null +++ b/packages/comark-svelte/src/ComarkNode.test.ts @@ -0,0 +1,208 @@ +import { describe, expect, it } from 'vitest' +import { render } from 'svelte/server' +import { parse } from 'comark' +import ComarkRenderer from './ComarkRenderer.svelte' +import ComarkNode from './ComarkNode.svelte' + +/** Strip Svelte SSR hydration comments from rendered HTML */ +function html(body: string): string { + return body.replace(//g, '').replace(//g, '') +} + +const CARET_STYLE = 'background-color: currentColor; display: inline-block; margin-left: 0.25rem; margin-right: 0.25rem; animation: pulse 0.75s cubic-bezier(0.4,0,0.6,1) infinite;' + +describe('ComarkNode', () => { + it('renders a text node', () => { + const { body } = render(ComarkNode, { props: { node: 'Hello world' } }) + expect(html(body)).toBe('Hello world') + }) + + it('renders a native HTML element', () => { + const { body } = render(ComarkNode, { + props: { node: ['p', {}, 'A paragraph'] }, + }) + expect(html(body)).toBe('

A paragraph

') + }) + + it('renders nested elements', () => { + const { body } = render(ComarkNode, { + props: { node: ['p', {}, 'Hello ', ['strong', {}, 'World']] }, + }) + expect(html(body)).toBe('

Hello World

') + }) + + it('renders multiple children', () => { + const { body } = render(ComarkNode, { + props: { node: ['p', {}, 'one ', ['em', {}, 'two'], ' three'] }, + }) + expect(html(body)).toBe('

one two three

') + }) + + it('maps className to class', () => { + const { body } = render(ComarkNode, { + props: { node: ['div', { className: 'my-class' }, 'content'] }, + }) + expect(html(body)).toBe('
content
') + }) + + it('passes through HTML attributes', () => { + const { body } = render(ComarkNode, { + props: { node: ['a', { href: '/about', target: '_blank' }, 'link'] }, + }) + expect(html(body)).toBe('link') + }) + + it('parses colon-prefixed props as values', () => { + const { body } = render(ComarkNode, { + props: { node: ['div', { ':hidden': 'true' }, 'content'] }, + }) + expect(html(body)).toBe('') + }) + + it('parses colon-prefixed JSON values', () => { + const { body } = render(ComarkNode, { + props: { node: ['div', { ':data-count': '42' }, 'content'] }, + }) + expect(html(body)).toBe('
content
') + }) + + it('skips comment nodes (null tag)', () => { + const { body } = render(ComarkNode, { + props: { node: [null, {}, 'a comment'] }, + }) + expect(html(body)).toBe('') + }) + + it('renders self-closing elements', () => { + const { body } = render(ComarkNode, { + props: { node: ['hr', {}] }, + }) + expect(html(body)).toBe('
') + }) + + it('renders an element with no children', () => { + const { body } = render(ComarkNode, { + props: { node: ['div', { class: 'empty' }] }, + }) + expect(html(body)).toBe('
') + }) + + it('does not render caret when caretClass is null', () => { + const { body } = render(ComarkNode, { + props: { node: 'some text', caretClass: null }, + }) + expect(html(body)).toBe('some text') + }) + + it('renders caret with custom class on text node', () => { + const { body } = render(ComarkNode, { + props: { node: 'text', caretClass: 'my-caret' }, + }) + expect(html(body)).toBe( + `text\u2009`, + ) + }) + + it('renders caret without class when caretClass is empty string', () => { + const { body } = render(ComarkNode, { + props: { node: 'text', caretClass: '' }, + }) + expect(html(body)).toBe( + `text\u2009`, + ) + }) + + it('threads caret to deepest last text node', () => { + const { body } = render(ComarkNode, { + props: { + node: ['p', {}, 'first ', ['strong', {}, 'last']], + caretClass: '', + }, + }) + expect(html(body)).toBe( + `

first last\u2009

`, + ) + }) + + it('threads caret through deeply nested structure', () => { + const { body } = render(ComarkNode, { + props: { + node: ['div', {}, ['p', {}, ['em', {}, ['strong', {}, 'deep']]]], + caretClass: 'c', + }, + }) + expect(html(body)).toBe( + `

deep\u2009

`, + ) + }) + + it('does not attach caret to non-last children', () => { + const { body } = render(ComarkNode, { + props: { + node: ['p', {}, ['strong', {}, 'first'], ' last'], + caretClass: '', + }, + }) + // Caret should be after "last" (the last child), not after "first" + expect(html(body)).toBe( + `

first last\u2009

`, + ) + }) +}) + +describe('ComarkRenderer', () => { + it('renders a parsed heading with inline markup', async () => { + const tree = await parse('# Hello **World**') + const { body } = render(ComarkRenderer, { props: { tree } }) + const output = html(body) + expect(output).toContain('

') + expect(output).toContain('Hello World') + expect(output).toContain('

') + expect(output).toMatch(/^
.*<\/div>$/) + }) + + it('renders multiple block-level elements', async () => { + const tree = await parse('# Heading\n\nA paragraph\n\n- item 1\n- item 2') + const { body } = render(ComarkRenderer, { props: { tree } }) + const output = html(body) + expect(output).toContain('A paragraph

') + expect(output).toContain('
    ') + expect(output).toContain('
  • item 1
  • ') + expect(output).toContain('
  • item 2
  • ') + }) + + it('renders an empty tree as an empty wrapper', () => { + const tree = { nodes: [], frontmatter: {}, meta: {} } + const { body } = render(ComarkRenderer, { props: { tree } }) + expect(html(body)).toBe('
    ') + }) + + it('applies a custom class to the wrapper', async () => { + const tree = await parse('hello') + const { body } = render(ComarkRenderer, { + props: { tree, class: 'prose' }, + }) + const output = html(body) + expect(output).toMatch(/^
    /) + expect(output).toContain('

    hello

    ') + }) + + it('renders inline code', async () => { + const tree = await parse('use `const x = 1`') + const { body } = render(ComarkRenderer, { props: { tree } }) + expect(html(body)).toContain('const x = 1') + }) + + it('renders links with attributes', async () => { + const tree = await parse('[click me](https://example.com)') + const { body } = render(ComarkRenderer, { props: { tree } }) + expect(html(body)).toContain('click me') + }) + + it('renders images', async () => { + const tree = await parse('![alt text](image.png)') + const { body } = render(ComarkRenderer, { props: { tree } }) + expect(html(body)).toContain('alt text') + }) +}) diff --git a/packages/comark-svelte/src/ComarkRenderer.svelte b/packages/comark-svelte/src/ComarkRenderer.svelte new file mode 100644 index 0000000..7760790 --- /dev/null +++ b/packages/comark-svelte/src/ComarkRenderer.svelte @@ -0,0 +1,54 @@ + + + +
    + {#each tree.nodes as node, i (i)} + + {/each} +
    diff --git a/packages/comark-svelte/src/index.ts b/packages/comark-svelte/src/index.ts new file mode 100644 index 0000000..4f6c252 --- /dev/null +++ b/packages/comark-svelte/src/index.ts @@ -0,0 +1,5 @@ +export { default as Comark } from './Comark.svelte' +export { default as ComarkAsync } from './ComarkAsync.svelte' +export { default as ComarkRenderer } from './ComarkRenderer.svelte' +export { default as ComarkNode } from './ComarkNode.svelte' +export type { ComarkProps, ComarkRendererProps, ComarkNodeProps } from './types.js' diff --git a/packages/comark-svelte/src/types.ts b/packages/comark-svelte/src/types.ts new file mode 100644 index 0000000..9f1ea47 --- /dev/null +++ b/packages/comark-svelte/src/types.ts @@ -0,0 +1,30 @@ +import type { ComarkNode, ComarkTree } from 'comark/ast' +import type { ComarkPlugin, ComponentManifest, ParseOptions } from 'comark' + +export interface ComarkNodeProps { + node: ComarkNode + components?: Record + componentsManifest?: ComponentManifest + /** CSS class for the streaming caret, or null if no caret. Threaded recursively to the last child. */ + caretClass?: string | null +} + +export interface ComarkRendererProps { + tree: ComarkTree + components?: Record + componentsManifest?: ComponentManifest + streaming?: boolean + caret?: boolean | { class: string } + class?: string +} + +export interface ComarkProps { + markdown?: string + options?: Exclude + plugins?: ComarkPlugin[] + components?: Record + componentsManifest?: ComponentManifest + streaming?: boolean + caret?: boolean | { class: string } + class?: string +} diff --git a/packages/comark-svelte/svelte.config.js b/packages/comark-svelte/svelte.config.js new file mode 100644 index 0000000..6505d99 --- /dev/null +++ b/packages/comark-svelte/svelte.config.js @@ -0,0 +1,10 @@ +/** @type {import('svelte/compiler').CompileOptions} */ +const config = { + compilerOptions: { + experimental: { + async: true, + }, + }, +} + +export default config diff --git a/packages/comark-svelte/tsconfig.json b/packages/comark-svelte/tsconfig.json new file mode 100644 index 0000000..c3ed48d --- /dev/null +++ b/packages/comark-svelte/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es2024", + "lib": ["esnext", "DOM", "DOM.Iterable"], + "module": "esnext", + "moduleResolution": "bundler", + "strict": true, + "strictNullChecks": true, + "esModuleInterop": true, + "skipDefaultLibCheck": true, + "skipLibCheck": true, + "noEmit": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/comark-svelte/vitest.config.ts b/packages/comark-svelte/vitest.config.ts new file mode 100644 index 0000000..5776d6d --- /dev/null +++ b/packages/comark-svelte/vitest.config.ts @@ -0,0 +1,32 @@ +import { defineConfig } from 'vitest/config' +import { svelte } from '@sveltejs/vite-plugin-svelte' +import { playwright } from '@vitest/browser-playwright' + +export default defineConfig({ + plugins: [svelte()], + test: { + projects: [ + { + extends: './vitest.config.ts', + test: { + name: 'client', + browser: { + enabled: true, + provider: playwright(), + instances: [{ browser: 'chromium' }], + }, + include: ['src/**/*.svelte.{test,spec}.{js,ts}'], + }, + }, + { + extends: './vitest.config.ts', + test: { + name: 'server', + environment: 'node', + include: ['src/**/*.{test,spec}.{js,ts}'], + exclude: ['src/**/*.svelte.{test,spec}.{js,ts}'], + }, + }, + ], + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3d765f7..a9a75b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,16 +64,16 @@ importers: version: link:../packages/comark-mermaid '@vercel/analytics': specifier: ^1.6.1 - version: 1.6.1(react@19.2.4)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) + version: 1.6.1(react@19.2.4)(svelte@5.53.7)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) '@vercel/speed-insights': specifier: ^1.3.1 - version: 1.3.1(react@19.2.4)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) + version: 1.3.1(react@19.2.4)(svelte@5.53.7)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) comark: specifier: workspace:* version: link:../packages/comark docus: specifier: latest - version: 5.4.4(acdc5dbaf007122855baa5a73f3365ea) + version: 5.7.0(a0481367015df2a1a40fc0fc9364cdd2) markdown-it: specifier: ^14.1.1 version: 14.1.1 @@ -89,7 +89,7 @@ importers: devDependencies: '@tailwindcss/typography': specifier: ^0.5.19 - version: 0.5.19(tailwindcss@4.1.18) + version: 0.5.19(tailwindcss@4.2.0) examples/1.frameworks/astro: dependencies: @@ -144,7 +144,7 @@ importers: dependencies: '@nuxt/ui': specifier: ^4.4.0 - version: 4.4.0(@nuxt/content@3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1))(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(focus-trap@7.8.0)(ioredis@5.9.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6) + version: 4.4.0(@nuxt/content@3.12.0(better-sqlite3@12.6.2)(magicast@0.5.1))(@tiptap/extensions@3.20.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(focus-trap@7.8.0)(ioredis@5.9.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6) comark: specifier: workspace:* version: link:../../../packages/comark @@ -410,7 +410,7 @@ importers: version: 4.21.0 vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/comark-cjk: dependencies: @@ -426,7 +426,7 @@ importers: version: 0.4.31(chokidar@5.0.0)(dotenv@17.2.3)(giget@3.1.2)(jiti@2.6.1)(magicast@0.5.1)(picomatch@4.0.3)(rollup@4.57.1)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)) vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/comark-math: dependencies: @@ -448,7 +448,7 @@ importers: version: 0.4.31(chokidar@5.0.0)(dotenv@17.2.3)(giget@3.1.2)(jiti@2.6.1)(magicast@0.5.1)(picomatch@4.0.3)(rollup@4.57.1)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)) vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/comark-mermaid: dependencies: @@ -470,7 +470,41 @@ importers: version: 0.4.31(chokidar@5.0.0)(dotenv@17.2.3)(giget@3.1.2)(jiti@2.6.1)(magicast@0.5.1)(picomatch@4.0.3)(rollup@4.57.1)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)) vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + + packages/comark-svelte: + dependencies: + comark: + specifier: workspace:* + version: link:../comark + scule: + specifier: ^1.3.0 + version: 1.3.0 + devDependencies: + '@sveltejs/package': + specifier: ^2.5.7 + version: 2.5.7(svelte@5.53.7)(typescript@5.9.3) + '@sveltejs/vite-plugin-svelte': + specifier: ^6.2.4 + version: 6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/browser': + specifier: ^4.0.18 + version: 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + '@vitest/browser-playwright': + specifier: ^4.0.18 + version: 4.0.18(playwright@1.58.2)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + svelte: + specifier: ^5.53.7 + version: 5.53.7 + svelte-check: + specifier: ^4.2.1 + version: 4.4.4(picomatch@4.0.3)(svelte@5.53.7)(typescript@5.9.3) + vitest: + specifier: ^4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest-browser-svelte: + specifier: ^0.1.0 + version: 0.1.0(@vitest/browser@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(svelte@5.53.7)(vitest@4.0.18) packages: @@ -480,12 +514,36 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/gateway@3.0.46': + resolution: {integrity: sha512-zH1UbNRjG5woOXXFOrVCZraqZuFTtmPvLardMGcgLkzpxKV0U3tAGoyWKSZ862H+eBJfI/Hf2yj/zzGJcCkycg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/gateway@3.0.63': + resolution: {integrity: sha512-0jwdkN3elC4Q9aT2ALxjXtGGVoye15zYgof6GfvuH1a9QKx9Rj4Wi2vy6SyyLvtSA/lB786dTZgC+cGwe6vzmA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/mcp@1.0.23': + resolution: {integrity: sha512-Lx2tO7yJJkmQD5S/LsqJFUCZmyoWml4jjTwvaxArTcsPrh7Pfz+JLtpQWsvlquh3B70CmXT9rbobG5oDxJ4WDQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider-utils@4.0.15': resolution: {integrity: sha512-8XiKWbemmCbvNN0CLR9u3PQiet4gtEVIrX4zzLxnCj06AwsEDJwJVBbKrEI4t6qE8XRSIvU2irka0dcpziKW6w==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider-utils@4.0.17': + resolution: {integrity: sha512-oyCeFINTYK0B8ZGUBiQc05G5vytPlKSmTTtm19xfJuUgoi8zkvvRcoPQci4mSnyfpPn2XSFFDfsALG8uGcapfg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider@3.0.8': resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==} engines: {node: '>=18'} @@ -496,6 +554,12 @@ packages: peerDependencies: vue: ^3.3.4 + '@ai-sdk/vue@3.0.86': + resolution: {integrity: sha512-a1CTfrlyrdogMjcUSQcnwofoajKUXPCx+JpFsmdBeVvpR8KKUj/dz+0TpNSYbD4/l+dJC2ooTDlQqmNim+7TmQ==} + engines: {node: '>=18'} + peerDependencies: + vue: ^3.3.4 + '@algolia/abtesting@1.15.1': resolution: {integrity: sha512-2yuIC48rUuHGhU1U5qJ9kJHaxYpJ0jpDHJVI5ekOxSMYXlH4+HP+pA31G820lsAznfmu2nzDV7n5RO44zIY1zw==} engines: {node: '>= 14.0.0'} @@ -743,10 +807,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} - engines: {node: '>=6.9.0'} - '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -786,15 +846,9 @@ packages: resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==} engines: {node: '>=18'} - '@clack/core@0.5.0': - resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} - '@clack/core@1.0.0': resolution: {integrity: sha512-Orf9Ltr5NeiEuVJS8Rk2XTw3IxNC2Bic3ash7GgYeA8LJ/zmSNpSQ/m5UAhe03lA6KFgklzZ5KTHs4OAMA/SAQ==} - '@clack/prompts@0.11.0': - resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} - '@clack/prompts@1.0.0': resolution: {integrity: sha512-rWPXg9UaCFqErJVQ+MecOaWsozjaxol4yjnmYcGNipAWzdaWa2x+VJmKfGq7L0APwBohQOYdHC+9RO4qRXej+A==} @@ -1407,17 +1461,17 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iconify-json/lucide@1.2.88': - resolution: {integrity: sha512-QBJq+VSj3yHXoMgf+1I4guUhXA+tpxzAt46LJdTSFN6UKy254GstTh+P/a6GD4Bvyi1fCAfi5hS/yCmu0w3mNw==} - '@iconify-json/lucide@1.2.91': resolution: {integrity: sha512-8fuRiK+HiNRgCKMspn9UPsDpBw0TqVTIY0LOiDbMnFxOBwAulMXIl+SVOtp4LzxNvCXB5ofYffiiFIFDitqo7w==} '@iconify-json/simple-icons@1.2.69': resolution: {integrity: sha512-T/rhy5n7pzE0ZOxQVlF68SNPCYYjRBpddjgjrJO5WWVRG8es5BQmvxIE9kKF+t2hhPGvuGQFpXmUyqbOtnxirQ==} - '@iconify-json/vscode-icons@1.2.40': - resolution: {integrity: sha512-Q7JIWAxENwmcRg4EGRY+u16gBwrAj6mWeuSmuyuPvNvoTJHh8Ss8qoeDhrFYNgtWqNkzH5hSf4b2T9XLK5MsrA==} + '@iconify-json/simple-icons@1.2.72': + resolution: {integrity: sha512-wkcixntHvaCoqPqerGrNFcHQ3Yx1ux4ZkhscCDK0DEHpP62XCH+cxq1HTsRjbUiQl/M9K8bj03HF6Wgn5iE2rQ==} + + '@iconify-json/vscode-icons@1.2.44': + resolution: {integrity: sha512-3fLOIRRtsm6HD6UPJ3Y6/UztqxNTYgKA8VxrWeg1C+042MD3A/06CkWSsii1pz/f1zl0+YxvCHIVM3tXUlho+A==} '@iconify/collections@1.0.646': resolution: {integrity: sha512-zA5Gr1MJm1SI0TjOUl7wu4kvBWXQ6Uh8ALEtqQ5ucXyUxP2M8m2bk2hfVtGykSdMlDB+Xs2AHbJ9pQqayz9WGQ==} @@ -1723,6 +1777,9 @@ packages: '@internationalized/date@3.10.1': resolution: {integrity: sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==} + '@internationalized/date@3.11.0': + resolution: {integrity: sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q==} + '@internationalized/number@3.6.5': resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} @@ -1796,14 +1853,6 @@ packages: '@ioredis/commands@1.5.0': resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==} - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1854,8 +1903,8 @@ packages: peerDependencies: rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - '@modelcontextprotocol/sdk@1.25.3': - resolution: {integrity: sha512-vsAMBMERybvYgKbg/l4L1rhS7VXV1c0CtyJg72vwxONVX0l4ZfKVAnZEWTQixJGTzKnELjQ59e4NbdFDALRiAQ==} + '@modelcontextprotocol/sdk@1.27.1': + resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -1895,8 +1944,8 @@ packages: '@nuxt/schema': optional: true - '@nuxt/content@3.11.0': - resolution: {integrity: sha512-sC2AyuQAZpw+iSxwekh75AsLc7Ja9aEY+l4r1DxGBEMkq+YGj8+6AqQSRqFjOH0Hu9yDUhRgpIUnlGVq43WqOA==} + '@nuxt/content@3.12.0': + resolution: {integrity: sha512-Uh1HuAOAFZVdnBSLarqJAsvx6OduD8bOGh35llnE0iM/JHZUJc4N4POB5yVADAx7lXzlFyoNlTdmCAglJrbE9Q==} engines: {node: '>= 20.19.0'} peerDependencies: '@electric-sql/pglite': '*' @@ -1977,10 +2026,6 @@ packages: resolution: {integrity: sha512-KMTLK/dsGaQioZzkYUvgfN9le4grNW54aNcA1jqzgVZLcFVy4jJfrJr5WZio9NT2EMfajdoZ+V28aD7BRr4Zfw==} engines: {node: '>=18.12.0'} - '@nuxt/kit@4.3.0': - resolution: {integrity: sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==} - engines: {node: '>=18.12.0'} - '@nuxt/kit@4.3.1': resolution: {integrity: sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA==} engines: {node: '>=18.12.0'} @@ -2035,6 +2080,39 @@ packages: zod: optional: true + '@nuxt/ui@4.5.1': + resolution: {integrity: sha512-5hWgreVPX6EsNCZNoOd2o7m9fTA3fwUMDw+zeYTSAjhSKtAuvkZrBtmez4MUeTv+LO1gknesgvErdIvlUnElTg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@inertiajs/vue3': ^2.0.7 + '@nuxt/content': ^3.0.0 + joi: ^18.0.0 + superstruct: ^2.0.0 + tailwindcss: ^4.0.0 + typescript: ^5.9.3 + valibot: ^1.0.0 + vue-router: ^4.5.0 + yup: ^1.7.0 + zod: ^3.24.0 || ^4.0.0 + peerDependenciesMeta: + '@inertiajs/vue3': + optional: true + '@nuxt/content': + optional: true + joi: + optional: true + superstruct: + optional: true + valibot: + optional: true + vue-router: + optional: true + yup: + optional: true + zod: + optional: true + '@nuxt/vite-builder@4.3.1': resolution: {integrity: sha512-LndnxPJzDUDbWAB8q5gZZN1mSOLHEyMOoj4T3pTdPydGf31QZdMR0V1fQ1fdRgtgNtWB3WLP0d1ZfaAOITsUpw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2049,22 +2127,19 @@ packages: '@nuxtjs/color-mode@3.5.2': resolution: {integrity: sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA==} - '@nuxtjs/i18n@10.2.1': - resolution: {integrity: sha512-/CHAIpYbFgobxeMsnKcD8xBUHxBpqipRMjaI3ol9MVZKscJM+IetYdNL9lGNFdEtlxzkV8COxnoa60rE4sPjuQ==} + '@nuxtjs/i18n@10.2.3': + resolution: {integrity: sha512-nRAQJbWjbiBvW6XRsG3Q6olYw2EKz7V1J6cDCHLCPbF1EyNhrAH/9aCNQaR5PYcoXPeRLpF86DIPBEnamghyHw==} engines: {node: '>=20.11.1'} - '@nuxtjs/mcp-toolkit@0.6.2': - resolution: {integrity: sha512-diULFXRAuG6TyEre9vFpG1b+9PJL2s5rSxXX31bSKl480UUxmdlgTs7j+FStKh+pFwqoJ7tgKiL66xBXEvVmPQ==} + '@nuxtjs/mcp-toolkit@0.7.0': + resolution: {integrity: sha512-aOgVFqvH9+Jzk2EAn+kGfsOAi4sxwEuxyO9CvhtcTBPPZq8fuxcIk7gBH+/UCL7/5oK13z9kUMWE9eOK5g7JnA==} peerDependencies: - agents: '>=0.3.3' + agents: '>=0.4.1' zod: ^4.1.13 peerDependenciesMeta: agents: optional: true - '@nuxtjs/mdc@0.20.0': - resolution: {integrity: sha512-CV1FuCZppBpNjtWT+OaV+t7qbm/dD+2bbf7Or0h1gxperlf1bB3VZnDoBkOTRjgPWyYvzzRS7FUOQJLQG28MEA==} - '@nuxtjs/mdc@0.20.1': resolution: {integrity: sha512-fGmtLDQAmmDHF5Z37Apfc3k806rb2XWDOQFhb5xlDSL7+HiiUjyFy3ctx3qWdlC08dRzfAetmsGOYbfDqYsB/w==} @@ -3246,6 +3321,10 @@ packages: '@shikijs/core@3.22.0': resolution: {integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==} + '@shikijs/core@4.0.1': + resolution: {integrity: sha512-vWvqi9JNgz1dRL9Nvog5wtx7RuNkf7MEPl2mU/cyUUxJeH1CAr3t+81h8zO8zs7DK6cKLMoU9TvukWIDjP4Lzg==} + engines: {node: '>=20'} + '@shikijs/engine-javascript@1.29.2': resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} @@ -3255,6 +3334,10 @@ packages: '@shikijs/engine-javascript@3.22.0': resolution: {integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==} + '@shikijs/engine-javascript@4.0.1': + resolution: {integrity: sha512-DJK9NiwtGYqMuKCRO4Ip0FKNDQpmaiS+K5bFjJ7DWFn4zHueDWgaUG8kAofkrnXF6zPPYYQY7J5FYVW9MbZyBg==} + engines: {node: '>=20'} + '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} @@ -3264,6 +3347,10 @@ packages: '@shikijs/engine-oniguruma@3.22.0': resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==} + '@shikijs/engine-oniguruma@4.0.1': + resolution: {integrity: sha512-oCWdCTDch3J8Kc0OZJ98KuUPC02O1VqIE3W/e2uvrHqTxYRR21RGEJMtchrgrxhsoJJCzmIciKsqG+q/yD+Cxg==} + engines: {node: '>=20'} + '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} @@ -3273,10 +3360,21 @@ packages: '@shikijs/langs@3.22.0': resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==} + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/langs@4.0.1': + resolution: {integrity: sha512-v/mluaybWdnGJR4GqAR6zh8qAZohW9k+cGYT28Y7M8+jLbC0l4yG085O1A+WkseHTn+awd+P3UBymb2+MXFc8w==} + engines: {node: '>=20'} + '@shikijs/primitive@4.0.0': resolution: {integrity: sha512-6K2zD7JTgsyFc2vM1rqy8eRGC8D5Hius3qzVONjq2lHMrqfTSn1HcGeJZiFPYSV9m3DQuBHncBbA5xe0hKSOkQ==} engines: {node: '>=20'} + '@shikijs/primitive@4.0.1': + resolution: {integrity: sha512-ns0hHZc5eWZuvuIEJz2pTx3Qecz0aRVYumVQJ8JgWY2tq/dH8WxdcVM49Fc2NsHEILNIT6vfdW9MF26RANWiTA==} + engines: {node: '>=20'} + '@shikijs/themes@1.29.2': resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} @@ -3286,6 +3384,10 @@ packages: '@shikijs/themes@3.22.0': resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==} + '@shikijs/themes@4.0.1': + resolution: {integrity: sha512-FW41C/D6j/yKQkzVdjrRPiJCtgeDaYRJFEyCKFCINuRJRj9WcmubhP4KQHPZ4+9eT87jruSrYPyoblNRyDFzvA==} + engines: {node: '>=20'} + '@shikijs/transformers@2.5.0': resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} @@ -3301,10 +3403,17 @@ packages: '@shikijs/types@3.22.0': resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==} + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + '@shikijs/types@4.0.0': resolution: {integrity: sha512-LCnfBTtQKNtJyc1qMShZr2dJt1uxNI6pI0/YTc2DSNET91aUvnMGHUHsucVCC5AJVcv5XyBqk2NgYRwd20EjbA==} engines: {node: '>=20'} + '@shikijs/types@4.0.1': + resolution: {integrity: sha512-EaygPEn57+jJ76mw+nTLvIpJMAcMPokFbrF8lufsZP7Ukk+ToJYEcswN1G0e49nUZAq7aCQtoeW219A8HK1ZOw==} + engines: {node: '>=20'} + '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3356,6 +3465,33 @@ packages: peerDependencies: eslint: '>=9.0.0' + '@sveltejs/acorn-typescript@1.0.9': + resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/package@2.5.7': + resolution: {integrity: sha512-qqD9xa9H7TDiGFrF6rz7AirOR8k15qDK/9i4MIE8te4vWsv5GEogPks61rrZcLy+yWph+aI6pIj2MdoK3YI8AQ==} + engines: {node: ^16.14 || >=18} + hasBin: true + peerDependencies: + svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + + '@sveltejs/vite-plugin-svelte-inspector@5.0.2': + resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + + '@sveltejs/vite-plugin-svelte@6.2.4': + resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + '@swc/helpers@0.5.18': resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} @@ -3365,6 +3501,9 @@ packages: '@tailwindcss/node@4.2.0': resolution: {integrity: sha512-Yv+fn/o2OmL5fh/Ir62VXItdShnUxfpkMA4Y7jdeC8O81WPB8Kf6TT6GSHvnqgSwDzlB5iT7kDpeXxLsUS0T6Q==} + '@tailwindcss/node@4.2.1': + resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} + '@tailwindcss/oxide-android-arm64@4.1.18': resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} engines: {node: '>= 10'} @@ -3377,6 +3516,12 @@ packages: cpu: [arm64] os: [android] + '@tailwindcss/oxide-android-arm64@4.2.1': + resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + '@tailwindcss/oxide-darwin-arm64@4.1.18': resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} engines: {node: '>= 10'} @@ -3389,6 +3534,12 @@ packages: cpu: [arm64] os: [darwin] + '@tailwindcss/oxide-darwin-arm64@4.2.1': + resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.1.18': resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} engines: {node: '>= 10'} @@ -3401,6 +3552,12 @@ packages: cpu: [x64] os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.2.1': + resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + '@tailwindcss/oxide-freebsd-x64@4.1.18': resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} engines: {node: '>= 10'} @@ -3413,6 +3570,12 @@ packages: cpu: [x64] os: [freebsd] + '@tailwindcss/oxide-freebsd-x64@4.2.1': + resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} engines: {node: '>= 10'} @@ -3425,6 +3588,12 @@ packages: cpu: [arm] os: [linux] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': + resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} engines: {node: '>= 10'} @@ -3439,6 +3608,13 @@ packages: os: [linux] libc: [glibc] + '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': + resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} engines: {node: '>= 10'} @@ -3453,6 +3629,13 @@ packages: os: [linux] libc: [musl] + '@tailwindcss/oxide-linux-arm64-musl@4.2.1': + resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} engines: {node: '>= 10'} @@ -3467,6 +3650,13 @@ packages: os: [linux] libc: [glibc] + '@tailwindcss/oxide-linux-x64-gnu@4.2.1': + resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + '@tailwindcss/oxide-linux-x64-musl@4.1.18': resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} engines: {node: '>= 10'} @@ -3481,6 +3671,13 @@ packages: os: [linux] libc: [musl] + '@tailwindcss/oxide-linux-x64-musl@4.2.1': + resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + '@tailwindcss/oxide-wasm32-wasi@4.1.18': resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} engines: {node: '>=14.0.0'} @@ -3505,6 +3702,18 @@ packages: - '@emnapi/wasi-threads' - tslib + '@tailwindcss/oxide-wasm32-wasi@4.2.1': + resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} engines: {node: '>= 10'} @@ -3517,6 +3726,12 @@ packages: cpu: [arm64] os: [win32] + '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': + resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} engines: {node: '>= 10'} @@ -3529,6 +3744,12 @@ packages: cpu: [x64] os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.2.1': + resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + '@tailwindcss/oxide@4.1.18': resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} engines: {node: '>= 10'} @@ -3537,9 +3758,16 @@ packages: resolution: {integrity: sha512-AZqQzADaj742oqn2xjl5JbIOzZB/DGCYF/7bpvhA8KvjUj9HJkag6bBuwZvH1ps6dfgxNHyuJVlzSr2VpMgdTQ==} engines: {node: '>= 20'} + '@tailwindcss/oxide@4.2.1': + resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==} + engines: {node: '>= 20'} + '@tailwindcss/postcss@4.1.18': resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} + '@tailwindcss/postcss@4.2.1': + resolution: {integrity: sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==} + '@tailwindcss/typography@0.5.19': resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} peerDependencies: @@ -3550,6 +3778,11 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 + '@tailwindcss/vite@4.2.1': + resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + '@tanstack/table-core@8.21.3': resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} engines: {node: '>=12'} @@ -3557,6 +3790,9 @@ packages: '@tanstack/virtual-core@3.13.18': resolution: {integrity: sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg==} + '@tanstack/virtual-core@3.13.19': + resolution: {integrity: sha512-/BMP7kNhzKOd7wnDeB8NrIRNLwkf5AhCYCvtfZV2GXWbBieFm/el0n6LOAXlTi6ZwHICSNnQcIxRCWHrLzDY+g==} + '@tanstack/vue-table@8.21.3': resolution: {integrity: sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw==} engines: {node: '>=12'} @@ -3568,43 +3804,85 @@ packages: peerDependencies: vue: ^2.7.0 || ^3.0.0 + '@tanstack/vue-virtual@3.13.19': + resolution: {integrity: sha512-07Fp1TYuIziB4zIDA/moeDKHODePy3K1fN4c4VIAGnkxo1+uOvBJP7m54CoxKiQX6Q9a1dZnznrwOg9C86yvvA==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + '@tiptap/core@3.18.0': resolution: {integrity: sha512-Gczd4GbK1DNgy/QUPElMVozoa0GW9mW8E31VIi7Q4a9PHHz8PcrxPmuWwtJ2q0PF8MWpOSLuBXoQTWaXZRPRnQ==} peerDependencies: '@tiptap/pm': ^3.18.0 + '@tiptap/core@3.20.0': + resolution: {integrity: sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ==} + peerDependencies: + '@tiptap/pm': ^3.20.0 + '@tiptap/extension-blockquote@3.18.0': resolution: {integrity: sha512-1HjEoM5vZDfFnq2OodNpW13s56a9pbl7jolUv1V9FrE3X5s7n0HCfDzIVpT7z1HgTdPtlN5oSt5uVyBwuwSUfA==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-blockquote@3.20.0': + resolution: {integrity: sha512-LQzn6aGtL4WXz2+rYshl/7/VnP2qJTpD7fWL96GXAzhqviPEY1bJES7poqJb3MU/gzl8VJUVzVzU1VoVfUKlbA==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-bold@3.18.0': resolution: {integrity: sha512-xUgOvHCdGXh9Lfxd7DtgsSr0T/egIwBllWHIBWDjQEQQ0b+ICn+0+i703btHMB4hjdduZtgVDrhK8jAW3U6swA==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-bold@3.20.0': + resolution: {integrity: sha512-sQklEWiyf58yDjiHtm5vmkVjfIc/cBuSusmCsQ0q9vGYnEF1iOHKhGpvnCeEXNeqF3fiJQRlquzt/6ymle3Iwg==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-bubble-menu@3.18.0': resolution: {integrity: sha512-9kYG1fVYQcA3Kp5Bq96lrKCp9oLpQqceDsK688r7iT1yymQlBPMunaqaqb5ZLQGhnNYbhfG+8xcQsvEKjklErA==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/extension-bubble-menu@3.20.0': + resolution: {integrity: sha512-MDosUfs8Tj+nwg8RC+wTMWGkLJORXmbR6YZgbiX4hrc7G90Gopdd6kj6ht5/T8t7dLLaX7N0+DEHdUEPGED7dw==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/extension-bullet-list@3.18.0': resolution: {integrity: sha512-8sEpY0nxAGGFDYlF+WVFPKX00X2dAAjmoi0+2eWvK990PdQqwXrQsRs7pkUbpE2mDtATV8+GlDXk9KDkK/ZXhA==} peerDependencies: '@tiptap/extension-list': ^3.18.0 + '@tiptap/extension-bullet-list@3.20.0': + resolution: {integrity: sha512-OcKMeopBbqWzhSi6o8nNz0aayogg1sfOAhto3NxJu3Ya32dwBFqmHXSYM6uW4jOphNvVPyjiq9aNRh3qTdd1dw==} + peerDependencies: + '@tiptap/extension-list': ^3.20.0 + '@tiptap/extension-code-block@3.18.0': resolution: {integrity: sha512-fCx1oT95ikGfoizw+XCjeglQxlLK4lWgUcB4Dcn5TdaCoFBQMEaZs7Q0jVajxxxULnyArkg60uarc1ac/IF2Hw==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/extension-code-block@3.20.0': + resolution: {integrity: sha512-lBbmNek14aCjrHcBcq3PRqWfNLvC6bcRa2Osc6e/LtmXlcpype4f6n+Yx+WZ+f2uUh0UmDRCz7BEyUETEsDmlQ==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/extension-code@3.18.0': resolution: {integrity: sha512-0SU53O0NRmdtRM2Hgzm372dVoHjs2F40o/dtB7ls4kocf4W89FyWeC2R6ZsFQqcXisNh9RTzLtYfbNyizGuZIw==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-code@3.20.0': + resolution: {integrity: sha512-TYDWFeSQ9umiyrqsT6VecbuhL8XIHkUhO+gEk0sVvH67ZLwjFDhAIIgWIr1/dbIGPcvMZM19E7xUUhAdIaXaOQ==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-collaboration@3.18.0': resolution: {integrity: sha512-2wTgp41F5ab58buXrPBeerOf0VaW/c1LEx4kAzr72Z6zw0CcDGQYuSZTqE7RLGXxDga6VUi+Ts/U0HvxWpzIWw==} peerDependencies: @@ -3613,11 +3891,24 @@ packages: '@tiptap/y-tiptap': ^3.0.2 yjs: ^13 + '@tiptap/extension-collaboration@3.20.0': + resolution: {integrity: sha512-JItmI4U0i4kqorO114u24hM9k945IdaQ6Uc2DEtPBFFuS8cepJf2zw+ulAT1kAx6ZRiNvNpT9M7w+J0mWRn+Sg==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/y-tiptap': ^3.0.2 + yjs: ^13 + '@tiptap/extension-document@3.18.0': resolution: {integrity: sha512-e0hOGrjTMpCns8IC5p+c5CEiE1BBmFBFL+RpIxU/fjT2SaZ7q2xsFguBu94lQDT0cD6fdZokFRpGwEMxZNVGCg==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-document@3.20.0': + resolution: {integrity: sha512-oJfLIG3vAtZo/wg29WiBcyWt22KUgddpP8wqtCE+kY5Dw8znLR9ehNmVWlSWJA5OJUMO0ntAHx4bBT+I2MBd5w==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-drag-handle-vue-3@3.18.0': resolution: {integrity: sha512-WqviXqMRRAZSmMjvUki5fSI+G9XfzUX7TDxnntN9B3ZyJDMFoJetUVc1+DFpmEQNTD9NmnO3M3o//ugexpT0RA==} peerDependencies: @@ -3626,6 +3917,14 @@ packages: '@tiptap/vue-3': ^3.18.0 vue: ^3.0.0 + '@tiptap/extension-drag-handle-vue-3@3.20.0': + resolution: {integrity: sha512-Jx6LHYRI5uRaJVNQGkQsTFQkAM84rYQh3Q+WBePhGF4yPBUJQFn7Nv+5fQhKKV3A5PVQ6kTAjvW6SSUcD6ON8A==} + peerDependencies: + '@tiptap/extension-drag-handle': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/vue-3': ^3.20.0 + vue: ^3.0.0 + '@tiptap/extension-drag-handle@3.18.0': resolution: {integrity: sha512-2nR/SNolRtr+Ix3iRhr8xu2JaLJl61jbyn1X80SYi0pydoLmM2v47ZdVyP6lkQ+UeYluBHl3Quj+ylwOJqmwwg==} peerDependencies: @@ -3635,11 +3934,25 @@ packages: '@tiptap/pm': ^3.18.0 '@tiptap/y-tiptap': ^3.0.2 + '@tiptap/extension-drag-handle@3.20.0': + resolution: {integrity: sha512-CzLRyxZe5QddQey0RUWJUvICyhuRnU/jvzMIYlFvMxM7W97sZ2ggk0cRThlRt2pRUoSr8mmmUnobiorpISmksA==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-collaboration': ^3.20.0 + '@tiptap/extension-node-range': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/y-tiptap': ^3.0.2 + '@tiptap/extension-dropcursor@3.18.0': resolution: {integrity: sha512-pIW/K9fGth221dkfA5SInHcqfnCr0aG9LGkRiEh4gwM4cf6ceUBrvcD+QlemSZ4q9oktNGJmXT+sEXVOQ8QoeQ==} peerDependencies: '@tiptap/extensions': ^3.18.0 + '@tiptap/extension-dropcursor@3.20.0': + resolution: {integrity: sha512-d+cxplRlktVgZPwatnc34IArlppM0IFKS1J5wLk+ba1jidizsbMVh45tP/BTK2flhyfRqcNoB5R0TArhUpbkNQ==} + peerDependencies: + '@tiptap/extensions': ^3.20.0 + '@tiptap/extension-floating-menu@3.18.0': resolution: {integrity: sha512-a2cBQi0I/X0o3a9b+adwJvkdxLzQzJIkP9dc/v25qGTSCjC1+ycois5WQOn8T4T8t4g/fAH1UOXEWnkWyTxLIg==} peerDependencies: @@ -3647,59 +3960,119 @@ packages: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/extension-floating-menu@3.20.0': + resolution: {integrity: sha512-rYs4Bv5pVjqZ/2vvR6oe7ammZapkAwN51As/WDbemvYDjfOGRqK58qGauUjYZiDzPOEIzI2mxGwsZ4eJhPW4Ig==} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/extension-gapcursor@3.18.0': resolution: {integrity: sha512-covioXPPHX3SnlTwC/1rcHUHAc7/JFd4vN0kZQmZmvGHlxqq2dPmtrPh8D7TuDuhG0k/3Z6i8dJFP0phfRAhuA==} peerDependencies: '@tiptap/extensions': ^3.18.0 + '@tiptap/extension-gapcursor@3.20.0': + resolution: {integrity: sha512-P/LasfvG9/qFq43ZAlNbAnPnXC+/RJf49buTrhtFvI9Zg0+Lbpjx1oh6oMHB19T88Y28KtrckfFZ8aTSUWDq6w==} + peerDependencies: + '@tiptap/extensions': ^3.20.0 + '@tiptap/extension-hard-break@3.18.0': resolution: {integrity: sha512-IXLiOHEmbU2Wn1jFRZC6apMxiJQvSRWhwoiubAvRxyiPSnFTeaEgT8Qgo5DjwB39NckP+o7XX7RrgzlkwdFPQQ==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-hard-break@3.20.0': + resolution: {integrity: sha512-rqvhMOw4f+XQmEthncbvDjgLH6fz8L9splnKZC7OeS0eX8b0qd7+xI1u5kyxF3KA2Z0BnigES++jjWuecqV6mA==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-heading@3.18.0': resolution: {integrity: sha512-MTamVnYsFWVndLSq5PRQ7ZmbF6AExsFS9uIvGtUAwuhzvR4of/WHh6wpvWYjA+BLXTWRrfuGHaZTl7UXBN13fg==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-heading@3.20.0': + resolution: {integrity: sha512-JgJhurnCe3eN6a0lEsNQM/46R1bcwzwWWZEFDSb1P9dR8+t1/5v7cMZWsSInpD7R4/74iJn0+M5hcXLwCmBmYA==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-horizontal-rule@3.18.0': resolution: {integrity: sha512-fEq7DwwQZ496RHNbMQypBVNqoWnhDEERbzWMBqlmfCfc/0FvJrHtsQkk3k4lgqMYqmBwym3Wp0SrRYiyKCPGTw==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/extension-horizontal-rule@3.20.0': + resolution: {integrity: sha512-6uvcutFMv+9wPZgptDkbRDjAm3YVxlibmkhWD5GuaWwS9L/yUtobpI3GycujRSUZ8D3q6Q9J7LqpmQtQRTalWA==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/extension-image@3.18.0': resolution: {integrity: sha512-Hc8riY43yPlQDKIpJf/aZ3kw1WNYjJrBH7UZKGQ9cfmUfnKQgN6+bfWgyvtQezDfhvVL6RNKSGNfoYHkV+rJaA==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-image@3.20.0': + resolution: {integrity: sha512-0t7HYncV0kYEQS79NFczxdlZoZ8zu8X4VavDqt+mbSAUKRq3gCvgtZ5Zyd778sNmtmbz3arxkEYMIVou2swD0g==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-italic@3.18.0': resolution: {integrity: sha512-1C4nB08psiRo0BPxAbpYq8peUOKnjQWtBCLPbE6B9ToTK3vmUk0AZTqLO11FvokuM1GF5l2Lg3sKrKFuC2hcjQ==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-italic@3.20.0': + resolution: {integrity: sha512-/DhnKQF8yN8RxtuL8abZ28wd5281EaGoE2Oha35zXSOF1vNYnbyt8Ymkv/7u1BcWEWTvRPgaju0YCGXisPRLYw==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-link@3.18.0': resolution: {integrity: sha512-1J28C4+fKAMQi7q/UsTjAmgmKTnzjExXY98hEBneiVzFDxqF69n7+Vb7nVTNAIhmmJkZMA0DEcMhSiQC/1/u4A==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/extension-link@3.20.0': + resolution: {integrity: sha512-qI/5A+R0ZWBxo/8HxSn1uOyr7odr3xHBZ/gzOR1GUJaZqjlJxkWFX0RtXMbLKEGEvT25o345cF7b0wFznEh8qA==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/extension-list-item@3.18.0': resolution: {integrity: sha512-auTSt+NXoUnT0xofzFa+FnXsrW1TPdT1OB3U1OqQCIWkumZqL45A8OK9kpvyQsWj/xJ8fy1iZwFlKXPtxjLd2w==} peerDependencies: '@tiptap/extension-list': ^3.18.0 + '@tiptap/extension-list-item@3.20.0': + resolution: {integrity: sha512-qEtjaaGPuqaFB4VpLrGDoIe9RHnckxPfu6d3rc22ap6TAHCDyRv05CEyJogqccnFceG/v5WN4znUBER8RWnWHA==} + peerDependencies: + '@tiptap/extension-list': ^3.20.0 + '@tiptap/extension-list-keymap@3.18.0': resolution: {integrity: sha512-ZzO5r/cW7G0zpL/eM69WPnMpzb0YsSjtI60CYGA0iQDRJnK9INvxu0RU0ewM2faqqwASmtjuNJac+Fjk6scdXg==} peerDependencies: '@tiptap/extension-list': ^3.18.0 + '@tiptap/extension-list-keymap@3.20.0': + resolution: {integrity: sha512-Z4GvKy04Ms4cLFN+CY6wXswd36xYsT2p/YL0V89LYFMZTerOeTjFYlndzn6svqL8NV1PRT5Diw4WTTxJSmcJPA==} + peerDependencies: + '@tiptap/extension-list': ^3.20.0 + '@tiptap/extension-list@3.18.0': resolution: {integrity: sha512-9lQBo45HNqIFcLEHAk+CY3W51eMMxIJjWbthm2CwEWr4PB3+922YELlvq8JcLH1nVFkBVpmBFmQe/GxgnCkzwQ==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/extension-list@3.20.0': + resolution: {integrity: sha512-+V0/gsVWAv+7vcY0MAe6D52LYTIicMSHw00wz3ISZgprSb2yQhJ4+4gurOnUrQ4Du3AnRQvxPROaofwxIQ66WQ==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/extension-mention@3.18.0': resolution: {integrity: sha512-2obPAXksR4I2OwKZKYEoMwKGFEnsANlE83hAILNYGb5oSnDkHj8KHxQKcIutv6G25OLDTfMMh7VE/YUq2iempw==} peerDependencies: @@ -3707,66 +4080,133 @@ packages: '@tiptap/pm': ^3.18.0 '@tiptap/suggestion': ^3.18.0 + '@tiptap/extension-mention@3.20.0': + resolution: {integrity: sha512-wUjsq7Za0JJdJzrGNG+g8nrCpek/85GQ0Rm9bka3PynIVRwus+xQqW6IyWVPBdl1BSkrbgMAUqtrfoh1ymznbg==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/suggestion': ^3.20.0 + '@tiptap/extension-node-range@3.18.0': resolution: {integrity: sha512-aw9m4i1qznQ/HA+bPIZ7CVUOmVUcIBkTNt3IXHMNAuK8NTJr141gnKDtgF4UUCAnpKBXq8F8++VKdBUszvpZZA==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/extension-node-range@3.20.0': + resolution: {integrity: sha512-XeKKTV88VuJ4Mh0Rxvc/PPzG76cb44sE+rB4u0J/ms63R/WFTm6yJQlCgUVGnGeHleSlrWuZY8gGSuoljmQzqg==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/extension-ordered-list@3.18.0': resolution: {integrity: sha512-5bUAfklYLS5o6qvLLfreGyGvD1JKXqOQF0YntLyPuCGrXv7+XjPWQL2BmEf59fOn2UPT2syXLQ1WN5MHTArRzg==} peerDependencies: '@tiptap/extension-list': ^3.18.0 + '@tiptap/extension-ordered-list@3.20.0': + resolution: {integrity: sha512-jVKnJvrizLk7etwBMfyoj6H2GE4M+PD4k7Bwp6Bh1ohBWtfIA1TlngdS842Mx5i1VB2e3UWIwr8ZH46gl6cwMA==} + peerDependencies: + '@tiptap/extension-list': ^3.20.0 + '@tiptap/extension-paragraph@3.18.0': resolution: {integrity: sha512-uvFhdwiur4NhhUdBmDsajxjGAIlg5qga55fYag2DzOXxIQE2M7/aVMRkRpuJzb88GY4EHSh8rY34HgMK2FJt2Q==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-paragraph@3.20.0': + resolution: {integrity: sha512-mM99zK4+RnEXIMCv6akfNATAs0Iija6FgyFA9J9NZ6N4o8y9QiNLLa6HjLpAC+W+VoCgQIekyoF/Q9ftxmAYDQ==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-placeholder@3.18.0': resolution: {integrity: sha512-jhN1Xa+MpfrTcCYZsFSvZYpUuMutPTC20ms0IsH1yN0y9tbAS+T6PHPC+dsvyAinYdA8yKElM6OO+jpyz4X1cw==} peerDependencies: '@tiptap/extensions': ^3.18.0 + '@tiptap/extension-placeholder@3.20.0': + resolution: {integrity: sha512-ZhYD3L5m16ydSe2z8vqz+RdtAG/iOQaFHHedFct70tKRoLqi2ajF5kgpemu8DwpaRTcyiCN4G99J/+MqehKNjQ==} + peerDependencies: + '@tiptap/extensions': ^3.20.0 + '@tiptap/extension-strike@3.18.0': resolution: {integrity: sha512-kl/fa68LZg8NWUqTkRTfgyCx+IGqozBmzJxQDc1zxurrIU+VFptDV9UuZim587sbM2KGjCi/PNPjPGk1Uu0PVg==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-strike@3.20.0': + resolution: {integrity: sha512-0vcTZRRAiDfon3VM1mHBr9EFmTkkUXMhm0Xtdtn0bGe+sIqufyi+hUYTEw93EQOD9XNsPkrud6jzQNYpX2H3AQ==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-text@3.18.0': resolution: {integrity: sha512-9TvctdnBCwK/zyTi9kS7nGFNl5OvGM8xE0u38ZmQw5t79JOqJHgOroyqMjw8LHK/1PWrozfNCmsZbpq4IZuKXw==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-text@3.20.0': + resolution: {integrity: sha512-tf8bE8tSaOEWabCzPm71xwiUhyMFKqY9jkP5af3Kr1/F45jzZFIQAYZooHI/+zCHRrgJ99MQHKHe1ZNvODrKHQ==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extension-underline@3.18.0': resolution: {integrity: sha512-009IeXURNJ/sm1pBqbj+2YQgjQaBtNlJR3dbl6xu49C+qExqCmI7klhKQuwsVVGLR7ahsYlp7d9RlftnhCXIcQ==} peerDependencies: '@tiptap/core': ^3.18.0 + '@tiptap/extension-underline@3.20.0': + resolution: {integrity: sha512-LzNXuy2jwR/y+ymoUqC72TiGzbOCjioIjsDu0MNYpHuHqTWPK5aV9Mh0nbZcYFy/7fPlV1q0W139EbJeYBZEAQ==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/extensions@3.18.0': resolution: {integrity: sha512-uSRIE9HGshBN6NRFR3LX2lZqBLvX92SgU5A9AvUbJD4MqU63E+HdruJnRjsVlX3kPrmbIDowxrzXlUcg3K0USQ==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/extensions@3.20.0': + resolution: {integrity: sha512-HIsXX942w3nbxEQBlMAAR/aa6qiMBEP7CsSMxaxmTIVAmW35p6yUASw6GdV1u0o3lCZjXq2OSRMTskzIqi5uLg==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/markdown@3.18.0': resolution: {integrity: sha512-F4gAr8QXc61dwOi/fwumx/mTqX0CjHiYvN/A4btPf0TpwXRcEVvlN1iz8A/8heXppbyyM6EliSMFFWN2sgVT+w==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/markdown@3.20.0': + resolution: {integrity: sha512-3vUxs8tsVIf/KWKLWjFsTqrjuaTYJY9rawDL5sio9NwlqFWDuWpHEVJcqbQXJUrgQSh12AZoTKyfgiEqkAGI3Q==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/pm@3.18.0': resolution: {integrity: sha512-8RoI5gW0xBVCsuxahpK8vx7onAw6k2/uR3hbGBBnH+HocDMaAZKot3nTyY546ij8ospIC1mnQ7k4BhVUZesZDQ==} + '@tiptap/pm@3.20.0': + resolution: {integrity: sha512-jn+2KnQZn+b+VXr8EFOJKsnjVNaA4diAEr6FOazupMt8W8ro1hfpYtZ25JL87Kao/WbMze55sd8M8BDXLUKu1A==} + '@tiptap/starter-kit@3.18.0': resolution: {integrity: sha512-LctpCelqI/5nHEeZgCPiwI1MmTjGr6YCIBGWmS5s4DJE7NfevEkwomR/C05QKdVUwPhpCXIMeS1+h/RYqRo1KA==} + '@tiptap/starter-kit@3.20.0': + resolution: {integrity: sha512-W4+1re35pDNY/7rpXVg+OKo/Fa4Gfrn08Bq3E3fzlJw6gjE3tYU8dY9x9vC2rK9pd9NOp7Af11qCFDaWpohXkw==} + '@tiptap/suggestion@3.18.0': resolution: {integrity: sha512-AxJfM34e6wFPKVsfyXSvHN1wBBiXIm65hUmY+newop+DMeOjsvkO7M6j7tzUR2Nnrh1AQEsVr6iR0UzO91PBSA==} peerDependencies: '@tiptap/core': ^3.18.0 '@tiptap/pm': ^3.18.0 + '@tiptap/suggestion@3.20.0': + resolution: {integrity: sha512-OA9Fe+1Q/Ex0ivTcpRcVFiLnNsVdIBmiEoctt/gu4H2ayCYmZ906veioXNdc1m/3MtVVUIuEnvwwsrOZXlfDEw==} + peerDependencies: + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + '@tiptap/vue-3@3.18.0': resolution: {integrity: sha512-3JUMYqFYXEOKk2zOtPp6wuEzHAHrHdrswaRhHVVDR8olO9PpbuJ6qu83RJUB8OZVnP7dv3yxIakDf1AHMxLQXg==} peerDependencies: @@ -3775,6 +4215,14 @@ packages: '@tiptap/pm': ^3.18.0 vue: ^3.0.0 + '@tiptap/vue-3@3.20.0': + resolution: {integrity: sha512-u8UfDKsbIOF+mVsXwJ946p1jfrLGFUyqp9i/DAeGGg2I85DPOkhZgz67bUPVXkpossoEk+jKCkRN0eBHl9+eZQ==} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': ^3.20.0 + '@tiptap/pm': ^3.20.0 + vue: ^3.0.0 + '@tiptap/y-tiptap@3.0.2': resolution: {integrity: sha512-flMn/YW6zTbc6cvDaUPh/NfLRTXDIqgpBUkYzM74KA1snqQwhOMjnRcnpu4hDFrTnPO6QGzr99vRyXEA7M44WA==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} @@ -3875,6 +4323,9 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -3902,32 +4353,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.54.0': - resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} + '@typescript-eslint/project-service@8.55.0': + resolution: {integrity: sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.55.0': - resolution: {integrity: sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.54.0': - resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.55.0': resolution: {integrity: sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.54.0': - resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.55.0': resolution: {integrity: sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3941,20 +4376,10 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.54.0': - resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.55.0': resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.54.0': - resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.55.0': resolution: {integrity: sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3968,10 +4393,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.54.0': - resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.55.0': resolution: {integrity: sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3979,6 +4400,11 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@unhead/vue@2.1.10': + resolution: {integrity: sha512-VP78Onh2HNezLPfhYjfHqn4dxlcQsE6PJgTTs61NksO/thvilNswtgBq0N0MWCLtn43N5akEPGW2y2zxM3PWgQ==} + peerDependencies: + vue: '>=3.5.18' + '@unhead/vue@2.1.4': resolution: {integrity: sha512-MFvywgkHMt/AqbhmKOqRuzvuHBTcmmmnUa7Wm/Sg11leXAeRShv2PcmY7IiYdeeJqBMCm1jwhcs6201jj6ggZg==} peerDependencies: @@ -4194,6 +4620,17 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 vue: ^3.2.25 + '@vitest/browser-playwright@4.0.18': + resolution: {integrity: sha512-gfajTHVCiwpxRj1qh0Sh/5bbGLG4F/ZH/V9xvFVoFddpITfMta9YGow0W6ZpTTORv2vdJuz9TnrNSmjKvpOf4g==} + peerDependencies: + playwright: '*' + vitest: 4.0.18 + + '@vitest/browser@4.0.18': + resolution: {integrity: sha512-gVQqh7paBz3gC+ZdcCmNSWJMk70IUjDeVqi+5m5vYpEHsIwRgw3Y545jljtajhkekIpIp5Gg8oK7bctgY0E2Ng==} + peerDependencies: + vitest: 4.0.18 + '@vitest/expect@4.0.18': resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} @@ -4257,27 +4694,15 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.5.27': - resolution: {integrity: sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==} - '@vue/compiler-core@3.5.28': resolution: {integrity: sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==} - '@vue/compiler-dom@3.5.27': - resolution: {integrity: sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==} - '@vue/compiler-dom@3.5.28': resolution: {integrity: sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==} - '@vue/compiler-sfc@3.5.27': - resolution: {integrity: sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==} - '@vue/compiler-sfc@3.5.28': resolution: {integrity: sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==} - '@vue/compiler-ssr@3.5.27': - resolution: {integrity: sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==} - '@vue/compiler-ssr@3.5.28': resolution: {integrity: sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==} @@ -4298,18 +4723,12 @@ packages: '@vue/devtools-kit@7.7.9': resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} - '@vue/devtools-kit@8.0.5': - resolution: {integrity: sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg==} - '@vue/devtools-kit@8.0.6': resolution: {integrity: sha512-9zXZPTJW72OteDXeSa5RVML3zWDCRcO5t77aJqSs228mdopYj5AiTpihozbsfFJ0IodfNs7pSgOGO3qfCuxDtw==} '@vue/devtools-shared@7.7.9': resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} - '@vue/devtools-shared@8.0.5': - resolution: {integrity: sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==} - '@vue/devtools-shared@8.0.6': resolution: {integrity: sha512-Pp1JylTqlgMJvxW6MGyfTF8vGvlBSCAvMFaDCYa82Mgw7TT5eE5kkHgDvmOGHWeJE4zIDfCpCxHapsK2LtIAJg==} @@ -4330,9 +4749,6 @@ packages: peerDependencies: vue: 3.5.28 - '@vue/shared@3.5.27': - resolution: {integrity: sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==} - '@vue/shared@3.5.28': resolution: {integrity: sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==} @@ -4435,6 +4851,48 @@ packages: universal-cookie: optional: true + '@vueuse/integrations@14.2.1': + resolution: {integrity: sha512-2LIUpBi/67PoXJGqSDQUF0pgQWpNHh7beiA+KG2AbybcNm+pTGWT6oPGlBgUoDWmYwfeQqM/uzOHqcILpKL7nA==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 || ^8 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 || ^8 + vue: ^3.5.0 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + '@vueuse/metadata@10.11.1': resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} @@ -4503,6 +4961,12 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 + ai@6.0.86: + resolution: {integrity: sha512-U2W2LBCHA/pr0Ui7vmmsjBiLEzBbZF3yVHNy7Rbzn7IX+SvoQPFM5rN74hhfVzZoE8zBuGD4nLLk+j0elGacvQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: @@ -4570,6 +5034,10 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + aria-query@5.3.1: + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} + engines: {node: '>= 0.4'} + aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} @@ -4621,10 +5089,6 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - automd@0.4.3: - resolution: {integrity: sha512-5WJNEiaNpFm8h0OmQzhnESthadUQhJwQfka/TmmJpMudZ8qU9MZao9p0G1g7WYA9pVTz6FMMOSvxnfQ9g8q9vQ==} - hasBin: true - autoprefixer@10.4.24: resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} engines: {node: ^10 || ^12 || >=14} @@ -4683,6 +5147,7 @@ packages: basic-ftp@5.1.0: resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==} engines: {node: '>=10.0.0'} + deprecated: Security vulnerability fixed in 5.2.0, please upgrade beautiful-mermaid@1.0.2: resolution: {integrity: sha512-8f8xVRIuGyaI1kthEnYPqWLAGzdAyD1EuS4mL+zwhSUKVbnbFeKzQT9nXJq7YraU/ZFF4yzpRNdwLUzeEDTC5A==} @@ -4981,9 +5446,6 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - confbox@0.2.4: resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} @@ -5210,6 +5672,9 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -5274,8 +5739,8 @@ packages: resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} engines: {node: '>=18'} - devalue@5.6.2: - resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==} + devalue@5.6.3: + resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -5283,10 +5748,6 @@ packages: dfa@1.2.0: resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} - didyoumean2@7.0.4: - resolution: {integrity: sha512-+yW4SNY7W2DOWe2Jx5H4c2qMTFbLGM6wIyoDPkAPy66X+sD1KfYjBPAIWPVsYqMxelflaMQCloZDudELIPhLqA==} - engines: {node: ^18.12.0 || >=20.9.0} - diff3@0.0.3: resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==} @@ -5297,8 +5758,8 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - docus@5.4.4: - resolution: {integrity: sha512-OkWHn85YjbcivLWhl1YAGX1fE04yd8R5l0aaB1oAmeYfdmKlgkDwD54352pRmZ8P3X1be6PNujLrU9yc0Bbr9w==} + docus@5.7.0: + resolution: {integrity: sha512-Qj12DMciDtr9J0a18g7L6y5h3I78g5UpFVQd4ewawvlA2gqEuHcXvMIVlVOCLPPfWwd78HtvEIG13B2bRS4H8w==} peerDependencies: better-sqlite3: 12.x nuxt: 4.x @@ -5628,6 +6089,9 @@ packages: jiti: optional: true + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + espree@10.4.0: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5649,6 +6113,9 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} + esrap@2.2.3: + resolution: {integrity: sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -5713,8 +6180,8 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - express-rate-limit@7.5.1: - resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} + express-rate-limit@8.2.1: + resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -5754,10 +6221,6 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -5894,6 +6357,11 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -6218,6 +6686,10 @@ packages: resolution: {integrity: sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==} engines: {node: '>=12.22.0'} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + engines: {node: '>= 12'} + ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -6321,6 +6793,9 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-ssh@1.4.1: resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} @@ -6373,8 +6848,8 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - isomorphic-git@1.36.3: - resolution: {integrity: sha512-bHF1nQTjL0IfSo13BHDO8oQ6SvYNQduTAdPJdSmrJ5JwZY2fsyjLujEXav5hqPCegSCAnc75ZsBUHqT/NqR7QA==} + isomorphic-git@1.37.2: + resolution: {integrity: sha512-HCQBBKmXIMPdHgYGstSBNp6MNmVcMQBbUqJF8xfywFmlpNseO4KKex59YlXqNxhRxmv3fUZwvNWvMyOdc1VvhA==} engines: {node: '>=14.17'} hasBin: true @@ -6409,10 +6884,6 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdoc-type-pratt-parser@7.1.0: - resolution: {integrity: sha512-SX7q7XyCwzM/MEDCYz0l8GgGbJAACGFII9+WfNYr5SLEKukHWRy2Jk3iWRe7P+lpYJNs7oQ+OSei4JtKGUjd7A==} - engines: {node: '>=20.0.0'} - jsdoc-type-pratt-parser@7.1.1: resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==} engines: {node: '>=20.0.0'} @@ -6664,6 +7135,9 @@ packages: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -6671,9 +7145,6 @@ packages: lodash.capitalize@4.2.1: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} - lodash.deburr@4.1.0: - resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} - lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -6788,9 +7259,6 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - md4w@0.2.7: - resolution: {integrity: sha512-lFM7vwk3d4MzkV2mija7aPkK6OjKXZDQsH2beX+e2cvccBoqc6RraheMtAO0Wcr/gjj5L+WS5zhb+06AmuGZrg==} - mdast-util-definitions@6.0.0: resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} @@ -6830,9 +7298,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - mdbox@0.1.1: - resolution: {integrity: sha512-jvLISenzbLRPWWamTG3THlhTcMbKWzJQNyTi61AVXhCBOC+gsldNTUfUNH8d3Vay83zGehFw3wZpF3xChzkTIQ==} - mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -6977,14 +7442,14 @@ packages: minimark@0.2.0: resolution: {integrity: sha512-AmtWU9pO0C2/3AM2pikaVhJ//8E5rOpJ7+ioFQfjIq+wCsBeuZoxPd97hBFZ9qrI7DMHZudwGH3r8A7BMnsIew==} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} - minimatch@10.2.0: resolution: {integrity: sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==} engines: {node: 20 || >=22} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -7040,6 +7505,16 @@ packages: '@vueuse/core': '>=10.0.0' vue: '>=3.0.0' + motion-v@1.10.3: + resolution: {integrity: sha512-9Ewo/wwGv7FO3PqYJpllBF/Efc7tbeM1iinVrM73s0RUQrnXHwMZCaRX98u4lu0PQCrZghPPfCsQ14pWKIEbnQ==} + peerDependencies: + '@vueuse/core': '>=10.0.0' + vue: '>=3.0.0' + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -7171,10 +7646,6 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nuxt-component-meta@0.17.1: - resolution: {integrity: sha512-5pVCzWXqg9HP159JDhdfQJtFvgmS/KouEVpyYLPEBXWMrQoJBwujsczmLeIKXKI2BTy4RqfXy8N1GfGTZNb57g==} - hasBin: true - nuxt-component-meta@0.17.2: resolution: {integrity: sha512-2/mSSqutOX8t+r8cAX1yUYwAPBqicPO5Rfum3XaHVszxKCF4tXEXBiPGfJY9Zn69x/CIeOdw+aM9wmHzQ5Q+lA==} hasBin: true @@ -7214,11 +7685,6 @@ packages: '@types/node': optional: true - nypm@0.6.4: - resolution: {integrity: sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw==} - engines: {node: '>=18'} - hasBin: true - nypm@0.6.5: resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} engines: {node: '>=18'} @@ -7474,6 +7940,10 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pixelmatch@7.1.0: + resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} + hasBin: true + pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} @@ -7484,8 +7954,13 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.58.1: - resolution: {integrity: sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==} + playwright-core@1.58.2: + resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.58.2: + resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==} engines: {node: '>=18'} hasBin: true @@ -7493,6 +7968,10 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -7948,6 +8427,11 @@ packages: peerDependencies: vue: '>= 3.2.0' + reka-ui@2.8.2: + resolution: {integrity: sha512-8lTKcJhmG+D3UyJxhBnNnW/720sLzm0pbA9AC1MWazmJ5YchJAyTSl+O00xP/kxBmEN0fw5JqWVHguiFmsGjzA==} + peerDependencies: + vue: '>= 3.2.0' + release-it@19.2.4: resolution: {integrity: sha512-BwaJwQYUIIAKuDYvpqQTSoy0U7zIy6cHyEjih/aNaFICphGahia4cjDANuFXb7gVZ51hIK9W0io6fjNQWXqICg==} engines: {node: ^20.12.0 || >=22.0.0} @@ -8102,6 +8586,10 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -8118,6 +8606,10 @@ packages: resolution: {integrity: sha512-HanEzgXHlX3fzpGgxPoR3qI7FDpc/B+uE/KplzA6BkZGlWMaH98B/1Amq+OBF1pYPlGNzAXPYNHlrEVBvRBnHQ==} engines: {node: '>=16'} + satori@0.19.3: + resolution: {integrity: sha512-dKr8TNYSyceWqBoTHWntjy25xaiWMw5GF+f8QOqFsov9OpTswLs7xdbvZudGRp9jkzbhv/4mVjVZYFtpruGKiA==} + engines: {node: '>=16'} + sax@1.4.4: resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} engines: {node: '>=11.0.0'} @@ -8195,6 +8687,20 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} + shiki-stream@0.1.4: + resolution: {integrity: sha512-4pz6JGSDmVTTkPJ/ueixHkFAXY4ySCc+unvCaDZV7hqq/sdJZirRxgIXSuNSKgiFlGTgRR97sdu2R8K55sPsrw==} + peerDependencies: + react: ^19.0.0 + solid-js: ^1.9.0 + vue: ^3.2.0 + peerDependenciesMeta: + react: + optional: true + solid-js: + optional: true + vue: + optional: true + shiki@1.29.2: resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} @@ -8204,6 +8710,10 @@ packages: shiki@3.22.0: resolution: {integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==} + shiki@4.0.1: + resolution: {integrity: sha512-EkAEhDTN5WhpoQFXFw79OHIrSAfHhlImeCdSyg4u4XvrpxKEmdo/9x/HWSowujAnUrFsGOwWiE58a6GVentMnQ==} + engines: {node: '>=20'} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -8441,6 +8951,24 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svelte-check@4.4.4: + resolution: {integrity: sha512-F1pGqXc710Oi/wTI4d/x7d6lgPwwfx1U6w3Q35n4xsC2e8C/yN2sM1+mWxjlMcpAfWucjlq4vPi+P4FZ8a14sQ==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + + svelte2tsx@0.7.51: + resolution: {integrity: sha512-YbVMQi5LtQkVGOMdATTY8v3SMtkNjzYtrVDGaN3Bv+0LQ47tGXu/Oc8ryTkcYuEJWTZFJ8G2+2I8ORcQVGt9Ag==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + + svelte@5.53.7: + resolution: {integrity: sha512-uxck1KI7JWtlfP3H6HOWi/94soAl23jsGJkBzN2BAWcQng0+lTrRNhxActFqORgnO9BHVd1hKJhG+ljRuIUWfQ==} + engines: {node: '>=18'} + svgo@4.0.0: resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==} engines: {node: '>=16'} @@ -8465,6 +8993,9 @@ packages: tailwind-merge@3.4.0: resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + tailwind-variants@3.2.2: resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==} engines: {node: '>=16.x', pnpm: '>=7.x'} @@ -8481,6 +9012,9 @@ packages: tailwindcss@4.2.0: resolution: {integrity: sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q==} + tailwindcss@4.2.1: + resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} + tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -8498,6 +9032,7 @@ packages: tar@7.5.7: resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} engines: {node: '>=18'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me temml@0.11.11: resolution: {integrity: sha512-Z/Ihgwad+ges0ez6+KmKWZ3o4BYbP6aZ/cU94cVtN+DwxwqxjHgcF4Z6cb9jLkKN+aU7uni165HsIxLHs5/TqA==} @@ -8663,6 +9198,9 @@ packages: unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} + unhead@2.1.10: + resolution: {integrity: sha512-We8l9uNF8zz6U8lfQaVG70+R/QBfQx1oPIgXin4BtZnK2IQpz6yazQ0qjMNVBDw2ADgF2ea58BtvSK+XX5AS7g==} + unhead@2.1.4: resolution: {integrity: sha512-+5091sJqtNNmgfQ07zJOgUnMIMKzVKAWjeMlSrTdSGPB6JSozhpjUKuMfWEoLxlMAfhIvgOU8Me0XJvmMA/0fA==} @@ -8766,6 +9304,7 @@ packages: unplugin-vue-router@0.16.2: resolution: {integrity: sha512-lE6ZjnHaXfS2vFI/PSEwdKcdOo5RwAbCKUnPBIN9YwLgSWas3x+qivzQvJa/uxhKzJldE6WK43aDKjGj9Rij9w==} + deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html' peerDependencies: '@vue/compiler-sfc': ^3.5.17 vue-router: ^4.6.0 @@ -8775,6 +9314,7 @@ packages: unplugin-vue-router@0.19.2: resolution: {integrity: sha512-u5dgLBarxE5cyDK/hzJGfpCTLIAyiTXGlo85COuD4Nssj6G7NxS+i9mhCWz/1p/ud1eMwdcUbTXehQe41jYZUA==} + deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html' peerDependencies: '@vue/compiler-sfc': ^3.5.17 vue-router: ^4.6.0 @@ -9106,6 +9646,14 @@ packages: postcss: optional: true + vitest-browser-svelte@0.1.0: + resolution: {integrity: sha512-YB6ZUZZQNqU1T9NzvTEDpwpPv35Ng1NZMPBh81zDrLEdOgROGE6nJb79NWb1Eu/a8VkHifqArpOZfJfALge6xQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + '@vitest/browser': ^2.1.0 || ^3.0.0-0 + svelte: '>3.0.0' + vitest: ^2.1.0 || ^3.0.0-0 + vitest@4.0.18: resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -9157,6 +9705,9 @@ packages: vue-component-type-helpers@3.2.4: resolution: {integrity: sha512-05lR16HeZDcDpB23ku5b5f1fBOoHqFnMiKRr2CiEvbG5Ux4Yi0McmQBOET0dR0nxDXosxyVqv67q6CzS3AK8rw==} + vue-component-type-helpers@3.2.5: + resolution: {integrity: sha512-tkvNr+bU8+xD/onAThIe7CHFvOJ/BO6XCOrxMzeytJq40nTfpGDJuVjyCM8ccGZKfAbGk2YfuZyDMXM56qheZQ==} + vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} engines: {node: '>=12'} @@ -9414,6 +9965,9 @@ packages: youch@4.1.0-beta.13: resolution: {integrity: sha512-3+AG1Xvt+R7M7PSDudhbfbwiyveW6B8PLBIwTyEC598biEYIjHhC89i6DBEvR0EZUjGY3uGSnC429HpIa2Z09g==} + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} @@ -9447,6 +10001,27 @@ snapshots: '@vercel/oidc': 3.1.0 zod: 4.3.6 + '@ai-sdk/gateway@3.0.46(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6) + '@vercel/oidc': 3.1.0 + zod: 4.3.6 + + '@ai-sdk/gateway@3.0.63(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.17(zod@4.3.6) + '@vercel/oidc': 3.1.0 + zod: 4.3.6 + + '@ai-sdk/mcp@1.0.23(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.17(zod@4.3.6) + pkce-challenge: 5.0.1 + zod: 4.3.6 + '@ai-sdk/provider-utils@4.0.15(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 @@ -9454,6 +10029,13 @@ snapshots: eventsource-parser: 3.0.6 zod: 4.3.6 + '@ai-sdk/provider-utils@4.0.17(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.0.6 + zod: 4.3.6 + '@ai-sdk/provider@3.0.8': dependencies: json-schema: 0.4.0 @@ -9467,6 +10049,15 @@ snapshots: transitivePeerDependencies: - zod + '@ai-sdk/vue@3.0.86(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)': + dependencies: + '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6) + ai: 6.0.86(zod@4.3.6) + swrv: 1.1.0(vue@3.5.28(typescript@5.9.3)) + vue: 3.5.28(typescript@5.9.3) + transitivePeerDependencies: + - zod + '@algolia/abtesting@1.15.1': dependencies: '@algolia/client-common': 5.49.1 @@ -9832,8 +10423,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/runtime@7.28.6': {} - '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -9875,22 +10464,11 @@ snapshots: dependencies: fontkitten: 1.0.2 - '@clack/core@0.5.0': - dependencies: - picocolors: 1.1.1 - sisteransi: 1.0.5 - '@clack/core@1.0.0': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@0.11.0': - dependencies: - '@clack/core': 0.5.0 - picocolors: 1.1.1 - sisteransi: 1.0.5 - '@clack/prompts@1.0.0': dependencies: '@clack/core': 1.0.0 @@ -9909,7 +10487,7 @@ snapshots: dependencies: '@simple-libs/child-process-utils': 1.0.1 '@simple-libs/stream-utils': 1.1.0 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.2.1 @@ -9969,7 +10547,7 @@ snapshots: '@es-joy/jsdoccomment@0.84.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/types': 8.55.0 comment-parser: 1.4.5 esquery: 1.7.0 jsdoc-type-pratt-parser: 7.1.1 @@ -10218,7 +10796,7 @@ snapshots: dependencies: '@eslint/object-schema': 3.0.1 debug: 4.4.3 - minimatch: 10.1.1 + minimatch: 10.2.0 transitivePeerDependencies: - supports-color @@ -10288,19 +10866,19 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iconify-json/lucide@1.2.88': + '@iconify-json/lucide@1.2.91': dependencies: '@iconify/types': 2.0.0 - '@iconify-json/lucide@1.2.91': + '@iconify-json/simple-icons@1.2.69': dependencies: '@iconify/types': 2.0.0 - '@iconify-json/simple-icons@1.2.69': + '@iconify-json/simple-icons@1.2.72': dependencies: '@iconify/types': 2.0.0 - '@iconify-json/vscode-icons@1.2.40': + '@iconify-json/vscode-icons@1.2.44': dependencies: '@iconify/types': 2.0.0 @@ -10547,6 +11125,10 @@ snapshots: dependencies: '@swc/helpers': 0.5.18 + '@internationalized/date@3.11.0': + dependencies: + '@swc/helpers': 0.5.18 + '@internationalized/number@3.6.5': dependencies: '@swc/helpers': 0.5.18 @@ -10594,8 +11176,8 @@ snapshots: '@intlify/shared': 11.2.8 '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.2.8)(@vue/compiler-dom@3.5.28)(vue-i18n@11.2.8(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.55.0 + '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) debug: 4.4.3 fast-glob: 3.3.3 pathe: 2.0.3 @@ -10624,12 +11206,6 @@ snapshots: '@ioredis/commands@1.5.0': {} - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -10698,7 +11274,7 @@ snapshots: json5: 2.2.3 rollup: 4.57.1 - '@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6)': + '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: '@hono/node-server': 1.19.9(hono@4.11.7) ajv: 8.17.1 @@ -10709,7 +11285,8 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 7.5.1(express@5.2.1) + express-rate-limit: 8.2.1(express@5.2.1) + hono: 4.11.7 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10717,7 +11294,6 @@ snapshots: zod: 4.3.6 zod-to-json-schema: 3.25.1(zod@4.3.6) transitivePeerDependencies: - - hono - supports-color '@napi-rs/wasm-runtime@0.2.12': @@ -10788,11 +11364,11 @@ snapshots: - magicast - supports-color - '@nuxt/content@3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1)': + '@nuxt/content@3.12.0(better-sqlite3@12.6.2)(magicast@0.5.1)': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.1) - '@nuxtjs/mdc': 0.20.0(magicast@0.5.1) - '@shikijs/langs': 3.22.0 + '@nuxtjs/mdc': 0.20.1(magicast@0.5.1) + '@shikijs/langs': 3.23.0 '@sqlite.org/sqlite-wasm': 3.50.4-build1 '@standard-schema/spec': 1.1.0 '@webcontainer/env': 1.1.1 @@ -10804,10 +11380,9 @@ snapshots: destr: 2.0.5 git-url-parse: 16.1.0 hookable: 5.5.3 - isomorphic-git: 1.36.3 + isomorphic-git: 1.37.2 jiti: 2.6.1 json-schema-to-typescript: 15.0.4 - knitwork: 1.3.0 mdast-util-to-hast: 13.2.1 mdast-util-to-string: 4.0.0 micromark: 4.0.2 @@ -10817,15 +11392,15 @@ snapshots: micromark-util-sanitize-uri: 2.0.1 micromatch: 4.0.8 minimark: 0.2.0 - minimatch: 10.1.1 - nuxt-component-meta: 0.17.1(magicast@0.5.1) - nypm: 0.6.4 + minimatch: 10.2.4 + nuxt-component-meta: 0.17.2(magicast@0.5.1) + nypm: 0.6.5 ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 remark-mdc: 3.10.0 scule: 1.3.0 - shiki: 3.22.0 + shiki: 4.0.1 slugify: 1.6.6 socket.io-client: 4.8.3 std-env: 3.10.0 @@ -10883,7 +11458,7 @@ snapshots: '@nuxt/devtools-wizard': 3.1.1 '@nuxt/kit': 4.3.1(magicast@0.5.1) '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) - '@vue/devtools-kit': 8.0.5 + '@vue/devtools-kit': 8.0.6 birpc: 2.9.0 consola: 3.4.2 destr: 2.0.5 @@ -11127,31 +11702,6 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/kit@4.3.0(magicast@0.5.1)': - dependencies: - c12: 3.3.3(magicast@0.5.1) - consola: 3.4.2 - defu: 6.1.4 - destr: 2.0.5 - errx: 0.1.0 - exsolve: 1.0.8 - ignore: 7.0.5 - jiti: 2.6.1 - klona: 2.0.6 - mlly: 1.8.0 - ohash: 2.0.11 - pathe: 2.0.3 - pkg-types: 2.3.0 - rc9: 2.1.2 - scule: 1.3.0 - semver: 7.7.3 - tinyglobby: 0.2.15 - ufo: 1.6.3 - unctx: 2.5.0 - untyped: 2.0.0 - transitivePeerDependencies: - - magicast - '@nuxt/kit@4.3.1(magicast@0.5.1)': dependencies: c12: 3.3.3(magicast@0.5.1) @@ -11182,11 +11732,11 @@ snapshots: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.3.1(magicast@0.5.1) '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3)) - '@vue/shared': 3.5.27 + '@vue/shared': 3.5.28 consola: 3.4.2 defu: 6.1.4 destr: 2.0.5 - devalue: 5.6.2 + devalue: 5.6.3 errx: 0.1.0 escape-string-regexp: 5.0.0 exsolve: 1.0.8 @@ -11244,7 +11794,7 @@ snapshots: '@nuxt/schema@4.3.1': dependencies: - '@vue/shared': 3.5.27 + '@vue/shared': 3.5.28 defu: 6.1.4 pathe: 2.0.3 pkg-types: 2.3.0 @@ -11259,7 +11809,7 @@ snapshots: rc9: 3.0.0 std-env: 3.10.0 - '@nuxt/ui@4.4.0(@nuxt/content@3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1))(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(focus-trap@7.8.0)(ioredis@5.9.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6)': + '@nuxt/ui@4.4.0(@nuxt/content@3.12.0(better-sqlite3@12.6.2)(magicast@0.5.1))(@tiptap/extensions@3.20.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(focus-trap@7.8.0)(ioredis@5.9.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6)': dependencies: '@floating-ui/dom': 1.7.5 '@iconify/vue': 5.0.0(vue@3.5.28(typescript@5.9.3)) @@ -11286,7 +11836,7 @@ snapshots: '@tiptap/extension-image': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) '@tiptap/extension-mention': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/suggestion@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) '@tiptap/extension-node-range': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-placeholder': 3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) + '@tiptap/extension-placeholder': 3.18.0(@tiptap/extensions@3.20.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) '@tiptap/markdown': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 '@tiptap/starter-kit': 3.18.0 @@ -11328,7 +11878,7 @@ snapshots: vaul-vue: 0.4.1(reka-ui@2.7.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) vue-component-type-helpers: 3.2.4 optionalDependencies: - '@nuxt/content': 3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1) + '@nuxt/content': 3.12.0(better-sqlite3@12.6.2)(magicast@0.5.1) vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3)) zod: 4.3.6 transitivePeerDependencies: @@ -11373,42 +11923,42 @@ snapshots: - vue - yjs - '@nuxt/ui@4.4.0(@nuxt/content@3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1))(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)': + '@nuxt/ui@4.5.1(@nuxt/content@3.12.0(better-sqlite3@12.6.2)(magicast@0.5.1))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(focus-trap@7.8.0)(ioredis@5.9.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6)': dependencies: '@floating-ui/dom': 1.7.5 '@iconify/vue': 5.0.0(vue@3.5.28(typescript@5.9.3)) - '@internationalized/date': 3.10.1 + '@internationalized/date': 3.11.0 '@internationalized/number': 3.6.5 - '@nuxt/fonts': 0.12.1(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@nuxt/fonts': 0.14.0(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@nuxt/icon': 2.2.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) '@nuxt/kit': 4.3.1(magicast@0.5.1) '@nuxt/schema': 4.3.1 '@nuxtjs/color-mode': 3.5.2(magicast@0.5.1) '@standard-schema/spec': 1.1.0 - '@tailwindcss/postcss': 4.1.18 - '@tailwindcss/vite': 4.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@tailwindcss/postcss': 4.2.1 + '@tailwindcss/vite': 4.2.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@tanstack/vue-table': 8.21.3(vue@3.5.28(typescript@5.9.3)) - '@tanstack/vue-virtual': 3.13.18(vue@3.5.28(typescript@5.9.3)) - '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-bubble-menu': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-code': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) - '@tiptap/extension-collaboration': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29) - '@tiptap/extension-drag-handle': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)) - '@tiptap/extension-drag-handle-vue-3': 3.18.0(@tiptap/extension-drag-handle@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)))(@tiptap/pm@3.18.0)(@tiptap/vue-3@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) - '@tiptap/extension-floating-menu': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-horizontal-rule': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-image': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0)) - '@tiptap/extension-mention': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/suggestion@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) - '@tiptap/extension-node-range': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/extension-placeholder': 3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)) - '@tiptap/markdown': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/pm': 3.18.0 - '@tiptap/starter-kit': 3.18.0 - '@tiptap/suggestion': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) - '@tiptap/vue-3': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.28(typescript@5.9.3)) - '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3)) + '@tanstack/vue-virtual': 3.13.19(vue@3.5.28(typescript@5.9.3)) + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-bubble-menu': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-code': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-collaboration': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29) + '@tiptap/extension-drag-handle': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)) + '@tiptap/extension-drag-handle-vue-3': 3.20.0(@tiptap/extension-drag-handle@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)))(@tiptap/pm@3.20.0)(@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) + '@tiptap/extension-floating-menu': 3.20.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-horizontal-rule': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-image': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-mention': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/suggestion@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)) + '@tiptap/extension-node-range': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-placeholder': 3.20.0(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)) + '@tiptap/markdown': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/starter-kit': 3.20.0 + '@tiptap/suggestion': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/vue-3': 3.20.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.28(typescript@5.9.3)) + '@unhead/vue': 2.1.10(vue@3.5.28(typescript@5.9.3)) '@vueuse/core': 14.2.1(vue@3.5.28(typescript@5.9.3)) - '@vueuse/integrations': 14.2.0(change-case@5.4.4)(focus-trap@7.8.0)(fuse.js@7.1.0)(vue@3.5.28(typescript@5.9.3)) + '@vueuse/integrations': 14.2.1(change-case@5.4.4)(focus-trap@7.8.0)(fuse.js@7.1.0)(vue@3.5.28(typescript@5.9.3)) '@vueuse/shared': 14.2.1(vue@3.5.28(typescript@5.9.3)) colortranslator: 5.0.0 consola: 3.4.2 @@ -11425,24 +11975,24 @@ snapshots: knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.0 - motion-v: 1.10.2(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)) + motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)) ohash: 2.0.11 pathe: 2.0.3 - reka-ui: 2.7.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)) + reka-ui: 2.8.2(vue@3.5.28(typescript@5.9.3)) scule: 1.3.0 - tailwind-merge: 3.4.0 - tailwind-variants: 3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.18) - tailwindcss: 4.1.18 + tailwind-merge: 3.5.0 + tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.0) + tailwindcss: 4.2.0 tinyglobby: 0.2.15 typescript: 5.9.3 ufo: 1.6.3 - unplugin: 2.3.11 + unplugin: 3.0.0 unplugin-auto-import: 21.0.0(@nuxt/kit@4.3.1(magicast@0.5.1))(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3))) unplugin-vue-components: 31.0.0(@nuxt/kit@4.3.1(magicast@0.5.1))(vue@3.5.28(typescript@5.9.3)) - vaul-vue: 0.4.1(reka-ui@2.7.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) - vue-component-type-helpers: 3.2.4 + vaul-vue: 0.4.1(reka-ui@2.8.2(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) + vue-component-type-helpers: 3.2.5 optionalDependencies: - '@nuxt/content': 3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1) + '@nuxt/content': 3.12.0(better-sqlite3@12.6.2)(magicast@0.5.1) vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3)) zod: 4.3.6 transitivePeerDependencies: @@ -11556,7 +12106,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxtjs/i18n@10.2.1(@vue/compiler-dom@3.5.28)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.0.0(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(rollup@4.57.1)(vue@3.5.28(typescript@5.9.3))': + '@nuxtjs/i18n@10.2.3(@vue/compiler-dom@3.5.28)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.0.0(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(rollup@4.57.1)(vue@3.5.28(typescript@5.9.3))': dependencies: '@intlify/core': 11.2.8 '@intlify/h3': 0.7.4 @@ -11566,9 +12116,9 @@ snapshots: '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.57.1) '@nuxt/kit': 4.3.1(magicast@0.5.1) '@rollup/plugin-yaml': 4.1.2(rollup@4.57.1) - '@vue/compiler-sfc': 3.5.27 + '@vue/compiler-sfc': 3.5.28 defu: 6.1.4 - devalue: 5.6.2 + devalue: 5.6.3 h3: 1.15.5 knitwork: 1.3.0 magic-string: 0.30.21 @@ -11582,7 +12132,7 @@ snapshots: typescript: 5.9.3 ufo: 1.6.3 unplugin: 2.3.11 - unplugin-vue-router: 0.16.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) + unplugin-vue-router: 0.16.2(@vue/compiler-sfc@3.5.28)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)) unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2) vue-i18n: 11.2.8(vue@3.5.28(typescript@5.9.3)) vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3)) @@ -11614,72 +12164,19 @@ snapshots: - uploadthing - vue - '@nuxtjs/mcp-toolkit@0.6.2(hono@4.11.7)(magicast@0.5.1)(zod@4.3.6)': + '@nuxtjs/mcp-toolkit@0.7.0(magicast@0.5.1)(zod@4.3.6)': dependencies: - '@clack/prompts': 0.11.0 - '@modelcontextprotocol/sdk': 1.25.3(hono@4.11.7)(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.27.1(zod@4.3.6) '@nuxt/kit': 4.3.1(magicast@0.5.1) - automd: 0.4.3(magicast@0.5.1) - chokidar: 5.0.0 defu: 6.1.4 ms: 2.1.3 pathe: 2.0.3 - satori: 0.18.4 + satori: 0.19.3 scule: 1.3.0 tinyglobby: 0.2.15 zod: 4.3.6 transitivePeerDependencies: - '@cfworker/json-schema' - - hono - - magicast - - supports-color - - '@nuxtjs/mdc@0.20.0(magicast@0.5.1)': - dependencies: - '@nuxt/kit': 4.3.1(magicast@0.5.1) - '@shikijs/core': 3.22.0 - '@shikijs/langs': 3.22.0 - '@shikijs/themes': 3.22.0 - '@shikijs/transformers': 3.22.0 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@vue/compiler-core': 3.5.27 - consola: 3.4.2 - debug: 4.4.3 - defu: 6.1.4 - destr: 2.0.5 - detab: 3.0.2 - github-slugger: 2.0.0 - hast-util-format: 1.1.0 - hast-util-to-mdast: 10.1.2 - hast-util-to-string: 3.0.1 - mdast-util-to-hast: 13.2.1 - micromark-util-sanitize-uri: 2.0.1 - parse5: 8.0.0 - pathe: 2.0.3 - property-information: 7.1.0 - rehype-external-links: 3.0.0 - rehype-minify-whitespace: 6.0.2 - rehype-raw: 7.0.0 - rehype-remark: 10.0.1 - rehype-slug: 6.0.0 - rehype-sort-attribute-values: 5.0.1 - rehype-sort-attributes: 5.0.1 - remark-emoji: 5.0.2 - remark-gfm: 4.0.1 - remark-mdc: 3.10.0 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - remark-stringify: 11.0.0 - scule: 1.3.0 - shiki: 3.22.0 - ufo: 1.6.3 - unified: 11.0.5 - unist-builder: 4.0.0 - unist-util-visit: 5.1.0 - unwasm: 0.5.3 - vfile: 6.0.3 - transitivePeerDependencies: - magicast - supports-color @@ -11735,7 +12232,7 @@ snapshots: '@nuxtjs/robots@5.7.0(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)': dependencies: '@fingerprintjs/botd': 2.0.0 - '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@nuxt/devtools-kit': 3.2.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@nuxt/kit': 4.3.1(magicast@0.5.1) consola: 3.4.2 defu: 6.1.4 @@ -12198,7 +12695,7 @@ snapshots: conventional-changelog-conventionalcommits: 9.1.0 conventional-recommended-bump: 11.2.0 release-it: 19.2.4(@types/node@25.3.0)(magicast@0.5.1) - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser @@ -12480,6 +12977,14 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 + '@shikijs/core@4.0.1': + dependencies: + '@shikijs/primitive': 4.0.1 + '@shikijs/types': 4.0.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + '@shikijs/engine-javascript@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -12498,6 +13003,12 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.4 + '@shikijs/engine-javascript@4.0.1': + dependencies: + '@shikijs/types': 4.0.1 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.4 + '@shikijs/engine-oniguruma@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -12513,6 +13024,11 @@ snapshots: '@shikijs/types': 3.22.0 '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/engine-oniguruma@4.0.1': + dependencies: + '@shikijs/types': 4.0.1 + '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/langs@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -12525,12 +13041,26 @@ snapshots: dependencies: '@shikijs/types': 3.22.0 + '@shikijs/langs@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/langs@4.0.1': + dependencies: + '@shikijs/types': 4.0.1 + '@shikijs/primitive@4.0.0': dependencies: '@shikijs/types': 4.0.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/primitive@4.0.1': + dependencies: + '@shikijs/types': 4.0.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/themes@1.29.2': dependencies: '@shikijs/types': 1.29.2 @@ -12543,6 +13073,10 @@ snapshots: dependencies: '@shikijs/types': 3.22.0 + '@shikijs/themes@4.0.1': + dependencies: + '@shikijs/types': 4.0.1 + '@shikijs/transformers@2.5.0': dependencies: '@shikijs/core': 2.5.0 @@ -12568,11 +13102,21 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/types@4.0.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/types@4.0.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/vscode-textmate@10.0.2': {} '@shuding/opentype.js@1.4.0-beta.0': @@ -12608,13 +13152,45 @@ snapshots: '@stylistic/eslint-plugin@5.8.0(eslint@10.0.0(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0(jiti@2.6.1)) - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/types': 8.55.0 eslint: 10.0.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 picomatch: 4.0.3 + '@sveltejs/acorn-typescript@1.0.9(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + + '@sveltejs/package@2.5.7(svelte@5.53.7)(typescript@5.9.3)': + dependencies: + chokidar: 5.0.0 + kleur: 4.1.5 + sade: 1.8.1 + semver: 7.7.4 + svelte: 5.53.7 + svelte2tsx: 0.7.51(svelte@5.53.7)(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + obug: 2.1.1 + svelte: 5.53.7 + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.7)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + deepmerge: 4.3.1 + magic-string: 0.30.21 + obug: 2.1.1 + svelte: 5.53.7 + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@swc/helpers@0.5.18': dependencies: tslib: 2.8.1 @@ -12639,78 +13215,124 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.2.0 + '@tailwindcss/node@4.2.1': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.19.0 + jiti: 2.6.1 + lightningcss: 1.31.1 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.1 + '@tailwindcss/oxide-android-arm64@4.1.18': optional: true '@tailwindcss/oxide-android-arm64@4.2.0': optional: true + '@tailwindcss/oxide-android-arm64@4.2.1': + optional: true + '@tailwindcss/oxide-darwin-arm64@4.1.18': optional: true '@tailwindcss/oxide-darwin-arm64@4.2.0': optional: true + '@tailwindcss/oxide-darwin-arm64@4.2.1': + optional: true + '@tailwindcss/oxide-darwin-x64@4.1.18': optional: true '@tailwindcss/oxide-darwin-x64@4.2.0': optional: true + '@tailwindcss/oxide-darwin-x64@4.2.1': + optional: true + '@tailwindcss/oxide-freebsd-x64@4.1.18': optional: true '@tailwindcss/oxide-freebsd-x64@4.2.0': optional: true + '@tailwindcss/oxide-freebsd-x64@4.2.1': + optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': optional: true '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0': optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': + optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': optional: true '@tailwindcss/oxide-linux-arm64-gnu@4.2.0': optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': + optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': optional: true '@tailwindcss/oxide-linux-arm64-musl@4.2.0': optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.2.1': + optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': optional: true '@tailwindcss/oxide-linux-x64-gnu@4.2.0': optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.2.1': + optional: true + '@tailwindcss/oxide-linux-x64-musl@4.1.18': optional: true '@tailwindcss/oxide-linux-x64-musl@4.2.0': optional: true + '@tailwindcss/oxide-linux-x64-musl@4.2.1': + optional: true + '@tailwindcss/oxide-wasm32-wasi@4.1.18': optional: true '@tailwindcss/oxide-wasm32-wasi@4.2.0': optional: true + '@tailwindcss/oxide-wasm32-wasi@4.2.1': + optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': optional: true '@tailwindcss/oxide-win32-arm64-msvc@4.2.0': optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': + optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': optional: true '@tailwindcss/oxide-win32-x64-msvc@4.2.0': optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.2.1': + optional: true + '@tailwindcss/oxide@4.1.18': optionalDependencies: '@tailwindcss/oxide-android-arm64': 4.1.18 @@ -12741,6 +13363,21 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.0 '@tailwindcss/oxide-win32-x64-msvc': 4.2.0 + '@tailwindcss/oxide@4.2.1': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.1 + '@tailwindcss/oxide-darwin-arm64': 4.2.1 + '@tailwindcss/oxide-darwin-x64': 4.2.1 + '@tailwindcss/oxide-freebsd-x64': 4.2.1 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.1 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.1 + '@tailwindcss/oxide-linux-x64-musl': 4.2.1 + '@tailwindcss/oxide-wasm32-wasi': 4.2.1 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 + '@tailwindcss/postcss@4.1.18': dependencies: '@alloc/quick-lru': 5.2.0 @@ -12749,10 +13386,18 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.18 - '@tailwindcss/typography@0.5.19(tailwindcss@4.1.18)': + '@tailwindcss/postcss@4.2.1': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.2.1 + '@tailwindcss/oxide': 4.2.1 + postcss: 8.5.6 + tailwindcss: 4.2.1 + + '@tailwindcss/typography@0.5.19(tailwindcss@4.2.0)': dependencies: postcss-selector-parser: 6.0.10 - tailwindcss: 4.1.18 + tailwindcss: 4.2.0 '@tailwindcss/vite@4.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: @@ -12761,10 +13406,19 @@ snapshots: tailwindcss: 4.2.0 vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@tailwindcss/node': 4.2.1 + '@tailwindcss/oxide': 4.2.1 + tailwindcss: 4.2.1 + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + '@tanstack/table-core@8.21.3': {} '@tanstack/virtual-core@3.13.18': {} + '@tanstack/virtual-core@3.13.19': {} + '@tanstack/vue-table@8.21.3(vue@3.5.28(typescript@5.9.3))': dependencies: '@tanstack/table-core': 8.21.3 @@ -12775,37 +13429,73 @@ snapshots: '@tanstack/virtual-core': 3.13.18 vue: 3.5.28(typescript@5.9.3) + '@tanstack/vue-virtual@3.13.19(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@tanstack/virtual-core': 3.13.19 + vue: 3.5.28(typescript@5.9.3) + '@tiptap/core@3.18.0(@tiptap/pm@3.18.0)': dependencies: '@tiptap/pm': 3.18.0 + '@tiptap/core@3.20.0(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/pm': 3.20.0 + '@tiptap/extension-blockquote@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-blockquote@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-bold@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-bold@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-bubble-menu@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@floating-ui/dom': 1.7.5 '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/extension-bubble-menu@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@floating-ui/dom': 1.7.5 + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/extension-bullet-list@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-bullet-list@3.20.0(@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/extension-list': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-code-block@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/extension-code-block@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/extension-code@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-code@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) @@ -12813,10 +13503,21 @@ snapshots: '@tiptap/y-tiptap': 3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29) yjs: 13.6.29 + '@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/y-tiptap': 3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29) + yjs: 13.6.29 + '@tiptap/extension-document@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-document@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-drag-handle-vue-3@3.18.0(@tiptap/extension-drag-handle@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)))(@tiptap/pm@3.18.0)(@tiptap/vue-3@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))': dependencies: '@tiptap/extension-drag-handle': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)) @@ -12824,6 +13525,13 @@ snapshots: '@tiptap/vue-3': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.28(typescript@5.9.3)) vue: 3.5.28(typescript@5.9.3) + '@tiptap/extension-drag-handle-vue-3@3.20.0(@tiptap/extension-drag-handle@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)))(@tiptap/pm@3.20.0)(@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@tiptap/extension-drag-handle': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)) + '@tiptap/pm': 3.20.0 + '@tiptap/vue-3': 3.20.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.28(typescript@5.9.3)) + vue: 3.5.28(typescript@5.9.3) + '@tiptap/extension-drag-handle@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))': dependencies: '@floating-ui/dom': 1.7.5 @@ -12833,106 +13541,220 @@ snapshots: '@tiptap/pm': 3.18.0 '@tiptap/y-tiptap': 3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29) + '@tiptap/extension-drag-handle@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/extension-collaboration@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29))(@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))': + dependencies: + '@floating-ui/dom': 1.7.5 + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-collaboration': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29) + '@tiptap/extension-node-range': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/y-tiptap': 3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29) + '@tiptap/extension-dropcursor@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-dropcursor@3.20.0(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/extensions': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-floating-menu@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@floating-ui/dom': 1.7.5 '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/extension-floating-menu@3.20.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@floating-ui/dom': 1.7.5 + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/extension-gapcursor@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-gapcursor@3.20.0(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/extensions': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-hard-break@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-hard-break@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-heading@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-heading@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-horizontal-rule@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/extension-horizontal-rule@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/extension-image@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-image@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-italic@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-italic@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-link@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 linkifyjs: 4.3.2 + '@tiptap/extension-link@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + linkifyjs: 4.3.2 + '@tiptap/extension-list-item@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-list-item@3.20.0(@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/extension-list': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-list-keymap@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-list-keymap@3.20.0(@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/extension-list': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/extension-mention@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/suggestion@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 '@tiptap/suggestion': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-mention@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(@tiptap/suggestion@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/suggestion': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/extension-node-range@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/extension-ordered-list@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': dependencies: '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/extension-ordered-list@3.20.0(@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/extension-list': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-paragraph@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) - '@tiptap/extension-placeholder@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': + '@tiptap/extension-paragraph@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': dependencies: - '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + + '@tiptap/extension-placeholder@3.18.0(@tiptap/extensions@3.20.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))': + dependencies: + '@tiptap/extensions': 3.20.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + + '@tiptap/extension-placeholder@3.20.0(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/extensions': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) '@tiptap/extension-strike@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-strike@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-text@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-text@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-underline@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/extension-underline@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/extensions@3.20.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': + dependencies: + '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) + '@tiptap/pm': 3.18.0 + + '@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/markdown@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 marked: 17.0.1 + '@tiptap/markdown@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + marked: 17.0.1 + '@tiptap/pm@3.18.0': dependencies: prosemirror-changeset: 2.3.1 @@ -12954,6 +13776,27 @@ snapshots: prosemirror-transform: 1.11.0 prosemirror-view: 1.41.5 + '@tiptap/pm@3.20.0': + dependencies: + prosemirror-changeset: 2.3.1 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.2 + prosemirror-gapcursor: 1.4.0 + prosemirror-history: 1.5.0 + prosemirror-inputrules: 1.5.1 + prosemirror-keymap: 1.2.3 + prosemirror-markdown: 1.13.3 + prosemirror-menu: 1.2.5 + prosemirror-model: 1.25.4 + prosemirror-schema-basic: 1.2.4 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.5 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5) + prosemirror-transform: 1.11.0 + prosemirror-view: 1.41.5 + '@tiptap/starter-kit@3.18.0': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) @@ -12981,11 +13824,43 @@ snapshots: '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/starter-kit@3.20.0': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/extension-blockquote': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-bold': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-bullet-list': 3.20.0(@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)) + '@tiptap/extension-code': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-code-block': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-document': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-dropcursor': 3.20.0(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)) + '@tiptap/extension-gapcursor': 3.20.0(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)) + '@tiptap/extension-hard-break': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-heading': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-horizontal-rule': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-italic': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-link': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-list': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-list-item': 3.20.0(@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)) + '@tiptap/extension-list-keymap': 3.20.0(@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)) + '@tiptap/extension-ordered-list': 3.20.0(@tiptap/extension-list@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)) + '@tiptap/extension-paragraph': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-strike': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-text': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extension-underline': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0)) + '@tiptap/extensions': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/suggestion@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)': dependencies: '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0) '@tiptap/pm': 3.18.0 + '@tiptap/suggestion@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)': + dependencies: + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + '@tiptap/vue-3@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.28(typescript@5.9.3))': dependencies: '@floating-ui/dom': 1.7.5 @@ -12996,6 +13871,16 @@ snapshots: '@tiptap/extension-bubble-menu': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) '@tiptap/extension-floating-menu': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0) + '@tiptap/vue-3@3.20.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0)(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@floating-ui/dom': 1.7.5 + '@tiptap/core': 3.20.0(@tiptap/pm@3.20.0) + '@tiptap/pm': 3.20.0 + vue: 3.5.28(typescript@5.9.3) + optionalDependencies: + '@tiptap/extension-bubble-menu': 3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/extension-floating-menu': 3.20.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0) + '@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29)': dependencies: lib0: 0.2.117 @@ -13103,6 +13988,8 @@ snapshots: '@types/resolve@1.20.2': {} + '@types/trusted-types@2.0.7': {} + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} @@ -13139,15 +14026,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.55.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) @@ -13157,20 +14035,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - '@typescript-eslint/scope-manager@8.55.0': dependencies: '@typescript-eslint/types': 8.55.0 '@typescript-eslint/visitor-keys': 8.55.0 - '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -13187,25 +14056,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.54.0': {} - '@typescript-eslint/types@8.55.0': {} - '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.55.0(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.55.0(typescript@5.9.3) @@ -13214,7 +14066,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.55.0 debug: 4.4.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 @@ -13232,11 +14084,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.55.0': dependencies: '@typescript-eslint/types': 8.55.0 @@ -13244,6 +14091,12 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@unhead/vue@2.1.10(vue@3.5.28(typescript@5.9.3))': + dependencies: + hookable: 6.0.1 + unhead: 2.1.10 + vue: 3.5.28(typescript@5.9.3) + '@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3))': dependencies: hookable: 6.0.1 @@ -13332,9 +14185,10 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vercel/analytics@1.6.1(react@19.2.4)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))': + '@vercel/analytics@1.6.1(react@19.2.4)(svelte@5.53.7)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))': optionalDependencies: react: 19.2.4 + svelte: 5.53.7 vue: 3.5.28(typescript@5.9.3) vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3)) @@ -13359,9 +14213,10 @@ snapshots: '@vercel/oidc@3.1.0': {} - '@vercel/speed-insights@1.3.1(react@19.2.4)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))': + '@vercel/speed-insights@1.3.1(react@19.2.4)(svelte@5.53.7)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))': optionalDependencies: react: 19.2.4 + svelte: 5.53.7 vue: 3.5.28(typescript@5.9.3) vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3)) @@ -13394,7 +14249,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.2 + '@rolldown/pluginutils': 1.0.0-rc.5 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.28(typescript@5.9.3) @@ -13412,6 +14267,36 @@ snapshots: vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vue: 3.5.28(typescript@5.9.3) + '@vitest/browser-playwright@4.0.18(playwright@1.58.2)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': + dependencies: + '@vitest/browser': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + playwright: 1.58.2 + tinyrainbow: 3.0.3 + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/browser@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': + dependencies: + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/utils': 4.0.18 + magic-string: 0.30.21 + pixelmatch: 7.1.0 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.0.3 + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + '@vitest/expect@4.0.18': dependencies: '@standard-schema/spec': 1.1.0 @@ -13465,7 +14350,7 @@ snapshots: '@vue-macros/common@3.1.2(vue@3.5.28(typescript@5.9.3))': dependencies: - '@vue/compiler-sfc': 3.5.27 + '@vue/compiler-sfc': 3.5.28 ast-kit: 2.2.0 local-pkg: 1.1.2 magic-string-ast: 1.0.3 @@ -13498,18 +14383,10 @@ snapshots: '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/parser': 7.29.0 - '@vue/compiler-sfc': 3.5.27 + '@vue/compiler-sfc': 3.5.28 transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.27': - dependencies: - '@babel/parser': 7.29.0 - '@vue/shared': 3.5.27 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - '@vue/compiler-core@3.5.28': dependencies: '@babel/parser': 7.29.0 @@ -13518,28 +14395,11 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.27': - dependencies: - '@vue/compiler-core': 3.5.27 - '@vue/shared': 3.5.27 - '@vue/compiler-dom@3.5.28': dependencies: '@vue/compiler-core': 3.5.28 '@vue/shared': 3.5.28 - '@vue/compiler-sfc@3.5.27': - dependencies: - '@babel/parser': 7.29.0 - '@vue/compiler-core': 3.5.27 - '@vue/compiler-dom': 3.5.27 - '@vue/compiler-ssr': 3.5.27 - '@vue/shared': 3.5.27 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.6 - source-map-js: 1.2.1 - '@vue/compiler-sfc@3.5.28': dependencies: '@babel/parser': 7.29.0 @@ -13552,11 +14412,6 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.27': - dependencies: - '@vue/compiler-dom': 3.5.27 - '@vue/shared': 3.5.27 - '@vue/compiler-ssr@3.5.28': dependencies: '@vue/compiler-dom': 3.5.28 @@ -13574,8 +14429,8 @@ snapshots: '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))': dependencies: - '@vue/devtools-kit': 8.0.5 - '@vue/devtools-shared': 8.0.5 + '@vue/devtools-kit': 8.0.6 + '@vue/devtools-shared': 8.0.6 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 @@ -13594,16 +14449,6 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.6 - '@vue/devtools-kit@8.0.5': - dependencies: - '@vue/devtools-shared': 8.0.5 - birpc: 2.9.0 - hookable: 5.5.3 - mitt: 3.0.1 - perfect-debounce: 2.1.0 - speakingurl: 14.0.1 - superjson: 2.2.6 - '@vue/devtools-kit@8.0.6': dependencies: '@vue/devtools-shared': 8.0.6 @@ -13618,10 +14463,6 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/devtools-shared@8.0.5': - dependencies: - rfdc: 1.4.1 - '@vue/devtools-shared@8.0.6': dependencies: rfdc: 1.4.1 @@ -13629,8 +14470,8 @@ snapshots: '@vue/language-core@3.2.4': dependencies: '@volar/language-core': 2.4.27 - '@vue/compiler-dom': 3.5.27 - '@vue/shared': 3.5.27 + '@vue/compiler-dom': 3.5.28 + '@vue/shared': 3.5.28 alien-signals: 3.1.2 muggle-string: 0.4.1 path-browserify: 1.0.1 @@ -13658,8 +14499,6 @@ snapshots: '@vue/shared': 3.5.28 vue: 3.5.28(typescript@5.9.3) - '@vue/shared@3.5.27': {} - '@vue/shared@3.5.28': {} '@vueuse/core@10.11.1(vue@3.5.28(typescript@5.9.3))': @@ -13717,6 +14556,16 @@ snapshots: focus-trap: 7.8.0 fuse.js: 7.1.0 + '@vueuse/integrations@14.2.1(change-case@5.4.4)(focus-trap@7.8.0)(fuse.js@7.1.0)(vue@3.5.28(typescript@5.9.3))': + dependencies: + '@vueuse/core': 14.2.1(vue@3.5.28(typescript@5.9.3)) + '@vueuse/shared': 14.2.1(vue@3.5.28(typescript@5.9.3)) + vue: 3.5.28(typescript@5.9.3) + optionalDependencies: + change-case: 5.4.4 + focus-trap: 7.8.0 + fuse.js: 7.1.0 + '@vueuse/metadata@10.11.1': {} '@vueuse/metadata@12.8.2': {} @@ -13779,6 +14628,14 @@ snapshots: '@opentelemetry/api': 1.9.0 zod: 4.3.6 + ai@6.0.86(zod@4.3.6): + dependencies: + '@ai-sdk/gateway': 3.0.46(zod@4.3.6) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6) + '@opentelemetry/api': 1.9.0 + zod: 4.3.6 + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -13868,6 +14725,8 @@ snapshots: dependencies: tslib: 2.8.1 + aria-query@5.3.1: {} + aria-query@5.3.2: {} array-find-index@1.0.2: {} @@ -13918,7 +14777,7 @@ snapshots: cssesc: 3.0.0 debug: 4.4.3 deterministic-object-hash: 2.0.2 - devalue: 5.6.2 + devalue: 5.6.3 diff: 8.0.3 dlv: 1.1.3 dset: 3.1.4 @@ -14010,28 +14869,6 @@ snapshots: async@3.2.6: {} - automd@0.4.3(magicast@0.5.1): - dependencies: - '@parcel/watcher': 2.5.6 - c12: 3.3.3(magicast@0.5.1) - citty: 0.2.0 - consola: 3.4.2 - defu: 6.1.4 - destr: 2.0.5 - didyoumean2: 7.0.4 - magic-string: 0.30.21 - mdbox: 0.1.1 - mlly: 1.8.0 - ofetch: 1.5.1 - pathe: 2.0.3 - perfect-debounce: 2.1.0 - pkg-types: 2.3.0 - scule: 1.3.0 - tinyglobby: 0.2.15 - untyped: 2.0.0 - transitivePeerDependencies: - - magicast - autoprefixer@10.4.24(postcss@8.5.6): dependencies: browserslist: 4.28.1 @@ -14171,7 +15008,7 @@ snapshots: c12@3.3.3(magicast@0.5.1): dependencies: chokidar: 5.0.0 - confbox: 0.2.2 + confbox: 0.2.4 defu: 6.1.4 dotenv: 17.2.3 exsolve: 1.0.8 @@ -14365,8 +15202,6 @@ snapshots: confbox@0.1.8: {} - confbox@0.2.2: {} - confbox@0.2.4: {} consola@3.4.2: {} @@ -14390,7 +15225,7 @@ snapshots: conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 - semver: 7.7.3 + semver: 7.7.4 conventional-changelog@7.1.1(conventional-commits-filter@5.0.0): dependencies: @@ -14582,6 +15417,8 @@ snapshots: dependencies: mimic-response: 3.1.0 + dedent-js@1.0.1: {} + deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -14629,7 +15466,7 @@ snapshots: dependencies: base-64: 1.0.0 - devalue@5.6.2: {} + devalue@5.6.3: {} devlop@1.1.0: dependencies: @@ -14637,44 +15474,46 @@ snapshots: dfa@1.2.0: {} - didyoumean2@7.0.4: - dependencies: - '@babel/runtime': 7.28.6 - fastest-levenshtein: 1.0.16 - lodash.deburr: 4.1.0 - diff3@0.0.3: {} diff@8.0.3: {} dlv@1.1.3: {} - docus@5.4.4(acdc5dbaf007122855baa5a73f3365ea): + docus@5.7.0(a0481367015df2a1a40fc0fc9364cdd2): dependencies: - '@iconify-json/lucide': 1.2.88 - '@iconify-json/simple-icons': 1.2.69 - '@iconify-json/vscode-icons': 1.2.40 - '@nuxt/content': 3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1) + '@ai-sdk/gateway': 3.0.63(zod@4.3.6) + '@ai-sdk/mcp': 1.0.23(zod@4.3.6) + '@ai-sdk/vue': 3.0.86(vue@3.5.28(typescript@5.9.3))(zod@4.3.6) + '@iconify-json/lucide': 1.2.91 + '@iconify-json/simple-icons': 1.2.72 + '@iconify-json/vscode-icons': 1.2.44 + '@nuxt/content': 3.12.0(better-sqlite3@12.6.2)(magicast@0.5.1) '@nuxt/image': 2.0.0(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1) - '@nuxt/kit': 4.3.0(magicast@0.5.1) - '@nuxt/ui': 4.4.0(@nuxt/content@3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1))(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6) - '@nuxtjs/i18n': 10.2.1(@vue/compiler-dom@3.5.28)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.0.0(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(rollup@4.57.1)(vue@3.5.28(typescript@5.9.3)) - '@nuxtjs/mcp-toolkit': 0.6.2(hono@4.11.7)(magicast@0.5.1)(zod@4.3.6) - '@nuxtjs/mdc': 0.20.0(magicast@0.5.1) + '@nuxt/kit': 4.3.1(magicast@0.5.1) + '@nuxt/ui': 4.5.1(@nuxt/content@3.12.0(better-sqlite3@12.6.2)(magicast@0.5.1))(@tiptap/extensions@3.20.0(@tiptap/core@3.20.0(@tiptap/pm@3.20.0))(@tiptap/pm@3.20.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(focus-trap@7.8.0)(ioredis@5.9.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(yjs@13.6.29)(zod@4.3.6) + '@nuxtjs/i18n': 10.2.3(@vue/compiler-dom@3.5.28)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.0.0(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(rollup@4.57.1)(vue@3.5.28(typescript@5.9.3)) + '@nuxtjs/mcp-toolkit': 0.7.0(magicast@0.5.1)(zod@4.3.6) + '@nuxtjs/mdc': 0.20.1(magicast@0.5.1) '@nuxtjs/robots': 5.7.0(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6) - '@vueuse/core': 14.2.0(vue@3.5.28(typescript@5.9.3)) + '@shikijs/core': 3.22.0 + '@shikijs/engine-javascript': 3.22.0 + '@shikijs/langs': 3.22.0 + '@shikijs/themes': 3.22.0 + '@vueuse/core': 14.2.1(vue@3.5.28(typescript@5.9.3)) + ai: 6.0.86(zod@4.3.6) better-sqlite3: 12.6.2 defu: 6.1.4 exsolve: 1.0.8 git-url-parse: 16.1.0 - minimark: 0.2.0 - motion-v: 1.10.2(@vueuse/core@14.2.0(vue@3.5.28(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)) + motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)) nuxt: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.0.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.5)(rollup@4.57.1)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) nuxt-llms: 0.2.0(magicast@0.5.1) - nuxt-og-image: 5.1.13(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.1)(unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) + nuxt-og-image: 5.1.13(@unhead/vue@2.1.10(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.1)(unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) pkg-types: 2.3.0 scule: 1.3.0 - tailwindcss: 4.1.18 + shiki-stream: 0.1.4(react@19.2.4)(vue@3.5.28(typescript@5.9.3)) + tailwindcss: 4.2.0 ufo: 1.6.3 zod: 4.3.6 zod-to-json-schema: 3.25.1(zod@4.3.6) @@ -14716,7 +15555,6 @@ snapshots: - embla-carousel - eslint - focus-trap - - hono - idb-keyval - ioredis - joi @@ -14729,6 +15567,7 @@ snapshots: - react - react-dom - rollup + - solid-js - sortablejs - sqlite3 - superstruct @@ -15020,14 +15859,14 @@ snapshots: eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.55.0(eslint@10.0.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.0(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/types': 8.55.0 comment-parser: 1.4.5 debug: 4.4.3 eslint: 10.0.0(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 - minimatch: 10.1.1 - semver: 7.7.3 + minimatch: 10.2.0 + semver: 7.7.4 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: @@ -15049,7 +15888,7 @@ snapshots: html-entities: 2.6.0 object-deep-merge: 2.0.0 parse-imports-exports: 0.2.4 - semver: 7.7.3 + semver: 7.7.4 spdx-expression-parse: 4.0.0 to-valid-identifier: 1.0.0 transitivePeerDependencies: @@ -15061,7 +15900,7 @@ snapshots: '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.5 eslint: 10.0.0(jiti@2.6.1) - jsdoc-type-pratt-parser: 7.1.0 + jsdoc-type-pratt-parser: 7.1.1 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 @@ -15085,7 +15924,7 @@ snapshots: pluralize: 8.0.0 regexp-tree: 0.1.27 regjsparser: 0.13.0 - semver: 7.7.3 + semver: 7.7.4 strip-indent: 4.1.1 eslint-plugin-vue@10.7.0(@stylistic/eslint-plugin@5.8.0(eslint@10.0.0(jiti@2.6.1)))(@typescript-eslint/parser@8.55.0(eslint@10.0.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@10.0.0(jiti@2.6.1))): @@ -15095,7 +15934,7 @@ snapshots: natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 7.1.1 - semver: 7.7.3 + semver: 7.7.4 vue-eslint-parser: 10.2.0(eslint@10.0.0(jiti@2.6.1)) xml-name-validator: 4.0.0 optionalDependencies: @@ -15154,7 +15993,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.1.1 + minimatch: 10.2.0 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -15162,6 +16001,8 @@ snapshots: transitivePeerDependencies: - supports-color + esm-env@1.2.2: {} + espree@10.4.0: dependencies: acorn: 8.15.0 @@ -15186,6 +16027,10 @@ snapshots: dependencies: estraverse: 5.3.0 + esrap@2.2.3: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -15253,9 +16098,10 @@ snapshots: expect-type@1.3.0: {} - express-rate-limit@7.5.1(express@5.2.1): + express-rate-limit@8.2.1(express@5.2.1): dependencies: express: 5.2.1 + ip-address: 10.0.1 express@5.2.1: dependencies: @@ -15316,8 +16162,6 @@ snapshots: fast-uri@3.1.0: {} - fastest-levenshtein@1.0.16: {} - fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -15521,6 +16365,9 @@ snapshots: fs-constants@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -15581,7 +16428,7 @@ snapshots: consola: 3.4.2 defu: 6.1.4 node-fetch-native: 1.6.7 - nypm: 0.6.4 + nypm: 0.6.5 pathe: 2.0.3 giget@3.1.2: {} @@ -15618,7 +16465,7 @@ snapshots: glob@13.0.0: dependencies: - minimatch: 10.1.1 + minimatch: 10.2.0 minipass: 7.1.2 path-scurry: 2.0.1 @@ -15951,6 +16798,8 @@ snapshots: transitivePeerDependencies: - supports-color + ip-address@10.0.1: {} + ip-address@10.1.0: {} ipaddr.js@1.9.1: {} @@ -16059,6 +16908,10 @@ snapshots: dependencies: '@types/estree': 1.0.8 + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + is-ssh@1.4.1: dependencies: protocols: 2.0.2 @@ -16097,7 +16950,7 @@ snapshots: isexe@3.1.1: {} - isomorphic-git@1.36.3: + isomorphic-git@1.37.2: dependencies: async-lock: 1.4.1 clean-git-ref: 2.0.1 @@ -16143,8 +16996,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsdoc-type-pratt-parser@7.1.0: {} - jsdoc-type-pratt-parser@7.1.1: {} jsesc@3.1.0: {} @@ -16361,14 +17212,14 @@ snapshots: pkg-types: 2.3.0 quansync: 0.2.11 + locate-character@3.0.0: {} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 lodash.capitalize@4.2.1: {} - lodash.deburr@4.1.0: {} - lodash.defaults@4.2.0: {} lodash.escaperegexp@4.1.2: {} @@ -16470,8 +17321,6 @@ snapshots: math-intrinsics@1.1.0: {} - md4w@0.2.7: {} - mdast-util-definitions@6.0.0: dependencies: '@types/mdast': 4.0.4 @@ -16592,10 +17441,6 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - mdbox@0.1.1: - dependencies: - md4w: 0.2.7 - mdn-data@2.0.28: {} mdn-data@2.12.2: {} @@ -16824,11 +17669,11 @@ snapshots: minimark@0.2.0: {} - minimatch@10.1.1: + minimatch@10.2.0: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.2 - minimatch@10.2.0: + minimatch@10.2.4: dependencies: brace-expansion: 5.0.2 @@ -16877,9 +17722,9 @@ snapshots: motion-utils@12.29.2: {} - motion-v@1.10.2(@vueuse/core@14.2.0(vue@3.5.28(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)): + motion-v@1.10.2(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)): dependencies: - '@vueuse/core': 14.2.0(vue@3.5.28(typescript@5.9.3)) + '@vueuse/core': 14.2.1(vue@3.5.28(typescript@5.9.3)) framer-motion: 12.30.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) hey-listen: 1.0.8 motion-dom: 12.30.1 @@ -16889,7 +17734,7 @@ snapshots: - react - react-dom - motion-v@1.10.2(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)): + motion-v@1.10.3(@vueuse/core@14.2.1(vue@3.5.28(typescript@5.9.3)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)): dependencies: '@vueuse/core': 14.2.1(vue@3.5.28(typescript@5.9.3)) framer-motion: 12.30.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -16901,6 +17746,8 @@ snapshots: - react - react-dom + mri@1.2.0: {} + mrmime@2.0.1: {} ms@2.1.3: {} @@ -16949,7 +17796,7 @@ snapshots: chokidar: 5.0.0 citty: 0.1.6 compatx: 0.2.0 - confbox: 0.2.2 + confbox: 0.2.4 consola: 3.4.2 cookie-es: 2.0.0 croner: 9.1.0 @@ -17073,7 +17920,7 @@ snapshots: normalize-package-data@7.0.1: dependencies: hosted-git-info: 8.1.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -17091,19 +17938,6 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt-component-meta@0.17.1(magicast@0.5.1): - dependencies: - '@nuxt/kit': 4.3.1(magicast@0.5.1) - citty: 0.1.6 - mlly: 1.8.0 - ohash: 2.0.11 - scule: 1.3.0 - typescript: 5.9.3 - ufo: 1.6.3 - vue-component-meta: 3.2.4(typescript@5.9.3) - transitivePeerDependencies: - - magicast - nuxt-component-meta@0.17.2(magicast@0.5.1): dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.1) @@ -17125,13 +17959,13 @@ snapshots: transitivePeerDependencies: - magicast - nuxt-og-image@5.1.13(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.1)(unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)): + nuxt-og-image@5.1.13(@unhead/vue@2.1.10(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.1)(unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)): dependencies: - '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@nuxt/devtools-kit': 3.2.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@nuxt/kit': 4.3.1(magicast@0.5.1) '@resvg/resvg-js': 2.6.2 '@resvg/resvg-wasm': 2.6.2 - '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3)) + '@unhead/vue': 2.1.10(vue@3.5.28(typescript@5.9.3)) '@unocss/core': 66.6.0 '@unocss/preset-wind3': 66.6.0 chrome-launcher: 1.2.1 @@ -17142,12 +17976,12 @@ snapshots: magic-string: 0.30.21 mocked-exports: 0.1.1 nuxt-site-config: 3.2.19(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)) - nypm: 0.6.4 + nypm: 0.6.5 ofetch: 1.5.1 ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 - playwright-core: 1.58.1 + playwright-core: 1.58.2 radix3: 1.1.2 satori: 0.18.4 satori-html: 0.3.2 @@ -17178,7 +18012,7 @@ snapshots: nuxt-site-config@3.2.19(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)): dependencies: - '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@nuxt/devtools-kit': 3.2.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@nuxt/kit': 4.3.1(magicast@0.5.1) h3: 1.15.5 nuxt-site-config-kit: 3.2.19(magicast@0.5.1)(vue@3.5.28(typescript@5.9.3)) @@ -17245,7 +18079,7 @@ snapshots: '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.1)) '@nuxt/vite-builder': 4.3.1(@types/node@25.3.0)(eslint@10.0.0(jiti@2.6.1))(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.3.0)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.0.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.5)(rollup@4.57.1)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rolldown@1.0.0-rc.5)(rollup@4.57.1)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2) '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3)) - '@vue/shared': 3.5.27 + '@vue/shared': 3.5.28 c12: 3.3.3(magicast@0.5.1) chokidar: 5.0.0 compatx: 0.2.0 @@ -17253,7 +18087,7 @@ snapshots: cookie-es: 2.0.0 defu: 6.1.4 destr: 2.0.5 - devalue: 5.6.2 + devalue: 5.6.3 errx: 0.1.0 escape-string-regexp: 5.0.0 exsolve: 1.0.8 @@ -17357,12 +18191,6 @@ snapshots: - xml2js - yaml - nypm@0.6.4: - dependencies: - citty: 0.2.0 - pathe: 2.0.3 - tinyexec: 1.0.2 - nypm@0.6.5: dependencies: citty: 0.2.0 @@ -17750,6 +18578,10 @@ snapshots: pify@4.0.1: {} + pixelmatch@7.1.0: + dependencies: + pngjs: 7.0.0 + pkce-challenge@5.0.1: {} pkg-types@1.3.1: @@ -17760,14 +18592,22 @@ snapshots: pkg-types@2.3.0: dependencies: - confbox: 0.2.2 + confbox: 0.2.4 exsolve: 1.0.8 pathe: 2.0.3 - playwright-core@1.58.1: {} + playwright-core@1.58.2: {} + + playwright@1.58.2: + dependencies: + playwright-core: 1.58.2 + optionalDependencies: + fsevents: 2.3.2 pluralize@8.0.0: {} + pngjs@7.0.0: {} + possible-typed-array-names@1.1.0: {} postcss-calc@10.1.1(postcss@8.5.6): @@ -18317,6 +19157,22 @@ snapshots: - '@vue/composition-api' - typescript + reka-ui@2.8.2(vue@3.5.28(typescript@5.9.3)): + dependencies: + '@floating-ui/dom': 1.7.5 + '@floating-ui/vue': 1.1.10(vue@3.5.28(typescript@5.9.3)) + '@internationalized/date': 3.11.0 + '@internationalized/number': 3.6.5 + '@tanstack/vue-virtual': 3.13.19(vue@3.5.28(typescript@5.9.3)) + '@vueuse/core': 14.2.1(vue@3.5.28(typescript@5.9.3)) + '@vueuse/shared': 14.2.1(vue@3.5.28(typescript@5.9.3)) + aria-hidden: 1.2.6 + defu: 6.1.4 + ohash: 2.0.11 + vue: 3.5.28(typescript@5.9.3) + transitivePeerDependencies: + - '@vue/composition-api' + release-it@19.2.4(@types/node@25.3.0)(magicast@0.5.1): dependencies: '@nodeutils/defaults-deep': 1.1.0 @@ -18591,6 +19447,10 @@ snapshots: dependencies: tslib: 2.8.1 + sade@1.8.1: + dependencies: + mri: 1.2.0 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -18615,6 +19475,20 @@ snapshots: postcss-value-parser: 4.2.0 yoga-layout: 3.2.1 + satori@0.19.3: + dependencies: + '@shuding/opentype.js': 1.4.0-beta.0 + css-background-parser: 0.1.0 + css-box-shadow: 1.0.0-3 + css-gradient-parser: 0.0.17 + css-to-react-native: 3.2.0 + emoji-regex-xs: 2.0.1 + escape-html: 1.0.3 + linebreak: 1.1.0 + parse-css-color: 0.2.1 + postcss-value-parser: 4.2.0 + yoga-layout: 3.2.1 + sax@1.4.4: {} scheduler@0.27.0: {} @@ -18727,6 +19601,13 @@ snapshots: shell-quote@1.8.3: {} + shiki-stream@0.1.4(react@19.2.4)(vue@3.5.28(typescript@5.9.3)): + dependencies: + '@shikijs/core': 3.22.0 + optionalDependencies: + react: 19.2.4 + vue: 3.5.28(typescript@5.9.3) + shiki@1.29.2: dependencies: '@shikijs/core': 1.29.2 @@ -18760,6 +19641,17 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + shiki@4.0.1: + dependencies: + '@shikijs/core': 4.0.1 + '@shikijs/engine-javascript': 4.0.1 + '@shikijs/engine-oniguruma': 4.0.1 + '@shikijs/langs': 4.0.1 + '@shikijs/themes': 4.0.1 + '@shikijs/types': 4.0.1 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -19015,6 +19907,44 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svelte-check@4.4.4(picomatch@4.0.3)(svelte@5.53.7)(typescript@5.9.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.3) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.53.7 + typescript: 5.9.3 + transitivePeerDependencies: + - picomatch + + svelte2tsx@0.7.51(svelte@5.53.7)(typescript@5.9.3): + dependencies: + dedent-js: 1.0.1 + scule: 1.3.0 + svelte: 5.53.7 + typescript: 5.9.3 + + svelte@5.53.7: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.15.0) + '@types/estree': 1.0.8 + '@types/trusted-types': 2.0.7 + acorn: 8.15.0 + aria-query: 5.3.1 + axobject-query: 4.1.0 + clsx: 2.1.1 + devalue: 5.6.3 + esm-env: 1.2.2 + esrap: 2.2.3 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + svgo@4.0.0: dependencies: commander: 11.1.0 @@ -19037,22 +19967,26 @@ snapshots: tailwind-merge@3.4.0: {} - tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.18): + tailwind-merge@3.5.0: {} + + tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.2.0): dependencies: - tailwindcss: 4.1.18 + tailwindcss: 4.2.0 optionalDependencies: tailwind-merge: 3.4.0 - tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.2.0): + tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.0): dependencies: tailwindcss: 4.2.0 optionalDependencies: - tailwind-merge: 3.4.0 + tailwind-merge: 3.5.0 tailwindcss@4.1.18: {} tailwindcss@4.2.0: {} + tailwindcss@4.2.1: {} + tapable@2.3.0: {} tar-fs@2.1.4: @@ -19226,6 +20160,10 @@ snapshots: dependencies: pathe: 2.0.3 + unhead@2.1.10: + dependencies: + hookable: 6.0.1 + unhead@2.1.4: dependencies: hookable: 6.0.1 @@ -19372,11 +20310,11 @@ snapshots: optionalDependencies: '@nuxt/kit': 4.3.1(magicast@0.5.1) - unplugin-vue-router@0.16.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)): + unplugin-vue-router@0.16.2(@vue/compiler-sfc@3.5.28)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)): dependencies: '@babel/generator': 7.29.0 '@vue-macros/common': 3.1.2(vue@3.5.28(typescript@5.9.3)) - '@vue/compiler-sfc': 3.5.27 + '@vue/compiler-sfc': 3.5.28 '@vue/language-core': 3.2.4 ast-walker-scope: 0.8.3 chokidar: 4.0.3 @@ -19527,6 +20465,14 @@ snapshots: transitivePeerDependencies: - '@vue/composition-api' + vaul-vue@0.4.1(reka-ui@2.8.2(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)): + dependencies: + '@vueuse/core': 10.11.1(vue@3.5.28(typescript@5.9.3)) + reka-ui: 2.8.2(vue@3.5.28(typescript@5.9.3)) + vue: 3.5.28(typescript@5.9.3) + transitivePeerDependencies: + - '@vue/composition-api' + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -19666,6 +20612,10 @@ snapshots: optionalDependencies: vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitefu@1.1.2(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + optionalDependencies: + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitepress@1.6.4(@algolia/client-search@5.49.1)(@types/node@25.3.0)(change-case@5.4.4)(fuse.js@7.1.0)(lightningcss@1.31.1)(postcss@8.5.6)(search-insights@2.17.3)(terser@5.46.0)(typescript@5.9.3): dependencies: '@docsearch/css': 3.8.2 @@ -19715,7 +20665,13 @@ snapshots: - typescript - universal-cookie - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest-browser-svelte@0.1.0(@vitest/browser@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(svelte@5.53.7)(vitest@4.0.18): + dependencies: + '@vitest/browser': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + svelte: 5.53.7 + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/browser-playwright@4.0.18)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) @@ -19740,6 +20696,7 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 25.3.0 + '@vitest/browser-playwright': 4.0.18(playwright@1.58.2)(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) transitivePeerDependencies: - jiti - less @@ -19769,6 +20726,8 @@ snapshots: vue-component-type-helpers@3.2.4: {} + vue-component-type-helpers@3.2.5: {} + vue-demi@0.14.10(vue@3.5.28(typescript@5.9.3)): dependencies: vue: 3.5.28(typescript@5.9.3) @@ -19783,7 +20742,7 @@ snapshots: eslint-visitor-keys: 4.2.1 espree: 10.4.0 esquery: 1.7.0 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -20003,6 +20962,8 @@ snapshots: cookie-es: 2.0.0 youch-core: 0.3.3 + zimmerframe@1.1.4: {} + zip-stream@6.0.1: dependencies: archiver-utils: 5.0.2 From a353084e236076063549ab57fca9d828c2d23d49 Mon Sep 17 00:00:00 2001 From: Elliott Johnson Date: Tue, 3 Mar 2026 16:57:18 -0700 Subject: [PATCH 02/10] tests better --- .../src/ComarkNode.svelte.test.ts | 191 ++++++++-------- packages/comark-svelte/src/ComarkNode.test.ts | 203 +++++++++++------- .../src/test-components/Alert.svelte | 9 + .../src/test-components/ProseH1.svelte | 9 + 4 files changed, 249 insertions(+), 163 deletions(-) create mode 100644 packages/comark-svelte/src/test-components/Alert.svelte create mode 100644 packages/comark-svelte/src/test-components/ProseH1.svelte diff --git a/packages/comark-svelte/src/ComarkNode.svelte.test.ts b/packages/comark-svelte/src/ComarkNode.svelte.test.ts index 861563c..43f8c4f 100644 --- a/packages/comark-svelte/src/ComarkNode.svelte.test.ts +++ b/packages/comark-svelte/src/ComarkNode.svelte.test.ts @@ -1,65 +1,48 @@ -/// import { describe, expect, it } from 'vitest' import { render } from 'vitest-browser-svelte' +import { page } from 'vitest/browser' import { parse } from 'comark' import ComarkRenderer from './ComarkRenderer.svelte' import ComarkNode from './ComarkNode.svelte' +import Alert from './test-components/Alert.svelte' +import ProseH1 from './test-components/ProseH1.svelte' describe('ComarkNode', () => { - it('renders a text node', async () => { - const { container } = render(ComarkNode, { node: 'Hello world' }) - await expect.element(container).toHaveTextContent('Hello world') + it('renders a paragraph', async () => { + const tree = await parse('Hello world') + render(ComarkNode, { node: tree.nodes[0] }) + await expect.element(page.getByText('Hello world')).toBeInTheDocument() }) - it('renders a paragraph element with correct text', async () => { - const { container } = render(ComarkNode, { - node: ['p', {}, 'A paragraph'], - }) - const p = container.querySelector('p')! - expect(p).not.toBeNull() - await expect.element(p).toHaveTextContent('A paragraph') + it('renders nested inline markup', async () => { + const tree = await parse('Hello **World**') + render(ComarkNode, { node: tree.nodes[0] }) + await expect.element(page.getByText('Hello World')).toBeInTheDocument() + await expect.element(page.getByText('World')).toBeInTheDocument() }) - it('renders nested elements with correct structure', async () => { - const { container } = render(ComarkNode, { - node: ['p', {}, 'Hello ', ['strong', {}, 'World']], - }) - const p = container.querySelector('p')! - expect(p).not.toBeNull() - await expect.element(p).toHaveTextContent('Hello World') - - const strong = p.querySelector('strong')! - expect(strong).not.toBeNull() - await expect.element(strong).toHaveTextContent('World') + it('renders a link with href', async () => { + const tree = await parse('[link](/about)') + render(ComarkNode, { node: tree.nodes[0] }) + const link = page.getByRole('link', { name: 'link' }) + await expect.element(link).toHaveAttribute('href', '/about') }) - it('maps className to class attribute', async () => { + it('maps className to class', async () => { const { container } = render(ComarkNode, { node: ['div', { className: 'my-class' }, 'content'], }) - const div = container.querySelector('div')! + const div = container.querySelector('.my-class')! expect(div).not.toBeNull() - await expect.element(div).toHaveClass('my-class') await expect.element(div).toHaveTextContent('content') }) - it('renders HTML attributes correctly', async () => { - const { container } = render(ComarkNode, { - node: ['a', { href: '/about', target: '_blank' }, 'link'], - }) - const a = container.querySelector('a')! - expect(a).not.toBeNull() - await expect.element(a).toHaveAttribute('href', '/about') - await expect.element(a).toHaveAttribute('target', '_blank') - await expect.element(a).toHaveTextContent('link') - }) - - it('renders caret span with custom class', async () => { + it('renders caret with custom class', async () => { const { container } = render(ComarkNode, { node: 'text', caretClass: 'test-caret', }) - const caret = container.querySelector('span.test-caret')! + const caret = container.querySelector('.test-caret')! expect(caret).not.toBeNull() await expect.element(caret).toHaveStyle({ display: 'inline-block' }) }) @@ -70,63 +53,47 @@ describe('ComarkNode', () => { caretClass: null, }) expect(container.querySelector('span')).toBeNull() - await expect.element(container).toHaveTextContent('text') }) it('threads caret to deepest last text node', async () => { + const tree = await parse('first **last**') const { container } = render(ComarkNode, { - node: ['p', {}, 'first ', ['strong', {}, 'last']], + node: tree.nodes[0], caretClass: 'caret', }) // Caret should be inside , not outside it - const strong = container.querySelector('strong')! - const caret = strong.querySelector('span.caret')! - expect(caret).not.toBeNull() - - // Only one caret in the entire tree - expect(container.querySelectorAll('span.caret').length).toBe(1) + const strong = container.querySelector('strong')! + expect(strong.querySelector('.caret')).not.toBeNull() + expect(container.querySelectorAll('.caret').length).toBe(1) }) }) describe('ComarkRenderer', () => { it('renders a heading with inline markup', async () => { const tree = await parse('# Hello **World**') - const { container } = render(ComarkRenderer, { tree }) - - const wrapper = container.querySelector('div.comark-content')! - expect(wrapper).not.toBeNull() - - const h1 = wrapper.querySelector('h1')! - expect(h1).not.toBeNull() - await expect.element(h1).toHaveAttribute('id', 'hello-strong-world') - await expect.element(h1).toHaveTextContent('Hello World') - - const strong = h1.querySelector('strong')! - expect(strong).not.toBeNull() - await expect.element(strong).toHaveTextContent('World') + render(ComarkRenderer, { tree }) + const heading = page.getByRole('heading', { name: 'Hello World', level: 1 }) + await expect.element(heading).toBeInTheDocument() + await expect.element(heading).toHaveAttribute('id', 'hello-strong-world') }) - it('renders multiple block elements with correct content', async () => { + it('renders multiple block elements', async () => { const tree = await parse('# Heading\n\nA paragraph\n\n- item 1\n- item 2') - const { container } = render(ComarkRenderer, { tree }) + render(ComarkRenderer, { tree }) - const h1 = container.querySelector('h1')! - expect(h1).not.toBeNull() - await expect.element(h1).toHaveTextContent('Heading') + await expect.element(page.getByRole('heading', { name: 'Heading', level: 1 })).toBeInTheDocument() + await expect.element(page.getByText('A paragraph')).toBeInTheDocument() - const p = container.querySelector('p')! - await expect.element(p).toHaveTextContent('A paragraph') - - const items = container.querySelectorAll('li') - expect(items.length).toBe(2) - await expect.element(items[0]).toHaveTextContent('item 1') - await expect.element(items[1]).toHaveTextContent('item 2') + const items = page.getByRole('listitem') + expect(items.elements().length).toBe(2) + await expect.element(items.nth(0)).toHaveTextContent('item 1') + await expect.element(items.nth(1)).toHaveTextContent('item 2') }) it('renders empty tree as empty wrapper', async () => { const tree = { nodes: [], frontmatter: {}, meta: {} } const { container } = render(ComarkRenderer, { tree }) - const wrapper = container.querySelector('div.comark-content')! + const wrapper = container.querySelector('.comark-content')! expect(wrapper).not.toBeNull() expect(wrapper.children.length).toBe(0) }) @@ -134,34 +101,82 @@ describe('ComarkRenderer', () => { it('applies custom class to wrapper', async () => { const tree = await parse('hello') const { container } = render(ComarkRenderer, { tree, class: 'prose' }) - const wrapper = container.querySelector('div.comark-content')! - expect(wrapper).not.toBeNull() + const wrapper = container.querySelector('.comark-content')! await expect.element(wrapper).toHaveClass('prose') }) it('renders inline code', async () => { const tree = await parse('use `const x = 1`') - const { container } = render(ComarkRenderer, { tree }) - const code = container.querySelector('code')! - expect(code).not.toBeNull() - await expect.element(code).toHaveTextContent('const x = 1') + render(ComarkRenderer, { tree }) + await expect.element(page.getByText('const x = 1')).toBeInTheDocument() }) it('renders links with href', async () => { const tree = await parse('[click](https://example.com)') - const { container } = render(ComarkRenderer, { tree }) - const a = container.querySelector('a')! - expect(a).not.toBeNull() - await expect.element(a).toHaveAttribute('href', 'https://example.com') - await expect.element(a).toHaveTextContent('click') + render(ComarkRenderer, { tree }) + const link = page.getByRole('link', { name: 'click' }) + await expect.element(link).toHaveAttribute('href', 'https://example.com') }) it('renders images with src and alt', async () => { - const tree = await parse('![alt](image.png)') - const { container } = render(ComarkRenderer, { tree }) - const img = container.querySelector('img')! - expect(img).not.toBeNull() + const tree = await parse('![alt text](image.png)') + render(ComarkRenderer, { tree }) + const img = page.getByAltText('alt text') await expect.element(img).toHaveAttribute('src', 'image.png') - await expect.element(img).toHaveAttribute('alt', 'alt') + }) + + it('renders blockquotes', async () => { + const tree = await parse('> quoted text') + const { container } = render(ComarkRenderer, { tree }) + expect(container.querySelector('blockquote')).not.toBeNull() + await expect.element(page.getByText('quoted text')).toBeInTheDocument() + }) + + it('renders emphasis and strong', async () => { + const tree = await parse('*em* and **strong**') + render(ComarkRenderer, { tree }) + await expect.element(page.getByText('em')).toBeInTheDocument() + await expect.element(page.getByText('strong')).toBeInTheDocument() + }) +}) + +describe('custom components', () => { + it('resolves custom component for MDC syntax', async () => { + const tree = await parse('::alert{type="warning"}\nWatch out!\n::') + render(ComarkRenderer, { tree, components: { alert: Alert } }) + const alert = page.getByRole('alert') + await expect.element(alert).toHaveTextContent('Watch out!') + await expect.element(alert).toHaveClass('alert-warning') + }) + + it('resolves component by PascalCase key', async () => { + const tree = await parse('::alert{type="info"}\nInfo message\n::') + render(ComarkRenderer, { tree, components: { Alert } }) + const alert = page.getByRole('alert') + await expect.element(alert).toHaveTextContent('Info message') + await expect.element(alert).toHaveClass('alert-info') + }) + + it('resolves Prose-prefixed component for native tags', async () => { + const tree = await parse('# Custom Heading') + render(ComarkRenderer, { tree, components: { ProseH1 } }) + const heading = page.getByRole('heading', { name: 'Custom Heading', level: 1 }) + await expect.element(heading).toHaveClass('prose-heading') + }) + + it('renders children inside custom components', async () => { + const tree = await parse('::alert{type="info"}\n**Bold** text\n::') + render(ComarkRenderer, { tree, components: { alert: Alert } }) + const alert = page.getByRole('alert') + await expect.element(alert).toHaveTextContent('Bold text') + await expect.element(alert).toHaveClass('alert-info') + }) + + it('falls back to native element when no component matches', async () => { + const tree = await parse('::alert{type="info"}\ncontent\n::') + const { container } = render(ComarkRenderer, { tree, components: {} }) + const alert = container.querySelector('alert')! + expect(alert).not.toBeNull() + await expect.element(alert).toHaveTextContent('content') }) }) diff --git a/packages/comark-svelte/src/ComarkNode.test.ts b/packages/comark-svelte/src/ComarkNode.test.ts index 634b578..e72829c 100644 --- a/packages/comark-svelte/src/ComarkNode.test.ts +++ b/packages/comark-svelte/src/ComarkNode.test.ts @@ -3,53 +3,59 @@ import { render } from 'svelte/server' import { parse } from 'comark' import ComarkRenderer from './ComarkRenderer.svelte' import ComarkNode from './ComarkNode.svelte' +import Alert from './test-components/Alert.svelte' +import ProseH1 from './test-components/ProseH1.svelte' /** Strip Svelte SSR hydration comments from rendered HTML */ function html(body: string): string { - return body.replace(//g, '').replace(//g, '') + return body.replace(//g, '').replace(//g, '') } const CARET_STYLE = 'background-color: currentColor; display: inline-block; margin-left: 0.25rem; margin-right: 0.25rem; animation: pulse 0.75s cubic-bezier(0.4,0,0.6,1) infinite;' describe('ComarkNode', () => { - it('renders a text node', () => { - const { body } = render(ComarkNode, { props: { node: 'Hello world' } }) - expect(html(body)).toBe('Hello world') - }) - - it('renders a native HTML element', () => { - const { body } = render(ComarkNode, { - props: { node: ['p', {}, 'A paragraph'] }, - }) + it('renders a paragraph', async () => { + const tree = await parse('A paragraph') + const { body } = render(ComarkNode, { props: { node: tree.nodes[0] } }) expect(html(body)).toBe('

    A paragraph

    ') }) - it('renders nested elements', () => { - const { body } = render(ComarkNode, { - props: { node: ['p', {}, 'Hello ', ['strong', {}, 'World']] }, - }) + it('renders nested inline markup', async () => { + const tree = await parse('Hello **World**') + const { body } = render(ComarkNode, { props: { node: tree.nodes[0] } }) expect(html(body)).toBe('

    Hello World

    ') }) - it('renders multiple children', () => { - const { body } = render(ComarkNode, { - props: { node: ['p', {}, 'one ', ['em', {}, 'two'], ' three'] }, - }) + it('renders mixed inline markup', async () => { + const tree = await parse('one *two* three') + const { body } = render(ComarkNode, { props: { node: tree.nodes[0] } }) expect(html(body)).toBe('

    one two three

    ') }) - it('maps className to class', () => { + it('renders a link with attributes', async () => { + const tree = await parse('[link](/about)') + const { body } = render(ComarkNode, { props: { node: tree.nodes[0] } }) + expect(html(body)).toBe('

    link

    ') + }) + + it('renders a thematic break', async () => { + const tree = await parse('---') + const { body } = render(ComarkNode, { props: { node: tree.nodes[0] } }) + expect(html(body)).toBe('
    ') + }) + + it('skips comment nodes (null tag)', () => { const { body } = render(ComarkNode, { - props: { node: ['div', { className: 'my-class' }, 'content'] }, + props: { node: [null, {}, 'a comment'] }, }) - expect(html(body)).toBe('
    content
    ') + expect(html(body)).toBe('') }) - it('passes through HTML attributes', () => { + it('maps className to class', () => { const { body } = render(ComarkNode, { - props: { node: ['a', { href: '/about', target: '_blank' }, 'link'] }, + props: { node: ['div', { className: 'my-class' }, 'content'] }, }) - expect(html(body)).toBe('link') + expect(html(body)).toBe('
    content
    ') }) it('parses colon-prefixed props as values', () => { @@ -66,32 +72,13 @@ describe('ComarkNode', () => { expect(html(body)).toBe('
    content
    ') }) - it('skips comment nodes (null tag)', () => { - const { body } = render(ComarkNode, { - props: { node: [null, {}, 'a comment'] }, - }) - expect(html(body)).toBe('') - }) - - it('renders self-closing elements', () => { - const { body } = render(ComarkNode, { - props: { node: ['hr', {}] }, - }) - expect(html(body)).toBe('
    ') - }) - - it('renders an element with no children', () => { - const { body } = render(ComarkNode, { - props: { node: ['div', { class: 'empty' }] }, - }) - expect(html(body)).toBe('
    ') - }) - - it('does not render caret when caretClass is null', () => { + it('does not render caret when caretClass is null', async () => { + const tree = await parse('some text') const { body } = render(ComarkNode, { - props: { node: 'some text', caretClass: null }, + props: { node: tree.nodes[0], caretClass: null }, }) - expect(html(body)).toBe('some text') + expect(html(body)).toBe('

    some text

    ') + expect(html(body)).not.toContain(' { @@ -112,46 +99,42 @@ describe('ComarkNode', () => { ) }) - it('threads caret to deepest last text node', () => { + it('threads caret to deepest last text node', async () => { + const tree = await parse('first **last**') const { body } = render(ComarkNode, { - props: { - node: ['p', {}, 'first ', ['strong', {}, 'last']], - caretClass: '', - }, + props: { node: tree.nodes[0], caretClass: '' }, }) - expect(html(body)).toBe( - `

    first last\u2009

    `, - ) + const output = html(body) + // Caret should be inside , after "last" + expect(output).toContain(`last\u2009`) + // Not after the
    + expect(output).not.toContain(`
    { + it('threads caret through deeply nested structure', async () => { + const tree = await parse('*__**deep**__*') const { body } = render(ComarkNode, { - props: { - node: ['div', {}, ['p', {}, ['em', {}, ['strong', {}, 'deep']]]], - caretClass: 'c', - }, + props: { node: tree.nodes[0], caretClass: 'c' }, }) - expect(html(body)).toBe( - `

    deep\u2009

    `, - ) + const output = html(body) + // Caret should be at the very deepest level, after "deep" + expect(output).toContain(`deep\u2009`) }) - it('does not attach caret to non-last children', () => { + it('does not attach caret to non-last children', async () => { + const tree = await parse('**first** last') const { body } = render(ComarkNode, { - props: { - node: ['p', {}, ['strong', {}, 'first'], ' last'], - caretClass: '', - }, + props: { node: tree.nodes[0], caretClass: '' }, }) - // Caret should be after "last" (the last child), not after "first" - expect(html(body)).toBe( - `

    first last\u2009

    `, - ) + const output = html(body) + // Caret should be after "last" (the last child), not inside + expect(output).toContain(`last\u2009`) + expect(output).not.toContain(`first { - it('renders a parsed heading with inline markup', async () => { + it('renders a heading with inline markup', async () => { const tree = await parse('# Hello **World**') const { body } = render(ComarkRenderer, { props: { tree } }) const output = html(body) @@ -194,7 +177,7 @@ describe('ComarkRenderer', () => { expect(html(body)).toContain('const x = 1') }) - it('renders links with attributes', async () => { + it('renders links', async () => { const tree = await parse('[click me](https://example.com)') const { body } = render(ComarkRenderer, { props: { tree } }) expect(html(body)).toContain('click me') @@ -205,4 +188,74 @@ describe('ComarkRenderer', () => { const { body } = render(ComarkRenderer, { props: { tree } }) expect(html(body)).toContain('alt text') }) + + it('renders blockquotes', async () => { + const tree = await parse('> quoted text') + const { body } = render(ComarkRenderer, { props: { tree } }) + const output = html(body) + expect(output).toContain('
    ') + expect(output).toContain('quoted text') + }) + + it('renders emphasis and strong', async () => { + const tree = await parse('*em* and **strong**') + const { body } = render(ComarkRenderer, { props: { tree } }) + const output = html(body) + expect(output).toContain('em') + expect(output).toContain('strong') + }) +}) + +describe('custom components', () => { + it('resolves custom component for MDC syntax', async () => { + const tree = await parse('::alert{type="warning"}\nWatch out!\n::') + const { body } = render(ComarkRenderer, { + props: { tree, components: { alert: Alert } }, + }) + const output = html(body) + expect(output).toContain('