diff --git a/.changeset/add-ascii-plugin.md b/.changeset/add-ascii-plugin.md new file mode 100644 index 00000000..2bf516da --- /dev/null +++ b/.changeset/add-ascii-plugin.md @@ -0,0 +1,5 @@ +--- +"@streamdown/ascii": minor +--- + +Add `@streamdown/ascii`, a new plugin package that renders agent-generated ASCII and Unicode box-drawing diagrams (`┌─┐`, `│ │`, `└─┘`, `──►`) as stable preformatted blocks. It binds to ```ascii, ```diagram, and ```chart code fences by default, disables font ligatures so sequences like `-->` don't collapse into a stylized arrow glyph, uses an advance-consistent monospace font stack, and renders each block as a single unbroken text node with no per-line span wrappers so streaming appends never reflow existing rows. Plugs into the existing `plugins.renderers` extension point (`import { ascii } from "@streamdown/ascii"`) with no core changes required. diff --git a/apps/website/content/docs/plugins/ascii.mdx b/apps/website/content/docs/plugins/ascii.mdx new file mode 100644 index 00000000..87d3d58f --- /dev/null +++ b/apps/website/content/docs/plugins/ascii.mdx @@ -0,0 +1,123 @@ +--- +title: "@streamdown/ascii" +description: Render ASCII and Unicode box-drawing diagrams without breaking alignment. +type: reference +summary: Preformatted rendering for agent-generated ASCII/box-drawing diagrams and flowcharts. +prerequisites: + - /docs/plugins +related: + - /docs/plugins/mermaid + - /docs/custom-renderers +--- + +The `@streamdown/ascii` plugin renders ASCII and Unicode box-drawing diagrams (`┌─┐`, `│ │`, `└─┘`, `──►`) as stable preformatted blocks, so they don't break in the browser the way they do with typical web typography. + +- Binds to ```ascii, ```diagram, and ```chart code fences by default +- Disables font ligatures so sequences like `-->` are never collapsed into a stylized arrow glyph +- Renders a single, unbroken text node with no per-line span wrappers or syntax highlighting, so streaming appends never reflow existing rows +- Uses an advance-consistent monospace font stack so box-drawing characters line up with plain ASCII + +## The problem + +LLMs and coding agents default to ASCII and Unicode box-drawing characters for architecture diagrams and flowcharts instead of Mermaid. Rendered as regular Markdown code, these break in a few common ways: + +- **Font ligatures** collapse ASCII sequences — `-->` renders as a single stylized arrow glyph, destroying column alignment +- **Line-by-line span wrappers** (common in syntax highlighters) disrupt vertical alignment between rows +- **Standard web monospace fonts** don't guarantee uniform advance widths for box-drawing characters (`─│┌┐└┘`) versus plain ASCII + +`@streamdown/ascii` renders these fences as plain `
` blocks with ligatures disabled and an advance-consistent font stack, so the diagram looks the same as it did when the model generated it.
+
+## Install
+
+```package-install
+npm install @streamdown/ascii
+```
+
+## Usage
+
+```tsx title="chat.tsx" lineNumbers
+import { Streamdown } from "streamdown";
+import { ascii } from "@streamdown/ascii";
+
+
+ {markdown}
+
+```
+
+For advanced configuration, use `createAsciiPlugin`:
+
+```tsx title="app/page.tsx"
+import { Streamdown } from "streamdown";
+import { createAsciiPlugin } from "@streamdown/ascii";
+
+const ascii = createAsciiPlugin({
+ languages: ["ascii", "diagram", "chart", "box"],
+ className: "my-ascii-block",
+ fontFamily: "Menlo, Consolas, monospace",
+});
+
+export default function Page() {
+ return (
+
+ {markdown}
+
+ );
+}
+```
+
+Your AI can then output diagrams using any of the bound fences:
+
+````markdown
+```ascii
+┌─────────┐ ┌─────────┐
+│ Client │────►│ Server │
+└─────────┘ └─────────┘
+```
+````
+
+## Options
+
+| Option | Type | Default | Description |
+|--------|------|---------|-------------|
+| `languages` | `string[]` | `["ascii", "diagram", "chart"]` | Code fence languages bound to the renderer |
+| `className` | `string` | — | Extra class names applied to the rendered `` element |
+| `fontFamily` | `string` | `ui-monospace, "SF Mono", "Cascadia Mono", "DejaVu Sans Mono", "Liberation Mono", Menlo, Consolas, monospace` | Override the monospace font stack |
+
+## Streaming safety
+
+Diagrams stream in one character at a time along with the rest of the response. `@streamdown/ascii` keeps this stable in two ways:
+
+- The rendered `` always contains exactly one text child (`{code}`) — no per-line `` wrappers, no syntax highlighting — so appending characters never causes existing rows to reflow.
+- The component's tree shape does not change between an incomplete and a complete fence. Incompleteness is only ever surfaced through a stable `data-incomplete` attribute, never by adding, removing, or swapping elements, so React never remounts the block mid-stream.
+
+## Styling
+
+The rendered `` sets:
+
+- `font-variant-ligatures: none` and `font-feature-settings: "liga" 0, "calt" 0` — prevents ASCII arrow sequences (`-->`, `<--`) from being collapsed into ligature glyphs
+- `white-space: pre` — preserves whitespace exactly as generated, without wrapping (wrapping destroys ASCII art column alignment)
+- `overflow-x: auto` — wide diagrams scroll horizontally instead of wrapping
+- `tab-size: 2` — consistent tab rendering
+
+## Plugin interface
+
+The ASCII plugin implements Streamdown's `CustomRenderer` shape, so it plugs into the existing `plugins.renderers` extension point with no core changes required:
+
+```tsx
+interface AsciiPlugin {
+ component: React.ComponentType;
+ language: string[];
+}
+
+interface AsciiRendererProps {
+ code: string;
+ isIncomplete: boolean;
+ language: string;
+ meta?: string;
+}
+```
+
+## Related features
+
+- [Custom renderers](/docs/custom-renderers) - The general-purpose extension point this plugin uses
+- [Mermaid](/docs/plugins/mermaid) - Interactive diagram rendering for Mermaid syntax
diff --git a/apps/website/content/docs/plugins/meta.json b/apps/website/content/docs/plugins/meta.json
index 1561e34b..a485ca6e 100644
--- a/apps/website/content/docs/plugins/meta.json
+++ b/apps/website/content/docs/plugins/meta.json
@@ -1,4 +1,4 @@
{
"title": "Plugins",
- "pages": ["index", "code", "mermaid", "math", "cjk"]
+ "pages": ["index", "code", "mermaid", "math", "cjk", "ascii"]
}
diff --git a/packages/streamdown-ascii/__tests__/index.test.tsx b/packages/streamdown-ascii/__tests__/index.test.tsx
new file mode 100644
index 00000000..bddc9d42
--- /dev/null
+++ b/packages/streamdown-ascii/__tests__/index.test.tsx
@@ -0,0 +1,120 @@
+import { render } from "@testing-library/react";
+import { describe, expect, it } from "vitest";
+import { ascii, createAsciiPlugin } from "../index";
+
+describe("ascii", () => {
+ describe("plugin properties", () => {
+ it("binds the default languages", () => {
+ expect(ascii.language).toEqual(["ascii", "diagram", "chart"]);
+ });
+
+ it("exposes a component", () => {
+ expect(typeof ascii.component).toBe("function");
+ });
+ });
+});
+
+describe("createAsciiPlugin", () => {
+ it("creates a plugin with default options", () => {
+ const plugin = createAsciiPlugin();
+ expect(plugin.language).toEqual(["ascii", "diagram", "chart"]);
+ expect(typeof plugin.component).toBe("function");
+ });
+
+ it("binds custom languages", () => {
+ const plugin = createAsciiPlugin({ languages: ["box-drawing"] });
+ expect(plugin.language).toEqual(["box-drawing"]);
+ });
+
+ it("creates independent plugin instances", () => {
+ const plugin1 = createAsciiPlugin({ languages: ["ascii"] });
+ const plugin2 = createAsciiPlugin({ languages: ["diagram"] });
+
+ expect(plugin1.language).toEqual(["ascii"]);
+ expect(plugin2.language).toEqual(["diagram"]);
+ });
+
+ describe("rendered output", () => {
+ const code = "┌─────┐\n│ box │\n└─────┘";
+
+ it("renders a single element containing exactly one text child", () => {
+ const plugin = createAsciiPlugin();
+ const Component = plugin.component;
+ const { container } = render(
+
+ );
+
+ const pre = container.querySelector("pre");
+ expect(pre).toBeTruthy();
+ expect(pre?.childNodes.length).toBe(1);
+ expect(pre?.childNodes[0]?.nodeType).toBe(Node.TEXT_NODE);
+ expect(pre?.textContent).toBe(code);
+ });
+
+ it("applies ligature/white-space/overflow-safe styling", () => {
+ const plugin = createAsciiPlugin();
+ const Component = plugin.component;
+ const { container } = render(
+
+ );
+
+ const pre = container.querySelector("pre");
+ expect(pre?.style.whiteSpace).toBe("pre");
+ expect(pre?.style.overflowX).toBe("auto");
+ expect(pre?.style.fontVariantLigatures).toBe("none");
+ expect(pre?.style.fontFeatureSettings).toBe('"liga" 0, "calt" 0');
+ expect(pre?.style.fontFamily).toContain("ui-monospace");
+ });
+
+ it("keeps the tree shape stable across isIncomplete true -> false", () => {
+ const plugin = createAsciiPlugin();
+ const Component = plugin.component;
+ const { container, rerender } = render(
+
+ );
+
+ const preBefore = container.querySelector("pre");
+ expect(preBefore?.getAttribute("data-incomplete")).toBe("true");
+ expect(preBefore?.childNodes.length).toBe(1);
+
+ rerender( );
+
+ const preAfter = container.querySelector("pre");
+ expect(preAfter).toBe(preBefore);
+ expect(preAfter?.getAttribute("data-incomplete")).toBe("false");
+ expect(preAfter?.childNodes.length).toBe(1);
+ });
+
+ it("does not throw when isIncomplete is true with partial content", () => {
+ const plugin = createAsciiPlugin();
+ const Component = plugin.component;
+ expect(() =>
+ render(
+
+ )
+ ).not.toThrow();
+ });
+
+ it("applies a custom className", () => {
+ const plugin = createAsciiPlugin({ className: "my-ascii-block" });
+ const Component = plugin.component;
+ const { container } = render(
+
+ );
+
+ const pre = container.querySelector("pre");
+ expect(pre?.className).toBe("my-ascii-block");
+ });
+
+ it("applies a custom fontFamily", () => {
+ const plugin = createAsciiPlugin({ fontFamily: "Menlo, monospace" });
+ const Component = plugin.component;
+ const { container } = render(
+
+ );
+
+ const pre = container.querySelector("pre");
+ expect(pre?.style.fontFamily).toBe("Menlo, monospace");
+ });
+ });
+});
diff --git a/packages/streamdown-ascii/index.tsx b/packages/streamdown-ascii/index.tsx
new file mode 100644
index 00000000..c7ac3ac1
--- /dev/null
+++ b/packages/streamdown-ascii/index.tsx
@@ -0,0 +1,133 @@
+"use client";
+
+import type { ComponentType, CSSProperties } from "react";
+
+/**
+ * Monospace stack chosen for uniform, box-drawing-safe character advances.
+ * Standard web monospace fonts (e.g. the system default) frequently give
+ * `┌─┐│└┘` characters a different advance width than plain ASCII, which
+ * breaks column alignment in agent-generated diagrams.
+ */
+const DEFAULT_FONT_FAMILY =
+ 'ui-monospace, "SF Mono", "Cascadia Mono", "DejaVu Sans Mono", "Liberation Mono", Menlo, Consolas, monospace';
+
+/**
+ * Code fence languages bound to the ASCII renderer by default.
+ */
+const DEFAULT_LANGUAGES = ["ascii", "diagram", "chart"];
+
+/**
+ * Props passed to the ASCII renderer component.
+ */
+export interface AsciiRendererProps {
+ /**
+ * The raw text content inside the code fence
+ */
+ code: string;
+ /**
+ * `true` while the code fence is still being streamed
+ */
+ isIncomplete: boolean;
+ /**
+ * The language identifier from the code fence
+ */
+ language: string;
+ /**
+ * Raw metastring from the code fence, if present
+ */
+ meta?: string;
+}
+
+/**
+ * Options for creating an ASCII plugin
+ */
+export interface AsciiPluginOptions {
+ /**
+ * Extra class names applied to the rendered `` element
+ */
+ className?: string;
+ /**
+ * Override the monospace font stack used for the rendered block
+ * @default 'ui-monospace, "SF Mono", "Cascadia Mono", "DejaVu Sans Mono", "Liberation Mono", Menlo, Consolas, monospace'
+ */
+ fontFamily?: string;
+ /**
+ * Code fence languages bound to this renderer
+ * @default ["ascii", "diagram", "chart"]
+ */
+ languages?: string[];
+}
+
+/**
+ * Plugin for rendering ASCII / Unicode box-drawing diagrams.
+ *
+ * Structurally compatible with Streamdown's `CustomRenderer` type, so it can
+ * be passed directly into `plugins.renderers` without a core dependency on
+ * this package.
+ */
+export interface AsciiPlugin {
+ /**
+ * The React component that renders matching code fences
+ */
+ component: ComponentType;
+ /**
+ * Code fence languages bound to this renderer
+ */
+ language: string[];
+}
+
+const createAsciiRenderer = (
+ fontFamily: string,
+ className?: string
+): ComponentType => {
+ const AsciiRenderer = ({
+ code,
+ isIncomplete,
+ language,
+ }: AsciiRendererProps) => {
+ const style: CSSProperties = {
+ fontFamily,
+ fontFeatureSettings: '"liga" 0, "calt" 0',
+ fontVariantLigatures: "none",
+ overflowX: "auto",
+ tabSize: 2,
+ whiteSpace: "pre",
+ };
+
+ return (
+
+ {code}
+
+ );
+ };
+
+ AsciiRenderer.displayName = "AsciiRenderer";
+
+ return AsciiRenderer;
+};
+
+/**
+ * Create an ASCII plugin with optional configuration
+ */
+export function createAsciiPlugin(
+ options: AsciiPluginOptions = {}
+): AsciiPlugin {
+ const fontFamily = options.fontFamily ?? DEFAULT_FONT_FAMILY;
+ const languages = options.languages ?? DEFAULT_LANGUAGES;
+
+ return {
+ component: createAsciiRenderer(fontFamily, options.className),
+ language: languages,
+ };
+}
+
+/**
+ * Pre-configured ASCII plugin with default settings
+ */
+export const ascii = createAsciiPlugin();
diff --git a/packages/streamdown-ascii/package.json b/packages/streamdown-ascii/package.json
new file mode 100644
index 00000000..c513a6cd
--- /dev/null
+++ b/packages/streamdown-ascii/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "@streamdown/ascii",
+ "version": "1.0.0",
+ "description": "ASCII and Unicode box-drawing diagram rendering plugin for Streamdown",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vercel/streamdown.git",
+ "directory": "packages/streamdown-ascii"
+ },
+ "license": "Apache-2.0",
+ "author": "Hayden Bleasel ",
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
+ }
+ },
+ "main": "./dist/index.js",
+ "module": "./dist/index.js",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "build": "tsup",
+ "test": "vitest run",
+ "test:coverage": "vitest --coverage run"
+ },
+ "devDependencies": {
+ "@testing-library/react": "^16.3.2",
+ "@types/react": "^19.2.7",
+ "@types/react-dom": "^19.2.3",
+ "@vitejs/plugin-react": "^5.1.2",
+ "@vitest/coverage-v8": "^4.1.10",
+ "jsdom": "^27.3.0",
+ "react-dom": "^19.2.3",
+ "tsup": "^8.5.1",
+ "typescript": "^5.9.3",
+ "vitest": "^4.1.10"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0"
+ }
+}
diff --git a/packages/streamdown-ascii/tsconfig.json b/packages/streamdown-ascii/tsconfig.json
new file mode 100644
index 00000000..17da37c9
--- /dev/null
+++ b/packages/streamdown-ascii/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "target": "es2018",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "strictNullChecks": true,
+ "forceConsistentCasingInFileNames": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "react-jsx",
+ "noEmit": true
+ },
+ "include": ["**/*.ts", "**/*.tsx"],
+ "exclude": ["node_modules", "build", "dist"]
+}
diff --git a/packages/streamdown-ascii/tsup.config.ts b/packages/streamdown-ascii/tsup.config.ts
new file mode 100644
index 00000000..4278607c
--- /dev/null
+++ b/packages/streamdown-ascii/tsup.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from "tsup";
+
+export default defineConfig({
+ dts: true,
+ entry: ["index.tsx"],
+ format: ["esm"],
+ minify: true,
+ outDir: "dist",
+ sourcemap: false,
+ treeshake: true,
+ platform: "browser",
+ external: ["react", "react-dom"],
+});
diff --git a/packages/streamdown-ascii/vitest.config.ts b/packages/streamdown-ascii/vitest.config.ts
new file mode 100644
index 00000000..20d86d1e
--- /dev/null
+++ b/packages/streamdown-ascii/vitest.config.ts
@@ -0,0 +1,10 @@
+import react from "@vitejs/plugin-react";
+import { defineConfig } from "vitest/config";
+
+export default defineConfig({
+ plugins: [react()],
+ test: {
+ environment: "jsdom",
+ globals: true,
+ },
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 96d45570..ff65954d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -158,7 +158,7 @@ importers:
version: 1.6.1(next@16.3.1(@opentelemetry/api@1.9.0)(@types/node@24.10.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
'@vercel/geistdocs':
specifier: 1.23.1
- version: 1.23.1(@svta/cml-cta@1.0.1(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1))(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1)(@tanstack/react-router@1.151.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(micromark-util-types@2.0.2)(micromark@4.0.2)(next@16.3.1(@opentelemetry/api@1.9.0)(@types/node@24.10.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.3.3)(vite@7.3.1(@types/node@24.10.10)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))
+ version: 1.23.1(@svta/cml-cta@1.0.1(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1))(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1)(@tanstack/react-router@1.151.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.3.1(@opentelemetry/api@1.9.0)(@types/node@24.10.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.3.3)(vite@7.3.1(@types/node@24.10.10)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))
'@vercel/speed-insights':
specifier: ^1.3.1
version: 1.3.1(next@16.3.1(@opentelemetry/api@1.9.0)(@types/node@24.10.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
@@ -381,6 +381,43 @@ importers:
specifier: ^4.1.10
version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@25.0.9)(@vitest/coverage-v8@4.1.10)(jsdom@27.4.0)(vite@7.3.1(@types/node@25.0.9)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))
+ packages/streamdown-ascii:
+ dependencies:
+ react:
+ specifier: ^18.0.0 || ^19.0.0
+ version: 19.2.3
+ devDependencies:
+ '@testing-library/react':
+ specifier: ^16.3.2
+ version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@types/react':
+ specifier: ^19.2.7
+ version: 19.2.7
+ '@types/react-dom':
+ specifier: ^19.2.3
+ version: 19.2.3(@types/react@19.2.7)
+ '@vitejs/plugin-react':
+ specifier: ^5.1.2
+ version: 5.1.2(vite@7.3.1(@types/node@25.0.9)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))
+ '@vitest/coverage-v8':
+ specifier: ^4.1.10
+ version: 4.1.10(vitest@4.1.10)
+ jsdom:
+ specifier: ^27.3.0
+ version: 27.4.0
+ react-dom:
+ specifier: ^19.2.3
+ version: 19.2.3(react@19.2.3)
+ tsup:
+ specifier: ^8.5.1
+ version: 8.5.1(jiti@2.7.0)(postcss@8.5.26)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0)
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+ vitest:
+ specifier: ^4.1.10
+ version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@25.0.9)(@vitest/coverage-v8@4.1.10)(jsdom@27.4.0)(vite@7.3.1(@types/node@25.0.9)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))
+
packages/streamdown-cjk:
dependencies:
react:
@@ -577,10 +614,6 @@ packages:
'@asamuzakjp/nwsapi@2.3.9':
resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
- '@babel/code-frame@7.28.6':
- resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
- engines: {node: '>=6.9.0'}
-
'@babel/code-frame@7.29.7':
resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
engines: {node: '>=6.9.0'}
@@ -619,18 +652,10 @@ packages:
resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@7.27.1':
- resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-string-parser@7.29.7':
resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.28.5':
- resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-validator-identifier@7.29.7':
resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
@@ -643,11 +668,6 @@ packages:
resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.6':
- resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
'@babel/parser@7.29.8':
resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==}
engines: {node: '>=6.0.0'}
@@ -665,10 +685,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/runtime@7.28.6':
- resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
- engines: {node: '>=6.9.0'}
-
'@babel/runtime@7.29.7':
resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
engines: {node: '>=6.9.0'}
@@ -681,10 +697,6 @@ packages:
resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.28.6':
- resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
- engines: {node: '>=6.9.0'}
-
'@babel/types@7.29.8':
resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==}
engines: {node: '>=6.9.0'}
@@ -3329,277 +3341,139 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.53':
resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
- '@rollup/rollup-android-arm-eabi@4.55.1':
- resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==}
- cpu: [arm]
- os: [android]
-
'@rollup/rollup-android-arm-eabi@4.62.5':
resolution: {integrity: sha512-jfkGfTwhQpsiSckPF8r9bU3pn3vyd72NlWaO+TgEO6WPSDnUhXzrNYCHBMOYj0ACaUgjm6eERLF+XV9a6RstoA==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.55.1':
- resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==}
- cpu: [arm64]
- os: [android]
-
'@rollup/rollup-android-arm64@4.62.5':
resolution: {integrity: sha512-oGVqyQlxnrz9/ty89oHpU857VUHEl5/Xu4R2lS+aivCTrNnSsbiENzTnNaBsjxH0CNWGPhzHArOLFwo+oKXveA==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.55.1':
- resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==}
- cpu: [arm64]
- os: [darwin]
-
'@rollup/rollup-darwin-arm64@4.62.5':
resolution: {integrity: sha512-bW7B8xMEq8n99Q3ieEcPRGuphurdZAaFzQc9Efyyw3FL6DZO6pMy9xhdN+kBoD7Sy05xNXSr4OyPPnpkYriS/A==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.55.1':
- resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==}
- cpu: [x64]
- os: [darwin]
-
'@rollup/rollup-darwin-x64@4.62.5':
resolution: {integrity: sha512-YSwBS86QeHOGlrxJ1PSOIZSkzRL/JmKeunhc+lV6M1a6En8QuVCD/T/qIA0J4Gd2Y86RIOBYrLcOUtqGh9+/1w==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.55.1':
- resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==}
- cpu: [arm64]
- os: [freebsd]
-
'@rollup/rollup-freebsd-arm64@4.62.5':
resolution: {integrity: sha512-2fST8lILgl7cKbme/1KDdPCmbXbG+gqoV3bHp19L0ypX/3akYMBVdOunPleRCwonoLnXOZ/0F+Mt/v8POFmfcQ==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.55.1':
- resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==}
- cpu: [x64]
- os: [freebsd]
-
'@rollup/rollup-freebsd-x64@4.62.5':
resolution: {integrity: sha512-cpIxQCP9J+EVad0a6LO1kY3ZGODlk80VlI+2I96B8xMcdHZ4pLVhfQ49JFpYqjPF91FFkQWftf57YlDcTiw9yQ==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
- resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==}
- cpu: [arm]
- os: [linux]
- libc: [glibc]
-
'@rollup/rollup-linux-arm-gnueabihf@4.62.5':
resolution: {integrity: sha512-r9fGh3eFs3e/udWh5ZjXQtxiYK/xoFxQaYR/cELxac/Udkl5Th+IsFm0CX3Kl9hmUH/we7EoMpjJgeQNnE0+IA==}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.55.1':
- resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==}
- cpu: [arm]
- os: [linux]
- libc: [musl]
-
'@rollup/rollup-linux-arm-musleabihf@4.62.5':
resolution: {integrity: sha512-xdvFdp7OM6KLJviJT2g/YuRSUjnZgGHk4RNgwIbN7X6cPugOucV60DdHXWzsBVCUdrGb6qSXnJQrrAKMmQuj3Q==}
cpu: [arm]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-arm64-gnu@4.55.1':
- resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
'@rollup/rollup-linux-arm64-gnu@4.62.5':
resolution: {integrity: sha512-rRqILAndyzHzP7T9NFQrq+4HFWNhqkqkKur7eiBpfLmz01PO0JKx5Vchu3YllE4YXI/Ftgq/szrDWg5GJ0mI8g==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.55.1':
- resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
'@rollup/rollup-linux-arm64-musl@4.62.5':
resolution: {integrity: sha512-Gf4X3qVMucayUvux6aXXPgXovocSFUC0rrffDuPI/S2nHhNMhjcZxsrAFYCOF350PRreW1XwzFj3CT/3bKsWCw==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.55.1':
- resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==}
- cpu: [loong64]
- os: [linux]
- libc: [glibc]
-
'@rollup/rollup-linux-loong64-gnu@4.62.5':
resolution: {integrity: sha512-+s5qA0TNM0qm8PK/a5gt/1Hpx+NV08uSuCncvhziIlQzT6AEV2fnUQo7eBtFTFO0nA9scauvoR2HusfXmQnO4w==}
cpu: [loong64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-loong64-musl@4.55.1':
- resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==}
- cpu: [loong64]
- os: [linux]
- libc: [musl]
-
'@rollup/rollup-linux-loong64-musl@4.62.5':
resolution: {integrity: sha512-ybb6QvWwWJCbBWqERpc8K3pYVGIrXlG8MEQ8IIuJY6Y9KdHQxoFoNyfkAOtKn1VHu3KuLidXvwrvGR1mEjeWCw==}
cpu: [loong64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-ppc64-gnu@4.55.1':
- resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
'@rollup/rollup-linux-ppc64-gnu@4.62.5':
resolution: {integrity: sha512-nZb1DtnOyhCmYvsC8A2CwOkopVg+IS1+fPUa7rMOAXtNw5+lLCLLPqd6XAiNrGtoQKsbvIBOwsHnBH/3wnb4HQ==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-ppc64-musl@4.55.1':
- resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==}
- cpu: [ppc64]
- os: [linux]
- libc: [musl]
-
'@rollup/rollup-linux-ppc64-musl@4.62.5':
resolution: {integrity: sha512-yMbj63Sp89ryrXLWyz+sy+fYD2HpOnMCLGbe4Oa1smclFSUukdtD/BgdiHaAetJNb74URD8U4hM+qG5KVzMEkg==}
cpu: [ppc64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-riscv64-gnu@4.55.1':
- resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
'@rollup/rollup-linux-riscv64-gnu@4.62.5':
resolution: {integrity: sha512-mhoan3OJw2kYV/e1jtIdmvUZgyBFeA6zGWsOswmR0Tg19TQbowZuR+JMLID6spbbBN7Zee2ejrgmy3+FxGrIdA==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-musl@4.55.1':
- resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==}
- cpu: [riscv64]
- os: [linux]
- libc: [musl]
-
'@rollup/rollup-linux-riscv64-musl@4.62.5':
resolution: {integrity: sha512-5ZTLmjWbb1VZdjuyhe83K/8QO0/h11midQCBP+X5OYn32ra7eOBoM0ZqtaY4nkgNsYgmdVhMYPoyVPTjUpHf3w==}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-s390x-gnu@4.55.1':
- resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
'@rollup/rollup-linux-s390x-gnu@4.62.5':
resolution: {integrity: sha512-m53kG+br6PGxOTmgBEM2DHSDs9RVjsyEbUwjJPJGTFm1grWOG8EKJggDCTb60unD4Tjby8fi7/m9XfkEWasVWg==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.55.1':
- resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
'@rollup/rollup-linux-x64-gnu@4.62.5':
resolution: {integrity: sha512-6RHPJR1g/uvdYU8uXBnfq3nlqyZCP82Fr6NHgfGoaIeSh0YEqnX/x6uA9MmJJbnSH7swqX4F+CkGdUF+6doiQA==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.55.1':
- resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
'@rollup/rollup-linux-x64-musl@4.62.5':
resolution: {integrity: sha512-xs+OXQtEXgpXT0DmA5+U3qnRZHdCST/5HRQxS8wSPZTUZN/EMWeHuSIod32LQklTBZBV9DyfncKBQ8n5V3eFdw==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openbsd-x64@4.55.1':
- resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==}
- cpu: [x64]
- os: [openbsd]
-
'@rollup/rollup-openbsd-x64@4.62.5':
resolution: {integrity: sha512-e7hD+sl3s+mcLQDZ8pbudBVsdG6r5yN4w3LqG2TJ8sQHDpblWj5lrJs/3m01Cvlxbt4x13zu5thLjgypgtkYzw==}
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.55.1':
- resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==}
- cpu: [arm64]
- os: [openharmony]
-
'@rollup/rollup-openharmony-arm64@4.62.5':
resolution: {integrity: sha512-GiyJaCf+WpMub/17aPcKk27QMl5W6f+KhdPTjlFOn5akH5Wa/DCM9Stdx5cDfmasyKB08MqpVQ1uJE2RkkpbXg==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.55.1':
- resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==}
- cpu: [arm64]
- os: [win32]
-
'@rollup/rollup-win32-arm64-msvc@4.62.5':
resolution: {integrity: sha512-+OQ8U2DdoEfXl8T4Fb18AjmEwbXMerKDKCL8yCPAYhKCEEKoul7rkbeGCBFCbAlaGaa7pmtRTpkAJM2LE/i5FA==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.55.1':
- resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==}
- cpu: [ia32]
- os: [win32]
-
'@rollup/rollup-win32-ia32-msvc@4.62.5':
resolution: {integrity: sha512-KanvAZrPKbDBFwrgiU9yEVpQoox9QPV1WZOXX7HudJQY+eSlu82CtWxDU8WtuRRvtN5EGkLczkd6Y6DTcvm9wA==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.55.1':
- resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==}
- cpu: [x64]
- os: [win32]
-
'@rollup/rollup-win32-x64-gnu@4.62.5':
resolution: {integrity: sha512-1aC3UEWTtRl3RK3VpDJ/Tqk1XI4SLTmXIthAq6wRWo8XiSXJNd+VprJM4/1P4+i6HIaFEFlVi9sTTziniD2tOQ==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.55.1':
- resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==}
- cpu: [x64]
- os: [win32]
-
'@rollup/rollup-win32-x64-msvc@4.62.5':
resolution: {integrity: sha512-/gDJaRs4gl0NPIwqCz+6PkpmhhjRAD2j6P4rSNHBzUkO3naEx2mIU0pRle1vUNRQ7mE/+8OOeXLTv/J56FKiQg==}
cpu: [x64]
@@ -6448,11 +6322,6 @@ packages:
robust-predicates@3.0.2:
resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
- rollup@4.55.1:
- resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
rollup@4.62.5:
resolution: {integrity: sha512-/tqMfgP7GPA3PHhCmuiS4vIjrSVhHLgY++i+dhbG462euyAj7FpM4D9uq1X3BgjlqRdpcOrYhcQtfiQLNc8tqw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -7324,12 +7193,6 @@ snapshots:
'@asamuzakjp/nwsapi@2.3.9': {}
- '@babel/code-frame@7.28.6':
- dependencies:
- '@babel/helper-validator-identifier': 7.28.5
- js-tokens: 4.0.0
- picocolors: 1.1.1
-
'@babel/code-frame@7.29.7':
dependencies:
'@babel/helper-validator-identifier': 7.29.7
@@ -7340,15 +7203,15 @@ snapshots:
'@babel/core@7.28.6':
dependencies:
- '@babel/code-frame': 7.28.6
+ '@babel/code-frame': 7.29.7
'@babel/generator': 7.28.6
'@babel/helper-compilation-targets': 7.28.6
'@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6)
'@babel/helpers': 7.28.6
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.8
'@babel/template': 7.28.6
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.8
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
debug: 4.4.3
@@ -7360,8 +7223,8 @@ snapshots:
'@babel/generator@7.28.6':
dependencies:
- '@babel/parser': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
@@ -7379,7 +7242,7 @@ snapshots:
'@babel/helper-module-imports@7.28.6':
dependencies:
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.8
transitivePeerDependencies:
- supports-color
@@ -7387,19 +7250,15 @@ snapshots:
dependencies:
'@babel/core': 7.28.6
'@babel/helper-module-imports': 7.28.6
- '@babel/helper-validator-identifier': 7.28.5
+ '@babel/helper-validator-identifier': 7.29.7
'@babel/traverse': 7.28.6
transitivePeerDependencies:
- supports-color
'@babel/helper-plugin-utils@7.28.6': {}
- '@babel/helper-string-parser@7.27.1': {}
-
'@babel/helper-string-parser@7.29.7': {}
- '@babel/helper-validator-identifier@7.28.5': {}
-
'@babel/helper-validator-identifier@7.29.7': {}
'@babel/helper-validator-option@7.27.1': {}
@@ -7407,11 +7266,7 @@ snapshots:
'@babel/helpers@7.28.6':
dependencies:
'@babel/template': 7.28.6
- '@babel/types': 7.28.6
-
- '@babel/parser@7.28.6':
- dependencies:
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.8
'@babel/parser@7.29.8':
dependencies:
@@ -7427,33 +7282,26 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
- '@babel/runtime@7.28.6': {}
-
'@babel/runtime@7.29.7': {}
'@babel/template@7.28.6':
dependencies:
- '@babel/code-frame': 7.28.6
- '@babel/parser': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/code-frame': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
'@babel/traverse@7.28.6':
dependencies:
- '@babel/code-frame': 7.28.6
+ '@babel/code-frame': 7.29.7
'@babel/generator': 7.28.6
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.8
'@babel/template': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.8
debug: 4.4.3
transitivePeerDependencies:
- supports-color
- '@babel/types@7.28.6':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.28.5
-
'@babel/types@7.29.8':
dependencies:
'@babel/helper-string-parser': 7.29.7
@@ -8021,14 +7869,14 @@ snapshots:
'@manypkg/find-root@1.1.0':
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.7
'@types/node': 12.20.55
find-up: 4.1.0
fs-extra: 8.1.0
'@manypkg/get-packages@1.1.3':
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.7
'@changesets/types': 4.1.0
'@manypkg/find-root': 1.1.0
fs-extra: 8.1.0
@@ -8037,7 +7885,7 @@ snapshots:
'@mdx-js/mdx@3.1.1':
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.5
'@types/mdx': 2.0.14
@@ -10040,153 +9888,78 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.53': {}
- '@rollup/rollup-android-arm-eabi@4.55.1':
- optional: true
-
'@rollup/rollup-android-arm-eabi@4.62.5':
optional: true
- '@rollup/rollup-android-arm64@4.55.1':
- optional: true
-
'@rollup/rollup-android-arm64@4.62.5':
optional: true
- '@rollup/rollup-darwin-arm64@4.55.1':
- optional: true
-
'@rollup/rollup-darwin-arm64@4.62.5':
optional: true
- '@rollup/rollup-darwin-x64@4.55.1':
- optional: true
-
'@rollup/rollup-darwin-x64@4.62.5':
optional: true
- '@rollup/rollup-freebsd-arm64@4.55.1':
- optional: true
-
'@rollup/rollup-freebsd-arm64@4.62.5':
optional: true
- '@rollup/rollup-freebsd-x64@4.55.1':
- optional: true
-
'@rollup/rollup-freebsd-x64@4.62.5':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
- optional: true
-
'@rollup/rollup-linux-arm-gnueabihf@4.62.5':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.55.1':
- optional: true
-
'@rollup/rollup-linux-arm-musleabihf@4.62.5':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.55.1':
- optional: true
-
'@rollup/rollup-linux-arm64-gnu@4.62.5':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.55.1':
- optional: true
-
'@rollup/rollup-linux-arm64-musl@4.62.5':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.55.1':
- optional: true
-
'@rollup/rollup-linux-loong64-gnu@4.62.5':
optional: true
- '@rollup/rollup-linux-loong64-musl@4.55.1':
- optional: true
-
'@rollup/rollup-linux-loong64-musl@4.62.5':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.55.1':
- optional: true
-
'@rollup/rollup-linux-ppc64-gnu@4.62.5':
optional: true
- '@rollup/rollup-linux-ppc64-musl@4.55.1':
- optional: true
-
'@rollup/rollup-linux-ppc64-musl@4.62.5':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.55.1':
- optional: true
-
'@rollup/rollup-linux-riscv64-gnu@4.62.5':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.55.1':
- optional: true
-
'@rollup/rollup-linux-riscv64-musl@4.62.5':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.55.1':
- optional: true
-
'@rollup/rollup-linux-s390x-gnu@4.62.5':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.55.1':
- optional: true
-
'@rollup/rollup-linux-x64-gnu@4.62.5':
optional: true
- '@rollup/rollup-linux-x64-musl@4.55.1':
- optional: true
-
'@rollup/rollup-linux-x64-musl@4.62.5':
optional: true
- '@rollup/rollup-openbsd-x64@4.55.1':
- optional: true
-
'@rollup/rollup-openbsd-x64@4.62.5':
optional: true
- '@rollup/rollup-openharmony-arm64@4.55.1':
- optional: true
-
'@rollup/rollup-openharmony-arm64@4.62.5':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.55.1':
- optional: true
-
'@rollup/rollup-win32-arm64-msvc@4.62.5':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.55.1':
- optional: true
-
'@rollup/rollup-win32-ia32-msvc@4.62.5':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.55.1':
- optional: true
-
'@rollup/rollup-win32-x64-gnu@4.62.5':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.55.1':
- optional: true
-
'@rollup/rollup-win32-x64-msvc@4.62.5':
optional: true
@@ -10277,7 +10050,7 @@ snapshots:
'@standard-schema/spec@1.1.0': {}
- '@streamdown/cjk@1.0.3(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.3)(unified@11.0.5)':
+ '@streamdown/cjk@1.0.3(@types/mdast@4.0.4)(react@19.2.3)(unified@11.0.5)':
dependencies:
react: 19.2.3
remark-cjk-friendly: 2.3.1(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(unified@11.0.5)
@@ -10538,7 +10311,7 @@ snapshots:
'@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.7
'@testing-library/dom': 10.4.1
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
@@ -10550,7 +10323,7 @@ snapshots:
dependencies:
minimatch: 10.2.6
path-browserify: 1.0.1
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.17
'@turbo/darwin-64@2.10.10':
optional: true
@@ -10574,24 +10347,24 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
'@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.28.0
'@types/babel__generator@7.27.0':
dependencies:
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.8
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
'@types/babel__traverse@7.28.0':
dependencies:
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.8
'@types/chai@5.2.3':
dependencies:
@@ -10723,7 +10496,7 @@ snapshots:
'@types/estree-jsx@1.0.5':
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
'@types/estree@1.0.8': {}
@@ -10803,13 +10576,13 @@ snapshots:
dependencies:
execa: 5.1.1
- '@vercel/geistdocs@1.23.1(@svta/cml-cta@1.0.1(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1))(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1)(@tanstack/react-router@1.151.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(micromark-util-types@2.0.2)(micromark@4.0.2)(next@16.3.1(@opentelemetry/api@1.9.0)(@types/node@24.10.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.3.3)(vite@7.3.1(@types/node@24.10.10)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))':
+ '@vercel/geistdocs@1.23.1(@svta/cml-cta@1.0.1(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1))(@svta/cml-structured-field-values@1.0.1(@svta/cml-utils@1.0.1))(@svta/cml-utils@1.0.1)(@tanstack/react-router@1.151.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/mdast@4.0.4)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(next@16.3.1(@opentelemetry/api@1.9.0)(@types/node@24.10.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.3.3)(vite@7.3.1(@types/node@24.10.10)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0))':
dependencies:
'@ai-sdk/react': 3.0.201(react@19.2.3)(zod@4.4.3)
'@clack/prompts': 0.11.0
'@icons-pack/react-simple-icons': 13.15.1(react@19.2.3)
'@orama/tokenizers': 3.1.18
- '@streamdown/cjk': 1.0.3(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.3)(unified@11.0.5)
+ '@streamdown/cjk': 1.0.3(@types/mdast@4.0.4)(react@19.2.3)(unified@11.0.5)
'@streamdown/code': 1.1.1(react@19.2.3)
'@vercel/agent-readability': 0.6.0(next@16.3.1(@opentelemetry/api@1.9.0)(@types/node@24.10.10)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))
'@vercel/oidc': 3.8.2
@@ -11064,9 +10837,9 @@ snapshots:
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
- bundle-require@5.1.0(esbuild@0.27.2):
+ bundle-require@5.1.0(esbuild@0.27.7):
dependencies:
- esbuild: 0.27.2
+ esbuild: 0.27.7
load-tsconfig: 0.2.5
cac@6.7.14: {}
@@ -11579,7 +11352,7 @@ snapshots:
estree-util-attach-comments@3.0.0:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
estree-util-build-jsx@3.0.1:
dependencies:
@@ -11592,7 +11365,7 @@ snapshots:
estree-util-scope@1.0.0:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
devlop: 1.1.0
estree-util-to-js@2.0.0:
@@ -11603,7 +11376,7 @@ snapshots:
estree-util-value-to-estree@3.5.0:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
estree-util-visit@2.0.0:
dependencies:
@@ -11612,7 +11385,7 @@ snapshots:
estree-walker@3.0.3:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
eventsource-parser@3.0.6: {}
@@ -11666,10 +11439,6 @@ snapshots:
dependencies:
format: 0.2.2
- fdir@6.5.0(picomatch@4.0.3):
- optionalDependencies:
- picomatch: 4.0.3
-
fdir@6.5.0(picomatch@4.0.7):
optionalDependencies:
picomatch: 4.0.7
@@ -11691,7 +11460,7 @@ snapshots:
dependencies:
magic-string: 0.30.21
mlly: 1.8.0
- rollup: 4.55.1
+ rollup: 4.62.5
foreground-child@3.3.1:
dependencies:
@@ -11935,7 +11704,7 @@ snapshots:
hast-util-to-estree@3.1.3:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.5
comma-separated-tokens: 2.0.3
@@ -12373,7 +12142,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
- semver: 7.7.3
+ semver: 7.8.5
markdown-extensions@2.0.0: {}
@@ -13488,7 +13257,7 @@ snapshots:
recma-build-jsx@1.0.0:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
estree-util-build-jsx: 3.0.1
vfile: 6.0.3
@@ -13503,14 +13272,14 @@ snapshots:
recma-parse@1.0.0:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
esast-util-from-js: 2.0.1
unified: 11.0.5
vfile: 6.0.3
recma-stringify@1.0.0:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
estree-util-to-js: 2.0.0
unified: 11.0.5
vfile: 6.0.3
@@ -13558,7 +13327,7 @@ snapshots:
rehype-recma@1.0.0:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
'@types/hast': 3.0.5
hast-util-to-estree: 3.1.3
transitivePeerDependencies:
@@ -13679,37 +13448,6 @@ snapshots:
robust-predicates@3.0.2: {}
- rollup@4.55.1:
- dependencies:
- '@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.55.1
- '@rollup/rollup-android-arm64': 4.55.1
- '@rollup/rollup-darwin-arm64': 4.55.1
- '@rollup/rollup-darwin-x64': 4.55.1
- '@rollup/rollup-freebsd-arm64': 4.55.1
- '@rollup/rollup-freebsd-x64': 4.55.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.55.1
- '@rollup/rollup-linux-arm-musleabihf': 4.55.1
- '@rollup/rollup-linux-arm64-gnu': 4.55.1
- '@rollup/rollup-linux-arm64-musl': 4.55.1
- '@rollup/rollup-linux-loong64-gnu': 4.55.1
- '@rollup/rollup-linux-loong64-musl': 4.55.1
- '@rollup/rollup-linux-ppc64-gnu': 4.55.1
- '@rollup/rollup-linux-ppc64-musl': 4.55.1
- '@rollup/rollup-linux-riscv64-gnu': 4.55.1
- '@rollup/rollup-linux-riscv64-musl': 4.55.1
- '@rollup/rollup-linux-s390x-gnu': 4.55.1
- '@rollup/rollup-linux-x64-gnu': 4.55.1
- '@rollup/rollup-linux-x64-musl': 4.55.1
- '@rollup/rollup-openbsd-x64': 4.55.1
- '@rollup/rollup-openharmony-arm64': 4.55.1
- '@rollup/rollup-win32-arm64-msvc': 4.55.1
- '@rollup/rollup-win32-ia32-msvc': 4.55.1
- '@rollup/rollup-win32-x64-gnu': 4.55.1
- '@rollup/rollup-win32-x64-msvc': 4.55.1
- fsevents: 2.3.3
-
rollup@4.62.5:
dependencies:
'@types/estree': 1.0.9
@@ -13989,7 +13727,7 @@ snapshots:
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.7
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.17
ts-interface-checker: 0.1.13
super-media-element@1.4.2: {}
@@ -14046,8 +13784,8 @@ snapshots:
tinyglobby@0.2.15:
dependencies:
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
+ fdir: 6.5.0(picomatch@4.0.7)
+ picomatch: 4.0.7
tinyglobby@0.2.17:
dependencies:
@@ -14097,22 +13835,22 @@ snapshots:
tsup@8.5.1(jiti@2.7.0)(postcss@8.5.26)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0):
dependencies:
- bundle-require: 5.1.0(esbuild@0.27.2)
+ bundle-require: 5.1.0(esbuild@0.27.7)
cac: 6.7.14
chokidar: 4.0.3
consola: 3.4.2
debug: 4.4.3
- esbuild: 0.27.2
+ esbuild: 0.27.7
fix-dts-default-cjs-exports: 1.0.1
joycon: 3.1.1
picocolors: 1.1.1
postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.26)(tsx@4.21.0)(yaml@2.9.0)
resolve-from: 5.0.0
- rollup: 4.55.1
+ rollup: 4.62.5
source-map: 0.7.6
sucrase: 3.35.1
tinyexec: 0.3.2
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.17
tree-kill: 1.2.2
optionalDependencies:
postcss: 8.5.26
@@ -14299,7 +14037,7 @@ snapshots:
vega-expression@6.1.0:
dependencies:
- '@types/estree': 1.0.8
+ '@types/estree': 1.0.9
vega-util: 2.1.0
vega-expression@6.2.2:
@@ -14598,11 +14336,11 @@ snapshots:
magic-string: 0.30.21
obug: 2.1.1
pathe: 2.0.3
- picomatch: 4.0.3
+ picomatch: 4.0.7
std-env: 4.2.0
tinybench: 2.9.0
- tinyexec: 1.0.2
- tinyglobby: 0.2.15
+ tinyexec: 1.3.0
+ tinyglobby: 0.2.17
tinyrainbow: 3.1.1
vite: 7.3.1(@types/node@25.0.9)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.9.0)
why-is-node-running: 2.3.0