From 19a2da3b7e78a6a51177f1046f6c33e572358457 Mon Sep 17 00:00:00 2001 From: Eric McDaniel Date: Wed, 22 Apr 2026 11:30:19 -0400 Subject: [PATCH] work --- development/features/myst-integration.md | 30 + packages/context-editor/package.json | 12 +- packages/context-editor/src/EditorLayout.tsx | 244 +--- packages/editor-shell/package.json | 35 + packages/editor-shell/src/EditorLayout.tsx | 245 ++++ packages/editor-shell/src/index.ts | 4 + packages/editor-shell/tsconfig.json | 9 + packages/myst-editor/.storybook/main.ts | 20 + packages/myst-editor/.storybook/preview.ts | 17 + packages/myst-editor/package.json | 56 + packages/myst-editor/postcss.config.cjs | 5 + packages/myst-editor/src/MystPreview.tsx | 94 ++ packages/myst-editor/src/MystSourceEditor.tsx | 75 ++ packages/myst-editor/src/index.ts | 4 + packages/myst-editor/src/myst.ts | 44 + .../myst-editor/src/stories/Myst.stories.tsx | 106 ++ packages/myst-editor/src/tailwind.css | 26 + packages/myst-editor/tsconfig.json | 9 + pnpm-lock.yaml | 1169 +++++++++++++++-- 19 files changed, 1862 insertions(+), 342 deletions(-) create mode 100644 packages/editor-shell/package.json create mode 100644 packages/editor-shell/src/EditorLayout.tsx create mode 100644 packages/editor-shell/src/index.ts create mode 100644 packages/editor-shell/tsconfig.json create mode 100644 packages/myst-editor/.storybook/main.ts create mode 100644 packages/myst-editor/.storybook/preview.ts create mode 100644 packages/myst-editor/package.json create mode 100644 packages/myst-editor/postcss.config.cjs create mode 100644 packages/myst-editor/src/MystPreview.tsx create mode 100644 packages/myst-editor/src/MystSourceEditor.tsx create mode 100644 packages/myst-editor/src/index.ts create mode 100644 packages/myst-editor/src/myst.ts create mode 100644 packages/myst-editor/src/stories/Myst.stories.tsx create mode 100644 packages/myst-editor/src/tailwind.css create mode 100644 packages/myst-editor/tsconfig.json diff --git a/development/features/myst-integration.md b/development/features/myst-integration.md index 30f48a4f3e..8778196260 100644 --- a/development/features/myst-integration.md +++ b/development/features/myst-integration.md @@ -85,6 +85,36 @@ This feature is broken into four phases. Each phase is independently shippable a - Phase 1 (fullscreen/preview layout) +### Implementation Plan + +**First slice:** Rather than tackle the full scope at once, start with (a) a MyST *source* editing mode that slots into the existing `EditorLayout` as an alternative to ProseMirror, and (b) client-side MyST → HTML preview. Defer ProseMirror ↔ MyST roundtrip, storage schema changes, and server-side rendering to a later sub-phase. + +**Approach:** Treat ProseMirror and MyST as **parallel content tracks per field** (a mode toggle, not a conversion). Addresses the "Roundtrip fidelity" open question by sidestepping it: in v1, a field is authored in one mode or the other, and switching modes does not attempt to convert existing content. Tradeoff: no seamless migration yet; users who start in ProseMirror can't carry their doc into MyST without manual re-entry. + +**Key anchors in current code:** + +- `EditorLayout` — `packages/context-editor/src/EditorLayout.tsx` (display/panes state, formatting-bar slot; the new source mode is another state dimension alongside these) +- `PreviewPanel` — `packages/context-editor/src/components/PreviewPanel.tsx` (HTML render target; MyST preview mirrors this API) +- CodeMirror 6 deps already in `packages/context-editor/package.json` (including `@codemirror/lang-markdown`) — no new CM deps needed for v1 + +**MyST rendering stack (client-side):** `myst-parser` + `myst-to-html` + `unified` + `rehype-stringify`. All ESM, browser-safe (Vite-friendly), jupyter-book/mystmd. No `mystmd` CLI dep. Per-published-package size is small; parsing is synchronous via `processSync`. + +**Steps:** + +1. Add `myst-parser`, `myst-to-html`, `unified`, `rehype-stringify` to `packages/context-editor`. +2. `MystSourceEditor` — new component wrapping CodeMirror 6 with `@codemirror/lang-markdown`. Accepts `initialSource: string`, emits `onChange(source)`. No MyST-specific highlighting in v1 (no CM6 MyST grammar exists); directives render as code-fence-ish blocks. Acceptable gap. +3. `MystPreview` — mirrors `PreviewPanel`; accepts `source: string`, debounces, pipes through the mystmd pipeline to an HTML string, renders via `dangerouslySetInnerHTML`. +4. Extend `EditorLayout` with `sourceMode: "prosemirror" | "myst"` state + a toggle button (placed near the existing view controls). When `myst`, the editor pane renders `MystSourceEditor` instead of `ContextEditor`, and the preview pane renders `MystPreview`. +5. Storybook story seeding a MyST sample (admonition, figure, math, frontmatter) to verify rendering. + +**Out of scope for this slice:** + +- ProseMirror ↔ MyST conversion (round-trip or one-way) +- Persisting MyST source to the DB (new schema, migration, field type) — preview works from in-memory state only +- Server-side / site-builder rendering — Phase 4 +- MyST-specific CodeMirror syntax highlighting — deferred until an upstream grammar exists or we write one +- Custom PubPub directives (`:::{pub}`) — Phase 3 + --- ## Phase 3: Custom Directives and Pub Includes diff --git a/packages/context-editor/package.json b/packages/context-editor/package.json index f70827daad..17ca42def5 100644 --- a/packages/context-editor/package.json +++ b/packages/context-editor/package.json @@ -40,6 +40,7 @@ "@types/react": "catalog:react19", "@types/react-dom": "catalog:react19", "@types/uuid": "^9.0.8", + "@typescript/native-preview": "catalog:", "@uiw/react-json-view": "2.0.0-alpha.27", "@vitejs/plugin-react": "catalog:", "prosemirror-dev-tools": "^4.2.0", @@ -48,7 +49,6 @@ "tailwindcss": "catalog:", "tsconfig": "workspace:*", "typescript": "catalog:", - "@typescript/native-preview": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, @@ -87,8 +87,10 @@ "@lezer/python": "^1.1.18", "@lezer/rust": "^1.0.2", "@lezer/xml": "^1.0.6", + "@pubpub/tailwind": "workspace:*", "@sinclair/typebox": "catalog:", "deepmerge": "^4.3.1", + "editor-shell": "workspace:*", "fuzzy": "^0.1.3", "install": "^0.13.0", "katex": "catalog:", @@ -113,7 +115,6 @@ "react-dom": "catalog:react19", "react-hook-form": "catalog:", "react-reconciler": "catalog:react19", - "@pubpub/tailwind": "workspace:*", "schemas": "workspace:*", "ui": "workspace:*", "utils": "workspace:*", @@ -130,6 +131,11 @@ "./tailwind.config.cjs": "./tailwind.config.cjs" } }, - "entrypoints": ["index.ts", "schemas/index.ts", "utils/index.ts", "utils/serialize.ts"] + "entrypoints": [ + "index.ts", + "schemas/index.ts", + "utils/index.ts", + "utils/serialize.ts" + ] } } diff --git a/packages/context-editor/src/EditorLayout.tsx b/packages/context-editor/src/EditorLayout.tsx index e514943691..676f1565d9 100644 --- a/packages/context-editor/src/EditorLayout.tsx +++ b/packages/context-editor/src/EditorLayout.tsx @@ -1,21 +1,18 @@ "use client" import type { EditorState } from "prosemirror-state" -import type { ReactNode } from "react" -import React, { useCallback, useEffect, useState } from "react" -import { createPortal } from "react-dom" -import { Columns2, Expand, Eye, PencilLine, Shrink } from "lucide-react" +import React, { useCallback, useState } from "react" +import { EditorLayout as ShellEditorLayout } from "editor-shell" -import { cn } from "utils" +import type { EditorDisplayMode, EditorPaneMode } from "editor-shell" import type { ContextEditorProps } from "./ContextEditor" import ContextEditor from "./ContextEditor" import { PreviewPanel } from "./components/PreviewPanel" -export type EditorDisplayMode = "inline" | "fullscreen" -export type EditorPaneMode = "editor" | "split" | "preview" +export type { EditorDisplayMode, EditorPaneMode } from "editor-shell" export interface EditorLayoutProps extends ContextEditorProps { initialDisplay?: EditorDisplayMode @@ -24,18 +21,21 @@ export interface EditorLayoutProps extends ContextEditorProps { containerClassName?: string } +/** + * ProseMirror-flavored EditorLayout: wraps editor-shell's generic layout with + * ContextEditor as the editor pane and a PreviewPanel rendering the PM doc + * as HTML. Other editor surfaces (e.g. myst-editor) compose the shell + * themselves with their own editor + preview. + */ export const EditorLayout = (props: EditorLayoutProps) => { const { initialDisplay = "inline", initialPanes = "editor", - onChange, containerClassName, + onChange, ...editorProps } = props - const [display, setDisplay] = useState(initialDisplay) - const [panes, setPanes] = useState(initialPanes) - const [mobileTab, setMobileTab] = useState<"editor" | "preview">("editor") const [editorState, setEditorState] = useState(null) const [toolbarSlot, setToolbarSlot] = useState(null) @@ -47,217 +47,25 @@ export const EditorLayout = (props: EditorLayoutProps) => { [onChange] ) - useEffect(() => { - if (display !== "fullscreen") { - return - } - const onKey = (e: KeyboardEvent) => { - if (e.key === "Escape") { - setDisplay("inline") - } - } - window.addEventListener("keydown", onKey) - return () => window.removeEventListener("keydown", onKey) - }, [display]) - - useEffect(() => { - if (display !== "fullscreen") { - return - } - const prev = document.body.style.overflow - document.body.style.overflow = "hidden" - return () => { - document.body.style.overflow = prev - } - }, [display]) - - const rootClass = cn( - "relative flex flex-col bg-background", - display === "fullscreen" - ? "fixed inset-0 z-50 h-dvh w-dvw" - : cn("h-full", containerClassName) - ) - - // Preserve content across the remount that happens when toggling fullscreen - // (portal → non-portal). Undo history is lost, but the doc is preserved. const mountDoc = editorState?.doc ?? editorProps.initialDoc - // In fullscreen the outer layout sizes the editor; drop any inline-mode - // sizing className (e.g. `h-96 overflow-scroll`) that would constrain it. - const innerClassName = display === "fullscreen" ? undefined : editorProps.className - - const tree = ( -
-
-
- -
- - } - preview={ - - } - /> -
- ) - - if (display === "fullscreen" && typeof document !== "undefined") { - return createPortal(tree, document.body) - } - return tree -} - -interface LayoutToolbarProps { - display: EditorDisplayMode - panes: EditorPaneMode - onDisplayChange: (next: EditorDisplayMode) => void - onPanesChange: (next: EditorPaneMode) => void -} - -const LayoutToolbar = ({ - display, - panes, - onDisplayChange, - onPanesChange, -}: LayoutToolbarProps) => { - const paneOptions: { value: EditorPaneMode; label: string; icon: ReactNode }[] = [ - { value: "editor", label: "Editor", icon: }, - { value: "split", label: "Split", icon: }, - { value: "preview", label: "Preview", icon: }, - ] return ( -
-
- {paneOptions.map((opt) => ( - - ))} -
- -
- ) -} - -interface LayoutBodyProps { - panes: EditorPaneMode - mobileTab: "editor" | "preview" - onMobileTabChange: (next: "editor" | "preview") => void - editor: ReactNode - preview: ReactNode -} - -const LayoutBody = ({ panes, mobileTab, onMobileTabChange, editor, preview }: LayoutBodyProps) => { - const editorVisibility = paneVisibility("editor", panes, mobileTab) - const previewVisibility = paneVisibility("preview", panes, mobileTab) - - return ( -
- {panes === "split" && ( -
- {(["editor", "preview"] as const).map((tab) => ( - - ))} -
- )} -
- {editor} -
-
- {preview} -
-
+ + } + preview={} + /> ) } -const paneVisibility = ( - pane: "editor" | "preview", - panes: EditorPaneMode, - mobileTab: "editor" | "preview" -): string => { - if (panes === "editor") { - return pane === "editor" ? "block" : "hidden" - } - if (panes === "preview") { - return pane === "preview" ? "block" : "hidden" - } - return pane === mobileTab ? "block md:block" : "hidden md:block" -} - export default EditorLayout diff --git a/packages/editor-shell/package.json b/packages/editor-shell/package.json new file mode 100644 index 0000000000..784ff6a4fd --- /dev/null +++ b/packages/editor-shell/package.json @@ -0,0 +1,35 @@ +{ + "name": "editor-shell", + "type": "module", + "version": "0.0.1", + "exports": { + ".": "./dist/editor-shell.js", + "./package.json": "./package.json" + }, + "scripts": { + "type-check": "tsc --noEmit", + "type-check:go": "tsgo --noEmit" + }, + "devDependencies": { + "@types/react": "catalog:react19", + "@types/react-dom": "catalog:react19", + "tsconfig": "workspace:*", + "typescript": "catalog:", + "@typescript/native-preview": "catalog:" + }, + "dependencies": { + "lucide-react": "^0.469.0", + "react": "catalog:react19", + "react-dom": "catalog:react19", + "utils": "workspace:*" + }, + "preconstruct": { + "entrypoints": ["index.ts"], + "exports": true, + "___experimentalFlags_WILL_CHANGE_IN_PATCH": { + "typeModule": true, + "distInRoot": true, + "importsConditions": true + } + } +} diff --git a/packages/editor-shell/src/EditorLayout.tsx b/packages/editor-shell/src/EditorLayout.tsx new file mode 100644 index 0000000000..02473a1513 --- /dev/null +++ b/packages/editor-shell/src/EditorLayout.tsx @@ -0,0 +1,245 @@ +"use client" + +import type { ReactNode } from "react" + +import React, { useEffect, useState } from "react" +import { createPortal } from "react-dom" +import { Columns2, Expand, Eye, PencilLine, Shrink } from "lucide-react" + +import { cn } from "utils" + +export type EditorDisplayMode = "inline" | "fullscreen" +export type EditorPaneMode = "editor" | "split" | "preview" + +export interface EditorLayoutProps { + /** Content of the editor pane. */ + editor: ReactNode + /** Content of the preview pane. */ + preview: ReactNode + /** + * Called with the formatting-bar slot DOM node whenever it mounts. + * Consumers can pass this node to editor implementations that portal + * a toolbar into it (e.g. ContextEditor's `toolbarContainer` prop). + */ + onToolbarSlotChange?: (slot: HTMLDivElement | null) => void + /** Extra controls rendered in the toolbar, left of the pane + fullscreen buttons. */ + extraToolbarControls?: ReactNode + initialDisplay?: EditorDisplayMode + initialPanes?: EditorPaneMode + /** Outer wrapper className (applied in inline mode only). */ + containerClassName?: string +} + +export const EditorLayout = ({ + editor, + preview, + onToolbarSlotChange, + extraToolbarControls, + initialDisplay = "inline", + initialPanes = "editor", + containerClassName, +}: EditorLayoutProps) => { + const [display, setDisplay] = useState(initialDisplay) + const [panes, setPanes] = useState(initialPanes) + const [mobileTab, setMobileTab] = useState<"editor" | "preview">("editor") + + useEffect(() => { + if (display !== "fullscreen") { + return + } + const onKey = (e: KeyboardEvent) => { + if (e.key === "Escape") { + setDisplay("inline") + } + } + window.addEventListener("keydown", onKey) + return () => window.removeEventListener("keydown", onKey) + }, [display]) + + useEffect(() => { + if (display !== "fullscreen") { + return + } + const prev = document.body.style.overflow + document.body.style.overflow = "hidden" + return () => { + document.body.style.overflow = prev + } + }, [display]) + + const rootClass = cn( + "relative flex flex-col bg-background", + display === "fullscreen" + ? "fixed inset-0 z-50 h-dvh w-dvw" + : cn("h-full", containerClassName) + ) + + const tree = ( +
+
+
+ +
+ +
+ ) + + if (display === "fullscreen" && typeof document !== "undefined") { + return createPortal(tree, document.body) + } + return tree +} + +interface LayoutToolbarProps { + display: EditorDisplayMode + panes: EditorPaneMode + onDisplayChange: (next: EditorDisplayMode) => void + onPanesChange: (next: EditorPaneMode) => void + extraControls?: ReactNode +} + +const LayoutToolbar = ({ + display, + panes, + onDisplayChange, + onPanesChange, + extraControls, +}: LayoutToolbarProps) => { + const paneOptions: { value: EditorPaneMode; label: string; icon: ReactNode }[] = [ + { value: "editor", label: "Editor", icon: }, + { value: "split", label: "Split", icon: }, + { value: "preview", label: "Preview", icon: }, + ] + return ( +
+ {extraControls} +
+ {paneOptions.map((opt) => ( + + ))} +
+ +
+ ) +} + +interface LayoutBodyProps { + panes: EditorPaneMode + mobileTab: "editor" | "preview" + onMobileTabChange: (next: "editor" | "preview") => void + editor: ReactNode + preview: ReactNode +} + +const LayoutBody = ({ panes, mobileTab, onMobileTabChange, editor, preview }: LayoutBodyProps) => { + const editorVisibility = paneVisibility("editor", panes, mobileTab) + const previewVisibility = paneVisibility("preview", panes, mobileTab) + + return ( +
+ {panes === "split" && ( +
+ {(["editor", "preview"] as const).map((tab) => ( + + ))} +
+ )} +
+ {editor} +
+
+ {preview} +
+
+ ) +} + +const paneVisibility = ( + pane: "editor" | "preview", + panes: EditorPaneMode, + mobileTab: "editor" | "preview" +): string => { + if (panes === "editor") { + return pane === "editor" ? "block" : "hidden" + } + if (panes === "preview") { + return pane === "preview" ? "block" : "hidden" + } + return pane === mobileTab ? "block md:block" : "hidden md:block" +} + +export default EditorLayout diff --git a/packages/editor-shell/src/index.ts b/packages/editor-shell/src/index.ts new file mode 100644 index 0000000000..efe438d2a2 --- /dev/null +++ b/packages/editor-shell/src/index.ts @@ -0,0 +1,4 @@ +import { EditorLayout } from "./EditorLayout" + +export { EditorLayout } +export * from "./EditorLayout" diff --git a/packages/editor-shell/tsconfig.json b/packages/editor-shell/tsconfig.json new file mode 100644 index 0000000000..b3dae4411d --- /dev/null +++ b/packages/editor-shell/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "tsconfig/react-library.json", + "compilerOptions": { + "noEmit": true, + "jsx": "react" + }, + "include": ["."], + "exclude": ["dist", "build", "node_modules"] +} diff --git a/packages/myst-editor/.storybook/main.ts b/packages/myst-editor/.storybook/main.ts new file mode 100644 index 0000000000..b267bf3ece --- /dev/null +++ b/packages/myst-editor/.storybook/main.ts @@ -0,0 +1,20 @@ +import type { StorybookConfig } from "@storybook/react-vite" + +import { dirname, join } from "node:path" + +function getAbsolutePath(value: string): any { + return dirname(require.resolve(join(value, "package.json"))) +} +const config: StorybookConfig = { + stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + getAbsolutePath("@storybook/addon-links"), + getAbsolutePath("@chromatic-com/storybook"), + getAbsolutePath("@storybook/addon-docs"), + ], + framework: { + name: getAbsolutePath("@storybook/react-vite"), + options: {}, + }, +} +export default config diff --git a/packages/myst-editor/.storybook/preview.ts b/packages/myst-editor/.storybook/preview.ts new file mode 100644 index 0000000000..748d1b2f93 --- /dev/null +++ b/packages/myst-editor/.storybook/preview.ts @@ -0,0 +1,17 @@ +import type { Preview } from "@storybook/react" + +import "@pubpub/tailwind/style.css" +import "../src/tailwind.css" + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, +} + +export default preview diff --git a/packages/myst-editor/package.json b/packages/myst-editor/package.json new file mode 100644 index 0000000000..3901d1244c --- /dev/null +++ b/packages/myst-editor/package.json @@ -0,0 +1,56 @@ +{ + "name": "myst-editor", + "type": "module", + "version": "0.0.1", + "exports": { + ".": "./dist/myst-editor.js", + "./package.json": "./package.json" + }, + "scripts": { + "type-check": "tsc --noEmit", + "type-check:go": "tsgo --noEmit", + "storybook": "storybook dev -p 6007 --no-open", + "build-storybook": "storybook build" + }, + "devDependencies": { + "@chromatic-com/storybook": "^4.1.1", + "@storybook/addon-docs": "^9.1.2", + "@storybook/addon-links": "^9.1.2", + "@storybook/react-vite": "^9.1.2", + "@tailwindcss/postcss": "^4.1.17", + "@tailwindcss/typography": "^0.5.16", + "@types/react": "catalog:react19", + "@types/react-dom": "catalog:react19", + "@vitejs/plugin-react": "catalog:", + "storybook": "^9.1.2", + "tailwindcss": "catalog:", + "tsconfig": "workspace:*", + "typescript": "catalog:", + "@typescript/native-preview": "catalog:", + "vite": "catalog:" + }, + "dependencies": { + "@codemirror/commands": "^6.8.1", + "@codemirror/lang-markdown": "^6.3.4", + "@codemirror/language": "^6.11.3", + "@codemirror/state": "^6.5.2", + "@codemirror/view": "^6.38.1", + "@pubpub/tailwind": "workspace:*", + "editor-shell": "workspace:*", + "katex": "catalog:", + "myst-parser": "^1.7.1", + "myst-to-html": "^1.7.1", + "react": "catalog:react19", + "react-dom": "catalog:react19", + "utils": "workspace:*" + }, + "preconstruct": { + "entrypoints": ["index.ts"], + "exports": true, + "___experimentalFlags_WILL_CHANGE_IN_PATCH": { + "typeModule": true, + "distInRoot": true, + "importsConditions": true + } + } +} diff --git a/packages/myst-editor/postcss.config.cjs b/packages/myst-editor/postcss.config.cjs new file mode 100644 index 0000000000..a399d1d880 --- /dev/null +++ b/packages/myst-editor/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + "@tailwindcss/postcss": {}, + }, +} diff --git a/packages/myst-editor/src/MystPreview.tsx b/packages/myst-editor/src/MystPreview.tsx new file mode 100644 index 0000000000..74450dc8fb --- /dev/null +++ b/packages/myst-editor/src/MystPreview.tsx @@ -0,0 +1,94 @@ +"use client" + +import React, { useEffect, useRef, useState } from "react" +import katex from "katex" + +import "katex/dist/katex.min.css" + +import { cn } from "utils" + +import { mystSourceToHtml } from "./myst" + +const renderMathIn = (root: HTMLElement) => { + const apply = (selector: string, displayMode: boolean) => { + root.querySelectorAll(selector).forEach((el) => { + if (el.dataset.katexRendered === "true") { + return + } + try { + katex.render(el.textContent ?? "", el, { + displayMode, + throwOnError: false, + }) + el.dataset.katexRendered = "true" + } catch { + // leave raw LaTeX in place on failure + } + }) + } + apply(".math-display", true) + apply(".math-inline", false) +} + +interface MystPreviewProps { + source: string + debounceMs?: number + className?: string +} + +export const MystPreview = ({ source, debounceMs = 150, className }: MystPreviewProps) => { + const [html, setHtml] = useState("") + const [error, setError] = useState(null) + const timerRef = useRef(null) + const containerRef = useRef(null) + + useEffect(() => { + if (timerRef.current !== null) { + window.clearTimeout(timerRef.current) + } + timerRef.current = window.setTimeout(() => { + try { + setHtml(mystSourceToHtml(source)) + setError(null) + } catch (err) { + setError(err instanceof Error ? err.message : String(err)) + } + }, debounceMs) + return () => { + if (timerRef.current !== null) { + window.clearTimeout(timerRef.current) + } + } + }, [source, debounceMs]) + + useEffect(() => { + if (containerRef.current && html) { + renderMathIn(containerRef.current) + } + }, [html]) + + if (error) { + return ( +
+
MyST parse error
+
{error}
+
+ ) + } + + return ( +
+ ) +} diff --git a/packages/myst-editor/src/MystSourceEditor.tsx b/packages/myst-editor/src/MystSourceEditor.tsx new file mode 100644 index 0000000000..9852ccbd04 --- /dev/null +++ b/packages/myst-editor/src/MystSourceEditor.tsx @@ -0,0 +1,75 @@ +"use client" + +import React, { useEffect, useRef } from "react" +import { defaultKeymap, history, historyKeymap } from "@codemirror/commands" +import { markdown, markdownLanguage } from "@codemirror/lang-markdown" +import { defaultHighlightStyle, syntaxHighlighting } from "@codemirror/language" +import { EditorState } from "@codemirror/state" +import { EditorView, highlightActiveLine, keymap, lineNumbers } from "@codemirror/view" + +import { cn } from "utils" + +export interface MystSourceEditorProps { + initialSource?: string + onChange?: (source: string) => void + className?: string + disabled?: boolean +} + +export const MystSourceEditor = ({ + initialSource = "", + onChange, + className, + disabled, +}: MystSourceEditorProps) => { + const containerRef = useRef(null) + const viewRef = useRef(null) + const onChangeRef = useRef(onChange) + onChangeRef.current = onChange + + useEffect(() => { + if (!containerRef.current) { + return + } + const state = EditorState.create({ + doc: initialSource, + extensions: [ + lineNumbers(), + highlightActiveLine(), + history(), + keymap.of([...defaultKeymap, ...historyKeymap]), + markdown({ base: markdownLanguage }), + syntaxHighlighting(defaultHighlightStyle, { fallback: true }), + EditorView.editable.of(!disabled), + EditorView.lineWrapping, + EditorView.updateListener.of((update) => { + if (update.docChanged && onChangeRef.current) { + onChangeRef.current(update.state.doc.toString()) + } + }), + EditorView.theme({ + "&": { height: "100%", fontSize: "14px" }, + ".cm-scroller": { + fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, monospace", + }, + }), + ], + }) + const view = new EditorView({ state, parent: containerRef.current }) + viewRef.current = view + return () => { + view.destroy() + viewRef.current = null + } + // Editor is uncontrolled — only mount once. Prop changes do not re-create it. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + return ( +
+ ) +} diff --git a/packages/myst-editor/src/index.ts b/packages/myst-editor/src/index.ts new file mode 100644 index 0000000000..9087f30bc5 --- /dev/null +++ b/packages/myst-editor/src/index.ts @@ -0,0 +1,4 @@ +export { MystSourceEditor } from "./MystSourceEditor" +export type { MystSourceEditorProps } from "./MystSourceEditor" +export { MystPreview } from "./MystPreview" +export { mystSourceToHtml } from "./myst" diff --git a/packages/myst-editor/src/myst.ts b/packages/myst-editor/src/myst.ts new file mode 100644 index 0000000000..51b55ac018 --- /dev/null +++ b/packages/myst-editor/src/myst.ts @@ -0,0 +1,44 @@ +import { mystParse } from "myst-parser" +import { mystToHtml } from "myst-to-html" + +type AnyNode = { type: string; children?: AnyNode[]; [k: string]: unknown } + +/** + * Walk the parsed MyST AST and replace unresolved `cite` nodes with a plain + * text placeholder (`[@key]`). Without a bibliography-backed State, mystToHtml + * renders them as empty `
`s and drops the key. Proper citation rendering + * lands in Phase 4 when we have project-wide State. + */ +const stubUnresolvedCitations = (node: AnyNode): void => { + if (!node.children) { + return + } + for (let i = 0; i < node.children.length; i++) { + const child = node.children[i] + if (child.type === "cite") { + const id = (child.identifier as string | undefined) ?? (child.label as string | undefined) + node.children[i] = { + type: "text", + value: id ? `[@${id}]` : "[@?]", + } + continue + } + stubUnresolvedCitations(child) + } +} + +/** + * Parse a MyST markdown source string and render it to HTML. + * + * Phase 2 uses this for the live preview pane. No project-wide transforms + * (cross-refs, real citations against a bibliography, etc.) are applied — + * those require a populated `State` and are deferred until we wire up + * multi-pub rendering in Phase 4. Math nodes are emitted as raw LaTeX in + * `` / `
` elements; + * `MystPreview` runs KaTeX over those after mount. + */ +export const mystSourceToHtml = (source: string): string => { + const tree = mystParse(source) + stubUnresolvedCitations(tree as unknown as AnyNode) + return mystToHtml(tree, { formatHtml: true }) +} diff --git a/packages/myst-editor/src/stories/Myst.stories.tsx b/packages/myst-editor/src/stories/Myst.stories.tsx new file mode 100644 index 0000000000..36d40625a0 --- /dev/null +++ b/packages/myst-editor/src/stories/Myst.stories.tsx @@ -0,0 +1,106 @@ +import type { Meta, StoryObj } from "@storybook/react-vite" + +import React, { useState } from "react" + +import { EditorLayout } from "editor-shell" + +import { MystPreview } from "../MystPreview" +import { MystSourceEditor } from "../MystSourceEditor" + +const sampleMyst = `--- +title: The efficacy of quantum flux transmutation +authors: + - name: Ada Lovelace + affiliations: + - The Analytical Society +--- + +# Introduction + +In this paper, we evaluate the efficacy of **quantum flux transmutation** +under varying field conditions. See @lovelace1843 for prior art. + +:::{important} +All measurements were taken at 2.7 K unless otherwise noted. +::: + +## Method + +The core identity is given by $E = mc^2$, or in display form: + +$$ +\\oint_{\\partial \\Omega} \\mathbf{F} \\cdot d\\mathbf{S} = \\int_\\Omega (\\nabla \\cdot \\mathbf{F})\\, dV +$$ + +\`\`\`python +def transmute(flux: float) -> float: + return flux ** 2 / 137 +\`\`\` + +:::{figure} /image0.jpg +:label: fig-setup +:align: center + +The experimental apparatus. +::: + +| Run | Yield | Notes | +|-----|-------|--------------| +| 1 | 0.42 | baseline | +| 2 | 0.61 | field at 3 T | + +Citations like @lovelace1843 render as [@key] placeholders for now; +cross-reference roles ({ref}) require project-wide State (Phase 4). +` + +interface DemoProps { + initialSource: string + initialDisplay?: "inline" | "fullscreen" + initialPanes?: "editor" | "split" | "preview" + containerClassName?: string +} + +const MystEditorDemo = ({ + initialSource, + initialDisplay, + initialPanes, + containerClassName, +}: DemoProps) => { + const [source, setSource] = useState(initialSource) + return ( + } + preview={} + initialDisplay={initialDisplay} + initialPanes={initialPanes} + containerClassName={containerClassName} + /> + ) +} + +const meta = { + title: "MyST", + component: MystEditorDemo, + parameters: { layout: "fullscreen" }, + tags: ["autodocs"], +} satisfies Meta + +export default meta + +type Story = StoryObj + +export const Split: Story = { + args: { + initialSource: sampleMyst, + initialPanes: "split", + containerClassName: "h-[800px] border rounded-md", + }, +} + +export const Fullscreen: Story = { + args: { + initialSource: sampleMyst, + initialPanes: "split", + initialDisplay: "fullscreen", + }, +} diff --git a/packages/myst-editor/src/tailwind.css b/packages/myst-editor/src/tailwind.css new file mode 100644 index 0000000000..7ffe2a9cb2 --- /dev/null +++ b/packages/myst-editor/src/tailwind.css @@ -0,0 +1,26 @@ +@import "tailwindcss"; + +@plugin "@tailwindcss/typography"; + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-border: var(--border); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-destructive: var(--destructive); +} + +@layer base { + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentcolor); + } +} diff --git a/packages/myst-editor/tsconfig.json b/packages/myst-editor/tsconfig.json new file mode 100644 index 0000000000..be9ad58c68 --- /dev/null +++ b/packages/myst-editor/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "tsconfig/react-library.json", + "compilerOptions": { + "noEmit": true, + "jsx": "react" + }, + "include": [".", "vite-env.d.ts"], + "exclude": ["dist", "build", "node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aaa16b3e72..eb2b0b7ca8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,7 +56,7 @@ catalogs: version: 20.19.11 '@typescript/native-preview': specifier: latest - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 '@vitejs/plugin-react': specifier: ^4.5.0 version: 4.7.0 @@ -646,7 +646,7 @@ importers: version: 9.0.8 '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 '@vitejs/plugin-react': specifier: 'catalog:' version: 4.7.0(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) @@ -761,7 +761,7 @@ importers: version: 19.1.7(@types/react@19.1.10) '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 autoprefixer: specifier: 'catalog:' version: 10.4.21(postcss@8.5.6) @@ -822,7 +822,7 @@ importers: version: 20.19.11 '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 dotenv-cli: specifier: ^7.4.4 version: 7.4.4 @@ -865,7 +865,7 @@ importers: version: 19.1.7(@types/react@19.1.10) '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260209.1 + version: 7.0.0-dev.20260421.1 tsconfig: specifier: workspace:* version: link:../config/tsconfig @@ -986,6 +986,9 @@ importers: deepmerge: specifier: ^4.3.1 version: 4.3.1 + editor-shell: + specifier: workspace:* + version: link:../editor-shell fuzzy: specifier: ^0.1.3 version: 0.1.3 @@ -1124,7 +1127,7 @@ importers: version: 9.0.8 '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 '@uiw/react-json-view': specifier: 2.0.0-alpha.27 version: 2.0.0-alpha.27(@babel/runtime@7.28.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -1173,7 +1176,7 @@ importers: version: 3.51.0(@types/node@20.19.11)(zod@3.25.76) '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 tsconfig: specifier: workspace:* version: link:../../config/tsconfig @@ -1207,7 +1210,7 @@ importers: version: 8.15.5 '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 dotenv-cli: specifier: ^7.4.4 version: 7.4.4 @@ -1236,6 +1239,37 @@ importers: specifier: 'catalog:' version: 3.25.76 + packages/editor-shell: + dependencies: + lucide-react: + specifier: ^0.469.0 + version: 0.469.0(react@19.2.3) + react: + specifier: catalog:react19 + version: 19.2.3 + react-dom: + specifier: catalog:react19 + version: 19.2.3(react@19.2.3) + utils: + specifier: workspace:* + version: link:../utils + devDependencies: + '@types/react': + specifier: catalog:react19 + version: 19.1.10 + '@types/react-dom': + specifier: catalog:react19 + version: 19.1.7(@types/react@19.1.10) + '@typescript/native-preview': + specifier: 'catalog:' + version: 7.0.0-dev.20260421.1 + tsconfig: + specifier: workspace:* + version: link:../../config/tsconfig + typescript: + specifier: 'catalog:' + version: 5.9.2 + packages/emails: dependencies: '@react-email/components': @@ -1243,7 +1277,7 @@ importers: version: 0.0.31(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 browserslist: specifier: ^4.25.3 version: 4.25.3 @@ -1287,7 +1321,7 @@ importers: version: 2.2.0 '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 tsconfig: specifier: workspace:* version: link:../../config/tsconfig @@ -1309,13 +1343,101 @@ importers: version: 20.19.11 '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 + tsconfig: + specifier: workspace:* + version: link:../../config/tsconfig + typescript: + specifier: 'catalog:' + version: 5.9.2 + + packages/myst-editor: + dependencies: + '@codemirror/commands': + specifier: ^6.8.1 + version: 6.8.1 + '@codemirror/lang-markdown': + specifier: ^6.3.4 + version: 6.3.4 + '@codemirror/language': + specifier: ^6.11.3 + version: 6.11.3 + '@codemirror/state': + specifier: ^6.5.2 + version: 6.5.2 + '@codemirror/view': + specifier: ^6.38.1 + version: 6.38.1 + '@pubpub/tailwind': + specifier: workspace:* + version: link:../../config/tailwind + editor-shell: + specifier: workspace:* + version: link:../editor-shell + katex: + specifier: 'catalog:' + version: 0.16.22 + myst-parser: + specifier: ^1.7.1 + version: 1.7.1 + myst-to-html: + specifier: ^1.7.1 + version: 1.7.1 + react: + specifier: catalog:react19 + version: 19.2.3 + react-dom: + specifier: catalog:react19 + version: 19.2.3(react@19.2.3) + utils: + specifier: workspace:* + version: link:../utils + devDependencies: + '@chromatic-com/storybook': + specifier: ^4.1.1 + version: 4.1.1(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + '@storybook/addon-docs': + specifier: ^9.1.2 + version: 9.1.2(@types/react@19.1.10)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + '@storybook/addon-links': + specifier: ^9.1.2 + version: 9.1.2(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + '@storybook/react-vite': + specifier: ^9.1.2 + version: 9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.46.4)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + '@tailwindcss/postcss': + specifier: ^4.1.17 + version: 4.1.17 + '@tailwindcss/typography': + specifier: ^0.5.16 + version: 0.5.16(tailwindcss@4.1.17) + '@types/react': + specifier: catalog:react19 + version: 19.1.10 + '@types/react-dom': + specifier: catalog:react19 + version: 19.1.7(@types/react@19.1.10) + '@typescript/native-preview': + specifier: 'catalog:' + version: 7.0.0-dev.20260421.1 + '@vitejs/plugin-react': + specifier: 'catalog:' + version: 4.7.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + storybook: + specifier: ^9.1.2 + version: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + tailwindcss: + specifier: 'catalog:' + version: 4.1.17 tsconfig: specifier: workspace:* version: link:../../config/tsconfig typescript: specifier: 'catalog:' version: 5.9.2 + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) packages/schemas: dependencies: @@ -1334,7 +1456,7 @@ importers: devDependencies: '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 react: specifier: catalog:react19 version: 19.2.3 @@ -1560,7 +1682,7 @@ importers: version: 19.1.10 '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 react: specifier: catalog:react19 version: 19.2.3 @@ -1585,7 +1707,7 @@ importers: devDependencies: '@typescript/native-preview': specifier: 'catalog:' - version: 7.0.0-dev.20260119.1 + version: 7.0.0-dev.20260421.1 tsconfig: specifier: workspace:* version: link:../../config/tsconfig @@ -7083,6 +7205,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/extend@3.0.4': + resolution: {integrity: sha512-ArMouDUTJEz1SQRpFsT2rIw7DeqICFv5aaVzLSIYMYQSLcwcGOfT3VyglQs/p7K3F7fT4zxr0NWxYZIdifD6dA==} + '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} @@ -7117,6 +7242,9 @@ packages: '@types/katex@0.16.7': resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + '@types/linkify-it@3.0.5': + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} @@ -7129,12 +7257,21 @@ packages: '@types/lodash@4.17.20': resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/markdown-it@13.0.9': + resolution: {integrity: sha512-1XPwR0+MgXLWfTn9gCsZ55AHOKW1WN+P9vr0PaQh5aerR9LLQXUbjfEAFhjmEmyoYFWAyuN2Mqkn40MZ4ukjBw==} + '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdurl@1.0.5': + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} @@ -7190,6 +7327,9 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/parse5@6.0.3': + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + '@types/pg-pool@2.0.6': resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} @@ -7273,82 +7413,43 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260119.1': - resolution: {integrity: sha512-siuRD9Shh5gVrgYG5HEWxFxG/dkZa4ndupGWKMfM4DwMG7zLeFayi6sB9yiwpD0d203ts01D7uTnTCALdiWXmQ==} - cpu: [arm64] - os: [darwin] - - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260209.1': - resolution: {integrity: sha512-TyFP7dGMo/Xz37MI3QNfGl3J2i8AKurYwLLD+bG0EDLWnz213wwBwN6U9vMcyatBzfdxKEHHPgdNP0UYCVx3kQ==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260421.1': + resolution: {integrity: sha512-PD0Is1LGop/6dGGGj2q+SA8UikzVGvB4TGFFq6O9lhyaYedlw9jgG3mqsdF/+6R/kdU+xBsfSxYZjv95901eXA==} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260119.1': - resolution: {integrity: sha512-ivqxCrbLXUqZU1OMojVRCnVx5gC/twgi7gKzBXMBLGOgfTkhajbHk/71J3OQhJwzR3T2ISG6FTfXKHhQMtgkkg==} - cpu: [x64] - os: [darwin] - - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260209.1': - resolution: {integrity: sha512-1Dr8toDQcmqKjXd5cQoTAjzMR46cscaojQiazbAPJsU/1PQFgBT36/Mb/epLpzN+ZKKgf7Xd6u2eqH2ze0kF6Q==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260421.1': + resolution: {integrity: sha512-PAj/v0rQksH619ZWc8fsnxff0zbb2r1oFd0gyWRbFqB/fgVu61PCy/AeH3gaD3CDSk8CfkfnmQbk6EAbx0ou5g==} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260119.1': - resolution: {integrity: sha512-ttNri2Ui1CzlLnPJN0sQ4XBgrCMq4jjtxouitRGh7+YlToG561diLERjOwIhNfTzPDKRMS7XO090WoepbvzFpA==} - cpu: [arm64] - os: [linux] - - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260209.1': - resolution: {integrity: sha512-xmGrxP0ERLeczerjJtask6gOln/QhAeELqTmaNoATvU7hZfEzDDxJOgSXZnX6bCIQHdN/Xn49gsyPjzTaK4rAg==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260421.1': + resolution: {integrity: sha512-NPcsItvtSWd9TDaeJsn2dQ+K9Q+NVFN15Nlef6uEXLvuSzZaolYD2WCAOnpf+8LJwKA4iJeki8hMet9+7l2BiA==} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260119.1': - resolution: {integrity: sha512-Bev1d6NCgCmcGOgmdFG514tWRt2lNUSFjQ9RVnN86tSm+bl5p9Lv6TQjc38Ow9vY11J71IZs9HNN1AKWfBCj2Q==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260421.1': + resolution: {integrity: sha512-ticgDfcqJhIAuSZPCHUMir7YMD9MeH3dN0KatnLill9DTnJCc4OTGkMXQT4MOnn5ughG72D1TkpOF2g7/g1EVQ==} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260209.1': - resolution: {integrity: sha512-svmoHHjs5gDekSDW6yLzk9iyDxhMnLKJZ9Xk6b1bSz0swrQNPPTJdR7mbhVMrv4HtXei0LHPlXdTr85AqI5qOQ==} - cpu: [arm] - os: [linux] - - '@typescript/native-preview-linux-x64@7.0.0-dev.20260119.1': - resolution: {integrity: sha512-mwsjGZqUKju3SKPzlDuKhKgt9Ht8seA5OBhorvRZk2B5lwlH0gDsApGK4t50TcnzjpbWI85FVxI6wTq1T36dMg==} - cpu: [x64] - os: [linux] - - '@typescript/native-preview-linux-x64@7.0.0-dev.20260209.1': - resolution: {integrity: sha512-cK4XK3L7TXPj9fIalQcXRqSErdM+pZSqiNgp6QtNsNCyoH2W6J281hnjUA4TmD4TRMSn8CRn7Exy3CGNC3gZkA==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260421.1': + resolution: {integrity: sha512-2k/5/nyJsKR3+Vvvmzh53NjwpTM9781AYRHitYP4hmg4o2dZLn3Yjbp65p1UR8X+/wdaz/nbyh40jCR0mhC/YA==} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260119.1': - resolution: {integrity: sha512-463QnUaRCUhY/Flj/XinORTbBYuxoMthgJiBU1vu7mipLo2Yaipkkgn1ArGHkV9mjWBa7QIPCWg/V2KIEoVdcA==} - cpu: [arm64] - os: [win32] - - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260209.1': - resolution: {integrity: sha512-U919FWN5FZG/1i75+Cv9mnd80Mw2rdFE/to/wJ6DX9m0dUL8IfZARQYPGDXDO1LEC6sV3CyCpCJ/HqsSkqgaAg==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260421.1': + resolution: {integrity: sha512-PMtBYdXPdgcfBnR6tGYGNpJ3k+QO/nPLVwP69qe8QOheqlQV8pC/Cg6KBUPBlZggkx1zz0sOck/eEKA32UVsDA==} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260119.1': - resolution: {integrity: sha512-039WAg5xJjqrRYVHMR9Y2y83dYSLofbyx/22Gc6ur3b/nR8u1wdErK9uwrguL3lxpKDo6qdhnkGlbX8FP0Bz+g==} - cpu: [x64] - os: [win32] - - '@typescript/native-preview-win32-x64@7.0.0-dev.20260209.1': - resolution: {integrity: sha512-1U/2fG/A1yZtkP59IkDlOVLw2cPtP6NbLROtTytNN0CLSqme+0OXoh+l7wlN2iSmGY5zIeaVcqs4UIL0SiQInQ==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260421.1': + resolution: {integrity: sha512-OpkmtYkxiT3y4eEnqcG7UJ4W7/Mw93xtMPBL/kT4HXl8qB3oflK0XPeKBpDcL7n5CA+04igr00OvTf/j5qjj5Q==} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260119.1': - resolution: {integrity: sha512-Tf74TdJVJlLRMN0W9VXK8jc0Gor9+wFRm40qTLt2JeHiPpSF5TEN/pHPjlf4Id1wDSJXH9p5/U1wFS3s5TS2PQ==} - hasBin: true - - '@typescript/native-preview@7.0.0-dev.20260209.1': - resolution: {integrity: sha512-UdA8RC9ic/qi9ajolQQP7ZG8YwtUbxtTMu6FxKBn4pYWicuXqMjzXqH/Ng+VlqqeYrl088P4Ou0erGPuLu4ajw==} + '@typescript/native-preview@7.0.0-dev.20260421.1': + resolution: {integrity: sha512-j1nJzzUovuy7LJmJk87OqwVIPZIdZysdMBabPBGxIXT+kHltdzc+019G2CtNtGAKV6sxHM6pbxMYi0cI6wZ20g==} hasBin: true '@typescript/vfs@1.6.1': @@ -7654,6 +7755,7 @@ packages: '@xmldom/xmldom@0.9.8': resolution: {integrity: sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A==} engines: {node: '>=14.6'} + deprecated: this version has critical issues, please update to the latest version '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -7950,6 +8052,9 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.12.0: resolution: {integrity: sha512-HcOcTudTeEWgbHh0Y1Tyb6fdeR71m4b/QACf0D4KswGTsNeIJQmg38mRENZPAYPZvGFN3fk3604XbQEPdxXdKg==} @@ -8401,6 +8506,9 @@ packages: create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + credit-roles@2.1.0: + resolution: {integrity: sha512-wt1jw7lDnzY1Ob4cDHpXboN4Bfu6l7reKal0zxtKnxogqw916l+Iu862LxIze4U4y44ssAd0TOQqVg2cXY2V6Q==} + crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} @@ -8419,6 +8527,9 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} + css-selector-parser@1.4.1: + resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -8769,6 +8880,9 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + doi-utils@2.0.6: + resolution: {integrity: sha512-QkaDmWbr5lIugDgl9fCxDMos2OJJ9Rp4c9XB7wgRGm6hJQ+hgeqI78DqToU8+vmtU+1XAyyVYJoLZUAgBdsFtg==} + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -8856,6 +8970,10 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} + entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -9298,20 +9416,23 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@11.0.3: resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -9321,6 +9442,7 @@ packages: glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} @@ -9431,6 +9553,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-embedded@2.0.1: + resolution: {integrity: sha512-QUdSOP1/o+/TxXtpPFXR2mUg2P+ySrmlX7QjwHZCXqMFyYk7YmcGSvqRW+4XgXAoHifdE1t2PwFaQK33TqVjSw==} + hast-util-embedded@3.0.0: resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} @@ -9446,33 +9571,57 @@ packages: hast-util-from-html@2.0.3: resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + hast-util-from-parse5@7.1.2: + resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + hast-util-has-property@2.0.1: + resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==} + hast-util-has-property@3.0.0: resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + hast-util-is-body-ok-link@2.0.0: + resolution: {integrity: sha512-S58hCexyKdD31vMsErvgLfflW6vYWo/ixRLPJTtkOvLld24vyI8vmYmkgLA5LG3la2ME7nm7dLGdm48gfLRBfw==} + hast-util-is-body-ok-link@3.0.1: resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + hast-util-is-element@2.1.3: + resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==} + hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} hast-util-minify-whitespace@1.0.1: resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + hast-util-phrasing@2.0.2: + resolution: {integrity: sha512-yGkCfPkkfCyiLfK6KEl/orMDr/zgCnq/NaO9HfULx6/Zga5fso5eqQA5Ov/JZVqACygvw9shRYWgXNcG2ilo7w==} + hast-util-phrasing@3.0.1: resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + hast-util-raw@7.2.3: + resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} + hast-util-raw@9.1.0: resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} hast-util-to-estree@3.1.3: resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + hast-util-to-html@8.0.4: + resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + hast-util-to-html@9.0.5: resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} @@ -9482,9 +9631,15 @@ packages: hast-util-to-mdast@10.1.2: resolution: {integrity: sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==} + hast-util-to-mdast@8.4.1: + resolution: {integrity: sha512-tfmBLASuCgyhCzpkTXM5kU8xeuS5jkMZ17BYm2YftGT5wvgc7uHXTZ/X8WfNd6F5NV/IGmrLsuahZ+jXQir4zQ==} + hast-util-to-nlcst@4.0.0: resolution: {integrity: sha512-+YxIJMLJe+2AEhJeJHXZu1VuhApzjD9dLlWOLTS9kUusHfxKsyqRSnSF/YEu4h0uvzwSC0wPqFwIb9GSnK/chQ==} + hast-util-to-parse5@7.1.0: + resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} @@ -9494,15 +9649,32 @@ packages: hast-util-to-string@3.0.1: resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + hast-util-to-text@3.1.2: + resolution: {integrity: sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==} + hast-util-to-text@4.0.2: resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hast@1.0.0: + resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==} + deprecated: Renamed to rehype + + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + header-case@1.0.1: resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} @@ -9536,9 +9708,15 @@ packages: html-url-attributes@3.0.1: resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + html-whitespace-sensitive-tag-names@2.0.0: + resolution: {integrity: sha512-SQdIvTTtnHAx72xGUIUudvVOCjeWvV1U7rvSFnNGxTGRw3ZC7RES4Gw6dm1nMYD60TXvm6zjk/bWqgNc5pjQaw==} + html-whitespace-sensitive-tag-names@3.0.1: resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} @@ -9712,6 +9890,10 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} + is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -10069,6 +10251,10 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -10345,6 +10531,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkify-it@4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} @@ -10543,6 +10732,46 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} + markdown-it-amsmath@0.4.0: + resolution: {integrity: sha512-wWGX5bpHu9iq4cqi/U58srCH0js5ws7X3BrQZcN2/anQ9S4P8MpvTxHLCZC2rmGHA6mSZf4PKWF6caBc+nxH2g==} + engines: {node: '>=16', npm: '>=6'} + peerDependencies: + markdown-it: ^12 || ^13 + + markdown-it-deflist@2.1.0: + resolution: {integrity: sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg==} + + markdown-it-dollarmath@0.5.0: + resolution: {integrity: sha512-W+8se6cx6vowjzRAfDbHDPBQ+Y9G/8M/JZSFiaYvT0HqfwyFK1hIA1Xj360Nc3ymknKgdDVoL5fI8XjAqZF3tg==} + engines: {node: '>=16', npm: '>=6'} + peerDependencies: + markdown-it: ^12 || ^13 + + markdown-it-footnote@4.0.0: + resolution: {integrity: sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ==} + + markdown-it-front-matter@0.2.4: + resolution: {integrity: sha512-25GUs0yjS2hLl8zAemVndeEzThB1p42yxuDEKbd4JlL3jiz+jsm6e56Ya8B0VREOkNxLYB4TTwaoPJ3ElMmW+w==} + + markdown-it-myst-extras@0.3.0: + resolution: {integrity: sha512-678qviK97MEzSM9Hr0jlX5nBPzMcKZo6Ixgh4nEf/WYpii8LXQ72FametoXkzyDy77qNKDE3vlqYhqfbbCGHrw==} + engines: {node: '>=16', npm: '>=6'} + peerDependencies: + markdown-it: ^12 || ^13 + + markdown-it-myst@1.0.16: + resolution: {integrity: sha512-iwyL6J/1bN8rUO5RpzLIcyQut3W7dO8eCl6uj8B5tkrCCgKXJ71gWr+/JWxeAi9VRNp3TMiRf+OjMy0Bh7yZLQ==} + peerDependencies: + '@types/markdown-it': ^13.0.1 + markdown-it: ^13.0.1 + + markdown-it-task-lists@2.1.1: + resolution: {integrity: sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==} + + markdown-it@13.0.2: + resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} + hasBin: true + markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true @@ -10578,9 +10807,15 @@ packages: peerDependencies: react: ^18.0 || ^19.0 + mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + mdast-util-directive@3.1.0: resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} @@ -10623,18 +10858,34 @@ packages: mdast-util-mdxjs-esm@2.0.1: resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdast@3.0.0: + resolution: {integrity: sha512-xySmf8g4fPKMeC07jXGz971EkLbWAJ83s4US2Tj9lEdnZ142UP5grN73H1Xd3HzrdbU5o9GYYP/y8F9ZSwLE9g==} + deprecated: '`mdast` was renamed to `remark`' + + mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} @@ -10724,6 +10975,9 @@ packages: micromark-factory-whitespace@2.0.1: resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + micromark-util-character@2.1.1: resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} @@ -10742,6 +10996,9 @@ packages: micromark-util-decode-string@2.0.1: resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + micromark-util-encode@2.0.1: resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} @@ -10757,15 +11014,24 @@ packages: micromark-util-resolve-all@2.0.1: resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + micromark-util-sanitize-uri@2.0.1: resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} micromark-util-subtokenize@2.1.0: resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + micromark-util-symbol@2.0.1: resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + micromark-util-types@2.0.2: resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} @@ -10913,6 +11179,33 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} + myst-common@1.9.5: + resolution: {integrity: sha512-GacGYFZVqCfed1pYLg9ilGLhZYYc/Q75w5jEl+ceHlZ8G4h2oGwexiQD4s/hwARSgnaMMeyqSwLMiG5ckAtNww==} + + myst-directives@1.7.1: + resolution: {integrity: sha512-t5N+ch1N1pbgxK6rP079FmbUvb5webmwqXNWGlexp9d2uFaucS0qjyaIhOFkTA+ar7VKOk9EZaTFmv6cR5idrQ==} + + myst-frontmatter@1.9.5: + resolution: {integrity: sha512-Zu/5dTUqWWOdEvcM/yLA2GJ1MJXa/wDf4+dUAc4n9eNUhFNZB326CawFZugSflYDgulBQmWNXCFozmg9e6Rnlg==} + + myst-parser@1.7.1: + resolution: {integrity: sha512-IpqG8sim6CtGTAb5w6Ur4EQmzaXf9kEOZok40MEuve2EhqTBEj26K/jVjzhzUtkl4f4oYnrsgg34ZdSUTHicTg==} + + myst-roles@1.7.1: + resolution: {integrity: sha512-/Iccc9zUdixOWIkOWQoyB4Gpw+s8llk0IrNtX1PWo+dZteuniei6hVCx8W5Uez/QYwj68KJ7gat9/4am6mcBeQ==} + + myst-spec-ext@1.9.5: + resolution: {integrity: sha512-7PxsapR+ClT0BxbGwitdXXaRmJ1j44hqi2dvvxMxbNTOrgNTsFskHbNyABAxqE6gs8hpZTkJcoApJ5y03i3nMA==} + + myst-spec@0.0.5: + resolution: {integrity: sha512-L/4TV1l5ZbWUOgSnXqiYrx192SV4I+HqjX7TBQ4k02/heeNFckpkUIyLulraap5heTyLcJs8UYBxu+Kv5JiiRw==} + + myst-to-html@1.7.1: + resolution: {integrity: sha512-IBKIFae7OIluweb8kOfgyScVi3/JOL0yT79kKdWE86akUxxq+O30Qm+//gH9eQoSzxpRpwlCgwqrv6CGs5/Rzw==} + + myst-toc@0.1.4: + resolution: {integrity: sha512-/SVB4GDv3A+pdkliYEdJv6cUj5RnDX+Qb7zuzNs3COUhGUaUK/T8bX/tDFqOquxFBX/RVoOstQVHOkVu6ui6nQ==} + namespace-emitter@2.0.1: resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==} @@ -10926,6 +11219,11 @@ packages: engines: {node: ^18 || >=20} hasBin: true + nanoid@5.1.9: + resolution: {integrity: sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw==} + engines: {node: ^18 || >=20} + hasBin: true + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -11083,6 +11381,9 @@ packages: resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nuqs@2.4.3: resolution: {integrity: sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q==} peerDependencies: @@ -11179,6 +11480,10 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + orcid@1.0.0: + resolution: {integrity: sha512-zdRFh+1FAZt0Vy9XaKNu+5h4zXC2pkunZH8MV7tSGoq54skik8nxn5ks3E9f33m+tPxuliSRzEHz7owb1Z0HYg==} + hasBin: true + orderedmap@2.1.1: resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} @@ -11306,6 +11611,9 @@ packages: parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} @@ -11996,15 +12304,24 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true + rehype-format@4.0.1: + resolution: {integrity: sha512-HA92WeqFri00yiClrz54IIpM9no2DH9Mgy5aFmInNODoAYn+hN42a6oqJTIie2nj0HwFyV7JvOYx5YHBphN8mw==} + rehype-format@5.0.1: resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} rehype-katex@7.0.1: resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + rehype-minify-whitespace@5.0.1: + resolution: {integrity: sha512-PPp4lWJiBPlePI/dv1BeYktbwkfgXkrK59MUa+tYbMPgleod+4DvFK2PLU0O0O60/xuhHfiR9GUIUlXTU8sRIQ==} + rehype-minify-whitespace@6.0.2: resolution: {integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==} + rehype-parse@8.0.5: + resolution: {integrity: sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A==} + rehype-parse@9.0.1: resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} @@ -12023,12 +12340,18 @@ packages: rehype-remark@10.0.1: resolution: {integrity: sha512-EmDndlb5NVwXGfUa4c9GPK+lXeItTilLhE6ADSaQuHr4JUlKw9MidzGzx4HpqZrNCt6vnHmEifXQiiA+CEnjYQ==} + rehype-remark@9.1.2: + resolution: {integrity: sha512-c0fG3/CrJ95zAQ07xqHSkdpZybwdsY7X5dNWvgL2XqLKZuqmG3+vk6kP/4miCnp+R+x/0uKKRSpfXb9aGR8Z5w==} + rehype-retext@5.0.1: resolution: {integrity: sha512-YJqcKZJh/sYCfLd89yzuWo5GI5TzELr0N/OLHac6fDzKmp5Yk8pj8ePU2HFgmtk5O7GmGVuYXJo35YIrGtyL0g==} rehype-stringify@10.0.1: resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + rehype-stringify@9.0.4: + resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} + rehype@13.0.2: resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} @@ -12351,6 +12674,9 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-validators@1.2.0: + resolution: {integrity: sha512-YzlgCBDukw6OeKN5QjliD/3jERQBH0zGr5WPUrEPD8pteOcg+QGJFP++T7XOwjhKKLZBPLWEmDv+pwjKPzHLVg==} + sirv@3.0.1: resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} engines: {node: '>=18'} @@ -13017,6 +13343,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -13058,6 +13387,9 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -13065,12 +13397,21 @@ packages: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} + unist-builder@3.0.1: + resolution: {integrity: sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==} + unist-util-filter@5.0.1: resolution: {integrity: sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==} + unist-util-find-after@4.0.1: + resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==} + unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} @@ -13083,15 +13424,27 @@ packages: unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} unist-util-remove-position@5.0.0: resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + unist-util-remove@3.1.1: + resolution: {integrity: sha512-kfCqZK5YVY5yEa89tvpl7KnBBHu2c6CzMkqHUrlOqaRgGOMp0sMvwWOVrbAtj03KhovQB7i96Gda72v/EFE0vw==} + unist-util-remove@4.0.0: resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} + unist-util-select@4.0.3: + resolution: {integrity: sha512-1074+K9VyR3NyUz3lgNtHKm7ln+jSZXtLJM4E22uVuoFn88a/Go2pX8dusrt/W+KWH1ncn8jcd8uCQuvXb/fXA==} + + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -13101,12 +13454,18 @@ packages: unist-util-visit-parents@4.1.1: resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} unist-util-visit@3.1.0: resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==} + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -13234,12 +13593,21 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vfile-location@4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} @@ -15129,6 +15497,18 @@ snapshots: - '@chromatic-com/cypress' - '@chromatic-com/playwright' + '@chromatic-com/storybook@4.1.1(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': + dependencies: + '@neoconfetti/react': 1.0.0 + chromatic: 12.2.0 + filesize: 10.1.6 + jsonfile: 6.2.0 + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + strip-ansi: 7.1.0 + transitivePeerDependencies: + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + '@codemirror/autocomplete@6.18.6': dependencies: '@codemirror/language': 6.11.3 @@ -15942,6 +16322,15 @@ snapshots: optionalDependencies: typescript: 5.9.2 + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + dependencies: + glob: 10.4.5 + magic-string: 0.30.17 + react-docgen-typescript: 2.4.0(typescript@5.9.2) + vite: 6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + optionalDependencies: + typescript: 5.9.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -19602,13 +19991,33 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-links@9.1.2(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': + '@storybook/addon-docs@9.1.2(@types/react@19.1.10)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': dependencies: - '@storybook/global': 5.0.0 - storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) - optionalDependencies: + '@mdx-js/react': 3.1.0(@types/react@19.1.10)(react@19.2.3) + '@storybook/csf-plugin': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + '@storybook/icons': 1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@storybook/react-dom-shim': 9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) react: 19.2.3 - + react-dom: 19.2.3(react@19.2.3) + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-links@9.1.2(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + optionalDependencies: + react: 19.2.3 + + '@storybook/addon-links@9.1.2(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + optionalDependencies: + react: 19.2.3 + '@storybook/addon-onboarding@9.1.2(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': dependencies: storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) @@ -19635,11 +20044,23 @@ snapshots: ts-dedent: 2.2.0 vite: 6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + '@storybook/builder-vite@9.1.2(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + dependencies: + '@storybook/csf-plugin': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + ts-dedent: 2.2.0 + vite: 6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + '@storybook/csf-plugin@9.1.2(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': dependencies: storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) unplugin: 1.16.1 + '@storybook/csf-plugin@9.1.2(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': + dependencies: + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + unplugin: 1.16.1 + '@storybook/global@5.0.0': {} '@storybook/icons@1.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': @@ -19673,6 +20094,12 @@ snapshots: react-dom: 19.2.3(react@19.2.3) storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + '@storybook/react-dom-shim@9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))': + dependencies: + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + '@storybook/react-vite@9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.46.4)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) @@ -19693,6 +20120,26 @@ snapshots: - supports-color - typescript + '@storybook/react-vite@9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.46.4)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + dependencies: + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + '@rollup/pluginutils': 5.2.0(rollup@4.46.4) + '@storybook/builder-vite': 9.1.2(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + '@storybook/react': 9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2) + find-up: 7.0.0 + magic-string: 0.30.17 + react: 19.2.3 + react-docgen: 8.0.1 + react-dom: 19.2.3(react@19.2.3) + resolve: 1.22.10 + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + tsconfig-paths: 4.2.0 + vite: 6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + transitivePeerDependencies: + - rollup + - supports-color + - typescript + '@storybook/react@9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@20.19.11)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2)': dependencies: '@storybook/global': 5.0.0 @@ -19703,6 +20150,16 @@ snapshots: optionalDependencies: typescript: 5.9.2 + '@storybook/react@9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(typescript@5.9.2)': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/react-dom-shim': 9.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + storybook: 9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + optionalDependencies: + typescript: 5.9.2 + '@swc/core-darwin-arm64@1.7.24': optional: true @@ -20334,6 +20791,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/extend@3.0.4': {} + '@types/geojson@7946.0.16': {} '@types/glob@7.2.0': @@ -20377,6 +20836,8 @@ snapshots: '@types/katex@0.16.7': {} + '@types/linkify-it@3.0.5': {} + '@types/linkify-it@5.0.0': {} '@types/lodash.isequalwith@4.4.9': @@ -20389,15 +20850,26 @@ snapshots: '@types/lodash@4.17.20': {} + '@types/markdown-it@13.0.9': + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + '@types/markdown-it@14.1.2': dependencies: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 + '@types/mdast@3.0.15': + dependencies: + '@types/unist': 2.0.11 + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 + '@types/mdurl@1.0.5': {} + '@types/mdurl@2.0.0': {} '@types/mdx@2.0.13': {} @@ -20455,6 +20927,8 @@ snapshots: '@types/parse-json@4.0.2': {} + '@types/parse5@6.0.3': {} + '@types/pg-pool@2.0.6': dependencies: '@types/pg': 8.15.5 @@ -20538,67 +21012,36 @@ snapshots: '@types/uuid@9.0.8': {} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260119.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260421.1': optional: true - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260209.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260421.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260119.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260421.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260209.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260421.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260119.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260421.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260209.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260421.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260119.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260421.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260209.1': - optional: true - - '@typescript/native-preview-linux-x64@7.0.0-dev.20260119.1': - optional: true - - '@typescript/native-preview-linux-x64@7.0.0-dev.20260209.1': - optional: true - - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260119.1': - optional: true - - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260209.1': - optional: true - - '@typescript/native-preview-win32-x64@7.0.0-dev.20260119.1': - optional: true - - '@typescript/native-preview-win32-x64@7.0.0-dev.20260209.1': - optional: true - - '@typescript/native-preview@7.0.0-dev.20260119.1': + '@typescript/native-preview@7.0.0-dev.20260421.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260119.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260119.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260119.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260119.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260119.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260119.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260119.1 - - '@typescript/native-preview@7.0.0-dev.20260209.1': - optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260209.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260209.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260209.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260209.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260209.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260209.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260209.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260421.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260421.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260421.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260421.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260421.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260421.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260421.1 '@typescript/vfs@1.6.1(typescript@5.9.2)': dependencies: @@ -20863,6 +21306,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.7.0(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + dependencies: + '@babel/core': 7.28.3 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.3) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + '@vitest/browser@3.0.5(@types/node@20.19.11)(playwright@1.53.0)(typescript@5.9.2)(vite@6.3.5(@types/node@20.19.11)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)': dependencies: '@testing-library/dom': 10.4.1 @@ -21374,6 +21829,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + boolbase@1.0.0: {} + bowser@2.12.0: {} boxen@7.0.0: @@ -21849,6 +22306,8 @@ snapshots: create-require@1.1.1: {} + credit-roles@2.1.0: {} + crelt@1.0.6: {} cropperjs@1.6.2: {} @@ -21867,6 +22326,8 @@ snapshots: crypto-random-string@2.0.0: {} + css-selector-parser@1.4.1: {} + css.escape@1.5.1: {} cssesc@3.0.0: {} @@ -22215,6 +22676,8 @@ snapshots: dependencies: esutils: 2.0.3 + doi-utils@2.0.6: {} + dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -22317,6 +22780,8 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 + entities@3.0.1: {} + entities@4.5.0: {} entities@6.0.1: {} @@ -23087,6 +23552,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-embedded@2.0.1: + dependencies: + hast-util-is-element: 2.1.3 + hast-util-embedded@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -23124,6 +23593,16 @@ snapshots: vfile: 6.0.3 vfile-message: 4.0.3 + hast-util-from-parse5@7.1.2: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + hastscript: 7.2.0 + property-information: 6.5.0 + vfile: 5.3.7 + vfile-location: 4.1.0 + web-namespaces: 2.0.1 + hast-util-from-parse5@8.0.3: dependencies: '@types/hast': 3.0.4 @@ -23135,14 +23614,27 @@ snapshots: vfile-location: 5.0.3 web-namespaces: 2.0.1 + hast-util-has-property@2.0.1: {} + hast-util-has-property@3.0.0: dependencies: '@types/hast': 3.0.4 + hast-util-is-body-ok-link@2.0.0: + dependencies: + '@types/hast': 2.3.10 + hast-util-has-property: 2.0.1 + hast-util-is-element: 2.1.3 + hast-util-is-body-ok-link@3.0.1: dependencies: '@types/hast': 3.0.4 + hast-util-is-element@2.1.3: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + hast-util-is-element@3.0.0: dependencies: '@types/hast': 3.0.4 @@ -23155,10 +23647,22 @@ snapshots: hast-util-whitespace: 3.0.0 unist-util-is: 6.0.0 + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + hast-util-parse-selector@4.0.0: dependencies: '@types/hast': 3.0.4 + hast-util-phrasing@2.0.2: + dependencies: + '@types/hast': 2.3.10 + hast-util-embedded: 2.0.1 + hast-util-has-property: 2.0.1 + hast-util-is-body-ok-link: 2.0.0 + hast-util-is-element: 2.1.3 + hast-util-phrasing@3.0.1: dependencies: '@types/hast': 3.0.4 @@ -23167,6 +23671,20 @@ snapshots: hast-util-is-body-ok-link: 3.0.1 hast-util-is-element: 3.0.0 + hast-util-raw@7.2.3: + dependencies: + '@types/hast': 2.3.10 + '@types/parse5': 6.0.3 + hast-util-from-parse5: 7.1.2 + hast-util-to-parse5: 7.1.0 + html-void-elements: 2.0.1 + parse5: 6.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-raw@9.1.0: dependencies: '@types/hast': 3.0.4 @@ -23204,6 +23722,20 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-html@8.0.4: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 7.2.3 + hast-util-whitespace: 2.0.1 + html-void-elements: 2.0.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + hast-util-to-html@9.0.5: dependencies: '@types/hast': 3.0.4 @@ -23255,6 +23787,24 @@ snapshots: unist-util-position: 5.0.0 unist-util-visit: 5.0.0 + hast-util-to-mdast@8.4.1: + dependencies: + '@types/extend': 3.0.4 + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + extend: 3.0.2 + hast-util-has-property: 2.0.1 + hast-util-is-element: 2.1.3 + hast-util-phrasing: 2.0.2 + hast-util-to-text: 3.1.2 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + rehype-minify-whitespace: 5.0.1 + trim-trailing-lines: 2.1.0 + unist-util-is: 5.2.1 + unist-util-visit: 4.1.2 + hast-util-to-nlcst@4.0.0: dependencies: '@types/hast': 3.0.4 @@ -23270,6 +23820,15 @@ snapshots: vfile: 6.0.3 vfile-location: 5.0.3 + hast-util-to-parse5@7.1.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-to-parse5@8.0.0: dependencies: '@types/hast': 3.0.4 @@ -23288,6 +23847,13 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hast-util-to-text@3.1.2: + dependencies: + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 + hast-util-is-element: 2.1.3 + unist-util-find-after: 4.0.1 + hast-util-to-text@4.0.2: dependencies: '@types/hast': 3.0.4 @@ -23295,10 +23861,22 @@ snapshots: hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 + hast-util-whitespace@2.0.1: {} + hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 + hast@1.0.0: {} + + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + hastscript@9.0.1: dependencies: '@types/hast': 3.0.4 @@ -23307,6 +23885,8 @@ snapshots: property-information: 7.1.0 space-separated-tokens: 2.0.2 + he@1.2.0: {} + header-case@1.0.1: dependencies: no-case: 2.3.2 @@ -23340,8 +23920,12 @@ snapshots: html-url-attributes@3.0.1: {} + html-void-elements@2.0.1: {} + html-void-elements@3.0.0: {} + html-whitespace-sensitive-tag-names@2.0.0: {} + html-whitespace-sensitive-tag-names@3.0.1: {} html@1.0.0: @@ -23553,6 +24137,8 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-buffer@2.0.5: {} + is-callable@1.2.7: {} is-core-module@2.16.1: @@ -23843,6 +24429,10 @@ snapshots: json-schema-traverse@1.0.0: {} + json5@1.0.2: + dependencies: + minimist: 1.2.8 + json5@2.2.3: {} jsonata@2.1.0: {} @@ -24095,6 +24685,10 @@ snapshots: lines-and-columns@1.2.4: {} + linkify-it@4.0.1: + dependencies: + uc.micro: 1.0.6 + linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 @@ -24282,6 +24876,41 @@ snapshots: markdown-extensions@2.0.0: {} + markdown-it-amsmath@0.4.0(markdown-it@13.0.2): + dependencies: + markdown-it: 13.0.2 + + markdown-it-deflist@2.1.0: {} + + markdown-it-dollarmath@0.5.0(markdown-it@13.0.2): + dependencies: + markdown-it: 13.0.2 + + markdown-it-footnote@4.0.0: {} + + markdown-it-front-matter@0.2.4: {} + + markdown-it-myst-extras@0.3.0(markdown-it@13.0.2): + dependencies: + markdown-it: 13.0.2 + + markdown-it-myst@1.0.16(@types/markdown-it@13.0.9)(markdown-it@13.0.2): + dependencies: + '@types/markdown-it': 13.0.9 + js-yaml: 4.1.0 + markdown-it: 13.0.2 + vfile: 5.3.7 + + markdown-it-task-lists@2.1.1: {} + + markdown-it@13.0.2: + dependencies: + argparse: 2.0.1 + entities: 3.0.1 + linkify-it: 4.0.1 + mdurl: 1.0.1 + uc.micro: 1.0.6 + markdown-it@14.1.0: dependencies: argparse: 2.0.1 @@ -24313,6 +24942,12 @@ snapshots: marked: 7.0.4 react: 19.2.3 + mdast-util-definitions@5.1.2: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + unist-util-visit: 4.1.2 + mdast-util-directive@3.1.0: dependencies: '@types/mdast': 4.0.4 @@ -24327,6 +24962,13 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-find-and-replace@2.2.2: + dependencies: + '@types/mdast': 3.0.15 + escape-string-regexp: 5.0.0 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 @@ -24480,11 +25122,27 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-phrasing@3.0.1: + dependencies: + '@types/mdast': 3.0.15 + unist-util-is: 5.2.1 + mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 unist-util-is: 6.0.0 + mdast-util-to-hast@12.3.0: + dependencies: + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.2.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + mdast-util-to-hast@13.2.0: dependencies: '@types/hast': 3.0.4 @@ -24509,10 +25167,18 @@ snapshots: unist-util-visit: 5.0.0 zwitch: 2.0.4 + mdast-util-to-string@3.2.0: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-string@4.0.0: dependencies: '@types/mdast': 4.0.4 + mdast@3.0.0: {} + + mdurl@1.0.1: {} + mdurl@2.0.0: {} memfs-browser@3.5.10302: @@ -24755,6 +25421,11 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-util-character@1.2.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + micromark-util-character@2.1.1: dependencies: micromark-util-symbol: 2.0.1 @@ -24786,6 +25457,8 @@ snapshots: micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 + micromark-util-encode@1.1.0: {} + micromark-util-encode@2.0.1: {} micromark-util-events-to-acorn@2.0.3: @@ -24808,6 +25481,12 @@ snapshots: dependencies: micromark-util-types: 2.0.2 + micromark-util-sanitize-uri@1.2.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-sanitize-uri@2.0.1: dependencies: micromark-util-character: 2.1.1 @@ -24821,8 +25500,12 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-util-symbol@1.1.0: {} + micromark-util-symbol@2.0.1: {} + micromark-util-types@1.1.0: {} + micromark-util-types@2.0.2: {} micromark@4.0.2: @@ -25004,12 +25687,109 @@ snapshots: mute-stream@2.0.0: {} + myst-common@1.9.5: + dependencies: + mdast: 3.0.0 + myst-frontmatter: 1.9.5 + myst-spec: 0.0.5 + nanoid: 5.1.9 + unified: 10.1.2 + unist-util-remove: 3.1.1 + unist-util-select: 4.0.3 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + vfile-message: 3.1.4 + + myst-directives@1.7.1: + dependencies: + classnames: 2.5.1 + csv-parse: 5.6.0 + js-yaml: 4.1.0 + json5: 1.0.2 + myst-common: 1.9.5 + myst-spec-ext: 1.9.5 + nanoid: 5.1.9 + unist-util-select: 4.0.3 + vfile: 5.3.7 + + myst-frontmatter@1.9.5: + dependencies: + credit-roles: 2.1.0 + doi-utils: 2.0.6 + myst-toc: 0.1.4 + orcid: 1.0.0 + simple-validators: 1.2.0 + spdx-correct: 3.2.0 + + myst-parser@1.7.1: + dependencies: + '@types/markdown-it': 13.0.9 + he: 1.2.0 + markdown-it: 13.0.2 + markdown-it-amsmath: 0.4.0(markdown-it@13.0.2) + markdown-it-deflist: 2.1.0 + markdown-it-dollarmath: 0.5.0(markdown-it@13.0.2) + markdown-it-footnote: 4.0.0 + markdown-it-front-matter: 0.2.4 + markdown-it-myst: 1.0.16(@types/markdown-it@13.0.9)(markdown-it@13.0.2) + markdown-it-myst-extras: 0.3.0(markdown-it@13.0.2) + markdown-it-task-lists: 2.1.1 + myst-common: 1.9.5 + myst-directives: 1.7.1 + myst-roles: 1.7.1 + myst-spec: 0.0.5 + unified: 10.1.2 + unist-builder: 3.0.1 + unist-util-remove: 3.1.1 + unist-util-select: 4.0.3 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + + myst-roles@1.7.1: + dependencies: + myst-common: 1.9.5 + myst-spec-ext: 1.9.5 + + myst-spec-ext@1.9.5: + dependencies: + myst-spec: 0.0.5 + + myst-spec@0.0.5: {} + + myst-to-html@1.7.1: + dependencies: + '@types/markdown-it': 13.0.9 + classnames: 2.5.1 + hast: 1.0.0 + hast-util-to-mdast: 8.4.1 + markdown-it: 13.0.2 + mdast: 3.0.0 + mdast-util-find-and-replace: 2.2.2 + mdast-util-to-hast: 12.3.0 + myst-common: 1.9.5 + rehype-format: 4.0.1 + rehype-parse: 8.0.5 + rehype-remark: 9.1.2 + rehype-stringify: 9.0.4 + unified: 10.1.2 + unist-builder: 3.0.1 + unist-util-find-after: 4.0.1 + unist-util-remove: 3.1.1 + unist-util-select: 4.0.3 + unist-util-visit: 4.1.2 + + myst-toc@0.1.4: + dependencies: + simple-validators: 1.2.0 + namespace-emitter@2.0.1: {} nanoid@3.3.11: {} nanoid@5.1.5: {} + nanoid@5.1.9: {} + negotiator@0.6.3: {} negotiator@1.0.0: {} @@ -25232,6 +26012,10 @@ snapshots: npm-to-yarn@3.0.1: {} + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + nuqs@2.4.3(next@15.5.9(@babel/core@7.28.3)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3): dependencies: mitt: 3.0.1 @@ -25339,6 +26123,8 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + orcid@1.0.0: {} + orderedmap@2.1.1: {} os-tmpdir@1.0.2: {} @@ -25497,6 +26283,8 @@ snapshots: parse-numeric-range@1.3.0: {} + parse5@6.0.1: {} + parse5@7.3.0: dependencies: entities: 6.0.1 @@ -26385,6 +27173,18 @@ snapshots: dependencies: jsesc: 3.0.2 + rehype-format@4.0.1: + dependencies: + '@types/hast': 2.3.10 + hast-util-embedded: 2.0.1 + hast-util-is-element: 2.1.3 + hast-util-phrasing: 2.0.2 + hast-util-whitespace: 2.0.1 + html-whitespace-sensitive-tag-names: 2.0.0 + rehype-minify-whitespace: 5.0.1 + unified: 10.1.2 + unist-util-visit-parents: 5.1.3 + rehype-format@5.0.1: dependencies: '@types/hast': 3.0.4 @@ -26400,11 +27200,27 @@ snapshots: unist-util-visit-parents: 6.0.1 vfile: 6.0.3 + rehype-minify-whitespace@5.0.1: + dependencies: + '@types/hast': 2.3.10 + hast-util-embedded: 2.0.1 + hast-util-is-element: 2.1.3 + hast-util-whitespace: 2.0.1 + unified: 10.1.2 + unist-util-is: 5.2.1 + rehype-minify-whitespace@6.0.2: dependencies: '@types/hast': 3.0.4 hast-util-minify-whitespace: 1.0.1 + rehype-parse@8.0.5: + dependencies: + '@types/hast': 2.3.10 + hast-util-from-parse5: 7.1.2 + parse5: 6.0.1 + unified: 10.1.2 + rehype-parse@9.0.1: dependencies: '@types/hast': 3.0.4 @@ -26443,6 +27259,13 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 + rehype-remark@9.1.2: + dependencies: + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + hast-util-to-mdast: 8.4.1 + unified: 10.1.2 + rehype-retext@5.0.1: dependencies: '@types/hast': 3.0.4 @@ -26458,6 +27281,12 @@ snapshots: hast-util-to-html: 9.0.5 unified: 11.0.5 + rehype-stringify@9.0.4: + dependencies: + '@types/hast': 2.3.10 + hast-util-to-html: 8.0.4 + unified: 10.1.2 + rehype@13.0.2: dependencies: '@types/hast': 3.0.4 @@ -26925,6 +27754,8 @@ snapshots: dependencies: is-arrayish: 0.3.2 + simple-validators@1.2.0: {} + sirv@3.0.1: dependencies: '@polka/url': 1.0.0-next.29 @@ -27092,6 +27923,30 @@ snapshots: - utf-8-validate - vite + storybook@9.1.2(@testing-library/dom@10.4.1)(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(prettier@3.6.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): + dependencies: + '@storybook/global': 5.0.0 + '@testing-library/jest-dom': 6.7.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(msw@2.10.5(@types/node@24.3.0)(typescript@5.9.2))(vite@6.3.5(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + '@vitest/spy': 3.2.4 + better-opn: 3.0.2 + esbuild: 0.25.9 + esbuild-register: 3.6.0(esbuild@0.25.9) + recast: 0.23.11 + semver: 7.7.2 + ws: 8.18.3 + optionalDependencies: + prettier: 3.6.2 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - msw + - supports-color + - utf-8-validate + - vite + stream-browserify@3.0.0: dependencies: inherits: 2.0.4 @@ -27629,6 +28484,8 @@ snapshots: typescript@5.9.2: {} + uc.micro@1.0.6: {} + uc.micro@2.1.0: {} ufo@1.6.1: {} @@ -27660,6 +28517,16 @@ snapshots: unicorn-magic@0.1.0: {} + unified@10.1.2: + dependencies: + '@types/unist': 2.0.11 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 5.3.7 + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -27674,17 +28541,28 @@ snapshots: dependencies: crypto-random-string: 2.0.0 + unist-builder@3.0.1: + dependencies: + '@types/unist': 2.0.11 + unist-util-filter@5.0.1: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + unist-util-find-after@4.0.1: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-find-after@5.0.0: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 + unist-util-generated@2.0.1: {} + unist-util-is@5.2.1: dependencies: '@types/unist': 2.0.11 @@ -27702,6 +28580,10 @@ snapshots: dependencies: '@types/unist': 3.0.3 + unist-util-position@4.0.4: + dependencies: + '@types/unist': 2.0.11 + unist-util-position@5.0.0: dependencies: '@types/unist': 3.0.3 @@ -27711,12 +28593,29 @@ snapshots: '@types/unist': 3.0.3 unist-util-visit: 5.0.0 + unist-util-remove@3.1.1: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + unist-util-remove@4.0.0: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + unist-util-select@4.0.3: + dependencies: + '@types/unist': 2.0.11 + css-selector-parser: 1.4.1 + nth-check: 2.1.1 + zwitch: 2.0.4 + + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -27730,6 +28629,11 @@ snapshots: '@types/unist': 2.0.11 unist-util-is: 5.2.1 + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -27741,6 +28645,12 @@ snapshots: unist-util-is: 5.2.1 unist-util-visit-parents: 4.1.1 + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.3 @@ -27851,16 +28761,33 @@ snapshots: vary@1.1.2: {} + vfile-location@4.1.0: + dependencies: + '@types/unist': 2.0.11 + vfile: 5.3.7 + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 vfile: 6.0.3 + vfile-message@3.1.4: + dependencies: + '@types/unist': 2.0.11 + unist-util-stringify-position: 3.0.3 + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + vfile@5.3.7: + dependencies: + '@types/unist': 2.0.11 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + vfile@6.0.3: dependencies: '@types/unist': 3.0.3