From 23f12a43dc6253ff25074b0168943341444693f7 Mon Sep 17 00:00:00 2001 From: Owais Jamil Date: Tue, 25 Aug 2026 12:50:53 -0500 Subject: [PATCH] chore: set to v0.1.0 * symlink changelog --- CHANGELOG.md | 66 +--- Cargo.lock | 10 +- Cargo.toml | 2 +- apps/web/e2e/docs.spec.ts | 50 +++ apps/web/package.json | 3 +- apps/web/src/content/docs/changelog.md | 31 ++ apps/web/src/lib/docs/SiteFooter.svelte | 2 +- apps/web/src/lib/docs/SiteHeader.svelte | 3 +- apps/web/src/lib/docs/content/types.ts | 3 +- apps/web/src/lib/docs/docs.css | 18 +- apps/web/src/lib/docs/highlight.js | 26 ++ apps/web/src/lib/docs/highlight.spec.ts | 25 ++ apps/web/src/routes/+page.svelte | 50 ++- apps/web/svelte.config.js | 7 +- package.json | 2 +- packages/bindings/package.json | 2 +- packages/core/package.json | 2 +- packages/editor/package.json | 2 +- packages/perf/package.json | 2 +- packages/ui/package.json | 2 +- .../__tests__/StatusBar.svelte.test.ts | 3 + packages/ui/src/lib/editor/constants.ts | 1 + packages/wasm/package.json | 2 +- pnpm-lock.yaml | 319 ++++++++++++++++++ 24 files changed, 545 insertions(+), 88 deletions(-) mode change 100644 => 120000 CHANGELOG.md create mode 100644 apps/web/e2e/docs.spec.ts create mode 100644 apps/web/src/content/docs/changelog.md create mode 100644 apps/web/src/lib/docs/highlight.js create mode 100644 apps/web/src/lib/docs/highlight.spec.ts diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 340da09..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,65 +0,0 @@ -# Changelog - -## [Unreleased] - -### Added - -- Automerge-backed documents with validated atomic transactions, history, undo and redo, causal - heads, peer sync, deterministic repair, file locking, and recovery. -- Shared Rust document sessions for desktop, browser WebAssembly, CLI, and MCP, with generated - TypeScript contracts and a common editor projection. -- Native shapes, paths, groups, frames, cards, images, layers, assets, semantic metadata, - relationships, built-in stencils, and deterministic layout operations. -- Canvas editing with snapping, constraints, nested selection, path anchors and handles, - duplicate-and-connect, typography controls, and a searchable command palette. -- Shared path metrics and straight, curved, and orthogonal connectors with tangent-aware - arrowheads, path-relative labels, hit testing, and deterministic export. -- Boolean paths, gradient paints, clips, masks, filters, variable-width strokes, and text on path, - with editor controls and SVG round-trip coverage. -- SVG import and export with editable native geometry, hierarchy, transforms, compound fills, - gradients, effects, text paths, embedded images, sanitized fallbacks, and deterministic workflows. -- Excalidraw and Obsidian Canvas import and export, plus deterministic SVG and PNG rendering. -- JSON Canvas round-trips for cards, frames, references, assets, and relationships, plus editable - Mermaid and D2 flowchart imports with shared graph layout and documented fallbacks. -- SVG and PNG clipboard export for selections and pages, including transparent PNGs and visible or - downloadable fallbacks when clipboard APIs are unavailable. -- An installable offline web app with cached editor assets, persistent local storage requests, - explicit update prompts, and offline editing and export coverage. -- Web metadata and generated Open Graph images for the landing page, docs, and editor. -- CLI workflows for inspection, queries, validation, structured mutations, dry runs, rendering, - schemas, live desktop sessions, and machine-readable output. -- Permissioned local MCP access with scoped reads and mutations, SVG import, layout, causal heads, - and visual proposal review with partial acceptance. -- A responsive board browser with local persistence, workspace switching, sorting, duplication, - guarded board changes, storage details, and actionable errors. -- Shared performance fixtures and native, process, renderer-traversal, browser-interaction, and heap - measurements with recorded methodology, diagnostic traces, and regression ceilings. - -### Changed - -- Consolidated the web and desktop editors into shared UI, runtime, DOM input, renderer, and core - packages. -- Separated generated canonical contracts from the interactive TypeScript editor model and made - canonical projection and reconciliation an explicit adapter. -- Made `@inkfinite/core` headless, reduced its root API, and added focused model, geometry, command, - selection, and interchange entry points with import-boundary checks. -- Split renderer, runtime, inspector, Canvas, and Rust model, editor, and geometry responsibilities - into focused modules while preserving public APIs and serialized documents. -- Unified creation styles across editor, CLI, MCP, stencils, and starter documents, with neutral - defaults resolved against light and dark canvases. -- Moved canonical browser state and committed geometry operations to Rust while keeping interaction - previews in TypeScript. -- Unified SVG parsing, transactions, and rendering across desktop, web, CLI, and MCP. -- Made transaction origin provenance-only. Validation, causal checks, record versions, and shape and - layer locks continue to govern mutations. -- Made general CLI live mutations commit directly after validation; reviewed and permissioned model - access remains in MCP. -- Cached validated Automerge projections until a local or remote change invalidates them, reducing - the reference flat 10,000-shape load from about 6.75 seconds to about 3.77 seconds on Apple M1. - -### Fixed - -- Rejected malformed documents and transactions before canonical state changes. -- Repaired merge damage involving parents, child references, bindings, and missing page layers. -- Corrected cursor mapping, nested-transform hit testing, path preview bounds, pointer capture, - persistence recovery, menu placement, and browser heap-workload synchronization. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 120000 index 0000000..6a7b163 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +apps/web/src/content/docs/changelog.md \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 6721ced..73f06d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2324,7 +2324,7 @@ dependencies = [ [[package]] name = "inkfinite-cli" -version = "0.0.0" +version = "0.1.0" dependencies = [ "anyhow", "clap", @@ -2341,7 +2341,7 @@ dependencies = [ [[package]] name = "inkfinite-core" -version = "0.0.0" +version = "0.1.0" dependencies = [ "automerge", "base64 0.22.1", @@ -2364,7 +2364,7 @@ dependencies = [ [[package]] name = "inkfinite-mcp" -version = "0.0.0" +version = "0.1.0" dependencies = [ "inkfinite-core", "rmcp", @@ -2378,7 +2378,7 @@ dependencies = [ [[package]] name = "inkfinite-wasm" -version = "0.0.0" +version = "0.1.0" dependencies = [ "inkfinite-core", "serde", @@ -6239,7 +6239,7 @@ checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" [[package]] name = "xtask" -version = "0.0.0" +version = "0.1.0" dependencies = [ "anyhow", "clap", diff --git a/Cargo.toml b/Cargo.toml index 1789398..95b6c76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ resolver = "2" edition = "2024" license = "Apache-2.0" rust-version = "1.89" -version = "0.0.0" +version = "0.1.0" [workspace.dependencies] anyhow = "1.0.103" diff --git a/apps/web/e2e/docs.spec.ts b/apps/web/e2e/docs.spec.ts new file mode 100644 index 0000000..7af0290 --- /dev/null +++ b/apps/web/e2e/docs.spec.ts @@ -0,0 +1,50 @@ +import { expect, test } from '@playwright/test'; + +const policyExample = `{ + "default": { + "permissions": { + "read": true, + "create": true, + "modify": true, + "delete": false, + "layout": true, + "propose": true + }, + "hidden_layers": "deny", + "require_agent_editable": true + } +}`; + +test('highlights documentation code without changing its whitespace', async ({ page }) => { + await page.goto('/docs/automation/agents/'); + + const codeBlock = page.locator('pre.shiki').filter({ hasText: 'hidden_layers' }); + const code = codeBlock.locator('code'); + const token = code.locator('span[style]').first(); + const footer = page.locator('.site-footer'); + + await expect(page.locator('html')).toHaveAttribute('data-inkfinite-docs-theme', 'dark'); + expect(await code.textContent()).toBe(policyExample); + await expect(codeBlock.locator('.line')).toHaveCount(14); + expect(await code.evaluate((element) => getComputedStyle(element).whiteSpace)).toBe('pre'); + + const darkCodeBackground = await codeBlock.evaluate( + (element) => getComputedStyle(element).backgroundColor + ); + const darkTokenColor = await token.evaluate((element) => getComputedStyle(element).color); + const darkFooterBackground = await footer.evaluate( + (element) => getComputedStyle(element).backgroundColor + ); + + await page.getByRole('button', { name: 'Switch documentation to light mode' }).click(); + + await expect + .poll(() => codeBlock.evaluate((element) => getComputedStyle(element).backgroundColor)) + .not.toBe(darkCodeBackground); + expect(await token.evaluate((element) => getComputedStyle(element).color)).not.toBe( + darkTokenColor + ); + expect(await footer.evaluate((element) => getComputedStyle(element).backgroundColor)).not.toBe( + darkFooterBackground + ); +}); diff --git a/apps/web/package.json b/apps/web/package.json index 099f06d..742a884 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,7 +1,7 @@ { "name": "@inkfinite/web", "private": true, - "version": "0.0.1", + "version": "0.1.0", "type": "module", "scripts": { "prebuild": "pnpm --filter @inkfinite/wasm build", @@ -59,6 +59,7 @@ "prettier-plugin-svelte": "^3.4.0", "satori": "^0.26.0", "satori-html": "^0.3.2", + "shiki": "^4.4.3", "svelte": "^5.45.6", "svelte-check": "^4.3.4", "typescript": "^5.9.3", diff --git a/apps/web/src/content/docs/changelog.md b/apps/web/src/content/docs/changelog.md new file mode 100644 index 0000000..9ab676b --- /dev/null +++ b/apps/web/src/content/docs/changelog.md @@ -0,0 +1,31 @@ +--- +title: Changelog +description: 'Highlights from each Inkfinite release.' +section: Project +group: Project +order: 25 +--- + +## 0.1.0 + +First public release of Inkfinite, a local-first infinite canvas for web, desktop, CLI, and agent +workflows. + +### Highlights + +- **One document across every interface.** Automerge-backed `.inkfinite` files carry validated + transactions, history, undo and redo, causal heads, and sync across the shared Rust engine, + browser, desktop app, CLI, and MCP server. +- **Canvas and vector editing.** Draw with shapes, text, Markdown, freehand strokes, + connectors, layers, groups, frames, cards, images, stencils, native paths, boolean operations, + gradients, masks, filters, variable-width strokes, and text on a path. +- **Open import and export workflows.** Edit native SVG geometry, render deterministic SVG and PNG + output, and exchange structured content with Excalidraw, Obsidian Canvas, Mermaid, and D2. +- **Local-first web and desktop apps.** Work offline in the installable web app, keep browser boards + in local storage, or use Automerge-backed files and recoverable drafts in the Tauri desktop app. +- **Automation built around the same model.** Inspect, query, validate, edit, lay out, and render + documents from the CLI, or let coding agents propose permissioned changes for visual review + through MCP. +- **Measured behavior and performance.** Cross-interface fixtures exercise persistence, + interchange, rendering, and editor behavior, with native, process, browser, and heap regression + ceilings. diff --git a/apps/web/src/lib/docs/SiteFooter.svelte b/apps/web/src/lib/docs/SiteFooter.svelte index 159b93f..30a93a2 100644 --- a/apps/web/src/lib/docs/SiteFooter.svelte +++ b/apps/web/src/lib/docs/SiteFooter.svelte @@ -51,7 +51,7 @@ .site-footer { padding: clamp(3rem, 7vw, 5rem) 2rem 1.5rem; border-top: 1px solid var(--docs-border); - background: var(--docs-code-surface); + background: var(--docs-footer-surface); color: var(--docs-text-muted); } diff --git a/apps/web/src/lib/docs/SiteHeader.svelte b/apps/web/src/lib/docs/SiteHeader.svelte index fc36591..06825d5 100644 --- a/apps/web/src/lib/docs/SiteHeader.svelte +++ b/apps/web/src/lib/docs/SiteHeader.svelte @@ -11,7 +11,8 @@ const primaryLinks = [ { label: 'Start', href: '/docs/quickstart/', slug: 'quickstart' }, { label: 'Guide', href: '/docs/guide/editor/', slug: 'guide' }, - { label: 'Automation', href: '/docs/automation/cli/', slug: 'automation' } + { label: 'Automation', href: '/docs/automation/cli/', slug: 'automation' }, + { label: 'Changelog', href: '/docs/changelog/', slug: 'changelog' } ] as const; const githubUrl = 'https://github.com/stormlightlabs/inkfinite'; diff --git a/apps/web/src/lib/docs/content/types.ts b/apps/web/src/lib/docs/content/types.ts index 1d7fb01..966b850 100644 --- a/apps/web/src/lib/docs/content/types.ts +++ b/apps/web/src/lib/docs/content/types.ts @@ -8,7 +8,8 @@ export const docSections = [ 'Automation', 'Concepts', 'Reference', - 'Development' + 'Development', + 'Project' ] as const; export type DocSection = (typeof docSections)[number]; diff --git a/apps/web/src/lib/docs/docs.css b/apps/web/src/lib/docs/docs.css index cc13280..b82b734 100644 --- a/apps/web/src/lib/docs/docs.css +++ b/apps/web/src/lib/docs/docs.css @@ -16,6 +16,7 @@ --docs-accent-text: #8de2bc; --docs-on-accent: #101b18; --docs-code-surface: #10131f; + --docs-footer-surface: #10131f; --docs-code-line: #646675; --docs-code-text: #d8e6e6; --docs-callout-surface: color-mix(in srgb, var(--docs-accent) 11%, var(--docs-canvas)); @@ -61,9 +62,10 @@ html[data-inkfinite-docs-theme='light'] .docs-site { --docs-accent-hover: #0f7046; --docs-accent-text: #126a45; --docs-on-accent: #ffffff; - --docs-code-surface: #202b31; - --docs-code-line: #46616c; - --docs-code-text: #eef7f8; + --docs-code-surface: #f6f8fa; + --docs-footer-surface: #e2e6e8; + --docs-code-line: #8c959f; + --docs-code-text: #24292e; --docs-callout-surface: #e5f5ed; --docs-danger: #fb5b66; --docs-warning: #ffaf4d; @@ -182,6 +184,16 @@ html[data-inkfinite-docs-theme='light'] .docs-site { color: inherit; font-size: 0.84rem; line-height: 1.65; + tab-size: 2; + white-space: pre; +} + +.docs-site .doc-content .shiki code span { + color: var(--shiki-dark); +} + +html[data-inkfinite-docs-theme='light'] .docs-site .doc-content .shiki code span { + color: var(--shiki-light); } .docs-site .doc-content .copy-code { diff --git a/apps/web/src/lib/docs/highlight.js b/apps/web/src/lib/docs/highlight.js new file mode 100644 index 0000000..d53718a --- /dev/null +++ b/apps/web/src/lib/docs/highlight.js @@ -0,0 +1,26 @@ +import { escapeSvelte } from 'mdsvex'; +import { bundledLanguages, codeToHtml } from 'shiki'; + +const plainTextLanguages = new Set(['', 'text', 'txt', 'plaintext']); + +/** + * Highlights a fenced Markdown code block with light and dark documentation themes. + * + * @param {string} code + * @param {string | null | undefined} language + */ +export async function highlightCode(code, language = '') { + const requestedLanguage = language?.toLowerCase() ?? ''; + const lang = + plainTextLanguages.has(requestedLanguage) || !(requestedLanguage in bundledLanguages) + ? 'text' + : requestedLanguage; + + const html = await codeToHtml(code, { + lang, + themes: { light: 'github-light', dark: 'github-dark' }, + defaultColor: false + }); + + return escapeSvelte(html.replace(' tabindex="0"', '')); +} diff --git a/apps/web/src/lib/docs/highlight.spec.ts b/apps/web/src/lib/docs/highlight.spec.ts new file mode 100644 index 0000000..c2f0b58 --- /dev/null +++ b/apps/web/src/lib/docs/highlight.spec.ts @@ -0,0 +1,25 @@ +import { JSDOM } from 'jsdom'; +import { describe, expect, it } from 'vitest'; +import { highlightCode } from './highlight.js'; + +function codeText(html: string): string { + return JSDOM.fragment(html).querySelector('code')?.textContent ?? ''; +} + +describe('documentation syntax highlighting', () => { + it('preserves indentation, blank lines, and line breaks', async () => { + const source = 'fn main() {\n\tprintln!("first");\n\n\tprintln!("second");\n}'; + const html = await highlightCode(source, 'rust'); + + expect(codeText(html)).toBe(source); + expect(html).toContain('class="shiki shiki-themes github-light github-dark"'); + expect(html).toContain('--shiki-light:'); + expect(html).toContain('--shiki-dark:'); + expect(html).not.toContain('tabindex='); + }); + + it('renders unknown fences as plain text without changing their whitespace', async () => { + const source = 'first\n second'; + expect(codeText(await highlightCode(source, 'inkfinite-example'))).toBe(source); + }); +}); diff --git a/apps/web/src/routes/+page.svelte b/apps/web/src/routes/+page.svelte index 06d149b..9652ace 100644 --- a/apps/web/src/routes/+page.svelte +++ b/apps/web/src/routes/+page.svelte @@ -76,6 +76,27 @@
One file, every way in
+
Draw
CLI
Agent
@@ -495,8 +516,33 @@ letter-spacing: 0.06em; text-transform: uppercase; } + .diagram-connectors { + position: absolute; + inset: 0; + z-index: 1; + width: 100%; + height: 100%; + overflow: visible; + color: var(--docs-text-muted); + pointer-events: none; + } + .diagram-connectors path { + fill: none; + stroke: currentColor; + stroke-width: 1.35; + stroke-linecap: round; + stroke-linejoin: round; + vector-effect: non-scaling-stroke; + marker-end: url('#diagram-arrowhead'); + } + .diagram-connectors marker path { + fill: currentColor; + stroke: none; + marker-end: none; + } .diagram-shape { position: absolute; + z-index: 2; display: grid; place-items: center; width: 5.2rem; @@ -558,8 +604,8 @@ } .preview-cursor { position: absolute; - right: 25%; - bottom: 17%; + top: 36%; + left: 27%; z-index: 4; color: var(--docs-accent-text); filter: drop-shadow(0 1px var(--docs-canvas)); diff --git a/apps/web/svelte.config.js b/apps/web/svelte.config.js index d2d9c47..3376d2e 100644 --- a/apps/web/svelte.config.js +++ b/apps/web/svelte.config.js @@ -3,6 +3,7 @@ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; import { execFileSync } from 'node:child_process'; import { mdsvex } from 'mdsvex'; import { extractTableOfContents } from './src/lib/docs/content/table-of-contents.js'; +import { highlightCode } from './src/lib/docs/highlight.js'; const DEFAULT_VERSION = '0.0.0'; const buildVersion = getBuildVersion(); @@ -36,7 +37,11 @@ const config = { extensions: ['.svelte', '.svx', '.md'], preprocess: [ vitePreprocess(), - mdsvex({ extensions: ['.svx', '.md'], rehypePlugins: [extractTableOfContents] }) + mdsvex({ + extensions: ['.svx', '.md'], + rehypePlugins: [extractTableOfContents], + highlight: { highlighter: highlightCode } + }) ], kit: { adapter: adapter(), diff --git a/package.json b/package.json index 2aa3225..3d8fd7c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@inkfinite/monorepo", - "version": "1.0.0", + "version": "0.1.0", "private": true, "type": "module", "workspaces": [ diff --git a/packages/bindings/package.json b/packages/bindings/package.json index 3eb174e..7a75fbd 100644 --- a/packages/bindings/package.json +++ b/packages/bindings/package.json @@ -1,6 +1,6 @@ { "name": "@inkfinite/bindings", - "version": "0.0.0", + "version": "0.1.0", "private": true, "type": "module", "exports": { diff --git a/packages/core/package.json b/packages/core/package.json index 1631963..2dc7a7d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,7 +2,7 @@ "name": "@inkfinite/core", "type": "module", "sideEffects": false, - "version": "0.0.0", + "version": "0.1.0", "description": "A starter for creating a TypeScript package.", "author": "Owais J. ", "license": "Apache-2.0", diff --git a/packages/editor/package.json b/packages/editor/package.json index 16f1d10..906f2db 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -1,6 +1,6 @@ { "name": "@inkfinite/editor", - "version": "0.0.0", + "version": "0.1.0", "private": true, "type": "module", "exports": { diff --git a/packages/perf/package.json b/packages/perf/package.json index a603a5c..7318b99 100644 --- a/packages/perf/package.json +++ b/packages/perf/package.json @@ -1,6 +1,6 @@ { "name": "@inkfinite/perf", - "version": "0.0.0", + "version": "0.1.0", "private": true, "type": "module", "bin": { diff --git a/packages/ui/package.json b/packages/ui/package.json index cf66f6d..64676c0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@inkfinite/ui", - "version": "0.0.1", + "version": "0.1.0", "private": true, "type": "module", "sideEffects": [ diff --git a/packages/ui/src/lib/editor/components/__tests__/StatusBar.svelte.test.ts b/packages/ui/src/lib/editor/components/__tests__/StatusBar.svelte.test.ts index 2b99e0e..c085804 100644 --- a/packages/ui/src/lib/editor/components/__tests__/StatusBar.svelte.test.ts +++ b/packages/ui/src/lib/editor/components/__tests__/StatusBar.svelte.test.ts @@ -128,6 +128,9 @@ describe('StatusBar', () => { const dialog = screen.getByRole('dialog', { name: 'About Inkfinite' }); await expect.element(dialog).toBeInTheDocument(); await expect.element(screen.getByText('Version v1.2.3-4+gabc1234')).toBeInTheDocument(); + await expect + .element(screen.getByRole('link', { name: 'Changelog' })) + .toHaveAttribute('href', 'https://ink.stormlightlabs.org/docs/changelog/'); expect(window.getComputedStyle(dialog.element()).borderRadius).toBe('16px'); }); }); diff --git a/packages/ui/src/lib/editor/constants.ts b/packages/ui/src/lib/editor/constants.ts index 8fe96a1..3004d2e 100644 --- a/packages/ui/src/lib/editor/constants.ts +++ b/packages/ui/src/lib/editor/constants.ts @@ -4,6 +4,7 @@ import type { IconName } from '../icons'; export const HELP_LINKS = [ { label: 'README', href: 'https://github.com/stormlightlabs/inkfinite', external: true }, { label: 'Read the Docs', href: '/', external: false }, + { label: 'Changelog', href: 'https://ink.stormlightlabs.org/docs/changelog/', external: true }, { label: 'Issue Tracker', href: 'https://github.com/stormlightlabs/inkfinite/issues', diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 45cdcf8..3031d95 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -1,6 +1,6 @@ { "name": "@inkfinite/wasm", - "version": "0.0.0", + "version": "0.1.0", "private": true, "type": "module", "exports": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3d84c8..5153cc6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -163,6 +163,9 @@ importers: satori-html: specifier: ^0.3.2 version: 0.3.2 + shiki: + specifier: ^4.4.3 + version: 4.4.3 svelte: specifier: ^5.45.6 version: 5.46.0 @@ -2199,6 +2202,37 @@ packages: cpu: [x64] os: [win32] + '@shikijs/core@4.4.3': + resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.4.3': + resolution: {integrity: sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.4.3': + resolution: {integrity: sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==} + engines: {node: '>=20'} + + '@shikijs/langs@4.4.3': + resolution: {integrity: sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.4.3': + resolution: {integrity: sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==} + engines: {node: '>=20'} + + '@shikijs/themes@4.4.3': + resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==} + engines: {node: '>=20'} + + '@shikijs/types@4.4.3': + resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@shuding/opentype.js@1.4.0-beta.0': resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} engines: {node: '>= 8.0.0'} @@ -2465,6 +2499,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/hast@3.0.5': + resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} + '@types/jsdom@27.0.0': resolution: {integrity: sha512-NZyFl/PViwKzdEkQg96gtnB8wm+1ljhdDay9ahn4hgb+SfVtPCbm3TlmDUFXTA+MGN3CijicnMhG18SI5H3rFw==} @@ -2613,6 +2650,9 @@ packages: resolution: {integrity: sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} + '@unocss/cli@66.7.5': resolution: {integrity: sha512-fgWkECRn2LGVo9sEpmjk/KJ3NSKUDitaZCNrJcEYM93DG+ELriTHcL+VWBlF4rcZf9fdGlq1nKbbRHUZirFCHQ==} hasBin: true @@ -2871,6 +2911,9 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} @@ -2887,6 +2930,12 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + check-error@2.1.3: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} @@ -2923,6 +2972,9 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -3055,6 +3107,9 @@ packages: devalue@5.6.1: resolution: {integrity: sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dexie@4.2.1: resolution: {integrity: sha512-Ckej0NS6jxQ4Po3OrSQBFddayRhTCic2DoCAG5zacOfOVB9P2Q5Xc5uL/nVa7ZVs+HdMnvUPzLFCB/JwpB6Csg==} @@ -3285,6 +3340,12 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hex-rgb@4.3.0: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} @@ -3299,6 +3360,9 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -3486,6 +3550,9 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} @@ -3494,6 +3561,21 @@ packages: peerDependencies: svelte: ^3.56.0 || ^4.0.0 || ^5.0.0-next.120 + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3548,6 +3630,12 @@ packages: ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -3729,6 +3817,9 @@ packages: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3767,6 +3858,15 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -3874,6 +3974,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@4.4.3: + resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==} + engines: {node: '>=20'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -3895,6 +3999,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + splaytree@3.2.3: resolution: {integrity: sha512-7OXrNWzy6CK+r7Ch9OLPBDTKfB6XlWHjX4P0RU5B3IgFuWPeYN0XtRtlexGRjgbQxpfaUve6jTAwBGWuGntz/w==} engines: {node: '>=18.20 || >=20'} @@ -3923,6 +4030,9 @@ packages: string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -4032,6 +4142,9 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -4136,15 +4249,30 @@ packages: unist-util-is@4.1.0: resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + unist-util-visit-parents@3.1.1: resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + unist-util-visit@2.0.3: resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + unocss@66.7.5: resolution: {integrity: sha512-nAdmU8TwnQoiLnQjZ6Hm1GmHy9lTexKsAZNEJtZnxN9wyFRc1eLjQgmh9r7UEGxBQMQLD8OZOgmk5HpwObbh0Q==} peerDependencies: @@ -4199,6 +4327,12 @@ packages: vfile-message@2.0.4: resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-plugin-devtools-json@1.0.0: resolution: {integrity: sha512-MobvwqX76Vqt/O4AbnNMNWoXWGrKUqZbphCUle/J2KXH82yKQiunOeKnz/nqEPosPsoWWPP9FtNuPBSYpiiwkw==} peerDependencies: @@ -4405,6 +4539,9 @@ packages: zimmerframe@1.1.4: resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@acemir/cssom@0.9.29': {} @@ -5566,6 +5703,46 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true + '@shikijs/core@4.4.3': + dependencies: + '@shikijs/primitive': 4.4.3 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + + '@shikijs/primitive@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/themes@4.4.3': + dependencies: + '@shikijs/types': 4.4.3 + + '@shikijs/types@4.4.3': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + + '@shikijs/vscode-textmate@10.0.2': {} + '@shuding/opentype.js@1.4.0-beta.0': dependencies: fflate: 0.7.5 @@ -5889,6 +6066,10 @@ snapshots: '@types/estree@1.0.8': {} + '@types/hast@3.0.5': + dependencies: + '@types/unist': 3.0.3 + '@types/jsdom@27.0.0': dependencies: '@types/node': 25.0.3 @@ -6103,6 +6284,8 @@ snapshots: '@typescript-eslint/types': 8.50.1 eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.3.3': {} + '@unocss/cli@66.7.5': dependencies: '@jridgewell/remapping': 2.3.5 @@ -6513,6 +6696,8 @@ snapshots: camelize@1.0.1: {} + ccount@2.0.1: {} + chai@5.3.3: dependencies: assertion-error: 2.0.1 @@ -6530,6 +6715,10 @@ snapshots: chalk@5.6.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + check-error@2.1.3: {} chokidar@4.0.3: @@ -6564,6 +6753,8 @@ snapshots: colorette@2.0.20: {} + comma-separated-tokens@2.0.3: {} + concat-map@0.0.1: {} confbox@0.1.8: {} @@ -6664,6 +6855,10 @@ snapshots: devalue@5.6.1: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + dexie@4.2.1: {} dom-accessibility-api@0.5.16: {} @@ -6952,6 +7147,24 @@ snapshots: has-flag@4.0.0: {} + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.5 + hex-rgb@4.3.0: {} hookable@5.5.3: {} @@ -6962,6 +7175,8 @@ snapshots: html-escaper@2.0.2: {} + html-void-elements@3.0.0: {} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -7151,6 +7366,18 @@ snapshots: dependencies: semver: 7.7.3 + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.3 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + mdn-data@2.27.1: {} mdsvex@0.12.7(svelte@5.46.0): @@ -7163,6 +7390,23 @@ snapshots: unist-util-visit: 2.0.3 vfile-message: 2.0.4 + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + min-indent@1.0.1: {} miniflare@5.20260820.0-alpha: @@ -7222,6 +7466,14 @@ snapshots: ohash@2.0.11: {} + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + open@10.2.0: dependencies: default-browser: 5.5.0 @@ -7454,6 +7706,8 @@ snapshots: prismjs@1.30.0: {} + property-information@7.2.0: {} + punycode@2.3.1: {} quansync@1.0.0: {} @@ -7489,6 +7743,16 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + regexp-tree@0.1.27: {} require-from-string@2.0.2: {} @@ -7672,6 +7936,17 @@ snapshots: shebang-regex@3.0.0: {} + shiki@4.4.3: + dependencies: + '@shikijs/core': 4.4.3 + '@shikijs/engine-javascript': 4.4.3 + '@shikijs/engine-oniguruma': 4.4.3 + '@shikijs/langs': 4.4.3 + '@shikijs/themes': 4.4.3 + '@shikijs/types': 4.4.3 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.5 + siginfo@2.0.0: {} simple-swizzle@0.2.4: @@ -7690,6 +7965,8 @@ snapshots: source-map@0.6.1: {} + space-separated-tokens@2.0.2: {} + splaytree@3.2.3: {} stackback@0.0.2: {} @@ -7725,6 +8002,11 @@ snapshots: string.prototype.codepointat@0.2.1: {} + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -7833,6 +8115,8 @@ snapshots: tree-kill@1.2.2: {} + trim-lines@3.0.1: {} + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -7945,21 +8229,44 @@ snapshots: unist-util-is@4.1.0: {} + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position@2.0.3: dependencies: '@types/unist': 2.0.11 + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit-parents@3.1.1: dependencies: '@types/unist': 2.0.11 unist-util-is: 4.1.0 + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit@2.0.3: dependencies: '@types/unist': 2.0.11 unist-util-is: 4.1.0 unist-util-visit-parents: 3.1.1 + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + unocss@66.7.5(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.8.2)): dependencies: '@unocss/cli': 66.7.5 @@ -8017,6 +8324,16 @@ snapshots: '@types/unist': 2.0.11 unist-util-stringify-position: 2.0.3 + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + vite-plugin-devtools-json@1.0.0(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(tsx@4.23.12)(yaml@2.8.2)): dependencies: uuid: 11.1.0 @@ -8231,3 +8548,5 @@ snapshots: youch-core: 0.3.3 zimmerframe@1.1.4: {} + + zwitch@2.0.4: {} -- 2.51.2