@openeditor/react 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.js +183 -6
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Headless React bindings for OpenEditor's web editor runtime.
|
|
4
4
|
|
|
5
|
+
Pass `attachmentRuntime` to `useOpenEditorController` for editable attachments and to `OpenEditorViewer` for identity-based resolution/opening. Progress, cancellation, retry input, and errors remain transient node-view state and are never emitted through document JSON.
|
|
6
|
+
|
|
5
7
|
## Public surface
|
|
6
8
|
|
|
7
9
|
- `useOpenEditorController` for editor state, commands, document exports, and selection state
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode, ComponentType } from 'react';
|
|
3
|
-
import { OpenEditorDocument, BlockSpec, ProseMirrorNode } from '@openeditor/core';
|
|
3
|
+
import { OpenEditorDocument, BlockSpec, ProseMirrorNode, OpenEditorAttachmentRuntime } from '@openeditor/core';
|
|
4
4
|
import { toExportBundle, OpenEditorExporters } from '@openeditor/exporters';
|
|
5
5
|
export { seedDocument } from '@openeditor/extensions';
|
|
6
6
|
import { Editor, AnyExtension, NodeConfig } from '@tiptap/core';
|
|
@@ -29,6 +29,7 @@ type OpenEditorReactProps = {
|
|
|
29
29
|
onChange?: (document: OpenEditorDocument) => void;
|
|
30
30
|
onFilePasteDrop?: (file: File) => boolean;
|
|
31
31
|
pageRuntime?: OpenEditorPageRuntime;
|
|
32
|
+
attachmentRuntime?: OpenEditorAttachmentRuntime<any>;
|
|
32
33
|
slashMenuItems?: readonly OpenEditorSlashMenuItem[];
|
|
33
34
|
/** Consumer-owned blocks. Extension names and node types must be unique. */
|
|
34
35
|
extensions?: readonly OpenEditorReactExtension[];
|
|
@@ -67,6 +68,7 @@ type OpenEditorController = {
|
|
|
67
68
|
slashMenuItems: readonly OpenEditorSlashMenuItem[];
|
|
68
69
|
extensions: readonly OpenEditorReactExtension[];
|
|
69
70
|
pageRuntime?: OpenEditorPageRuntime;
|
|
71
|
+
attachmentRuntime?: OpenEditorAttachmentRuntime<any>;
|
|
70
72
|
slashState: SlashState | null;
|
|
71
73
|
selectionBubbleState: SelectionBubbleState | null;
|
|
72
74
|
};
|
|
@@ -143,6 +145,7 @@ type OpenEditorViewerProps = {
|
|
|
143
145
|
renderers?: Partial<Record<string, OpenEditorViewerRenderer>>;
|
|
144
146
|
extensions?: readonly OpenEditorReactExtension[];
|
|
145
147
|
pageRuntime?: OpenEditorPageRuntime;
|
|
148
|
+
attachmentRuntime?: OpenEditorAttachmentRuntime<any>;
|
|
146
149
|
};
|
|
147
150
|
declare module "@tiptap/core" {
|
|
148
151
|
interface Commands<ReturnType> {
|
|
@@ -151,10 +154,11 @@ declare module "@tiptap/core" {
|
|
|
151
154
|
};
|
|
152
155
|
}
|
|
153
156
|
}
|
|
154
|
-
declare const
|
|
157
|
+
declare const formatAttachmentSize: (size: number | null) => string;
|
|
158
|
+
declare const useOpenEditorController: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, attachmentRuntime, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
|
|
155
159
|
declare const getDefaultSlashMenuItems: (controller: OpenEditorController) => OpenEditorSlashMenuItem[];
|
|
156
160
|
declare const OpenEditorContent: ({ controller, className, }: OpenEditorContentProps) => react.JSX.Element;
|
|
157
|
-
declare const OpenEditorViewer: ({ document, className, renderers, extensions, pageRuntime, }: OpenEditorViewerProps) => react.JSX.Element;
|
|
158
|
-
declare const useOpenEditor: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
|
|
161
|
+
declare const OpenEditorViewer: ({ document, className, renderers, extensions, pageRuntime, attachmentRuntime, }: OpenEditorViewerProps) => react.JSX.Element;
|
|
162
|
+
declare const useOpenEditor: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, attachmentRuntime, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
|
|
159
163
|
|
|
160
|
-
export { type InsertRange, OpenEditorContent, type OpenEditorContentProps, type OpenEditorController, type OpenEditorExtensionMenu, type OpenEditorOverlayRect, type OpenEditorPageRuntime, type OpenEditorPageSnapshot, type OpenEditorReactConfig, type OpenEditorReactExtension, type OpenEditorReactNodeExtension, type OpenEditorReactProps, type OpenEditorSlashMenuItem, OpenEditorViewer, type OpenEditorViewerProps, type OpenEditorViewerRenderer, type SelectionBubbleState, type SlashState, defineOpenEditorReactExtension, defineOpenEditorReactNode, getDefaultSlashMenuItems, useOpenEditor, useOpenEditorController };
|
|
164
|
+
export { type InsertRange, OpenEditorContent, type OpenEditorContentProps, type OpenEditorController, type OpenEditorExtensionMenu, type OpenEditorOverlayRect, type OpenEditorPageRuntime, type OpenEditorPageSnapshot, type OpenEditorReactConfig, type OpenEditorReactExtension, type OpenEditorReactNodeExtension, type OpenEditorReactProps, type OpenEditorSlashMenuItem, OpenEditorViewer, type OpenEditorViewerProps, type OpenEditorViewerRenderer, type SelectionBubbleState, type SlashState, defineOpenEditorReactExtension, defineOpenEditorReactNode, formatAttachmentSize, getDefaultSlashMenuItems, useOpenEditor, useOpenEditorController };
|
package/dist/index.js
CHANGED
|
@@ -22,11 +22,12 @@ import { ReplaceStep } from '@tiptap/pm/transform';
|
|
|
22
22
|
import { ReactNodeViewRenderer, NodeViewWrapper, NodeViewContent, useEditor, EditorContent } from '@tiptap/react';
|
|
23
23
|
export { NodeViewContent, NodeViewWrapper } from '@tiptap/react';
|
|
24
24
|
import StarterKit from '@tiptap/starter-kit';
|
|
25
|
-
import { createContext, use, useState,
|
|
25
|
+
import { createContext, use, useState, useRef, useEffect, useMemo, Fragment } from 'react';
|
|
26
26
|
import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
27
27
|
|
|
28
28
|
// src/index.tsx
|
|
29
29
|
var OpenEditorPageRuntimeContext = createContext(void 0);
|
|
30
|
+
var OpenEditorAttachmentRuntimeContext = createContext(void 0);
|
|
30
31
|
var defineOpenEditorReactExtension = (extension) => extension;
|
|
31
32
|
var defineOpenEditorReactNode = ({
|
|
32
33
|
block,
|
|
@@ -356,6 +357,176 @@ var Callout = Node.create({
|
|
|
356
357
|
return ReactNodeViewRenderer(OpenEditorCalloutNodeView);
|
|
357
358
|
}
|
|
358
359
|
});
|
|
360
|
+
var attachmentSnapshotFromNode = (node) => ({
|
|
361
|
+
attachmentId: typeof node.attrs?.attachmentId === "string" ? node.attrs.attachmentId : null,
|
|
362
|
+
name: typeof node.attrs?.name === "string" ? node.attrs.name : "",
|
|
363
|
+
mimeType: typeof node.attrs?.mimeType === "string" ? node.attrs.mimeType : null,
|
|
364
|
+
size: typeof node.attrs?.size === "number" ? node.attrs.size : null,
|
|
365
|
+
url: typeof node.attrs?.url === "string" ? node.attrs.url : null
|
|
366
|
+
});
|
|
367
|
+
var formatAttachmentSize = (size) => {
|
|
368
|
+
if (size === null || !Number.isFinite(size) || size < 0) return "";
|
|
369
|
+
if (size < 1024) return `${size} B`;
|
|
370
|
+
const units = ["KB", "MB", "GB", "TB"];
|
|
371
|
+
let value = size / 1024;
|
|
372
|
+
let unit = 0;
|
|
373
|
+
while (value >= 1024 && unit < units.length - 1) {
|
|
374
|
+
value /= 1024;
|
|
375
|
+
unit += 1;
|
|
376
|
+
}
|
|
377
|
+
return `${value >= 10 ? value.toFixed(0) : value.toFixed(1)} ${units[unit]}`;
|
|
378
|
+
};
|
|
379
|
+
var attachmentTypeLabel = (snapshot) => {
|
|
380
|
+
if (snapshot.mimeType) return snapshot.mimeType.split("/").at(-1)?.toUpperCase() ?? snapshot.mimeType;
|
|
381
|
+
const extension = snapshot.name.includes(".") ? snapshot.name.split(".").at(-1) : null;
|
|
382
|
+
return extension?.toUpperCase() ?? "FILE";
|
|
383
|
+
};
|
|
384
|
+
var AttachmentIcon = ({ snapshot }) => /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "oe-attachment-icon", children: /* @__PURE__ */ jsx("span", { children: attachmentTypeLabel(snapshot).slice(0, 4) }) });
|
|
385
|
+
var OpenEditorAttachmentNodeView = ({ editor, node, updateAttributes, deleteNode }) => {
|
|
386
|
+
const runtime = use(OpenEditorAttachmentRuntimeContext);
|
|
387
|
+
const durable = attachmentSnapshotFromNode(node);
|
|
388
|
+
const [phase, setPhase] = useState(durable.attachmentId || durable.url ? "ready" : "idle");
|
|
389
|
+
const [progress, setProgress] = useState(0);
|
|
390
|
+
const [error, setError] = useState(null);
|
|
391
|
+
const [input, setInput] = useState(null);
|
|
392
|
+
const operationRef = useRef(0);
|
|
393
|
+
const abortRef = useRef(null);
|
|
394
|
+
const isCurrent = (operation) => operationRef.current === operation;
|
|
395
|
+
const stopCurrent = () => {
|
|
396
|
+
operationRef.current += 1;
|
|
397
|
+
abortRef.current?.abort();
|
|
398
|
+
abortRef.current = null;
|
|
399
|
+
};
|
|
400
|
+
useEffect(() => () => stopCurrent(), []);
|
|
401
|
+
const upload = async (selected, replacing) => {
|
|
402
|
+
if (!runtime?.uploadAttachment) return;
|
|
403
|
+
stopCurrent();
|
|
404
|
+
const operation = operationRef.current;
|
|
405
|
+
const controller = new AbortController();
|
|
406
|
+
abortRef.current = controller;
|
|
407
|
+
setInput(selected);
|
|
408
|
+
setProgress(0);
|
|
409
|
+
setError(null);
|
|
410
|
+
setPhase("uploading");
|
|
411
|
+
try {
|
|
412
|
+
const validation = await runtime.validateAttachment?.(selected);
|
|
413
|
+
if (!isCurrent(operation)) return;
|
|
414
|
+
if (validation && !validation.accepted) throw new Error(validation.message);
|
|
415
|
+
const callback = { signal: controller.signal, onProgress: (value) => {
|
|
416
|
+
if (isCurrent(operation)) setProgress(Math.max(0, Math.min(1, value)));
|
|
417
|
+
} };
|
|
418
|
+
const uploaded = replacing && durable.attachmentId && runtime.replaceAttachment ? await runtime.replaceAttachment(durable.attachmentId, selected, callback) : await runtime.uploadAttachment(selected, callback);
|
|
419
|
+
if (!isCurrent(operation)) return;
|
|
420
|
+
updateAttributes(uploaded);
|
|
421
|
+
setInput(null);
|
|
422
|
+
setProgress(1);
|
|
423
|
+
setPhase("ready");
|
|
424
|
+
} catch (cause) {
|
|
425
|
+
if (!isCurrent(operation) || controller.signal.aborted) return;
|
|
426
|
+
setError(cause instanceof Error ? cause.message : "Upload failed.");
|
|
427
|
+
setPhase("error");
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
const selectAndUpload = async (replacing = false) => {
|
|
431
|
+
if (!runtime?.selectAttachment || !runtime.uploadAttachment) return;
|
|
432
|
+
stopCurrent();
|
|
433
|
+
const operation = operationRef.current;
|
|
434
|
+
const controller = new AbortController();
|
|
435
|
+
abortRef.current = controller;
|
|
436
|
+
setError(null);
|
|
437
|
+
setPhase("selecting");
|
|
438
|
+
try {
|
|
439
|
+
const selected = await runtime.selectAttachment({ signal: controller.signal });
|
|
440
|
+
if (!isCurrent(operation)) return;
|
|
441
|
+
if (!selected) {
|
|
442
|
+
setPhase(durable.attachmentId || durable.url ? "ready" : "idle");
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
await upload(selected, replacing);
|
|
446
|
+
} catch (cause) {
|
|
447
|
+
if (!isCurrent(operation) || controller.signal.aborted) return;
|
|
448
|
+
setError(cause instanceof Error ? cause.message : "Could not select a file.");
|
|
449
|
+
setPhase("error");
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
useEffect(() => {
|
|
453
|
+
if (phase === "idle" && editor.isEditable && runtime?.selectAttachment && runtime.uploadAttachment) {
|
|
454
|
+
void selectAndUpload();
|
|
455
|
+
}
|
|
456
|
+
}, []);
|
|
457
|
+
const cancel = () => {
|
|
458
|
+
stopCurrent();
|
|
459
|
+
setPhase(durable.attachmentId || durable.url ? "ready" : "idle");
|
|
460
|
+
};
|
|
461
|
+
const remove = () => {
|
|
462
|
+
stopCurrent();
|
|
463
|
+
deleteNode();
|
|
464
|
+
};
|
|
465
|
+
const name = durable.name || input?.name || "Choose a file";
|
|
466
|
+
const display = durable.name ? durable : { ...durable, name, mimeType: input?.mimeType ?? null, size: input?.size ?? null };
|
|
467
|
+
const open = () => {
|
|
468
|
+
if (runtime?.openAttachment) void runtime.openAttachment(durable);
|
|
469
|
+
else if (durable.url) window.open(durable.url, "_blank", "noopener,noreferrer");
|
|
470
|
+
};
|
|
471
|
+
return /* @__PURE__ */ jsxs(NodeViewWrapper, { className: "oe-attachment", "data-state": phase, children: [
|
|
472
|
+
/* @__PURE__ */ jsx(AttachmentIcon, { snapshot: display }),
|
|
473
|
+
/* @__PURE__ */ jsxs("div", { className: "oe-attachment-body", children: [
|
|
474
|
+
/* @__PURE__ */ jsx("input", { "aria-label": "File name", className: "oe-attachment-name", disabled: !editor.isEditable || phase === "uploading", value: name, onChange: (event) => updateAttributes({ name: event.target.value }), onBlur: () => {
|
|
475
|
+
if (durable.attachmentId && durable.name) void runtime?.renameAttachment?.(durable.attachmentId, durable.name);
|
|
476
|
+
} }),
|
|
477
|
+
/* @__PURE__ */ jsx("div", { className: "oe-attachment-meta", children: [formatAttachmentSize(display.size), attachmentTypeLabel(display)].filter(Boolean).join(" \xB7 ") }),
|
|
478
|
+
phase === "uploading" ? /* @__PURE__ */ jsx("div", { className: "oe-attachment-progress", role: "progressbar", "aria-label": `Uploading ${name}`, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(progress * 100), children: /* @__PURE__ */ jsx("span", { style: { width: `${progress * 100}%` } }) }) : null,
|
|
479
|
+
error ? /* @__PURE__ */ jsx("div", { className: "oe-attachment-error", role: "alert", children: error }) : null
|
|
480
|
+
] }),
|
|
481
|
+
/* @__PURE__ */ jsxs("div", { className: "oe-attachment-actions", contentEditable: false, children: [
|
|
482
|
+
phase === "uploading" || phase === "selecting" ? /* @__PURE__ */ jsx("button", { onClick: cancel, type: "button", children: "Cancel" }) : null,
|
|
483
|
+
phase === "error" && input ? /* @__PURE__ */ jsx("button", { onClick: () => void upload(input, Boolean(durable.attachmentId)), type: "button", children: "Retry" }) : null,
|
|
484
|
+
(durable.attachmentId || durable.url) && phase !== "uploading" ? /* @__PURE__ */ jsx("button", { onClick: open, type: "button", children: "Open" }) : null,
|
|
485
|
+
editor.isEditable && runtime?.selectAttachment && runtime.uploadAttachment && phase !== "uploading" ? /* @__PURE__ */ jsx("button", { onClick: () => void selectAndUpload(Boolean(durable.attachmentId)), type: "button", children: "Replace" }) : null,
|
|
486
|
+
editor.isEditable ? /* @__PURE__ */ jsx("button", { "aria-label": `Remove ${name}`, onClick: remove, type: "button", children: "Remove" }) : null
|
|
487
|
+
] })
|
|
488
|
+
] });
|
|
489
|
+
};
|
|
490
|
+
var Attachment = Node.create({
|
|
491
|
+
name: "attachment",
|
|
492
|
+
group: "block",
|
|
493
|
+
atom: true,
|
|
494
|
+
draggable: true,
|
|
495
|
+
addAttributes: () => ({ attachmentId: { default: null }, name: { default: "" }, mimeType: { default: null }, size: { default: null }, url: { default: null } }),
|
|
496
|
+
parseHTML: () => [{ tag: "a[data-openeditor-attachment]" }, { tag: "div[data-openeditor-attachment]" }],
|
|
497
|
+
renderHTML: ({ node, HTMLAttributes }) => ["a", mergeAttributes(HTMLAttributes, { "data-openeditor-attachment": "", href: node.attrs.url ?? void 0, download: node.attrs.name || void 0 }), node.attrs.name || "Attachment"],
|
|
498
|
+
addNodeView() {
|
|
499
|
+
return ReactNodeViewRenderer(OpenEditorAttachmentNodeView);
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
var OpenEditorAttachmentViewer = ({ node }) => {
|
|
503
|
+
const runtime = use(OpenEditorAttachmentRuntimeContext);
|
|
504
|
+
const cached = attachmentSnapshotFromNode(node);
|
|
505
|
+
const [state, setState] = useState({ phase: cached.attachmentId && runtime?.resolveAttachment ? "resolving" : cached.url ? "ready" : "missing", snapshot: cached });
|
|
506
|
+
useEffect(() => {
|
|
507
|
+
const controller = new AbortController();
|
|
508
|
+
if (cached.attachmentId && runtime?.resolveAttachment) {
|
|
509
|
+
setState({ phase: "resolving", snapshot: cached });
|
|
510
|
+
void runtime.resolveAttachment(cached.attachmentId, { signal: controller.signal }).then((snapshot2) => {
|
|
511
|
+
if (!controller.signal.aborted) setState({ phase: snapshot2 ? "ready" : "missing", snapshot: snapshot2 });
|
|
512
|
+
}).catch(() => {
|
|
513
|
+
if (!controller.signal.aborted) setState({ phase: "missing", snapshot: null });
|
|
514
|
+
});
|
|
515
|
+
} else setState({ phase: cached.url ? "ready" : "missing", snapshot: cached });
|
|
516
|
+
return () => controller.abort();
|
|
517
|
+
}, [cached.attachmentId, cached.url, runtime]);
|
|
518
|
+
const snapshot = state.snapshot ?? cached;
|
|
519
|
+
const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
520
|
+
/* @__PURE__ */ jsx(AttachmentIcon, { snapshot }),
|
|
521
|
+
/* @__PURE__ */ jsxs("span", { className: "oe-attachment-body", children: [
|
|
522
|
+
/* @__PURE__ */ jsx("strong", { className: "oe-attachment-name", children: snapshot.name || "Attachment unavailable" }),
|
|
523
|
+
/* @__PURE__ */ jsx("span", { className: "oe-attachment-meta", children: state.phase === "resolving" ? "Loading\u2026" : state.phase === "missing" ? "Missing or inaccessible" : [formatAttachmentSize(snapshot.size), attachmentTypeLabel(snapshot)].filter(Boolean).join(" \xB7 ") })
|
|
524
|
+
] })
|
|
525
|
+
] });
|
|
526
|
+
if (state.phase === "ready" && runtime?.openAttachment) return /* @__PURE__ */ jsx("button", { className: "oe-attachment oe-attachment-viewer", onClick: () => void runtime.openAttachment?.(snapshot), type: "button", children: content });
|
|
527
|
+
if (state.phase === "ready" && snapshot.url) return /* @__PURE__ */ jsx("a", { className: "oe-attachment oe-attachment-viewer", href: snapshot.url, rel: "noreferrer", target: "_blank", children: content });
|
|
528
|
+
return /* @__PURE__ */ jsx("div", { className: "oe-attachment oe-attachment-viewer", "data-state": state.phase, children: content });
|
|
529
|
+
};
|
|
359
530
|
var pageSnapshotFromNode = (node) => {
|
|
360
531
|
const pageId = typeof node.attrs?.pageId === "string" ? node.attrs.pageId : "";
|
|
361
532
|
if (!pageId) return null;
|
|
@@ -578,6 +749,7 @@ var createEditorExtensions = (placeholder, customExtensions) => [
|
|
|
578
749
|
ToggleListItem,
|
|
579
750
|
Callout,
|
|
580
751
|
Page,
|
|
752
|
+
Attachment,
|
|
581
753
|
MermaidDiagram,
|
|
582
754
|
...customExtensions.flatMap((extension) => extension.tiptapExtensions)
|
|
583
755
|
];
|
|
@@ -673,6 +845,7 @@ var useOpenEditorController = ({
|
|
|
673
845
|
onChange,
|
|
674
846
|
onFilePasteDrop,
|
|
675
847
|
pageRuntime,
|
|
848
|
+
attachmentRuntime,
|
|
676
849
|
slashMenuItems = [],
|
|
677
850
|
extensions = EMPTY_EXTENSIONS
|
|
678
851
|
} = {}) => {
|
|
@@ -907,6 +1080,7 @@ var useOpenEditorController = ({
|
|
|
907
1080
|
slashMenuItems,
|
|
908
1081
|
extensions,
|
|
909
1082
|
pageRuntime,
|
|
1083
|
+
attachmentRuntime,
|
|
910
1084
|
slashState,
|
|
911
1085
|
selectionBubbleState
|
|
912
1086
|
};
|
|
@@ -1030,6 +1204,8 @@ var renderViewerNode = (node, key, renderers, registry = defaultBlockRegistry) =
|
|
|
1030
1204
|
}
|
|
1031
1205
|
case "page":
|
|
1032
1206
|
return /* @__PURE__ */ jsx(OpenEditorPageViewer, { node }, key);
|
|
1207
|
+
case "attachment":
|
|
1208
|
+
return /* @__PURE__ */ jsx(OpenEditorAttachmentViewer, { node }, key);
|
|
1033
1209
|
default:
|
|
1034
1210
|
if (node.type === "column") {
|
|
1035
1211
|
return /* @__PURE__ */ jsx("div", { children }, key);
|
|
@@ -1067,26 +1243,27 @@ var OpenEditorContent = ({
|
|
|
1067
1243
|
className = "oe-canvas"
|
|
1068
1244
|
}) => {
|
|
1069
1245
|
const internalController = controller;
|
|
1070
|
-
return /* @__PURE__ */ jsx(OpenEditorPageRuntimeContext.Provider, { value: internalController.pageRuntime, children: /* @__PURE__ */ jsx(EditorContent, { editor: internalController.editor, className }) });
|
|
1246
|
+
return /* @__PURE__ */ jsx(OpenEditorAttachmentRuntimeContext.Provider, { value: internalController.attachmentRuntime, children: /* @__PURE__ */ jsx(OpenEditorPageRuntimeContext.Provider, { value: internalController.pageRuntime, children: /* @__PURE__ */ jsx(EditorContent, { editor: internalController.editor, className }) }) });
|
|
1071
1247
|
};
|
|
1072
1248
|
var OpenEditorViewer = ({
|
|
1073
1249
|
document,
|
|
1074
1250
|
className = "oe-viewer",
|
|
1075
1251
|
renderers,
|
|
1076
1252
|
extensions = EMPTY_EXTENSIONS,
|
|
1077
|
-
pageRuntime
|
|
1253
|
+
pageRuntime,
|
|
1254
|
+
attachmentRuntime
|
|
1078
1255
|
}) => {
|
|
1079
1256
|
const registry = createReactBlockRegistry(extensions);
|
|
1080
1257
|
const extensionRenderers = Object.fromEntries(
|
|
1081
1258
|
extensions.map((extension) => [extension.block.name, extension.viewer])
|
|
1082
1259
|
);
|
|
1083
1260
|
const mergedRenderers = { ...extensionRenderers, ...renderers };
|
|
1084
|
-
return /* @__PURE__ */ jsx(OpenEditorPageRuntimeContext.Provider, { value: pageRuntime, children: /* @__PURE__ */ jsx("div", { className, children: normalizeDocument(document).content.map(
|
|
1261
|
+
return /* @__PURE__ */ jsx(OpenEditorAttachmentRuntimeContext.Provider, { value: attachmentRuntime, children: /* @__PURE__ */ jsx(OpenEditorPageRuntimeContext.Provider, { value: pageRuntime, children: /* @__PURE__ */ jsx("div", { className, children: normalizeDocument(document).content.map(
|
|
1085
1262
|
(node, index) => renderViewerNode(node, `viewer-${index}`, mergedRenderers, registry)
|
|
1086
|
-
) }) });
|
|
1263
|
+
) }) }) });
|
|
1087
1264
|
};
|
|
1088
1265
|
var useOpenEditor = useOpenEditorController;
|
|
1089
1266
|
|
|
1090
|
-
export { OpenEditorContent, OpenEditorViewer, defineOpenEditorReactExtension, defineOpenEditorReactNode, getDefaultSlashMenuItems, useOpenEditor, useOpenEditorController };
|
|
1267
|
+
export { OpenEditorContent, OpenEditorViewer, defineOpenEditorReactExtension, defineOpenEditorReactNode, formatAttachmentSize, getDefaultSlashMenuItems, useOpenEditor, useOpenEditorController };
|
|
1091
1268
|
//# sourceMappingURL=index.js.map
|
|
1092
1269
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"names":["page","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import {\n createBlockRegistry,\n deleteTopLevelBlock,\n duplicateTopLevelBlock,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n moveTopLevelBlock,\n normalizeDocument,\n toProseMirrorDocument,\n type ProseMirrorMark,\n type ProseMirrorNode,\n type OpenEditorDocument,\n type BlockRegistry,\n type BlockSpec,\n} from \"@openeditor/core\";\nimport { Checkbox } from \"@base-ui/react/checkbox\";\nimport { renderMermaidSVG } from \"beautiful-mermaid\";\nimport { toExportBundle, type OpenEditorExporters } from \"@openeditor/exporters\";\nimport {\n defaultBlockRegistry,\n createOpenEditorInsertBlock,\n openEditorInsertPresets,\n seedDocument,\n} from \"@openeditor/extensions\";\nimport { InputRule, mergeAttributes, Node, type AnyExtension, type Editor, type NodeConfig } from \"@tiptap/core\";\nimport HorizontalRule from \"@tiptap/extension-horizontal-rule\";\nimport Image from \"@tiptap/extension-image\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { Table } from \"@tiptap/extension-table\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Underline from \"@tiptap/extension-underline\";\nimport { NodeSelection, Plugin } from \"@tiptap/pm/state\";\nimport { ReplaceStep } from \"@tiptap/pm/transform\";\nimport {\n EditorContent,\n NodeViewContent,\n NodeViewWrapper,\n ReactNodeViewRenderer,\n useEditor,\n type ReactNodeViewProps,\n} from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { Fragment, createContext, use, useEffect, useMemo, useRef, useState, type ComponentType, type ReactNode } from \"react\";\n\nexport type OpenEditorPageSnapshot = {\n pageId: string;\n title: string;\n icon?: string | null;\n href?: string | null;\n};\n\nexport type OpenEditorPageRuntime = {\n createPage?: (input: { title: string; icon?: string | null }) => Promise<OpenEditorPageSnapshot>;\n resolvePage?: (pageId: string) => Promise<OpenEditorPageSnapshot | null>;\n renamePage?: (pageId: string, title: string) => Promise<void> | void;\n openPage?: (page: OpenEditorPageSnapshot) => Promise<void> | void;\n};\n\nconst OpenEditorPageRuntimeContext = createContext<OpenEditorPageRuntime | undefined>(undefined);\n\nexport type OpenEditorReactProps = {\n initialDocument?: OpenEditorDocument;\n editable?: boolean;\n placeholder?: string;\n onChange?: (document: OpenEditorDocument) => void;\n onFilePasteDrop?: (file: File) => boolean;\n pageRuntime?: OpenEditorPageRuntime;\n slashMenuItems?: readonly OpenEditorSlashMenuItem[];\n /** Consumer-owned blocks. Extension names and node types must be unique. */\n extensions?: readonly OpenEditorReactExtension[];\n};\n\nexport type OpenEditorReactConfig = OpenEditorReactProps;\n\nexport type OpenEditorController = {\n editor: Editor | null;\n document: OpenEditorDocument;\n exports: ReturnType<typeof toExportBundle>;\n editable: boolean;\n placeholder: string;\n selectedBlock: string;\n setSelectedBlock: (blockName: string) => void;\n getContent: () => OpenEditorDocument;\n setContent: (document: OpenEditorDocument) => void;\n setParagraph: () => void;\n toggleHeading: (level: 1 | 2 | 3 | 4 | 5 | 6) => void;\n toggleBold: () => void;\n toggleItalic: () => void;\n toggleUnderline: () => void;\n toggleStrike: () => void;\n toggleInlineCode: () => void;\n toggleBulletList: () => void;\n toggleOrderedList: () => void;\n toggleTaskList: () => void;\n toggleBlockquote: () => void;\n toggleCodeBlock: () => void;\n undo: () => void;\n redo: () => void;\n insertBlock: (blockName?: string, range?: InsertRange) => void;\n setLink: (url?: string | null) => void;\n getActiveLink: () => string | undefined;\n moveSelectedBlock: (direction: -1 | 1) => void;\n duplicateSelectedBlock: () => void;\n deleteSelectedBlock: () => void;\n slashMenuItems: readonly OpenEditorSlashMenuItem[];\n extensions: readonly OpenEditorReactExtension[];\n pageRuntime?: OpenEditorPageRuntime;\n slashState: SlashState | null;\n selectionBubbleState: SelectionBubbleState | null;\n};\n\nexport type OpenEditorContentProps = {\n controller: OpenEditorController;\n className?: string;\n};\n\ntype InternalOpenEditorController = OpenEditorController & {\n editor: Editor | null;\n};\n\ntype RenderAttributes = Record<string, string | number | boolean | null | undefined>;\nexport type InsertRange = { from: number; to: number };\nexport type OpenEditorOverlayRect = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\nexport type SlashState = {\n query: string;\n from: number;\n to: number;\n left: number;\n top: number;\n anchorRect?: OpenEditorOverlayRect;\n};\nexport type SelectionBubbleState = {\n left: number;\n top: number;\n anchorRect?: OpenEditorOverlayRect;\n};\nexport type OpenEditorSlashMenuItem = {\n key: string;\n label: string;\n group: string;\n keywords?: readonly string[];\n run: (context: { controller: OpenEditorController; range: InsertRange }) => void;\n};\n\nexport type OpenEditorViewerRenderer = (context: {\n node: ProseMirrorNode;\n children: ReactNode;\n}) => ReactNode;\n\nexport type OpenEditorExtensionMenu = {\n label?: string;\n group?: string;\n keywords?: readonly string[];\n};\n\n/**\n * Complete web integration for a consumer-owned block. The portable `block`\n * contract is shared by commands and platform support; the other fields are\n * adapters for the React/Tiptap runtime and non-interactive output.\n */\nexport type OpenEditorReactExtension = {\n block: BlockSpec;\n tiptapExtensions: readonly AnyExtension[];\n slashMenu?: false | OpenEditorExtensionMenu;\n viewer: OpenEditorViewerRenderer;\n exporters?: OpenEditorExporters;\n};\n\nexport const defineOpenEditorReactExtension = <T extends OpenEditorReactExtension>(extension: T): T => extension;\n\nexport type OpenEditorReactNodeExtension = Omit<OpenEditorReactExtension, \"tiptapExtensions\"> & {\n node: Omit<Partial<NodeConfig>, \"name\" | \"addNodeView\">;\n component: ComponentType<ReactNodeViewProps>;\n};\n\n/** Creates the common case: one custom ProseMirror node rendered by one React node view. */\nexport const defineOpenEditorReactNode = ({\n block,\n node,\n component,\n ...extension\n}: OpenEditorReactNodeExtension): OpenEditorReactExtension => ({\n ...extension,\n block,\n tiptapExtensions: [\n Node.create({\n ...node,\n name: block.nodeType ?? block.name,\n addNodeView() {\n return ReactNodeViewRenderer(component);\n },\n }),\n ],\n});\n\nexport type OpenEditorViewerProps = {\n document: OpenEditorDocument;\n className?: string;\n renderers?: Partial<Record<string, OpenEditorViewerRenderer>>;\n extensions?: readonly OpenEditorReactExtension[];\n pageRuntime?: OpenEditorPageRuntime;\n};\n\nconst EMPTY_EXTENSIONS: readonly OpenEditorReactExtension[] = [];\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n columns: {\n insertColumns: (count?: 2 | 3 | 4) => ReturnType;\n };\n }\n}\n\nconst COMMON_HTML_ATTRIBUTES = [\"id\", \"class\", \"title\", \"lang\", \"dir\", \"data-id\", \"style\"] as const;\nconst LAYOUT_ATTRIBUTES = [\"align\", \"width\", \"height\"] as const;\nconst URL_ATTRIBUTES = new Set([\"href\", \"src\"]);\nconst FORBIDDEN_PASTE_TAGS = new Set([\"script\", \"iframe\", \"object\", \"embed\", \"meta\", \"base\"]);\n\nconst createStandardAttributes = (attributeNames: readonly string[]) =>\n Object.fromEntries(\n attributeNames.map((attribute) => [\n attribute,\n {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(attribute),\n renderHTML: (attributes: Record<string, unknown>) =>\n attributes[attribute] ? { [attribute]: attributes[attribute] } : {},\n },\n ]),\n );\n\nconst isSafeUrl = (value: string, allowDataImage: boolean) => {\n const normalized = value.trim().toLowerCase();\n\n if (normalized.startsWith(\"javascript:\") || normalized.startsWith(\"vbscript:\")) {\n return false;\n }\n\n if (normalized.startsWith(\"data:\")) {\n return allowDataImage && normalized.startsWith(\"data:image/\");\n }\n\n return true;\n};\n\nconst sanitizePastedHtml = (html: string) => {\n const parser = new DOMParser();\n const parsed = parser.parseFromString(html, \"text/html\");\n const isFromOpenEditor = /data-openeditor-|oe-|node-/.test(html);\n const preservedAttributes: Record<string, string[]> = {\n a: [\"href\", \"target\", \"rel\"],\n img: [\"src\", \"alt\", \"width\", \"height\"],\n td: [\"colspan\", \"rowspan\"],\n th: [\"colspan\", \"rowspan\", \"scope\"],\n table: [\"border\", \"cellpadding\", \"cellspacing\"],\n \"*\": [\"id\"],\n };\n\n for (const tag of FORBIDDEN_PASTE_TAGS) {\n for (const element of Array.from(parsed.body.getElementsByTagName(tag))) {\n element.remove();\n }\n }\n\n for (const element of Array.from(parsed.body.querySelectorAll<HTMLElement>(\"[href], [src]\"))) {\n const allowDataImage = element.tagName.toLowerCase() === \"img\";\n\n for (const attribute of URL_ATTRIBUTES) {\n const value = element.getAttribute(attribute);\n if (value !== null && !isSafeUrl(value, allowDataImage)) {\n element.removeAttribute(attribute);\n }\n }\n }\n\n if (isFromOpenEditor) {\n return parsed.body.innerHTML;\n }\n\n const sanitizeElement = (node: globalThis.Node) => {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n const allowed = new Set([...(preservedAttributes[tagName] ?? []), ...(preservedAttributes[\"*\"] ?? [])]);\n\n for (const attribute of Array.from(element.attributes)) {\n if (attribute.name.startsWith(\"data-\") || !allowed.has(attribute.name)) {\n element.removeAttribute(attribute.name);\n }\n }\n }\n\n for (const child of Array.from(node.childNodes)) {\n sanitizeElement(child);\n }\n };\n\n sanitizeElement(parsed.body);\n return parsed.body.innerHTML;\n};\n\nconst Columns = Node.create({\n name: \"columns\",\n group: \"block\",\n content: \"column+\",\n isolating: true,\n defining: true,\n addAttributes() {\n return createStandardAttributes([...COMMON_HTML_ATTRIBUTES, ...LAYOUT_ATTRIBUTES, \"cellspacing\"]);\n },\n parseHTML() {\n return [{ tag: \"section[data-openeditor-columns]\" }];\n },\n renderHTML({ node, HTMLAttributes }) {\n const count = node.childCount;\n return [\n \"section\",\n mergeAttributes(\n {\n class: \"oe-columns\",\n \"data-openeditor-columns\": count,\n style: `--oe-column-count:${Math.min(Math.max(count, 2), 4)};${HTMLAttributes.style ?? \"\"}`,\n },\n HTMLAttributes,\n ),\n 0,\n ];\n },\n addCommands() {\n return {\n insertColumns:\n (count: 2 | 3 | 4 = 2) =>\n ({ commands }) =>\n commands.insertContent({\n type: \"columns\",\n content: Array.from({ length: count }, (_, index) => ({\n type: \"column\",\n content: [\n {\n type: \"paragraph\",\n content: [{ type: \"text\", text: `Column ${index + 1}` }],\n },\n ],\n })),\n }),\n };\n },\n addKeyboardShortcuts() {\n return {\n Backspace: ({ editor }) => {\n const { selection } = editor.state;\n\n if (!(selection instanceof NodeSelection) || selection.node.type.name !== \"columns\") {\n return false;\n }\n\n const allColumnsEmpty = Array.from({ length: selection.node.childCount }, (_, index) =>\n selection.node.child(index),\n ).every(\n (column) =>\n column.childCount === 1 &&\n column.firstChild?.type.name === \"paragraph\" &&\n column.firstChild.childCount === 0,\n );\n\n if (!allColumnsEmpty) {\n return false;\n }\n\n editor.view.dispatch(\n editor.state.tr.replaceWith(selection.from, selection.to, editor.state.schema.nodes.paragraph.create()),\n );\n return true;\n },\n };\n },\n});\n\nconst Column = Node.create({\n name: \"column\",\n content: \"block+\",\n isolating: true,\n defining: true,\n addAttributes() {\n return createStandardAttributes([...COMMON_HTML_ATTRIBUTES, ...LAYOUT_ATTRIBUTES]);\n },\n parseHTML() {\n return [{ tag: \"div[data-openeditor-column]\" }];\n },\n renderHTML({ HTMLAttributes }: { HTMLAttributes: RenderAttributes }) {\n return [\"div\", mergeAttributes({ \"data-openeditor-column\": \"\", class: \"oe-column\" }, HTMLAttributes), 0];\n },\n});\n\nconst Divider = HorizontalRule.extend({\n addAttributes() {\n return {\n ...createStandardAttributes([\"class\", \"style\"]),\n class: {\n default: \"oe-divider\",\n },\n };\n },\n addInputRules() {\n return [\n new InputRule({\n find: /^(?:---|___|\\*\\*\\*)$/,\n handler: ({ state, range }) => {\n const { tr } = state;\n tr.insert(range.from - 1, this.type.create()).delete(tr.mapping.map(range.from), tr.mapping.map(range.to));\n },\n }),\n ];\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n filterTransaction(transaction, state) {\n const { selection } = state;\n const isDividerSelection = selection instanceof NodeSelection && selection.node.type.name === \"horizontalRule\";\n const isTypingOverDivider = transaction.steps.some(\n (step) => step instanceof ReplaceStep && step.slice.content.size > 0,\n );\n\n return !(isDividerSelection && transaction.docChanged && isTypingOverDivider);\n },\n }),\n ];\n },\n});\n\nconst OpenEditorTaskCheckbox = ({\n checked,\n label,\n readOnly = false,\n tabIndex,\n onCheckedChange,\n}: {\n checked: boolean;\n label: string;\n readOnly?: boolean;\n tabIndex?: number;\n onCheckedChange?: (checked: boolean) => void;\n}) => (\n <Checkbox.Root\n aria-label={label}\n checked={checked}\n className=\"oe-task-checkbox\"\n onCheckedChange={onCheckedChange}\n onMouseDown={(event) => event.preventDefault()}\n readOnly={readOnly}\n tabIndex={tabIndex}\n >\n <Checkbox.Indicator className=\"oe-task-checkbox-indicator\" keepMounted />\n </Checkbox.Root>\n);\n\nconst OpenEditorTaskItemNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const checked = Boolean(node.attrs.checked);\n\n return (\n <NodeViewWrapper as=\"li\" data-checked={checked ? \"true\" : \"false\"}>\n <span className=\"oe-task-item-checkbox\" contentEditable={false}>\n <OpenEditorTaskCheckbox\n checked={checked}\n label={`Task item checkbox for ${node.textContent || \"empty task item\"}`}\n onCheckedChange={(nextChecked) => {\n if (editor.isEditable) {\n updateAttributes({ checked: nextChecked });\n }\n }}\n readOnly={!editor.isEditable}\n />\n </span>\n <NodeViewContent as=\"div\" />\n </NodeViewWrapper>\n );\n};\n\nconst BaseUiTaskItem = TaskItem.extend({\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorTaskItemNodeView);\n },\n});\n\nconst ToggleList = Node.create({\n name: \"toggleList\",\n group: \"block\",\n content: \"toggleListItem+\",\n parseHTML: () => [{ tag: \"ul[data-openeditor-toggle-list]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"ul\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-toggle-list\": \"\" }),\n 0,\n ],\n});\n\nconst OpenEditorToggleListItemNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const open = Boolean(node.attrs.open);\n\n return (\n <NodeViewWrapper as=\"li\" className=\"oe-toggle-list-item\" data-open={open ? \"true\" : \"false\"}>\n <button\n aria-expanded={open}\n aria-label={open ? \"Collapse toggle item\" : \"Expand toggle item\"}\n className=\"oe-toggle-list-trigger\"\n contentEditable={false}\n disabled={!editor.isEditable}\n onClick={() => updateAttributes({ open: !open })}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"oe-toggle-list-chevron\">›</span>\n </button>\n <NodeViewContent as=\"div\" className=\"oe-toggle-list-content\" />\n </NodeViewWrapper>\n );\n};\n\nconst ToggleListItem = Node.create({\n name: \"toggleListItem\",\n content: \"paragraph block*\",\n defining: true,\n addAttributes: () => ({ open: { default: true } }),\n parseHTML: () => [{ tag: \"li[data-openeditor-toggle-list-item]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"li\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-toggle-list-item\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorToggleListItemNodeView);\n },\n});\n\nconst CALLOUT_TONES = [\"info\", \"success\", \"warning\", \"danger\"] as const;\n\nconst normalizeCalloutTone = (value: unknown) =>\n CALLOUT_TONES.includes(value as (typeof CALLOUT_TONES)[number]) ? String(value) : \"info\";\n\nconst OpenEditorCalloutNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => (\n <NodeViewWrapper as=\"aside\" className=\"oe-callout\" data-tone={normalizeCalloutTone(node.attrs.tone)}>\n <select\n aria-label=\"Callout tone\"\n className=\"oe-callout-tone\"\n contentEditable={false}\n disabled={!editor.isEditable}\n onChange={(event) => updateAttributes({ tone: event.target.value })}\n value={normalizeCalloutTone(node.attrs.tone)}\n >\n {CALLOUT_TONES.map((tone) => <option key={tone} value={tone}>{tone}</option>)}\n </select>\n <NodeViewContent as=\"div\" className=\"oe-callout-content\" />\n </NodeViewWrapper>\n);\n\nconst Callout = Node.create({\n name: \"callout\",\n group: \"block\",\n content: \"block+\",\n defining: true,\n addAttributes: () => ({ tone: { default: \"info\" } }),\n parseHTML: () => [{ tag: \"aside[data-openeditor-callout]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"aside\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-callout\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorCalloutNodeView);\n },\n});\n\nconst pageSnapshotFromNode = (node: {\n attrs?: Record<string, unknown>;\n content?: unknown;\n textContent?: string;\n}): OpenEditorPageSnapshot | null => {\n const pageId = typeof node.attrs?.pageId === \"string\" ? node.attrs.pageId : \"\";\n if (!pageId) return null;\n return {\n pageId,\n title: node.textContent || getNodeText(node as { content?: unknown[] }) || \"Untitled\",\n icon: typeof node.attrs?.icon === \"string\" ? node.attrs.icon : \"📄\",\n href: typeof node.attrs?.href === \"string\" ? node.attrs.href : null,\n };\n};\n\nconst OpenEditorPageNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const runtime = use(OpenEditorPageRuntimeContext);\n const [creating, setCreating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const snapshot = pageSnapshotFromNode(node);\n const icon = typeof node.attrs.icon === \"string\" ? node.attrs.icon : \"📄\";\n\n const createPage = async () => {\n if (!runtime?.createPage || creating) return;\n setCreating(true);\n setError(null);\n try {\n const created = await runtime.createPage({ title: node.textContent || \"Untitled\", icon });\n updateAttributes({ pageId: created.pageId, icon: created.icon ?? icon, href: created.href ?? null });\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not create the page.\");\n } finally {\n setCreating(false);\n }\n };\n\n return (\n <NodeViewWrapper className=\"oe-page\" data-page-id={snapshot?.pageId ?? \"\"}>\n <input\n aria-label=\"Page icon\"\n className=\"oe-page-icon-input\"\n contentEditable={false}\n disabled={!editor.isEditable}\n maxLength={8}\n onChange={(event) => updateAttributes({ icon: event.target.value || \"📄\" })}\n value={icon}\n />\n <NodeViewContent\n as=\"div\"\n className=\"oe-page-title\"\n onBlur={() => {\n if (snapshot?.pageId) void runtime?.renamePage?.(snapshot.pageId, node.textContent || \"Untitled\");\n }}\n />\n {snapshot ? (\n <button\n aria-label={`Open ${snapshot.title}`}\n className=\"oe-page-action\"\n contentEditable={false}\n onClick={() => void runtime?.openPage?.(snapshot)}\n type=\"button\"\n >\n Open <span aria-hidden=\"true\">→</span>\n </button>\n ) : runtime?.createPage && editor.isEditable ? (\n <button\n className=\"oe-page-action\"\n contentEditable={false}\n disabled={creating}\n onClick={() => void createPage()}\n type=\"button\"\n >\n {creating ? \"Creating…\" : \"Create page\"}\n </button>\n ) : null}\n {error ? <span className=\"oe-page-error\" contentEditable={false} role=\"alert\">{error}</span> : null}\n </NodeViewWrapper>\n );\n};\n\nconst Page = Node.create({\n name: \"page\",\n group: \"block\",\n content: \"inline*\",\n defining: true,\n addAttributes: () => ({\n pageId: { default: null },\n icon: { default: \"📄\" },\n href: { default: null },\n }),\n parseHTML: () => [{ tag: \"div[data-openeditor-page]\" }, { tag: \"a[data-openeditor-page]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"div\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-page\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorPageNodeView);\n },\n});\n\nconst OpenEditorPageViewer = ({ node }: { node: ProseMirrorNode }) => {\n const runtime = use(OpenEditorPageRuntimeContext);\n const cached = pageSnapshotFromNode(node);\n const [resolved, setResolved] = useState<OpenEditorPageSnapshot | null>(null);\n\n useEffect(() => {\n let active = true;\n setResolved(null);\n if (cached?.pageId && runtime?.resolvePage) {\n void runtime.resolvePage(cached.pageId).then((page) => {\n if (active && page) setResolved(page);\n });\n }\n return () => { active = false; };\n }, [cached?.pageId, runtime]);\n\n const page = resolved ?? cached;\n const title = page?.title ?? (getNodeText(node) || \"Untitled\");\n const content = <><span className=\"oe-page-icon\" aria-hidden=\"true\">{page?.icon ?? \"📄\"}</span><span className=\"oe-page-title\">{title}</span><span className=\"oe-page-arrow\" aria-hidden=\"true\">→</span></>;\n if (page && runtime?.openPage) {\n return <button className=\"oe-page oe-page-viewer\" onClick={() => void runtime.openPage?.(page)} type=\"button\">{content}</button>;\n }\n if (page?.href) {\n return <a className=\"oe-page oe-page-viewer\" href={page.href}>{content}</a>;\n }\n return <div className=\"oe-page oe-page-viewer\">{content}</div>;\n};\n\nconst MermaidPreview = ({ code }: { code: string }) => {\n const rendered = useMemo(() => {\n try {\n return {\n error: null,\n svg: renderMermaidSVG(code, {\n bg: \"var(--oe-surface, #ffffff)\",\n fg: \"var(--oe-text, #171717)\",\n accent: \"var(--oe-accent-strong, #171717)\",\n border: \"var(--oe-border-strong, #d4d4d4)\",\n muted: \"var(--oe-muted, #737373)\",\n surface: \"var(--oe-surface-muted, #f5f5f5)\",\n transparent: true,\n }),\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n svg: null,\n };\n }\n }, [code]);\n\n return rendered.error ? (\n <pre className=\"oe-diagram-error\" role=\"alert\">{rendered.error}</pre>\n ) : (\n <div className=\"oe-diagram-preview\" dangerouslySetInnerHTML={{ __html: rendered.svg ?? \"\" }} />\n );\n};\n\nconst ToggleListViewerItem = ({ children, initiallyOpen }: { children: ReactNode; initiallyOpen: boolean }) => {\n const [open, setOpen] = useState(initiallyOpen);\n return (\n <li className=\"oe-toggle-list-item\" data-open={open ? \"true\" : \"false\"}>\n <button\n aria-expanded={open}\n aria-label={open ? \"Collapse toggle item\" : \"Expand toggle item\"}\n className=\"oe-toggle-list-trigger\"\n onClick={() => setOpen((current) => !current)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"oe-toggle-list-chevron\">›</span>\n </button>\n <div className=\"oe-toggle-list-content\">{children}</div>\n </li>\n );\n};\n\nconst OpenEditorDiagramNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const code = typeof node.attrs.code === \"string\" ? node.attrs.code : \"\";\n return (\n <NodeViewWrapper className=\"oe-diagram\" contentEditable={false}>\n <MermaidPreview code={code} />\n {editor.isEditable ? (\n <textarea\n aria-label=\"Mermaid diagram source\"\n className=\"oe-diagram-source\"\n onChange={(event) => updateAttributes({ code: event.target.value })}\n spellCheck={false}\n value={code}\n />\n ) : null}\n </NodeViewWrapper>\n );\n};\n\nconst MermaidDiagram = Node.create({\n name: \"mermaidDiagram\",\n group: \"block\",\n atom: true,\n draggable: true,\n addAttributes: () => ({ code: { default: \"\" } }),\n parseHTML: () => [{ tag: \"figure[data-openeditor-diagram]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"figure\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-diagram\": \"\" }),\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorDiagramNodeView);\n },\n});\n\nconst createEditorExtensions = (\n placeholder: string,\n customExtensions: readonly OpenEditorReactExtension[],\n) => [\n StarterKit.configure({ horizontalRule: false, link: false, underline: false }),\n Divider,\n Image.configure({ allowBase64: true }),\n Link.configure({ openOnClick: false }),\n Underline,\n TaskList,\n BaseUiTaskItem.configure({ nested: true }),\n Table.configure({ resizable: true }),\n TableRow,\n TableHeader,\n TableCell,\n TextAlign.configure({ types: [\"heading\", \"paragraph\"] }),\n Placeholder.configure({ placeholder }),\n Columns,\n Column,\n ToggleList,\n ToggleListItem,\n Callout,\n Page,\n MermaidDiagram,\n ...customExtensions.flatMap((extension) => extension.tiptapExtensions),\n];\n\nconst createReactBlockRegistry = (extensions: readonly OpenEditorReactExtension[]): BlockRegistry =>\n createBlockRegistry([\n ...defaultBlockRegistry.values(),\n ...extensions.map((extension) => extension.block),\n ]);\n\nconst createReactExporters = (extensions: readonly OpenEditorReactExtension[]): OpenEditorExporters => ({\n html: Object.assign({}, ...extensions.map((extension) => extension.exporters?.html ?? {})),\n text: Object.assign({}, ...extensions.map((extension) => extension.exporters?.text ?? {})),\n});\n\nconst getNodeText = (node: { text?: string; content?: unknown[] }): string =>\n node.text ?? node.content?.map((child) => getNodeText(child as { text?: string; content?: unknown[] })).join(\"\") ?? \"\";\n\nconst toOverlayRect = (coordinates: { left: number; right: number; top: number; bottom: number }): OpenEditorOverlayRect => ({\n left: coordinates.left,\n right: coordinates.right,\n top: coordinates.top,\n bottom: coordinates.bottom,\n width: coordinates.right - coordinates.left,\n height: coordinates.bottom - coordinates.top,\n});\n\nconst getSlashState = (editor: NonNullable<ReturnType<typeof useEditor>>): SlashState | null => {\n const { selection } = editor.state;\n\n if (!selection.empty) {\n return null;\n }\n\n const { $from } = selection;\n const textBeforeCursor = $from.parent.textBetween(0, $from.parentOffset, \"\\n\", \"\\n\");\n const match = /(?:^|\\s)\\/([\\w -]*)$/.exec(textBeforeCursor);\n\n if (!match) {\n return null;\n }\n\n const query = match[1] ?? \"\";\n const from = $from.pos - query.length - 1;\n const to = $from.pos;\n const coordinates = editor.view.coordsAtPos(to);\n const anchorRect = toOverlayRect(coordinates);\n\n return {\n query,\n from,\n to,\n left: coordinates.left,\n top: coordinates.bottom + 8,\n anchorRect,\n };\n};\n\nconst getSelectionBubbleState = (editor: NonNullable<ReturnType<typeof useEditor>>): SelectionBubbleState | null => {\n const { selection } = editor.state;\n\n if (selection instanceof NodeSelection && selection.node.type.name === \"horizontalRule\") {\n return null;\n }\n\n if (selection.empty) {\n return null;\n }\n\n const domSelection = typeof window === \"undefined\" ? null : window.getSelection();\n const selectedRange = domSelection?.rangeCount ? domSelection.getRangeAt(0) : null;\n const selectedRect = selectedRange?.getBoundingClientRect();\n\n if (\n selectedRange &&\n editor.view.dom.contains(selectedRange.commonAncestorContainer) &&\n selectedRect &&\n selectedRect.width > 0 &&\n selectedRect.height > 0\n ) {\n return {\n left: selectedRect.left + selectedRect.width / 2,\n top: selectedRect.top,\n anchorRect: toOverlayRect(selectedRect),\n };\n }\n\n const fromCoordinates = editor.view.coordsAtPos(selection.from);\n const toCoordinates = editor.view.coordsAtPos(selection.to);\n const anchorRect = toOverlayRect({\n left: Math.min(fromCoordinates.left, toCoordinates.left),\n right: Math.max(fromCoordinates.right, toCoordinates.right),\n top: Math.min(fromCoordinates.top, toCoordinates.top),\n bottom: Math.max(fromCoordinates.bottom, toCoordinates.bottom),\n });\n\n return {\n left: (fromCoordinates.left + toCoordinates.right) / 2,\n top: Math.min(fromCoordinates.top, toCoordinates.top) - 8,\n anchorRect,\n };\n};\n\nconst getSelectedTopLevelIndex = (editor: NonNullable<ReturnType<typeof useEditor>>) => {\n const { $from } = editor.state.selection;\n const selectedTopLevelPosition = $from.depth > 0 ? $from.before(1) : 0;\n let selectedIndex = 0;\n\n editor.state.doc.forEach((_, offset, index) => {\n if (offset <= selectedTopLevelPosition) {\n selectedIndex = index;\n }\n });\n\n return selectedIndex;\n};\n\nexport const useOpenEditorController = ({\n initialDocument = seedDocument,\n editable = true,\n placeholder = \"Start writing...\",\n onChange,\n onFilePasteDrop,\n pageRuntime,\n slashMenuItems = [],\n extensions = EMPTY_EXTENSIONS,\n}: OpenEditorReactProps = {}): OpenEditorController => {\n const [document, setDocument] = useState(normalizeDocument(initialDocument));\n const [selectedBlock, setSelectedBlock] = useState(\"paragraph\");\n const [slashState, setSlashState] = useState<SlashState | null>(null);\n const [selectionBubbleState, setSelectionBubbleState] = useState<SelectionBubbleState | null>(null);\n const slashStateRef = useRef<SlashState | null>(null);\n const selectionBubbleStateRef = useRef<SelectionBubbleState | null>(null);\n const registry = useMemo(() => createReactBlockRegistry(extensions), [extensions]);\n const exporters = useMemo(() => createReactExporters(extensions), [extensions]);\n const editor = useEditor({\n immediatelyRender: false,\n extensions: createEditorExtensions(placeholder, extensions),\n content: toProseMirrorDocument(normalizeDocument(initialDocument)),\n editable,\n editorProps: {\n attributes: {\n class: \"oe-prosemirror\",\n \"aria-label\": \"OpenEditor document\",\n },\n transformPastedHTML: sanitizePastedHtml,\n handlePaste: (_view, event) => {\n const file = event.clipboardData?.files?.[0];\n\n if (!file || !onFilePasteDrop?.(file)) {\n return false;\n }\n\n event.preventDefault();\n return true;\n },\n handleDrop: (_view, event, _slice, moved) => {\n const file = event.dataTransfer?.files?.[0];\n\n if (moved || !file || !onFilePasteDrop?.(file)) {\n return false;\n }\n\n event.preventDefault();\n return true;\n },\n },\n onUpdate: ({ editor: currentEditor }) => {\n const nextDocument = normalizeDocument(\n fromProseMirrorDocument(\n currentEditor.getJSON(),\n initialDocument.meta,\n ),\n );\n setDocument(nextDocument);\n onChange?.(nextDocument);\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(getSelectionBubbleState(currentEditor));\n },\n onSelectionUpdate: ({ editor: currentEditor }) => {\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(getSelectionBubbleState(currentEditor));\n },\n }, [extensions]);\n const exports = useMemo(\n () => toExportBundle(document, exporters),\n [document, exporters],\n );\n\n useEffect(() => {\n slashStateRef.current = slashState;\n }, [slashState]);\n\n useEffect(() => {\n selectionBubbleStateRef.current = selectionBubbleState;\n }, [selectionBubbleState]);\n\n useEffect(() => {\n if (!editor || typeof window === \"undefined\") {\n return;\n }\n\n let animationFrame = 0;\n\n const refreshOverlayAnchors = () => {\n if (!slashStateRef.current && !selectionBubbleStateRef.current) {\n return;\n }\n\n window.cancelAnimationFrame(animationFrame);\n animationFrame = window.requestAnimationFrame(() => {\n if (slashStateRef.current) {\n setSlashState(getSlashState(editor));\n }\n\n if (selectionBubbleStateRef.current) {\n setSelectionBubbleState(getSelectionBubbleState(editor));\n }\n });\n };\n\n window.addEventListener(\"scroll\", refreshOverlayAnchors, true);\n window.addEventListener(\"resize\", refreshOverlayAnchors);\n\n return () => {\n window.cancelAnimationFrame(animationFrame);\n window.removeEventListener(\"scroll\", refreshOverlayAnchors, true);\n window.removeEventListener(\"resize\", refreshOverlayAnchors);\n };\n }, [editor]);\n\n const insertBlock = (blockName = selectedBlock, range?: InsertRange) => {\n if (!editor) {\n return;\n }\n\n const preset = openEditorInsertPresets.find((item) => item.key === blockName);\n const spec = registry.get(blockName);\n if (!spec) {\n return;\n }\n\n const chain = () => {\n const commandChain = editor.chain().focus();\n return range ? commandChain.deleteRange(range) : commandChain;\n };\n\n chain().insertContent(preset ? createOpenEditorInsertBlock(preset.key) : spec.defaultNode()).run();\n setSlashState(null);\n };\n\n const setDocumentContent = (content: OpenEditorDocument[\"content\"]) => {\n if (!editor) {\n return;\n }\n\n editor.commands.setContent(toProseMirrorDocument(normalizeDocument({ ...document, content })));\n };\n\n const setContent = (nextDocument: OpenEditorDocument) => {\n if (!editor) {\n return;\n }\n\n editor.commands.setContent(toProseMirrorDocument(normalizeDocument(nextDocument)));\n };\n\n const moveSelectedBlock = (direction: -1 | 1) => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n const nextIndex = selectedIndex + direction;\n\n if (nextIndex < 0 || nextIndex >= currentDocument.content.length) {\n return;\n }\n\n setDocumentContent(moveTopLevelBlock(currentDocument, selectedIndex, nextIndex).content);\n };\n\n const duplicateSelectedBlock = () => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n setDocumentContent(duplicateTopLevelBlock(currentDocument, selectedIndex).content);\n };\n\n const deleteSelectedBlock = () => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n setDocumentContent(deleteTopLevelBlock(currentDocument, selectedIndex).content);\n };\n\n const setLink = (url?: string | null) => {\n if (!editor) {\n return;\n }\n\n if (!url) {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n };\n\n const setParagraph = () => {\n editor?.chain().focus().setParagraph().run();\n };\n\n const toggleHeading = (level: 1 | 2 | 3 | 4 | 5 | 6) => {\n editor?.chain().focus().toggleHeading({ level }).run();\n };\n\n const toggleBold = () => {\n editor?.chain().focus().toggleBold().run();\n };\n\n const toggleItalic = () => {\n editor?.chain().focus().toggleItalic().run();\n };\n\n const toggleUnderline = () => {\n editor?.chain().focus().toggleUnderline().run();\n };\n\n const toggleStrike = () => {\n editor?.chain().focus().toggleStrike().run();\n };\n\n const toggleInlineCode = () => {\n editor?.chain().focus().toggleCode().run();\n };\n\n const toggleBulletList = () => {\n editor?.chain().focus().toggleBulletList().run();\n };\n\n const toggleOrderedList = () => {\n editor?.chain().focus().toggleOrderedList().run();\n };\n\n const toggleTaskList = () => {\n editor?.chain().focus().toggleTaskList().run();\n };\n\n const toggleBlockquote = () => {\n editor?.chain().focus().toggleBlockquote().run();\n };\n\n const toggleCodeBlock = () => {\n editor?.chain().focus().toggleCodeBlock().run();\n };\n\n const undo = () => {\n editor?.chain().focus().undo().run();\n };\n\n const redo = () => {\n editor?.chain().focus().redo().run();\n };\n\n const controller: InternalOpenEditorController = {\n document,\n editor,\n exports,\n editable,\n placeholder,\n selectedBlock,\n setSelectedBlock,\n getContent: () => document,\n setContent,\n setParagraph,\n toggleHeading,\n toggleBold,\n toggleItalic,\n toggleUnderline,\n toggleStrike,\n toggleInlineCode,\n toggleBulletList,\n toggleOrderedList,\n toggleTaskList,\n toggleBlockquote,\n toggleCodeBlock,\n undo,\n redo,\n insertBlock,\n setLink,\n getActiveLink: () => editor?.getAttributes(\"link\").href as string | undefined,\n moveSelectedBlock,\n duplicateSelectedBlock,\n deleteSelectedBlock,\n slashMenuItems,\n extensions,\n pageRuntime,\n slashState,\n selectionBubbleState,\n };\n\n return controller;\n};\n\nexport const getDefaultSlashMenuItems = (controller: OpenEditorController): OpenEditorSlashMenuItem[] => {\n const internalController = controller as InternalOpenEditorController;\n\n return [\n ...openEditorInsertPresets.map((preset) => ({\n key: preset.key,\n label: preset.label,\n group: preset.group,\n keywords: [preset.key],\n run: ({ controller: current, range }: { controller: OpenEditorController; range: InsertRange }) =>\n current.insertBlock(preset.key, range),\n })),\n {\n key: \"moveBlockUp\",\n label: \"Move Block Up\",\n group: \"block\",\n run: ({ range }) => {\n internalController.editor?.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(-1);\n },\n },\n {\n key: \"moveBlockDown\",\n label: \"Move Block Down\",\n group: \"block\",\n run: ({ range }) => {\n internalController.editor?.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(1);\n },\n },\n ...controller.extensions\n .filter((extension) => extension.slashMenu !== false)\n .map((extension) => {\n const menu = extension.slashMenu || undefined;\n return {\n key: extension.block.name,\n label: menu?.label ?? extension.block.label,\n group: menu?.group ?? extension.block.group,\n keywords: menu?.keywords ?? [extension.block.name],\n run: ({ controller: current, range }: { controller: OpenEditorController; range: InsertRange }) =>\n current.insertBlock(extension.block.name, range),\n };\n }),\n ...controller.slashMenuItems,\n ];\n};\n\nconst renderTextWithMarks = (\n text: string,\n marks: readonly ProseMirrorMark[] = [],\n key: string,\n): ReactNode =>\n marks.reduceRight<ReactNode>((children, mark, index) => {\n const nodeKey = `${key}-${mark.type}-${index}`;\n switch (mark.type) {\n case \"bold\":\n return <strong key={nodeKey}>{children}</strong>;\n case \"italic\":\n return <em key={nodeKey}>{children}</em>;\n case \"underline\":\n return <u key={nodeKey}>{children}</u>;\n case \"strike\":\n return <s key={nodeKey}>{children}</s>;\n case \"code\":\n return <code key={nodeKey}>{children}</code>;\n case \"link\":\n return (\n <a key={nodeKey} href={typeof mark.attrs?.href === \"string\" ? mark.attrs.href : undefined}>\n {children}\n </a>\n );\n default:\n return children;\n }\n }, text);\n\nconst renderViewerNode = (\n node: ProseMirrorNode,\n key: string,\n renderers?: Partial<Record<string, OpenEditorViewerRenderer>>,\n registry: BlockRegistry = defaultBlockRegistry,\n): ReactNode => {\n if (node.type === \"text\") {\n return renderTextWithMarks(node.text ?? \"\", node.marks, key);\n }\n\n const children = node.content?.map((child, index) => renderViewerNode(child, `${key}-${index}`, renderers, registry)) ?? null;\n const blockKey = findBlockSpecForNode(registry, node)?.name ?? node.type;\n const customRenderer = renderers?.[blockKey];\n if (customRenderer) {\n return <Fragment key={key}>{customRenderer({ node, children })}</Fragment>;\n }\n\n switch (blockKey) {\n case \"paragraph\":\n return <p key={key}>{children}</p>;\n case \"heading\": {\n const level = typeof node.attrs?.level === \"number\" ? Math.min(Math.max(node.attrs.level, 1), 6) : 2;\n switch (level) {\n case 1:\n return <h1 key={key}>{children}</h1>;\n case 2:\n return <h2 key={key}>{children}</h2>;\n case 3:\n return <h3 key={key}>{children}</h3>;\n case 4:\n return <h4 key={key}>{children}</h4>;\n case 5:\n return <h5 key={key}>{children}</h5>;\n default:\n return <h6 key={key}>{children}</h6>;\n }\n }\n case \"bulletList\":\n return <ul key={key}>{children}</ul>;\n case \"orderedList\":\n return <ol key={key}>{children}</ol>;\n case \"taskList\":\n return <ul key={key} data-type=\"taskList\">{children}</ul>;\n case \"blockquote\":\n return <blockquote key={key}>{children}</blockquote>;\n case \"codeBlock\":\n return <pre key={key}><code>{node.content?.map((child) => child.text ?? \"\").join(\"\")}</code></pre>;\n case \"divider\":\n return <hr key={key} />;\n case \"image\":\n return <img key={key} src={typeof node.attrs?.src === \"string\" ? node.attrs.src : \"\"} alt={typeof node.attrs?.alt === \"string\" ? node.attrs.alt : \"\"} />;\n case \"columns\":\n return <section key={key}>{children}</section>;\n case \"table\":\n return <table key={key}><tbody>{children}</tbody></table>;\n case \"toggleList\":\n return <ul key={key} data-openeditor-toggle-list>{children}</ul>;\n case \"callout\":\n return <aside key={key} className=\"oe-callout\" data-tone={normalizeCalloutTone(node.attrs?.tone)}>{children}</aside>;\n case \"diagram\": {\n const code = typeof node.attrs?.code === \"string\" ? node.attrs.code : \"\";\n return <figure key={key} className=\"oe-diagram\"><MermaidPreview code={code} /></figure>;\n }\n case \"page\":\n return <OpenEditorPageViewer key={key} node={node} />;\n default:\n if (node.type === \"column\") {\n return <div key={key}>{children}</div>;\n }\n if (node.type === \"tableRow\") {\n return <tr key={key}>{children}</tr>;\n }\n if (node.type === \"tableHeader\") {\n return <th key={key}>{children}</th>;\n }\n if (node.type === \"tableCell\") {\n return <td key={key}>{children}</td>;\n }\n if (node.type === \"listItem\") {\n return <li key={key}>{children}</li>;\n }\n if (node.type === \"taskItem\") {\n const checked = Boolean(node.attrs?.checked);\n return (\n <li key={key} data-checked={checked ? \"true\" : \"false\"}>\n <span className=\"oe-task-item-checkbox\" aria-hidden=\"true\">\n <OpenEditorTaskCheckbox checked={checked} label=\"Task item checkbox\" readOnly tabIndex={-1} />\n </span>\n <div>{children}</div>\n </li>\n );\n }\n if (node.type === \"toggleListItem\") {\n return <ToggleListViewerItem initiallyOpen={node.attrs?.open !== false} key={key}>{children}</ToggleListViewerItem>;\n }\n if (node.type === \"hardBreak\") {\n return <br key={key} />;\n }\n return <div key={key}>{children}</div>;\n }\n};\n\nexport const OpenEditorContent = ({\n controller,\n className = \"oe-canvas\",\n}: OpenEditorContentProps) => {\n const internalController = controller as InternalOpenEditorController;\n return (\n <OpenEditorPageRuntimeContext.Provider value={internalController.pageRuntime}>\n <EditorContent editor={internalController.editor} className={className} />\n </OpenEditorPageRuntimeContext.Provider>\n );\n};\n\nexport const OpenEditorViewer = ({\n document,\n className = \"oe-viewer\",\n renderers,\n extensions = EMPTY_EXTENSIONS,\n pageRuntime,\n}: OpenEditorViewerProps) => {\n const registry = createReactBlockRegistry(extensions);\n const extensionRenderers = Object.fromEntries(\n extensions.map((extension) => [extension.block.name, extension.viewer]),\n );\n const mergedRenderers = { ...extensionRenderers, ...renderers };\n\n return (\n <OpenEditorPageRuntimeContext.Provider value={pageRuntime}>\n <div className={className}>\n {normalizeDocument(document).content.map((node, index) =>\n renderViewerNode(node, `viewer-${index}`, mergedRenderers, registry),\n )}\n </div>\n </OpenEditorPageRuntimeContext.Provider>\n );\n};\n\nexport const useOpenEditor = useOpenEditorController;\nexport { seedDocument };\nexport { NodeViewContent, NodeViewWrapper };\nexport type { ReactNodeViewProps as OpenEditorNodeViewProps };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"names":["snapshot","Fragment","page"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEA,IAAM,4BAAA,GAA+B,cAAiD,MAAS,CAAA;AAC/F,IAAM,kCAAA,GAAqC,cAA4D,MAAS,CAAA;AAuHzG,IAAM,8BAAA,GAAiC,CAAqC,SAAA,KAAoB;AAQhG,IAAM,4BAA4B,CAAC;AAAA,EACxC,KAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,MAA+D;AAAA,EAC7D,GAAG,SAAA;AAAA,EACH,KAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,KAAK,MAAA,CAAO;AAAA,MACV,GAAG,IAAA;AAAA,MACH,IAAA,EAAM,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,IAAA;AAAA,MAC9B,WAAA,GAAc;AACZ,QAAA,OAAO,sBAAsB,SAAS,CAAA;AAAA,MACxC;AAAA,KACD;AAAA;AAEL,CAAA;AAWA,IAAM,mBAAwD,EAAC;AAU/D,IAAM,sBAAA,GAAyB,CAAC,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAQ,KAAA,EAAO,WAAW,OAAO,CAAA;AACzF,IAAM,iBAAA,GAAoB,CAAC,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAA;AACrD,IAAM,iCAAiB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC9C,IAAM,oBAAA,mBAAuB,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,UAAU,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAC,CAAA;AAE5F,IAAM,wBAAA,GAA2B,CAAC,cAAA,KAChC,MAAA,CAAO,WAAA;AAAA,EACL,cAAA,CAAe,GAAA,CAAI,CAAC,SAAA,KAAc;AAAA,IAChC,SAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAW,CAAC,OAAA,KAAyB,OAAA,CAAQ,aAAa,SAAS,CAAA;AAAA,MACnE,UAAA,EAAY,CAAC,UAAA,KACX,UAAA,CAAW,SAAS,CAAA,GAAI,EAAE,CAAC,SAAS,GAAG,UAAA,CAAW,SAAS,CAAA,KAAM;AAAC;AACtE,GACD;AACH,CAAA;AAEF,IAAM,SAAA,GAAY,CAAC,KAAA,EAAe,cAAA,KAA4B;AAC5D,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAE5C,EAAA,IAAI,WAAW,UAAA,CAAW,aAAa,KAAK,UAAA,CAAW,UAAA,CAAW,WAAW,CAAA,EAAG;AAC9E,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,CAAW,UAAA,CAAW,OAAO,CAAA,EAAG;AAClC,IAAA,OAAO,cAAA,IAAkB,UAAA,CAAW,UAAA,CAAW,aAAa,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAAiB;AAC3C,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,eAAA,CAAgB,IAAA,EAAM,WAAW,CAAA;AACvD,EAAA,MAAM,gBAAA,GAAmB,4BAAA,CAA6B,IAAA,CAAK,IAAI,CAAA;AAC/D,EAAA,MAAM,mBAAA,GAAgD;AAAA,IACpD,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAA,EAAU,KAAK,CAAA;AAAA,IAC3B,GAAA,EAAK,CAAC,KAAA,EAAO,KAAA,EAAO,SAAS,QAAQ,CAAA;AAAA,IACrC,EAAA,EAAI,CAAC,SAAA,EAAW,SAAS,CAAA;AAAA,IACzB,EAAA,EAAI,CAAC,SAAA,EAAW,SAAA,EAAW,OAAO,CAAA;AAAA,IAClC,KAAA,EAAO,CAAC,QAAA,EAAU,aAAA,EAAe,aAAa,CAAA;AAAA,IAC9C,GAAA,EAAK,CAAC,IAAI;AAAA,GACZ;AAEA,EAAA,KAAA,MAAW,OAAO,oBAAA,EAAsB;AACtC,IAAA,KAAA,MAAW,OAAA,IAAW,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,oBAAA,CAAqB,GAAG,CAAC,CAAA,EAAG;AACvE,MAAA,OAAA,CAAQ,MAAA,EAAO;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,gBAAA,CAA8B,eAAe,CAAC,CAAA,EAAG;AAC5F,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAY,KAAM,KAAA;AAEzD,IAAA,KAAA,MAAW,aAAa,cAAA,EAAgB;AACtC,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,YAAA,CAAa,SAAS,CAAA;AAC5C,MAAA,IAAI,UAAU,IAAA,IAAQ,CAAC,SAAA,CAAU,KAAA,EAAO,cAAc,CAAA,EAAG;AACvD,QAAA,OAAA,CAAQ,gBAAgB,SAAS,CAAA;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,OAAO,OAAO,IAAA,CAAK,SAAA;AAAA,EACrB;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAA0B;AACjD,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,CAAO,IAAA,CAAK,YAAA,EAAc;AAC9C,MAAA,MAAM,OAAA,GAAU,IAAA;AAChB,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAY;AAC5C,MAAA,MAAM,0BAAU,IAAI,GAAA,CAAI,CAAC,GAAI,oBAAoB,OAAO,CAAA,IAAK,EAAC,EAAI,GAAI,mBAAA,CAAoB,GAAG,CAAA,IAAK,EAAG,CAAC,CAAA;AAEtG,MAAA,KAAA,MAAW,SAAA,IAAa,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AACtD,QAAA,IAAI,SAAA,CAAU,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,IAAK,CAAC,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,EAAG;AACtE,UAAA,OAAA,CAAQ,eAAA,CAAgB,UAAU,IAAI,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG;AAC/C,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB;AAAA,EACF,CAAA;AAEA,EAAA,eAAA,CAAgB,OAAO,IAAI,CAAA;AAC3B,EAAA,OAAO,OAAO,IAAA,CAAK,SAAA;AACrB,CAAA;AAEA,IAAM,OAAA,GAAU,KAAK,MAAA,CAAO;AAAA,EAC1B,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,IAAA;AAAA,EACX,QAAA,EAAU,IAAA;AAAA,EACV,aAAA,GAAgB;AACd,IAAA,OAAO,yBAAyB,CAAC,GAAG,wBAAwB,GAAG,iBAAA,EAAmB,aAAa,CAAC,CAAA;AAAA,EAClG,CAAA;AAAA,EACA,SAAA,GAAY;AACV,IAAA,OAAO,CAAC,EAAE,GAAA,EAAK,kCAAA,EAAoC,CAAA;AAAA,EACrD,CAAA;AAAA,EACA,UAAA,CAAW,EAAE,IAAA,EAAM,cAAA,EAAe,EAAG;AACnC,IAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,IAAA,OAAO;AAAA,MACL,SAAA;AAAA,MACA,eAAA;AAAA,QACE;AAAA,UACE,KAAA,EAAO,YAAA;AAAA,UACP,yBAAA,EAA2B,KAAA;AAAA,UAC3B,KAAA,EAAO,CAAA,kBAAA,EAAqB,IAAA,CAAK,GAAA,CAAI,KAAK,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,cAAA,CAAe,SAAS,EAAE,CAAA;AAAA,SAC3F;AAAA,QACA;AAAA,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EACA,WAAA,GAAc;AACZ,IAAA,OAAO;AAAA,MACL,aAAA,EACE,CAAC,KAAA,GAAmB,CAAA,KACpB,CAAC,EAAE,QAAA,EAAS,KACV,QAAA,CAAS,aAAA,CAAc;AAAA,QACrB,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,MAAM,IAAA,CAAK,EAAE,QAAQ,KAAA,EAAM,EAAG,CAAC,CAAA,EAAG,KAAA,MAAW;AAAA,UACpD,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAM,WAAA;AAAA,cACN,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA,OAAA,EAAU,KAAA,GAAQ,CAAC,CAAA,CAAA,EAAI;AAAA;AACzD;AACF,SACF,CAAE;AAAA,OACH;AAAA,KACP;AAAA,EACF,CAAA;AAAA,EACA,oBAAA,GAAuB;AACrB,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,CAAC,EAAE,MAAA,EAAO,KAAM;AACzB,QAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAA,CAAO,KAAA;AAE7B,QAAA,IAAI,EAAE,SAAA,YAAqB,aAAA,CAAA,IAAkB,UAAU,IAAA,CAAK,IAAA,CAAK,SAAS,SAAA,EAAW;AACnF,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,MAAM,kBAAkB,KAAA,CAAM,IAAA;AAAA,UAAK,EAAE,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,UAAA,EAAW;AAAA,UAAG,CAAC,CAAA,EAAG,KAAA,KAC5E,SAAA,CAAU,IAAA,CAAK,MAAM,KAAK;AAAA,SAC5B,CAAE,KAAA;AAAA,UACA,CAAC,MAAA,KACC,MAAA,CAAO,UAAA,KAAe,CAAA,IACtB,MAAA,CAAO,UAAA,EAAY,IAAA,CAAK,IAAA,KAAS,WAAA,IACjC,MAAA,CAAO,UAAA,CAAW,UAAA,KAAe;AAAA,SACrC;AAEA,QAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,MAAA,CAAO,IAAA,CAAK,QAAA;AAAA,UACV,MAAA,CAAO,KAAA,CAAM,EAAA,CAAG,WAAA,CAAY,UAAU,IAAA,EAAM,SAAA,CAAU,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,SAAA,CAAU,QAAQ;AAAA,SACxG;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF;AACF,CAAC,CAAA;AAED,IAAM,MAAA,GAAS,KAAK,MAAA,CAAO;AAAA,EACzB,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,QAAA;AAAA,EACT,SAAA,EAAW,IAAA;AAAA,EACX,QAAA,EAAU,IAAA;AAAA,EACV,aAAA,GAAgB;AACd,IAAA,OAAO,yBAAyB,CAAC,GAAG,sBAAA,EAAwB,GAAG,iBAAiB,CAAC,CAAA;AAAA,EACnF,CAAA;AAAA,EACA,SAAA,GAAY;AACV,IAAA,OAAO,CAAC,EAAE,GAAA,EAAK,6BAAA,EAA+B,CAAA;AAAA,EAChD,CAAA;AAAA,EACA,UAAA,CAAW,EAAE,cAAA,EAAe,EAAyC;AACnE,IAAA,OAAO,CAAC,KAAA,EAAO,eAAA,CAAgB,EAAE,wBAAA,EAA0B,EAAA,EAAI,KAAA,EAAO,WAAA,EAAY,EAAG,cAAc,CAAA,EAAG,CAAC,CAAA;AAAA,EACzG;AACF,CAAC,CAAA;AAED,IAAM,OAAA,GAAU,eAAe,MAAA,CAAO;AAAA,EACpC,aAAA,GAAgB;AACd,IAAA,OAAO;AAAA,MACL,GAAG,wBAAA,CAAyB,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,MAC9C,KAAA,EAAO;AAAA,QACL,OAAA,EAAS;AAAA;AACX,KACF;AAAA,EACF,CAAA;AAAA,EACA,aAAA,GAAgB;AACd,IAAA,OAAO;AAAA,MACL,IAAI,SAAA,CAAU;AAAA,QACZ,IAAA,EAAM,sBAAA;AAAA,QACN,OAAA,EAAS,CAAC,EAAE,KAAA,EAAO,OAAM,KAAM;AAC7B,UAAA,MAAM,EAAE,IAAG,GAAI,KAAA;AACf,UAAA,EAAA,CAAG,MAAA,CAAO,MAAM,IAAA,GAAO,CAAA,EAAG,KAAK,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,GAAG,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAI,CAAA,EAAG,GAAG,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,QAC3G;AAAA,OACD;AAAA,KACH;AAAA,EACF,CAAA;AAAA,EACA,qBAAA,GAAwB;AACtB,IAAA,OAAO;AAAA,MACL,IAAI,MAAA,CAAO;AAAA,QACT,iBAAA,CAAkB,aAAa,KAAA,EAAO;AACpC,UAAA,MAAM,EAAE,WAAU,GAAI,KAAA;AACtB,UAAA,MAAM,qBAAqB,SAAA,YAAqB,aAAA,IAAiB,SAAA,CAAU,IAAA,CAAK,KAAK,IAAA,KAAS,gBAAA;AAC9F,UAAA,MAAM,mBAAA,GAAsB,YAAY,KAAA,CAAM,IAAA;AAAA,YAC5C,CAAC,IAAA,KAAS,IAAA,YAAgB,eAAe,IAAA,CAAK,KAAA,CAAM,QAAQ,IAAA,GAAO;AAAA,WACrE;AAEA,UAAA,OAAO,EAAE,kBAAA,IAAsB,WAAA,CAAY,UAAA,IAAc,mBAAA,CAAA;AAAA,QAC3D;AAAA,OACD;AAAA,KACH;AAAA,EACF;AACF,CAAC,CAAA;AAED,IAAM,yBAAyB,CAAC;AAAA,EAC9B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA;AACF,CAAA,qBAOE,GAAA;AAAA,EAAC,QAAA,CAAS,IAAA;AAAA,EAAT;AAAA,IACC,YAAA,EAAY,KAAA;AAAA,IACZ,OAAA;AAAA,IACA,SAAA,EAAU,kBAAA;AAAA,IACV,eAAA;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,IAC7C,QAAA;AAAA,IACA,QAAA;AAAA,IAEA,8BAAC,QAAA,CAAS,SAAA,EAAT,EAAmB,SAAA,EAAU,4BAAA,EAA6B,aAAW,IAAA,EAAC;AAAA;AACzE,CAAA;AAGF,IAAM,6BAA6B,CAAC,EAAE,MAAA,EAAQ,IAAA,EAAM,kBAAiB,KAA0B;AAC7F,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAE1C,EAAA,4BACG,eAAA,EAAA,EAAgB,EAAA,EAAG,MAAK,cAAA,EAAc,OAAA,GAAU,SAAS,OAAA,EACxD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,eAAA,EAAiB,KAAA,EACvD,QAAA,kBAAA,GAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,KAAA,EAAO,CAAA,uBAAA,EAA0B,IAAA,CAAK,WAAA,IAAe,iBAAiB,CAAA,CAAA;AAAA,QACtE,eAAA,EAAiB,CAAC,WAAA,KAAgB;AAChC,UAAA,IAAI,OAAO,UAAA,EAAY;AACrB,YAAA,gBAAA,CAAiB,EAAE,OAAA,EAAS,WAAA,EAAa,CAAA;AAAA,UAC3C;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EAAU,CAAC,MAAA,CAAO;AAAA;AAAA,KACpB,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,eAAA,EAAA,EAAgB,EAAA,EAAG,KAAA,EAAM;AAAA,GAAA,EAC5B,CAAA;AAEJ,CAAA;AAEA,IAAM,cAAA,GAAiB,SAAS,MAAA,CAAO;AAAA,EACrC,WAAA,GAAc;AACZ,IAAA,OAAO,sBAAsB,0BAA0B,CAAA;AAAA,EACzD;AACF,CAAC,CAAA;AAED,IAAM,UAAA,GAAa,KAAK,MAAA,CAAO;AAAA,EAC7B,IAAA,EAAM,YAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,iBAAA;AAAA,EACT,WAAW,MAAM,CAAC,EAAE,GAAA,EAAK,mCAAmC,CAAA;AAAA,EAC5D,UAAA,EAAY,CAAC,EAAE,cAAA,EAAe,KAAM;AAAA,IAClC,IAAA;AAAA,IACA,eAAA,CAAgB,cAAA,EAAgB,EAAE,6BAAA,EAA+B,IAAI,CAAA;AAAA,IACrE;AAAA;AAEJ,CAAC,CAAA;AAED,IAAM,mCAAmC,CAAC,EAAE,MAAA,EAAQ,IAAA,EAAM,kBAAiB,KAA0B;AACnG,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAEpC,EAAA,uBACE,IAAA,CAAC,mBAAgB,EAAA,EAAG,IAAA,EAAK,WAAU,qBAAA,EAAsB,WAAA,EAAW,IAAA,GAAO,MAAA,GAAS,OAAA,EAClF,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,eAAA,EAAe,IAAA;AAAA,QACf,YAAA,EAAY,OAAO,sBAAA,GAAyB,oBAAA;AAAA,QAC5C,SAAA,EAAU,wBAAA;AAAA,QACV,eAAA,EAAiB,KAAA;AAAA,QACjB,QAAA,EAAU,CAAC,MAAA,CAAO,UAAA;AAAA,QAClB,SAAS,MAAM,gBAAA,CAAiB,EAAE,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,QAC/C,IAAA,EAAK,QAAA;AAAA,QAEL,8BAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,0BAAyB,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA,KAC/D;AAAA,oBACA,GAAA,CAAC,eAAA,EAAA,EAAgB,EAAA,EAAG,KAAA,EAAM,WAAU,wBAAA,EAAyB;AAAA,GAAA,EAC/D,CAAA;AAEJ,CAAA;AAEA,IAAM,cAAA,GAAiB,KAAK,MAAA,CAAO;AAAA,EACjC,IAAA,EAAM,gBAAA;AAAA,EACN,OAAA,EAAS,kBAAA;AAAA,EACT,QAAA,EAAU,IAAA;AAAA,EACV,eAAe,OAAO,EAAE,MAAM,EAAE,OAAA,EAAS,MAAK,EAAE,CAAA;AAAA,EAChD,WAAW,MAAM,CAAC,EAAE,GAAA,EAAK,wCAAwC,CAAA;AAAA,EACjE,UAAA,EAAY,CAAC,EAAE,cAAA,EAAe,KAAM;AAAA,IAClC,IAAA;AAAA,IACA,eAAA,CAAgB,cAAA,EAAgB,EAAE,kCAAA,EAAoC,IAAI,CAAA;AAAA,IAC1E;AAAA,GACF;AAAA,EACA,WAAA,GAAc;AACZ,IAAA,OAAO,sBAAsB,gCAAgC,CAAA;AAAA,EAC/D;AACF,CAAC,CAAA;AAED,IAAM,aAAA,GAAgB,CAAC,MAAA,EAAQ,SAAA,EAAW,WAAW,QAAQ,CAAA;AAE7D,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAC5B,aAAA,CAAc,SAAS,KAAuC,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAEpF,IAAM,4BAA4B,CAAC,EAAE,QAAQ,IAAA,EAAM,gBAAA,uBACjD,IAAA,CAAC,eAAA,EAAA,EAAgB,EAAA,EAAG,OAAA,EAAQ,WAAU,YAAA,EAAa,WAAA,EAAW,qBAAqB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAChG,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,cAAA;AAAA,MACX,SAAA,EAAU,iBAAA;AAAA,MACV,eAAA,EAAiB,KAAA;AAAA,MACjB,QAAA,EAAU,CAAC,MAAA,CAAO,UAAA;AAAA,MAClB,QAAA,EAAU,CAAC,KAAA,KAAU,gBAAA,CAAiB,EAAE,IAAA,EAAM,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,MAClE,KAAA,EAAO,oBAAA,CAAqB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAAA,MAE1C,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,IAAA,qBAAS,GAAA,CAAC,YAAkB,KAAA,EAAO,IAAA,EAAO,QAAA,EAAA,IAAA,EAAA,EAApB,IAAyB,CAAS;AAAA;AAAA,GAC9E;AAAA,kBACA,GAAA,CAAC,eAAA,EAAA,EAAgB,EAAA,EAAG,KAAA,EAAM,WAAU,oBAAA,EAAqB;AAAA,CAAA,EAC3D,CAAA;AAGF,IAAM,OAAA,GAAU,KAAK,MAAA,CAAO;AAAA,EAC1B,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,QAAA;AAAA,EACT,QAAA,EAAU,IAAA;AAAA,EACV,eAAe,OAAO,EAAE,MAAM,EAAE,OAAA,EAAS,QAAO,EAAE,CAAA;AAAA,EAClD,WAAW,MAAM,CAAC,EAAE,GAAA,EAAK,kCAAkC,CAAA;AAAA,EAC3D,UAAA,EAAY,CAAC,EAAE,cAAA,EAAe,KAAM;AAAA,IAClC,OAAA;AAAA,IACA,eAAA,CAAgB,cAAA,EAAgB,EAAE,yBAAA,EAA2B,IAAI,CAAA;AAAA,IACjE;AAAA,GACF;AAAA,EACA,WAAA,GAAc;AACZ,IAAA,OAAO,sBAAsB,yBAAyB,CAAA;AAAA,EACxD;AACF,CAAC,CAAA;AAID,IAAM,0BAAA,GAA6B,CAAC,IAAA,MAA6E;AAAA,EAC/G,YAAA,EAAc,OAAO,IAAA,CAAK,KAAA,EAAO,iBAAiB,QAAA,GAAW,IAAA,CAAK,MAAM,YAAA,GAAe,IAAA;AAAA,EACvF,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO,EAAA;AAAA,EAC/D,QAAA,EAAU,OAAO,IAAA,CAAK,KAAA,EAAO,aAAa,QAAA,GAAW,IAAA,CAAK,MAAM,QAAA,GAAW,IAAA;AAAA,EAC3E,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO,IAAA;AAAA,EAC/D,GAAA,EAAK,OAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,QAAA,GAAW,IAAA,CAAK,MAAM,GAAA,GAAM;AAC9D,CAAA,CAAA;AAEO,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAAwB;AAC3D,EAAA,IAAI,IAAA,KAAS,QAAQ,CAAC,MAAA,CAAO,SAAS,IAAI,CAAA,IAAK,IAAA,GAAO,CAAA,EAAG,OAAO,EAAA;AAChE,EAAA,IAAI,IAAA,GAAO,IAAA,EAAM,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AACrC,EAAA,IAAI,QAAQ,IAAA,GAAO,IAAA;AACnB,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,IAAA,GAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAAE,IAAA,KAAA,IAAS,IAAA;AAAM,IAAA,IAAA,IAAQ,CAAA;AAAA,EAAG;AAC7E,EAAA,OAAO,CAAA,EAAG,KAAA,IAAS,EAAA,GAAK,KAAA,CAAM,QAAQ,CAAC,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AAC5E;AAEA,IAAM,mBAAA,GAAsB,CAAC,QAAA,KAA2C;AACtE,EAAA,IAAI,QAAA,CAAS,QAAA,EAAU,OAAO,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,EAAG,WAAA,MAAiB,QAAA,CAAS,QAAA;AAC7F,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,GAAI,IAAA;AAClF,EAAA,OAAO,SAAA,EAAW,aAAY,IAAK,MAAA;AACrC,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,EAAE,QAAA,uBACxB,GAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,sBAAqB,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,8BAAoB,QAAQ,CAAA,CAAE,MAAM,CAAA,EAAG,CAAC,GAAE,CAAA,EAAO,CAAA;AAGlH,IAAM,+BAA+B,CAAC,EAAE,QAAQ,IAAA,EAAM,gBAAA,EAAkB,YAAW,KAA0B;AAC3G,EAAA,MAAM,OAAA,GAAU,IAAI,kCAAkC,CAAA;AACtD,EAAA,MAAM,OAAA,GAAU,2BAA2B,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAA0B,QAAQ,YAAA,IAAgB,OAAA,CAAQ,GAAA,GAAM,OAAA,GAAU,MAAM,CAAA;AAC1G,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,CAAC,CAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAiD,IAAI,CAAA;AAC/E,EAAA,MAAM,YAAA,GAAe,OAAO,CAAC,CAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,OAA+B,IAAI,CAAA;AAEpD,EAAA,MAAM,SAAA,GAAY,CAAC,SAAA,KAAsB,YAAA,CAAa,OAAA,KAAY,SAAA;AAClE,EAAA,MAAM,cAAc,MAAM;AAAE,IAAA,YAAA,CAAa,OAAA,IAAW,CAAA;AAAG,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAG,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,EAAM,CAAA;AAE3G,EAAA,SAAA,CAAU,MAAM,MAAM,WAAA,EAAY,EAAG,EAAE,CAAA;AAEvC,EAAA,MAAM,MAAA,GAAS,OAAO,QAAA,EAA2C,SAAA,KAAuB;AACtF,IAAA,IAAI,CAAC,SAAS,gBAAA,EAAkB;AAChC,IAAA,WAAA,EAAY;AACZ,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,QAAA,CAAS,OAAA,GAAU,UAAA;AACnB,IAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,IAAA,WAAA,CAAY,CAAC,CAAA;AACb,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,QAAA,CAAS,WAAW,CAAA;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,kBAAA,GAAqB,QAAQ,CAAA;AAC9D,MAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG;AAC3B,MAAA,IAAI,UAAA,IAAc,CAAC,UAAA,CAAW,QAAA,QAAgB,IAAI,KAAA,CAAM,WAAW,OAAO,CAAA;AAC1E,MAAA,MAAM,WAAW,EAAE,MAAA,EAAQ,WAAW,MAAA,EAAQ,UAAA,EAAY,CAAC,KAAA,KAAkB;AAC3E,QAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAC,CAAA;AAAA,MACvE,CAAA,EAAE;AACF,MAAA,MAAM,WAAW,SAAA,IAAa,OAAA,CAAQ,gBAAgB,OAAA,CAAQ,iBAAA,GAC1D,MAAM,OAAA,CAAQ,iBAAA,CAAkB,OAAA,CAAQ,YAAA,EAAc,UAAU,QAAQ,CAAA,GACxE,MAAM,OAAA,CAAQ,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACrD,MAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG;AAC3B,MAAA,gBAAA,CAAiB,QAAQ,CAAA;AACzB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,WAAA,CAAY,CAAC,CAAA;AACb,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,IAAK,UAAA,CAAW,OAAO,OAAA,EAAS;AACxD,MAAA,QAAA,CAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,gBAAgB,CAAA;AAClE,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAO,SAAA,GAAY,KAAA,KAAU;AACnD,IAAA,IAAI,CAAC,OAAA,EAAS,gBAAA,IAAoB,CAAC,QAAQ,gBAAA,EAAkB;AAC7D,IAAA,WAAA,EAAY;AACZ,IAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,QAAA,CAAS,OAAA,GAAU,UAAA;AACnB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,QAAA,CAAS,WAAW,CAAA;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,gBAAA,CAAiB,EAAE,MAAA,EAAQ,UAAA,CAAW,QAAQ,CAAA;AAC7E,MAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG;AAC3B,MAAA,IAAI,CAAC,QAAA,EAAU;AAAE,QAAA,QAAA,CAAS,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,GAAA,GAAM,UAAU,MAAM,CAAA;AAAG,QAAA;AAAA,MAAQ;AAC3F,MAAA,MAAM,MAAA,CAAO,UAAU,SAAS,CAAA;AAAA,IAClC,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,IAAK,UAAA,CAAW,OAAO,OAAA,EAAS;AACxD,MAAA,QAAA,CAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAA0B,CAAA;AAC5E,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAU,MAAA,IAAU,MAAA,CAAO,cAAc,OAAA,EAAS,gBAAA,IAAoB,QAAQ,gBAAA,EAAkB;AAClG,MAAA,KAAK,eAAA,EAAgB;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAS,MAAM;AAAE,IAAA,WAAA,EAAY;AAAG,IAAA,QAAA,CAAS,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,GAAA,GAAM,UAAU,MAAM,CAAA;AAAA,EAAG,CAAA;AACxG,EAAA,MAAM,SAAS,MAAM;AAAE,IAAA,WAAA,EAAY;AAAG,IAAA,UAAA,EAAW;AAAA,EAAG,CAAA;AACpD,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,IAAQ,KAAA,EAAO,IAAA,IAAQ,eAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,GAAO,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,IAAY,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,QAAQ,IAAA,EAAK;AAC1H,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,IAAI,OAAA,EAAS,cAAA,EAAgB,KAAK,OAAA,CAAQ,eAAe,OAAO,CAAA;AAAA,SAAA,IACvD,QAAQ,GAAA,EAAK,MAAA,CAAO,KAAK,OAAA,CAAQ,GAAA,EAAK,UAAU,qBAAqB,CAAA;AAAA,EAChF,CAAA;AAEA,EAAA,uBAAO,IAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,eAAA,EAAgB,cAAY,KAAA,EAC5D,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,UAAU,OAAA,EAAS,CAAA;AAAA,oBACnC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAA,EAAA,EAAM,YAAA,EAAW,WAAA,EAAY,SAAA,EAAU,oBAAA,EAAqB,UAAU,CAAC,MAAA,CAAO,UAAA,IAAc,KAAA,KAAU,WAAA,EAAa,KAAA,EAAO,MAAM,QAAA,EAAU,CAAC,KAAA,KAAU,gBAAA,CAAiB,EAAE,IAAA,EAAM,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,MAAM;AAClN,QAAA,IAAI,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,IAAA,EAAM,KAAK,SAAS,gBAAA,GAAmB,OAAA,CAAQ,YAAA,EAAc,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC/G,CAAA,EAAG,CAAA;AAAA,0BACF,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAsB,QAAA,EAAA,CAAC,oBAAA,CAAqB,QAAQ,IAAI,CAAA,EAAG,mBAAA,CAAoB,OAAO,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA,EAAE,CAAA;AAAA,MACnI,KAAA,KAAU,WAAA,mBAAc,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EAAyB,IAAA,EAAK,aAAA,EAAc,YAAA,EAAY,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAI,eAAA,EAAe,GAAG,eAAA,EAAe,GAAA,EAAK,eAAA,EAAe,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,GAAG,CAAA,EAAG,8BAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,GAAG,QAAA,GAAW,GAAG,CAAA,CAAA,CAAA,EAAI,EAAG,GAAE,CAAA,GAAS,IAAA;AAAA,MAC9P,KAAA,uBAAS,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAsB,IAAA,EAAK,OAAA,EAAS,iBAAM,CAAA,GAAS;AAAA,KAAA,EAC7E,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAwB,iBAAiB,KAAA,EACrD,QAAA,EAAA;AAAA,MAAA,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,WAAA,mBAAc,GAAA,CAAC,QAAA,EAAA,EAAO,SAAS,MAAA,EAAQ,IAAA,EAAK,QAAA,EAAS,QAAA,EAAA,QAAA,EAAM,CAAA,GAAY,IAAA;AAAA,MAC1G,UAAU,OAAA,IAAW,KAAA,uBAAS,QAAA,EAAA,EAAO,OAAA,EAAS,MAAM,KAAK,MAAA,CAAO,KAAA,EAAO,OAAA,CAAQ,QAAQ,YAAY,CAAC,GAAG,IAAA,EAAK,QAAA,EAAS,mBAAK,CAAA,GAAY,IAAA;AAAA,MAAA,CACrI,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,GAAA,KAAQ,KAAA,KAAU,WAAA,mBAAc,GAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,IAAA,EAAM,IAAA,EAAK,QAAA,EAAS,kBAAI,CAAA,GAAY,IAAA;AAAA,MACtH,MAAA,CAAO,cAAc,OAAA,EAAS,gBAAA,IAAoB,QAAQ,gBAAA,IAAoB,KAAA,KAAU,WAAA,mBAAc,GAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,MAAM,KAAK,eAAA,CAAgB,QAAQ,OAAA,CAAQ,YAAY,CAAC,CAAA,EAAG,IAAA,EAAK,QAAA,EAAS,QAAA,EAAA,SAAA,EAAO,CAAA,GAAY,IAAA;AAAA,MACnN,MAAA,CAAO,UAAA,mBAAa,GAAA,CAAC,QAAA,EAAA,EAAO,YAAA,EAAY,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,EAAI,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAK,QAAA,EAAS,oBAAM,CAAA,GAAY;AAAA,KAAA,EAC9G;AAAA,GAAA,EACF,CAAA;AACF,CAAA;AAEA,IAAM,UAAA,GAAa,KAAK,MAAA,CAAO;AAAA,EAC7B,IAAA,EAAM,YAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,SAAA,EAAW,IAAA;AAAA,EACX,aAAA,EAAe,OAAO,EAAE,YAAA,EAAc,EAAE,OAAA,EAAS,IAAA,EAAK,EAAG,IAAA,EAAM,EAAE,OAAA,EAAS,EAAA,EAAG,EAAG,QAAA,EAAU,EAAE,OAAA,EAAS,IAAA,EAAK,EAAG,IAAA,EAAM,EAAE,OAAA,EAAS,IAAA,EAAK,EAAG,GAAA,EAAK,EAAE,OAAA,EAAS,IAAA,EAAK,EAAE,CAAA;AAAA,EAC7J,SAAA,EAAW,MAAM,CAAC,EAAE,GAAA,EAAK,iCAAgC,EAAG,EAAE,GAAA,EAAK,iCAAA,EAAmC,CAAA;AAAA,EACtG,UAAA,EAAY,CAAC,EAAE,IAAA,EAAM,cAAA,EAAe,KAAM,CAAC,GAAA,EAAK,eAAA,CAAgB,cAAA,EAAgB,EAAE,4BAAA,EAA8B,EAAA,EAAI,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,GAAA,IAAO,MAAA,EAAW,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,MAAA,EAAW,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,YAAY,CAAA;AAAA,EACjO,WAAA,GAAc;AAAE,IAAA,OAAO,sBAAsB,4BAA4B,CAAA;AAAA,EAAG;AAC9E,CAAC,CAAA;AAED,IAAM,0BAAA,GAA6B,CAAC,EAAE,IAAA,EAAK,KAAiC;AAC1E,EAAA,MAAM,OAAA,GAAU,IAAI,kCAAkC,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS,2BAA2B,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,QAAA,CAAoF,EAAE,OAAO,MAAA,CAAO,YAAA,IAAgB,OAAA,EAAS,iBAAA,GAAoB,cAAc,MAAA,CAAO,GAAA,GAAM,UAAU,SAAA,EAAW,QAAA,EAAU,QAAQ,CAAA;AAC7O,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,IAAI,MAAA,CAAO,YAAA,IAAgB,OAAA,EAAS,iBAAA,EAAmB;AACrD,MAAA,QAAA,CAAS,EAAE,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,QAAQ,CAAA;AACjD,MAAA,KAAK,OAAA,CAAQ,iBAAA,CAAkB,MAAA,CAAO,YAAA,EAAc,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAACA,SAAAA,KAAa;AACpG,QAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS,QAAA,CAAS,EAAE,KAAA,EAAOA,SAAAA,GAAW,OAAA,GAAU,SAAA,EAAW,QAAA,EAAAA,SAAAA,EAAU,CAAA;AAAA,MAC9F,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAE,QAAA,IAAI,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS,QAAA,CAAS,EAAE,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,MAAG,CAAC,CAAA;AAAA,IACpG,CAAA,MAAO,QAAA,CAAS,EAAE,KAAA,EAAO,MAAA,CAAO,MAAM,OAAA,GAAU,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,CAAA;AAC7E,IAAA,OAAO,MAAM,WAAW,KAAA,EAAM;AAAA,EAChC,GAAG,CAAC,MAAA,CAAO,cAAc,MAAA,CAAO,GAAA,EAAK,OAAO,CAAC,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,MAAA;AACnC,EAAA,MAAM,OAAA,mBAAU,IAAA,CAAAC,UAAAA,EAAA,EAAE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,kBAAe,QAAA,EAAoB,CAAA;AAAA,oBAAE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,QAAA,CAAS,QAAQ,wBAAA,EAAyB,CAAA;AAAA,sBAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,KAAA,CAAM,KAAA,KAAU,WAAA,GAAc,eAAA,GAAa,KAAA,CAAM,KAAA,KAAU,SAAA,GAAY,yBAAA,GAA4B,CAAC,qBAAqB,QAAA,CAAS,IAAI,CAAA,EAAG,mBAAA,CAAoB,QAAQ,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA,EAAE;AAAA,KAAA,EAAO;AAAA,GAAA,EAAO,CAAA;AAChb,EAAA,IAAI,MAAM,KAAA,KAAU,OAAA,IAAW,SAAS,cAAA,EAAgB,2BAAQ,QAAA,EAAA,EAAO,SAAA,EAAU,sCAAqC,OAAA,EAAS,MAAM,KAAK,OAAA,CAAQ,cAAA,GAAiB,QAAQ,CAAA,EAAG,IAAA,EAAK,UAAU,QAAA,EAAA,OAAA,EAAQ,CAAA;AACrM,EAAA,IAAI,MAAM,KAAA,KAAU,OAAA,IAAW,QAAA,CAAS,GAAA,yBAAY,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAqC,MAAM,QAAA,CAAS,GAAA,EAAK,KAAI,YAAA,EAAa,MAAA,EAAO,UAAU,QAAA,EAAA,OAAA,EAAQ,CAAA;AACpK,EAAA,2BAAQ,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAqC,YAAA,EAAY,KAAA,CAAM,OAAQ,QAAA,EAAA,OAAA,EAAQ,CAAA;AAC/F,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAIO;AACnC,EAAA,MAAM,MAAA,GAAS,OAAO,IAAA,CAAK,KAAA,EAAO,WAAW,QAAA,GAAW,IAAA,CAAK,MAAM,MAAA,GAAS,EAAA;AAC5E,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,KAAA,EAAO,IAAA,CAAK,WAAA,IAAe,WAAA,CAAY,IAA+B,CAAA,IAAK,UAAA;AAAA,IAC3E,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO,WAAA;AAAA,IAC/D,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO;AAAA,GACjE;AACF,CAAA;AAEA,IAAM,yBAAyB,CAAC,EAAE,MAAA,EAAQ,IAAA,EAAM,kBAAiB,KAA0B;AACzF,EAAA,MAAM,OAAA,GAAU,IAAI,4BAA4B,CAAA;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,qBAAqB,IAAI,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO,WAAA;AAErE,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS,UAAA,IAAc,QAAA,EAAU;AACtC,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,UAAA,CAAW,EAAE,OAAO,IAAA,CAAK,WAAA,IAAe,UAAA,EAAY,IAAA,EAAM,CAAA;AACxF,MAAA,gBAAA,CAAiB,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,IAAA,EAAM,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,IAAA,EAAM,CAAA;AAAA,IACrG,SAAS,KAAA,EAAO;AACd,MAAA,QAAA,CAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,4BAA4B,CAAA;AAAA,IAChF,CAAA,SAAE;AACA,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,4BACG,eAAA,EAAA,EAAgB,SAAA,EAAU,WAAU,cAAA,EAAc,QAAA,EAAU,UAAU,EAAA,EACrE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAW,WAAA;AAAA,QACX,SAAA,EAAU,oBAAA;AAAA,QACV,eAAA,EAAiB,KAAA;AAAA,QACjB,QAAA,EAAU,CAAC,MAAA,CAAO,UAAA;AAAA,QAClB,SAAA,EAAW,CAAA;AAAA,QACX,QAAA,EAAU,CAAC,KAAA,KAAU,gBAAA,CAAiB,EAAE,MAAM,KAAA,CAAM,MAAA,CAAO,KAAA,IAAS,WAAA,EAAM,CAAA;AAAA,QAC1E,KAAA,EAAO;AAAA;AAAA,KACT;AAAA,oBACA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,KAAA;AAAA,QACH,SAAA,EAAU,eAAA;AAAA,QACV,QAAQ,MAAM;AACZ,UAAA,IAAI,QAAA,EAAU,QAAQ,KAAK,OAAA,EAAS,aAAa,QAAA,CAAS,MAAA,EAAQ,IAAA,CAAK,WAAA,IAAe,UAAU,CAAA;AAAA,QAClG;AAAA;AAAA,KACF;AAAA,IACC,QAAA,mBACC,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAY,CAAA,KAAA,EAAQ,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,QAClC,SAAA,EAAU,gBAAA;AAAA,QACV,eAAA,EAAiB,KAAA;AAAA,QACjB,OAAA,EAAS,MAAM,KAAK,OAAA,EAAS,WAAW,QAAQ,CAAA;AAAA,QAChD,IAAA,EAAK,QAAA;AAAA,QACN,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,0BACM,GAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA;AAAA,KACjC,GACE,OAAA,EAAS,UAAA,IAAc,MAAA,CAAO,UAAA,mBAChC,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gBAAA;AAAA,QACV,eAAA,EAAiB,KAAA;AAAA,QACjB,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,MAAM,KAAK,UAAA,EAAW;AAAA,QAC/B,IAAA,EAAK,QAAA;AAAA,QAEJ,qBAAW,gBAAA,GAAc;AAAA;AAAA,KAC5B,GACE,IAAA;AAAA,IACH,KAAA,mBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAgB,iBAAiB,KAAA,EAAO,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM,CAAA,GAAU;AAAA,GAAA,EACjG,CAAA;AAEJ,CAAA;AAEA,IAAM,IAAA,GAAO,KAAK,MAAA,CAAO;AAAA,EACvB,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,IAAA;AAAA,EACV,eAAe,OAAO;AAAA,IACpB,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,IACxB,IAAA,EAAM,EAAE,OAAA,EAAS,WAAA,EAAK;AAAA,IACtB,IAAA,EAAM,EAAE,OAAA,EAAS,IAAA;AAAK,GACxB,CAAA;AAAA,EACA,SAAA,EAAW,MAAM,CAAC,EAAE,GAAA,EAAK,6BAA4B,EAAG,EAAE,GAAA,EAAK,yBAAA,EAA2B,CAAA;AAAA,EAC1F,UAAA,EAAY,CAAC,EAAE,cAAA,EAAe,KAAM;AAAA,IAClC,KAAA;AAAA,IACA,eAAA,CAAgB,cAAA,EAAgB,EAAE,sBAAA,EAAwB,IAAI,CAAA;AAAA,IAC9D;AAAA,GACF;AAAA,EACA,WAAA,GAAc;AACZ,IAAA,OAAO,sBAAsB,sBAAsB,CAAA;AAAA,EACrD;AACF,CAAC,CAAA;AAED,IAAM,oBAAA,GAAuB,CAAC,EAAE,IAAA,EAAK,KAAiC;AACpE,EAAA,MAAM,OAAA,GAAU,IAAI,4BAA4B,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,qBAAqB,IAAI,CAAA;AACxC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAwC,IAAI,CAAA;AAE5E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,IAAI,MAAA,EAAQ,MAAA,IAAU,OAAA,EAAS,WAAA,EAAa;AAC1C,MAAA,KAAK,QAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,CAAK,CAACC,KAAAA,KAAS;AACrD,QAAA,IAAI,MAAA,IAAUA,KAAAA,EAAM,WAAA,CAAYA,KAAI,CAAA;AAAA,MACtC,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,MAAM;AAAE,MAAA,MAAA,GAAS,KAAA;AAAA,IAAO,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAC,CAAA;AAE5B,EAAA,MAAM,OAAO,QAAA,IAAY,MAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,IAAA,EAAM,KAAA,KAAU,WAAA,CAAY,IAAI,CAAA,IAAK,UAAA,CAAA;AACnD,EAAA,MAAM,OAAA,mBAAU,IAAA,CAAAD,UAAAA,EAAA,EAAE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAK,SAAA,EAAU,cAAA,EAAe,eAAY,MAAA,EAAQ,QAAA,EAAA,IAAA,EAAM,QAAQ,WAAA,EAAK,CAAA;AAAA,oBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAAQ,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAgB,aAAA,EAAY,QAAO,QAAA,EAAA,QAAA,EAAC;AAAA,GAAA,EAAO,CAAA;AACxM,EAAA,IAAI,IAAA,IAAQ,SAAS,QAAA,EAAU;AAC7B,IAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,wBAAA,EAAyB,OAAA,EAAS,MAAM,KAAK,OAAA,CAAQ,QAAA,GAAW,IAAI,CAAA,EAAG,IAAA,EAAK,UAAU,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACzH;AACA,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,2BAAQ,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAyB,IAAA,EAAM,IAAA,CAAK,MAAO,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACzE;AACA,EAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,OAAA,EAAQ,CAAA;AAC1D,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,EAAE,IAAA,EAAK,KAAwB;AACrD,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAM;AAC7B,IAAA,IAAI;AACF,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,GAAA,EAAK,iBAAiB,IAAA,EAAM;AAAA,UAC1B,EAAA,EAAI,4BAAA;AAAA,UACJ,EAAA,EAAI,yBAAA;AAAA,UACJ,MAAA,EAAQ,kCAAA;AAAA,UACR,MAAA,EAAQ,kCAAA;AAAA,UACR,KAAA,EAAO,0BAAA;AAAA,UACP,OAAA,EAAS,kCAAA;AAAA,UACT,WAAA,EAAa;AAAA,SACd;AAAA,OACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,QAC5D,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,OAAO,QAAA,CAAS,wBACd,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EAAmB,IAAA,EAAK,SAAS,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM,oBAE/D,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EAAqB,uBAAA,EAAyB,EAAE,MAAA,EAAQ,QAAA,CAAS,GAAA,IAAO,EAAA,EAAG,EAAG,CAAA;AAEjG,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAAC,EAAE,QAAA,EAAU,eAAc,KAAuD;AAC7G,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,aAAa,CAAA;AAC9C,EAAA,4BACG,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAsB,WAAA,EAAW,IAAA,GAAO,SAAS,OAAA,EAC7D,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,eAAA,EAAe,IAAA;AAAA,QACf,YAAA,EAAY,OAAO,sBAAA,GAAyB,oBAAA;AAAA,QAC5C,SAAA,EAAU,wBAAA;AAAA,QACV,SAAS,MAAM,OAAA,CAAQ,CAAC,OAAA,KAAY,CAAC,OAAO,CAAA;AAAA,QAC5C,IAAA,EAAK,QAAA;AAAA,QAEL,8BAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,0BAAyB,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA,KAC/D;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAS;AAAA,GAAA,EACpD,CAAA;AAEJ,CAAA;AAEA,IAAM,4BAA4B,CAAC,EAAE,MAAA,EAAQ,IAAA,EAAM,kBAAiB,KAA0B;AAC5F,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO,EAAA;AACrE,EAAA,uBACE,IAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,YAAA,EAAa,iBAAiB,KAAA,EACvD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,kBAAe,IAAA,EAAY,CAAA;AAAA,IAC3B,OAAO,UAAA,mBACN,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAW,wBAAA;AAAA,QACX,SAAA,EAAU,mBAAA;AAAA,QACV,QAAA,EAAU,CAAC,KAAA,KAAU,gBAAA,CAAiB,EAAE,IAAA,EAAM,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,QAClE,UAAA,EAAY,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AAAA,KACT,GACE;AAAA,GAAA,EACN,CAAA;AAEJ,CAAA;AAEA,IAAM,cAAA,GAAiB,KAAK,MAAA,CAAO;AAAA,EACjC,IAAA,EAAM,gBAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,SAAA,EAAW,IAAA;AAAA,EACX,eAAe,OAAO,EAAE,MAAM,EAAE,OAAA,EAAS,IAAG,EAAE,CAAA;AAAA,EAC9C,WAAW,MAAM,CAAC,EAAE,GAAA,EAAK,mCAAmC,CAAA;AAAA,EAC5D,UAAA,EAAY,CAAC,EAAE,cAAA,EAAe,KAAM;AAAA,IAClC,QAAA;AAAA,IACA,eAAA,CAAgB,cAAA,EAAgB,EAAE,yBAAA,EAA2B,IAAI;AAAA,GACnE;AAAA,EACA,WAAA,GAAc;AACZ,IAAA,OAAO,sBAAsB,yBAAyB,CAAA;AAAA,EACxD;AACF,CAAC,CAAA;AAED,IAAM,sBAAA,GAAyB,CAC7B,WAAA,EACA,gBAAA,KACG;AAAA,EACH,UAAA,CAAW,UAAU,EAAE,cAAA,EAAgB,OAAO,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,CAAA;AAAA,EAC7E,OAAA;AAAA,EACA,KAAA,CAAM,SAAA,CAAU,EAAE,WAAA,EAAa,MAAM,CAAA;AAAA,EACrC,IAAA,CAAK,SAAA,CAAU,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,EACrC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,CAAe,SAAA,CAAU,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,EACzC,KAAA,CAAM,SAAA,CAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACnC,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,CAAU,UAAU,EAAE,KAAA,EAAO,CAAC,SAAA,EAAW,WAAW,GAAG,CAAA;AAAA,EACvD,WAAA,CAAY,SAAA,CAAU,EAAE,WAAA,EAAa,CAAA;AAAA,EACrC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,GAAG,gBAAA,CAAiB,OAAA,CAAQ,CAAC,SAAA,KAAc,UAAU,gBAAgB;AACvE,CAAA;AAEA,IAAM,wBAAA,GAA2B,CAAC,UAAA,KAChC,mBAAA,CAAoB;AAAA,EAClB,GAAG,qBAAqB,MAAA,EAAO;AAAA,EAC/B,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc,UAAU,KAAK;AAClD,CAAC,CAAA;AAEH,IAAM,oBAAA,GAAuB,CAAC,UAAA,MAA0E;AAAA,EACtG,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAI,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,cAAc,SAAA,CAAU,SAAA,EAAW,IAAA,IAAQ,EAAE,CAAC,CAAA;AAAA,EACzF,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAI,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,cAAc,SAAA,CAAU,SAAA,EAAW,IAAA,IAAQ,EAAE,CAAC;AAC3F,CAAA,CAAA;AAEA,IAAM,cAAc,CAAC,IAAA,KACnB,IAAA,CAAK,IAAA,IAAQ,KAAK,OAAA,EAAS,GAAA,CAAI,CAAC,KAAA,KAAU,YAAY,KAA+C,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,IAAK,EAAA;AAEtH,IAAM,aAAA,GAAgB,CAAC,WAAA,MAAsG;AAAA,EAC3H,MAAM,WAAA,CAAY,IAAA;AAAA,EAClB,OAAO,WAAA,CAAY,KAAA;AAAA,EACnB,KAAK,WAAA,CAAY,GAAA;AAAA,EACjB,QAAQ,WAAA,CAAY,MAAA;AAAA,EACpB,KAAA,EAAO,WAAA,CAAY,KAAA,GAAQ,WAAA,CAAY,IAAA;AAAA,EACvC,MAAA,EAAQ,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY;AAC3C,CAAA,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAC,MAAA,KAAyE;AAC9F,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAA,CAAO,KAAA;AAE7B,EAAA,IAAI,CAAC,UAAU,KAAA,EAAO;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAE,OAAM,GAAI,SAAA;AAClB,EAAA,MAAM,gBAAA,GAAmB,MAAM,MAAA,CAAO,WAAA,CAAY,GAAG,KAAA,CAAM,YAAA,EAAc,MAAM,IAAI,CAAA;AACnF,EAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,IAAA,CAAK,gBAAgB,CAAA;AAE1D,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AACxC,EAAA,MAAM,KAAK,KAAA,CAAM,GAAA;AACjB,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,cAAc,WAAW,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAA;AAAA,IACA,MAAM,WAAA,CAAY,IAAA;AAAA,IAClB,GAAA,EAAK,YAAY,MAAA,GAAS,CAAA;AAAA,IAC1B;AAAA,GACF;AACF,CAAA;AAEA,IAAM,uBAAA,GAA0B,CAAC,MAAA,KAAmF;AAClH,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAA,CAAO,KAAA;AAE7B,EAAA,IAAI,qBAAqB,aAAA,IAAiB,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,SAAS,gBAAA,EAAkB;AACvF,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,KAAA,EAAO;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAe,OAAO,MAAA,KAAW,WAAA,GAAc,IAAA,GAAO,OAAO,YAAA,EAAa;AAChF,EAAA,MAAM,gBAAgB,YAAA,EAAc,UAAA,GAAa,YAAA,CAAa,UAAA,CAAW,CAAC,CAAA,GAAI,IAAA;AAC9E,EAAA,MAAM,YAAA,GAAe,eAAe,qBAAA,EAAsB;AAE1D,EAAA,IACE,aAAA,IACA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,SAAS,aAAA,CAAc,uBAAuB,CAAA,IAC9D,YAAA,IACA,YAAA,CAAa,KAAA,GAAQ,CAAA,IACrB,YAAA,CAAa,SAAS,CAAA,EACtB;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,YAAA,CAAa,IAAA,GAAO,YAAA,CAAa,KAAA,GAAQ,CAAA;AAAA,MAC/C,KAAK,YAAA,CAAa,GAAA;AAAA,MAClB,UAAA,EAAY,cAAc,YAAY;AAAA,KACxC;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,UAAU,IAAI,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,UAAU,EAAE,CAAA;AAC1D,EAAA,MAAM,aAAa,aAAA,CAAc;AAAA,IAC/B,MAAM,IAAA,CAAK,GAAA,CAAI,eAAA,CAAgB,IAAA,EAAM,cAAc,IAAI,CAAA;AAAA,IACvD,OAAO,IAAA,CAAK,GAAA,CAAI,eAAA,CAAgB,KAAA,EAAO,cAAc,KAAK,CAAA;AAAA,IAC1D,KAAK,IAAA,CAAK,GAAA,CAAI,eAAA,CAAgB,GAAA,EAAK,cAAc,GAAG,CAAA;AAAA,IACpD,QAAQ,IAAA,CAAK,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,cAAc,MAAM;AAAA,GAC9D,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA,EAAA,CAAO,eAAA,CAAgB,IAAA,GAAO,aAAA,CAAc,KAAA,IAAS,CAAA;AAAA,IACrD,KAAK,IAAA,CAAK,GAAA,CAAI,gBAAgB,GAAA,EAAK,aAAA,CAAc,GAAG,CAAA,GAAI,CAAA;AAAA,IACxD;AAAA,GACF;AACF,CAAA;AAEA,IAAM,wBAAA,GAA2B,CAAC,MAAA,KAAsD;AACtF,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAA,CAAO,KAAA,CAAM,SAAA;AAC/B,EAAA,MAAM,2BAA2B,KAAA,CAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AACrE,EAAA,IAAI,aAAA,GAAgB,CAAA;AAEpB,EAAA,MAAA,CAAO,MAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,EAAG,QAAQ,KAAA,KAAU;AAC7C,IAAA,IAAI,UAAU,wBAAA,EAA0B;AACtC,MAAA,aAAA,GAAgB,KAAA;AAAA,IAClB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,aAAA;AACT,CAAA;AAEO,IAAM,0BAA0B,CAAC;AAAA,EACtC,eAAA,GAAkB,YAAA;AAAA,EAClB,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,kBAAA;AAAA,EACd,QAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAiB,EAAC;AAAA,EAClB,UAAA,GAAa;AACf,CAAA,GAA0B,EAAC,KAA4B;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAI,QAAA,CAAS,iBAAA,CAAkB,eAAe,CAAC,CAAA;AAC3E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,WAAW,CAAA;AAC9D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAA4B,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAAsC,IAAI,CAAA;AAClG,EAAA,MAAM,aAAA,GAAgB,OAA0B,IAAI,CAAA;AACpD,EAAA,MAAM,uBAAA,GAA0B,OAAoC,IAAI,CAAA;AACxE,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAM,wBAAA,CAAyB,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AACjF,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAM,oBAAA,CAAqB,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAC9E,EAAA,MAAM,SAAS,SAAA,CAAU;AAAA,IACvB,iBAAA,EAAmB,KAAA;AAAA,IACnB,UAAA,EAAY,sBAAA,CAAuB,WAAA,EAAa,UAAU,CAAA;AAAA,IAC1D,OAAA,EAAS,qBAAA,CAAsB,iBAAA,CAAkB,eAAe,CAAC,CAAA;AAAA,IACjE,QAAA;AAAA,IACA,WAAA,EAAa;AAAA,MACX,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,gBAAA;AAAA,QACP,YAAA,EAAc;AAAA,OAChB;AAAA,MACA,mBAAA,EAAqB,kBAAA;AAAA,MACrB,WAAA,EAAa,CAAC,KAAA,EAAO,KAAA,KAAU;AAC7B,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,aAAA,EAAe,KAAA,GAAQ,CAAC,CAAA;AAE3C,QAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,eAAA,GAAkB,IAAI,CAAA,EAAG;AACrC,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA,UAAA,EAAY,CAAC,KAAA,EAAO,KAAA,EAAO,QAAQ,KAAA,KAAU;AAC3C,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,YAAA,EAAc,KAAA,GAAQ,CAAC,CAAA;AAE1C,QAAA,IAAI,SAAS,CAAC,IAAA,IAAQ,CAAC,eAAA,GAAkB,IAAI,CAAA,EAAG;AAC9C,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,KACF;AAAA,IACA,QAAA,EAAU,CAAC,EAAE,MAAA,EAAQ,eAAc,KAAM;AACvC,MAAA,MAAM,YAAA,GAAe,iBAAA;AAAA,QACnB,uBAAA;AAAA,UACE,cAAc,OAAA,EAAQ;AAAA,UACtB,eAAA,CAAgB;AAAA;AAClB,OACF;AACA,MAAA,WAAA,CAAY,YAAY,CAAA;AACxB,MAAA,QAAA,GAAW,YAAY,CAAA;AACvB,MAAA,aAAA,CAAc,aAAA,CAAc,aAAa,CAAC,CAAA;AAC1C,MAAA,uBAAA,CAAwB,uBAAA,CAAwB,aAAa,CAAC,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,iBAAA,EAAmB,CAAC,EAAE,MAAA,EAAQ,eAAc,KAAM;AAChD,MAAA,aAAA,CAAc,aAAA,CAAc,aAAa,CAAC,CAAA;AAC1C,MAAA,uBAAA,CAAwB,uBAAA,CAAwB,aAAa,CAAC,CAAA;AAAA,IAChE;AAAA,GACF,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAA,MAAM,OAAA,GAAU,OAAA;AAAA,IACd,MAAM,cAAA,CAAe,QAAA,EAAU,SAAS,CAAA;AAAA,IACxC,CAAC,UAAU,SAAS;AAAA,GACtB;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,aAAA,CAAc,OAAA,GAAU,UAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,uBAAA,CAAwB,OAAA,GAAU,oBAAA;AAAA,EACpC,CAAA,EAAG,CAAC,oBAAoB,CAAC,CAAA;AAEzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,WAAA,EAAa;AAC5C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,cAAA,GAAiB,CAAA;AAErB,IAAA,MAAM,wBAAwB,MAAM;AAClC,MAAA,IAAI,CAAC,aAAA,CAAc,OAAA,IAAW,CAAC,wBAAwB,OAAA,EAAS;AAC9D,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,qBAAqB,cAAc,CAAA;AAC1C,MAAA,cAAA,GAAiB,MAAA,CAAO,sBAAsB,MAAM;AAClD,QAAA,IAAI,cAAc,OAAA,EAAS;AACzB,UAAA,aAAA,CAAc,aAAA,CAAc,MAAM,CAAC,CAAA;AAAA,QACrC;AAEA,QAAA,IAAI,wBAAwB,OAAA,EAAS;AACnC,UAAA,uBAAA,CAAwB,uBAAA,CAAwB,MAAM,CAAC,CAAA;AAAA,QACzD;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,qBAAA,EAAuB,IAAI,CAAA;AAC7D,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,qBAAqB,CAAA;AAEvD,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,qBAAqB,cAAc,CAAA;AAC1C,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,qBAAA,EAAuB,IAAI,CAAA;AAChE,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,qBAAqB,CAAA;AAAA,IAC5D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,WAAA,GAAc,CAAC,SAAA,GAAY,aAAA,EAAe,KAAA,KAAwB;AACtE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,uBAAA,CAAwB,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,QAAQ,SAAS,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AACnC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM;AAC1C,MAAA,OAAO,KAAA,GAAQ,YAAA,CAAa,WAAA,CAAY,KAAK,CAAA,GAAI,YAAA;AAAA,IACnD,CAAA;AAEA,IAAA,KAAA,EAAM,CAAE,aAAA,CAAc,MAAA,GAAS,2BAAA,CAA4B,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,WAAA,EAAa,CAAA,CAAE,GAAA,EAAI;AACjG,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,OAAA,KAA2C;AACrE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,qBAAA,CAAsB,iBAAA,CAAkB,EAAE,GAAG,QAAA,EAAU,OAAA,EAAS,CAAC,CAAC,CAAA;AAAA,EAC/F,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,YAAA,KAAqC;AACvD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,SAAS,UAAA,CAAW,qBAAA,CAAsB,iBAAA,CAAkB,YAAY,CAAC,CAAC,CAAA;AAAA,EACnF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,SAAA,KAAsB;AAC/C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,eAAA,GAAkB,kBAAkB,uBAAA,CAAwB,MAAA,CAAO,SAAQ,EAAG,QAAA,CAAS,IAAI,CAAC,CAAA;AAClG,IAAA,MAAM,aAAA,GAAgB,yBAAyB,MAAM,CAAA;AACrD,IAAA,MAAM,YAAY,aAAA,GAAgB,SAAA;AAElC,IAAA,IAAI,SAAA,GAAY,CAAA,IAAK,SAAA,IAAa,eAAA,CAAgB,QAAQ,MAAA,EAAQ;AAChE,MAAA;AAAA,IACF;AAEA,IAAA,kBAAA,CAAmB,iBAAA,CAAkB,eAAA,EAAiB,aAAA,EAAe,SAAS,EAAE,OAAO,CAAA;AAAA,EACzF,CAAA;AAEA,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,eAAA,GAAkB,kBAAkB,uBAAA,CAAwB,MAAA,CAAO,SAAQ,EAAG,QAAA,CAAS,IAAI,CAAC,CAAA;AAClG,IAAA,MAAM,aAAA,GAAgB,yBAAyB,MAAM,CAAA;AACrD,IAAA,kBAAA,CAAmB,sBAAA,CAAuB,eAAA,EAAiB,aAAa,CAAA,CAAE,OAAO,CAAA;AAAA,EACnF,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,eAAA,GAAkB,kBAAkB,uBAAA,CAAwB,MAAA,CAAO,SAAQ,EAAG,QAAA,CAAS,IAAI,CAAC,CAAA;AAClG,IAAA,MAAM,aAAA,GAAgB,yBAAyB,MAAM,CAAA;AACrD,IAAA,kBAAA,CAAmB,mBAAA,CAAoB,eAAA,EAAiB,aAAa,CAAA,CAAE,OAAO,CAAA;AAAA,EAChF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KAAwB;AACvC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,gBAAgB,MAAM,CAAA,CAAE,SAAA,EAAU,CAAE,GAAA,EAAI;AAC/D,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,eAAA,CAAgB,MAAM,CAAA,CAAE,OAAA,CAAQ,EAAE,IAAA,EAAM,GAAA,EAAK,EAAE,GAAA,EAAI;AAAA,EAC5E,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAiC;AACtD,IAAA,MAAA,EAAQ,KAAA,GAAQ,KAAA,EAAM,CAAE,cAAc,EAAE,KAAA,EAAO,CAAA,CAAE,GAAA,EAAI;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,UAAA,GAAa,GAAA,EAAI;AAAA,EAC3C,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,eAAA,GAAkB,GAAA,EAAI;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,UAAA,GAAa,GAAA,EAAI;AAAA,EAC3C,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI;AAAA,EACjD,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,iBAAA,GAAoB,GAAA,EAAI;AAAA,EAClD,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,cAAA,GAAiB,GAAA,EAAI;AAAA,EAC/C,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI;AAAA,EACjD,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,eAAA,GAAkB,GAAA,EAAI;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,IAAA,GAAO,GAAA,EAAI;AAAA,EACrC,CAAA;AAEA,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,MAAA,EAAQ,OAAM,CAAE,KAAA,EAAM,CAAE,IAAA,GAAO,GAAA,EAAI;AAAA,EACrC,CAAA;AAEA,EAAA,MAAM,UAAA,GAA2C;AAAA,IAC/C,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAY,MAAM,QAAA;AAAA,IAClB,UAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA,EAAe,MAAM,MAAA,EAAQ,aAAA,CAAc,MAAM,CAAA,CAAE,IAAA;AAAA,IACnD,iBAAA;AAAA,IACA,sBAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,UAAA;AACT;AAEO,IAAM,wBAAA,GAA2B,CAAC,UAAA,KAAgE;AACvG,EAAA,MAAM,kBAAA,GAAqB,UAAA;AAE3B,EAAA,OAAO;AAAA,IACL,GAAG,uBAAA,CAAwB,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MAC1C,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,QAAA,EAAU,CAAC,MAAA,CAAO,GAAG,CAAA;AAAA,MACrB,GAAA,EAAK,CAAC,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAM,KACjC,OAAA,CAAQ,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,KAAK;AAAA,KACzC,CAAE,CAAA;AAAA,IACF;AAAA,MACE,GAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAO,eAAA;AAAA,MACP,KAAA,EAAO,OAAA;AAAA,MACP,GAAA,EAAK,CAAC,EAAE,KAAA,EAAM,KAAM;AAClB,QAAA,kBAAA,CAAmB,MAAA,EAAQ,OAAM,CAAE,KAAA,GAAQ,WAAA,CAAY,KAAK,EAAE,GAAA,EAAI;AAClE,QAAA,UAAA,CAAW,kBAAkB,EAAE,CAAA;AAAA,MACjC;AAAA,KACF;AAAA,IACA;AAAA,MACE,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,iBAAA;AAAA,MACP,KAAA,EAAO,OAAA;AAAA,MACP,GAAA,EAAK,CAAC,EAAE,KAAA,EAAM,KAAM;AAClB,QAAA,kBAAA,CAAmB,MAAA,EAAQ,OAAM,CAAE,KAAA,GAAQ,WAAA,CAAY,KAAK,EAAE,GAAA,EAAI;AAClE,QAAA,UAAA,CAAW,kBAAkB,CAAC,CAAA;AAAA,MAChC;AAAA,KACF;AAAA,IACA,GAAG,UAAA,CAAW,UAAA,CACX,MAAA,CAAO,CAAC,SAAA,KAAc,SAAA,CAAU,SAAA,KAAc,KAAK,CAAA,CACnD,GAAA,CAAI,CAAC,SAAA,KAAc;AAClB,MAAA,MAAM,IAAA,GAAO,UAAU,SAAA,IAAa,MAAA;AACpC,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,UAAU,KAAA,CAAM,IAAA;AAAA,QACrB,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,SAAA,CAAU,KAAA,CAAM,KAAA;AAAA,QACtC,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,SAAA,CAAU,KAAA,CAAM,KAAA;AAAA,QACtC,UAAU,IAAA,EAAM,QAAA,IAAY,CAAC,SAAA,CAAU,MAAM,IAAI,CAAA;AAAA,QACjD,GAAA,EAAK,CAAC,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAM,KACjC,OAAA,CAAQ,WAAA,CAAY,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,KAAK;AAAA,OACnD;AAAA,IACF,CAAC,CAAA;AAAA,IACH,GAAG,UAAA,CAAW;AAAA,GAChB;AACF;AAEA,IAAM,mBAAA,GAAsB,CAC1B,IAAA,EACA,KAAA,GAAoC,EAAC,EACrC,GAAA,KAEA,KAAA,CAAM,WAAA,CAAuB,CAAC,QAAA,EAAU,IAAA,EAAM,KAAA,KAAU;AACtD,EAAA,MAAM,UAAU,CAAA,EAAG,GAAG,IAAI,IAAA,CAAK,IAAI,IAAI,KAAK,CAAA,CAAA;AAC5C,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAsB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACzC,KAAK,QAAA;AACH,MAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAkB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACrC,KAAK,WAAA;AACH,MAAA,uBAAO,GAAA,CAAC,GAAA,EAAA,EAAiB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAA,uBAAO,GAAA,CAAC,GAAA,EAAA,EAAiB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACpC,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAoB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACvC,KAAK,MAAA;AACH,MAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAgB,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAO,IAAA,KAAS,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,MAAA,EAC7E,YADK,OAER,CAAA;AAAA,IAEJ;AACE,MAAA,OAAO,QAAA;AAAA;AAEb,CAAA,EAAG,IAAI,CAAA;AAET,IAAM,mBAAmB,CACvB,IAAA,EACA,GAAA,EACA,SAAA,EACA,WAA0B,oBAAA,KACZ;AACd,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,OAAO,oBAAoB,IAAA,CAAK,IAAA,IAAQ,EAAA,EAAI,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,WAAW,IAAA,CAAK,OAAA,EAAS,GAAA,CAAI,CAAC,OAAO,KAAA,KAAU,gBAAA,CAAiB,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,SAAA,EAAW,QAAQ,CAAC,CAAA,IAAK,IAAA;AACzH,EAAA,MAAM,WAAW,oBAAA,CAAqB,QAAA,EAAU,IAAI,CAAA,EAAG,QAAQ,IAAA,CAAK,IAAA;AACpE,EAAA,MAAM,cAAA,GAAiB,YAAY,QAAQ,CAAA;AAC3C,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,uBAAO,GAAA,CAAC,YAAoB,QAAA,EAAA,cAAA,CAAe,EAAE,MAAM,QAAA,EAAU,KAAvC,GAAyC,CAAA;AAAA,EACjE;AAEA,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,WAAA;AACH,MAAA,uBAAO,GAAA,CAAC,GAAA,EAAA,EAAa,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IAChC,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,QAAQ,OAAO,IAAA,CAAK,KAAA,EAAO,KAAA,KAAU,WAAW,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAK,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA;AACnG,MAAA,QAAQ,KAAA;AAAO,QACb,KAAK,CAAA;AACH,UAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC,KAAK,CAAA;AACH,UAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC,KAAK,CAAA;AACH,UAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC,KAAK,CAAA;AACH,UAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC,KAAK,CAAA;AACH,UAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC;AACE,UAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA;AACnC,IACF;AAAA,IACA,KAAK,YAAA;AACH,MAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IACjC,KAAK,aAAA;AACH,MAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IACjC,KAAK,UAAA;AACH,MAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAa,WAAA,EAAU,UAAA,EAAY,YAA3B,GAAoC,CAAA;AAAA,IACtD,KAAK,YAAA;AACH,MAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAsB,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IACzC,KAAK,WAAA;AACH,MAAA,2BAAQ,KAAA,EAAA,EAAc,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,SAAS,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAE,KAAK,EAAE,CAAA,EAAE,KAApE,GAA2E,CAAA;AAAA,IAC9F,KAAK,SAAA;AACH,MAAA,uBAAO,GAAA,CAAC,UAAQ,GAAK,CAAA;AAAA,IACvB,KAAK,OAAA;AACH,MAAA,uBAAO,GAAA,CAAC,SAAc,GAAA,EAAK,OAAO,KAAK,KAAA,EAAO,GAAA,KAAQ,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,IAAI,GAAA,EAAK,OAAO,KAAK,KAAA,EAAO,GAAA,KAAQ,WAAW,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,EAAA,EAAA,EAAjI,GAAqI,CAAA;AAAA,IACxJ,KAAK,SAAA;AACH,MAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAmB,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IACtC,KAAK,OAAA;AACH,MAAA,2BAAQ,OAAA,EAAA,EAAgB,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAS,KAAtB,GAA8B,CAAA;AAAA,IACnD,KAAK,YAAA;AACH,MAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAa,6BAAA,EAA2B,IAAA,EAAE,YAAlC,GAA2C,CAAA;AAAA,IAC7D,KAAK,SAAA;AACH,MAAA,uBAAO,GAAA,CAAC,OAAA,EAAA,EAAgB,SAAA,EAAU,YAAA,EAAa,WAAA,EAAW,oBAAA,CAAqB,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA,EAAI,QAAA,EAAA,EAAhF,GAAyF,CAAA;AAAA,IAC9G,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,KAAA,EAAO,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO,EAAA;AACtE,MAAA,uBAAO,GAAA,CAAC,YAAiB,SAAA,EAAU,YAAA,EAAa,8BAAC,cAAA,EAAA,EAAe,IAAA,EAAY,KAAxD,GAA0D,CAAA;AAAA,IAChF;AAAA,IACA,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,oBAAA,EAAA,EAA+B,IAAA,EAAA,EAAL,GAAiB,CAAA;AAAA,IACrD,KAAK,YAAA;AACH,MAAA,uBAAO,GAAA,CAAC,0BAAA,EAAA,EAAqC,IAAA,EAAA,EAAL,GAAiB,CAAA;AAAA,IAC3D;AACE,MAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AAC1B,QAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAe,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MAClC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,aAAA,EAAe;AAC/B,QAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,QAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,OAAO,CAAA;AAC3C,QAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAa,cAAA,EAAc,OAAA,GAAU,SAAS,OAAA,EAC7C,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,aAAA,EAAY,QAClD,QAAA,kBAAA,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAkB,KAAA,EAAM,oBAAA,EAAqB,QAAA,EAAQ,IAAA,EAAC,QAAA,EAAU,IAAI,CAAA,EAC9F,CAAA;AAAA,0BACA,GAAA,CAAC,SAAK,QAAA,EAAS;AAAA,SAAA,EAAA,EAJR,GAKT,CAAA;AAAA,MAEJ;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,EAAkB;AAClC,QAAA,uBAAO,GAAA,CAAC,wBAAqB,aAAA,EAAe,IAAA,CAAK,OAAO,IAAA,KAAS,KAAA,EAAkB,YAAN,GAAe,CAAA;AAAA,MAC9F;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,QAAA,uBAAO,GAAA,CAAC,UAAQ,GAAK,CAAA;AAAA,MACvB;AACA,MAAA,uBAAO,GAAA,CAAC,KAAA,EAAA,EAAe,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA;AAEtC,CAAA;AAEO,IAAM,oBAAoB,CAAC;AAAA,EAChC,UAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAA8B;AAC5B,EAAA,MAAM,kBAAA,GAAqB,UAAA;AAC3B,EAAA,uBACE,GAAA,CAAC,mCAAmC,QAAA,EAAnC,EAA4C,OAAO,kBAAA,CAAmB,iBAAA,EACrE,8BAAC,4BAAA,CAA6B,QAAA,EAA7B,EAAsC,KAAA,EAAO,kBAAA,CAAmB,aAC/D,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,QAAQ,kBAAA,CAAmB,MAAA,EAAQ,SAAA,EAAsB,CAAA,EAC1E,CAAA,EACF,CAAA;AAEJ;AAEO,IAAM,mBAAmB,CAAC;AAAA,EAC/B,QAAA;AAAA,EACA,SAAA,GAAY,WAAA;AAAA,EACZ,SAAA;AAAA,EACA,UAAA,GAAa,gBAAA;AAAA,EACb,WAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,QAAA,GAAW,yBAAyB,UAAU,CAAA;AACpD,EAAA,MAAM,qBAAqB,MAAA,CAAO,WAAA;AAAA,IAChC,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc,CAAC,UAAU,KAAA,CAAM,IAAA,EAAM,SAAA,CAAU,MAAM,CAAC;AAAA,GACxE;AACA,EAAA,MAAM,eAAA,GAAkB,EAAE,GAAG,kBAAA,EAAoB,GAAG,SAAA,EAAU;AAE9D,EAAA,2BACG,kCAAA,CAAmC,QAAA,EAAnC,EAA4C,KAAA,EAAO,iBAAA,EAClD,8BAAC,4BAAA,CAA6B,QAAA,EAA7B,EAAsC,KAAA,EAAO,aAC5C,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WACF,QAAA,EAAA,iBAAA,CAAkB,QAAQ,EAAE,OAAA,CAAQ,GAAA;AAAA,IAAI,CAAC,MAAM,KAAA,KAC9C,gBAAA,CAAiB,MAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAI,eAAA,EAAiB,QAAQ;AAAA,GACrE,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AAEO,IAAM,aAAA,GAAgB","file":"index.js","sourcesContent":["import {\n createBlockRegistry,\n deleteTopLevelBlock,\n duplicateTopLevelBlock,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n moveTopLevelBlock,\n normalizeDocument,\n toProseMirrorDocument,\n type ProseMirrorMark,\n type ProseMirrorNode,\n type OpenEditorDocument,\n type BlockRegistry,\n type BlockSpec,\n type OpenEditorAttachmentRuntime,\n type OpenEditorAttachmentSnapshot,\n type OpenEditorAttachmentUploadInput,\n} from \"@openeditor/core\";\nimport { Checkbox } from \"@base-ui/react/checkbox\";\nimport { renderMermaidSVG } from \"beautiful-mermaid\";\nimport { toExportBundle, type OpenEditorExporters } from \"@openeditor/exporters\";\nimport {\n defaultBlockRegistry,\n createOpenEditorInsertBlock,\n openEditorInsertPresets,\n seedDocument,\n} from \"@openeditor/extensions\";\nimport { InputRule, mergeAttributes, Node, type AnyExtension, type Editor, type NodeConfig } from \"@tiptap/core\";\nimport HorizontalRule from \"@tiptap/extension-horizontal-rule\";\nimport Image from \"@tiptap/extension-image\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { Table } from \"@tiptap/extension-table\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Underline from \"@tiptap/extension-underline\";\nimport { NodeSelection, Plugin } from \"@tiptap/pm/state\";\nimport { ReplaceStep } from \"@tiptap/pm/transform\";\nimport {\n EditorContent,\n NodeViewContent,\n NodeViewWrapper,\n ReactNodeViewRenderer,\n useEditor,\n type ReactNodeViewProps,\n} from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { Fragment, createContext, use, useEffect, useMemo, useRef, useState, type ComponentType, type ReactNode } from \"react\";\n\nexport type OpenEditorPageSnapshot = {\n pageId: string;\n title: string;\n icon?: string | null;\n href?: string | null;\n};\n\nexport type OpenEditorPageRuntime = {\n createPage?: (input: { title: string; icon?: string | null }) => Promise<OpenEditorPageSnapshot>;\n resolvePage?: (pageId: string) => Promise<OpenEditorPageSnapshot | null>;\n renamePage?: (pageId: string, title: string) => Promise<void> | void;\n openPage?: (page: OpenEditorPageSnapshot) => Promise<void> | void;\n};\n\nconst OpenEditorPageRuntimeContext = createContext<OpenEditorPageRuntime | undefined>(undefined);\nconst OpenEditorAttachmentRuntimeContext = createContext<OpenEditorAttachmentRuntime<any> | undefined>(undefined);\n\nexport type OpenEditorReactProps = {\n initialDocument?: OpenEditorDocument;\n editable?: boolean;\n placeholder?: string;\n onChange?: (document: OpenEditorDocument) => void;\n onFilePasteDrop?: (file: File) => boolean;\n pageRuntime?: OpenEditorPageRuntime;\n attachmentRuntime?: OpenEditorAttachmentRuntime<any>;\n slashMenuItems?: readonly OpenEditorSlashMenuItem[];\n /** Consumer-owned blocks. Extension names and node types must be unique. */\n extensions?: readonly OpenEditorReactExtension[];\n};\n\nexport type OpenEditorReactConfig = OpenEditorReactProps;\n\nexport type OpenEditorController = {\n editor: Editor | null;\n document: OpenEditorDocument;\n exports: ReturnType<typeof toExportBundle>;\n editable: boolean;\n placeholder: string;\n selectedBlock: string;\n setSelectedBlock: (blockName: string) => void;\n getContent: () => OpenEditorDocument;\n setContent: (document: OpenEditorDocument) => void;\n setParagraph: () => void;\n toggleHeading: (level: 1 | 2 | 3 | 4 | 5 | 6) => void;\n toggleBold: () => void;\n toggleItalic: () => void;\n toggleUnderline: () => void;\n toggleStrike: () => void;\n toggleInlineCode: () => void;\n toggleBulletList: () => void;\n toggleOrderedList: () => void;\n toggleTaskList: () => void;\n toggleBlockquote: () => void;\n toggleCodeBlock: () => void;\n undo: () => void;\n redo: () => void;\n insertBlock: (blockName?: string, range?: InsertRange) => void;\n setLink: (url?: string | null) => void;\n getActiveLink: () => string | undefined;\n moveSelectedBlock: (direction: -1 | 1) => void;\n duplicateSelectedBlock: () => void;\n deleteSelectedBlock: () => void;\n slashMenuItems: readonly OpenEditorSlashMenuItem[];\n extensions: readonly OpenEditorReactExtension[];\n pageRuntime?: OpenEditorPageRuntime;\n attachmentRuntime?: OpenEditorAttachmentRuntime<any>;\n slashState: SlashState | null;\n selectionBubbleState: SelectionBubbleState | null;\n};\n\nexport type OpenEditorContentProps = {\n controller: OpenEditorController;\n className?: string;\n};\n\ntype InternalOpenEditorController = OpenEditorController & {\n editor: Editor | null;\n};\n\ntype RenderAttributes = Record<string, string | number | boolean | null | undefined>;\nexport type InsertRange = { from: number; to: number };\nexport type OpenEditorOverlayRect = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\nexport type SlashState = {\n query: string;\n from: number;\n to: number;\n left: number;\n top: number;\n anchorRect?: OpenEditorOverlayRect;\n};\nexport type SelectionBubbleState = {\n left: number;\n top: number;\n anchorRect?: OpenEditorOverlayRect;\n};\nexport type OpenEditorSlashMenuItem = {\n key: string;\n label: string;\n group: string;\n keywords?: readonly string[];\n run: (context: { controller: OpenEditorController; range: InsertRange }) => void;\n};\n\nexport type OpenEditorViewerRenderer = (context: {\n node: ProseMirrorNode;\n children: ReactNode;\n}) => ReactNode;\n\nexport type OpenEditorExtensionMenu = {\n label?: string;\n group?: string;\n keywords?: readonly string[];\n};\n\n/**\n * Complete web integration for a consumer-owned block. The portable `block`\n * contract is shared by commands and platform support; the other fields are\n * adapters for the React/Tiptap runtime and non-interactive output.\n */\nexport type OpenEditorReactExtension = {\n block: BlockSpec;\n tiptapExtensions: readonly AnyExtension[];\n slashMenu?: false | OpenEditorExtensionMenu;\n viewer: OpenEditorViewerRenderer;\n exporters?: OpenEditorExporters;\n};\n\nexport const defineOpenEditorReactExtension = <T extends OpenEditorReactExtension>(extension: T): T => extension;\n\nexport type OpenEditorReactNodeExtension = Omit<OpenEditorReactExtension, \"tiptapExtensions\"> & {\n node: Omit<Partial<NodeConfig>, \"name\" | \"addNodeView\">;\n component: ComponentType<ReactNodeViewProps>;\n};\n\n/** Creates the common case: one custom ProseMirror node rendered by one React node view. */\nexport const defineOpenEditorReactNode = ({\n block,\n node,\n component,\n ...extension\n}: OpenEditorReactNodeExtension): OpenEditorReactExtension => ({\n ...extension,\n block,\n tiptapExtensions: [\n Node.create({\n ...node,\n name: block.nodeType ?? block.name,\n addNodeView() {\n return ReactNodeViewRenderer(component);\n },\n }),\n ],\n});\n\nexport type OpenEditorViewerProps = {\n document: OpenEditorDocument;\n className?: string;\n renderers?: Partial<Record<string, OpenEditorViewerRenderer>>;\n extensions?: readonly OpenEditorReactExtension[];\n pageRuntime?: OpenEditorPageRuntime;\n attachmentRuntime?: OpenEditorAttachmentRuntime<any>;\n};\n\nconst EMPTY_EXTENSIONS: readonly OpenEditorReactExtension[] = [];\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n columns: {\n insertColumns: (count?: 2 | 3 | 4) => ReturnType;\n };\n }\n}\n\nconst COMMON_HTML_ATTRIBUTES = [\"id\", \"class\", \"title\", \"lang\", \"dir\", \"data-id\", \"style\"] as const;\nconst LAYOUT_ATTRIBUTES = [\"align\", \"width\", \"height\"] as const;\nconst URL_ATTRIBUTES = new Set([\"href\", \"src\"]);\nconst FORBIDDEN_PASTE_TAGS = new Set([\"script\", \"iframe\", \"object\", \"embed\", \"meta\", \"base\"]);\n\nconst createStandardAttributes = (attributeNames: readonly string[]) =>\n Object.fromEntries(\n attributeNames.map((attribute) => [\n attribute,\n {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(attribute),\n renderHTML: (attributes: Record<string, unknown>) =>\n attributes[attribute] ? { [attribute]: attributes[attribute] } : {},\n },\n ]),\n );\n\nconst isSafeUrl = (value: string, allowDataImage: boolean) => {\n const normalized = value.trim().toLowerCase();\n\n if (normalized.startsWith(\"javascript:\") || normalized.startsWith(\"vbscript:\")) {\n return false;\n }\n\n if (normalized.startsWith(\"data:\")) {\n return allowDataImage && normalized.startsWith(\"data:image/\");\n }\n\n return true;\n};\n\nconst sanitizePastedHtml = (html: string) => {\n const parser = new DOMParser();\n const parsed = parser.parseFromString(html, \"text/html\");\n const isFromOpenEditor = /data-openeditor-|oe-|node-/.test(html);\n const preservedAttributes: Record<string, string[]> = {\n a: [\"href\", \"target\", \"rel\"],\n img: [\"src\", \"alt\", \"width\", \"height\"],\n td: [\"colspan\", \"rowspan\"],\n th: [\"colspan\", \"rowspan\", \"scope\"],\n table: [\"border\", \"cellpadding\", \"cellspacing\"],\n \"*\": [\"id\"],\n };\n\n for (const tag of FORBIDDEN_PASTE_TAGS) {\n for (const element of Array.from(parsed.body.getElementsByTagName(tag))) {\n element.remove();\n }\n }\n\n for (const element of Array.from(parsed.body.querySelectorAll<HTMLElement>(\"[href], [src]\"))) {\n const allowDataImage = element.tagName.toLowerCase() === \"img\";\n\n for (const attribute of URL_ATTRIBUTES) {\n const value = element.getAttribute(attribute);\n if (value !== null && !isSafeUrl(value, allowDataImage)) {\n element.removeAttribute(attribute);\n }\n }\n }\n\n if (isFromOpenEditor) {\n return parsed.body.innerHTML;\n }\n\n const sanitizeElement = (node: globalThis.Node) => {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n const allowed = new Set([...(preservedAttributes[tagName] ?? []), ...(preservedAttributes[\"*\"] ?? [])]);\n\n for (const attribute of Array.from(element.attributes)) {\n if (attribute.name.startsWith(\"data-\") || !allowed.has(attribute.name)) {\n element.removeAttribute(attribute.name);\n }\n }\n }\n\n for (const child of Array.from(node.childNodes)) {\n sanitizeElement(child);\n }\n };\n\n sanitizeElement(parsed.body);\n return parsed.body.innerHTML;\n};\n\nconst Columns = Node.create({\n name: \"columns\",\n group: \"block\",\n content: \"column+\",\n isolating: true,\n defining: true,\n addAttributes() {\n return createStandardAttributes([...COMMON_HTML_ATTRIBUTES, ...LAYOUT_ATTRIBUTES, \"cellspacing\"]);\n },\n parseHTML() {\n return [{ tag: \"section[data-openeditor-columns]\" }];\n },\n renderHTML({ node, HTMLAttributes }) {\n const count = node.childCount;\n return [\n \"section\",\n mergeAttributes(\n {\n class: \"oe-columns\",\n \"data-openeditor-columns\": count,\n style: `--oe-column-count:${Math.min(Math.max(count, 2), 4)};${HTMLAttributes.style ?? \"\"}`,\n },\n HTMLAttributes,\n ),\n 0,\n ];\n },\n addCommands() {\n return {\n insertColumns:\n (count: 2 | 3 | 4 = 2) =>\n ({ commands }) =>\n commands.insertContent({\n type: \"columns\",\n content: Array.from({ length: count }, (_, index) => ({\n type: \"column\",\n content: [\n {\n type: \"paragraph\",\n content: [{ type: \"text\", text: `Column ${index + 1}` }],\n },\n ],\n })),\n }),\n };\n },\n addKeyboardShortcuts() {\n return {\n Backspace: ({ editor }) => {\n const { selection } = editor.state;\n\n if (!(selection instanceof NodeSelection) || selection.node.type.name !== \"columns\") {\n return false;\n }\n\n const allColumnsEmpty = Array.from({ length: selection.node.childCount }, (_, index) =>\n selection.node.child(index),\n ).every(\n (column) =>\n column.childCount === 1 &&\n column.firstChild?.type.name === \"paragraph\" &&\n column.firstChild.childCount === 0,\n );\n\n if (!allColumnsEmpty) {\n return false;\n }\n\n editor.view.dispatch(\n editor.state.tr.replaceWith(selection.from, selection.to, editor.state.schema.nodes.paragraph.create()),\n );\n return true;\n },\n };\n },\n});\n\nconst Column = Node.create({\n name: \"column\",\n content: \"block+\",\n isolating: true,\n defining: true,\n addAttributes() {\n return createStandardAttributes([...COMMON_HTML_ATTRIBUTES, ...LAYOUT_ATTRIBUTES]);\n },\n parseHTML() {\n return [{ tag: \"div[data-openeditor-column]\" }];\n },\n renderHTML({ HTMLAttributes }: { HTMLAttributes: RenderAttributes }) {\n return [\"div\", mergeAttributes({ \"data-openeditor-column\": \"\", class: \"oe-column\" }, HTMLAttributes), 0];\n },\n});\n\nconst Divider = HorizontalRule.extend({\n addAttributes() {\n return {\n ...createStandardAttributes([\"class\", \"style\"]),\n class: {\n default: \"oe-divider\",\n },\n };\n },\n addInputRules() {\n return [\n new InputRule({\n find: /^(?:---|___|\\*\\*\\*)$/,\n handler: ({ state, range }) => {\n const { tr } = state;\n tr.insert(range.from - 1, this.type.create()).delete(tr.mapping.map(range.from), tr.mapping.map(range.to));\n },\n }),\n ];\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n filterTransaction(transaction, state) {\n const { selection } = state;\n const isDividerSelection = selection instanceof NodeSelection && selection.node.type.name === \"horizontalRule\";\n const isTypingOverDivider = transaction.steps.some(\n (step) => step instanceof ReplaceStep && step.slice.content.size > 0,\n );\n\n return !(isDividerSelection && transaction.docChanged && isTypingOverDivider);\n },\n }),\n ];\n },\n});\n\nconst OpenEditorTaskCheckbox = ({\n checked,\n label,\n readOnly = false,\n tabIndex,\n onCheckedChange,\n}: {\n checked: boolean;\n label: string;\n readOnly?: boolean;\n tabIndex?: number;\n onCheckedChange?: (checked: boolean) => void;\n}) => (\n <Checkbox.Root\n aria-label={label}\n checked={checked}\n className=\"oe-task-checkbox\"\n onCheckedChange={onCheckedChange}\n onMouseDown={(event) => event.preventDefault()}\n readOnly={readOnly}\n tabIndex={tabIndex}\n >\n <Checkbox.Indicator className=\"oe-task-checkbox-indicator\" keepMounted />\n </Checkbox.Root>\n);\n\nconst OpenEditorTaskItemNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const checked = Boolean(node.attrs.checked);\n\n return (\n <NodeViewWrapper as=\"li\" data-checked={checked ? \"true\" : \"false\"}>\n <span className=\"oe-task-item-checkbox\" contentEditable={false}>\n <OpenEditorTaskCheckbox\n checked={checked}\n label={`Task item checkbox for ${node.textContent || \"empty task item\"}`}\n onCheckedChange={(nextChecked) => {\n if (editor.isEditable) {\n updateAttributes({ checked: nextChecked });\n }\n }}\n readOnly={!editor.isEditable}\n />\n </span>\n <NodeViewContent as=\"div\" />\n </NodeViewWrapper>\n );\n};\n\nconst BaseUiTaskItem = TaskItem.extend({\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorTaskItemNodeView);\n },\n});\n\nconst ToggleList = Node.create({\n name: \"toggleList\",\n group: \"block\",\n content: \"toggleListItem+\",\n parseHTML: () => [{ tag: \"ul[data-openeditor-toggle-list]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"ul\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-toggle-list\": \"\" }),\n 0,\n ],\n});\n\nconst OpenEditorToggleListItemNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const open = Boolean(node.attrs.open);\n\n return (\n <NodeViewWrapper as=\"li\" className=\"oe-toggle-list-item\" data-open={open ? \"true\" : \"false\"}>\n <button\n aria-expanded={open}\n aria-label={open ? \"Collapse toggle item\" : \"Expand toggle item\"}\n className=\"oe-toggle-list-trigger\"\n contentEditable={false}\n disabled={!editor.isEditable}\n onClick={() => updateAttributes({ open: !open })}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"oe-toggle-list-chevron\">›</span>\n </button>\n <NodeViewContent as=\"div\" className=\"oe-toggle-list-content\" />\n </NodeViewWrapper>\n );\n};\n\nconst ToggleListItem = Node.create({\n name: \"toggleListItem\",\n content: \"paragraph block*\",\n defining: true,\n addAttributes: () => ({ open: { default: true } }),\n parseHTML: () => [{ tag: \"li[data-openeditor-toggle-list-item]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"li\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-toggle-list-item\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorToggleListItemNodeView);\n },\n});\n\nconst CALLOUT_TONES = [\"info\", \"success\", \"warning\", \"danger\"] as const;\n\nconst normalizeCalloutTone = (value: unknown) =>\n CALLOUT_TONES.includes(value as (typeof CALLOUT_TONES)[number]) ? String(value) : \"info\";\n\nconst OpenEditorCalloutNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => (\n <NodeViewWrapper as=\"aside\" className=\"oe-callout\" data-tone={normalizeCalloutTone(node.attrs.tone)}>\n <select\n aria-label=\"Callout tone\"\n className=\"oe-callout-tone\"\n contentEditable={false}\n disabled={!editor.isEditable}\n onChange={(event) => updateAttributes({ tone: event.target.value })}\n value={normalizeCalloutTone(node.attrs.tone)}\n >\n {CALLOUT_TONES.map((tone) => <option key={tone} value={tone}>{tone}</option>)}\n </select>\n <NodeViewContent as=\"div\" className=\"oe-callout-content\" />\n </NodeViewWrapper>\n);\n\nconst Callout = Node.create({\n name: \"callout\",\n group: \"block\",\n content: \"block+\",\n defining: true,\n addAttributes: () => ({ tone: { default: \"info\" } }),\n parseHTML: () => [{ tag: \"aside[data-openeditor-callout]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"aside\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-callout\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorCalloutNodeView);\n },\n});\n\ntype AttachmentPhase = \"idle\" | \"selecting\" | \"uploading\" | \"resolving\" | \"ready\" | \"missing\" | \"error\";\n\nconst attachmentSnapshotFromNode = (node: { attrs?: Record<string, unknown> }): OpenEditorAttachmentSnapshot => ({\n attachmentId: typeof node.attrs?.attachmentId === \"string\" ? node.attrs.attachmentId : null,\n name: typeof node.attrs?.name === \"string\" ? node.attrs.name : \"\",\n mimeType: typeof node.attrs?.mimeType === \"string\" ? node.attrs.mimeType : null,\n size: typeof node.attrs?.size === \"number\" ? node.attrs.size : null,\n url: typeof node.attrs?.url === \"string\" ? node.attrs.url : null,\n});\n\nexport const formatAttachmentSize = (size: number | null) => {\n if (size === null || !Number.isFinite(size) || size < 0) return \"\";\n if (size < 1024) return `${size} B`;\n const units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n let value = size / 1024;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) { value /= 1024; unit += 1; }\n return `${value >= 10 ? value.toFixed(0) : value.toFixed(1)} ${units[unit]}`;\n};\n\nconst attachmentTypeLabel = (snapshot: OpenEditorAttachmentSnapshot) => {\n if (snapshot.mimeType) return snapshot.mimeType.split(\"/\").at(-1)?.toUpperCase() ?? snapshot.mimeType;\n const extension = snapshot.name.includes(\".\") ? snapshot.name.split(\".\").at(-1) : null;\n return extension?.toUpperCase() ?? \"FILE\";\n};\n\nconst AttachmentIcon = ({ snapshot }: { snapshot: OpenEditorAttachmentSnapshot }) => (\n <span aria-hidden=\"true\" className=\"oe-attachment-icon\"><span>{attachmentTypeLabel(snapshot).slice(0, 4)}</span></span>\n);\n\nconst OpenEditorAttachmentNodeView = ({ editor, node, updateAttributes, deleteNode }: ReactNodeViewProps) => {\n const runtime = use(OpenEditorAttachmentRuntimeContext);\n const durable = attachmentSnapshotFromNode(node);\n const [phase, setPhase] = useState<AttachmentPhase>(durable.attachmentId || durable.url ? \"ready\" : \"idle\");\n const [progress, setProgress] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [input, setInput] = useState<OpenEditorAttachmentUploadInput | null>(null);\n const operationRef = useRef(0);\n const abortRef = useRef<AbortController | null>(null);\n\n const isCurrent = (operation: number) => operationRef.current === operation;\n const stopCurrent = () => { operationRef.current += 1; abortRef.current?.abort(); abortRef.current = null; };\n\n useEffect(() => () => stopCurrent(), []);\n\n const upload = async (selected: OpenEditorAttachmentUploadInput, replacing: boolean) => {\n if (!runtime?.uploadAttachment) return;\n stopCurrent();\n const operation = operationRef.current;\n const controller = new AbortController();\n abortRef.current = controller;\n setInput(selected);\n setProgress(0);\n setError(null);\n setPhase(\"uploading\");\n try {\n const validation = await runtime.validateAttachment?.(selected);\n if (!isCurrent(operation)) return;\n if (validation && !validation.accepted) throw new Error(validation.message);\n const callback = { signal: controller.signal, onProgress: (value: number) => {\n if (isCurrent(operation)) setProgress(Math.max(0, Math.min(1, value)));\n } };\n const uploaded = replacing && durable.attachmentId && runtime.replaceAttachment\n ? await runtime.replaceAttachment(durable.attachmentId, selected, callback)\n : await runtime.uploadAttachment(selected, callback);\n if (!isCurrent(operation)) return;\n updateAttributes(uploaded);\n setInput(null);\n setProgress(1);\n setPhase(\"ready\");\n } catch (cause) {\n if (!isCurrent(operation) || controller.signal.aborted) return;\n setError(cause instanceof Error ? cause.message : \"Upload failed.\");\n setPhase(\"error\");\n }\n };\n\n const selectAndUpload = async (replacing = false) => {\n if (!runtime?.selectAttachment || !runtime.uploadAttachment) return;\n stopCurrent();\n const operation = operationRef.current;\n const controller = new AbortController();\n abortRef.current = controller;\n setError(null);\n setPhase(\"selecting\");\n try {\n const selected = await runtime.selectAttachment({ signal: controller.signal });\n if (!isCurrent(operation)) return;\n if (!selected) { setPhase(durable.attachmentId || durable.url ? \"ready\" : \"idle\"); return; }\n await upload(selected, replacing);\n } catch (cause) {\n if (!isCurrent(operation) || controller.signal.aborted) return;\n setError(cause instanceof Error ? cause.message : \"Could not select a file.\");\n setPhase(\"error\");\n }\n };\n\n useEffect(() => {\n if (phase === \"idle\" && editor.isEditable && runtime?.selectAttachment && runtime.uploadAttachment) {\n void selectAndUpload();\n }\n }, []);\n\n const cancel = () => { stopCurrent(); setPhase(durable.attachmentId || durable.url ? \"ready\" : \"idle\"); };\n const remove = () => { stopCurrent(); deleteNode(); };\n const name = durable.name || input?.name || \"Choose a file\";\n const display = durable.name ? durable : { ...durable, name, mimeType: input?.mimeType ?? null, size: input?.size ?? null };\n const open = () => {\n if (runtime?.openAttachment) void runtime.openAttachment(durable);\n else if (durable.url) window.open(durable.url, \"_blank\", \"noopener,noreferrer\");\n };\n\n return <NodeViewWrapper className=\"oe-attachment\" data-state={phase}>\n <AttachmentIcon snapshot={display} />\n <div className=\"oe-attachment-body\">\n <input aria-label=\"File name\" className=\"oe-attachment-name\" disabled={!editor.isEditable || phase === \"uploading\"} value={name} onChange={(event) => updateAttributes({ name: event.target.value })} onBlur={() => {\n if (durable.attachmentId && durable.name) void runtime?.renameAttachment?.(durable.attachmentId, durable.name);\n }} />\n <div className=\"oe-attachment-meta\">{[formatAttachmentSize(display.size), attachmentTypeLabel(display)].filter(Boolean).join(\" · \")}</div>\n {phase === \"uploading\" ? <div className=\"oe-attachment-progress\" role=\"progressbar\" aria-label={`Uploading ${name}`} aria-valuemin={0} aria-valuemax={100} aria-valuenow={Math.round(progress * 100)}><span style={{ width: `${progress * 100}%` }} /></div> : null}\n {error ? <div className=\"oe-attachment-error\" role=\"alert\">{error}</div> : null}\n </div>\n <div className=\"oe-attachment-actions\" contentEditable={false}>\n {phase === \"uploading\" || phase === \"selecting\" ? <button onClick={cancel} type=\"button\">Cancel</button> : null}\n {phase === \"error\" && input ? <button onClick={() => void upload(input, Boolean(durable.attachmentId))} type=\"button\">Retry</button> : null}\n {(durable.attachmentId || durable.url) && phase !== \"uploading\" ? <button onClick={open} type=\"button\">Open</button> : null}\n {editor.isEditable && runtime?.selectAttachment && runtime.uploadAttachment && phase !== \"uploading\" ? <button onClick={() => void selectAndUpload(Boolean(durable.attachmentId))} type=\"button\">Replace</button> : null}\n {editor.isEditable ? <button aria-label={`Remove ${name}`} onClick={remove} type=\"button\">Remove</button> : null}\n </div>\n </NodeViewWrapper>;\n};\n\nconst Attachment = Node.create({\n name: \"attachment\",\n group: \"block\",\n atom: true,\n draggable: true,\n addAttributes: () => ({ attachmentId: { default: null }, name: { default: \"\" }, mimeType: { default: null }, size: { default: null }, url: { default: null } }),\n parseHTML: () => [{ tag: \"a[data-openeditor-attachment]\" }, { tag: \"div[data-openeditor-attachment]\" }],\n renderHTML: ({ node, HTMLAttributes }) => [\"a\", mergeAttributes(HTMLAttributes, { \"data-openeditor-attachment\": \"\", href: node.attrs.url ?? undefined, download: node.attrs.name || undefined }), node.attrs.name || \"Attachment\"],\n addNodeView() { return ReactNodeViewRenderer(OpenEditorAttachmentNodeView); },\n});\n\nconst OpenEditorAttachmentViewer = ({ node }: { node: ProseMirrorNode }) => {\n const runtime = use(OpenEditorAttachmentRuntimeContext);\n const cached = attachmentSnapshotFromNode(node);\n const [state, setState] = useState<{ phase: AttachmentPhase; snapshot: OpenEditorAttachmentSnapshot | null }>({ phase: cached.attachmentId && runtime?.resolveAttachment ? \"resolving\" : cached.url ? \"ready\" : \"missing\", snapshot: cached });\n useEffect(() => {\n const controller = new AbortController();\n if (cached.attachmentId && runtime?.resolveAttachment) {\n setState({ phase: \"resolving\", snapshot: cached });\n void runtime.resolveAttachment(cached.attachmentId, { signal: controller.signal }).then((snapshot) => {\n if (!controller.signal.aborted) setState({ phase: snapshot ? \"ready\" : \"missing\", snapshot });\n }).catch(() => { if (!controller.signal.aborted) setState({ phase: \"missing\", snapshot: null }); });\n } else setState({ phase: cached.url ? \"ready\" : \"missing\", snapshot: cached });\n return () => controller.abort();\n }, [cached.attachmentId, cached.url, runtime]);\n const snapshot = state.snapshot ?? cached;\n const content = <><AttachmentIcon snapshot={snapshot} /><span className=\"oe-attachment-body\"><strong className=\"oe-attachment-name\">{snapshot.name || \"Attachment unavailable\"}</strong><span className=\"oe-attachment-meta\">{state.phase === \"resolving\" ? \"Loading…\" : state.phase === \"missing\" ? \"Missing or inaccessible\" : [formatAttachmentSize(snapshot.size), attachmentTypeLabel(snapshot)].filter(Boolean).join(\" · \")}</span></span></>;\n if (state.phase === \"ready\" && runtime?.openAttachment) return <button className=\"oe-attachment oe-attachment-viewer\" onClick={() => void runtime.openAttachment?.(snapshot)} type=\"button\">{content}</button>;\n if (state.phase === \"ready\" && snapshot.url) return <a className=\"oe-attachment oe-attachment-viewer\" href={snapshot.url} rel=\"noreferrer\" target=\"_blank\">{content}</a>;\n return <div className=\"oe-attachment oe-attachment-viewer\" data-state={state.phase}>{content}</div>;\n};\n\nconst pageSnapshotFromNode = (node: {\n attrs?: Record<string, unknown>;\n content?: unknown;\n textContent?: string;\n}): OpenEditorPageSnapshot | null => {\n const pageId = typeof node.attrs?.pageId === \"string\" ? node.attrs.pageId : \"\";\n if (!pageId) return null;\n return {\n pageId,\n title: node.textContent || getNodeText(node as { content?: unknown[] }) || \"Untitled\",\n icon: typeof node.attrs?.icon === \"string\" ? node.attrs.icon : \"📄\",\n href: typeof node.attrs?.href === \"string\" ? node.attrs.href : null,\n };\n};\n\nconst OpenEditorPageNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const runtime = use(OpenEditorPageRuntimeContext);\n const [creating, setCreating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const snapshot = pageSnapshotFromNode(node);\n const icon = typeof node.attrs.icon === \"string\" ? node.attrs.icon : \"📄\";\n\n const createPage = async () => {\n if (!runtime?.createPage || creating) return;\n setCreating(true);\n setError(null);\n try {\n const created = await runtime.createPage({ title: node.textContent || \"Untitled\", icon });\n updateAttributes({ pageId: created.pageId, icon: created.icon ?? icon, href: created.href ?? null });\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not create the page.\");\n } finally {\n setCreating(false);\n }\n };\n\n return (\n <NodeViewWrapper className=\"oe-page\" data-page-id={snapshot?.pageId ?? \"\"}>\n <input\n aria-label=\"Page icon\"\n className=\"oe-page-icon-input\"\n contentEditable={false}\n disabled={!editor.isEditable}\n maxLength={8}\n onChange={(event) => updateAttributes({ icon: event.target.value || \"📄\" })}\n value={icon}\n />\n <NodeViewContent\n as=\"div\"\n className=\"oe-page-title\"\n onBlur={() => {\n if (snapshot?.pageId) void runtime?.renamePage?.(snapshot.pageId, node.textContent || \"Untitled\");\n }}\n />\n {snapshot ? (\n <button\n aria-label={`Open ${snapshot.title}`}\n className=\"oe-page-action\"\n contentEditable={false}\n onClick={() => void runtime?.openPage?.(snapshot)}\n type=\"button\"\n >\n Open <span aria-hidden=\"true\">→</span>\n </button>\n ) : runtime?.createPage && editor.isEditable ? (\n <button\n className=\"oe-page-action\"\n contentEditable={false}\n disabled={creating}\n onClick={() => void createPage()}\n type=\"button\"\n >\n {creating ? \"Creating…\" : \"Create page\"}\n </button>\n ) : null}\n {error ? <span className=\"oe-page-error\" contentEditable={false} role=\"alert\">{error}</span> : null}\n </NodeViewWrapper>\n );\n};\n\nconst Page = Node.create({\n name: \"page\",\n group: \"block\",\n content: \"inline*\",\n defining: true,\n addAttributes: () => ({\n pageId: { default: null },\n icon: { default: \"📄\" },\n href: { default: null },\n }),\n parseHTML: () => [{ tag: \"div[data-openeditor-page]\" }, { tag: \"a[data-openeditor-page]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"div\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-page\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorPageNodeView);\n },\n});\n\nconst OpenEditorPageViewer = ({ node }: { node: ProseMirrorNode }) => {\n const runtime = use(OpenEditorPageRuntimeContext);\n const cached = pageSnapshotFromNode(node);\n const [resolved, setResolved] = useState<OpenEditorPageSnapshot | null>(null);\n\n useEffect(() => {\n let active = true;\n setResolved(null);\n if (cached?.pageId && runtime?.resolvePage) {\n void runtime.resolvePage(cached.pageId).then((page) => {\n if (active && page) setResolved(page);\n });\n }\n return () => { active = false; };\n }, [cached?.pageId, runtime]);\n\n const page = resolved ?? cached;\n const title = page?.title ?? (getNodeText(node) || \"Untitled\");\n const content = <><span className=\"oe-page-icon\" aria-hidden=\"true\">{page?.icon ?? \"📄\"}</span><span className=\"oe-page-title\">{title}</span><span className=\"oe-page-arrow\" aria-hidden=\"true\">→</span></>;\n if (page && runtime?.openPage) {\n return <button className=\"oe-page oe-page-viewer\" onClick={() => void runtime.openPage?.(page)} type=\"button\">{content}</button>;\n }\n if (page?.href) {\n return <a className=\"oe-page oe-page-viewer\" href={page.href}>{content}</a>;\n }\n return <div className=\"oe-page oe-page-viewer\">{content}</div>;\n};\n\nconst MermaidPreview = ({ code }: { code: string }) => {\n const rendered = useMemo(() => {\n try {\n return {\n error: null,\n svg: renderMermaidSVG(code, {\n bg: \"var(--oe-surface, #ffffff)\",\n fg: \"var(--oe-text, #171717)\",\n accent: \"var(--oe-accent-strong, #171717)\",\n border: \"var(--oe-border-strong, #d4d4d4)\",\n muted: \"var(--oe-muted, #737373)\",\n surface: \"var(--oe-surface-muted, #f5f5f5)\",\n transparent: true,\n }),\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n svg: null,\n };\n }\n }, [code]);\n\n return rendered.error ? (\n <pre className=\"oe-diagram-error\" role=\"alert\">{rendered.error}</pre>\n ) : (\n <div className=\"oe-diagram-preview\" dangerouslySetInnerHTML={{ __html: rendered.svg ?? \"\" }} />\n );\n};\n\nconst ToggleListViewerItem = ({ children, initiallyOpen }: { children: ReactNode; initiallyOpen: boolean }) => {\n const [open, setOpen] = useState(initiallyOpen);\n return (\n <li className=\"oe-toggle-list-item\" data-open={open ? \"true\" : \"false\"}>\n <button\n aria-expanded={open}\n aria-label={open ? \"Collapse toggle item\" : \"Expand toggle item\"}\n className=\"oe-toggle-list-trigger\"\n onClick={() => setOpen((current) => !current)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"oe-toggle-list-chevron\">›</span>\n </button>\n <div className=\"oe-toggle-list-content\">{children}</div>\n </li>\n );\n};\n\nconst OpenEditorDiagramNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const code = typeof node.attrs.code === \"string\" ? node.attrs.code : \"\";\n return (\n <NodeViewWrapper className=\"oe-diagram\" contentEditable={false}>\n <MermaidPreview code={code} />\n {editor.isEditable ? (\n <textarea\n aria-label=\"Mermaid diagram source\"\n className=\"oe-diagram-source\"\n onChange={(event) => updateAttributes({ code: event.target.value })}\n spellCheck={false}\n value={code}\n />\n ) : null}\n </NodeViewWrapper>\n );\n};\n\nconst MermaidDiagram = Node.create({\n name: \"mermaidDiagram\",\n group: \"block\",\n atom: true,\n draggable: true,\n addAttributes: () => ({ code: { default: \"\" } }),\n parseHTML: () => [{ tag: \"figure[data-openeditor-diagram]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"figure\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-diagram\": \"\" }),\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorDiagramNodeView);\n },\n});\n\nconst createEditorExtensions = (\n placeholder: string,\n customExtensions: readonly OpenEditorReactExtension[],\n) => [\n StarterKit.configure({ horizontalRule: false, link: false, underline: false }),\n Divider,\n Image.configure({ allowBase64: true }),\n Link.configure({ openOnClick: false }),\n Underline,\n TaskList,\n BaseUiTaskItem.configure({ nested: true }),\n Table.configure({ resizable: true }),\n TableRow,\n TableHeader,\n TableCell,\n TextAlign.configure({ types: [\"heading\", \"paragraph\"] }),\n Placeholder.configure({ placeholder }),\n Columns,\n Column,\n ToggleList,\n ToggleListItem,\n Callout,\n Page,\n Attachment,\n MermaidDiagram,\n ...customExtensions.flatMap((extension) => extension.tiptapExtensions),\n];\n\nconst createReactBlockRegistry = (extensions: readonly OpenEditorReactExtension[]): BlockRegistry =>\n createBlockRegistry([\n ...defaultBlockRegistry.values(),\n ...extensions.map((extension) => extension.block),\n ]);\n\nconst createReactExporters = (extensions: readonly OpenEditorReactExtension[]): OpenEditorExporters => ({\n html: Object.assign({}, ...extensions.map((extension) => extension.exporters?.html ?? {})),\n text: Object.assign({}, ...extensions.map((extension) => extension.exporters?.text ?? {})),\n});\n\nconst getNodeText = (node: { text?: string; content?: unknown[] }): string =>\n node.text ?? node.content?.map((child) => getNodeText(child as { text?: string; content?: unknown[] })).join(\"\") ?? \"\";\n\nconst toOverlayRect = (coordinates: { left: number; right: number; top: number; bottom: number }): OpenEditorOverlayRect => ({\n left: coordinates.left,\n right: coordinates.right,\n top: coordinates.top,\n bottom: coordinates.bottom,\n width: coordinates.right - coordinates.left,\n height: coordinates.bottom - coordinates.top,\n});\n\nconst getSlashState = (editor: NonNullable<ReturnType<typeof useEditor>>): SlashState | null => {\n const { selection } = editor.state;\n\n if (!selection.empty) {\n return null;\n }\n\n const { $from } = selection;\n const textBeforeCursor = $from.parent.textBetween(0, $from.parentOffset, \"\\n\", \"\\n\");\n const match = /(?:^|\\s)\\/([\\w -]*)$/.exec(textBeforeCursor);\n\n if (!match) {\n return null;\n }\n\n const query = match[1] ?? \"\";\n const from = $from.pos - query.length - 1;\n const to = $from.pos;\n const coordinates = editor.view.coordsAtPos(to);\n const anchorRect = toOverlayRect(coordinates);\n\n return {\n query,\n from,\n to,\n left: coordinates.left,\n top: coordinates.bottom + 8,\n anchorRect,\n };\n};\n\nconst getSelectionBubbleState = (editor: NonNullable<ReturnType<typeof useEditor>>): SelectionBubbleState | null => {\n const { selection } = editor.state;\n\n if (selection instanceof NodeSelection && selection.node.type.name === \"horizontalRule\") {\n return null;\n }\n\n if (selection.empty) {\n return null;\n }\n\n const domSelection = typeof window === \"undefined\" ? null : window.getSelection();\n const selectedRange = domSelection?.rangeCount ? domSelection.getRangeAt(0) : null;\n const selectedRect = selectedRange?.getBoundingClientRect();\n\n if (\n selectedRange &&\n editor.view.dom.contains(selectedRange.commonAncestorContainer) &&\n selectedRect &&\n selectedRect.width > 0 &&\n selectedRect.height > 0\n ) {\n return {\n left: selectedRect.left + selectedRect.width / 2,\n top: selectedRect.top,\n anchorRect: toOverlayRect(selectedRect),\n };\n }\n\n const fromCoordinates = editor.view.coordsAtPos(selection.from);\n const toCoordinates = editor.view.coordsAtPos(selection.to);\n const anchorRect = toOverlayRect({\n left: Math.min(fromCoordinates.left, toCoordinates.left),\n right: Math.max(fromCoordinates.right, toCoordinates.right),\n top: Math.min(fromCoordinates.top, toCoordinates.top),\n bottom: Math.max(fromCoordinates.bottom, toCoordinates.bottom),\n });\n\n return {\n left: (fromCoordinates.left + toCoordinates.right) / 2,\n top: Math.min(fromCoordinates.top, toCoordinates.top) - 8,\n anchorRect,\n };\n};\n\nconst getSelectedTopLevelIndex = (editor: NonNullable<ReturnType<typeof useEditor>>) => {\n const { $from } = editor.state.selection;\n const selectedTopLevelPosition = $from.depth > 0 ? $from.before(1) : 0;\n let selectedIndex = 0;\n\n editor.state.doc.forEach((_, offset, index) => {\n if (offset <= selectedTopLevelPosition) {\n selectedIndex = index;\n }\n });\n\n return selectedIndex;\n};\n\nexport const useOpenEditorController = ({\n initialDocument = seedDocument,\n editable = true,\n placeholder = \"Start writing...\",\n onChange,\n onFilePasteDrop,\n pageRuntime,\n attachmentRuntime,\n slashMenuItems = [],\n extensions = EMPTY_EXTENSIONS,\n}: OpenEditorReactProps = {}): OpenEditorController => {\n const [document, setDocument] = useState(normalizeDocument(initialDocument));\n const [selectedBlock, setSelectedBlock] = useState(\"paragraph\");\n const [slashState, setSlashState] = useState<SlashState | null>(null);\n const [selectionBubbleState, setSelectionBubbleState] = useState<SelectionBubbleState | null>(null);\n const slashStateRef = useRef<SlashState | null>(null);\n const selectionBubbleStateRef = useRef<SelectionBubbleState | null>(null);\n const registry = useMemo(() => createReactBlockRegistry(extensions), [extensions]);\n const exporters = useMemo(() => createReactExporters(extensions), [extensions]);\n const editor = useEditor({\n immediatelyRender: false,\n extensions: createEditorExtensions(placeholder, extensions),\n content: toProseMirrorDocument(normalizeDocument(initialDocument)),\n editable,\n editorProps: {\n attributes: {\n class: \"oe-prosemirror\",\n \"aria-label\": \"OpenEditor document\",\n },\n transformPastedHTML: sanitizePastedHtml,\n handlePaste: (_view, event) => {\n const file = event.clipboardData?.files?.[0];\n\n if (!file || !onFilePasteDrop?.(file)) {\n return false;\n }\n\n event.preventDefault();\n return true;\n },\n handleDrop: (_view, event, _slice, moved) => {\n const file = event.dataTransfer?.files?.[0];\n\n if (moved || !file || !onFilePasteDrop?.(file)) {\n return false;\n }\n\n event.preventDefault();\n return true;\n },\n },\n onUpdate: ({ editor: currentEditor }) => {\n const nextDocument = normalizeDocument(\n fromProseMirrorDocument(\n currentEditor.getJSON(),\n initialDocument.meta,\n ),\n );\n setDocument(nextDocument);\n onChange?.(nextDocument);\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(getSelectionBubbleState(currentEditor));\n },\n onSelectionUpdate: ({ editor: currentEditor }) => {\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(getSelectionBubbleState(currentEditor));\n },\n }, [extensions]);\n const exports = useMemo(\n () => toExportBundle(document, exporters),\n [document, exporters],\n );\n\n useEffect(() => {\n slashStateRef.current = slashState;\n }, [slashState]);\n\n useEffect(() => {\n selectionBubbleStateRef.current = selectionBubbleState;\n }, [selectionBubbleState]);\n\n useEffect(() => {\n if (!editor || typeof window === \"undefined\") {\n return;\n }\n\n let animationFrame = 0;\n\n const refreshOverlayAnchors = () => {\n if (!slashStateRef.current && !selectionBubbleStateRef.current) {\n return;\n }\n\n window.cancelAnimationFrame(animationFrame);\n animationFrame = window.requestAnimationFrame(() => {\n if (slashStateRef.current) {\n setSlashState(getSlashState(editor));\n }\n\n if (selectionBubbleStateRef.current) {\n setSelectionBubbleState(getSelectionBubbleState(editor));\n }\n });\n };\n\n window.addEventListener(\"scroll\", refreshOverlayAnchors, true);\n window.addEventListener(\"resize\", refreshOverlayAnchors);\n\n return () => {\n window.cancelAnimationFrame(animationFrame);\n window.removeEventListener(\"scroll\", refreshOverlayAnchors, true);\n window.removeEventListener(\"resize\", refreshOverlayAnchors);\n };\n }, [editor]);\n\n const insertBlock = (blockName = selectedBlock, range?: InsertRange) => {\n if (!editor) {\n return;\n }\n\n const preset = openEditorInsertPresets.find((item) => item.key === blockName);\n const spec = registry.get(blockName);\n if (!spec) {\n return;\n }\n\n const chain = () => {\n const commandChain = editor.chain().focus();\n return range ? commandChain.deleteRange(range) : commandChain;\n };\n\n chain().insertContent(preset ? createOpenEditorInsertBlock(preset.key) : spec.defaultNode()).run();\n setSlashState(null);\n };\n\n const setDocumentContent = (content: OpenEditorDocument[\"content\"]) => {\n if (!editor) {\n return;\n }\n\n editor.commands.setContent(toProseMirrorDocument(normalizeDocument({ ...document, content })));\n };\n\n const setContent = (nextDocument: OpenEditorDocument) => {\n if (!editor) {\n return;\n }\n\n editor.commands.setContent(toProseMirrorDocument(normalizeDocument(nextDocument)));\n };\n\n const moveSelectedBlock = (direction: -1 | 1) => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n const nextIndex = selectedIndex + direction;\n\n if (nextIndex < 0 || nextIndex >= currentDocument.content.length) {\n return;\n }\n\n setDocumentContent(moveTopLevelBlock(currentDocument, selectedIndex, nextIndex).content);\n };\n\n const duplicateSelectedBlock = () => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n setDocumentContent(duplicateTopLevelBlock(currentDocument, selectedIndex).content);\n };\n\n const deleteSelectedBlock = () => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n setDocumentContent(deleteTopLevelBlock(currentDocument, selectedIndex).content);\n };\n\n const setLink = (url?: string | null) => {\n if (!editor) {\n return;\n }\n\n if (!url) {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n };\n\n const setParagraph = () => {\n editor?.chain().focus().setParagraph().run();\n };\n\n const toggleHeading = (level: 1 | 2 | 3 | 4 | 5 | 6) => {\n editor?.chain().focus().toggleHeading({ level }).run();\n };\n\n const toggleBold = () => {\n editor?.chain().focus().toggleBold().run();\n };\n\n const toggleItalic = () => {\n editor?.chain().focus().toggleItalic().run();\n };\n\n const toggleUnderline = () => {\n editor?.chain().focus().toggleUnderline().run();\n };\n\n const toggleStrike = () => {\n editor?.chain().focus().toggleStrike().run();\n };\n\n const toggleInlineCode = () => {\n editor?.chain().focus().toggleCode().run();\n };\n\n const toggleBulletList = () => {\n editor?.chain().focus().toggleBulletList().run();\n };\n\n const toggleOrderedList = () => {\n editor?.chain().focus().toggleOrderedList().run();\n };\n\n const toggleTaskList = () => {\n editor?.chain().focus().toggleTaskList().run();\n };\n\n const toggleBlockquote = () => {\n editor?.chain().focus().toggleBlockquote().run();\n };\n\n const toggleCodeBlock = () => {\n editor?.chain().focus().toggleCodeBlock().run();\n };\n\n const undo = () => {\n editor?.chain().focus().undo().run();\n };\n\n const redo = () => {\n editor?.chain().focus().redo().run();\n };\n\n const controller: InternalOpenEditorController = {\n document,\n editor,\n exports,\n editable,\n placeholder,\n selectedBlock,\n setSelectedBlock,\n getContent: () => document,\n setContent,\n setParagraph,\n toggleHeading,\n toggleBold,\n toggleItalic,\n toggleUnderline,\n toggleStrike,\n toggleInlineCode,\n toggleBulletList,\n toggleOrderedList,\n toggleTaskList,\n toggleBlockquote,\n toggleCodeBlock,\n undo,\n redo,\n insertBlock,\n setLink,\n getActiveLink: () => editor?.getAttributes(\"link\").href as string | undefined,\n moveSelectedBlock,\n duplicateSelectedBlock,\n deleteSelectedBlock,\n slashMenuItems,\n extensions,\n pageRuntime,\n attachmentRuntime,\n slashState,\n selectionBubbleState,\n };\n\n return controller;\n};\n\nexport const getDefaultSlashMenuItems = (controller: OpenEditorController): OpenEditorSlashMenuItem[] => {\n const internalController = controller as InternalOpenEditorController;\n\n return [\n ...openEditorInsertPresets.map((preset) => ({\n key: preset.key,\n label: preset.label,\n group: preset.group,\n keywords: [preset.key],\n run: ({ controller: current, range }: { controller: OpenEditorController; range: InsertRange }) =>\n current.insertBlock(preset.key, range),\n })),\n {\n key: \"moveBlockUp\",\n label: \"Move Block Up\",\n group: \"block\",\n run: ({ range }) => {\n internalController.editor?.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(-1);\n },\n },\n {\n key: \"moveBlockDown\",\n label: \"Move Block Down\",\n group: \"block\",\n run: ({ range }) => {\n internalController.editor?.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(1);\n },\n },\n ...controller.extensions\n .filter((extension) => extension.slashMenu !== false)\n .map((extension) => {\n const menu = extension.slashMenu || undefined;\n return {\n key: extension.block.name,\n label: menu?.label ?? extension.block.label,\n group: menu?.group ?? extension.block.group,\n keywords: menu?.keywords ?? [extension.block.name],\n run: ({ controller: current, range }: { controller: OpenEditorController; range: InsertRange }) =>\n current.insertBlock(extension.block.name, range),\n };\n }),\n ...controller.slashMenuItems,\n ];\n};\n\nconst renderTextWithMarks = (\n text: string,\n marks: readonly ProseMirrorMark[] = [],\n key: string,\n): ReactNode =>\n marks.reduceRight<ReactNode>((children, mark, index) => {\n const nodeKey = `${key}-${mark.type}-${index}`;\n switch (mark.type) {\n case \"bold\":\n return <strong key={nodeKey}>{children}</strong>;\n case \"italic\":\n return <em key={nodeKey}>{children}</em>;\n case \"underline\":\n return <u key={nodeKey}>{children}</u>;\n case \"strike\":\n return <s key={nodeKey}>{children}</s>;\n case \"code\":\n return <code key={nodeKey}>{children}</code>;\n case \"link\":\n return (\n <a key={nodeKey} href={typeof mark.attrs?.href === \"string\" ? mark.attrs.href : undefined}>\n {children}\n </a>\n );\n default:\n return children;\n }\n }, text);\n\nconst renderViewerNode = (\n node: ProseMirrorNode,\n key: string,\n renderers?: Partial<Record<string, OpenEditorViewerRenderer>>,\n registry: BlockRegistry = defaultBlockRegistry,\n): ReactNode => {\n if (node.type === \"text\") {\n return renderTextWithMarks(node.text ?? \"\", node.marks, key);\n }\n\n const children = node.content?.map((child, index) => renderViewerNode(child, `${key}-${index}`, renderers, registry)) ?? null;\n const blockKey = findBlockSpecForNode(registry, node)?.name ?? node.type;\n const customRenderer = renderers?.[blockKey];\n if (customRenderer) {\n return <Fragment key={key}>{customRenderer({ node, children })}</Fragment>;\n }\n\n switch (blockKey) {\n case \"paragraph\":\n return <p key={key}>{children}</p>;\n case \"heading\": {\n const level = typeof node.attrs?.level === \"number\" ? Math.min(Math.max(node.attrs.level, 1), 6) : 2;\n switch (level) {\n case 1:\n return <h1 key={key}>{children}</h1>;\n case 2:\n return <h2 key={key}>{children}</h2>;\n case 3:\n return <h3 key={key}>{children}</h3>;\n case 4:\n return <h4 key={key}>{children}</h4>;\n case 5:\n return <h5 key={key}>{children}</h5>;\n default:\n return <h6 key={key}>{children}</h6>;\n }\n }\n case \"bulletList\":\n return <ul key={key}>{children}</ul>;\n case \"orderedList\":\n return <ol key={key}>{children}</ol>;\n case \"taskList\":\n return <ul key={key} data-type=\"taskList\">{children}</ul>;\n case \"blockquote\":\n return <blockquote key={key}>{children}</blockquote>;\n case \"codeBlock\":\n return <pre key={key}><code>{node.content?.map((child) => child.text ?? \"\").join(\"\")}</code></pre>;\n case \"divider\":\n return <hr key={key} />;\n case \"image\":\n return <img key={key} src={typeof node.attrs?.src === \"string\" ? node.attrs.src : \"\"} alt={typeof node.attrs?.alt === \"string\" ? node.attrs.alt : \"\"} />;\n case \"columns\":\n return <section key={key}>{children}</section>;\n case \"table\":\n return <table key={key}><tbody>{children}</tbody></table>;\n case \"toggleList\":\n return <ul key={key} data-openeditor-toggle-list>{children}</ul>;\n case \"callout\":\n return <aside key={key} className=\"oe-callout\" data-tone={normalizeCalloutTone(node.attrs?.tone)}>{children}</aside>;\n case \"diagram\": {\n const code = typeof node.attrs?.code === \"string\" ? node.attrs.code : \"\";\n return <figure key={key} className=\"oe-diagram\"><MermaidPreview code={code} /></figure>;\n }\n case \"page\":\n return <OpenEditorPageViewer key={key} node={node} />;\n case \"attachment\":\n return <OpenEditorAttachmentViewer key={key} node={node} />;\n default:\n if (node.type === \"column\") {\n return <div key={key}>{children}</div>;\n }\n if (node.type === \"tableRow\") {\n return <tr key={key}>{children}</tr>;\n }\n if (node.type === \"tableHeader\") {\n return <th key={key}>{children}</th>;\n }\n if (node.type === \"tableCell\") {\n return <td key={key}>{children}</td>;\n }\n if (node.type === \"listItem\") {\n return <li key={key}>{children}</li>;\n }\n if (node.type === \"taskItem\") {\n const checked = Boolean(node.attrs?.checked);\n return (\n <li key={key} data-checked={checked ? \"true\" : \"false\"}>\n <span className=\"oe-task-item-checkbox\" aria-hidden=\"true\">\n <OpenEditorTaskCheckbox checked={checked} label=\"Task item checkbox\" readOnly tabIndex={-1} />\n </span>\n <div>{children}</div>\n </li>\n );\n }\n if (node.type === \"toggleListItem\") {\n return <ToggleListViewerItem initiallyOpen={node.attrs?.open !== false} key={key}>{children}</ToggleListViewerItem>;\n }\n if (node.type === \"hardBreak\") {\n return <br key={key} />;\n }\n return <div key={key}>{children}</div>;\n }\n};\n\nexport const OpenEditorContent = ({\n controller,\n className = \"oe-canvas\",\n}: OpenEditorContentProps) => {\n const internalController = controller as InternalOpenEditorController;\n return (\n <OpenEditorAttachmentRuntimeContext.Provider value={internalController.attachmentRuntime}>\n <OpenEditorPageRuntimeContext.Provider value={internalController.pageRuntime}>\n <EditorContent editor={internalController.editor} className={className} />\n </OpenEditorPageRuntimeContext.Provider>\n </OpenEditorAttachmentRuntimeContext.Provider>\n );\n};\n\nexport const OpenEditorViewer = ({\n document,\n className = \"oe-viewer\",\n renderers,\n extensions = EMPTY_EXTENSIONS,\n pageRuntime,\n attachmentRuntime,\n}: OpenEditorViewerProps) => {\n const registry = createReactBlockRegistry(extensions);\n const extensionRenderers = Object.fromEntries(\n extensions.map((extension) => [extension.block.name, extension.viewer]),\n );\n const mergedRenderers = { ...extensionRenderers, ...renderers };\n\n return (\n <OpenEditorAttachmentRuntimeContext.Provider value={attachmentRuntime}>\n <OpenEditorPageRuntimeContext.Provider value={pageRuntime}>\n <div className={className}>\n {normalizeDocument(document).content.map((node, index) =>\n renderViewerNode(node, `viewer-${index}`, mergedRenderers, registry),\n )}\n </div>\n </OpenEditorPageRuntimeContext.Provider>\n </OpenEditorAttachmentRuntimeContext.Provider>\n );\n};\n\nexport const useOpenEditor = useOpenEditorController;\nexport { seedDocument };\nexport { NodeViewContent, NodeViewWrapper };\nexport type { ReactNodeViewProps as OpenEditorNodeViewProps };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openeditor/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"repository": {
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@base-ui/react": "^1.6.0",
|
|
28
|
-
"@openeditor/core": "0.0.
|
|
29
|
-
"@openeditor/exporters": "0.0.
|
|
30
|
-
"@openeditor/extensions": "0.0.
|
|
28
|
+
"@openeditor/core": "0.0.13",
|
|
29
|
+
"@openeditor/exporters": "0.0.13",
|
|
30
|
+
"@openeditor/extensions": "0.0.13",
|
|
31
31
|
"@tiptap/core": "3.27.1",
|
|
32
32
|
"@tiptap/extension-horizontal-rule": "3.27.1",
|
|
33
33
|
"@tiptap/extension-image": "3.27.1",
|