diff --git a/.changeset/config.json b/.changeset/config.json
index 02c1fb0..61ab931 100644
--- a/.changeset/config.json
+++ b/.changeset/config.json
@@ -2,7 +2,10 @@
"$schema": "https://unpkg.com/@changesets/config@3.1.2/schema.json",
"changelog": ["@changesets/changelog-github", { "repo": "oxa-dev/oxa" }],
"commit": false,
- "fixed": [["@oxa/core", "oxa"]],
+ "fixed": [
+ ["@oxa/core", "oxa"],
+ ["@oxa/demo", "@oxa/react"]
+ ],
"linked": [],
"access": "public",
"baseBranch": "main",
diff --git a/.changeset/light-glasses-drum.md b/.changeset/light-glasses-drum.md
new file mode 100644
index 0000000..7bdd637
--- /dev/null
+++ b/.changeset/light-glasses-drum.md
@@ -0,0 +1,6 @@
+---
+"@oxa/react": patch
+"@oxa/demo": patch
+---
+
+Initial release of demo and react libraries for oxa
diff --git a/.claude/launch.json b/.claude/launch.json
new file mode 100644
index 0000000..995ac68
--- /dev/null
+++ b/.claude/launch.json
@@ -0,0 +1,11 @@
+{
+ "version": "0.0.1",
+ "configurations": [
+ {
+ "name": "demo",
+ "runtimeExecutable": "pnpm",
+ "runtimeArgs": ["--filter", "@oxa/demo", "dev"],
+ "port": 5173
+ }
+ ]
+}
diff --git a/docs/index.md b/docs/index.md
index 8803d6e..91b9fac 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -18,6 +18,9 @@ A foundation for interoperable, structured scientific content.
The **Open Exchange Architecture (OXA)** is a specification for representing scientific documents and their components as structured JSON objects.
It’s designed to enable **exchange, interoperability, and long-term preservation** of scientific knowledge, while remaining compatible with modern web and data standards.
+:::{anywidget} https://cdn.jsdelivr.net/npm/@oxa/demo/dist/anywidget.js
+:::
+
OXA provides schemas and examples for representing:
- Executable and interactive research components
diff --git a/packages/oxa-demo/index.html b/packages/oxa-demo/index.html
new file mode 100644
index 0000000..547172b
--- /dev/null
+++ b/packages/oxa-demo/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ OXA Demo
+
+
+
+
+
+
diff --git a/packages/oxa-demo/package.json b/packages/oxa-demo/package.json
new file mode 100644
index 0000000..9f1b570
--- /dev/null
+++ b/packages/oxa-demo/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "@oxa/demo",
+ "version": "0.1.0",
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
+ },
+ "./anywidget": "./dist/anywidget.js"
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build && vite build --config vite.config.anywidget.ts",
+ "build:lib": "vite build",
+ "build:anywidget": "vite build --config vite.config.anywidget.ts",
+ "typecheck": "tsc --noEmit",
+ "clean": "rm -rf dist"
+ },
+ "dependencies": {
+ "@codemirror/lang-json": "^6.0.1",
+ "@codemirror/lang-yaml": "^6.1.2",
+ "@codemirror/language": "^6.11.0",
+ "@oxa/core": "workspace:*",
+ "@oxa/react": "workspace:*",
+ "@uiw/react-codemirror": "^4.23.10",
+ "codemirror": "^6.0.1",
+ "js-yaml": "^4.1.0",
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0"
+ },
+ "devDependencies": {
+ "@codemirror/state": "^6.6.0",
+ "@tailwindcss/vite": "^4.1.10",
+ "@types/js-yaml": "^4.0.9",
+ "@types/react": "^19.1.8",
+ "@types/react-dom": "^19.1.6",
+ "@vitejs/plugin-react": "^4.5.2",
+ "tailwindcss": "^4.1.10",
+ "vite": "^6.3.5",
+ "vite-plugin-dts": "^4.5.4"
+ }
+}
diff --git a/packages/oxa-demo/src/App.tsx b/packages/oxa-demo/src/App.tsx
new file mode 100644
index 0000000..0a7eb78
--- /dev/null
+++ b/packages/oxa-demo/src/App.tsx
@@ -0,0 +1,132 @@
+import { useState, useMemo, useCallback } from "react";
+import yaml from "js-yaml";
+import { Editor } from "./components/Editor";
+import { FormatToggle, type Format } from "./components/FormatToggle";
+import { ExamplePicker } from "./components/ExamplePicker";
+import { TabBar, type Tab } from "./components/TabBar";
+import { DemoView } from "./components/DemoView";
+import { AtprotoView } from "./components/AtprotoView";
+import { ValidationBadge } from "./components/ValidationBadge";
+import { validate } from "./validate";
+import { examples } from "./examples";
+
+interface AppProps {
+ initialExample?: string;
+ fullscreen?: boolean;
+}
+
+function serializeDocument(
+ doc: Record,
+ format: Format,
+): string {
+ if (format === "json") {
+ return JSON.stringify(doc, null, 2);
+ }
+ return yaml.dump(doc, { indent: 2, lineWidth: 80, noRefs: true });
+}
+
+function convertFormat(
+ source: string,
+ from: Format,
+ to: Format,
+): string | null {
+ try {
+ const parsed =
+ from === "json"
+ ? JSON.parse(source)
+ : (yaml.load(source) as Record);
+ return serializeDocument(parsed, to);
+ } catch {
+ return null;
+ }
+}
+
+export function App({
+ initialExample = "rfc0003",
+ fullscreen = false,
+}: AppProps) {
+ const initialDoc =
+ examples.find((e) => e.id === initialExample) ?? examples[0];
+
+ const [source, setSource] = useState(() =>
+ serializeDocument(initialDoc.document, "json"),
+ );
+ const [format, setFormat] = useState("json");
+ const [activeTab, setActiveTab] = useState("demo");
+ const [selectedExample, setSelectedExample] = useState(initialDoc.id);
+
+ const validation = useMemo(() => validate(source, format), [source, format]);
+
+ const handleFormatChange = useCallback(
+ (newFormat: Format) => {
+ if (newFormat === format) return;
+ const converted = convertFormat(source, format, newFormat);
+ if (converted !== null) {
+ setSource(converted);
+ setFormat(newFormat);
+ }
+ },
+ [source, format],
+ );
+
+ const handleExampleChange = useCallback(
+ (id: string) => {
+ const example = examples.find((e) => e.id === id);
+ if (!example) return;
+ setSelectedExample(id);
+ setSource(serializeDocument(example.document, format));
+ },
+ [format],
+ );
+
+ const outerClass = fullscreen
+ ? "flex flex-col w-full h-full border border-slate-200 rounded-xl overflow-hidden bg-white shadow-sm"
+ : "flex flex-col h-[500px] border border-slate-200 rounded-xl overflow-hidden bg-white shadow-sm";
+
+ return (
+
+ {/* Toolbar */}
+
+
+ {/* Validation errors */}
+ {!validation.valid &&
+ validation.errors &&
+ validation.errors.length > 0 && (
+
+ {validation.errors.map((error, i) => (
+
+ {error}
+
+ ))}
+
+ )}
+
+ {/* Split panels */}
+
+ {/* Left: Editor */}
+
+
+
+
+ {/* Right: Output */}
+
+ {activeTab === "demo" ? (
+
+ ) : (
+
+ )}
+
+
+
+ );
+}
diff --git a/packages/oxa-demo/src/anywidget.tsx b/packages/oxa-demo/src/anywidget.tsx
new file mode 100644
index 0000000..263d8a6
--- /dev/null
+++ b/packages/oxa-demo/src/anywidget.tsx
@@ -0,0 +1,30 @@
+import { createRoot } from "react-dom/client";
+import { App } from "./App";
+import cssText from "./styles.css?inline";
+
+interface AnywidgetModel {
+ get(key: string): unknown;
+ set(key: string, value: unknown): void;
+ on(event: string, callback: () => void): void;
+}
+
+function render({ model, el }: { model: AnywidgetModel; el: HTMLElement }) {
+ // Inject Tailwind styles into the widget container
+ const style = document.createElement("style");
+ style.textContent = cssText;
+ el.appendChild(style);
+
+ const container = document.createElement("div");
+ el.appendChild(container);
+
+ const initialExample =
+ (model.get("example") as string | undefined) ?? "rfc0003";
+ const fullscreen = (model.get("fullscreen") as boolean | undefined) ?? false;
+
+ const root = createRoot(container);
+ root.render();
+
+ return () => root.unmount();
+}
+
+export default { render };
diff --git a/packages/oxa-demo/src/components/AtprotoView.tsx b/packages/oxa-demo/src/components/AtprotoView.tsx
new file mode 100644
index 0000000..b9d8ddb
--- /dev/null
+++ b/packages/oxa-demo/src/components/AtprotoView.tsx
@@ -0,0 +1,50 @@
+import { useMemo } from "react";
+import yaml from "js-yaml";
+import { oxaToAtproto, type Document, type Session } from "@oxa/core";
+import { Editor } from "./Editor";
+
+const session: Session = { log: console };
+
+interface AtprotoViewProps {
+ source: string;
+ format: "json" | "yaml";
+}
+
+export function AtprotoView({ source, format }: AtprotoViewProps) {
+ const result = useMemo(() => {
+ try {
+ const parsed =
+ format === "json"
+ ? JSON.parse(source)
+ : (yaml.load(source) as Record);
+
+ if (!parsed || parsed.type !== "Document") {
+ return {
+ error: "Source must be a Document node (type: 'Document').",
+ };
+ }
+
+ const atproto = oxaToAtproto(session, parsed as Document);
+ return { data: JSON.stringify(atproto, null, 2) };
+ } catch (e) {
+ return { error: String(e) };
+ }
+ }, [source, format]);
+
+ if (result.error) {
+ return (
+
+ {result.error}
+
+ );
+ }
+
+ return (
+ {}}
+ format="json"
+ readOnly
+ />
+ );
+}
diff --git a/packages/oxa-demo/src/components/DemoView.tsx b/packages/oxa-demo/src/components/DemoView.tsx
new file mode 100644
index 0000000..2731dd4
--- /dev/null
+++ b/packages/oxa-demo/src/components/DemoView.tsx
@@ -0,0 +1,44 @@
+import { useMemo } from "react";
+import yaml from "js-yaml";
+import { OxaProvider, OXA, defaultRenderers } from "@oxa/react";
+import type { OxaNode } from "@oxa/react";
+
+interface DemoViewProps {
+ source: string;
+ format: "json" | "yaml";
+}
+
+export function DemoView({ source, format }: DemoViewProps) {
+ const parsed = useMemo(() => {
+ try {
+ const data =
+ format === "json"
+ ? JSON.parse(source)
+ : (yaml.load(source) as Record);
+
+ if (!data || typeof data !== "object" || !("type" in data)) {
+ return { error: "Source must have a 'type' field." };
+ }
+
+ return { node: data as OxaNode };
+ } catch (e) {
+ return { error: String(e) };
+ }
+ }, [source, format]);
+
+ if (parsed.error) {
+ return (
+
+ {parsed.error}
+
+ );
+ }
+
+ return (
+
+
+
+
+
+ );
+}
diff --git a/packages/oxa-demo/src/components/Editor.tsx b/packages/oxa-demo/src/components/Editor.tsx
new file mode 100644
index 0000000..44215db
--- /dev/null
+++ b/packages/oxa-demo/src/components/Editor.tsx
@@ -0,0 +1,51 @@
+import { useMemo } from "react";
+import CodeMirror from "@uiw/react-codemirror";
+import { json } from "@codemirror/lang-json";
+import { yaml } from "@codemirror/lang-yaml";
+import { foldGutter } from "@codemirror/language";
+import type { Extension } from "@codemirror/state";
+
+interface EditorProps {
+ value: string;
+ onChange: (value: string) => void;
+ format?: "json" | "yaml";
+ readOnly?: boolean;
+}
+
+export function Editor({
+ value,
+ onChange,
+ format = "json",
+ readOnly = false,
+}: EditorProps) {
+ const extensions = useMemo(() => {
+ const exts: Extension[] = [foldGutter()];
+ if (format === "json") {
+ exts.push(json());
+ } else {
+ exts.push(yaml());
+ }
+ return exts;
+ }, [format]);
+
+ return (
+
+ );
+}
diff --git a/packages/oxa-demo/src/components/ExamplePicker.tsx b/packages/oxa-demo/src/components/ExamplePicker.tsx
new file mode 100644
index 0000000..b237d95
--- /dev/null
+++ b/packages/oxa-demo/src/components/ExamplePicker.tsx
@@ -0,0 +1,22 @@
+import { examples } from "../examples";
+
+interface ExamplePickerProps {
+ selected: string;
+ onChange: (id: string) => void;
+}
+
+export function ExamplePicker({ selected, onChange }: ExamplePickerProps) {
+ return (
+
+ );
+}
diff --git a/packages/oxa-demo/src/components/FormatToggle.tsx b/packages/oxa-demo/src/components/FormatToggle.tsx
new file mode 100644
index 0000000..27e3583
--- /dev/null
+++ b/packages/oxa-demo/src/components/FormatToggle.tsx
@@ -0,0 +1,33 @@
+export type Format = "json" | "yaml";
+
+interface FormatToggleProps {
+ format: Format;
+ onChange: (format: Format) => void;
+}
+
+export function FormatToggle({ format, onChange }: FormatToggleProps) {
+ return (
+
+
+
+
+ );
+}
diff --git a/packages/oxa-demo/src/components/TabBar.tsx b/packages/oxa-demo/src/components/TabBar.tsx
new file mode 100644
index 0000000..1914f45
--- /dev/null
+++ b/packages/oxa-demo/src/components/TabBar.tsx
@@ -0,0 +1,33 @@
+export type Tab = "demo" | "atproto";
+
+interface TabBarProps {
+ active: Tab;
+ onChange: (tab: Tab) => void;
+}
+
+const tabs: { id: Tab; label: string }[] = [
+ { id: "demo", label: "DEMO" },
+ { id: "atproto", label: "ATProto" },
+];
+
+export function TabBar({ active, onChange }: TabBarProps) {
+ return (
+
+ {tabs.map((tab, i) => (
+
+ ))}
+
+ );
+}
diff --git a/packages/oxa-demo/src/components/ValidationBadge.tsx b/packages/oxa-demo/src/components/ValidationBadge.tsx
new file mode 100644
index 0000000..2b49aa3
--- /dev/null
+++ b/packages/oxa-demo/src/components/ValidationBadge.tsx
@@ -0,0 +1,29 @@
+interface ValidationBadgeProps {
+ valid: boolean;
+ errors?: string[];
+}
+
+export function ValidationBadge({ valid, errors }: ValidationBadgeProps) {
+ if (valid) {
+ return (
+
+
+ Valid
+
+ );
+ }
+
+ return (
+
+
+ Invalid
+
+ );
+}
diff --git a/packages/oxa-demo/src/examples.ts b/packages/oxa-demo/src/examples.ts
new file mode 100644
index 0000000..d12f8fb
--- /dev/null
+++ b/packages/oxa-demo/src/examples.ts
@@ -0,0 +1,171 @@
+export interface Example {
+ id: string;
+ label: string;
+ document: Record;
+}
+
+export const examples: Example[] = [
+ {
+ id: "hello-world",
+ label: "Hello World",
+ document: {
+ type: "Document",
+ children: [
+ {
+ type: "Paragraph",
+ children: [{ type: "Text", value: "Hello, world!" }],
+ },
+ ],
+ },
+ },
+ {
+ id: "heading-and-code",
+ label: "Heading + Code",
+ document: {
+ type: "Document",
+ title: [{ type: "Text", value: "Quick Start" }],
+ children: [
+ {
+ type: "Heading",
+ level: 1,
+ children: [{ type: "Text", value: "Getting Started" }],
+ },
+ {
+ type: "Paragraph",
+ children: [
+ { type: "Text", value: "Install the package with " },
+ { type: "InlineCode", value: "npm install oxa" },
+ { type: "Text", value: "." },
+ ],
+ },
+ {
+ type: "Code",
+ language: "bash",
+ value: "npm install oxa",
+ },
+ { type: "ThematicBreak" },
+ {
+ type: "Paragraph",
+ children: [
+ {
+ type: "Emphasis",
+ children: [{ type: "Text", value: "That's it!" }],
+ },
+ ],
+ },
+ ],
+ },
+ },
+ {
+ id: "rfc0003",
+ label: "RFC0003 — Simple Node Types",
+ document: {
+ type: "Document",
+ title: [
+ { type: "Text", value: "Water Dissociation: H" },
+ {
+ type: "Subscript",
+ children: [{ type: "Text", value: "2" }],
+ },
+ { type: "Text", value: "O → H" },
+ {
+ type: "Superscript",
+ children: [{ type: "Text", value: "+" }],
+ },
+ { type: "Text", value: " + OH" },
+ {
+ type: "Superscript",
+ children: [{ type: "Text", value: "−" }],
+ },
+ ],
+ children: [
+ {
+ type: "Heading",
+ level: 1,
+ children: [{ type: "Text", value: "Introduction" }],
+ },
+ {
+ type: "Paragraph",
+ children: [
+ { type: "Text", value: "Water (H" },
+ {
+ type: "Subscript",
+ children: [{ type: "Text", value: "2" }],
+ },
+ { type: "Text", value: "O) undergoes " },
+ {
+ type: "Strong",
+ children: [{ type: "Text", value: "autoionization" }],
+ },
+ {
+ type: "Text",
+ value:
+ ", a process in which a water molecule donates a proton to another. The equilibrium constant for this reaction, ",
+ },
+ {
+ type: "Emphasis",
+ children: [
+ { type: "Text", value: "K" },
+ {
+ type: "Subscript",
+ children: [{ type: "Text", value: "w" }],
+ },
+ ],
+ },
+ { type: "Text", value: ", is approximately 10" },
+ {
+ type: "Superscript",
+ children: [{ type: "Text", value: "−14" }],
+ },
+ { type: "Text", value: " at 25 °C." },
+ ],
+ },
+ { type: "ThematicBreak" },
+ {
+ type: "Heading",
+ level: 2,
+ children: [{ type: "Text", value: "Computing the Equilibrium" }],
+ },
+ {
+ type: "Paragraph",
+ children: [
+ {
+ type: "Text",
+ value: "The following Python snippet computes ",
+ },
+ { type: "InlineCode", value: "Kw" },
+ { type: "Text", value: " from ion concentrations:" },
+ ],
+ },
+ {
+ type: "Code",
+ language: "python",
+ value:
+ 'H_plus = 1e-7 # mol/L\nOH_minus = 1e-7 # mol/L\nKw = H_plus * OH_minus\nprint(f"Kw = {Kw:.2e}") # Kw = 1.00e-14',
+ },
+ {
+ type: "Paragraph",
+ children: [
+ { type: "Text", value: "You can run this with " },
+ { type: "InlineCode", value: "python kw.py" },
+ {
+ type: "Text",
+ value: ". The result confirms the well-known value of ",
+ },
+ {
+ type: "Emphasis",
+ children: [
+ { type: "Text", value: "K" },
+ {
+ type: "Subscript",
+ children: [{ type: "Text", value: "w" }],
+ },
+ ],
+ },
+ { type: "Text", value: "." },
+ ],
+ },
+ ],
+ },
+ },
+];
diff --git a/packages/oxa-demo/src/index.tsx b/packages/oxa-demo/src/index.tsx
new file mode 100644
index 0000000..d8ad1bb
--- /dev/null
+++ b/packages/oxa-demo/src/index.tsx
@@ -0,0 +1,3 @@
+export { App } from "./App";
+export type { Format } from "./components/FormatToggle";
+export type { Tab } from "./components/TabBar";
diff --git a/packages/oxa-demo/src/main.tsx b/packages/oxa-demo/src/main.tsx
new file mode 100644
index 0000000..9224d2d
--- /dev/null
+++ b/packages/oxa-demo/src/main.tsx
@@ -0,0 +1,5 @@
+import { createRoot } from "react-dom/client";
+import { App } from "./App";
+import "./styles.css";
+
+createRoot(document.getElementById("root")!).render();
diff --git a/packages/oxa-demo/src/styles.css b/packages/oxa-demo/src/styles.css
new file mode 100644
index 0000000..8807bc6
--- /dev/null
+++ b/packages/oxa-demo/src/styles.css
@@ -0,0 +1,2 @@
+@import "tailwindcss";
+@source "../node_modules/@oxa/react/dist";
diff --git a/packages/oxa-demo/src/validate.ts b/packages/oxa-demo/src/validate.ts
new file mode 100644
index 0000000..881a5ca
--- /dev/null
+++ b/packages/oxa-demo/src/validate.ts
@@ -0,0 +1,34 @@
+import yaml from "js-yaml";
+import {
+ validate as oxaValidate,
+ validateJson as oxaValidateJson,
+ type ValidationResult as OxaValidationResult,
+} from "@oxa/core";
+
+export interface ValidationResult {
+ valid: boolean;
+ errors?: string[];
+}
+
+function fromOxaResult(result: OxaValidationResult): ValidationResult {
+ if (result.valid) return { valid: true };
+ return {
+ valid: false,
+ errors: result.errors.map((e) => e.message),
+ };
+}
+
+export function validate(
+ source: string,
+ format: "json" | "yaml",
+): ValidationResult {
+ try {
+ if (format === "json") {
+ return fromOxaResult(oxaValidateJson(source));
+ }
+ const data = yaml.load(source);
+ return fromOxaResult(oxaValidate(data));
+ } catch (e) {
+ return { valid: false, errors: [String(e)] };
+ }
+}
diff --git a/packages/oxa-demo/src/vite-env.d.ts b/packages/oxa-demo/src/vite-env.d.ts
new file mode 100644
index 0000000..9b01cd6
--- /dev/null
+++ b/packages/oxa-demo/src/vite-env.d.ts
@@ -0,0 +1,6 @@
+///
+
+declare module "*.css?inline" {
+ const css: string;
+ export default css;
+}
diff --git a/packages/oxa-demo/tsconfig.json b/packages/oxa-demo/tsconfig.json
new file mode 100644
index 0000000..4b48588
--- /dev/null
+++ b/packages/oxa-demo/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "jsx": "react-jsx",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "outDir": "./dist",
+ "rootDir": "./src",
+ "declaration": true,
+ "noEmit": false
+ },
+ "include": ["src"],
+ "exclude": ["dist"]
+}
diff --git a/packages/oxa-demo/vite.config.anywidget.ts b/packages/oxa-demo/vite.config.anywidget.ts
new file mode 100644
index 0000000..38e1a5f
--- /dev/null
+++ b/packages/oxa-demo/vite.config.anywidget.ts
@@ -0,0 +1,23 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import tailwindcss from "@tailwindcss/vite";
+
+export default defineConfig({
+ plugins: [react(), tailwindcss()],
+ define: {
+ "process.env.NODE_ENV": '"production"',
+ },
+ build: {
+ lib: {
+ entry: "src/anywidget.tsx",
+ formats: ["es"],
+ fileName: "anywidget",
+ },
+ // Bundle everything for anywidget (self-contained)
+ rollupOptions: {
+ external: [],
+ },
+ outDir: "dist",
+ emptyOutDir: false,
+ },
+});
diff --git a/packages/oxa-demo/vite.config.ts b/packages/oxa-demo/vite.config.ts
new file mode 100644
index 0000000..98f8ec2
--- /dev/null
+++ b/packages/oxa-demo/vite.config.ts
@@ -0,0 +1,18 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import tailwindcss from "@tailwindcss/vite";
+import dts from "vite-plugin-dts";
+
+export default defineConfig({
+ plugins: [react(), tailwindcss(), dts({ include: ["src/index.tsx"] })],
+ build: {
+ lib: {
+ entry: "src/index.tsx",
+ formats: ["es"],
+ fileName: "index",
+ },
+ rollupOptions: {
+ external: ["react", "react-dom", "react/jsx-runtime"],
+ },
+ },
+});
diff --git a/packages/oxa-react/README.md b/packages/oxa-react/README.md
new file mode 100644
index 0000000..0187a6c
--- /dev/null
+++ b/packages/oxa-react/README.md
@@ -0,0 +1,81 @@
+# @oxa/react
+
+React components for rendering [OXA](https://oxa.dev) documents.
+
+## Installation
+
+```bash
+npm install @oxa/react
+```
+
+## Usage
+
+```tsx
+import { OxaProvider, OXA, defaultRenderers } from "@oxa/react";
+
+const document = {
+ type: "Document",
+ children: [
+ {
+ type: "Paragraph",
+ children: [{ type: "Text", value: "Hello, world!" }],
+ },
+ ],
+};
+
+function App() {
+ return (
+
+
+
+ );
+}
+```
+
+## Adding Styles
+
+This package uses [Tailwind CSS](https://tailwindcss.com/) for default styling. To include the styles in your application, add `@oxa/react` as a source in your CSS:
+
+```css
+@import "tailwindcss";
+@source "../node_modules/@oxa/react/dist";
+```
+
+The `@source` directive tells Tailwind v4 to scan the package's dist files for class names. See the [Tailwind CSS docs on content configuration](https://tailwindcss.com/docs/content-configuration) for more details.
+
+## Custom Renderers
+
+You can override any node renderer by passing a `renderers` prop to ``:
+
+```tsx
+import { OxaProvider, OXA } from "@oxa/react";
+import type { OxaNode } from "@oxa/react";
+
+function CustomHeading({ node }: { node: OxaNode & { level?: number } }) {
+ return {node.children?.map(/* ... */)}
;
+}
+
+function App() {
+ return (
+
+
+
+ );
+}
+```
+
+Custom renderers are merged with the defaults — you only need to provide the ones you want to override.
+
+## Merging Renderers
+
+Use `mergeRenderers` to combine multiple renderer sets:
+
+```tsx
+import { mergeRenderers, defaultRenderers } from "@oxa/react";
+
+const myRenderers = mergeRenderers([defaultRenderers, customRenderers]);
+```
+
+Renderers later in the array take precedence.
+
+> This package was inspired by the [`myst-to-react`](https://github.com/jupyter-book/mystmd/tree/main/packages/myst-to-react) package.
diff --git a/packages/oxa-react/package.json b/packages/oxa-react/package.json
new file mode 100644
index 0000000..de2b41a
--- /dev/null
+++ b/packages/oxa-react/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "@oxa/react",
+ "version": "0.1.0",
+ "description": "React components for rendering OXA documents",
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
+ }
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "typecheck": "tsc --noEmit",
+ "clean": "rm -rf dist"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ },
+ "dependencies": {
+ "oxa-types": "workspace:*"
+ },
+ "devDependencies": {
+ "@tailwindcss/vite": "^4.1.10",
+ "@types/react": "^19.1.8",
+ "@types/react-dom": "^19.1.6",
+ "@vitejs/plugin-react": "^4.5.2",
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0",
+ "tailwindcss": "^4.1.10",
+ "vite": "^6.3.5",
+ "vite-plugin-dts": "^4.5.4"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/oxa-dev/oxa.git",
+ "directory": "packages/oxa-react"
+ }
+}
diff --git a/packages/oxa-react/src/context.tsx b/packages/oxa-react/src/context.tsx
new file mode 100644
index 0000000..53e18e2
--- /dev/null
+++ b/packages/oxa-react/src/context.tsx
@@ -0,0 +1,32 @@
+import { createContext, useContext, useMemo } from "react";
+import type { NodeRenderers, NodeRenderersValidated } from "./types";
+import { mergeRenderers } from "./renderers";
+
+const OxaContext = createContext<{
+ renderers: NodeRenderersValidated;
+}>({
+ renderers: {} as NodeRenderersValidated,
+});
+
+export function useNodeRenderers(): NodeRenderersValidated {
+ return useContext(OxaContext).renderers;
+}
+
+export function OxaProvider({
+ children,
+ renderers,
+}: {
+ children: React.ReactNode;
+ renderers?: NodeRenderers | NodeRenderers[];
+}) {
+ const validatedRenderers = useMemo(
+ () => mergeRenderers(renderers, true),
+ [renderers],
+ );
+
+ return (
+
+ {children}
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Code.tsx b/packages/oxa-react/src/defaults/Code.tsx
new file mode 100644
index 0000000..cc14c53
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Code.tsx
@@ -0,0 +1,23 @@
+import type { OxaNode } from "../types";
+
+export function CodeRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode & { language?: string };
+ className?: string;
+}) {
+ return (
+
+
+ {node.value}
+
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Document.tsx b/packages/oxa-react/src/defaults/Document.tsx
new file mode 100644
index 0000000..a5d0929
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Document.tsx
@@ -0,0 +1,23 @@
+import type { OxaNode } from "../types";
+import { OXA } from "../oxa";
+
+export function DocumentRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ return (
+
+ {Array.isArray(node.title) && (
+
+ )}
+
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Emphasis.tsx b/packages/oxa-react/src/defaults/Emphasis.tsx
new file mode 100644
index 0000000..91c246d
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Emphasis.tsx
@@ -0,0 +1,16 @@
+import type { OxaNode } from "../types";
+import { OXA } from "../oxa";
+
+export function EmphasisRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ return (
+
+
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Heading.tsx b/packages/oxa-react/src/defaults/Heading.tsx
new file mode 100644
index 0000000..33865af
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Heading.tsx
@@ -0,0 +1,32 @@
+import type { OxaNode } from "../types";
+import { OXA } from "../oxa";
+
+const headingClasses: Record = {
+ 1: "text-3xl font-bold mt-6 mb-3",
+ 2: "text-2xl font-bold mt-5 mb-2",
+ 3: "text-xl font-semibold mt-4 mb-2",
+ 4: "text-lg font-semibold mt-3 mb-1",
+ 5: "text-base font-semibold mt-2 mb-1",
+ 6: "text-sm font-semibold mt-2 mb-1",
+};
+
+export function HeadingRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode & { level?: number };
+ className?: string;
+}) {
+ const level = Math.min(Math.max(node.level ?? 1, 1), 6) as 1 | 2 | 3 | 4 | 5 | 6;
+ const classes = [headingClasses[level], className].filter(Boolean).join(" ");
+ const content = ;
+
+ switch (level) {
+ case 1: return {content}
;
+ case 2: return {content}
;
+ case 3: return {content}
;
+ case 4: return {content}
;
+ case 5: return {content}
;
+ case 6: return {content}
;
+ }
+}
diff --git a/packages/oxa-react/src/defaults/InlineCode.tsx b/packages/oxa-react/src/defaults/InlineCode.tsx
new file mode 100644
index 0000000..9b7b3f7
--- /dev/null
+++ b/packages/oxa-react/src/defaults/InlineCode.tsx
@@ -0,0 +1,20 @@
+import type { OxaNode } from "../types";
+
+export function InlineCodeRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ return (
+
+ {node.value}
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Paragraph.tsx b/packages/oxa-react/src/defaults/Paragraph.tsx
new file mode 100644
index 0000000..0f3bd6f
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Paragraph.tsx
@@ -0,0 +1,16 @@
+import type { OxaNode } from "../types";
+import { OXA } from "../oxa";
+
+export function ParagraphRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ return (
+
+
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Strong.tsx b/packages/oxa-react/src/defaults/Strong.tsx
new file mode 100644
index 0000000..ef8e331
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Strong.tsx
@@ -0,0 +1,16 @@
+import type { OxaNode } from "../types";
+import { OXA } from "../oxa";
+
+export function StrongRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ return (
+
+
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Subscript.tsx b/packages/oxa-react/src/defaults/Subscript.tsx
new file mode 100644
index 0000000..0d3c745
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Subscript.tsx
@@ -0,0 +1,16 @@
+import type { OxaNode } from "../types";
+import { OXA } from "../oxa";
+
+export function SubscriptRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ return (
+
+
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Superscript.tsx b/packages/oxa-react/src/defaults/Superscript.tsx
new file mode 100644
index 0000000..9b9c97d
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Superscript.tsx
@@ -0,0 +1,16 @@
+import type { OxaNode } from "../types";
+import { OXA } from "../oxa";
+
+export function SuperscriptRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ return (
+
+
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/Text.tsx b/packages/oxa-react/src/defaults/Text.tsx
new file mode 100644
index 0000000..bf54716
--- /dev/null
+++ b/packages/oxa-react/src/defaults/Text.tsx
@@ -0,0 +1,5 @@
+import type { OxaNode } from "../types";
+
+export function TextRenderer({ node }: { node: OxaNode }) {
+ return <>{node.value}>;
+}
diff --git a/packages/oxa-react/src/defaults/ThematicBreak.tsx b/packages/oxa-react/src/defaults/ThematicBreak.tsx
new file mode 100644
index 0000000..e5d787b
--- /dev/null
+++ b/packages/oxa-react/src/defaults/ThematicBreak.tsx
@@ -0,0 +1,16 @@
+import type { OxaNode } from "../types";
+
+export function ThematicBreakRenderer({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ return (
+
+ );
+}
diff --git a/packages/oxa-react/src/defaults/index.ts b/packages/oxa-react/src/defaults/index.ts
new file mode 100644
index 0000000..9f5beec
--- /dev/null
+++ b/packages/oxa-react/src/defaults/index.ts
@@ -0,0 +1,26 @@
+import type { NodeRenderers } from "../types";
+import { DocumentRenderer } from "./Document";
+import { HeadingRenderer } from "./Heading";
+import { ParagraphRenderer } from "./Paragraph";
+import { CodeRenderer } from "./Code";
+import { ThematicBreakRenderer } from "./ThematicBreak";
+import { TextRenderer } from "./Text";
+import { EmphasisRenderer } from "./Emphasis";
+import { StrongRenderer } from "./Strong";
+import { InlineCodeRenderer } from "./InlineCode";
+import { SubscriptRenderer } from "./Subscript";
+import { SuperscriptRenderer } from "./Superscript";
+
+export const defaultRenderers: NodeRenderers = {
+ Document: DocumentRenderer,
+ Heading: HeadingRenderer,
+ Paragraph: ParagraphRenderer,
+ Code: CodeRenderer,
+ ThematicBreak: ThematicBreakRenderer,
+ Text: TextRenderer,
+ Emphasis: EmphasisRenderer,
+ Strong: StrongRenderer,
+ InlineCode: InlineCodeRenderer,
+ Subscript: SubscriptRenderer,
+ Superscript: SuperscriptRenderer,
+};
diff --git a/packages/oxa-react/src/index.tsx b/packages/oxa-react/src/index.tsx
new file mode 100644
index 0000000..b5d5dea
--- /dev/null
+++ b/packages/oxa-react/src/index.tsx
@@ -0,0 +1,11 @@
+export { OXA } from "./oxa";
+export { OxaProvider, useNodeRenderers } from "./context";
+export { validateRenderers, mergeRenderers, selectRenderer } from "./renderers";
+export { defaultRenderers } from "./defaults";
+
+export type {
+ OxaNode,
+ NodeRenderer,
+ NodeRenderers,
+ NodeRenderersValidated,
+} from "./types";
diff --git a/packages/oxa-react/src/oxa.tsx b/packages/oxa-react/src/oxa.tsx
new file mode 100644
index 0000000..9632b2f
--- /dev/null
+++ b/packages/oxa-react/src/oxa.tsx
@@ -0,0 +1,43 @@
+import type { OxaNode } from "./types";
+import { useNodeRenderers } from "./context";
+import { selectRenderer } from "./renderers";
+
+function DefaultComponent({
+ node,
+ className,
+}: {
+ node: OxaNode;
+ className?: string;
+}) {
+ if (!node.children) return {node.value};
+ return ;
+}
+
+export function OXA({
+ ast,
+ className,
+}: {
+ ast?: OxaNode | OxaNode[];
+ className?: string;
+}) {
+ const renderers = useNodeRenderers();
+ if (!ast) return null;
+
+ if (!Array.isArray(ast)) {
+ const Component = selectRenderer(renderers, ast) ?? DefaultComponent;
+ return ;
+ }
+
+ if (ast.length === 0) return null;
+
+ return (
+ <>
+ {ast.map((node, i) => {
+ const Component = selectRenderer(renderers, node) ?? DefaultComponent;
+ return (
+
+ );
+ })}
+ >
+ );
+}
diff --git a/packages/oxa-react/src/renderers.tsx b/packages/oxa-react/src/renderers.tsx
new file mode 100644
index 0000000..2d988ee
--- /dev/null
+++ b/packages/oxa-react/src/renderers.tsx
@@ -0,0 +1,75 @@
+import type {
+ OxaNode,
+ NodeRenderer,
+ NodeRenderers,
+ NodeRenderersValidated,
+} from "./types";
+
+export function validateRenderers(
+ renderers?: NodeRenderers,
+): NodeRenderersValidated {
+ if (!renderers) return {};
+ const validated: NodeRenderersValidated = {};
+ for (const key in renderers) {
+ const renderer = renderers[key];
+ if (typeof renderer === "function") {
+ validated[key] = { base: renderer };
+ } else if (typeof renderer === "object" && "base" in renderer) {
+ validated[key] = renderer as NodeRenderersValidated[string];
+ } else {
+ throw new Error(
+ `Renderer for "${key}" must be either a function or an object containing a "base" renderer.`,
+ );
+ }
+ }
+ return validated;
+}
+
+/**
+ * Combines a list of renderers. Put more specific renderers **later** in the list.
+ *
+ * When a renderer is selected, it will look for a match in **reversed** order.
+ *
+ * ```typescript
+ * mergeRenderers([defaultRenderers, specificRenderers])
+ * ```
+ */
+export function mergeRenderers(
+ renderers: NodeRenderers | NodeRenderers[] | undefined,
+ validate: true,
+): NodeRenderersValidated;
+export function mergeRenderers(
+ renderers: NodeRenderers | NodeRenderers[] | undefined,
+ validate?: false,
+): NodeRenderers;
+export function mergeRenderers(
+ renderers: NodeRenderers | NodeRenderers[] | undefined,
+ validate?: boolean,
+): NodeRenderers {
+ if (!renderers || renderers.length === 0) return {};
+ const renderersArray = Array.isArray(renderers) ? renderers : [renderers];
+ const merged: NodeRenderersValidated = {};
+ for (const renderersObj of renderersArray) {
+ for (const key in renderersObj) {
+ const next =
+ typeof renderersObj[key] === "function"
+ ? { base: renderersObj[key] }
+ : renderersObj[key];
+ merged[key] = {
+ ...(merged[key] as Record),
+ ...next,
+ } as NodeRenderersValidated[string];
+ }
+ }
+ if (validate) return validateRenderers(merged);
+ return merged as NodeRenderers;
+}
+
+export function selectRenderer(
+ renderers: NodeRenderersValidated,
+ node: OxaNode,
+): NodeRenderer | undefined {
+ const componentRenderers =
+ renderers[node.type] ?? renderers["DefaultComponent"];
+ return componentRenderers?.base ?? undefined;
+}
diff --git a/packages/oxa-react/src/styles.css b/packages/oxa-react/src/styles.css
new file mode 100644
index 0000000..f1d8c73
--- /dev/null
+++ b/packages/oxa-react/src/styles.css
@@ -0,0 +1 @@
+@import "tailwindcss";
diff --git a/packages/oxa-react/src/types.ts b/packages/oxa-react/src/types.ts
new file mode 100644
index 0000000..1debe85
--- /dev/null
+++ b/packages/oxa-react/src/types.ts
@@ -0,0 +1,26 @@
+import type React from "react";
+
+export interface OxaNode {
+ type: string;
+ children?: OxaNode[];
+ value?: string;
+ id?: string;
+ classes?: string[];
+ data?: Record;
+ [key: string]: unknown;
+}
+
+export type NodeRenderer> = React.FC<{
+ node: OxaNode & T;
+ className?: string;
+}>;
+
+export type NodeRenderers = Record<
+ string,
+ NodeRenderer | Record<"base" | string, NodeRenderer>
+>;
+
+export type NodeRenderersValidated = Record<
+ string,
+ { base: NodeRenderer } & Record
+>;
diff --git a/packages/oxa-react/tsconfig.json b/packages/oxa-react/tsconfig.json
new file mode 100644
index 0000000..5eadbfe
--- /dev/null
+++ b/packages/oxa-react/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "jsx": "react-jsx",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "outDir": "./dist",
+ "rootDir": "./src",
+ "declaration": true,
+ "declarationMap": true,
+ "sourceMap": true
+ },
+ "include": ["src"],
+ "exclude": ["dist"]
+}
diff --git a/packages/oxa-react/vite.config.ts b/packages/oxa-react/vite.config.ts
new file mode 100644
index 0000000..2bcef52
--- /dev/null
+++ b/packages/oxa-react/vite.config.ts
@@ -0,0 +1,18 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import tailwindcss from "@tailwindcss/vite";
+import dts from "vite-plugin-dts";
+
+export default defineConfig({
+ plugins: [react(), tailwindcss(), dts({ include: ["src"] })],
+ build: {
+ lib: {
+ entry: "src/index.tsx",
+ formats: ["es"],
+ fileName: "index",
+ },
+ rollupOptions: {
+ external: ["react", "react-dom", "react/jsx-runtime"],
+ },
+ },
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4f0d9d1..2d6ed8d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -19,7 +19,7 @@ importers:
version: 9.39.2
eslint:
specifier: ^9.39.2
- version: 9.39.2
+ version: 9.39.2(jiti@2.6.1)
json-schema-to-typescript:
specifier: ^15.0.4
version: 15.0.4
@@ -37,10 +37,10 @@ importers:
version: 5.9.3
typescript-eslint:
specifier: ^8.50.0
- version: 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ version: 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
vitest:
specifier: ^4.0.16
- version: 4.0.16(@types/node@25.0.2)(tsx@4.21.0)
+ version: 4.0.16(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
packages/oxa:
devDependencies:
@@ -108,6 +108,101 @@ importers:
specifier: ^4.0.9
version: 4.0.9
+ packages/oxa-demo:
+ dependencies:
+ '@codemirror/lang-json':
+ specifier: ^6.0.1
+ version: 6.0.2
+ '@codemirror/lang-yaml':
+ specifier: ^6.1.2
+ version: 6.1.3
+ '@codemirror/language':
+ specifier: ^6.11.0
+ version: 6.12.2
+ '@oxa/core':
+ specifier: workspace:*
+ version: link:../oxa-core
+ '@oxa/react':
+ specifier: workspace:*
+ version: link:../oxa-react
+ '@uiw/react-codemirror':
+ specifier: ^4.23.10
+ version: 4.25.8(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.20.1)(@codemirror/language@6.12.2)(@codemirror/lint@6.9.5)(@codemirror/search@6.6.0)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.40.0)(codemirror@6.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ codemirror:
+ specifier: ^6.0.1
+ version: 6.0.2
+ js-yaml:
+ specifier: ^4.1.0
+ version: 4.1.1
+ react:
+ specifier: ^19.1.0
+ version: 19.2.4
+ react-dom:
+ specifier: ^19.1.0
+ version: 19.2.4(react@19.2.4)
+ devDependencies:
+ '@codemirror/state':
+ specifier: ^6.6.0
+ version: 6.6.0
+ '@tailwindcss/vite':
+ specifier: ^4.1.10
+ version: 4.2.2(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
+ '@types/js-yaml':
+ specifier: ^4.0.9
+ version: 4.0.9
+ '@types/react':
+ specifier: ^19.1.8
+ version: 19.2.14
+ '@types/react-dom':
+ specifier: ^19.1.6
+ version: 19.2.3(@types/react@19.2.14)
+ '@vitejs/plugin-react':
+ specifier: ^4.5.2
+ version: 4.7.0(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
+ tailwindcss:
+ specifier: ^4.1.10
+ version: 4.2.2
+ vite:
+ specifier: ^6.3.5
+ version: 6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
+ vite-plugin-dts:
+ specifier: ^4.5.4
+ version: 4.5.4(@types/node@25.0.2)(rollup@4.54.0)(typescript@5.9.3)(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
+
+ packages/oxa-react:
+ dependencies:
+ oxa-types:
+ specifier: workspace:*
+ version: link:../oxa-types-ts
+ devDependencies:
+ '@tailwindcss/vite':
+ specifier: ^4.1.10
+ version: 4.2.2(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
+ '@types/react':
+ specifier: ^19.1.8
+ version: 19.2.14
+ '@types/react-dom':
+ specifier: ^19.1.6
+ version: 19.2.3(@types/react@19.2.14)
+ '@vitejs/plugin-react':
+ specifier: ^4.5.2
+ version: 4.7.0(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
+ react:
+ specifier: ^19.1.0
+ version: 19.2.4
+ react-dom:
+ specifier: ^19.1.0
+ version: 19.2.4(react@19.2.4)
+ tailwindcss:
+ specifier: ^4.1.10
+ version: 4.2.2
+ vite:
+ specifier: ^6.3.5
+ version: 6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
+ vite-plugin-dts:
+ specifier: ^4.5.4
+ version: 4.5.4(@types/node@25.0.2)(rollup@4.54.0)(typescript@5.9.3)(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
+
packages/oxa-types-ts: {}
scripts:
@@ -145,14 +240,93 @@ packages:
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.29.0':
+ resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.29.0':
+ resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.29.1':
+ resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-identifier@7.28.5':
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.29.2':
+ resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.2':
+ resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/runtime@7.28.4':
resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
engines: {node: '>=6.9.0'}
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.0':
+ resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ engines: {node: '>=6.9.0'}
+
'@changesets/apply-release-plan@7.0.14':
resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==}
@@ -214,6 +388,36 @@ packages:
'@changesets/write@0.4.0':
resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
+ '@codemirror/autocomplete@6.20.1':
+ resolution: {integrity: sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A==}
+
+ '@codemirror/commands@6.10.3':
+ resolution: {integrity: sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==}
+
+ '@codemirror/lang-json@6.0.2':
+ resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==}
+
+ '@codemirror/lang-yaml@6.1.3':
+ resolution: {integrity: sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==}
+
+ '@codemirror/language@6.12.2':
+ resolution: {integrity: sha512-jEPmz2nGGDxhRTg3lTpzmIyGKxz3Gp3SJES4b0nAuE5SWQoKdT5GoQ69cwMmFd+wvFUhYirtDTr0/DRHpQAyWg==}
+
+ '@codemirror/lint@6.9.5':
+ resolution: {integrity: sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA==}
+
+ '@codemirror/search@6.6.0':
+ resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==}
+
+ '@codemirror/state@6.6.0':
+ resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==}
+
+ '@codemirror/theme-one-dark@6.1.3':
+ resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==}
+
+ '@codemirror/view@6.40.0':
+ resolution: {integrity: sha512-WA0zdU7xfF10+5I3HhUUq3kqOx3KjqmtQ9lqZjfK7jtYk4G72YW9rezcSywpaUMCWOMlq+6E0pO1IWg1TNIhtg==}
+
'@esbuild/aix-ppc64@0.25.12':
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines: {node: '>=18'}
@@ -593,18 +797,62 @@ packages:
'@types/node':
optional: true
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
'@jsdevtools/ono@7.1.3':
resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==}
+ '@lezer/common@1.5.1':
+ resolution: {integrity: sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==}
+
+ '@lezer/highlight@1.2.3':
+ resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==}
+
+ '@lezer/json@1.0.3':
+ resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==}
+
+ '@lezer/lr@1.4.8':
+ resolution: {integrity: sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==}
+
+ '@lezer/yaml@1.0.4':
+ resolution: {integrity: sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==}
+
'@manypkg/find-root@1.1.0':
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
'@manypkg/get-packages@1.1.3':
resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
+ '@marijn/find-cluster-break@1.0.2':
+ resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
+
+ '@microsoft/api-extractor-model@7.33.4':
+ resolution: {integrity: sha512-u1LTaNTikZAQ9uK6KG1Ms7nvNedsnODnspq/gH2dcyETWvH4hVNGNDvRAEutH66kAmxA4/necElqGNs1FggC8w==}
+
+ '@microsoft/api-extractor@7.57.7':
+ resolution: {integrity: sha512-kmnmVs32MFWbV5X6BInC1/TfCs7y1ugwxv1xHsAIj/DyUfoe7vtO0alRUgbQa57+yRGHBBjlNcEk33SCAt5/dA==}
+ hasBin: true
+
+ '@microsoft/tsdoc-config@0.18.1':
+ resolution: {integrity: sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==}
+
+ '@microsoft/tsdoc@0.16.0':
+ resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -617,6 +865,18 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@rolldown/pluginutils@1.0.0-beta.27':
+ resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
'@rollup/rollup-android-arm-eabi@4.54.0':
resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==}
cpu: [arm]
@@ -727,6 +987,36 @@ packages:
cpu: [x64]
os: [win32]
+ '@rushstack/node-core-library@5.20.3':
+ resolution: {integrity: sha512-95JgEPq2k7tHxhF9/OJnnyHDXfC9cLhhta0An/6MlkDsX2A6dTzDrTUG18vx4vjc280V0fi0xDH9iQczpSuWsw==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@rushstack/problem-matcher@0.2.1':
+ resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@rushstack/rig-package@0.7.2':
+ resolution: {integrity: sha512-9XbFWuqMYcHUso4mnETfhGVUSaADBRj6HUAAEYk50nMPn8WRICmBuCphycQGNB3duIR6EEZX3Xj3SYc2XiP+9A==}
+
+ '@rushstack/terminal@0.22.3':
+ resolution: {integrity: sha512-gHC9pIMrUPzAbBiI4VZMU7Q+rsCzb8hJl36lFIulIzoceKotyKL3Rd76AZ2CryCTKEg+0bnTj406HE5YY5OQvw==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@rushstack/ts-command-line@5.3.3':
+ resolution: {integrity: sha512-c+ltdcvC7ym+10lhwR/vWiOhsrm/bP3By2VsFcs5qTKv+6tTmxgbVrtJ5NdNjANiV5TcmOZgUN+5KYQ4llsvEw==}
+
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
@@ -737,6 +1027,96 @@ packages:
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+ '@tailwindcss/node@4.2.2':
+ resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==}
+
+ '@tailwindcss/oxide-android-arm64@4.2.2':
+ resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.2':
+ resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.2.2':
+ resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.2':
+ resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
+ resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
+ resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
+ resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
+ resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.2':
+ resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.2':
+ resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
+ resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
+ resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.2.2':
+ resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==}
+ engines: {node: '>= 20'}
+
+ '@tailwindcss/vite@4.2.2':
+ resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==}
+ peerDependencies:
+ vite: ^5.2.0 || ^6 || ^7 || ^8
+
'@turbo/darwin-64@2.8.20':
resolution: {integrity: sha512-FQ9EX1xMU5nbwjxXxM3yU88AQQ6Sqc6S44exPRroMcx9XZHqqppl5ymJF0Ig/z3nvQNwDmz1Gsnvxubo+nXWjQ==}
cpu: [x64]
@@ -767,6 +1147,21 @@ packages:
cpu: [arm64]
os: [win32]
+ '@types/argparse@1.0.38':
+ resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
'@types/chai@5.2.3':
resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
@@ -794,6 +1189,14 @@ packages:
'@types/node@25.0.2':
resolution: {integrity: sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==}
+ '@types/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.14':
+ resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
+
'@typescript-eslint/eslint-plugin@8.50.0':
resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -853,6 +1256,34 @@ packages:
resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@uiw/codemirror-extensions-basic-setup@4.25.8':
+ resolution: {integrity: sha512-9Rr+liiBmK4xzZHszL+twNRJApthqmITBwDP3emNTtTrkBFN4gHlqfp+nodKmoVt1+bUH1qQCtyqt+7dbDTHiw==}
+ peerDependencies:
+ '@codemirror/autocomplete': '>=6.0.0'
+ '@codemirror/commands': '>=6.0.0'
+ '@codemirror/language': '>=6.0.0'
+ '@codemirror/lint': '>=6.0.0'
+ '@codemirror/search': '>=6.0.0'
+ '@codemirror/state': '>=6.0.0'
+ '@codemirror/view': '>=6.0.0'
+
+ '@uiw/react-codemirror@4.25.8':
+ resolution: {integrity: sha512-A0aLOuJZm2yJ+U9GlMFwxwFciztjd5LhcAG4SMqFxdD58wH+sCQXuY4UU5J2hqgS390qAlShtUgREvJPUonbuQ==}
+ peerDependencies:
+ '@babel/runtime': '>=7.11.0'
+ '@codemirror/state': '>=6.0.0'
+ '@codemirror/theme-one-dark': '>=6.0.0'
+ '@codemirror/view': '>=6.0.0'
+ codemirror: '>=6.0.0'
+ react: '>=17.0.0'
+ react-dom: '>=17.0.0'
+
+ '@vitejs/plugin-react@4.7.0':
+ resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
'@vitest/expect@4.0.16':
resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==}
@@ -882,6 +1313,35 @@ packages:
'@vitest/utils@4.0.16':
resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==}
+ '@volar/language-core@2.4.28':
+ resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==}
+
+ '@volar/source-map@2.4.28':
+ resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==}
+
+ '@volar/typescript@2.4.28':
+ resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==}
+
+ '@vue/compiler-core@3.5.30':
+ resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==}
+
+ '@vue/compiler-dom@3.5.30':
+ resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==}
+
+ '@vue/compiler-vue2@2.7.16':
+ resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+
+ '@vue/language-core@2.2.0':
+ resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@vue/shared@3.5.30':
+ resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -892,6 +1352,19 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv-draft-04@1.0.0:
+ resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
+ peerDependencies:
+ ajv: ^8.5.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
ajv-formats@3.0.1:
resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
peerDependencies:
@@ -906,6 +1379,12 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ ajv@8.18.0:
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
+
+ alien-signals@0.4.14:
+ resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==}
+
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@@ -935,6 +1414,15 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
+ baseline-browser-mapping@2.10.10:
+ resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
better-ajv-errors@2.0.2:
resolution: {integrity: sha512-1cLrJXEq46n0hjV8dDYwg9LKYjDb3KbeW7nZTv4kvfoDD9c2DXHIE31nxM+Y/cIfXMggLUfmxbm6h/JoM/yotA==}
engines: {node: '>= 18.20.6'}
@@ -951,14 +1439,26 @@ packages:
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ brace-expansion@5.0.5:
+ resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
+ engines: {node: 18 || 20 || >=22}
+
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
+ caniuse-lite@1.0.30001781:
+ resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==}
+
chai@6.2.1:
resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==}
engines: {node: '>=18'}
@@ -974,6 +1474,9 @@ packages:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
+ codemirror@6.0.2:
+ resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==}
+
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -985,16 +1488,37 @@ packages:
resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
engines: {node: '>=20'}
+ compare-versions@6.1.1:
+ resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ confbox@0.2.4:
+ resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ crelt@1.0.6:
+ resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
dataloader@1.4.0:
resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
+ de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -1011,6 +1535,14 @@ packages:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ diff@8.0.4:
+ resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
+ engines: {node: '>=0.3.1'}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -1019,10 +1551,21 @@ packages:
resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
engines: {node: '>=10'}
+ electron-to-chromium@1.5.322:
+ resolution: {integrity: sha512-vFU34OcrvMcH66T+dYC3G4nURmgfDVewMIu6Q2urXpumAPSMmzvcn04KVVV8Opikq8Vs5nUbO/8laNhNRqSzYw==}
+
+ enhanced-resolve@5.20.1:
+ resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==}
+ engines: {node: '>=10.13.0'}
+
enquirer@2.4.1:
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
engines: {node: '>=8.6'}
+ entities@7.0.1:
+ resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
+ engines: {node: '>=0.12'}
+
es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
@@ -1036,6 +1579,10 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -1083,6 +1630,9 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
@@ -1098,6 +1648,9 @@ packages:
resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
engines: {node: '>=12.0.0'}
+ exsolve@1.0.8:
+ resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
+
extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
@@ -1156,6 +1709,10 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+ fs-extra@11.3.4:
+ resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==}
+ engines: {node: '>=14.14'}
+
fs-extra@7.0.1:
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
engines: {node: '>=6 <7 || >=8'}
@@ -1169,6 +1726,13 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
get-stream@9.0.1:
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
engines: {node: '>=18'}
@@ -1199,6 +1763,14 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
human-id@4.1.3:
resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==}
hasBin: true
@@ -1223,10 +1795,18 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
+ import-lazy@4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -1262,6 +1842,13 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
+ jju@1.4.0:
+ resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1273,6 +1860,11 @@ packages:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@@ -1290,9 +1882,17 @@ packages:
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
jsonpointer@5.0.1:
resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
engines: {node: '>=0.10.0'}
@@ -1300,6 +1900,9 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ kolorist@1.8.0:
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+
leven@3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'}
@@ -1308,34 +1911,119 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- locate-path@5.0.0:
- resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
- engines: {node: '>=8'}
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
- locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
- lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
- lodash.startcase@4.4.0:
- resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
- lodash@4.17.23:
- resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
- magic-string@0.30.21:
- resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ local-pkg@1.1.2:
+ resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
+ engines: {node: '>=14'}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
+ minimatch@10.2.3:
+ resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==}
+ engines: {node: 18 || 20 || >=22}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -1346,6 +2034,9 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ mlly@1.8.2:
+ resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -1353,6 +2044,9 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ muggle-string@0.4.1:
+ resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -1370,6 +2064,9 @@ packages:
encoding:
optional: true
+ node-releases@2.0.36:
+ resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==}
+
npm-run-path@6.0.0:
resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
engines: {node: '>=18'}
@@ -1423,6 +2120,9 @@ packages:
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
engines: {node: '>=18'}
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -1435,6 +2135,9 @@ packages:
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
engines: {node: '>=12'}
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -1457,6 +2160,12 @@ packages:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ pkg-types@2.3.0:
+ resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
@@ -1489,6 +2198,19 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ react-dom@19.2.4:
+ resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
+ peerDependencies:
+ react: ^19.2.4
+
+ react-refresh@0.17.0:
+ resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
+ engines: {node: '>=0.10.0'}
+
+ react@19.2.4:
+ resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
+ engines: {node: '>=0.10.0'}
+
read-yaml-file@1.1.0:
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
engines: {node: '>=6'}
@@ -1508,6 +2230,11 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -1523,6 +2250,18 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
semver@7.7.3:
resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'}
@@ -1551,6 +2290,10 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
spawndamnit@3.0.1:
resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
@@ -1563,6 +2306,10 @@ packages:
std-env@3.10.0:
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -1579,10 +2326,28 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ style-mod@4.1.3:
+ resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==}
+
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ tailwindcss@4.2.2:
+ resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==}
+
+ tapable@2.3.2:
+ resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==}
+ engines: {node: '>=6'}
+
term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
@@ -1635,11 +2400,19 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
+ typescript@5.8.2:
+ resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
hasBin: true
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -1654,9 +2427,68 @@ packages:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ vite-plugin-dts@4.5.4:
+ resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==}
+ peerDependencies:
+ typescript: '*'
+ vite: '*'
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
+ vite@6.4.1:
+ resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ jiti: '>=1.21.0'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
vite@7.3.0:
resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -1731,6 +2563,12 @@ packages:
jsdom:
optional: true
+ vscode-uri@3.1.0:
+ resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
+
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -1751,6 +2589,12 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -1773,10 +2617,120 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
+ '@babel/code-frame@7.29.0':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.0': {}
+
+ '@babel/core@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.29.2
+ '@babel/parser': 7.29.2
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.29.1':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-string-parser@7.27.1': {}
+
'@babel/helper-validator-identifier@7.28.5': {}
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.29.2':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+
+ '@babel/parser@7.29.2':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/runtime@7.28.4': {}
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+
+ '@babel/traverse@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.29.2
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.29.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
'@changesets/apply-release-plan@7.0.14':
dependencies:
'@changesets/config': 3.1.2
@@ -1936,6 +2890,74 @@ snapshots:
human-id: 4.1.3
prettier: 2.8.8
+ '@codemirror/autocomplete@6.20.1':
+ dependencies:
+ '@codemirror/language': 6.12.2
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.40.0
+ '@lezer/common': 1.5.1
+
+ '@codemirror/commands@6.10.3':
+ dependencies:
+ '@codemirror/language': 6.12.2
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.40.0
+ '@lezer/common': 1.5.1
+
+ '@codemirror/lang-json@6.0.2':
+ dependencies:
+ '@codemirror/language': 6.12.2
+ '@lezer/json': 1.0.3
+
+ '@codemirror/lang-yaml@6.1.3':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/language': 6.12.2
+ '@codemirror/state': 6.6.0
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+ '@lezer/yaml': 1.0.4
+
+ '@codemirror/language@6.12.2':
+ dependencies:
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.40.0
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+ style-mod: 4.1.3
+
+ '@codemirror/lint@6.9.5':
+ dependencies:
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.40.0
+ crelt: 1.0.6
+
+ '@codemirror/search@6.6.0':
+ dependencies:
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.40.0
+ crelt: 1.0.6
+
+ '@codemirror/state@6.6.0':
+ dependencies:
+ '@marijn/find-cluster-break': 1.0.2
+
+ '@codemirror/theme-one-dark@6.1.3':
+ dependencies:
+ '@codemirror/language': 6.12.2
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.40.0
+ '@lezer/highlight': 1.2.3
+
+ '@codemirror/view@6.40.0':
+ dependencies:
+ '@codemirror/state': 6.6.0
+ crelt: 1.0.6
+ style-mod: 4.1.3
+ w3c-keyname: 2.2.8
+
'@esbuild/aix-ppc64@0.25.12':
optional: true
@@ -2092,9 +3114,9 @@ snapshots:
'@esbuild/win32-x64@0.27.1':
optional: true
- '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2)':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1))':
dependencies:
- eslint: 9.39.2
+ eslint: 9.39.2(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -2158,10 +3180,49 @@ snapshots:
optionalDependencies:
'@types/node': 25.0.2
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
'@jridgewell/sourcemap-codec@1.5.5': {}
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
'@jsdevtools/ono@7.1.3': {}
+ '@lezer/common@1.5.1': {}
+
+ '@lezer/highlight@1.2.3':
+ dependencies:
+ '@lezer/common': 1.5.1
+
+ '@lezer/json@1.0.3':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
+ '@lezer/lr@1.4.8':
+ dependencies:
+ '@lezer/common': 1.5.1
+
+ '@lezer/yaml@1.0.4':
+ dependencies:
+ '@lezer/common': 1.5.1
+ '@lezer/highlight': 1.2.3
+ '@lezer/lr': 1.4.8
+
'@manypkg/find-root@1.1.0':
dependencies:
'@babel/runtime': 7.28.4
@@ -2178,6 +3239,44 @@ snapshots:
globby: 11.1.0
read-yaml-file: 1.1.0
+ '@marijn/find-cluster-break@1.0.2': {}
+
+ '@microsoft/api-extractor-model@7.33.4(@types/node@25.0.2)':
+ dependencies:
+ '@microsoft/tsdoc': 0.16.0
+ '@microsoft/tsdoc-config': 0.18.1
+ '@rushstack/node-core-library': 5.20.3(@types/node@25.0.2)
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@microsoft/api-extractor@7.57.7(@types/node@25.0.2)':
+ dependencies:
+ '@microsoft/api-extractor-model': 7.33.4(@types/node@25.0.2)
+ '@microsoft/tsdoc': 0.16.0
+ '@microsoft/tsdoc-config': 0.18.1
+ '@rushstack/node-core-library': 5.20.3(@types/node@25.0.2)
+ '@rushstack/rig-package': 0.7.2
+ '@rushstack/terminal': 0.22.3(@types/node@25.0.2)
+ '@rushstack/ts-command-line': 5.3.3(@types/node@25.0.2)
+ diff: 8.0.4
+ lodash: 4.17.23
+ minimatch: 10.2.3
+ resolve: 1.22.11
+ semver: 7.5.4
+ source-map: 0.6.1
+ typescript: 5.8.2
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@microsoft/tsdoc-config@0.18.1':
+ dependencies:
+ '@microsoft/tsdoc': 0.16.0
+ ajv: 8.18.0
+ jju: 1.4.0
+ resolve: 1.22.11
+
+ '@microsoft/tsdoc@0.16.0': {}
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -2190,6 +3289,16 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
+ '@rolldown/pluginutils@1.0.0-beta.27': {}
+
+ '@rollup/pluginutils@5.3.0(rollup@4.54.0)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.54.0
+
'@rollup/rollup-android-arm-eabi@4.54.0':
optional: true
@@ -2256,12 +3365,119 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.54.0':
optional: true
+ '@rushstack/node-core-library@5.20.3(@types/node@25.0.2)':
+ dependencies:
+ ajv: 8.18.0
+ ajv-draft-04: 1.0.0(ajv@8.18.0)
+ ajv-formats: 3.0.1(ajv@8.18.0)
+ fs-extra: 11.3.4
+ import-lazy: 4.0.0
+ jju: 1.4.0
+ resolve: 1.22.11
+ semver: 7.5.4
+ optionalDependencies:
+ '@types/node': 25.0.2
+
+ '@rushstack/problem-matcher@0.2.1(@types/node@25.0.2)':
+ optionalDependencies:
+ '@types/node': 25.0.2
+
+ '@rushstack/rig-package@0.7.2':
+ dependencies:
+ resolve: 1.22.11
+ strip-json-comments: 3.1.1
+
+ '@rushstack/terminal@0.22.3(@types/node@25.0.2)':
+ dependencies:
+ '@rushstack/node-core-library': 5.20.3(@types/node@25.0.2)
+ '@rushstack/problem-matcher': 0.2.1(@types/node@25.0.2)
+ supports-color: 8.1.1
+ optionalDependencies:
+ '@types/node': 25.0.2
+
+ '@rushstack/ts-command-line@5.3.3(@types/node@25.0.2)':
+ dependencies:
+ '@rushstack/terminal': 0.22.3(@types/node@25.0.2)
+ '@types/argparse': 1.0.38
+ argparse: 1.0.10
+ string-argv: 0.3.2
+ transitivePeerDependencies:
+ - '@types/node'
+
'@sec-ant/readable-stream@0.4.1': {}
'@sindresorhus/merge-streams@4.0.0': {}
'@standard-schema/spec@1.1.0': {}
+ '@tailwindcss/node@4.2.2':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.20.1
+ jiti: 2.6.1
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.2.2
+
+ '@tailwindcss/oxide-android-arm64@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
+ optional: true
+
+ '@tailwindcss/oxide@4.2.2':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.2.2
+ '@tailwindcss/oxide-darwin-arm64': 4.2.2
+ '@tailwindcss/oxide-darwin-x64': 4.2.2
+ '@tailwindcss/oxide-freebsd-x64': 4.2.2
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2
+ '@tailwindcss/oxide-linux-arm64-musl': 4.2.2
+ '@tailwindcss/oxide-linux-x64-gnu': 4.2.2
+ '@tailwindcss/oxide-linux-x64-musl': 4.2.2
+ '@tailwindcss/oxide-wasm32-wasi': 4.2.2
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2
+ '@tailwindcss/oxide-win32-x64-msvc': 4.2.2
+
+ '@tailwindcss/vite@4.2.2(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))':
+ dependencies:
+ '@tailwindcss/node': 4.2.2
+ '@tailwindcss/oxide': 4.2.2
+ tailwindcss: 4.2.2
+ vite: 6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
+
'@turbo/darwin-64@2.8.20':
optional: true
@@ -2280,6 +3496,29 @@ snapshots:
'@turbo/windows-arm64@2.8.20':
optional: true
+ '@types/argparse@1.0.38': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
'@types/chai@5.2.3':
dependencies:
'@types/deep-eql': 4.0.2
@@ -2305,15 +3544,23 @@ snapshots:
dependencies:
undici-types: 7.16.0
- '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)':
+ '@types/react-dom@19.2.3(@types/react@19.2.14)':
+ dependencies:
+ '@types/react': 19.2.14
+
+ '@types/react@19.2.14':
+ dependencies:
+ csstype: 3.2.3
+
+ '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/scope-manager': 8.50.0
- '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.50.0
- eslint: 9.39.2
+ eslint: 9.39.2(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -2321,14 +3568,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.50.0
'@typescript-eslint/types': 8.50.0
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.50.0
debug: 4.4.3
- eslint: 9.39.2
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -2351,13 +3598,13 @@ snapshots:
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/types': 8.50.0
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3
- eslint: 9.39.2
+ eslint: 9.39.2(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
@@ -2380,13 +3627,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1))
'@typescript-eslint/scope-manager': 8.50.0
'@typescript-eslint/types': 8.50.0
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
- eslint: 9.39.2
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -2396,6 +3643,45 @@ snapshots:
'@typescript-eslint/types': 8.50.0
eslint-visitor-keys: 4.2.1
+ '@uiw/codemirror-extensions-basic-setup@4.25.8(@codemirror/autocomplete@6.20.1)(@codemirror/commands@6.10.3)(@codemirror/language@6.12.2)(@codemirror/lint@6.9.5)(@codemirror/search@6.6.0)(@codemirror/state@6.6.0)(@codemirror/view@6.40.0)':
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/commands': 6.10.3
+ '@codemirror/language': 6.12.2
+ '@codemirror/lint': 6.9.5
+ '@codemirror/search': 6.6.0
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.40.0
+
+ '@uiw/react-codemirror@4.25.8(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.20.1)(@codemirror/language@6.12.2)(@codemirror/lint@6.9.5)(@codemirror/search@6.6.0)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.40.0)(codemirror@6.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@codemirror/commands': 6.10.3
+ '@codemirror/state': 6.6.0
+ '@codemirror/theme-one-dark': 6.1.3
+ '@codemirror/view': 6.40.0
+ '@uiw/codemirror-extensions-basic-setup': 4.25.8(@codemirror/autocomplete@6.20.1)(@codemirror/commands@6.10.3)(@codemirror/language@6.12.2)(@codemirror/lint@6.9.5)(@codemirror/search@6.6.0)(@codemirror/state@6.6.0)(@codemirror/view@6.40.0)
+ codemirror: 6.0.2
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ transitivePeerDependencies:
+ - '@codemirror/autocomplete'
+ - '@codemirror/language'
+ - '@codemirror/lint'
+ - '@codemirror/search'
+
+ '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
+ '@rolldown/pluginutils': 1.0.0-beta.27
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.17.0
+ vite: 6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@vitest/expect@4.0.16':
dependencies:
'@standard-schema/spec': 1.1.0
@@ -2405,13 +3691,13 @@ snapshots:
chai: 6.2.1
tinyrainbow: 3.0.3
- '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@25.0.2)(tsx@4.21.0))':
+ '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))':
dependencies:
'@vitest/spy': 4.0.16
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 7.3.0(@types/node@25.0.2)(tsx@4.21.0)
+ vite: 7.3.0(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
'@vitest/pretty-format@4.0.16':
dependencies:
@@ -2435,16 +3721,71 @@ snapshots:
'@vitest/pretty-format': 4.0.16
tinyrainbow: 3.0.3
+ '@volar/language-core@2.4.28':
+ dependencies:
+ '@volar/source-map': 2.4.28
+
+ '@volar/source-map@2.4.28': {}
+
+ '@volar/typescript@2.4.28':
+ dependencies:
+ '@volar/language-core': 2.4.28
+ path-browserify: 1.0.1
+ vscode-uri: 3.1.0
+
+ '@vue/compiler-core@3.5.30':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@vue/shared': 3.5.30
+ entities: 7.0.1
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.30':
+ dependencies:
+ '@vue/compiler-core': 3.5.30
+ '@vue/shared': 3.5.30
+
+ '@vue/compiler-vue2@2.7.16':
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+
+ '@vue/language-core@2.2.0(typescript@5.9.3)':
+ dependencies:
+ '@volar/language-core': 2.4.28
+ '@vue/compiler-dom': 3.5.30
+ '@vue/compiler-vue2': 2.7.16
+ '@vue/shared': 3.5.30
+ alien-signals: 0.4.14
+ minimatch: 9.0.5
+ muggle-string: 0.4.1
+ path-browserify: 1.0.1
+ optionalDependencies:
+ typescript: 5.9.3
+
+ '@vue/shared@3.5.30': {}
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
acorn@8.15.0: {}
+ acorn@8.16.0: {}
+
+ ajv-draft-04@1.0.0(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
+
ajv-formats@3.0.1(ajv@8.17.1):
optionalDependencies:
ajv: 8.17.1
+ ajv-formats@3.0.1(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
+
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
@@ -2459,6 +3800,15 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
+ ajv@8.18.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ alien-signals@0.4.14: {}
+
ansi-colors@4.1.3: {}
ansi-regex@5.0.1: {}
@@ -2479,6 +3829,10 @@ snapshots:
balanced-match@1.0.2: {}
+ balanced-match@4.0.4: {}
+
+ baseline-browser-mapping@2.10.10: {}
+
better-ajv-errors@2.0.2(ajv@8.17.1):
dependencies:
'@babel/code-frame': 7.27.1
@@ -2501,12 +3855,26 @@ snapshots:
dependencies:
balanced-match: 1.0.2
+ brace-expansion@5.0.5:
+ dependencies:
+ balanced-match: 4.0.4
+
braces@3.0.3:
dependencies:
fill-range: 7.1.1
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.10.10
+ caniuse-lite: 1.0.30001781
+ electron-to-chromium: 1.5.322
+ node-releases: 2.0.36
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
callsites@3.1.0: {}
+ caniuse-lite@1.0.30001781: {}
+
chai@6.2.1: {}
chalk@4.1.2:
@@ -2518,6 +3886,16 @@ snapshots:
ci-info@3.9.0: {}
+ codemirror@6.0.2:
+ dependencies:
+ '@codemirror/autocomplete': 6.20.1
+ '@codemirror/commands': 6.10.3
+ '@codemirror/language': 6.12.2
+ '@codemirror/lint': 6.9.5
+ '@codemirror/search': 6.6.0
+ '@codemirror/state': 6.6.0
+ '@codemirror/view': 6.40.0
+
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -2526,16 +3904,30 @@ snapshots:
commander@14.0.2: {}
+ compare-versions@6.1.1: {}
+
concat-map@0.0.1: {}
+ confbox@0.1.8: {}
+
+ confbox@0.2.4: {}
+
+ convert-source-map@2.0.0: {}
+
+ crelt@1.0.6: {}
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
+ csstype@3.2.3: {}
+
dataloader@1.4.0: {}
+ de-indent@1.0.2: {}
+
debug@4.4.3:
dependencies:
ms: 2.1.3
@@ -2544,17 +3936,30 @@ snapshots:
detect-indent@6.1.0: {}
+ detect-libc@2.1.2: {}
+
+ diff@8.0.4: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
dotenv@8.6.0: {}
+ electron-to-chromium@1.5.322: {}
+
+ enhanced-resolve@5.20.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.2
+
enquirer@2.4.1:
dependencies:
ansi-colors: 4.1.3
strip-ansi: 6.0.1
+ entities@7.0.1: {}
+
es-module-lexer@1.7.0: {}
esbuild@0.25.12:
@@ -2615,6 +4020,8 @@ snapshots:
'@esbuild/win32-ia32': 0.27.1
'@esbuild/win32-x64': 0.27.1
+ escalade@3.2.0: {}
+
escape-string-regexp@4.0.0: {}
eslint-scope@8.4.0:
@@ -2626,9 +4033,9 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.39.2:
+ eslint@9.39.2(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.1
'@eslint/config-helpers': 0.4.2
@@ -2662,6 +4069,8 @@ snapshots:
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.6.1
transitivePeerDependencies:
- supports-color
@@ -2683,6 +4092,8 @@ snapshots:
estraverse@5.3.0: {}
+ estree-walker@2.0.2: {}
+
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.8
@@ -2706,6 +4117,8 @@ snapshots:
expect-type@1.3.0: {}
+ exsolve@1.0.8: {}
+
extendable-error@0.1.7: {}
fast-deep-equal@3.1.3: {}
@@ -2761,6 +4174,12 @@ snapshots:
flatted@3.3.3: {}
+ fs-extra@11.3.4:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
fs-extra@7.0.1:
dependencies:
graceful-fs: 4.2.11
@@ -2776,6 +4195,10 @@ snapshots:
fsevents@2.3.3:
optional: true
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
get-stream@9.0.1:
dependencies:
'@sec-ant/readable-stream': 0.4.1
@@ -2808,6 +4231,12 @@ snapshots:
has-flag@4.0.0: {}
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
human-id@4.1.3: {}
human-signals@8.0.1: {}
@@ -2825,8 +4254,14 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
+ import-lazy@4.0.0: {}
+
imurmurhash@0.1.4: {}
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
is-extglob@2.1.1: {}
is-glob@4.0.3:
@@ -2849,6 +4284,10 @@ snapshots:
isexe@2.0.0: {}
+ jiti@2.6.1: {}
+
+ jju@1.4.0: {}
+
js-tokens@4.0.0: {}
js-yaml@3.14.2:
@@ -2860,6 +4299,8 @@ snapshots:
dependencies:
argparse: 2.0.1
+ jsesc@3.1.0: {}
+
json-buffer@3.0.1: {}
json-schema-to-typescript@15.0.4:
@@ -2880,16 +4321,26 @@ snapshots:
json-stable-stringify-without-jsonify@1.0.1: {}
+ json5@2.2.3: {}
+
jsonfile@4.0.0:
optionalDependencies:
graceful-fs: 4.2.11
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
jsonpointer@5.0.1: {}
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
+ kolorist@1.8.0: {}
+
leven@3.1.0: {}
levn@0.4.1:
@@ -2897,6 +4348,61 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ local-pkg@1.1.2:
+ dependencies:
+ mlly: 1.8.2
+ pkg-types: 2.3.0
+ quansync: 0.2.11
+
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
@@ -2911,6 +4417,14 @@ snapshots:
lodash@4.17.23: {}
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -2922,6 +4436,10 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
+ minimatch@10.2.3:
+ dependencies:
+ brace-expansion: 5.0.5
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -2932,10 +4450,19 @@ snapshots:
minimist@1.2.8: {}
+ mlly@1.8.2:
+ dependencies:
+ acorn: 8.16.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.3
+
mri@1.2.0: {}
ms@2.1.3: {}
+ muggle-string@0.4.1: {}
+
nanoid@3.3.11: {}
natural-compare@1.4.0: {}
@@ -2944,6 +4471,8 @@ snapshots:
dependencies:
whatwg-url: 5.0.0
+ node-releases@2.0.36: {}
+
npm-run-path@6.0.0:
dependencies:
path-key: 4.0.0
@@ -2996,12 +4525,16 @@ snapshots:
parse-ms@4.0.0: {}
+ path-browserify@1.0.1: {}
+
path-exists@4.0.0: {}
path-key@3.1.1: {}
path-key@4.0.0: {}
+ path-parse@1.0.7: {}
+
path-type@4.0.0: {}
pathe@2.0.3: {}
@@ -3014,6 +4547,18 @@ snapshots:
pify@4.0.1: {}
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.2
+ pathe: 2.0.3
+
+ pkg-types@2.3.0:
+ dependencies:
+ confbox: 0.2.4
+ exsolve: 1.0.8
+ pathe: 2.0.3
+
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
@@ -3036,6 +4581,15 @@ snapshots:
queue-microtask@1.2.3: {}
+ react-dom@19.2.4(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ scheduler: 0.27.0
+
+ react-refresh@0.17.0: {}
+
+ react@19.2.4: {}
+
read-yaml-file@1.1.0:
dependencies:
graceful-fs: 4.2.11
@@ -3051,6 +4605,12 @@ snapshots:
resolve-pkg-maps@1.0.0: {}
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
reusify@1.1.0: {}
rollup@4.54.0:
@@ -3087,6 +4647,14 @@ snapshots:
safer-buffer@2.1.2: {}
+ scheduler@0.27.0: {}
+
+ semver@6.3.1: {}
+
+ semver@7.5.4:
+ dependencies:
+ lru-cache: 6.0.0
+
semver@7.7.3: {}
shebang-command@2.0.0:
@@ -3103,6 +4671,8 @@ snapshots:
source-map-js@1.2.1: {}
+ source-map@0.6.1: {}
+
spawndamnit@3.0.1:
dependencies:
cross-spawn: 7.0.6
@@ -3114,6 +4684,8 @@ snapshots:
std-env@3.10.0: {}
+ string-argv@0.3.2: {}
+
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
@@ -3124,10 +4696,22 @@ snapshots:
strip-json-comments@3.1.1: {}
+ style-mod@4.1.3: {}
+
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ tailwindcss@4.2.2: {}
+
+ tapable@2.3.2: {}
+
term-size@2.2.1: {}
tinybench@2.9.0: {}
@@ -3171,19 +4755,23 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- typescript-eslint@8.50.0(eslint@9.39.2)(typescript@5.9.3):
+ typescript-eslint@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)
- '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
- eslint: 9.39.2
+ '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.2(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
+ typescript@5.8.2: {}
+
typescript@5.9.3: {}
+ ufo@1.6.3: {}
+
undici-types@6.21.0: {}
undici-types@7.16.0: {}
@@ -3192,11 +4780,53 @@ snapshots:
universalify@0.1.2: {}
+ universalify@2.0.1: {}
+
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
- vite@7.3.0(@types/node@25.0.2)(tsx@4.21.0):
+ vite-plugin-dts@4.5.4(@types/node@25.0.2)(rollup@4.54.0)(typescript@5.9.3)(vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)):
+ dependencies:
+ '@microsoft/api-extractor': 7.57.7(@types/node@25.0.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.54.0)
+ '@volar/typescript': 2.4.28
+ '@vue/language-core': 2.2.0(typescript@5.9.3)
+ compare-versions: 6.1.1
+ debug: 4.4.3
+ kolorist: 1.8.0
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ typescript: 5.9.3
+ optionalDependencies:
+ vite: 6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - rollup
+ - supports-color
+
+ vite@6.4.1(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0):
+ dependencies:
+ esbuild: 0.25.12
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.54.0
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.0.2
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.32.0
+ tsx: 4.21.0
+
+ vite@7.3.0(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0):
dependencies:
esbuild: 0.27.1
fdir: 6.5.0(picomatch@4.0.3)
@@ -3207,12 +4837,14 @@ snapshots:
optionalDependencies:
'@types/node': 25.0.2
fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.32.0
tsx: 4.21.0
- vitest@4.0.16(@types/node@25.0.2)(tsx@4.21.0):
+ vitest@4.0.16(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0):
dependencies:
'@vitest/expect': 4.0.16
- '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@25.0.2)(tsx@4.21.0))
+ '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))
'@vitest/pretty-format': 4.0.16
'@vitest/runner': 4.0.16
'@vitest/snapshot': 4.0.16
@@ -3229,7 +4861,7 @@ snapshots:
tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vite: 7.3.0(@types/node@25.0.2)(tsx@4.21.0)
+ vite: 7.3.0(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 25.0.2
@@ -3246,6 +4878,10 @@ snapshots:
- tsx
- yaml
+ vscode-uri@3.1.0: {}
+
+ w3c-keyname@2.2.8: {}
+
webidl-conversions@3.0.1: {}
whatwg-url@5.0.0:
@@ -3264,6 +4900,10 @@ snapshots:
word-wrap@1.2.5: {}
+ yallist@3.1.1: {}
+
+ yallist@4.0.0: {}
+
yocto-queue@0.1.0: {}
yoctocolors@2.1.2: {}