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: {}