diff --git a/.amp/services.yaml b/.amp/services.yaml
index 77bb035..2b4b0b9 100644
--- a/.amp/services.yaml
+++ b/.amp/services.yaml
@@ -2,5 +2,5 @@ services:
yawn-examples:
command: npm run examples
portal:
- title: Yawn examples
- description: Example index and WebGPU render graph studio with hot reload.
+ title: Yawn docs and playgrounds
+ description: VitePress package tutorials and isolated WebGPU playgrounds with hot reload.
diff --git a/.gitignore b/.gitignore
index 7328621..887b670 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,6 +46,7 @@ target/
# WASM build artifacts
.rsw/
static/level-editor/
+docs/.vitepress/cache/
# Amp runtime artifacts
.amp/in/
diff --git a/AGENTS.md b/AGENTS.md
index 28ada97..8d60415 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,5 +1,6 @@
# Build, Lint, and Test Commands
-- `npm run examples`: Start the examples index with Vite and WASM hot reload
+- `npm run examples`: Start VitePress docs and WebGPU playgrounds with WASM hot reload
+- `npm run docs:build`: Build the VitePress documentation into `dist/docs/`
- `npm run build`: Build optimized WASM and JS in `dist/` for development
- `npm run build-release`: Build optimized WASM and JS for production
- `cargo check`: Validate Rust sources quickly before full builds
diff --git a/README.md b/README.md
index a4fda61..115cc3b 100644
--- a/README.md
+++ b/README.md
@@ -43,13 +43,11 @@ loadouts, lifecycle, and transient resource management; conveniences live outsid
- `addons/gltf-import` — glTF worker that writes format-neutral render-data packets directly to a fixed SOA.
- `addons/mesh-handles` — conventional mesh, instance, camera, and material objects plus optional BVH picking.
-The integration example in `examples/render-graph-studio` consumes every package
-through its public API; no example source or shader lives in core.
-
-The focused recipes in `examples/cookbook` show each addon independently, including
-AST/JSO/FXNode authoring, external render and compute programs, graph activation,
-shared glTF import, mesh instances, custom SOA columns, SAB animation, picking, and
-worker-to-worker use.
+The editable playground and Render Graph Studio under `examples/` consume the
+packages through their public APIs; no example source or shader lives in core.
+Tutorial-style package guides and all focused recipes live under `docs/`, including
+AST/JSO/FXNode authoring, render and compute programs, graph activation, shared glTF
+import, mesh instances, custom SOA columns, SAB animation, picking, and worker use.
Example graph authoring:
diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js
new file mode 100644
index 0000000..9af5242
--- /dev/null
+++ b/docs/.vitepress/config.js
@@ -0,0 +1,67 @@
+import { defineConfig } from "vitepress";
+
+export default defineConfig({
+ title: "Yawn",
+ description: "Worker-native WebGPU rendering with shared render data.",
+ base: "/docs/",
+ outDir: "../dist/docs",
+ cleanUrls: true,
+ head: [
+ ["meta", { name: "theme-color", content: "#0d1117" }],
+ ["link", { rel: "icon", href: "data:image/svg+xml, " }],
+ ],
+ themeConfig: {
+ logo: {
+ light: "data:image/svg+xml, ",
+ dark: "data:image/svg+xml, ",
+ },
+ nav: [
+ { text: "Learn", link: "/guide/first-scene" },
+ { text: "Packages", link: "/packages/" },
+ { text: "Recipes", link: "/recipes/" },
+ { text: "Playground", link: "/../playground/" },
+ ],
+ sidebar: [
+ {
+ text: "Get started",
+ items: [
+ { text: "Your first scene", link: "/guide/first-scene" },
+ { text: "How Yawn fits together", link: "/guide/architecture" },
+ ],
+ },
+ {
+ text: "Package tutorials",
+ items: [
+ { text: "Package map", link: "/packages/" },
+ { text: "Core and render data", link: "/packages/core" },
+ { text: "Render graph frontends", link: "/packages/render-graph" },
+ { text: "glTF import worker", link: "/packages/gltf-import" },
+ { text: "Conventional handles", link: "/packages/mesh-handles" },
+ ],
+ },
+ {
+ text: "Recipes",
+ items: [
+ { text: "All recipes", link: "/recipes/" },
+ { text: "Graph authoring", link: "/recipes/graph-authoring" },
+ { text: "Pipelines and loadouts", link: "/recipes/pipelines" },
+ { text: "Assets and render data", link: "/recipes/render-data" },
+ { text: "Runtime interaction", link: "/recipes/runtime" },
+ ],
+ },
+ ],
+ socialLinks: [
+ { icon: "github", link: "https://github.com/heaust-ops/yawn" },
+ ],
+ search: { provider: "local" },
+ outline: { level: [2, 3] },
+ editLink: {
+ pattern: "https://github.com/heaust-ops/yawn/edit/feat/core/docs/:path",
+ text: "Edit this page on GitHub",
+ },
+ footer: {
+ message: "Core owns render data and render graphs. Addons own conveniences.",
+ copyright: "Yawn is pre-1.0 software.",
+ },
+ },
+});
diff --git a/docs/.vitepress/theme/Playground.vue b/docs/.vitepress/theme/Playground.vue
new file mode 100644
index 0000000..dc21d5d
--- /dev/null
+++ b/docs/.vitepress/theme/Playground.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css
new file mode 100644
index 0000000..8f675c0
--- /dev/null
+++ b/docs/.vitepress/theme/custom.css
@@ -0,0 +1,90 @@
+:root {
+ --vp-c-brand-1: #d86535;
+ --vp-c-brand-2: #ee7946;
+ --vp-c-brand-3: #f1956d;
+ --vp-c-brand-soft: rgba(224, 104, 54, 0.14);
+ --vp-home-hero-name-color: transparent;
+ --vp-home-hero-name-background: linear-gradient(110deg, #ef7b47, #f5bc75);
+ --vp-home-hero-image-background-image: radial-gradient(circle, #da633950 0%, transparent 68%);
+ --vp-home-hero-image-filter: blur(44px);
+}
+
+.dark {
+ --vp-c-bg: #0a0d12;
+ --vp-c-bg-alt: #0f141c;
+ --vp-c-bg-soft: #121821;
+ --vp-c-bg-elv: #151c26;
+ --vp-c-divider: #27303c;
+ --vp-code-block-bg: #0b1017;
+}
+
+.VPNavBarTitle .title { letter-spacing: 0.08em; }
+.VPHomeHero .name { letter-spacing: -0.045em; }
+.VPHomeHero .text { max-width: 760px; letter-spacing: -0.04em; }
+.VPHomeHero .tagline { max-width: 610px; }
+.VPFeature { border-color: var(--vp-c-divider); }
+
+.yawn-playground {
+ margin: 28px 0;
+ overflow: hidden;
+ border: 1px solid var(--vp-c-divider);
+ border-radius: 12px;
+ background: #080b10;
+ box-shadow: 0 18px 55px #0003;
+}
+
+.yawn-playground__header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 24px;
+ padding: 16px 18px;
+ border-bottom: 1px solid #26303c;
+ background: #111720;
+}
+
+.yawn-playground__header > div { display: grid; gap: 3px; }
+.yawn-playground__header span {
+ color: #ef7b47;
+ font: 700 10px ui-monospace, monospace;
+ letter-spacing: 0.12em;
+}
+.yawn-playground__header strong { color: #f1f4f8; font-size: 15px; }
+.yawn-playground__header p { margin: 0; color: #8f9bac; font-size: 12px; }
+.yawn-playground__header a {
+ flex: none;
+ padding: 8px 11px;
+ border: 1px solid #e47748;
+ border-radius: 6px;
+ color: #fff;
+ background: #c65d2f;
+ font-size: 12px;
+ font-weight: 700;
+ text-decoration: none;
+}
+.yawn-playground iframe { display: block; width: 100%; height: 360px; border: 0; }
+
+.package-grid {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 12px;
+ margin: 24px 0;
+}
+.package-grid > a {
+ display: block;
+ padding: 18px;
+ border: 1px solid var(--vp-c-divider);
+ border-radius: 10px;
+ color: var(--vp-c-text-1);
+ background: var(--vp-c-bg-soft);
+ text-decoration: none;
+}
+.package-grid > a:hover { border-color: var(--vp-c-brand-1); }
+.package-grid strong { display: block; margin-bottom: 4px; }
+.package-grid span { color: var(--vp-c-text-2); font-size: 13px; }
+
+@media (max-width: 640px) {
+ .package-grid { grid-template-columns: 1fr; }
+ .yawn-playground__header { align-items: flex-start; flex-direction: column; }
+ .yawn-playground iframe { height: 280px; }
+}
diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js
new file mode 100644
index 0000000..7a7b50b
--- /dev/null
+++ b/docs/.vitepress/theme/index.js
@@ -0,0 +1,10 @@
+import DefaultTheme from "vitepress/theme";
+import Playground from "./Playground.vue";
+import "./custom.css";
+
+export default {
+ extends: DefaultTheme,
+ enhanceApp({ app }) {
+ app.component("Playground", Playground);
+ },
+};
diff --git a/docs/guide/architecture.md b/docs/guide/architecture.md
new file mode 100644
index 0000000..8032873
--- /dev/null
+++ b/docs/guide/architecture.md
@@ -0,0 +1,40 @@
+# How Yawn fits together
+
+Yawn has two public boundaries: **worker communication** for small, infrequent operations and **shared render data** for values that change often. Everything else is an authoring or convenience layer outside core.
+
+```text
+JSO / fluent builder ─┐
+ ├──▶ canonical DAG AST ─▶ S-expression ─▶ render worker
+FXNode snapshot ─────┘ │
+ ├─ graph compiler
+glTF import worker ───── shared upload array ────────────────────┤
+ ├─ transient allocator
+any browser thread ─── lifecycle messages ──────────────────────┤
+any browser thread ─── atomic SOA writes ────────────────────────┘
+```
+
+## What core owns
+
+`@yawn/core` owns only the protocol client for render data and render graphs. The worker behind it owns graph validation, loadout preparation, transient lifetime analysis, GPU allocation, and rendering.
+
+Core does **not** own a camera module, scene object model, glTF parser, shader library, editor, or picking system. Camera and material values are ordinary render-data columns. Higher-level objects are optional addon views over those columns.
+
+## The graph is the program
+
+Every frontend must produce `@yawn/render-graph-ast` data. A node is named, while an input contains one or more `{ node, socket }` references. Reusing the same reference creates fan-out, so the format describes a DAG instead of duplicating a tree.
+
+Render and compute pipeline declarations are part of that AST. Their WGSL and state are compiled into a prepared loadout, not linked into core.
+
+## The SOA is the mutable scene
+
+Shared arrays are 64-byte aligned and each row stride is a multiple of 16 bytes. The standard columns cover mesh, instance, camera, and material data. Applications can request additional mesh-, instance-, or fixed-domain arrays; domain arrays grow with the corresponding render-data capacity.
+
+Lifecycle operations such as allocating a column, importing an asset, compiling a graph, or creating an instance cross the command boundary. A frame-rate transform, camera, classification, or material update writes the existing SAB row directly.
+
+## Thread placement is a choice
+
+The JS client only requires a Worker-like endpoint. A main thread can own it, or another worker can connect through a `MessagePort`. Shared descriptors can be passed to additional workers, which can then read or write the same SOA data without proxying every update through the main thread.
+
+::: warning Cross-origin isolation is required
+Serve the application with `Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp`. `npm run examples` supplies both headers.
+:::
diff --git a/docs/guide/first-scene.md b/docs/guide/first-scene.md
new file mode 100644
index 0000000..a0bb042
--- /dev/null
+++ b/docs/guide/first-scene.md
@@ -0,0 +1,84 @@
+# Your first scene
+
+This tutorial composes Yawn the same way an application does: create the worker transport, wait for shared render data, compile a graph, import an asset, and activate the prepared loadout.
+
+## 1. Start core
+
+Create one renderer worker and transfer an `OffscreenCanvas` to it. `YawnCore` is deliberately transport-oriented; your bootstrap owns canvas sizing and worker construction.
+
+```js
+import { YawnCore } from "@yawn/core";
+
+const canvas = document.querySelector("canvas");
+canvas.width = Math.round(canvas.clientWidth * devicePixelRatio);
+canvas.height = Math.round(canvas.clientHeight * devicePixelRatio);
+const offscreen = canvas.transferControlToOffscreen();
+const worker = new Worker(new URL("./render-worker.js", import.meta.url), {
+ type: "module",
+});
+const core = new YawnCore({ worker });
+worker.postMessage({ type: "init", canvas: offscreen }, [offscreen]);
+await core.ready;
+```
+
+`ready` resolves after core receives the standard SOA descriptors. From that point, `core.array("camera.state")` and the other built-in columns are safe to access.
+
+## 2. Compile a graph
+
+The optional default-pipelines addon supplies scene WGSL. A JSO graph places those declarations beside graph nodes, then the graph addon serializes the canonical AST for core.
+
+```js
+import { loadGraph } from "@yawn/render-graph-js";
+import { defaultPipelines } from "@yawn/default-pipelines";
+
+const graph = {
+ id: "main",
+ revision: 1,
+ pipelines: defaultPipelines,
+ nodes: completeSceneNodes,
+};
+
+const compiled = await loadGraph(core, graph);
+```
+
+Compilation validates the DAG, removes dead work, computes transient resource lifetimes, aliases compatible resources, and allocates the resulting loadout before returning its ID.
+
+## 3. Import render data
+
+The glTF addon fetches and parses in its own worker. It asks core for a fixed shared upload array, writes the packet into that SAB, then sends only the array ID and byte count for the commit.
+
+```js
+import { GltfImporter } from "@yawn/gltf-import";
+import { MeshHandles } from "@yawn/mesh-handles";
+
+const importer = new GltfImporter(core);
+const result = await importer.load("/assets/scene.glb");
+const handles = new MeshHandles(core);
+const meshes = handles.fromImportedScene(result);
+importer.dispose();
+```
+
+## 4. Activate the loadout
+
+Switching is transactional from the application's perspective: the previously active loadout keeps rendering until the prepared graph becomes active.
+
+```js
+await core.switchCompiledGraph(compiled.compiledId);
+
+meshes[0].defaultInstance.setTransform(nextTransform); // direct SAB write
+```
+
+Use messages for setup and teardown. Use shared writes for values that are already present and can change every frame.
+
+
+
+## Next steps
+
+- Learn why these boundaries exist in [How Yawn fits together](./architecture).
+- Author graphs with [plain objects, a fluent builder, or FXNode](../packages/render-graph).
+- Add custom shared columns in [Core and render data](../packages/core).
+- Use familiar objects in [Conventional handles](../packages/mesh-handles).
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..afba6bb
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,35 @@
+---
+layout: home
+
+hero:
+ name: Yawn
+ text: Build the graph. Share the data.
+ tagline: A worker-native WebGPU renderer where infrequent lifecycle commands use messages and hot render data lives in SIMD-aligned shared memory.
+ actions:
+ - theme: brand
+ text: Build your first scene
+ link: /guide/first-scene
+ - theme: alt
+ text: Open the playground
+ link: /../playground/
+
+features:
+ - title: One graph boundary
+ details: JSO, a fluent builder, and FXNode all export the same immutable DAG AST and S-expression wire format.
+ - title: Shared render data
+ details: Meshes, instances, camera state, materials, and user columns use aligned SOA rows backed by shared WASM memory.
+ - title: External programs
+ details: WGSL, render pipelines, and compute passes travel with a graph loadout; core ships no scene shader.
+ - title: Worker-native
+ details: The same core client runs on the browser main thread or another worker through a Worker-like endpoint.
+ - title: Up-front loadouts
+ details: Graph compilation culls dead work, aliases compatible transients, coalesces passes, and prepares resources before activation.
+ - title: Optional conveniences
+ details: glTF import, mesh handles, material properties, camera controls, and picking stay in focused addons.
+---
+
+
diff --git a/docs/packages/core.md b/docs/packages/core.md
new file mode 100644
index 0000000..db5adad
--- /dev/null
+++ b/docs/packages/core.md
@@ -0,0 +1,66 @@
+# Core and render data
+
+`@yawn/core` is a protocol client. It manages the command ring, payload handshakes, graph lifecycle, and typed views over shared render-data arrays.
+
+## Fast-path shared writes
+
+Standard instance APIs validate `[slot, generation]`, then write the corresponding guarded SOA row. They do not enqueue a renderer command.
+
+```js
+core.setInstanceTransform(instanceHandle, matrix);
+core.setInstanceType(instanceHandle, sixteenU32Words);
+```
+
+The convenience `Instance` methods in `@yawn/mesh-handles` call exactly these APIs.
+
+
+
+## Request an SOA column
+
+Array creation is intentionally an infrequent worker command. Choose a domain so core can keep the array's logical length synchronized with fixed, mesh, or instance capacity.
+
+```js
+const velocity = await core.allocateArray({
+ name: "instance.velocity",
+ domain: "instance",
+ scalar: "f32",
+ lanes: 4,
+});
+
+velocity.write(instanceHandle[0], [1, 0, 0, 0]);
+```
+
+Every stride is a multiple of 16 bytes, keeping rows suitable for vectorized consumers. `SharedSoaArray` uses atomic lane access and refreshes its typed views when shared WASM memory grows.
+
+
+
+## Share a column with another worker
+
+Use `share()` only during setup. It returns the shared backing buffer and wire descriptor needed to construct a compatible view in another package or worker.
+
+```js
+const { buffer, descriptor } = velocity.share();
+simulationWorker.postMessage({ type: "velocity-layout", buffer, descriptor });
+```
+
+The `SharedArrayBuffer` is shared, not transferred. Once installed, the simulation worker should mutate rows directly and reserve messages for layout or lifecycle changes.
+
+## Graph lifecycle
+
+Core accepts one graph format: the serialized S-expression produced by `@yawn/render-graph-ast`.
+
+```js
+const compiled = await core.compileGraph(serializedAst);
+await core.switchCompiledGraph(compiled.compiledId);
+await core.dropCompiledGraph(oldCompiledId);
+```
+
+Graph operations are serialized by the client so compile, switch, and drop cannot race each other on one core instance.
diff --git a/docs/packages/gltf-import.md b/docs/packages/gltf-import.md
new file mode 100644
index 0000000..3bca5d9
--- /dev/null
+++ b/docs/packages/gltf-import.md
@@ -0,0 +1,55 @@
+# glTF import worker
+
+`@yawn/gltf-import` keeps parsing and bulk upload off the renderer command channel. It fetches a `.gltf` or `.glb` URL in a dedicated worker and writes a format-neutral packet directly into shared memory.
+
+## Load a scene
+
+```js
+import { GltfImporter } from "@yawn/gltf-import";
+
+const importer = new GltfImporter(core);
+try {
+ const result = await importer.load("/models/level.glb");
+ console.log(result.meshes, result.materials, result.bounds);
+} finally {
+ importer.dispose();
+}
+```
+
+The import handshake is:
+
+1. The import worker fetches and measures the asset packet.
+2. Core allocates a fixed `upload.renderData` shared array.
+3. The import worker writes packet bytes into that SAB.
+4. Core receives only the array ID and byte count, then installs render data.
+
+No GLB payload is copied through the renderer's message queue.
+
+
+
+## Camera framing
+
+Import frames the canonical `camera.state` row from scene bounds by default. Select an exterior or interior framing policy, or preserve the current camera.
+
+```js
+await importer.load(url, { framing: "exterior" });
+await importer.load(url, { framing: "interior" });
+await importer.load(url, { framing: false });
+```
+
+Framing is an addon behavior implemented as a shared camera-row write. It is not a camera subsystem in core.
+
+## Wrap the result when useful
+
+Import returns protocol descriptors. Less technical consumers can turn those descriptors into generation-safe objects.
+
+```js
+import { MeshHandles, MaterialHandles } from "@yawn/mesh-handles";
+
+const meshes = new MeshHandles(core).fromImportedScene(result);
+const materials = new MaterialHandles(core).fromImportedScene(result);
+```
diff --git a/docs/packages/index.md b/docs/packages/index.md
new file mode 100644
index 0000000..228c91b
--- /dev/null
+++ b/docs/packages/index.md
@@ -0,0 +1,26 @@
+# Package map
+
+Install only the authoring and convenience layers your application needs. None of the addons is required by core's protocol.
+
+
+
+## Dependency direction
+
+Applications create core first, then pass the same `YawnCore` instance to addons. Addons use public commands and shared descriptors; core never imports an addon.
+
+```text
+application ─▶ graph frontend ─▶ graph AST
+ │ │
+ ├────▶ glTF / handles addons │
+ │ │ │
+ └─────────────┴───────────────▶ core ─▶ render worker
+```
+
+This keeps scene policy outside the renderer. You can replace default pipelines, skip conventional handles, or author the AST directly without forking core.
diff --git a/docs/packages/mesh-handles.md b/docs/packages/mesh-handles.md
new file mode 100644
index 0000000..9dcbc3a
--- /dev/null
+++ b/docs/packages/mesh-handles.md
@@ -0,0 +1,59 @@
+# Conventional handles
+
+`@yawn/mesh-handles` is an optional object-oriented facade. It never hides core: lifecycle methods call core commands, while frequent mutations write shared rows.
+
+## Meshes and instances
+
+Wrap imported descriptors, use the default instance created by glTF, or create another generation-safe instance.
+
+```js
+const handles = new MeshHandles(core);
+const [mesh] = handles.fromImportedScene(imported);
+
+mesh.defaultInstance.setTransform(matrix);
+const duplicate = await mesh.createInstance(otherMatrix);
+duplicate.setType(classificationWords);
+await duplicate.destroy();
+```
+
+The handle is `[slot, generation]`. A stale object cannot modify a slot that has since been reused.
+
+## Camera and material handles
+
+The camera and materials look conventional, but property updates are writes to `camera.state` and `material.state`.
+
+```js
+const camera = new CameraHandle(core);
+camera.lookAt([4, 3, 6], [0, 0, 0]);
+
+const materials = new MaterialHandles(core).fromImportedScene(imported);
+materials[0].baseColor = [0.2, 0.55, 1, 1];
+materials[0].roughness = 0.35;
+```
+
+
+
+## Worker-side picking
+
+Picking is lazy. The first `pickRay` starts a separate spatial-query worker over versioned render-data snapshots and returns wrapped instance handles.
+
+```js
+const result = await handles.pickRay(origin, direction, {
+ maxDistance: 10_000,
+ maxHits: 1,
+});
+
+const picked = result.hits[0]?.instance;
+```
+
+
+
+Call `handles.dispose()` when the scene ends so its optional picking worker and listeners are released.
diff --git a/docs/packages/render-graph.md b/docs/packages/render-graph.md
new file mode 100644
index 0000000..8301beb
--- /dev/null
+++ b/docs/packages/render-graph.md
@@ -0,0 +1,78 @@
+# Render graph frontends
+
+Every frontend ends at `@yawn/render-graph-ast`. Choose the authoring style that fits your tooling; the worker receives the same S-expression either way.
+
+## Plain-object authoring
+
+`graphFromObject` validates and freezes ordinary JavaScript data. Pipeline declarations, compute dispatches, nodes, and DAG references all become canonical AST fields.
+
+```js
+import { graphFromObject } from "@yawn/render-graph-js";
+
+const graph = graphFromObject({
+ id: "main",
+ revision: 1,
+ pipelines: { render: [scenePipeline], compute: [preparePipeline] },
+ nodes: [
+ {
+ id: "mesh",
+ state: "enabled",
+ executor: { key: "mesh", version: 2 },
+ parameters: {},
+ inputs: {},
+ },
+ ],
+});
+```
+
+
+
+## Fluent authoring
+
+Use `RenderGraph` when a small mutable builder makes generated graphs easier to read. Calling `ast()` is the immutable boundary.
+
+```js
+import { RenderGraph, ref } from "@yawn/render-graph-js";
+
+const graph = new RenderGraph("generated", 1)
+ .renderPipeline(scenePipeline)
+ .node("source", "mesh", { version: 2 })
+ .node("draw", "scene", {
+ version: 2,
+ inputs: { mesh: [ref("source", "mesh")] },
+ });
+
+const compiled = await graph.load(core);
+```
+
+## FXNode export
+
+`@yawn/render-graph-fxnode` translates editor snapshots into the same AST. It owns editor catalog versions and diagnostic mapping; no FXNode shape crosses into core.
+
+```js
+import { adaptFxNodeSnapshot } from "@yawn/render-graph-fxnode";
+
+const ast = adaptFxNodeSnapshot(snapshot, revision, {
+ pipelines: myPipelines,
+});
+```
+
+Open the Render Graph Studio to edit an FXNode graph, compile it beside the JSO preset, and switch prepared loadouts.
+
+## DAG references
+
+A reference is data, not a nested expression. Point several consumers at one output to represent fan-out without repeating the source node.
+
+```js
+import { reference } from "@yawn/render-graph-ast";
+
+const shared = reference("sceneColor", "texture");
+left.inputs.color = [shared];
+right.inputs.color = [shared];
+```
+
+The serializer emits `(ref "sceneColor" "texture")` wherever that edge is consumed.
diff --git a/docs/recipes/graph-authoring.md b/docs/recipes/graph-authoring.md
new file mode 100644
index 0000000..a907030
--- /dev/null
+++ b/docs/recipes/graph-authoring.md
@@ -0,0 +1,82 @@
+# Graph authoring recipes
+
+All three authoring styles produce the same canonical immutable AST.
+
+## 01 — Canonical DAG AST
+
+Create references separately from nodes. Reusing `shared` makes one output fan out to two consumers.
+
+```js
+import { createGraphAst, reference, serializeGraphAst } from "@yawn/render-graph-ast";
+
+const expression = (id, inputs = {}) => ({
+ id,
+ state: "enabled",
+ executor: { key: "and", version: 2 },
+ parameters: {},
+ inputs,
+});
+const shared = reference("source", "value");
+const ast = createGraphAst({
+ id: "shared_dag",
+ revision: 1,
+ nodes: [
+ expression("source"),
+ expression("left", { inputs: [shared] }),
+ expression("right", { inputs: [shared] }),
+ ],
+});
+const source = serializeGraphAst(ast);
+```
+
+## 02 — Plain JavaScript object graph
+
+Let `@yawn/render-graph-js` canonicalize an ordinary object when application code does not need to manipulate AST internals.
+
+```js
+import { graphFromObject } from "@yawn/render-graph-js";
+
+const graph = graphFromObject({
+ id: "jso_graph",
+ revision: 1,
+ nodes: [{
+ id: "mesh",
+ state: "enabled",
+ executor: { key: "mesh", version: 2 },
+ parameters: {},
+ inputs: {},
+ }],
+});
+```
+
+
+
+## 03 — Fluent graph builder
+
+Use the chainable facade for generated graphs, then call `ast()` or `load(core)` at the boundary.
+
+```js
+import { RenderGraph, ref } from "@yawn/render-graph-js";
+
+const ast = new RenderGraph("fluent_graph", 1)
+ .node("source", "and", { version: 2 })
+ .node("consumer", "not", {
+ inputs: { operand: [ref("source", "value")] },
+ })
+ .ast();
+```
+
+## 04 — Export an FXNode snapshot
+
+Keep editor schemas in the FXNode addon. Attach external pipelines during export so the resulting AST is a self-contained loadout description.
+
+```js
+import { defaultPipelines } from "@yawn/default-pipelines";
+import { adaptFxNodeSnapshot } from "@yawn/render-graph-fxnode";
+
+const ast = adaptFxNodeSnapshot(snapshot, 1, {
+ pipelines: defaultPipelines,
+});
+```
+
+Use the Render Graph Studio for the interactive FXNode version of this recipe.
diff --git a/docs/recipes/index.md b/docs/recipes/index.md
new file mode 100644
index 0000000..0fd9eb0
--- /dev/null
+++ b/docs/recipes/index.md
@@ -0,0 +1,12 @@
+# Recipes
+
+The old source-only cookbook now lives here as guided, copyable snippets. Open an attached playground when you want a complete browser context and live renderer.
+
+
+
01–04 · Graph authoring Canonical AST, JSO, fluent builder, and FXNode export.
+
05–08 · Pipelines and loadouts Default programs, custom render/compute WGSL, and activation.
+
09–11 · Assets and render data glTF import, mesh instances, and custom SOA columns.
+
12–17 · Runtime interaction SAB animation, picking, worker clients, scenes, camera, and materials.
+
+
+Recipes 01–07 intentionally demonstrate graph fragments. A renderable loadout also needs compatible resource, scene, and frame-output nodes. Recipe 15 and the playgrounds show complete composition.
diff --git a/docs/recipes/pipelines.md b/docs/recipes/pipelines.md
new file mode 100644
index 0000000..f53e1bc
--- /dev/null
+++ b/docs/recipes/pipelines.md
@@ -0,0 +1,101 @@
+# Pipeline and loadout recipes
+
+WGSL belongs to a graph package or your application. Core contains no scene program.
+
+## 05 — Attach the default pipelines
+
+The optional package exports plain declarations, so copy only the programs your graph uses.
+
+```js
+import { defaultPipelines } from "@yawn/default-pipelines";
+import { RenderGraph } from "@yawn/render-graph-js";
+
+const graph = new RenderGraph("default_programs", 1);
+for (const pipeline of defaultPipelines.render) {
+ graph.renderPipeline(pipeline);
+}
+for (const pipeline of defaultPipelines.compute) {
+ graph.computePipeline(pipeline);
+}
+const ast = graph.ast();
+```
+
+## 06 — Supply a custom render pipeline
+
+Put source and entry points in the graph declaration. The shader must honor the scene ABI expected by the executor that uses it.
+
+```js
+const shader = /* wgsl */ `
+@group(1) @binding(0) var view_projection: mat4x4;
+struct Input {
+ @location(0) position: vec3,
+ @location(3) model_0: vec4,
+ @location(4) model_1: vec4,
+ @location(5) model_2: vec4,
+ @location(6) model_3: vec4,
+}
+@vertex fn vertex_main(input: Input) -> @builtin(position) vec4 {
+ let model = mat4x4(
+ input.model_0,
+ input.model_1,
+ input.model_2,
+ input.model_3,
+ );
+ return view_projection * model * vec4(input.position, 1.0);
+}
+@fragment fn fragment_main() -> @location(0) vec4 {
+ return vec4(0.2, 0.7, 1.0, 1.0);
+}`;
+
+const ast = new RenderGraph("custom_render_program", 1)
+ .renderPipeline({
+ name: "scene",
+ shader,
+ vertexEntry: "vertex_main",
+ fragmentEntry: "fragment_main",
+ doubleSided: false,
+ })
+ .ast();
+```
+
+## 07 — Supply a compute pipeline
+
+Dispatch dimensions are graph data and are allocated with the rest of the loadout.
+
+```js
+const shader = /* wgsl */ `
+@compute @workgroup_size(8, 1, 1)
+fn initialize() {}
+`;
+
+const ast = new RenderGraph("compute_program", 1)
+ .computePipeline({
+ name: "initialize",
+ shader,
+ entry: "initialize",
+ dispatch: [4, 1, 1],
+ })
+ .ast();
+```
+
+## 08 — Compile and switch
+
+Compile first, then activate the prepared ID. Drop a candidate when your surrounding transaction fails.
+
+```js
+import { loadGraph } from "@yawn/render-graph-js";
+
+const compiled = await loadGraph(core, graph);
+try {
+ await core.switchCompiledGraph(compiled.compiledId);
+} catch (error) {
+ await core.dropCompiledGraph(compiled.compiledId).catch(() => {});
+ throw error;
+}
+```
+
+
diff --git a/docs/recipes/render-data.md b/docs/recipes/render-data.md
new file mode 100644
index 0000000..042dad9
--- /dev/null
+++ b/docs/recipes/render-data.md
@@ -0,0 +1,54 @@
+# Asset and render-data recipes
+
+Bulk data moves through shared storage. Small descriptors and lifecycle decisions move through messages.
+
+## 09 — Import glTF in a worker
+
+```js
+import { GltfImporter } from "@yawn/gltf-import";
+import { MeshHandles } from "@yawn/mesh-handles";
+
+const importer = new GltfImporter(core);
+try {
+ const imported = await importer.load(url);
+ const meshes = new MeshHandles(core).fromImportedScene(imported);
+} finally {
+ importer.dispose();
+}
+```
+
+
+
+## 10 — Create and mutate mesh instances
+
+Creating or destroying an instance is lifecycle communication. Mutating an existing transform or type is a generation-guarded shared write.
+
+```js
+const identity = [
+ 1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1,
+];
+
+const instance = await mesh.createInstance(identity);
+instance.setTransform(nextTransform);
+instance.setType(sixteenU32Words);
+```
+
+## 11 — Add a custom SOA column
+
+Select the instance domain to keep row count aligned with instance capacity. Use four lanes for one SIMD-width velocity row.
+
+```js
+const velocity = await core.allocateArray({
+ name: "instance.velocity",
+ domain: "instance",
+ scalar: "f32",
+ lanes: 4,
+});
+
+velocity.write(instance.handle[0], [x, y, z, 0]);
+```
+
+
diff --git a/docs/recipes/runtime.md b/docs/recipes/runtime.md
new file mode 100644
index 0000000..94bfc69
--- /dev/null
+++ b/docs/recipes/runtime.md
@@ -0,0 +1,91 @@
+# Runtime interaction recipes
+
+Once render data exists, keep hot updates on shared rows and leave core free of application policy.
+
+## 12 — Animate directly through the SAB
+
+The instance facade performs the live-generation check and writes `instance.transform`.
+
+```js
+function frame(time) {
+ instance.setTransform(rotationY(time * 0.001));
+ requestAnimationFrame(frame);
+}
+requestAnimationFrame(frame);
+```
+
+
+
+## 13 — Pick through the optional BVH worker
+
+```js
+const result = await meshHandles.pickRay(origin, direction, {
+ maxDistance: 10_000,
+ maxHits: 1,
+});
+const nearest = result.hits[0]?.instance;
+```
+
+The picking addon consumes versioned shared snapshots. Core does not know about rays or BVHs.
+
+
+
+## 14 — Connect worker to worker
+
+`MessagePort` implements the Worker-like methods the core client needs. Start it through the normal `YawnCore` constructor.
+
+```js
+import { YawnCore } from "@yawn/core";
+
+const core = new YawnCore({
+ worker: port,
+ memory,
+ ringPtr,
+ free: () => port.close(),
+});
+await core.ready;
+```
+
+This is why “main thread” is not an architectural role in Yawn: any browser worker can own the client.
+
+## 15 — Compose a complete scene
+
+Use one core instance for every addon and activate the graph only after its complete loadout has compiled.
+
+```js
+const importer = new GltfImporter(core);
+const imported = await importer.load(gltfUrl);
+const meshes = new MeshHandles(core).fromImportedScene(imported);
+const compiled = await loadGraph(core, completeGraph);
+await core.switchCompiledGraph(compiled.compiledId);
+```
+
+
+
+## 16 — Treat camera input as render data
+
+There is no camera API in core. Read and write the canonical 16-lane row directly from controls or simulation code.
+
+```js
+const camera = core.array("camera.state");
+const state = camera.read(0);
+state.splice(0, 3, ...nextEye);
+camera.write(0, state);
+```
+
+The row packs eye, target, up, field of view, aspect, near, and far values into 64 bytes.
+
+## 17 — Use conventional camera and material properties
+
+Choose addon handles when a property-oriented workflow is more useful than raw SOA rows.
+
+```js
+const camera = new CameraHandle(core);
+const materials = new MaterialHandles(core).fromImportedScene(imported);
+
+camera.lookAt([4, 3, 6], [0, 0, 0]);
+materials[0].baseColor = [0.2, 0.55, 1, 1];
+materials[0].roughness = 0.35;
+```
+
+
diff --git a/examples/README.md b/examples/README.md
index b49c268..21b8d06 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -1,10 +1,9 @@
# Yawn examples
-- `index.html` is the browser landing page for the complete example and recipes.
-- `render-graph-studio/` is the complete browser integration with FXNode, JSO,
- external pipelines, shared glTF import, mesh handles, and picking.
-- `cookbook/` contains small copyable recipes, each focused on one public API.
+- `playground/` is the editable code-and-preview environment used by the docs.
+- `render-graph-studio/` is the advanced FXNode and JSO graph playground.
+- `shared/` contains browser bootstrap utilities shared by those playgrounds.
-Start the examples index with `npm run examples`. The cookbook modules are plain
-ES modules and accept a `YawnCore`, mesh, instance, or worker endpoint where a live
-renderer is required.
+Start the playgrounds and VitePress tutorials together with `npm run examples`.
+Copyable recipes live under `docs/recipes`; the example server contains only
+runnable playground code.
diff --git a/examples/cookbook/01-canonical-ast.js b/examples/cookbook/01-canonical-ast.js
deleted file mode 100644
index 91d874d..0000000
--- a/examples/cookbook/01-canonical-ast.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import {
- createGraphAst,
- reference,
- serializeGraphAst,
-} from "@yawn/render-graph-ast";
-
-const expression = (id, inputs = {}) => ({
- id,
- state: "enabled",
- executor: { key: "and", version: 2 },
- parameters: {},
- inputs,
-});
-
-/** Build one DAG whose shared output fans out to two consumers. */
-export function canonicalAstExample() {
- const ast = createGraphAst({
- id: "shared_dag",
- revision: 1,
- nodes: [
- expression("source"),
- expression("left", { inputs: [reference("source", "value")] }),
- expression("right", { inputs: [reference("source", "value")] }),
- ],
- });
- return { ast, source: serializeGraphAst(ast) };
-}
diff --git a/examples/cookbook/02-jso-graph.js b/examples/cookbook/02-jso-graph.js
deleted file mode 100644
index 098acdc..0000000
--- a/examples/cookbook/02-jso-graph.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { graphFromObject } from "@yawn/render-graph-js";
-
-/** Author a graph with an ordinary JavaScript object and receive canonical AST. */
-export function jsoGraphExample() {
- return graphFromObject({
- id: "jso_graph",
- revision: 1,
- nodes: [
- {
- id: "mesh",
- state: "enabled",
- executor: { key: "mesh", version: 2 },
- parameters: {},
- inputs: {},
- },
- ],
- });
-}
diff --git a/examples/cookbook/03-fluent-builder.js b/examples/cookbook/03-fluent-builder.js
deleted file mode 100644
index 71f82e9..0000000
--- a/examples/cookbook/03-fluent-builder.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { RenderGraph, ref } from "@yawn/render-graph-js";
-
-/** Build the same sort of DAG with the small mutable authoring facade. */
-export function fluentGraphExample() {
- return new RenderGraph("fluent_graph", 1)
- .node("source", "and", { version: 2 })
- .node("consumer", "not", {
- version: 1,
- inputs: { operand: [ref("source", "value")] },
- })
- .ast();
-}
diff --git a/examples/cookbook/04-fxnode-export.js b/examples/cookbook/04-fxnode-export.js
deleted file mode 100644
index 9e98abe..0000000
--- a/examples/cookbook/04-fxnode-export.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { defaultPipelines } from "@yawn/default-pipelines";
-import { adaptFxNodeSnapshot } from "@yawn/render-graph-fxnode";
-import { CATALOG_VERSION, GRAPH_ID } from "@yawn/render-graph-fxnode/catalog";
-
-/** Export a minimal FXNode authoring document through the shared AST boundary. */
-export function fxNodeExportExample() {
- return adaptFxNodeSnapshot(
- {
- graphId: GRAPH_ID,
- catalogVersion: CATALOG_VERSION,
- nodes: [],
- links: [],
- metadata: {},
- version: 1,
- },
- 1,
- { pipelines: defaultPipelines },
- );
-}
diff --git a/examples/cookbook/05-default-pipelines.js b/examples/cookbook/05-default-pipelines.js
deleted file mode 100644
index ce8c9da..0000000
--- a/examples/cookbook/05-default-pipelines.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defaultPipelines } from "@yawn/default-pipelines";
-import { RenderGraph } from "@yawn/render-graph-js";
-
-/** Copy the optional package's external programs into a graph AST. */
-export function defaultPipelineExample() {
- const graph = new RenderGraph("default_programs", 1);
- for (const pipeline of defaultPipelines.render)
- graph.renderPipeline(pipeline);
- for (const pipeline of defaultPipelines.compute)
- graph.computePipeline(pipeline);
- return graph.ast();
-}
diff --git a/examples/cookbook/06-custom-render-pipeline.js b/examples/cookbook/06-custom-render-pipeline.js
deleted file mode 100644
index 164abd9..0000000
--- a/examples/cookbook/06-custom-render-pipeline.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import { RenderGraph } from "@yawn/render-graph-js";
-
-export const simpleSceneShader = /* wgsl */ `
-@group(1) @binding(0) var view_projection: mat4x4;
-struct Input {
- @location(0) position: vec3,
- @location(3) model_0: vec4,
- @location(4) model_1: vec4,
- @location(5) model_2: vec4,
- @location(6) model_3: vec4,
-}
-@vertex fn vertex_main(input: Input) -> @builtin(position) vec4 {
- let model = mat4x4(input.model_0, input.model_1, input.model_2, input.model_3);
- return view_projection * model * vec4(input.position, 1.0);
-}
-@fragment fn fragment_main() -> @location(0) vec4 {
- return vec4(0.2, 0.7, 1.0, 1.0);
-}`;
-
-/** Supply scene WGSL and entry points as graph data, never as core source. */
-export function customRenderPipelineExample() {
- return new RenderGraph("custom_render_program", 1)
- .renderPipeline({
- name: "ground_plane",
- shader: simpleSceneShader,
- vertexEntry: "vertex_main",
- fragmentEntry: "fragment_main",
- doubleSided: false,
- })
- .ast();
-}
diff --git a/examples/cookbook/07-compute-pipeline.js b/examples/cookbook/07-compute-pipeline.js
deleted file mode 100644
index cee506f..0000000
--- a/examples/cookbook/07-compute-pipeline.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { RenderGraph } from "@yawn/render-graph-js";
-
-export const initializeShader = /* wgsl */ `
-@compute @workgroup_size(8, 1, 1)
-fn initialize() {}
-`;
-
-/** Declare a binding-free compute pass that runs before graph render passes. */
-export function computePipelineExample() {
- return new RenderGraph("compute_program", 1)
- .computePipeline({
- name: "initialize",
- shader: initializeShader,
- entry: "initialize",
- dispatch: [4, 1, 1],
- })
- .ast();
-}
diff --git a/examples/cookbook/08-compile-and-switch.js b/examples/cookbook/08-compile-and-switch.js
deleted file mode 100644
index 4a9da38..0000000
--- a/examples/cookbook/08-compile-and-switch.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { loadGraph } from "@yawn/render-graph-js";
-
-/** Compile a complete AST/JSO and make its prepared loadout active. */
-export async function compileAndSwitch(core, graph) {
- const compiled = await loadGraph(core, graph);
- try {
- await core.switchCompiledGraph(compiled.compiledId);
- return compiled;
- } catch (error) {
- await core.dropCompiledGraph(compiled.compiledId).catch(() => {});
- throw error;
- }
-}
diff --git a/examples/cookbook/09-gltf-import-worker.js b/examples/cookbook/09-gltf-import-worker.js
deleted file mode 100644
index d791eb2..0000000
--- a/examples/cookbook/09-gltf-import-worker.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { GltfImporter } from "@yawn/gltf-import";
-import { MeshHandles } from "@yawn/mesh-handles";
-
-/** Fetch a glTF URL in the import worker and wrap the resulting protocol handles. */
-export async function importGltf(core, url, options) {
- const importer = new GltfImporter(core);
- try {
- const imported = await importer.load(url, options);
- return new MeshHandles(core).fromImportedScene(imported);
- } finally {
- importer.dispose();
- }
-}
diff --git a/examples/cookbook/10-mesh-instances.js b/examples/cookbook/10-mesh-instances.js
deleted file mode 100644
index 1809662..0000000
--- a/examples/cookbook/10-mesh-instances.js
+++ /dev/null
@@ -1,14 +0,0 @@
-export const identityTransform = Object.freeze([
- 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
-]);
-
-/** Create a conventional instance object from an imported mesh handle. */
-export function createInstance(mesh, transform = identityTransform) {
- return mesh.createInstance(transform);
-}
-
-/** Frequent mutations stay on the shared-memory path exposed by the handle addon. */
-export function updateInstance(instance, transform, typeWords) {
- instance.setTransform(transform);
- instance.setType(typeWords);
-}
diff --git a/examples/cookbook/11-custom-soa-column.js b/examples/cookbook/11-custom-soa-column.js
deleted file mode 100644
index e412b24..0000000
--- a/examples/cookbook/11-custom-soa-column.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/** Allocate one SIMD-aligned velocity row for every live instance slot. */
-export function createVelocityColumn(core) {
- return core.allocateArray({
- name: "instance.velocity",
- domain: "instance",
- scalar: "f32",
- lanes: 4,
- });
-}
-
-/** Mutate an existing row directly; no renderer command message is emitted. */
-export function setVelocity(column, instance, xyz) {
- column.write(instance.handle[0], [xyz[0], xyz[1], xyz[2], 0]);
-}
diff --git a/examples/cookbook/12-direct-sab-animation.js b/examples/cookbook/12-direct-sab-animation.js
deleted file mode 100644
index c1e06ee..0000000
--- a/examples/cookbook/12-direct-sab-animation.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/** Write a new model matrix through core's generation-guarded shared SOA column. */
-export function animateInstance(core, instance, transform) {
- core.setInstanceTransform(instance.handle, transform);
-}
-
-/** Write the opaque 512-bit instance classification used by graph predicates. */
-export function classifyInstance(core, instance, words) {
- core.setInstanceType(instance.handle, words);
-}
diff --git a/examples/cookbook/13-bvh-picking.js b/examples/cookbook/13-bvh-picking.js
deleted file mode 100644
index 8cbbe1e..0000000
--- a/examples/cookbook/13-bvh-picking.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/** Query the optional snapshot/BVH worker and receive wrapped instance handles. */
-export function pickNearest(meshHandles, origin, direction) {
- return meshHandles.pickRay(origin, direction, {
- maxDistance: 10_000,
- maxHits: 1,
- });
-}
diff --git a/examples/cookbook/14-worker-to-worker.js b/examples/cookbook/14-worker-to-worker.js
deleted file mode 100644
index 20310e4..0000000
--- a/examples/cookbook/14-worker-to-worker.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { YawnCore } from "@yawn/core";
-
-/** Connect from any worker using a MessagePort with the Worker-like transport API. */
-export async function connectFromWorker(port, options = {}) {
- const core = new YawnCore({
- worker: port,
- memory: options.memory,
- ringPtr: options.ringPtr,
- free: options.free,
- });
- await core.ready;
- return core;
-}
diff --git a/examples/cookbook/15-complete-scene.js b/examples/cookbook/15-complete-scene.js
deleted file mode 100644
index fd60433..0000000
--- a/examples/cookbook/15-complete-scene.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { culling } from "../render-graph-studio/render-graph/presets.js";
-import { importGltf } from "./09-gltf-import-worker.js";
-import { compileAndSwitch } from "./08-compile-and-switch.js";
-
-/** Combine the complete JSO graph, shared glTF import, and mesh-handle facade. */
-export async function loadCompleteScene(core, gltfUrl) {
- const meshes = await importGltf(core, gltfUrl);
- const compiled = await compileAndSwitch(core, culling);
- return { compiled, meshes };
-}
diff --git a/examples/cookbook/17-conventional-handles.js b/examples/cookbook/17-conventional-handles.js
deleted file mode 100644
index 8f9fb9e..0000000
--- a/examples/cookbook/17-conventional-handles.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { CameraHandle, MaterialHandles, MeshHandles } from "@yawn/mesh-handles";
-
-/** Wrap one import result in the conventional object API without hiding core. */
-export function conventionalSceneHandles(core, imported) {
- return {
- camera: new CameraHandle(core),
- meshes: new MeshHandles(core).fromImportedScene(imported),
- materials: new MaterialHandles(core).fromImportedScene(imported),
- };
-}
-
-/** Property assignments remain direct SAB writes; no camera/material message is sent. */
-export function restyleScene({ camera, materials }) {
- camera.lookAt([4, 3, 6], [0, 0, 0]);
- if (materials[0]) {
- materials[0].baseColor = [0.2, 0.55, 1, 1];
- materials[0].roughness = 0.35;
- }
-}
diff --git a/examples/cookbook/README.md b/examples/cookbook/README.md
deleted file mode 100644
index 93a75b7..0000000
--- a/examples/cookbook/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Yawn addon cookbook
-
-These recipes deliberately avoid another application framework or renderer wrapper.
-Import the function you need and pass the same `YawnCore` instance to every addon.
-
-| Recipe | Demonstrates |
-| --- | --- |
-| `01-canonical-ast.js` | A shared DAG output and canonical S-expression serialization |
-| `02-jso-graph.js` | Plain JavaScript object authoring |
-| `03-fluent-builder.js` | Fluent render-graph authoring |
-| `04-fxnode-export.js` | Exporting an FXNode snapshot to the canonical AST |
-| `05-default-pipelines.js` | Attaching optional external WGSL declarations |
-| `06-custom-render-pipeline.js` | Supplying a custom scene render shader |
-| `07-compute-pipeline.js` | Supplying a binding-free compute pass |
-| `08-compile-and-switch.js` | Compiling and transactionally activating a graph |
-| `09-gltf-import-worker.js` | Fetching a glTF URL into shared memory from a worker |
-| `10-mesh-instances.js` | Creating and mutating conventional instance handles |
-| `11-custom-soa-column.js` | Allocating an instance-sized shared SOA column |
-| `12-direct-sab-animation.js` | Updating transforms through generation-guarded SAB writes |
-| `13-bvh-picking.js` | Ray picking through the mesh-handles addon |
-| `14-worker-to-worker.js` | Using core from another worker through a `MessagePort` |
-| `15-complete-scene.js` | Combining the graph, glTF, and mesh addons |
-| `16-camera-render-data.js` | Treating camera input as direct render-data SAB writes |
-| `17-conventional-handles.js` | Conventional camera and material properties over SAB rows |
-
-Recipes 1–7 isolate graph authoring concepts, so their ASTs are intentionally
-fragments rather than complete renderable loadouts. Recipe 15 uses the complete
-scene graph from `render-graph-studio` when an end-to-end example is needed.
diff --git a/examples/cookbook/index.js b/examples/cookbook/index.js
deleted file mode 100644
index cecd9e1..0000000
--- a/examples/cookbook/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-export * from "./01-canonical-ast.js";
-export * from "./02-jso-graph.js";
-export * from "./03-fluent-builder.js";
-export * from "./04-fxnode-export.js";
-export * from "./05-default-pipelines.js";
-export * from "./06-custom-render-pipeline.js";
-export * from "./07-compute-pipeline.js";
-export * from "./08-compile-and-switch.js";
-export * from "./09-gltf-import-worker.js";
-export * from "./10-mesh-instances.js";
-export * from "./11-custom-soa-column.js";
-export * from "./12-direct-sab-animation.js";
-export * from "./13-bvh-picking.js";
-export * from "./14-worker-to-worker.js";
-export * from "./15-complete-scene.js";
-export * from "./16-camera-render-data.js";
-export * from "./17-conventional-handles.js";
diff --git a/examples/index.html b/examples/index.html
index 6945256..5ea740b 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -2,200 +2,11 @@
-
-
- Yawn Examples
-
+
+
+ Yawn Playground
-
-
-
-
- Worker-native rendering toolkit
- Build the graph. Share the data.
-
- Start with the complete interactive scene, then pull apart the focused
- recipes for graph ASTs, external pipelines, glTF workers, mesh handles,
- and direct shared-memory mutation.
-
-
-
-
-
-
Interactive example · all packages
-
Render Graph Studio
-
- Edit an FXNode graph, swap JSO loadouts, stream procedural glTF through
- shared memory, pick instances, and orbit the shared-SOA camera.
-
-
Launch studio →
-
-
-
-
-
-
-
Focused recipes
-
Small ES modules meant to copy, change, and combine.
-
-
-
-
-
Yawn examples npm run examples
-
+ Open the Yawn Playground
diff --git a/examples/playground/index.html b/examples/playground/index.html
new file mode 100644
index 0000000..fcf1d86
--- /dev/null
+++ b/examples/playground/index.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+ Yawn Playground
+
+
+
+
+ YAWN.
+
+ Playground
+
+
+
+ Example
+
+
+ ▶ Run
+ Reset
+ Copy link
+ Docs ↗
+
+
+
+ JavaScript Ctrl + Enter to run
+
+
+
+
+ Preparing playground…
+
+
+
+
+
diff --git a/examples/playground/index.js b/examples/playground/index.js
new file mode 100644
index 0000000..d2c4791
--- /dev/null
+++ b/examples/playground/index.js
@@ -0,0 +1,79 @@
+import { PLAYGROUND_RECIPES, playgroundRecipe } from "./recipes.js";
+
+const select = document.querySelector("#recipe-select");
+const title = document.querySelector("#recipe-title");
+const packageName = document.querySelector("#recipe-package");
+const editor = document.querySelector("#editor");
+const preview = document.querySelector("#preview");
+const status = document.querySelector("#status");
+const docs = document.querySelector("#docs-link");
+let recipeId;
+
+for (const [id, recipe] of Object.entries(PLAYGROUND_RECIPES)) {
+ const option = document.createElement("option");
+ option.value = id;
+ option.textContent = recipe.title;
+ select.append(option);
+}
+
+function choose(id, updateUrl = true) {
+ recipeId = PLAYGROUND_RECIPES[id] ? id : "first-scene";
+ const recipe = playgroundRecipe(recipeId);
+ select.value = recipeId;
+ title.textContent = recipe.title;
+ packageName.textContent = recipe.package;
+ editor.value = recipe.source;
+ docs.href = recipe.docs;
+ status.textContent = recipe.description;
+ if (updateUrl) {
+ const url = new URL(location.href);
+ url.searchParams.set("recipe", recipeId);
+ history.replaceState(null, "", url);
+ }
+ run();
+}
+
+function run() {
+ status.textContent = "Running…";
+ status.dataset.error = "false";
+ preview.src = `./runner.html?recipe=${encodeURIComponent(recipeId)}&run=${Date.now()}`;
+}
+
+addEventListener("message", (event) => {
+ if (event.origin !== location.origin || event.source !== preview.contentWindow) return;
+ if (event.data?.type === "playground-runner-ready") {
+ preview.contentWindow.postMessage(
+ { type: "playground-run", source: editor.value },
+ location.origin,
+ );
+ } else if (event.data?.type === "playground-status" || event.data?.type === "playground-error") {
+ status.textContent = event.data.message;
+ status.dataset.error = String(event.data.type === "playground-error");
+ }
+});
+
+document.querySelector("#run").addEventListener("click", run);
+document.querySelector("#reset").addEventListener("click", () => {
+ editor.value = playgroundRecipe(recipeId).source;
+ run();
+});
+document.querySelector("#copy").addEventListener("click", async (event) => {
+ await navigator.clipboard.writeText(location.href);
+ const original = event.currentTarget.textContent;
+ event.currentTarget.textContent = "Copied";
+ setTimeout(() => { event.currentTarget.textContent = original; }, 1200);
+});
+select.addEventListener("change", () => choose(select.value));
+editor.addEventListener("keydown", (event) => {
+ if (event.key === "Enter" && (event.ctrlKey || event.metaKey)) {
+ event.preventDefault();
+ run();
+ }
+ if (event.key === "Tab") {
+ event.preventDefault();
+ const start = editor.selectionStart;
+ editor.setRangeText(" ", start, editor.selectionEnd, "end");
+ }
+});
+
+choose(new URLSearchParams(location.search).get("recipe"), false);
diff --git a/examples/playground/recipes.js b/examples/playground/recipes.js
new file mode 100644
index 0000000..56e67e8
--- /dev/null
+++ b/examples/playground/recipes.js
@@ -0,0 +1,104 @@
+export const PLAYGROUND_RECIPES = Object.freeze({
+ "first-scene": Object.freeze({
+ title: "Your first scene",
+ package: "All packages",
+ description: "Boot core, load procedural glTF through the import worker, and activate a graph.",
+ docs: "/docs/guide/first-scene",
+ source: `const scene = await yawn.createScene({ loadout: "cubes" });
+yawn.status(
+ \`Ready · \${scene.meshes.length} meshes · \${scene.core.telemetry.draws} draws\`,
+);`,
+ }),
+ "jso-graph": Object.freeze({
+ title: "Load a JSO render graph",
+ package: "@yawn/render-graph-js",
+ description: "Compile a plain-object graph through the canonical AST boundary.",
+ docs: "/docs/packages/render-graph#plain-object-authoring",
+ source: `const scene = await yawn.createScene({
+ loadout: "spheres",
+ graph: yawn.graphs.culling,
+});
+yawn.status(
+ \`Graph \${scene.compiled.graphId} · \${scene.core.telemetry.draws} draws\`,
+);`,
+ }),
+ "gltf-worker": Object.freeze({
+ title: "Import glTF in a worker",
+ package: "@yawn/gltf-import",
+ description: "Stage a generated GLB in shared memory and commit only metadata.",
+ docs: "/docs/packages/gltf-import",
+ source: `const scene = await yawn.createScene({ loadout: "spheres" });
+yawn.status(
+ \`Imported \${scene.meshes.length} mesh handles through shared memory\`,
+);`,
+ }),
+ "shared-animation": Object.freeze({
+ title: "Animate through the SAB",
+ package: "@yawn/core",
+ description: "Write a generation-guarded instance transform every frame without messages.",
+ docs: "/docs/packages/core#fast-path-shared-writes",
+ source: `const scene = await yawn.createScene({ loadout: "cubes" });
+const instance = scene.meshes[0].defaultInstance;
+const start = performance.now();
+
+function animate(now) {
+ const angle = (now - start) * 0.001;
+ instance.setTransform(yawn.rotationY(angle));
+ requestAnimationFrame(animate);
+}
+requestAnimationFrame(animate);
+yawn.status("Animating instance.transform directly in shared memory");`,
+ }),
+ "custom-soa": Object.freeze({
+ title: "Allocate custom render data",
+ package: "@yawn/core",
+ description: "Add one aligned velocity row for every instance slot.",
+ docs: "/docs/packages/core#request-an-soa-column",
+ source: `const scene = await yawn.createScene({ loadout: "cubes" });
+const velocity = await scene.core.allocateArray({
+ name: "instance.velocity",
+ domain: "instance",
+ scalar: "f32",
+ lanes: 4,
+});
+
+for (const mesh of scene.meshes) {
+ velocity.write(mesh.defaultInstance.handle[0], [0, 0.25, 0, 0]);
+}
+yawn.status(\`Allocated \${velocity.length} SIMD-aligned velocity rows\`);`,
+ }),
+ "conventional-handles": Object.freeze({
+ title: "Camera and material handles",
+ package: "@yawn/mesh-handles",
+ description: "Use familiar properties while mutations remain direct shared-memory writes.",
+ docs: "/docs/packages/mesh-handles#camera-and-material-handles",
+ source: `const scene = await yawn.createScene({ loadout: "materials" });
+scene.camera.lookAt([11, 9, 13], [0, 0, 0]);
+
+const material = scene.materials[1];
+material.baseColor = [0.1, 0.55, 1, 1];
+material.metallic = 0.15;
+material.roughness = 0.28;
+yawn.status("Camera and material properties committed through SAB rows");`,
+ }),
+ picking: Object.freeze({
+ title: "Pick shared scene data",
+ package: "@yawn/mesh-handles",
+ description: "Build the optional worker-side BVH and query the closest instance.",
+ docs: "/docs/packages/mesh-handles#worker-side-picking",
+ source: `const scene = await yawn.createScene({ loadout: "cubes" });
+const state = scene.camera.state;
+const origin = state.slice(0, 3);
+const direction = state.slice(4, 7).map((value, axis) => value - origin[axis]);
+const result = await scene.handles.pickRay(origin, direction, { maxHits: 1 });
+yawn.status(
+ result.hits.length
+ ? \`Picked instance \${result.hits[0].instance.handle.join(":")}\`
+ : "No instance intersected the center ray",
+);`,
+ }),
+});
+
+export function playgroundRecipe(id) {
+ return PLAYGROUND_RECIPES[id] ?? PLAYGROUND_RECIPES["first-scene"];
+}
diff --git a/examples/playground/runner.html b/examples/playground/runner.html
new file mode 100644
index 0000000..8dcefba
--- /dev/null
+++ b/examples/playground/runner.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+ Yawn Playground Runner
+
+
+
+ Waiting for code…
+
+
+
diff --git a/examples/playground/runner.js b/examples/playground/runner.js
new file mode 100644
index 0000000..dcf512e
--- /dev/null
+++ b/examples/playground/runner.js
@@ -0,0 +1,43 @@
+import { createPlaygroundRuntime } from "./runtime.js";
+import { playgroundRecipe } from "./recipes.js";
+
+const status = document.querySelector("#status");
+const canvas = document.querySelector("#scene");
+const parentOrigin = location.origin;
+const parameters = new URLSearchParams(location.search);
+const embedded = parameters.has("embed");
+document.body.dataset.embed = String(embedded);
+let started = false;
+
+function report(message, error = false) {
+ status.textContent = message;
+ document.body.dataset.error = String(error);
+ parent.postMessage({ type: error ? "playground-error" : "playground-status", message }, parentOrigin);
+}
+
+async function execute(source) {
+ if (started) return;
+ started = true;
+ try {
+ const yawn = createPlaygroundRuntime(canvas, report);
+ const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor;
+ await new AsyncFunction("yawn", `"use strict";\n${source}`)(yawn);
+ document.documentElement.dataset.yawnReady = "true";
+ parent.postMessage({ type: "playground-ready" }, parentOrigin);
+ } catch (error) {
+ console.error(error);
+ report(error?.stack ?? error?.message ?? String(error), true);
+ }
+}
+
+addEventListener("message", (event) => {
+ if (event.origin !== parentOrigin || event.data?.type !== "playground-run") return;
+ void execute(event.data.source);
+});
+
+const recipeId = parameters.get("recipe");
+if (embedded) {
+ void execute(playgroundRecipe(recipeId).source);
+} else {
+ parent.postMessage({ type: "playground-runner-ready" }, parentOrigin);
+}
diff --git a/examples/playground/runtime.js b/examples/playground/runtime.js
new file mode 100644
index 0000000..d990f2e
--- /dev/null
+++ b/examples/playground/runtime.js
@@ -0,0 +1,134 @@
+import { YawnCore } from "@yawn/core";
+import { GltfImporter } from "@yawn/gltf-import";
+import {
+ CameraHandle,
+ MaterialHandles,
+ MeshHandles,
+} from "@yawn/mesh-handles";
+import { loadGraph, graphFromObject, RenderGraph, ref } from "@yawn/render-graph-js";
+import {
+ createGraphAst,
+ reference,
+ serializeGraphAst,
+} from "@yawn/render-graph-ast";
+import { defaultPipelines } from "@yawn/default-pipelines";
+import { loadDemoLoadout } from "../render-graph-studio/demo-loadouts.js";
+import { culling } from "../render-graph-studio/render-graph/presets.js";
+import { installCameraRenderDataControls } from "../shared/camera-controls.js";
+import { createWorkerTransport } from "../shared/create-worker-transport.js";
+
+const waitForFrame = (core, predicate, timeout = 30_000) =>
+ new Promise((resolve, reject) => {
+ const current = core.telemetry;
+ if (current && predicate(current)) {
+ resolve(current);
+ return;
+ }
+ const timer = setTimeout(() => {
+ core.removeEventListener("renderer-frame", frame);
+ reject(new Error("Renderer confirmation timed out"));
+ }, timeout);
+ const frame = (event) => {
+ if (!predicate(event.detail)) return;
+ clearTimeout(timer);
+ core.removeEventListener("renderer-frame", frame);
+ resolve(event.detail);
+ };
+ core.addEventListener("renderer-frame", frame);
+ });
+
+export function rotationY(angle) {
+ const cosine = Math.cos(angle);
+ const sine = Math.sin(angle);
+ return [
+ cosine, 0, -sine, 0,
+ 0, 1, 0, 0,
+ sine, 0, cosine, 0,
+ 0, 0, 0, 1,
+ ];
+}
+
+export function createPlaygroundRuntime(canvas, report) {
+ let activeScene;
+ const status = (message) => {
+ report(String(message));
+ };
+
+ async function createScene({ loadout = "cubes", graph = culling } = {}) {
+ activeScene?.dispose();
+ const core = new YawnCore(createWorkerTransport(canvas));
+ const handles = new MeshHandles(core);
+ const importer = new GltfImporter(core);
+ let stopControls = () => {};
+ try {
+ status("Starting render worker…");
+ await core.ready;
+ const compiled = await loadGraph(core, graph);
+ const targetRevision = (core.telemetry?.revision ?? 0) + 1;
+ const glb = await loadDemoLoadout(loadout);
+ const url = URL.createObjectURL(
+ new Blob([glb], { type: "model/gltf-binary" }),
+ );
+ let imported;
+ try {
+ imported = await importer.load(url);
+ } finally {
+ URL.revokeObjectURL(url);
+ }
+ const meshes = handles.fromImportedScene(imported);
+ const materials = new MaterialHandles(core).fromImportedScene(imported);
+ const camera = new CameraHandle(core);
+ stopControls = installCameraRenderDataControls(core, canvas);
+ await core.switchCompiledGraph(compiled.compiledId);
+ await waitForFrame(
+ core,
+ (frame) =>
+ frame.revision === targetRevision &&
+ frame.activeCompiledGraph === graph.id &&
+ frame.draws > 0 &&
+ frame.gpuError === false,
+ );
+ activeScene = {
+ core,
+ handles,
+ meshes,
+ materials,
+ camera,
+ compiled: { ...compiled, graphId: graph.id },
+ dispose() {
+ stopControls();
+ handles.dispose();
+ core.dispose();
+ activeScene = undefined;
+ },
+ };
+ return activeScene;
+ } catch (error) {
+ stopControls();
+ handles.dispose();
+ core.dispose();
+ throw error;
+ } finally {
+ importer.dispose();
+ }
+ }
+
+ return Object.freeze({
+ createScene,
+ status,
+ rotationY,
+ graphs: Object.freeze({ culling }),
+ packages: Object.freeze({
+ createGraphAst,
+ defaultPipelines,
+ graphFromObject,
+ reference,
+ ref,
+ RenderGraph,
+ serializeGraphAst,
+ }),
+ dispose() {
+ activeScene?.dispose();
+ },
+ });
+}
diff --git a/examples/playground/styles.css b/examples/playground/styles.css
new file mode 100644
index 0000000..25f803c
--- /dev/null
+++ b/examples/playground/styles.css
@@ -0,0 +1,72 @@
+:root {
+ color-scheme: dark;
+ font-family: Inter, ui-sans-serif, system-ui, sans-serif;
+ background: #0a0d12;
+ color: #eef2f8;
+}
+* { box-sizing: border-box; }
+html, body { height: 100%; margin: 0; overflow: hidden; }
+body { display: grid; grid-template-rows: 64px minmax(0, 1fr); }
+header {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ min-width: 0;
+ padding: 9px 14px;
+ border-bottom: 1px solid #29303b;
+ background: #11151c;
+}
+.brand { margin-right: 4px; color: #fff; font-size: 17px; font-weight: 850; letter-spacing: .14em; text-decoration: none; }
+.brand span { color: #e16f3c; }
+.recipe-meta { display: grid; min-width: 190px; margin-right: auto; }
+.recipe-meta strong { overflow: hidden; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; }
+.recipe-meta span, label > span { color: #8792a3; font: 10px ui-monospace, monospace; letter-spacing: .08em; text-transform: uppercase; }
+label { display: grid; gap: 3px; }
+button, select, .button {
+ min-height: 36px;
+ padding: 0 12px;
+ border: 1px solid #3a4452;
+ border-radius: 6px;
+ color: #e8edf5;
+ background: #202733;
+ font-family: inherit;
+ font-size: 12px;
+ font-weight: 600;
+ text-decoration: none;
+ cursor: pointer;
+}
+.button { display: inline-flex; align-items: center; }
+button:hover, select:hover, .button:hover { border-color: #69778c; }
+button.primary { border-color: #ee8251; background: #c65d2f; }
+main { display: grid; grid-template-columns: minmax(360px, .9fr) minmax(0, 1.1fr); min-height: 0; }
+.code-pane, .preview-pane { position: relative; min-width: 0; min-height: 0; }
+.code-pane { display: grid; grid-template-rows: 38px minmax(0, 1fr); border-right: 1px solid #29303b; background: #0d1117; }
+.pane-title { display: flex; align-items: center; gap: 5px; padding: 0 14px; border-bottom: 1px solid #252c36; color: #8894a5; font-size: 11px; }
+.pane-title span { margin-right: auto; color: #d7dee9; font-weight: 700; }
+kbd { padding: 2px 5px; border: 1px solid #39424e; border-radius: 4px; background: #171d25; font: 10px ui-monospace, monospace; }
+textarea {
+ width: 100%;
+ height: 100%;
+ resize: none;
+ padding: 22px;
+ border: 0;
+ outline: 0;
+ color: #dce6f3;
+ background: transparent;
+ font: 14px/1.65 ui-monospace, SFMono-Regular, Menlo, monospace;
+ tab-size: 2;
+}
+.preview-pane { background: #080b10; }
+iframe { width: 100%; height: 100%; border: 0; }
+#status { position: absolute; left: 14px; bottom: 14px; max-width: calc(100% - 28px); overflow: hidden; padding: 8px 11px; border: 1px solid #ffffff18; border-radius: 7px; background: #0d121bea; color: #b9c3d2; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; pointer-events: none; }
+#status[data-error="true"] { color: #ffb8a6; border-color: #ef795d88; }
+@media (max-width: 850px) {
+ body { grid-template-rows: auto minmax(0, 1fr); }
+ header { flex-wrap: wrap; }
+ .recipe-meta { min-width: 0; }
+ header label { order: 2; width: 100%; }
+ header select { width: 100%; }
+ main { grid-template-columns: 1fr; grid-template-rows: 48% 52%; }
+ .code-pane { border-right: 0; border-bottom: 1px solid #29303b; }
+ #copy { display: none; }
+}
diff --git a/examples/render-graph-studio/index.js b/examples/render-graph-studio/index.js
index 141b592..f6e6722 100644
--- a/examples/render-graph-studio/index.js
+++ b/examples/render-graph-studio/index.js
@@ -1,6 +1,7 @@
import { YawnCore, RendererError } from "@yawn/core";
import { MeshHandles } from "@yawn/mesh-handles";
-import { installCameraRenderDataControls } from "../cookbook/16-camera-render-data.js";
+import { installCameraRenderDataControls } from "../shared/camera-controls.js";
+import { createWorkerTransport } from "../shared/create-worker-transport.js";
import { loadDemoLoadout } from "./demo-loadouts.js";
import { adaptFxNodeSnapshot } from "@yawn/render-graph-fxnode";
import { createGraphAst } from "@yawn/render-graph-ast";
@@ -38,47 +39,6 @@ const state = {
compiled: {},
telemetry: null,
};
-function createWorkerTransport() {
- const canvas = document.querySelector("#canvas0");
- const dpr = devicePixelRatio;
- canvas.width = Math.round(Math.max(1, canvas.clientWidth) * dpr);
- canvas.height = Math.round(Math.max(1, canvas.clientHeight) * dpr);
-
- const worker = new Worker(
- new URL(
- "../../renderer/src/platform/web/worker/mainWorker.js",
- import.meta.url,
- ),
- { type: "module", name: "yawn-renderer" },
- );
- const abort = new AbortController();
- const options = { signal: abort.signal };
- const post = (kind, values) =>
- worker.postMessage({
- type: "window-event",
- kind,
- values: new Float64Array(values),
- });
- addEventListener(
- "resize",
- () =>
- post(0, [
- Math.max(1, canvas.clientWidth),
- Math.max(1, canvas.clientHeight),
- devicePixelRatio,
- ]),
- options,
- );
- const offscreen = canvas.transferControlToOffscreen();
- worker.postMessage({ type: "init", canvas: offscreen }, [offscreen]);
- return {
- worker,
- free() {
- abort.abort();
- },
- };
-}
-
function publish(telemetry) {
state.telemetry = telemetry;
document.documentElement.dataset.yawnState = JSON.stringify({
@@ -238,7 +198,7 @@ const pagehide = () => {
async function start() {
addEventListener("pagehide", pagehide, { once: true });
delete document.documentElement.dataset.yawnReady;
- const transport = createWorkerTransport();
+ const transport = createWorkerTransport(document.querySelector("#canvas0"));
renderer = new YawnCore(transport);
meshHandles = new MeshHandles(renderer);
gltfImporter = new GltfImporter(renderer);
diff --git a/examples/cookbook/16-camera-render-data.js b/examples/shared/camera-controls.js
similarity index 96%
rename from examples/cookbook/16-camera-render-data.js
rename to examples/shared/camera-controls.js
index 667e1ef..ba1e5f0 100644
--- a/examples/cookbook/16-camera-render-data.js
+++ b/examples/shared/camera-controls.js
@@ -1,8 +1,7 @@
const MIN_DISTANCE = 0.1;
const MAX_PITCH = Math.PI / 2 - 0.01;
-// The camera is ordinary render data, not a core API. This example maps browser
-// controls straight onto its packed SOA row without sending input messages.
+// Browser controls map straight onto the packed camera SOA row without messages.
export function installCameraRenderDataControls(core, canvas) {
const camera = core.array("camera.state");
const abort = new AbortController();
diff --git a/examples/shared/create-worker-transport.js b/examples/shared/create-worker-transport.js
new file mode 100644
index 0000000..27a378c
--- /dev/null
+++ b/examples/shared/create-worker-transport.js
@@ -0,0 +1,42 @@
+/** Create the worker bridge expected by YawnCore for one OffscreenCanvas. */
+export function createWorkerTransport(canvas) {
+ if (!(canvas instanceof HTMLCanvasElement)) {
+ throw new TypeError("canvas must be an HTMLCanvasElement");
+ }
+ const dimensions = () => {
+ const dpr = devicePixelRatio;
+ return {
+ dpr,
+ width: Math.max(1, canvas.clientWidth),
+ height: Math.max(1, canvas.clientHeight),
+ };
+ };
+ const initial = dimensions();
+ canvas.width = Math.round(initial.width * initial.dpr);
+ canvas.height = Math.round(initial.height * initial.dpr);
+ const worker = new Worker(
+ new URL(
+ "../../renderer/src/platform/web/worker/mainWorker.js",
+ import.meta.url,
+ ),
+ { type: "module", name: "yawn-renderer" },
+ );
+ const resize = () => {
+ const { dpr, width, height } = dimensions();
+ worker.postMessage({
+ type: "window-event",
+ kind: 0,
+ values: new Float64Array([width, height, dpr]),
+ });
+ };
+ const abort = new AbortController();
+ addEventListener("resize", resize, { signal: abort.signal });
+ const offscreen = canvas.transferControlToOffscreen();
+ worker.postMessage({ type: "init", canvas: offscreen }, [offscreen]);
+ return {
+ worker,
+ free() {
+ abort.abort();
+ },
+ };
+}
diff --git a/package-lock.json b/package-lock.json
index 5d81316..aa6db89 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,7 +18,8 @@
"rollup-plugin-copy": "^3.5.0",
"vite": "^7.1.10",
"vite-plugin-rsw": "^2.0.11",
- "vite-plugin-wasm": "^3.3.0"
+ "vite-plugin-wasm": "^3.3.0",
+ "vitepress": "^1.6.4"
}
},
"addons/default-pipelines": {
@@ -54,6 +55,637 @@
"@yawn/render-graph-ast": "0.1.0"
}
},
+ "node_modules/@algolia/abtesting": {
+ "version": "1.23.0",
+ "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.23.0.tgz",
+ "integrity": "sha512-j45MBISstltys9QyQ4xf6quRiN1g7vMuwQL9VM4dx8YuRZvCQ173b9royZAx6iAbRX3IB1VnG1z//NuwyQ8jpQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/autocomplete-core": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz",
+ "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-plugin-algolia-insights": "1.17.7",
+ "@algolia/autocomplete-shared": "1.17.7"
+ }
+ },
+ "node_modules/@algolia/autocomplete-plugin-algolia-insights": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz",
+ "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-shared": "1.17.7"
+ },
+ "peerDependencies": {
+ "search-insights": ">= 1 < 3"
+ }
+ },
+ "node_modules/@algolia/autocomplete-preset-algolia": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz",
+ "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-shared": "1.17.7"
+ },
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/autocomplete-shared": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz",
+ "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/client-abtesting": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.57.0.tgz",
+ "integrity": "sha512-JVFFujiZUCguk5tz3LZr4fTQxqpIrj4/Jw3SI7kMljSqtfLxYn/s/TWH0J2s4iNfsDpxPhgFGMotCpmDI4kZ8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-analytics": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.57.0.tgz",
+ "integrity": "sha512-6KqECK4ED3JJQEoDrQWnGPQzElA828xAD4qK5ceawNNyP/LcSvzAoLHjFkoTPksZ/kxj6VUtCRH+IHZesLltng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-common": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.57.0.tgz",
+ "integrity": "sha512-uqpGF3oXYsoCbQq5d7BzNrNTfIfuvJyGP1CKvSW27T9boUg7KOwyxsAw1AX0a3jSW2HrYEJ/NN+Z4MiGivbpeQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-insights": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.57.0.tgz",
+ "integrity": "sha512-u5NboJVJXDEFplvNnqqX4CxkXPYysjJRj47hOSh9329H8kG5gFLKJBIiS5utMQ+GZm8xQl3Te7NInDk6elEADQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-personalization": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.57.0.tgz",
+ "integrity": "sha512-uzc0b2LmHAK9/QID4xeo35OG84AkZl4YewkCqawqAOGLjT2eZpM/OZx45ESygMHG30Ws+ZTSdluPtMJcUnrbWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-query-suggestions": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.57.0.tgz",
+ "integrity": "sha512-dIAhnM6ue/ssa5PjgNfu4g8A4yTojl9ZOUzZU3wIaIKRerL2R/3Emuf9n/D6ICXXP167KC6XCeC7nliSw7cuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-search": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.57.0.tgz",
+ "integrity": "sha512-2TTPTTKSJmCptvhCm4Xf3bBYMqZni+Pgc2hVdqc4l9wsBpSJNVTVIKpnd10OubUgkGcmppVDj1XQqYaf6EnPSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/ingestion": {
+ "version": "1.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.57.0.tgz",
+ "integrity": "sha512-W4JseHKt+pzOxlFV+T3MWEG0h4Z2Se5zjoXUD0ewlw8aOWMG/yjRdopUdLQsXULepB/My2tDuZjkwk2sMfsUrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/monitoring": {
+ "version": "1.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.57.0.tgz",
+ "integrity": "sha512-BrxJVE0/eLinEPICCD7BKN/2xnt0nkjge70u8zzE2ISP3fuB3tjLgcwpanUycvlHBFLI4gK0l5ol54p6IYuR/Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/recommend": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.57.0.tgz",
+ "integrity": "sha512-Gc29jkeiLKlVfHvyrIgyUHHE+aYTdXEeLfK42rjr5/1TTVsYwUJz0XkvoIBIqfMjcDg6gXeHb1jTUZ0H+SYIlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-browser-xhr": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.57.0.tgz",
+ "integrity": "sha512-PIPnPN7MP3fp2VAi01BVXhCWmD366ZB2Hkq5TlYKtThd4KxUtMmaaNDpFgVCTXtSIqWVZLJntOHRvxg/sIPd8Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-fetch": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.57.0.tgz",
+ "integrity": "sha512-AX3RlOudXMdTwtwUqdAf5hAVLvXfOZZH1FZh6ALDdrhVLT0TtAIe48N6nYcWcTnwoTxK/wDIQqZ19IMjK8zJAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-node-http": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.57.0.tgz",
+ "integrity": "sha512-cWZc1dKb7wy9/wPpwMtL1y89gK2G7y2A47Coa7zwf1ydtIeJm4+S+XxoQ2b/ZRiQnrC1YHavLjYUPDCdnT7Khg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.8"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@docsearch/css": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz",
+ "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@docsearch/js": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz",
+ "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@docsearch/react": "3.8.2",
+ "preact": "^10.0.0"
+ }
+ },
+ "node_modules/@docsearch/react": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz",
+ "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-core": "1.17.7",
+ "@algolia/autocomplete-preset-algolia": "1.17.7",
+ "@docsearch/css": "3.8.2",
+ "algoliasearch": "^5.14.2"
+ },
+ "peerDependencies": {
+ "@types/react": ">= 16.8.0 < 19.0.0",
+ "react": ">= 16.8.0 < 19.0.0",
+ "react-dom": ">= 16.8.0 < 19.0.0",
+ "search-insights": ">= 1 < 3"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "search-insights": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@esbuild/linux-x64": {
"version": "0.25.11",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz",
@@ -71,6 +703,176 @@
"node": ">=18"
}
},
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz",
+ "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz",
+ "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz",
+ "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@iconify-json/simple-icons": {
+ "version": "1.2.93",
+ "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.93.tgz",
+ "integrity": "sha512-/XhANjfGYOuqvSR3TmUnkQkINvQ4GVjVuukvymRbxtVFBvIq/yiXJqCDycKcQPT401OYT9H2vIY6ihAlz1QIAw==",
+ "dev": true,
+ "license": "CC0-1.0",
+ "dependencies": {
+ "@iconify/types": "*"
+ }
+ },
+ "node_modules/@iconify/types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -89,6 +891,13 @@
"node": ">=12"
}
},
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -152,6 +961,93 @@
"linux"
]
},
+ "node_modules/@shikijs/core": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz",
+ "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/engine-javascript": "2.5.0",
+ "@shikijs/engine-oniguruma": "2.5.0",
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4",
+ "hast-util-to-html": "^9.0.4"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz",
+ "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^3.1.0"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz",
+ "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz",
+ "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz",
+ "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/transformers": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz",
+ "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "2.5.0",
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz",
+ "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
@@ -180,6 +1076,51 @@
"@types/node": "*"
}
},
+ "node_modules/@types/hast": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz",
+ "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.2.0.tgz",
+ "integrity": "sha512-NoQ2yGlLWj4wpxMs+TYmRKk3thDrQ97agr7sFqfLsAlvoS8SNQuTrlObhFqG9iugdTtgOE9jpJ6FNM4ZGsa5xQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/minimatch": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-6.0.0.tgz",
@@ -201,6 +1142,276 @@
"undici-types": "~7.8.0"
}
},
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.21",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz",
+ "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
+ "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.41.tgz",
+ "integrity": "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.8",
+ "@vue/shared": "3.5.41",
+ "entities": "^7.0.1",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.41.tgz",
+ "integrity": "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.41",
+ "@vue/shared": "3.5.41"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.41.tgz",
+ "integrity": "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.8",
+ "@vue/compiler-core": "3.5.41",
+ "@vue/compiler-dom": "3.5.41",
+ "@vue/compiler-ssr": "3.5.41",
+ "@vue/shared": "3.5.41",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.21",
+ "postcss": "^8.5.19",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.41.tgz",
+ "integrity": "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.41",
+ "@vue/shared": "3.5.41"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "7.7.10",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.10.tgz",
+ "integrity": "sha512-KxtEpUOOpFz/qOGRrAwA36QF7DqIA+FXgCYit9mk9wjbaZt0sXOFz81ElOZtKA4HbWHUdwNjZHBFsFFyp5BZiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-kit": "^7.7.10"
+ }
+ },
+ "node_modules/@vue/devtools-kit": {
+ "version": "7.7.10",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.10.tgz",
+ "integrity": "sha512-3WNi2Kq4tbpVbmhml7RiphmAt0279oh3fKNeWMQIrltfX8Q91b4i5PL8DtyNKdwmcsGrV4fg+erwWOmD05CLIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-shared": "^7.7.10",
+ "birpc": "^2.3.0",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^1.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.2"
+ }
+ },
+ "node_modules/@vue/devtools-shared": {
+ "version": "7.7.10",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.10.tgz",
+ "integrity": "sha512-wOPslzB8vTvpxwdaOcR2qAbwmuSP0L+rhpoC6Cf56V3Jip+HWb7PQQXOUPgBNQARpXsbQX/+mvi8kKucmBGRwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.41.tgz",
+ "integrity": "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.5.41"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.41.tgz",
+ "integrity": "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.41",
+ "@vue/shared": "3.5.41"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.41.tgz",
+ "integrity": "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.41",
+ "@vue/runtime-core": "3.5.41",
+ "@vue/shared": "3.5.41",
+ "csstype": "^3.2.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.41.tgz",
+ "integrity": "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.5.41",
+ "@vue/runtime-dom": "3.5.41",
+ "@vue/shared": "3.5.41"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.41.tgz",
+ "integrity": "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vueuse/core": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz",
+ "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.21",
+ "@vueuse/metadata": "12.8.2",
+ "@vueuse/shared": "12.8.2",
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/integrations": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz",
+ "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vueuse/core": "12.8.2",
+ "@vueuse/shared": "12.8.2",
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "async-validator": "^4",
+ "axios": "^1",
+ "change-case": "^5",
+ "drauu": "^0.4",
+ "focus-trap": "^7",
+ "fuse.js": "^7",
+ "idb-keyval": "^6",
+ "jwt-decode": "^4",
+ "nprogress": "^0.2",
+ "qrcode": "^1.5",
+ "sortablejs": "^1",
+ "universal-cookie": "^7"
+ },
+ "peerDependenciesMeta": {
+ "async-validator": {
+ "optional": true
+ },
+ "axios": {
+ "optional": true
+ },
+ "change-case": {
+ "optional": true
+ },
+ "drauu": {
+ "optional": true
+ },
+ "focus-trap": {
+ "optional": true
+ },
+ "fuse.js": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "jwt-decode": {
+ "optional": true
+ },
+ "nprogress": {
+ "optional": true
+ },
+ "qrcode": {
+ "optional": true
+ },
+ "sortablejs": {
+ "optional": true
+ },
+ "universal-cookie": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz",
+ "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz",
+ "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/@wasm-tool/wasm-pack-plugin": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@wasm-tool/wasm-pack-plugin/-/wasm-pack-plugin-1.7.0.tgz",
@@ -242,6 +1453,32 @@
"resolved": "addons/render-graph-js",
"link": true
},
+ "node_modules/algoliasearch": {
+ "version": "5.57.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.57.0.tgz",
+ "integrity": "sha512-HpND7MBGctOAkd1GoQoDZCGoCpqNTS5NG1LuhElFet3RdLJkwnyTYZXZhXwtpAQPrI36fqQ3eT6KQrdKDTKu3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/abtesting": "1.23.0",
+ "@algolia/client-abtesting": "5.57.0",
+ "@algolia/client-analytics": "5.57.0",
+ "@algolia/client-common": "5.57.0",
+ "@algolia/client-insights": "5.57.0",
+ "@algolia/client-personalization": "5.57.0",
+ "@algolia/client-query-suggestions": "5.57.0",
+ "@algolia/client-search": "5.57.0",
+ "@algolia/ingestion": "1.57.0",
+ "@algolia/monitoring": "1.57.0",
+ "@algolia/recommend": "5.57.0",
+ "@algolia/requester-browser-xhr": "5.57.0",
+ "@algolia/requester-fetch": "5.57.0",
+ "@algolia/requester-node-http": "5.57.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
"node_modules/ansi-regex": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
@@ -350,6 +1587,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/birpc": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz",
+ "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
@@ -424,6 +1671,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -439,6 +1697,28 @@
"node": ">=4"
}
},
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -463,6 +1743,17 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/command-exists": {
"version": "1.2.9",
"resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
@@ -477,6 +1768,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/copy-anything": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz",
+ "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-what": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
"node_modules/cross-spawn": {
"version": "6.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
@@ -507,6 +1814,13 @@
"which": "bin/which"
}
},
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/data-view-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
@@ -597,6 +1911,30 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -649,6 +1987,26 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/emoji-regex-xs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
+ "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/entities": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -837,6 +2195,380 @@
"@esbuild/win32-x64": "0.25.11"
}
},
+ "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz",
+ "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/android-arm": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz",
+ "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/android-arm64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz",
+ "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/android-x64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz",
+ "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz",
+ "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz",
+ "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz",
+ "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz",
+ "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-arm": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz",
+ "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz",
+ "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz",
+ "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz",
+ "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz",
+ "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz",
+ "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz",
+ "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz",
+ "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz",
+ "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz",
+ "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz",
+ "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz",
+ "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz",
+ "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/win32-x64": {
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz",
+ "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -847,6 +2579,13 @@
"node": ">=0.8.0"
}
},
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/fast-glob": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
@@ -887,6 +2626,16 @@
"node": ">=8"
}
},
+ "node_modules/focus-trap": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz",
+ "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tabbable": "^6.4.0"
+ }
+ },
"node_modules/for-each": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
@@ -990,6 +2739,21 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -1327,6 +3091,51 @@
"node": ">= 0.4"
}
},
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -1334,6 +3143,17 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -1795,6 +3615,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-what": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz",
+ "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
"node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
@@ -1865,6 +3698,23 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -1875,6 +3725,28 @@
"node": ">= 0.4"
}
},
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/memorystream": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
@@ -1894,6 +3766,100 @@
"node": ">= 8"
}
},
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@@ -1931,10 +3897,24 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/minisearch": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz",
+ "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "version": "3.3.18",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
+ "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
"dev": true,
"funding": [
{
@@ -2050,6 +4030,18 @@
"wrappy": "1"
}
},
+ "node_modules/oniguruma-to-es": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz",
+ "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex-xs": "^1.0.0",
+ "regex": "^6.0.1",
+ "regex-recursion": "^6.0.2"
+ }
+ },
"node_modules/own-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
@@ -2146,6 +4138,13 @@
"node": ">=4"
}
},
+ "node_modules/perfect-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -2200,9 +4199,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "version": "8.5.26",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
+ "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
"dev": true,
"funding": [
{
@@ -2220,7 +4219,7 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.11",
+ "nanoid": "^3.3.17",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -2228,6 +4227,36 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/preact": {
+ "version": "10.29.8",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz",
+ "integrity": "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ },
+ "peerDependencies": {
+ "preact-render-to-string": ">=5"
+ },
+ "peerDependenciesMeta": {
+ "preact-render-to-string": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/property-information": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+ "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -2287,6 +4316,33 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
+ "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
@@ -2340,6 +4396,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/rimraf": {
"version": "5.0.10",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
@@ -2492,6 +4555,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/search-insights": {
+ "version": "2.17.3",
+ "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz",
+ "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/semver": {
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
@@ -2587,6 +4658,23 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/shiki": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz",
+ "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "2.5.0",
+ "@shikijs/engine-javascript": "2.5.0",
+ "@shikijs/engine-oniguruma": "2.5.0",
+ "@shikijs/langs": "2.5.0",
+ "@shikijs/themes": "2.5.0",
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
"node_modules/side-channel": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
@@ -2696,6 +4784,17 @@
"node": ">=0.10.0"
}
},
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/spdx-correct": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -2732,6 +4831,16 @@
"dev": true,
"license": "CC0-1.0"
},
+ "node_modules/speakingurl": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+ "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/stop-iteration-iterator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
@@ -2888,6 +4997,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/strip-ansi": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
@@ -2938,6 +5062,19 @@
"node": ">=4"
}
},
+ "node_modules/superjson": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz",
+ "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "copy-anything": "^4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -2964,6 +5101,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/tabbable": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz",
+ "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -3025,6 +5169,17 @@
"node": ">=8.0"
}
},
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/typed-array-buffer": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
@@ -3129,6 +5284,79 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/unist-util-is": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -3150,6 +5378,36 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/vite": {
"version": "7.1.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz",
@@ -3276,6 +5534,200 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/vitepress": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz",
+ "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@docsearch/css": "3.8.2",
+ "@docsearch/js": "3.8.2",
+ "@iconify-json/simple-icons": "^1.2.21",
+ "@shikijs/core": "^2.1.0",
+ "@shikijs/transformers": "^2.1.0",
+ "@shikijs/types": "^2.1.0",
+ "@types/markdown-it": "^14.1.2",
+ "@vitejs/plugin-vue": "^5.2.1",
+ "@vue/devtools-api": "^7.7.0",
+ "@vue/shared": "^3.5.13",
+ "@vueuse/core": "^12.4.0",
+ "@vueuse/integrations": "^12.4.0",
+ "focus-trap": "^7.6.4",
+ "mark.js": "8.11.1",
+ "minisearch": "^7.1.1",
+ "shiki": "^2.1.0",
+ "vite": "^5.4.14",
+ "vue": "^3.5.13"
+ },
+ "bin": {
+ "vitepress": "bin/vitepress.js"
+ },
+ "peerDependencies": {
+ "markdown-it-mathjax3": "^4",
+ "postcss": "^8"
+ },
+ "peerDependenciesMeta": {
+ "markdown-it-mathjax3": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitepress/node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/vitepress/node_modules/@vitejs/plugin-vue": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
+ "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^5.0.0 || ^6.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/vitepress/node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/vitepress/node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.5.41",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.41.tgz",
+ "integrity": "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.41",
+ "@vue/compiler-sfc": "3.5.41",
+ "@vue/runtime-dom": "3.5.41",
+ "@vue/server-renderer": "3.5.41",
+ "@vue/shared": "3.5.41"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/watchpack": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
@@ -3533,6 +5985,17 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"packages/yawn-core": {
"name": "@yawn/core",
"version": "0.1.0"
diff --git a/package.json b/package.json
index 45eeff7..55e91cc 100644
--- a/package.json
+++ b/package.json
@@ -10,16 +10,20 @@
],
"scripts": {
"examples": "run-s rsw:build examples:watch",
- "examples:watch": "run-p rsw:watch examples:vite",
+ "examples:watch": "run-p rsw:watch examples:vite docs:vite",
"examples:vite": "vite dev",
+ "docs": "npm run examples",
+ "docs:vite": "vitepress dev docs --host 127.0.0.1 --port 5174",
+ "docs:build": "vitepress build docs",
+ "docs:preview": "vitepress preview docs --host 127.0.0.1 --port 5174",
"rsw:watch": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' rsw watch",
"rsw:build": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' rsw build",
"wasm-dev": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --dev --target web renderer -- --features atomics,bulk-memory -Z build-std=panic_abort,std",
"wasm-release": "RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+mutable-globals -Clink-args=--shared-memory -Clink-args=--max-memory=1073741824 -Clink-args=--import-memory -Clink-args=--export=__wasm_init_tls -Clink-args=--export=__tls_size -Clink-args=--export=__tls_align -Clink-args=--export=__tls_base' wasm-pack build --release --target web renderer -- --features atomics,bulk-memory -Z build-std=panic_abort,std",
"bundle-dev": "vite build --mode development",
"bundle-release": "vite build",
- "build": "run-s clean wasm-dev bundle-dev",
- "build-release": "run-s clean wasm-release bundle-release",
+ "build": "run-s clean wasm-dev bundle-dev docs:build",
+ "build-release": "run-s clean wasm-release bundle-release docs:build",
"test:js": "node --test tests/*.test.js",
"start": "vite preview",
"clean": "rimraf --glob dist **/pkg",
@@ -32,6 +36,7 @@
"rollup-plugin-copy": "^3.5.0",
"vite": "^7.1.10",
"vite-plugin-rsw": "^2.0.11",
- "vite-plugin-wasm": "^3.3.0"
+ "vite-plugin-wasm": "^3.3.0",
+ "vitepress": "^1.6.4"
}
}
diff --git a/tests/cookbook-examples.test.js b/tests/cookbook-examples.test.js
deleted file mode 100644
index 108b006..0000000
--- a/tests/cookbook-examples.test.js
+++ /dev/null
@@ -1,183 +0,0 @@
-import test from "node:test";
-import assert from "node:assert/strict";
-
-import {
- animateInstance,
- canonicalAstExample,
- classifyInstance,
- compileAndSwitch,
- computePipelineExample,
- connectFromWorker,
- createInstance,
- createVelocityColumn,
- customRenderPipelineExample,
- defaultPipelineExample,
- fluentGraphExample,
- fxNodeExportExample,
- importGltf,
- installCameraRenderDataControls,
- jsoGraphExample,
- loadCompleteScene,
- pickNearest,
- conventionalSceneHandles,
- restyleScene,
- setVelocity,
- simpleSceneShader,
- updateInstance,
-} from "../examples/cookbook/index.js";
-
-test("cookbook graph recipes produce canonical addon-owned ASTs", () => {
- const canonical = canonicalAstExample();
- assert.equal(canonical.ast.id, "shared_dag");
- assert.equal(
- (canonical.source.match(/\(ref "source" "value"\)/g) ?? []).length,
- 2,
- );
- assert.deepEqual(
- [jsoGraphExample().id, fluentGraphExample().id],
- ["jso_graph", "fluent_graph"],
- );
-
- const fxnode = fxNodeExportExample();
- assert.equal(fxnode.kind, "yawn-render-graph");
- assert.equal(fxnode.pipelines.render.length, 4);
-
- const defaults = defaultPipelineExample();
- assert.deepEqual(
- defaults.pipelines.render.map(({ name }) => name),
- [
- "ground_plane",
- "gltf_standard",
- "gltf_standard_double_sided",
- "frame_out",
- ],
- );
- assert.equal(defaults.pipelines.compute.length, 1);
-
- const custom = customRenderPipelineExample();
- assert.equal(custom.pipelines.render[0].shader, simpleSceneShader);
- assert.match(simpleSceneShader, /@vertex fn vertex_main/);
-
- const compute = computePipelineExample().pipelines.compute[0];
- assert.deepEqual(
- [compute.entry, compute.dispatch],
- ["initialize", [4, 1, 1]],
- );
-});
-
-test("cookbook graph lifecycle recipe serializes and switches", async () => {
- const calls = [];
- const core = {
- compileGraph(source) {
- calls.push(["compile", source]);
- return Promise.resolve({ compiledId: [3, 4] });
- },
- switchCompiledGraph(id) {
- calls.push(["switch", id]);
- return Promise.resolve();
- },
- dropCompiledGraph(id) {
- calls.push(["drop", id]);
- return Promise.resolve();
- },
- };
- const graph = { id: "lifecycle", revision: 1, nodes: [] };
- const compiled = await compileAndSwitch(core, graph);
- assert.match(calls[0][1], /^\(yawn-graph 1/);
- assert.deepEqual(calls.slice(1), [["switch", [3, 4]]]);
-});
-
-test("cookbook mutation recipes use handles and SOA writes directly", async () => {
- const calls = [];
- const column = {
- write(slot, values) {
- calls.push(["velocity", slot, values]);
- },
- };
- const core = {
- allocateArray(layout) {
- calls.push(["allocate", layout]);
- return Promise.resolve(column);
- },
- setInstanceTransform(handle, transform) {
- calls.push(["transform", handle, transform]);
- },
- setInstanceType(handle, words) {
- calls.push(["type", handle, words]);
- },
- };
- const instance = {
- handle: [7, 2],
- setTransform(transform) {
- calls.push(["wrapped-transform", transform]);
- },
- setType(words) {
- calls.push(["wrapped-type", words]);
- },
- };
- const mesh = {
- createInstance(transform) {
- calls.push(["create", transform]);
- return Promise.resolve(instance);
- },
- };
- const transform = Array.from({ length: 16 }, (_, index) => index);
- const words = Array(16).fill(1);
-
- assert.equal(await createInstance(mesh, transform), instance);
- updateInstance(instance, transform, words);
- const velocity = await createVelocityColumn(core);
- setVelocity(velocity, instance, [1, 2, 3]);
- animateInstance(core, instance, transform);
- classifyInstance(core, instance, words);
-
- assert.deepEqual(calls.find(([name]) => name === "allocate")[1], {
- name: "instance.velocity",
- domain: "instance",
- scalar: "f32",
- lanes: 4,
- });
- assert.deepEqual(
- calls.find(([name]) => name === "velocity"),
- ["velocity", 7, [1, 2, 3, 0]],
- );
- assert.ok(calls.some(([name]) => name === "transform"));
- assert.ok(calls.some(([name]) => name === "type"));
-});
-
-test("cookbook picking and worker-to-worker recipes use public facades", async () => {
- const picked = await pickNearest(
- {
- pickRay: async () => ({
- epoch: 5,
- hits: [{ instance: [9, 3], distance: 2 }],
- }),
- },
- [0, 0, 0],
- [0, 0, -1],
- );
- assert.deepEqual(picked.hits[0].instance, [9, 3]);
-
- class Port extends EventTarget {
- postMessage() {}
- start() {
- queueMicrotask(() =>
- this.dispatchEvent(
- new MessageEvent("message", {
- data: { type: "soa-init", arrays: [] },
- }),
- ),
- );
- }
- terminate() {}
- }
- const core = await connectFromWorker(new Port());
- assert.equal(core.constructor.name, "YawnCore");
- core.dispose();
-
- assert.equal(typeof importGltf, "function");
- assert.equal(typeof installCameraRenderDataControls, "function");
- assert.equal(typeof conventionalSceneHandles, "function");
- assert.equal(typeof restyleScene, "function");
- assert.equal(typeof loadCompleteScene, "function");
-});
diff --git a/tests/docs-playground.test.js b/tests/docs-playground.test.js
new file mode 100644
index 0000000..28749c0
--- /dev/null
+++ b/tests/docs-playground.test.js
@@ -0,0 +1,70 @@
+import test from "node:test";
+import assert from "node:assert/strict";
+import { readFile, readdir } from "node:fs/promises";
+import path from "node:path";
+
+import {
+ PLAYGROUND_RECIPES,
+ playgroundRecipe,
+} from "../examples/playground/recipes.js";
+
+const root = path.resolve(import.meta.dirname, "..");
+const docsRoot = path.join(root, "docs");
+
+async function markdownFiles(directory) {
+ const entries = await readdir(directory, { withFileTypes: true });
+ const nested = await Promise.all(
+ entries.map((entry) => {
+ const file = path.join(directory, entry.name);
+ return entry.isDirectory()
+ ? markdownFiles(file)
+ : entry.name.endsWith(".md")
+ ? [file]
+ : [];
+ }),
+ );
+ return nested.flat();
+}
+
+test("playground recipes are unique, compilable, and linked to docs", async () => {
+ const entries = Object.entries(PLAYGROUND_RECIPES);
+ assert.equal(entries.length, 7);
+ assert.equal(playgroundRecipe("unknown"), PLAYGROUND_RECIPES["first-scene"]);
+
+ const sources = new Set();
+ const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor;
+ for (const [id, recipe] of entries) {
+ assert.match(id, /^[a-z][a-z0-9-]+$/);
+ assert.ok(!sources.has(recipe.source), `${id} must have unique editable code`);
+ sources.add(recipe.source);
+ assert.doesNotThrow(() => new AsyncFunction("yawn", recipe.source));
+
+ const relativePage = recipe.docs
+ .replace(/^\/docs\//, "")
+ .split("#", 1)[0]
+ .replace(/\/$/, "/index");
+ const markdown = await readFile(
+ path.join(docsRoot, `${relativePage}.md`),
+ "utf8",
+ );
+ assert.ok(markdown.length > 0, `${id} docs page must exist`);
+ }
+});
+
+test("docs contain every former recipe and only link to playground examples", async () => {
+ const files = await markdownFiles(docsRoot);
+ const contents = await Promise.all(files.map((file) => readFile(file, "utf8")));
+ const documentation = contents.join("\n");
+
+ for (let number = 1; number <= 17; number++) {
+ const prefix = String(number).padStart(2, "0");
+ assert.match(documentation, new RegExp(`^## ${prefix} —`, "m"));
+ }
+ for (const id of Object.keys(PLAYGROUND_RECIPES)) {
+ assert.match(documentation, new RegExp(`id=["']${id}["']`));
+ }
+
+ const examplesIndex = await readFile(path.join(root, "examples/index.html"), "utf8");
+ assert.doesNotMatch(examplesIndex, /cookbook|\.\/[^\s"']+\.js/i);
+ assert.match(examplesIndex, /\/playground\//);
+});
diff --git a/vite.config.js b/vite.config.js
index 7158b40..866454f 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -32,18 +32,8 @@ function freshWasmPackage() {
async buildStart() { await mirror(); },
async writeBundle() {
const wasmBuildDestination = path.resolve(buildOutput, "renderer/pkg");
- const cookbookBuildDestination = path.resolve(buildOutput, "cookbook");
- await Promise.all([
- mkdir(wasmBuildDestination, { recursive: true }),
- mkdir(cookbookBuildDestination, { recursive: true }),
- ]);
- await Promise.all([
- cp(wasmSource, wasmBuildDestination, { recursive: true, force: true }),
- cp(path.resolve(exampleRoot, "cookbook"), cookbookBuildDestination, {
- recursive: true,
- force: true,
- }),
- ]);
+ await mkdir(wasmBuildDestination, { recursive: true });
+ await cp(wasmSource, wasmBuildDestination, { recursive: true, force: true });
},
configureServer(server) {
server.watcher.add(wasmSource);
@@ -63,6 +53,8 @@ export default defineConfig({
rollupOptions: {
input: {
examples: path.resolve(exampleRoot, "index.html"),
+ playground: path.resolve(exampleRoot, "playground/index.html"),
+ playgroundRunner: path.resolve(exampleRoot, "playground/runner.html"),
renderGraphStudio: path.resolve(
exampleRoot,
"render-graph-studio/index.html",
@@ -131,6 +123,19 @@ export default defineConfig({
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
},
+ proxy: {
+ "/docs": {
+ target: "http://127.0.0.1:5174",
+ changeOrigin: true,
+ ws: true,
+ configure(proxy) {
+ proxy.on("proxyRes", (response) => {
+ response.headers["cross-origin-embedder-policy"] = "require-corp";
+ response.headers["cross-origin-opener-policy"] = "same-origin";
+ });
+ },
+ },
+ },
fs: {
strict: false,
},
diff --git a/yarn.lock b/yarn.lock
index 8549ab8..ec9498d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,11 +2,229 @@
# yarn lockfile v1
+"@algolia/abtesting@1.23.0":
+ version "1.23.0"
+ resolved "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.23.0.tgz"
+ integrity sha512-j45MBISstltys9QyQ4xf6quRiN1g7vMuwQL9VM4dx8YuRZvCQ173b9royZAx6iAbRX3IB1VnG1z//NuwyQ8jpQ==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/autocomplete-core@1.17.7":
+ version "1.17.7"
+ resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz"
+ integrity sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==
+ dependencies:
+ "@algolia/autocomplete-plugin-algolia-insights" "1.17.7"
+ "@algolia/autocomplete-shared" "1.17.7"
+
+"@algolia/autocomplete-plugin-algolia-insights@1.17.7":
+ version "1.17.7"
+ resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz"
+ integrity sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.17.7"
+
+"@algolia/autocomplete-preset-algolia@1.17.7":
+ version "1.17.7"
+ resolved "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz"
+ integrity sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.17.7"
+
+"@algolia/autocomplete-shared@1.17.7":
+ version "1.17.7"
+ resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz"
+ integrity sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==
+
+"@algolia/client-abtesting@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.57.0.tgz"
+ integrity sha512-JVFFujiZUCguk5tz3LZr4fTQxqpIrj4/Jw3SI7kMljSqtfLxYn/s/TWH0J2s4iNfsDpxPhgFGMotCpmDI4kZ8w==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/client-analytics@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.57.0.tgz"
+ integrity sha512-6KqECK4ED3JJQEoDrQWnGPQzElA828xAD4qK5ceawNNyP/LcSvzAoLHjFkoTPksZ/kxj6VUtCRH+IHZesLltng==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/client-common@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.57.0.tgz"
+ integrity sha512-uqpGF3oXYsoCbQq5d7BzNrNTfIfuvJyGP1CKvSW27T9boUg7KOwyxsAw1AX0a3jSW2HrYEJ/NN+Z4MiGivbpeQ==
+
+"@algolia/client-insights@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.57.0.tgz"
+ integrity sha512-u5NboJVJXDEFplvNnqqX4CxkXPYysjJRj47hOSh9329H8kG5gFLKJBIiS5utMQ+GZm8xQl3Te7NInDk6elEADQ==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/client-personalization@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.57.0.tgz"
+ integrity sha512-uzc0b2LmHAK9/QID4xeo35OG84AkZl4YewkCqawqAOGLjT2eZpM/OZx45ESygMHG30Ws+ZTSdluPtMJcUnrbWQ==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/client-query-suggestions@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.57.0.tgz"
+ integrity sha512-dIAhnM6ue/ssa5PjgNfu4g8A4yTojl9ZOUzZU3wIaIKRerL2R/3Emuf9n/D6ICXXP167KC6XCeC7nliSw7cuSw==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/client-search@>= 4.9.1 < 6", "@algolia/client-search@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.57.0.tgz"
+ integrity sha512-2TTPTTKSJmCptvhCm4Xf3bBYMqZni+Pgc2hVdqc4l9wsBpSJNVTVIKpnd10OubUgkGcmppVDj1XQqYaf6EnPSQ==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/ingestion@1.57.0":
+ version "1.57.0"
+ resolved "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.57.0.tgz"
+ integrity sha512-W4JseHKt+pzOxlFV+T3MWEG0h4Z2Se5zjoXUD0ewlw8aOWMG/yjRdopUdLQsXULepB/My2tDuZjkwk2sMfsUrQ==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/monitoring@1.57.0":
+ version "1.57.0"
+ resolved "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.57.0.tgz"
+ integrity sha512-BrxJVE0/eLinEPICCD7BKN/2xnt0nkjge70u8zzE2ISP3fuB3tjLgcwpanUycvlHBFLI4gK0l5ol54p6IYuR/Q==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/recommend@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.57.0.tgz"
+ integrity sha512-Gc29jkeiLKlVfHvyrIgyUHHE+aYTdXEeLfK42rjr5/1TTVsYwUJz0XkvoIBIqfMjcDg6gXeHb1jTUZ0H+SYIlQ==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
+"@algolia/requester-browser-xhr@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.57.0.tgz"
+ integrity sha512-PIPnPN7MP3fp2VAi01BVXhCWmD366ZB2Hkq5TlYKtThd4KxUtMmaaNDpFgVCTXtSIqWVZLJntOHRvxg/sIPd8Q==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+
+"@algolia/requester-fetch@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.57.0.tgz"
+ integrity sha512-AX3RlOudXMdTwtwUqdAf5hAVLvXfOZZH1FZh6ALDdrhVLT0TtAIe48N6nYcWcTnwoTxK/wDIQqZ19IMjK8zJAA==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+
+"@algolia/requester-node-http@5.57.0":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.57.0.tgz"
+ integrity sha512-cWZc1dKb7wy9/wPpwMtL1y89gK2G7y2A47Coa7zwf1ydtIeJm4+S+XxoQ2b/ZRiQnrC1YHavLjYUPDCdnT7Khg==
+ dependencies:
+ "@algolia/client-common" "5.57.0"
+
+"@babel/helper-string-parser@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz"
+ integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==
+
+"@babel/helper-validator-identifier@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz"
+ integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==
+
+"@babel/parser@^7.29.8":
+ version "7.29.8"
+ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz"
+ integrity sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==
+ dependencies:
+ "@babel/types" "^7.29.8"
+
+"@babel/types@^7.29.8":
+ version "7.29.8"
+ resolved "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz"
+ integrity sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.29.7"
+ "@babel/helper-validator-identifier" "^7.29.7"
+
+"@docsearch/css@3.8.2":
+ version "3.8.2"
+ resolved "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz"
+ integrity sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==
+
+"@docsearch/js@3.8.2":
+ version "3.8.2"
+ resolved "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz"
+ integrity sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==
+ dependencies:
+ "@docsearch/react" "3.8.2"
+ preact "^10.0.0"
+
+"@docsearch/react@3.8.2":
+ version "3.8.2"
+ resolved "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz"
+ integrity sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==
+ dependencies:
+ "@algolia/autocomplete-core" "1.17.7"
+ "@algolia/autocomplete-preset-algolia" "1.17.7"
+ "@docsearch/css" "3.8.2"
+ algoliasearch "^5.14.2"
+
+"@esbuild/linux-x64@0.21.5":
+ version "0.21.5"
+ resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz"
+ integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
+
"@esbuild/linux-x64@0.25.11":
version "0.25.11"
resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz"
integrity sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==
+"@iconify-json/simple-icons@^1.2.21":
+ version "1.2.93"
+ resolved "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.93.tgz"
+ integrity sha512-/XhANjfGYOuqvSR3TmUnkQkINvQ4GVjVuukvymRbxtVFBvIq/yiXJqCDycKcQPT401OYT9H2vIY6ihAlz1QIAw==
+ dependencies:
+ "@iconify/types" "*"
+
+"@iconify/types@*":
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz"
+ integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz"
@@ -19,6 +237,11 @@
wrap-ansi "^8.1.0"
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+"@jridgewell/sourcemap-codec@^1.5.5":
+ version "1.5.5"
+ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz"
+ integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@@ -50,6 +273,70 @@
resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz"
integrity sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==
+"@shikijs/core@^2.1.0", "@shikijs/core@2.5.0":
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz"
+ integrity sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==
+ dependencies:
+ "@shikijs/engine-javascript" "2.5.0"
+ "@shikijs/engine-oniguruma" "2.5.0"
+ "@shikijs/types" "2.5.0"
+ "@shikijs/vscode-textmate" "^10.0.2"
+ "@types/hast" "^3.0.4"
+ hast-util-to-html "^9.0.4"
+
+"@shikijs/engine-javascript@2.5.0":
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz"
+ integrity sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==
+ dependencies:
+ "@shikijs/types" "2.5.0"
+ "@shikijs/vscode-textmate" "^10.0.2"
+ oniguruma-to-es "^3.1.0"
+
+"@shikijs/engine-oniguruma@2.5.0":
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz"
+ integrity sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==
+ dependencies:
+ "@shikijs/types" "2.5.0"
+ "@shikijs/vscode-textmate" "^10.0.2"
+
+"@shikijs/langs@2.5.0":
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz"
+ integrity sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==
+ dependencies:
+ "@shikijs/types" "2.5.0"
+
+"@shikijs/themes@2.5.0":
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz"
+ integrity sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==
+ dependencies:
+ "@shikijs/types" "2.5.0"
+
+"@shikijs/transformers@^2.1.0":
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz"
+ integrity sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==
+ dependencies:
+ "@shikijs/core" "2.5.0"
+ "@shikijs/types" "2.5.0"
+
+"@shikijs/types@^2.1.0", "@shikijs/types@2.5.0":
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz"
+ integrity sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==
+ dependencies:
+ "@shikijs/vscode-textmate" "^10.0.2"
+ "@types/hast" "^3.0.4"
+
+"@shikijs/vscode-textmate@^10.0.2":
+ version "10.0.2"
+ resolved "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz"
+ integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==
+
"@types/estree@1.0.8":
version "1.0.8"
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz"
@@ -70,6 +357,38 @@
"@types/minimatch" "*"
"@types/node" "*"
+"@types/hast@^3.0.0", "@types/hast@^3.0.4":
+ version "3.0.5"
+ resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz"
+ integrity sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/linkify-it@^5":
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz"
+ integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==
+
+"@types/markdown-it@^14.1.2":
+ version "14.2.0"
+ resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.2.0.tgz"
+ integrity sha512-NoQ2yGlLWj4wpxMs+TYmRKk3thDrQ97agr7sFqfLsAlvoS8SNQuTrlObhFqG9iugdTtgOE9jpJ6FNM4ZGsa5xQ==
+ dependencies:
+ "@types/linkify-it" "^5"
+ "@types/mdurl" "^2"
+
+"@types/mdast@^4.0.0":
+ version "4.0.4"
+ resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz"
+ integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/mdurl@^2":
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz"
+ integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==
+
"@types/minimatch@*":
version "6.0.0"
resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-6.0.0.tgz"
@@ -77,13 +396,172 @@
dependencies:
minimatch "*"
-"@types/node@*", "@types/node@^20.19.0 || >=22.12.0":
+"@types/node@*", "@types/node@^18.0.0 || >=20.0.0", "@types/node@^20.19.0 || >=22.12.0":
version "24.1.0"
resolved "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz"
integrity sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==
dependencies:
undici-types "~7.8.0"
+"@types/unist@*", "@types/unist@^3.0.0":
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz"
+ integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==
+
+"@types/web-bluetooth@^0.0.21":
+ version "0.0.21"
+ resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz"
+ integrity sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==
+
+"@ungap/structured-clone@^1.0.0":
+ version "1.3.3"
+ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz"
+ integrity sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==
+
+"@vitejs/plugin-vue@^5.2.1":
+ version "5.2.4"
+ resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz"
+ integrity sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==
+
+"@vue/compiler-core@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.41.tgz"
+ integrity sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==
+ dependencies:
+ "@babel/parser" "^7.29.8"
+ "@vue/shared" "3.5.41"
+ entities "^7.0.1"
+ estree-walker "^2.0.2"
+ source-map-js "^1.2.1"
+
+"@vue/compiler-dom@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.41.tgz"
+ integrity sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==
+ dependencies:
+ "@vue/compiler-core" "3.5.41"
+ "@vue/shared" "3.5.41"
+
+"@vue/compiler-sfc@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.41.tgz"
+ integrity sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==
+ dependencies:
+ "@babel/parser" "^7.29.8"
+ "@vue/compiler-core" "3.5.41"
+ "@vue/compiler-dom" "3.5.41"
+ "@vue/compiler-ssr" "3.5.41"
+ "@vue/shared" "3.5.41"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.21"
+ postcss "^8.5.19"
+ source-map-js "^1.2.1"
+
+"@vue/compiler-ssr@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.41.tgz"
+ integrity sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==
+ dependencies:
+ "@vue/compiler-dom" "3.5.41"
+ "@vue/shared" "3.5.41"
+
+"@vue/devtools-api@^7.7.0":
+ version "7.7.10"
+ resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.10.tgz"
+ integrity sha512-KxtEpUOOpFz/qOGRrAwA36QF7DqIA+FXgCYit9mk9wjbaZt0sXOFz81ElOZtKA4HbWHUdwNjZHBFsFFyp5BZiA==
+ dependencies:
+ "@vue/devtools-kit" "^7.7.10"
+
+"@vue/devtools-kit@^7.7.10":
+ version "7.7.10"
+ resolved "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.10.tgz"
+ integrity sha512-3WNi2Kq4tbpVbmhml7RiphmAt0279oh3fKNeWMQIrltfX8Q91b4i5PL8DtyNKdwmcsGrV4fg+erwWOmD05CLIw==
+ dependencies:
+ "@vue/devtools-shared" "^7.7.10"
+ birpc "^2.3.0"
+ hookable "^5.5.3"
+ mitt "^3.0.1"
+ perfect-debounce "^1.0.0"
+ speakingurl "^14.0.1"
+ superjson "^2.2.2"
+
+"@vue/devtools-shared@^7.7.10":
+ version "7.7.10"
+ resolved "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.10.tgz"
+ integrity sha512-wOPslzB8vTvpxwdaOcR2qAbwmuSP0L+rhpoC6Cf56V3Jip+HWb7PQQXOUPgBNQARpXsbQX/+mvi8kKucmBGRwQ==
+ dependencies:
+ rfdc "^1.4.1"
+
+"@vue/reactivity@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.41.tgz"
+ integrity sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA==
+ dependencies:
+ "@vue/shared" "3.5.41"
+
+"@vue/runtime-core@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.41.tgz"
+ integrity sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg==
+ dependencies:
+ "@vue/reactivity" "3.5.41"
+ "@vue/shared" "3.5.41"
+
+"@vue/runtime-dom@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.41.tgz"
+ integrity sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw==
+ dependencies:
+ "@vue/reactivity" "3.5.41"
+ "@vue/runtime-core" "3.5.41"
+ "@vue/shared" "3.5.41"
+ csstype "^3.2.3"
+
+"@vue/server-renderer@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.41.tgz"
+ integrity sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ==
+ dependencies:
+ "@vue/compiler-ssr" "3.5.41"
+ "@vue/runtime-dom" "3.5.41"
+ "@vue/shared" "3.5.41"
+
+"@vue/shared@^3.5.13", "@vue/shared@3.5.41":
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.41.tgz"
+ integrity sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==
+
+"@vueuse/core@^12.4.0", "@vueuse/core@12.8.2":
+ version "12.8.2"
+ resolved "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz"
+ integrity sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==
+ dependencies:
+ "@types/web-bluetooth" "^0.0.21"
+ "@vueuse/metadata" "12.8.2"
+ "@vueuse/shared" "12.8.2"
+ vue "^3.5.13"
+
+"@vueuse/integrations@^12.4.0":
+ version "12.8.2"
+ resolved "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz"
+ integrity sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==
+ dependencies:
+ "@vueuse/core" "12.8.2"
+ "@vueuse/shared" "12.8.2"
+ vue "^3.5.13"
+
+"@vueuse/metadata@12.8.2":
+ version "12.8.2"
+ resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz"
+ integrity sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==
+
+"@vueuse/shared@12.8.2":
+ version "12.8.2"
+ resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz"
+ integrity sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==
+ dependencies:
+ vue "^3.5.13"
+
"@wasm-tool/wasm-pack-plugin@^1.7.0":
version "1.7.0"
resolved "https://registry.npmjs.org/@wasm-tool/wasm-pack-plugin/-/wasm-pack-plugin-1.7.0.tgz"
@@ -94,6 +572,60 @@
watchpack "^2.1.1"
which "^2.0.2"
+"@yawn/core@0.1.0", "@yawn/core@file:/home/user/workspace/repo/packages/yawn-core":
+ version "0.1.0"
+ resolved "file:packages/yawn-core"
+
+"@yawn/default-pipelines@file:/home/user/workspace/repo/addons/default-pipelines":
+ version "0.1.0"
+ resolved "file:addons/default-pipelines"
+
+"@yawn/gltf-import@file:/home/user/workspace/repo/addons/gltf-import":
+ version "0.1.0"
+ resolved "file:addons/gltf-import"
+
+"@yawn/mesh-handles@file:/home/user/workspace/repo/addons/mesh-handles":
+ version "0.1.0"
+ resolved "file:addons/mesh-handles"
+ dependencies:
+ "@yawn/core" "0.1.0"
+
+"@yawn/render-graph-ast@0.1.0", "@yawn/render-graph-ast@file:/home/user/workspace/repo/addons/render-graph-ast":
+ version "0.1.0"
+ resolved "file:addons/render-graph-ast"
+
+"@yawn/render-graph-fxnode@file:/home/user/workspace/repo/addons/render-graph-fxnode":
+ version "0.1.0"
+ resolved "file:addons/render-graph-fxnode"
+ dependencies:
+ "@yawn/render-graph-ast" "0.1.0"
+
+"@yawn/render-graph-js@file:/home/user/workspace/repo/addons/render-graph-js":
+ version "0.1.0"
+ resolved "file:addons/render-graph-js"
+ dependencies:
+ "@yawn/render-graph-ast" "0.1.0"
+
+algoliasearch@^5.14.2, "algoliasearch@>= 4.9.1 < 6":
+ version "5.57.0"
+ resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.57.0.tgz"
+ integrity sha512-HpND7MBGctOAkd1GoQoDZCGoCpqNTS5NG1LuhElFet3RdLJkwnyTYZXZhXwtpAQPrI36fqQ3eT6KQrdKDTKu3A==
+ dependencies:
+ "@algolia/abtesting" "1.23.0"
+ "@algolia/client-abtesting" "5.57.0"
+ "@algolia/client-analytics" "5.57.0"
+ "@algolia/client-common" "5.57.0"
+ "@algolia/client-insights" "5.57.0"
+ "@algolia/client-personalization" "5.57.0"
+ "@algolia/client-query-suggestions" "5.57.0"
+ "@algolia/client-search" "5.57.0"
+ "@algolia/ingestion" "1.57.0"
+ "@algolia/monitoring" "1.57.0"
+ "@algolia/recommend" "5.57.0"
+ "@algolia/requester-browser-xhr" "5.57.0"
+ "@algolia/requester-fetch" "5.57.0"
+ "@algolia/requester-node-http" "5.57.0"
+
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
@@ -166,6 +698,11 @@ balanced-match@^1.0.0:
resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+birpc@^2.3.0:
+ version "2.9.0"
+ resolved "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz"
+ integrity sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==
+
brace-expansion@^1.1.7:
version "1.1.12"
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz"
@@ -214,6 +751,11 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4:
call-bind-apply-helpers "^1.0.2"
get-intrinsic "^1.3.0"
+ccount@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz"
+ integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
+
chalk@^2.4.1:
version "2.4.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
@@ -223,6 +765,16 @@ chalk@^2.4.1:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
+character-entities-html4@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz"
+ integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==
+
+character-entities-legacy@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz"
+ integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
@@ -252,6 +804,11 @@ colorette@^1.1.0:
resolved "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz"
integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
+comma-separated-tokens@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz"
+ integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
+
command-exists@^1.2.7:
version "1.2.9"
resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz"
@@ -262,6 +819,13 @@ concat-map@0.0.1:
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+copy-anything@^4:
+ version "4.0.5"
+ resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz"
+ integrity sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==
+ dependencies:
+ is-what "^5.2.0"
+
cross-spawn@^6.0.5:
version "6.0.6"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz"
@@ -282,6 +846,11 @@ cross-spawn@^7.0.6:
shebang-command "^2.0.0"
which "^2.0.1"
+csstype@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz"
+ integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==
+
data-view-buffer@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz"
@@ -327,6 +896,18 @@ define-properties@^1.2.1:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+dequal@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz"
+ integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
+devlop@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz"
+ integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==
+ dependencies:
+ dequal "^2.0.0"
+
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
@@ -348,6 +929,11 @@ eastasianwidth@^0.2.0:
resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+emoji-regex-xs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz"
+ integrity sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==
+
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
@@ -358,6 +944,11 @@ emoji-regex@^9.2.2:
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+entities@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz"
+ integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
@@ -461,6 +1052,35 @@ es-to-primitive@^1.3.0:
is-date-object "^1.0.5"
is-symbol "^1.0.4"
+esbuild@^0.21.3:
+ version "0.21.5"
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz"
+ integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.21.5"
+ "@esbuild/android-arm" "0.21.5"
+ "@esbuild/android-arm64" "0.21.5"
+ "@esbuild/android-x64" "0.21.5"
+ "@esbuild/darwin-arm64" "0.21.5"
+ "@esbuild/darwin-x64" "0.21.5"
+ "@esbuild/freebsd-arm64" "0.21.5"
+ "@esbuild/freebsd-x64" "0.21.5"
+ "@esbuild/linux-arm" "0.21.5"
+ "@esbuild/linux-arm64" "0.21.5"
+ "@esbuild/linux-ia32" "0.21.5"
+ "@esbuild/linux-loong64" "0.21.5"
+ "@esbuild/linux-mips64el" "0.21.5"
+ "@esbuild/linux-ppc64" "0.21.5"
+ "@esbuild/linux-riscv64" "0.21.5"
+ "@esbuild/linux-s390x" "0.21.5"
+ "@esbuild/linux-x64" "0.21.5"
+ "@esbuild/netbsd-x64" "0.21.5"
+ "@esbuild/openbsd-x64" "0.21.5"
+ "@esbuild/sunos-x64" "0.21.5"
+ "@esbuild/win32-arm64" "0.21.5"
+ "@esbuild/win32-ia32" "0.21.5"
+ "@esbuild/win32-x64" "0.21.5"
+
esbuild@^0.25.0:
version "0.25.11"
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz"
@@ -498,6 +1118,11 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+estree-walker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
fast-glob@^3.0.3:
version "3.3.3"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz"
@@ -528,6 +1153,13 @@ fill-range@^7.1.1:
dependencies:
to-regex-range "^5.0.1"
+focus-trap@^7, focus-trap@^7.6.4:
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz"
+ integrity sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==
+ dependencies:
+ tabbable "^6.4.0"
+
for-each@^0.3.3, for-each@^0.3.5:
version "0.3.5"
resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz"
@@ -723,11 +1355,45 @@ hasown@^2.0.2:
dependencies:
function-bind "^1.1.2"
+hast-util-to-html@^9.0.4:
+ version "9.0.5"
+ resolved "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz"
+ integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ "@types/unist" "^3.0.0"
+ ccount "^2.0.0"
+ comma-separated-tokens "^2.0.0"
+ hast-util-whitespace "^3.0.0"
+ html-void-elements "^3.0.0"
+ mdast-util-to-hast "^13.0.0"
+ property-information "^7.0.0"
+ space-separated-tokens "^2.0.0"
+ stringify-entities "^4.0.0"
+ zwitch "^2.0.4"
+
+hast-util-whitespace@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz"
+ integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==
+ dependencies:
+ "@types/hast" "^3.0.0"
+
+hookable@^5.5.3:
+ version "5.5.3"
+ resolved "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz"
+ integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==
+
hosted-git-info@^2.1.4:
version "2.8.9"
resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz"
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+html-void-elements@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz"
+ integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==
+
ignore@^5.1.1:
version "5.3.2"
resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
@@ -952,6 +1618,11 @@ is-weakset@^2.0.3:
call-bound "^1.0.3"
get-intrinsic "^1.2.6"
+is-what@^5.2.0:
+ version "5.5.0"
+ resolved "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz"
+ integrity sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==
+
isarray@^2.0.5:
version "2.0.5"
resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz"
@@ -998,11 +1669,38 @@ lru-cache@^10.2.0:
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz"
integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
+magic-string@^0.30.21:
+ version "0.30.21"
+ resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz"
+ integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.5.5"
+
+mark.js@8.11.1:
+ version "8.11.1"
+ resolved "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz"
+ integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
+
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz"
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+mdast-util-to-hast@^13.0.0:
+ version "13.2.1"
+ resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz"
+ integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ "@types/mdast" "^4.0.0"
+ "@ungap/structured-clone" "^1.0.0"
+ devlop "^1.0.0"
+ micromark-util-sanitize-uri "^2.0.0"
+ trim-lines "^3.0.0"
+ unist-util-position "^5.0.0"
+ unist-util-visit "^5.0.0"
+ vfile "^6.0.0"
+
memorystream@^0.3.1:
version "0.3.1"
resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz"
@@ -1013,6 +1711,38 @@ merge2@^1.2.3, merge2@^1.3.0:
resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+micromark-util-character@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz"
+ integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==
+ dependencies:
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-util-encode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz"
+ integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==
+
+micromark-util-sanitize-uri@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz"
+ integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==
+ dependencies:
+ micromark-util-character "^2.0.0"
+ micromark-util-encode "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+
+micromark-util-symbol@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz"
+ integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==
+
+micromark-util-types@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz"
+ integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==
+
micromatch@^4.0.8:
version "4.0.8"
resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz"
@@ -1040,10 +1770,20 @@ minimatch@^9.0.4:
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-nanoid@^3.3.11:
- version "3.3.11"
- resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz"
- integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
+minisearch@^7.1.1:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz"
+ integrity sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==
+
+mitt@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz"
+ integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
+
+nanoid@^3.3.17:
+ version "3.3.18"
+ resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz"
+ integrity sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==
nice-try@^1.0.4:
version "1.0.5"
@@ -1104,6 +1844,15 @@ once@^1.3.0:
dependencies:
wrappy "1"
+oniguruma-to-es@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz"
+ integrity sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==
+ dependencies:
+ emoji-regex-xs "^1.0.0"
+ regex "^6.0.1"
+ regex-recursion "^6.0.2"
+
own-keys@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz"
@@ -1166,6 +1915,11 @@ path-type@^4.0.0:
resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+perfect-debounce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz"
+ integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==
+
picocolors@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
@@ -1196,15 +1950,25 @@ possible-typed-array-names@^1.0.0:
resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz"
integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==
-postcss@^8.5.6:
- version "8.5.6"
- resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz"
- integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
+postcss@^8, postcss@^8.4.43, postcss@^8.5.19, postcss@^8.5.6:
+ version "8.5.26"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz"
+ integrity sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==
dependencies:
- nanoid "^3.3.11"
+ nanoid "^3.3.17"
picocolors "^1.1.1"
source-map-js "^1.2.1"
+preact@^10.0.0:
+ version "10.29.8"
+ resolved "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz"
+ integrity sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==
+
+property-information@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz"
+ integrity sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==
+
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
@@ -1233,6 +1997,25 @@ reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
get-proto "^1.0.1"
which-builtin-type "^1.2.1"
+regex-recursion@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz"
+ integrity sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==
+ dependencies:
+ regex-utilities "^2.3.0"
+
+regex-utilities@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz"
+ integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==
+
+regex@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz"
+ integrity sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==
+ dependencies:
+ regex-utilities "^2.3.0"
+
regexp.prototype.flags@^1.5.4:
version "1.5.4"
resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz"
@@ -1259,6 +2042,11 @@ reusify@^1.0.4:
resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz"
integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
+rfdc@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz"
+ integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
+
rimraf@^5.0.1:
version "5.0.10"
resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz"
@@ -1277,7 +2065,7 @@ rollup-plugin-copy@^3.5.0:
globby "10.0.1"
is-plain-object "^3.0.0"
-rollup@^4.43.0:
+rollup@^4.20.0, rollup@^4.43.0:
version "4.46.2"
resolved "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz"
integrity sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==
@@ -1341,6 +2129,11 @@ safe-regex-test@^1.1.0:
es-errors "^1.3.0"
is-regex "^1.2.1"
+"search-insights@>= 1 < 3":
+ version "2.17.3"
+ resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz"
+ integrity sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==
+
semver@^5.5.0, "semver@2 || 3 || 4 || 5":
version "5.7.2"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
@@ -1406,6 +2199,20 @@ shell-quote@^1.6.1:
resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz"
integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==
+shiki@^2.1.0:
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz"
+ integrity sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==
+ dependencies:
+ "@shikijs/core" "2.5.0"
+ "@shikijs/engine-javascript" "2.5.0"
+ "@shikijs/engine-oniguruma" "2.5.0"
+ "@shikijs/langs" "2.5.0"
+ "@shikijs/themes" "2.5.0"
+ "@shikijs/types" "2.5.0"
+ "@shikijs/vscode-textmate" "^10.0.2"
+ "@types/hast" "^3.0.4"
+
side-channel-list@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz"
@@ -1461,6 +2268,11 @@ source-map-js@^1.2.1:
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
+space-separated-tokens@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz"
+ integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==
+
spdx-correct@^3.0.0:
version "3.2.0"
resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz"
@@ -1487,6 +2299,11 @@ spdx-license-ids@^3.0.0:
resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz"
integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==
+speakingurl@^14.0.1:
+ version "14.0.1"
+ resolved "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz"
+ integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==
+
stop-iteration-iterator@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz"
@@ -1564,6 +2381,14 @@ string.prototype.trimstart@^1.0.8:
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
+stringify-entities@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz"
+ integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==
+ dependencies:
+ character-entities-html4 "^2.0.0"
+ character-entities-legacy "^3.0.0"
+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
@@ -1590,6 +2415,13 @@ strip-bom@^3.0.0:
resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+superjson@^2.2.2:
+ version "2.2.6"
+ resolved "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz"
+ integrity sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==
+ dependencies:
+ copy-anything "^4"
+
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
@@ -1602,6 +2434,11 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+tabbable@^6.4.0:
+ version "6.5.0"
+ resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz"
+ integrity sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==
+
tinyglobby@^0.2.15:
version "0.2.15"
resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz"
@@ -1617,6 +2454,11 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+trim-lines@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz"
+ integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==
+
typed-array-buffer@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz"
@@ -1677,6 +2519,44 @@ undici-types@~7.8.0:
resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz"
integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==
+unist-util-is@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz"
+ integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==
+ dependencies:
+ "@types/unist" "^3.0.0"
+
+unist-util-position@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz"
+ integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==
+ dependencies:
+ "@types/unist" "^3.0.0"
+
+unist-util-stringify-position@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz"
+ integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==
+ dependencies:
+ "@types/unist" "^3.0.0"
+
+unist-util-visit-parents@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz"
+ integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ unist-util-is "^6.0.0"
+
+unist-util-visit@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz"
+ integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ unist-util-is "^6.0.0"
+ unist-util-visit-parents "^6.0.0"
+
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
@@ -1690,6 +2570,22 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
+vfile-message@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz"
+ integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ unist-util-stringify-position "^4.0.0"
+
+vfile@^6.0.0:
+ version "6.0.3"
+ resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz"
+ integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ vfile-message "^4.0.0"
+
vite-plugin-rsw@^2.0.11:
version "2.0.11"
resolved "https://registry.npmjs.org/vite-plugin-rsw/-/vite-plugin-rsw-2.0.11.tgz"
@@ -1714,6 +2610,52 @@ vite-plugin-wasm@^3.3.0:
optionalDependencies:
fsevents "~2.3.3"
+"vite@^5.0.0 || ^6.0.0", vite@^5.4.14:
+ version "5.4.21"
+ resolved "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz"
+ integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==
+ dependencies:
+ esbuild "^0.21.3"
+ postcss "^8.4.43"
+ rollup "^4.20.0"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+vitepress@^1.6.4:
+ version "1.6.4"
+ resolved "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz"
+ integrity sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==
+ dependencies:
+ "@docsearch/css" "3.8.2"
+ "@docsearch/js" "3.8.2"
+ "@iconify-json/simple-icons" "^1.2.21"
+ "@shikijs/core" "^2.1.0"
+ "@shikijs/transformers" "^2.1.0"
+ "@shikijs/types" "^2.1.0"
+ "@types/markdown-it" "^14.1.2"
+ "@vitejs/plugin-vue" "^5.2.1"
+ "@vue/devtools-api" "^7.7.0"
+ "@vue/shared" "^3.5.13"
+ "@vueuse/core" "^12.4.0"
+ "@vueuse/integrations" "^12.4.0"
+ focus-trap "^7.6.4"
+ mark.js "8.11.1"
+ minisearch "^7.1.1"
+ shiki "^2.1.0"
+ vite "^5.4.14"
+ vue "^3.5.13"
+
+vue@^3.2.25, vue@^3.5.13:
+ version "3.5.41"
+ resolved "https://registry.npmjs.org/vue/-/vue-3.5.41.tgz"
+ integrity sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg==
+ dependencies:
+ "@vue/compiler-dom" "3.5.41"
+ "@vue/compiler-sfc" "3.5.41"
+ "@vue/runtime-dom" "3.5.41"
+ "@vue/server-renderer" "3.5.41"
+ "@vue/shared" "3.5.41"
+
watchpack@^2.1.1:
version "2.4.4"
resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz"
@@ -1811,3 +2753,8 @@ wrappy@1:
version "1.0.2"
resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+zwitch@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz"
+ integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==