@openeditor/react 0.0.17 → 0.0.18

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 CHANGED
@@ -10,11 +10,30 @@ Pass `attachmentRuntime` to `useOpenEditorController` for editable attachments a
10
10
  - `OpenEditorContent` for the editable Tiptap-backed content surface
11
11
  - `OpenEditorViewer` for read-only React rendering
12
12
  - `getDefaultSlashMenuItems` for UI packages that want the built-in insert actions
13
+ - position-based block targeting and transaction-backed copy, duplicate, move, and delete commands
13
14
  - `defineOpenEditorReactNode` for consumer-owned React blocks
14
15
  - `defineOpenEditorReactExtension` for advanced integrations that contribute multiple Tiptap extensions
15
16
 
16
17
  This package intentionally does not import CSS and does not render styled menus. Use `@openeditor/ui` for the optional styled components.
17
18
 
19
+ ## Block actions
20
+
21
+ `controller.blockTarget` identifies the top-level block under the pointer or the
22
+ active node selection. Mutating commands operate directly on ProseMirror
23
+ transactions, preserving history and avoiding whole-document replacement:
24
+
25
+ ```tsx
26
+ controller.selectBlock(target);
27
+ await controller.copyBlock(target);
28
+ controller.duplicateBlock(target);
29
+ controller.deleteBlock(target);
30
+ ```
31
+
32
+ Pass `blockActions` to contribute product-specific actions. The optional
33
+ `OpenEditorBlockMenu` from `@openeditor/ui` combines those contributions with
34
+ Copy, Duplicate, and Delete. Clipboard copies use a versioned OpenEditor block
35
+ envelope so blocks can move between independent editor instances and documents.
36
+
18
37
  The built-in web catalog includes editable Toggle Lists, rich-content Callouts,
19
38
  and Mermaid-powered Diagrams. Diagrams use `beautiful-mermaid` for synchronous,
20
39
  themeable SVG rendering and retain their canonical Mermaid source in the document.
package/dist/index.d.ts CHANGED
@@ -46,6 +46,25 @@ type OpenEditorReactProps = {
46
46
  slashMenuItems?: readonly OpenEditorSlashMenuItem[];
47
47
  /** Consumer-owned blocks. Extension names and node types must be unique. */
48
48
  extensions?: readonly OpenEditorReactExtension[];
49
+ blockActions?: readonly OpenEditorBlockAction[];
50
+ };
51
+ type OpenEditorBlockTarget = {
52
+ pos: number;
53
+ depth: number;
54
+ nodeType: string;
55
+ blockName?: string;
56
+ rect: OpenEditorOverlayRect;
57
+ };
58
+ type OpenEditorBlockActionContext = {
59
+ controller: OpenEditorController;
60
+ target: OpenEditorBlockTarget;
61
+ };
62
+ type OpenEditorBlockAction = {
63
+ id: string;
64
+ label: string;
65
+ group?: "edit" | "danger" | string;
66
+ disabled?: (context: OpenEditorBlockActionContext) => boolean;
67
+ run: (context: OpenEditorBlockActionContext) => void | Promise<void>;
49
68
  };
50
69
  type OpenEditorReactConfig = OpenEditorReactProps;
51
70
  type OpenEditorController = {
@@ -78,6 +97,14 @@ type OpenEditorController = {
78
97
  moveSelectedBlock: (direction: -1 | 1) => void;
79
98
  duplicateSelectedBlock: () => void;
80
99
  deleteSelectedBlock: () => void;
100
+ selectBlock: (target: OpenEditorBlockTarget) => void;
101
+ copyBlock: (target?: OpenEditorBlockTarget) => Promise<boolean>;
102
+ duplicateBlock: (target?: OpenEditorBlockTarget) => boolean;
103
+ deleteBlock: (target?: OpenEditorBlockTarget) => boolean;
104
+ moveBlock: (direction: -1 | 1, target?: OpenEditorBlockTarget) => boolean;
105
+ blockActions: readonly OpenEditorBlockAction[];
106
+ blockTarget: OpenEditorBlockTarget | null;
107
+ setBlockTargetAt: (pos: number | null) => void;
81
108
  slashMenuItems: readonly OpenEditorSlashMenuItem[];
82
109
  extensions: readonly OpenEditorReactExtension[];
83
110
  pageRuntime?: OpenEditorPageRuntime;
@@ -168,10 +195,10 @@ declare module "@tiptap/core" {
168
195
  }
169
196
  }
170
197
  declare const formatAttachmentSize: (size: number | null) => string;
171
- declare const useOpenEditorController: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, attachmentRuntime, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
198
+ declare const useOpenEditorController: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, attachmentRuntime, slashMenuItems, extensions, blockActions, }?: OpenEditorReactProps) => OpenEditorController;
172
199
  declare const getDefaultSlashMenuItems: (controller: OpenEditorController) => OpenEditorSlashMenuItem[];
173
200
  declare const OpenEditorContent: ({ controller, className, }: OpenEditorContentProps) => react.JSX.Element;
174
201
  declare const OpenEditorViewer: ({ document, className, renderers, extensions, pageRuntime, attachmentRuntime, }: OpenEditorViewerProps) => react.JSX.Element;
175
- declare const useOpenEditor: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, attachmentRuntime, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
202
+ declare const useOpenEditor: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, attachmentRuntime, slashMenuItems, extensions, blockActions, }?: OpenEditorReactProps) => OpenEditorController;
176
203
 
177
- 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, type OpenEditorTheme, OpenEditorThemeProvider, type OpenEditorThemeStyle, type OpenEditorThemeToken, OpenEditorViewer, type OpenEditorViewerProps, type OpenEditorViewerRenderer, type SelectionBubbleState, type SlashState, createOpenEditorThemeStyle, defineOpenEditorReactExtension, defineOpenEditorReactNode, formatAttachmentSize, getDefaultSlashMenuItems, openEditorThemeTokenNames, useOpenEditor, useOpenEditorController, useOpenEditorThemeStyle };
204
+ export { type InsertRange, type OpenEditorBlockAction, type OpenEditorBlockActionContext, type OpenEditorBlockTarget, OpenEditorContent, type OpenEditorContentProps, type OpenEditorController, type OpenEditorExtensionMenu, type OpenEditorOverlayRect, type OpenEditorPageRuntime, type OpenEditorPageSnapshot, type OpenEditorReactConfig, type OpenEditorReactExtension, type OpenEditorReactNodeExtension, type OpenEditorReactProps, type OpenEditorSlashMenuItem, type OpenEditorTheme, OpenEditorThemeProvider, type OpenEditorThemeStyle, type OpenEditorThemeToken, OpenEditorViewer, type OpenEditorViewerProps, type OpenEditorViewerRenderer, type SelectionBubbleState, type SlashState, createOpenEditorThemeStyle, defineOpenEditorReactExtension, defineOpenEditorReactNode, formatAttachmentSize, getDefaultSlashMenuItems, openEditorThemeTokenNames, useOpenEditor, useOpenEditorController, useOpenEditorThemeStyle };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { DEFAULT_CALLOUT_EMOJI, normalizeEmoji, DEFAULT_PAGE_EMOJI, normalizeDocument, fromProseMirrorDocument, toProseMirrorDocument, moveTopLevelBlock, duplicateTopLevelBlock, deleteTopLevelBlock, createBlockRegistry, findBlockSpecForNode } from '@openeditor/core';
1
+ import { DEFAULT_CALLOUT_EMOJI, normalizeEmoji, DEFAULT_PAGE_EMOJI, normalizeDocument, fromProseMirrorDocument, toProseMirrorDocument, createBlockRegistry, findBlockSpecForNode } from '@openeditor/core';
2
2
  import { Checkbox } from '@base-ui/react/checkbox';
3
3
  import { OpenEditorEmojiPicker } from '@openeditor/emoji';
4
4
  import { createContext, use, useState, useRef, useEffect, useContext, useMemo, Fragment } from 'react';
@@ -20,7 +20,7 @@ import TaskItem from '@tiptap/extension-task-item';
20
20
  import TaskList from '@tiptap/extension-task-list';
21
21
  import TextAlign from '@tiptap/extension-text-align';
22
22
  import Underline from '@tiptap/extension-underline';
23
- import { NodeSelection, Plugin } from '@tiptap/pm/state';
23
+ import { NodeSelection, Plugin, TextSelection } from '@tiptap/pm/state';
24
24
  import { ReplaceStep } from '@tiptap/pm/transform';
25
25
  import { ReactNodeViewRenderer, NodeViewWrapper, NodeViewContent, useEditor, EditorContent } from '@tiptap/react';
26
26
  export { NodeViewContent, NodeViewWrapper } from '@tiptap/react';
@@ -868,10 +868,7 @@ var getSlashState = (editor) => {
868
868
  };
869
869
  var getSelectionBubbleState = (editor) => {
870
870
  const { selection } = editor.state;
871
- if (selection instanceof NodeSelection && selection.node.type.name === "horizontalRule") {
872
- return null;
873
- }
874
- if (selection.empty) {
871
+ if (!(selection instanceof TextSelection) || selection.empty || editor.state.doc.textBetween(selection.from, selection.to).length === 0) {
875
872
  return null;
876
873
  }
877
874
  const domSelection = typeof window === "undefined" ? null : window.getSelection();
@@ -898,17 +895,47 @@ var getSelectionBubbleState = (editor) => {
898
895
  anchorRect
899
896
  };
900
897
  };
901
- var getSelectedTopLevelIndex = (editor) => {
902
- const { $from } = editor.state.selection;
903
- const selectedTopLevelPosition = $from.depth > 0 ? $from.before(1) : 0;
904
- let selectedIndex = 0;
905
- editor.state.doc.forEach((_, offset, index) => {
906
- if (offset <= selectedTopLevelPosition) {
907
- selectedIndex = index;
898
+ var toBlockTarget = (editor, pos, registry) => {
899
+ const node = editor.state.doc.nodeAt(pos);
900
+ if (!node || !node.isBlock) return null;
901
+ const dom = editor.view.nodeDOM(pos);
902
+ if (!(dom instanceof HTMLElement)) return null;
903
+ const rect = dom.getBoundingClientRect();
904
+ const portableNode = node.toJSON();
905
+ return {
906
+ pos,
907
+ depth: editor.state.doc.resolve(pos).depth,
908
+ nodeType: node.type.name,
909
+ blockName: findBlockSpecForNode(registry, portableNode)?.name,
910
+ rect: toOverlayRect(rect)
911
+ };
912
+ };
913
+ var selectedBlockTarget = (editor, registry) => {
914
+ const { selection } = editor.state;
915
+ const pos = selection instanceof NodeSelection ? selection.from : selection.$from.depth > 0 ? selection.$from.before(1) : 0;
916
+ return toBlockTarget(editor, pos, registry);
917
+ };
918
+ var regenerateClipboardNodeIds = (value) => {
919
+ if (Array.isArray(value)) return value.map(regenerateClipboardNodeIds);
920
+ if (!value || typeof value !== "object") return value;
921
+ const result = Object.fromEntries(
922
+ Object.entries(value).map(([key, nested]) => [key, regenerateClipboardNodeIds(nested)])
923
+ );
924
+ if (result.attrs && typeof result.attrs === "object") {
925
+ const attrs = { ...result.attrs };
926
+ delete attrs["data-openeditor-id"];
927
+ if (attrs.openeditor && typeof attrs.openeditor === "object") {
928
+ const meta = { ...attrs.openeditor };
929
+ delete meta.id;
930
+ attrs.openeditor = meta;
908
931
  }
909
- });
910
- return selectedIndex;
932
+ result.attrs = attrs;
933
+ }
934
+ return result;
911
935
  };
936
+ var OPENEDITOR_CLIPBOARD_TYPE = "application/x-openeditor-blocks+json";
937
+ var OPENEDITOR_WEB_CLIPBOARD_TYPE = `web ${OPENEDITOR_CLIPBOARD_TYPE}`;
938
+ var escapeClipboardHtml = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;");
912
939
  var useOpenEditorController = ({
913
940
  initialDocument = seedDocument,
914
941
  editable = true,
@@ -918,12 +945,15 @@ var useOpenEditorController = ({
918
945
  pageRuntime,
919
946
  attachmentRuntime,
920
947
  slashMenuItems = [],
921
- extensions = EMPTY_EXTENSIONS
948
+ extensions = EMPTY_EXTENSIONS,
949
+ blockActions = []
922
950
  } = {}) => {
923
951
  const [document, setDocument] = useState(normalizeDocument(initialDocument));
924
952
  const [selectedBlock, setSelectedBlock] = useState("paragraph");
925
953
  const [slashState, setSlashState] = useState(null);
926
954
  const [selectionBubbleState, setSelectionBubbleState] = useState(null);
955
+ const [blockTarget, setBlockTarget] = useState(null);
956
+ const isPointerSelectingRef = useRef(false);
927
957
  const slashStateRef = useRef(null);
928
958
  const selectionBubbleStateRef = useRef(null);
929
959
  const registry = useMemo(() => createReactBlockRegistry(extensions), [extensions]);
@@ -939,7 +969,30 @@ var useOpenEditorController = ({
939
969
  "aria-label": "OpenEditor document"
940
970
  },
941
971
  transformPastedHTML: sanitizePastedHtml,
942
- handlePaste: (_view, event) => {
972
+ handlePaste: (view, event) => {
973
+ const clipboard = event.clipboardData;
974
+ const html = clipboard?.getData("text/html");
975
+ const embeddedPayload = html ? new DOMParser().parseFromString(html, "text/html").querySelector("[data-openeditor-clipboard]")?.getAttribute("data-openeditor-clipboard") : null;
976
+ const encoded = clipboard?.getData(OPENEDITOR_WEB_CLIPBOARD_TYPE) || clipboard?.getData(OPENEDITOR_CLIPBOARD_TYPE) || (embeddedPayload ? decodeURIComponent(embeddedPayload) : "");
977
+ if (encoded?.startsWith('{"format":"openeditor-blocks"')) {
978
+ try {
979
+ const payload = JSON.parse(encoded);
980
+ if (payload.format === "openeditor-blocks" && payload.version === 1 && Array.isArray(payload.blocks)) {
981
+ const nodes = payload.blocks.map(
982
+ (node) => view.state.schema.nodeFromJSON(regenerateClipboardNodeIds(node))
983
+ );
984
+ const firstNode = nodes[0];
985
+ if (firstNode) {
986
+ event.preventDefault();
987
+ view.dispatch(
988
+ view.state.tr.replaceSelectionWith(firstNode, false).scrollIntoView()
989
+ );
990
+ return true;
991
+ }
992
+ }
993
+ } catch {
994
+ }
995
+ }
943
996
  const file = event.clipboardData?.files?.[0];
944
997
  if (!file || !onFilePasteDrop?.(file)) {
945
998
  return false;
@@ -954,6 +1007,15 @@ var useOpenEditorController = ({
954
1007
  }
955
1008
  event.preventDefault();
956
1009
  return true;
1010
+ },
1011
+ handleDOMEvents: {
1012
+ pointerdown: (_view, event) => {
1013
+ if (event.button === 0) {
1014
+ isPointerSelectingRef.current = true;
1015
+ setSelectionBubbleState(null);
1016
+ }
1017
+ return false;
1018
+ }
957
1019
  }
958
1020
  },
959
1021
  onUpdate: ({ editor: currentEditor }) => {
@@ -966,11 +1028,18 @@ var useOpenEditorController = ({
966
1028
  setDocument(nextDocument);
967
1029
  onChange?.(nextDocument);
968
1030
  setSlashState(getSlashState(currentEditor));
969
- setSelectionBubbleState(getSelectionBubbleState(currentEditor));
1031
+ setSelectionBubbleState(
1032
+ isPointerSelectingRef.current ? null : getSelectionBubbleState(currentEditor)
1033
+ );
970
1034
  },
971
1035
  onSelectionUpdate: ({ editor: currentEditor }) => {
972
1036
  setSlashState(getSlashState(currentEditor));
973
- setSelectionBubbleState(getSelectionBubbleState(currentEditor));
1037
+ setSelectionBubbleState(
1038
+ isPointerSelectingRef.current ? null : getSelectionBubbleState(currentEditor)
1039
+ );
1040
+ if (currentEditor.state.selection instanceof NodeSelection) {
1041
+ setBlockTarget(selectedBlockTarget(currentEditor, registry));
1042
+ }
974
1043
  }
975
1044
  }, [extensions]);
976
1045
  const exports = useMemo(
@@ -983,6 +1052,20 @@ var useOpenEditorController = ({
983
1052
  useEffect(() => {
984
1053
  selectionBubbleStateRef.current = selectionBubbleState;
985
1054
  }, [selectionBubbleState]);
1055
+ useEffect(() => {
1056
+ if (!editor || typeof window === "undefined") return;
1057
+ const finishPointerSelection = () => {
1058
+ if (!isPointerSelectingRef.current) return;
1059
+ isPointerSelectingRef.current = false;
1060
+ setSelectionBubbleState(getSelectionBubbleState(editor));
1061
+ };
1062
+ window.addEventListener("pointerup", finishPointerSelection, true);
1063
+ window.addEventListener("pointercancel", finishPointerSelection, true);
1064
+ return () => {
1065
+ window.removeEventListener("pointerup", finishPointerSelection, true);
1066
+ window.removeEventListener("pointercancel", finishPointerSelection, true);
1067
+ };
1068
+ }, [editor]);
986
1069
  useEffect(() => {
987
1070
  if (!editor || typeof window === "undefined") {
988
1071
  return;
@@ -1020,49 +1103,136 @@ var useOpenEditorController = ({
1020
1103
  const commandChain = editor.chain().focus();
1021
1104
  return range ? commandChain.deleteRange(range) : commandChain;
1022
1105
  };
1106
+ if (blockName === "page" && pageRuntime?.createPage) {
1107
+ const prepared = chain().run();
1108
+ if (!prepared) return false;
1109
+ setSlashState(null);
1110
+ void pageRuntime.createPage({
1111
+ title: "Untitled",
1112
+ icon: DEFAULT_PAGE_EMOJI
1113
+ }).then((created) => {
1114
+ editor.chain().focus().insertContent({
1115
+ ...block,
1116
+ attrs: {
1117
+ ...block.attrs,
1118
+ pageId: created.pageId,
1119
+ icon: created.icon ?? DEFAULT_PAGE_EMOJI,
1120
+ href: created.href ?? null
1121
+ },
1122
+ content: [{ type: "text", text: created.title || "Untitled" }]
1123
+ }).run();
1124
+ }).catch(() => {
1125
+ editor.chain().focus().insertContent(block).run();
1126
+ });
1127
+ return true;
1128
+ }
1023
1129
  const inserted = chain().insertContent(block).run();
1024
1130
  if (inserted) setSlashState(null);
1025
1131
  return inserted;
1026
1132
  };
1027
- const setDocumentContent = (content) => {
1028
- if (!editor) {
1029
- return;
1030
- }
1031
- editor.commands.setContent(toProseMirrorDocument(normalizeDocument({ ...document, content })));
1032
- };
1033
1133
  const setContent = (nextDocument) => {
1034
1134
  if (!editor) {
1035
1135
  return;
1036
1136
  }
1037
1137
  editor.commands.setContent(toProseMirrorDocument(normalizeDocument(nextDocument)));
1038
1138
  };
1039
- const moveSelectedBlock = (direction) => {
1040
- if (!editor) {
1139
+ const resolveTarget = (target) => target ?? (editor ? selectedBlockTarget(editor, registry) : null);
1140
+ const setBlockTargetAt = (pos) => {
1141
+ if (!editor || pos === null || pos < 0) {
1142
+ if (!(editor?.state.selection instanceof NodeSelection)) setBlockTarget(null);
1041
1143
  return;
1042
1144
  }
1043
- const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));
1044
- const selectedIndex = getSelectedTopLevelIndex(editor);
1045
- const nextIndex = selectedIndex + direction;
1046
- if (nextIndex < 0 || nextIndex >= currentDocument.content.length) {
1047
- return;
1145
+ setBlockTarget(toBlockTarget(editor, pos, registry));
1146
+ };
1147
+ const selectBlock = (target) => {
1148
+ if (!editor) return;
1149
+ editor.view.dispatch(editor.state.tr.setSelection(NodeSelection.create(editor.state.doc, target.pos)));
1150
+ setBlockTarget(toBlockTarget(editor, target.pos, registry));
1151
+ };
1152
+ const deleteBlock = (target) => {
1153
+ if (!editor) return false;
1154
+ const resolved = resolveTarget(target);
1155
+ if (!resolved) return false;
1156
+ const node = editor.state.doc.nodeAt(resolved.pos);
1157
+ if (!node) return false;
1158
+ const tr = editor.state.tr.delete(resolved.pos, resolved.pos + node.nodeSize);
1159
+ if (tr.doc.childCount === 0) {
1160
+ const paragraph = editor.schema.nodes.paragraph?.create();
1161
+ if (paragraph) tr.insert(0, paragraph);
1048
1162
  }
1049
- setDocumentContent(moveTopLevelBlock(currentDocument, selectedIndex, nextIndex).content);
1163
+ const selectionPos = Math.min(resolved.pos, Math.max(0, tr.doc.content.size - 1));
1164
+ tr.setSelection(TextSelection.near(tr.doc.resolve(selectionPos)));
1165
+ editor.view.dispatch(tr.scrollIntoView());
1166
+ setBlockTarget(null);
1167
+ return true;
1050
1168
  };
1051
- const duplicateSelectedBlock = () => {
1052
- if (!editor) {
1053
- return;
1169
+ const duplicateBlock = (target) => {
1170
+ if (!editor) return false;
1171
+ const resolved = resolveTarget(target);
1172
+ if (!resolved) return false;
1173
+ const node = editor.state.doc.nodeAt(resolved.pos);
1174
+ if (!node) return false;
1175
+ const copy = editor.schema.nodeFromJSON(regenerateClipboardNodeIds(node.toJSON()));
1176
+ const pos = resolved.pos + node.nodeSize;
1177
+ const tr = editor.state.tr.insert(pos, copy);
1178
+ tr.setSelection(NodeSelection.create(tr.doc, pos));
1179
+ editor.view.dispatch(tr.scrollIntoView());
1180
+ return true;
1181
+ };
1182
+ const moveBlock = (direction, target) => {
1183
+ if (!editor) return false;
1184
+ const resolved = resolveTarget(target);
1185
+ if (!resolved) return false;
1186
+ const node = editor.state.doc.nodeAt(resolved.pos);
1187
+ if (!node) return false;
1188
+ const $pos = editor.state.doc.resolve(resolved.pos);
1189
+ const index = $pos.index(0);
1190
+ const destinationIndex = index + direction;
1191
+ if (destinationIndex < 0 || destinationIndex >= editor.state.doc.childCount) return false;
1192
+ const destinationPos = direction < 0 ? resolved.pos - editor.state.doc.child(destinationIndex).nodeSize : resolved.pos + node.nodeSize + editor.state.doc.child(destinationIndex).nodeSize;
1193
+ let tr = editor.state.tr.delete(resolved.pos, resolved.pos + node.nodeSize);
1194
+ const insertPos = direction < 0 ? destinationPos : destinationPos - node.nodeSize;
1195
+ tr = tr.insert(insertPos, node).setSelection(NodeSelection.create(tr.doc, insertPos));
1196
+ editor.view.dispatch(tr.scrollIntoView());
1197
+ return true;
1198
+ };
1199
+ const copyBlock = async (target) => {
1200
+ if (!editor || typeof navigator === "undefined") return false;
1201
+ const resolved = resolveTarget(target);
1202
+ const node = resolved ? editor.state.doc.nodeAt(resolved.pos) : null;
1203
+ if (!resolved || !node) return false;
1204
+ const $pos = editor.state.doc.resolve(resolved.pos);
1205
+ const clipboardNode = ["listItem", "taskItem"].includes(node.type.name) && ["bulletList", "orderedList", "taskList"].includes($pos.parent.type.name) ? $pos.parent.type.create($pos.parent.attrs, node) : node;
1206
+ const payload = JSON.stringify({ format: "openeditor-blocks", version: 1, blocks: [clipboardNode.toJSON()] });
1207
+ const plainText = node.textContent || `[${resolved.blockName ?? resolved.nodeType}]`;
1208
+ const html = `<div data-openeditor-clipboard="${encodeURIComponent(payload)}">${escapeClipboardHtml(plainText)}</div>`;
1209
+ try {
1210
+ if (typeof ClipboardItem !== "undefined" && navigator.clipboard?.write) {
1211
+ await navigator.clipboard.write([new ClipboardItem({
1212
+ "text/html": new Blob([html], { type: "text/html" }),
1213
+ "text/plain": new Blob([plainText], { type: "text/plain" })
1214
+ })]);
1215
+ } else {
1216
+ await navigator.clipboard.writeText(plainText);
1217
+ }
1218
+ return true;
1219
+ } catch {
1220
+ try {
1221
+ await navigator.clipboard.writeText(plainText);
1222
+ return true;
1223
+ } catch {
1224
+ return false;
1225
+ }
1054
1226
  }
1055
- const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));
1056
- const selectedIndex = getSelectedTopLevelIndex(editor);
1057
- setDocumentContent(duplicateTopLevelBlock(currentDocument, selectedIndex).content);
1227
+ };
1228
+ const moveSelectedBlock = (direction) => {
1229
+ moveBlock(direction);
1230
+ };
1231
+ const duplicateSelectedBlock = () => {
1232
+ duplicateBlock();
1058
1233
  };
1059
1234
  const deleteSelectedBlock = () => {
1060
- if (!editor) {
1061
- return;
1062
- }
1063
- const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));
1064
- const selectedIndex = getSelectedTopLevelIndex(editor);
1065
- setDocumentContent(deleteTopLevelBlock(currentDocument, selectedIndex).content);
1235
+ deleteBlock();
1066
1236
  };
1067
1237
  const setLink = (url) => {
1068
1238
  if (!editor) {
@@ -1146,6 +1316,14 @@ var useOpenEditorController = ({
1146
1316
  moveSelectedBlock,
1147
1317
  duplicateSelectedBlock,
1148
1318
  deleteSelectedBlock,
1319
+ selectBlock,
1320
+ copyBlock,
1321
+ duplicateBlock,
1322
+ deleteBlock,
1323
+ moveBlock,
1324
+ blockActions,
1325
+ blockTarget,
1326
+ setBlockTargetAt,
1149
1327
  slashMenuItems,
1150
1328
  extensions,
1151
1329
  pageRuntime,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme.tsx","../src/index.tsx"],"names":["createContext","jsx","snapshot","Fragment","page","useMemo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,IAAM,yBAAA,GAA4B;AAAA,EACvC,SAAA;AAAA,EAAW,eAAA;AAAA,EAAiB,cAAA;AAAA,EAAgB,cAAA;AAAA,EAAgB,MAAA;AAAA,EAC5D,UAAA;AAAA,EAAY,SAAA;AAAA,EAAW,OAAA;AAAA,EAAS,aAAA;AAAA,EAAe,QAAA;AAAA,EAAU,cAAA;AAAA,EACzD,gBAAA;AAAA,EAAkB,QAAA;AAAA,EAAU,YAAA;AAAA,EAAc,cAAA;AAAA,EAAgB,kBAAA;AAAA,EAC1D,YAAA;AAAA,EAAc,gBAAA;AAAA,EAAkB,UAAA;AAAA,EAAY,MAAA;AAAA,EAAQ,WAAA;AAAA,EAAa,QAAA;AAAA,EACjE,UAAA;AAAA,EAAY,UAAA;AAAA,EAAY,aAAA;AAAA,EAAe,cAAA;AAAA,EAAgB,aAAA;AAAA,EACvD,YAAA;AAAA,EAAc;AAChB;AAMA,IAAM,OAAA,GAAU,CAAC,KAAA,KACf,CAAA,KAAA,EAAQ,MAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,SAAA,KAAc,CAAA,CAAA,EAAI,SAAA,CAAU,WAAA,EAAa,EAAE,CAAC,CAAA,CAAA;AAExE,IAAM,0BAAA,GAA6B,CAAC,KAAA,KACzC,MAAA,CAAO,WAAA;AAAA,EACL,yBAAA,CAA0B,OAAA;AAAA,IAAQ,CAAC,KAAA,KACjC,KAAA,CAAM,KAAK,CAAA,KAAM,SAAY,EAAC,GAAI,CAAC,CAAC,QAAQ,KAAK,CAAA,EAAG,KAAA,CAAM,KAAK,CAAC,CAAC;AAAA;AAErE;AAEF,IAAM,YAAA,GAAe,cAAgD,MAAS,CAAA;AACvE,IAAM,uBAAA,GAA0B,MAAM,UAAA,CAAW,YAAY;AAE7D,SAAS,uBAAA,CAAwB,EAAE,QAAA,EAAU,SAAA,EAAW,OAAM,EAIlE;AACD,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAM,0BAAA,CAA2B,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACtE,EAAA,uBACE,GAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,KAAA,EAC5B,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,uBAAA,EAAsB,EAAA,EAAG,KAAA,EAAe,UAAS,CAAA,EAC9E,CAAA;AAEJ;ACqCA,IAAM,4BAAA,GAA+BA,cAAiD,MAAS,CAAA;AAC/F,IAAM,kCAAA,GAAqCA,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,qBAOEC,GAAAA;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,QAAA,kBAAAA,IAAC,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,oBAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,eAAA,EAAiB,OACvD,QAAA,kBAAAA,GAAAA;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,oBACAA,GAAAA,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,oBAAAA,GAAAA;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,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,WAAU,wBAAA,EAAyB;AAAA;AAAA,KAC9D;AAAA,oBACAA,GAAAA,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,4BAA4B,CAAC,EAAE,MAAA,EAAQ,IAAA,EAAM,kBAAiB,KAA0B;AAC5F,EAAA,MAAM,aAAa,uBAAA,EAAwB;AAC3C,EAAA,uBACE,IAAA,CAAC,eAAA,EAAA,EAAgB,EAAA,EAAG,OAAA,EAAQ,WAAU,YAAA,EACpC,QAAA,EAAA;AAAA,oBAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAmB,eAAA,EAAiB,OAClD,QAAA,kBAAAA,GAAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,0BAAA;AAAA,QACV,QAAA,EAAU,CAAC,MAAA,CAAO,UAAA;AAAA,QAClB,KAAA,EAAO,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,OAAO,qBAAqB,CAAA;AAAA,QAC7D,KAAA,EAAM,sBAAA;AAAA,QACN,eAAe,CAAC,KAAA,KAAU,gBAAA,CAAiB,EAAE,OAAO,CAAA;AAAA,QACpD,UAAA,EAAY;AAAA;AAAA,KACd,EACF,CAAA;AAAA,oBACAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,EAAA,EAAG,KAAA,EAAM,WAAU,oBAAA,EAAqB;AAAA,GAAA,EAC3D,CAAA;AAEJ,CAAA;AAEA,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;AAAA,IACpB,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,qBAAA;AAAA,MACT,WAAW,CAAC,OAAA,KAAY,OAAA,CAAQ,YAAA,CAAa,YAAY,CAAA,IAAK,qBAAA;AAAA,MAC9D,UAAA,EAAY,CAAC,UAAA,MAAgB,EAAE,cAAc,cAAA,CAAe,UAAA,CAAW,KAAA,EAAO,qBAAqB,CAAA,EAAE;AAAA;AACvG,GACF,CAAA;AAAA,EACA,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,uBACxBA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,sBAAqB,QAAA,kBAAAA,GAAAA,CAAC,UAAM,QAAA,EAAA,mBAAA,CAAoB,QAAQ,EAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAE,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,oBAAAA,GAAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAU,OAAA,EAAS,CAAA;AAAA,oBACnC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAM,YAAA,EAAW,WAAA,EAAY,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAU,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,sBACHA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EAAsB,QAAA,EAAA,CAAC,qBAAqB,OAAA,CAAQ,IAAI,GAAG,mBAAA,CAAoB,OAAO,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA,EAAE,CAAA;AAAA,MACnI,KAAA,KAAU,WAAA,mBAAcA,GAAAA,CAAC,SAAI,SAAA,EAAU,wBAAA,EAAyB,IAAA,EAAK,aAAA,EAAc,cAAY,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAI,eAAA,EAAe,GAAG,eAAA,EAAe,GAAA,EAAK,eAAA,EAAe,IAAA,CAAK,MAAM,QAAA,GAAW,GAAG,CAAA,EAAG,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,GAAG,QAAA,GAAW,GAAG,CAAA,CAAA,CAAA,EAAI,EAAG,GAAE,CAAA,GAAS,IAAA;AAAA,MAC9P,KAAA,mBAAQA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EAAsB,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM,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,mBAAcA,GAAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAK,QAAA,EAAS,QAAA,EAAA,QAAA,EAAM,CAAA,GAAY,IAAA;AAAA,MAC1G,UAAU,OAAA,IAAW,KAAA,mBAAQA,GAAAA,CAAC,QAAA,EAAA,EAAO,SAAS,MAAM,KAAK,OAAO,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,UAAU,WAAA,mBAAcA,GAAAA,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,mBAAcA,GAAAA,CAAC,QAAA,EAAA,EAAO,SAAS,MAAM,KAAK,eAAA,CAAgB,OAAA,CAAQ,OAAA,CAAQ,YAAY,CAAC,CAAA,EAAG,IAAA,EAAK,QAAA,EAAS,QAAA,EAAA,SAAA,EAAO,CAAA,GAAY,IAAA;AAAA,MACnN,MAAA,CAAO,UAAA,mBAAaA,GAAAA,CAAC,YAAO,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,CAACC,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,oBAAAF,GAAAA,CAAC,kBAAe,QAAA,EAAoB,CAAA;AAAA,oBAAE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA;AAAA,sBAAAA,IAAC,QAAA,EAAA,EAAO,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,QAAA,CAAS,QAAQ,wBAAA,EAAyB,CAAA;AAAA,sBAASA,GAAAA,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,oBAAA,CAAqB,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,KAAA,CAAM,UAAU,OAAA,IAAW,OAAA,EAAS,gBAAgB,uBAAOA,IAAC,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,SAAS,GAAA,EAAK,uBAAOA,GAAAA,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,uBAAOA,IAAC,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,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,MAAM,kBAAkB,CAAA;AAAA,IACzD,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,aAAa,uBAAA,EAAwB;AAC3C,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,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,MAAM,kBAAkB,CAAA;AAE/D,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,QAAA,EAAU,KAAK,OAAA,EAAS,QAAA,GAAW,QAAQ,CAAA;AAAA,EACjD,CAAA;AAEA,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,MAAM,UAAA,GAAa,OAAO,QAAA,KAAqB;AAC7C,IAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA;AACnC,IAAA,IAAI,CAAC,QAAA,EAAU,MAAA,IAAU,CAAC,SAAS,cAAA,EAAgB;AACnD,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,CAAQ,cAAA,CAAe,QAAA,CAAS,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACxD,SAAS,KAAA,EAAO;AACd,MAAA,QAAA,CAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,iCAAiC,CAAA;AAAA,IACrF;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,QAAA,GAAW,CAAA,KAAA,EAAQ,QAAA,CAAS,KAAK,CAAA,CAAA,GAAK,MAAA;AAAA,MAClD,SAAA,EAAU,SAAA;AAAA,MACV,cAAA,EAAc,UAAU,MAAA,IAAU,EAAA;AAAA,MAClC,OAAA,EAAS,CAAC,KAAA,KAAmC;AAC3C,QAAA,IAAK,KAAA,CAAM,MAAA,CAAmB,OAAA,CAAQ,mBAAmB,CAAA,EAAG;AAC5D,QAAA,QAAA,EAAS;AAAA,MACX,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,KAAA,KAAsC;AAChD,QAAA,IAAI,aAAa,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,CAAA,EAAM;AAC5D,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,QAAA,EAAS;AAAA,QACX;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAM,WAAW,QAAA,GAAW,MAAA;AAAA,MAC5B,QAAA,EAAU,WAAW,CAAA,GAAI,MAAA;AAAA,MAEzB,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,eAAA,EAAiB,KAAA,EACrB,QAAA,kBAAAA,GAAAA;AAAA,UAAC,qBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,sBAAA;AAAA,YACV,QAAA,EAAU,CAAC,MAAA,CAAO,UAAA;AAAA,YAClB,KAAA,EAAO,IAAA;AAAA,YACP,KAAA,EAAM,mBAAA;AAAA,YACN,UAAA,EAAY,UAAA;AAAA,YACZ,aAAA,EAAe,CAAC,QAAA,KAAa,KAAK,WAAW,QAAQ;AAAA;AAAA,SACvD,EACF,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,KAAA;AAAA,YACH,SAAA,EAAU,eAAA;AAAA,YACV,eAAA,EAAiB;AAAA;AAAA,SACnB;AAAA,QACC,CAAC,QAAA,IAAY,OAAA,EAAS,UAAA,IAAc,MAAA,CAAO,6BAC1CA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,gBAAA;AAAA,YACV,eAAA,EAAiB,KAAA;AAAA,YACjB,QAAA,EAAU,QAAA;AAAA,YACV,OAAA,EAAS,MAAM,KAAK,UAAA,EAAW;AAAA,YAC/B,IAAA,EAAK,QAAA;AAAA,YAEJ,qBAAW,gBAAA,GAAc;AAAA;AAAA,SAC5B,GACE,IAAA;AAAA,QACH,KAAA,mBAAQA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAgB,eAAA,EAAiB,KAAA,EAAO,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,KAAA,EAAM,CAAA,GAAU;AAAA;AAAA;AAAA,GACjG;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,kBAAA,EAAmB;AAAA,IACpC,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,CAACG,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,oBAAAF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,aAAA,EAAY,QAAQ,QAAA,EAAA,cAAA,CAAe,IAAA,EAAM,IAAA,EAAM,kBAAkB,CAAA,EAAE,CAAA;AAAA,oBAAOA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAiB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAAOA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EAAgB,aAAA,EAAY,QAAO,QAAA,EAAA,QAAA,EAAC;AAAA,GAAA,EAAO,CAAA;AACpO,EAAA,IAAI,IAAA,IAAQ,SAAS,QAAA,EAAU;AAC7B,IAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,0BAAyB,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,uBAAOA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAyB,IAAA,EAAM,IAAA,CAAK,MAAO,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,EACzE;AACA,EAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAA0B,QAAA,EAAA,OAAA,EAAQ,CAAA;AAC1D,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,EAAE,IAAA,EAAK,KAAwB;AACrD,EAAA,MAAM,QAAA,GAAWI,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,wBACdJ,GAAAA,CAAC,SAAI,SAAA,EAAU,kBAAA,EAAmB,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM,oBAE/DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,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,oBAAAA,GAAAA;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,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,0BAAyB,QAAA,EAAA,QAAA,EAAC;AAAA;AAAA,KAC/D;AAAA,oBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAA0B,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,oBAAAA,GAAAA,CAAC,kBAAe,IAAA,EAAY,CAAA;AAAA,IAC3B,MAAA,CAAO,6BACNA,GAAAA;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,MAAM,SAAA,CAAU;AAAA,IACd,SAAA,EAAW,IAAA;AAAA,IACX,cAAA,EAAgB,EAAE,uBAAA,EAAyB,EAAA;AAAG,GAC/C,CAAA;AAAA,EACD,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,GAAWI,QAAQ,MAAM,wBAAA,CAAyB,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AACjF,EAAA,MAAM,SAAA,GAAYA,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,GAAUA,OAAAA;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,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,4BAAA,CAA6B,SAAA,EAAW,QAAQ,CAAA;AAC9D,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AAEnB,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,MAAM,WAAW,KAAA,EAAM,CAAE,aAAA,CAAc,KAAK,EAAE,GAAA,EAAI;AAClD,IAAA,IAAI,QAAA,gBAAwB,IAAI,CAAA;AAChC,IAAA,OAAO,QAAA;AAAA,EACT,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,OAAA,EAAS,CAAC,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAM,KACrC,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,OAAA,EAAS,CAAC,EAAE,KAAA,EAAM,KAAM;AACtB,QAAA,IAAI,CAAC,kBAAA,CAAmB,MAAA,EAAQ,OAAO,KAAA;AACvC,QAAA,kBAAA,CAAmB,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,WAAA,CAAY,KAAK,EAAE,GAAA,EAAI;AACjE,QAAA,UAAA,CAAW,kBAAkB,EAAE,CAAA;AAC/B,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,KACF;AAAA,IACA;AAAA,MACE,GAAA,EAAK,eAAA;AAAA,MACL,KAAA,EAAO,iBAAA;AAAA,MACP,KAAA,EAAO,OAAA;AAAA,MACP,OAAA,EAAS,CAAC,EAAE,KAAA,EAAM,KAAM;AACtB,QAAA,IAAI,CAAC,kBAAA,CAAmB,MAAA,EAAQ,OAAO,KAAA;AACvC,QAAA,kBAAA,CAAmB,MAAA,CAAO,OAAM,CAAE,KAAA,GAAQ,WAAA,CAAY,KAAK,EAAE,GAAA,EAAI;AACjE,QAAA,UAAA,CAAW,kBAAkB,CAAC,CAAA;AAC9B,QAAA,OAAO,IAAA;AAAA,MACT;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,OAAA,EAAS,CAAC,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAM,KACrC,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,uBAAOJ,GAAAA,CAAC,QAAA,EAAA,EAAsB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACzC,KAAK,QAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAkB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACrC,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAiB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAiB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACpC,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,MAAA,EAAA,EAAoB,QAAA,EAAA,EAAV,OAAmB,CAAA;AAAA,IACvC,KAAK,MAAA;AACH,MAAA,uBACEA,GAAAA,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,uBAAOA,IAAC,QAAA,EAAA,EAAoB,QAAA,EAAA,cAAA,CAAe,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA,EAAA,EAAvC,GAAyC,CAAA;AAAA,EACjE;AAEA,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,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,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC,KAAK,CAAA;AACH,UAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC,KAAK,CAAA;AACH,UAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC,KAAK,CAAA;AACH,UAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC,KAAK,CAAA;AACH,UAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,QACjC;AACE,UAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA;AACnC,IACF;AAAA,IACA,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IACjC,KAAK,aAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IACjC,KAAK,UAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAa,WAAA,EAAU,UAAA,EAAY,YAA3B,GAAoC,CAAA;AAAA,IACtD,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAsB,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IACzC,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAc,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAM,eAAK,OAAA,EAAS,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAE,KAAK,EAAE,CAAA,EAAE,KAApE,GAA2E,CAAA;AAAA,IAC9F,KAAK,SAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAA,EAAQ,GAAK,CAAA;AAAA,IACvB,KAAK,OAAA;AACH,MAAA,uBAAOA,IAAC,KAAA,EAAA,EAAc,GAAA,EAAK,OAAO,IAAA,CAAK,KAAA,EAAO,GAAA,KAAQ,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,MAAM,EAAA,EAAI,GAAA,EAAK,OAAO,IAAA,CAAK,KAAA,EAAO,GAAA,KAAQ,WAAW,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,EAAA,EAAA,EAAjI,GAAqI,CAAA;AAAA,IACxJ,KAAK,SAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAmB,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,IACtC,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,OAAA,EAAA,EAAM,uBAAA,EAAsB,EAAA,EAAa,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAO,QAAA,EAAS,CAAA,EAAA,EAAtB,GAA8B,CAAA;AAAA,IAC5E,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAa,6BAAA,EAA2B,IAAA,EAAE,YAAlC,GAA2C,CAAA;AAAA,IAC7D,KAAK,SAAA;AACH,MAAA,uBAAO,IAAA,CAAC,OAAA,EAAA,EAAgB,SAAA,EAAU,YAAA,EAAa,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,qBAAqB,CAAA,EAAE,CAAA;AAAA,wBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAsB,QAAA,EAAS;AAAA,OAAA,EAAA,EAAjM,GAAuM,CAAA;AAAA,IAC5N,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,KAAA,EAAO,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO,EAAA;AACtE,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAiB,SAAA,EAAU,YAAA,EAAa,0BAAAA,GAAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAY,CAAA,EAAA,EAAxD,GAA0D,CAAA;AAAA,IAChF;AAAA,IACA,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,oBAAA,EAAA,EAA+B,IAAA,EAAA,EAAL,GAAiB,CAAA;AAAA,IACrD,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,0BAAA,EAAA,EAAqC,IAAA,EAAA,EAAL,GAAiB,CAAA;AAAA,IAC3D;AACE,MAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AAC1B,QAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAe,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MAClC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,aAAA,EAAe;AAC/B,QAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,QAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAc,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,uBAAOA,GAAAA,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,0BAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,aAAA,EAAY,QAClD,QAAA,kBAAAA,GAAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAkB,OAAM,oBAAA,EAAqB,QAAA,EAAQ,IAAA,EAAC,QAAA,EAAU,IAAI,CAAA,EAC9F,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAS;AAAA,SAAA,EAAA,EAJR,GAKT,CAAA;AAAA,MAEJ;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,EAAkB;AAClC,QAAA,uBAAOA,IAAC,oBAAA,EAAA,EAAqB,aAAA,EAAe,KAAK,KAAA,EAAO,IAAA,KAAS,KAAA,EAAkB,QAAA,EAAA,EAAN,GAAe,CAAA;AAAA,MAC9F;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,QAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAA,EAAQ,GAAK,CAAA;AAAA,MACvB;AACA,MAAA,uBAAOA,GAAAA,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,uBACEA,GAAAA,CAAC,kCAAA,CAAmC,QAAA,EAAnC,EAA4C,OAAO,kBAAA,CAAmB,iBAAA,EACrE,QAAA,kBAAAA,GAAAA,CAAC,4BAAA,CAA6B,QAAA,EAA7B,EAAsC,KAAA,EAAO,kBAAA,CAAmB,WAAA,EAC/D,QAAA,kBAAAA,GAAAA,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,uBACEA,IAAC,kCAAA,CAAmC,QAAA,EAAnC,EAA4C,KAAA,EAAO,iBAAA,EAClD,0BAAAA,GAAAA,CAAC,4BAAA,CAA6B,UAA7B,EAAsC,KAAA,EAAO,aAC5C,QAAA,kBAAAA,GAAAA,CAAC,SAAI,SAAA,EACF,QAAA,EAAA,iBAAA,CAAkB,QAAQ,CAAA,CAAE,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 createContext,\n useContext,\n useMemo,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\n\nexport const openEditorThemeTokenNames = [\n \"surface\", \"surfaceRaised\", \"surfaceMuted\", \"blockSurface\", \"text\",\n \"textSoft\", \"heading\", \"muted\", \"placeholder\", \"border\", \"borderStrong\",\n \"structuralLine\", \"accent\", \"accentText\", \"accentStrong\", \"buttonBackground\",\n \"buttonText\", \"codeBackground\", \"codeText\", \"link\", \"linkHover\", \"shadow\",\n \"fontSans\", \"fontMono\", \"radiusSmall\", \"radiusMedium\", \"radiusLarge\",\n \"spaceBlock\", \"spaceInline\",\n] as const;\n\nexport type OpenEditorThemeToken = (typeof openEditorThemeTokenNames)[number];\nexport type OpenEditorTheme = Partial<Record<OpenEditorThemeToken, string>>;\nexport type OpenEditorThemeStyle = CSSProperties & Record<`--oe-${string}`, string | undefined>;\n\nconst cssName = (token: OpenEditorThemeToken) =>\n `--oe-${token.replace(/[A-Z]/g, (character) => `-${character.toLowerCase()}`)}` as const;\n\nexport const createOpenEditorThemeStyle = (theme: OpenEditorTheme): OpenEditorThemeStyle =>\n Object.fromEntries(\n openEditorThemeTokenNames.flatMap((token) =>\n theme[token] === undefined ? [] : [[cssName(token), theme[token]]],\n ),\n ) as OpenEditorThemeStyle;\n\nconst ThemeContext = createContext<OpenEditorThemeStyle | undefined>(undefined);\nexport const useOpenEditorThemeStyle = () => useContext(ThemeContext);\n\nexport function OpenEditorThemeProvider({ children, className, theme }: {\n children: ReactNode;\n className?: string;\n theme: OpenEditorTheme;\n}) {\n const style = useMemo(() => createOpenEditorThemeStyle(theme), [theme]);\n return (\n <ThemeContext.Provider value={style}>\n <div className={className} data-openeditor-theme=\"\" style={style}>{children}</div>\n </ThemeContext.Provider>\n );\n}\n","import {\n DEFAULT_CALLOUT_EMOJI,\n DEFAULT_PAGE_EMOJI,\n createBlockRegistry,\n deleteTopLevelBlock,\n duplicateTopLevelBlock,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n moveTopLevelBlock,\n normalizeDocument,\n normalizeEmoji,\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 { OpenEditorEmojiPicker } from \"@openeditor/emoji\";\nexport {\n createOpenEditorThemeStyle,\n OpenEditorThemeProvider,\n openEditorThemeTokenNames,\n useOpenEditorThemeStyle,\n type OpenEditorTheme,\n type OpenEditorThemeStyle,\n type OpenEditorThemeToken,\n} from \"./theme\";\nimport { useOpenEditorThemeStyle } from \"./theme\";\nimport { renderMermaidSVG } from \"beautiful-mermaid\";\nimport { toExportBundle, type OpenEditorExporters } from \"@openeditor/exporters\";\nimport {\n defaultBlockRegistry,\n openEditorInsertPresets,\n resolveOpenEditorInsertBlock,\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 KeyboardEvent, type MouseEvent, 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 updatePageIcon?: (pageId: string, icon: 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) => boolean;\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 execute: (context: { controller: OpenEditorController; range: InsertRange }) => boolean;\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\" />\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 OpenEditorCalloutNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const themeStyle = useOpenEditorThemeStyle();\n return (\n <NodeViewWrapper as=\"aside\" className=\"oe-callout\">\n <span className=\"oe-callout-emoji\" contentEditable={false}>\n <OpenEditorEmojiPicker\n className=\"oe-callout-emoji-trigger\"\n disabled={!editor.isEditable}\n emoji={normalizeEmoji(node.attrs.emoji, DEFAULT_CALLOUT_EMOJI)}\n label=\"Change callout emoji\"\n onEmojiSelect={(emoji) => updateAttributes({ emoji })}\n popupStyle={themeStyle}\n />\n </span>\n <NodeViewContent as=\"div\" className=\"oe-callout-content\" />\n </NodeViewWrapper>\n );\n};\n\nconst Callout = Node.create({\n name: \"callout\",\n group: \"block\",\n content: \"block+\",\n defining: true,\n addAttributes: () => ({\n emoji: {\n default: DEFAULT_CALLOUT_EMOJI,\n parseHTML: (element) => element.getAttribute(\"data-emoji\") || DEFAULT_CALLOUT_EMOJI,\n renderHTML: (attributes) => ({ \"data-emoji\": normalizeEmoji(attributes.emoji, DEFAULT_CALLOUT_EMOJI) }),\n },\n }),\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: normalizeEmoji(node.attrs?.icon, DEFAULT_PAGE_EMOJI),\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 themeStyle = useOpenEditorThemeStyle();\n const [creating, setCreating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const snapshot = pageSnapshotFromNode(node);\n const icon = normalizeEmoji(node.attrs.icon, DEFAULT_PAGE_EMOJI);\n\n const openPage = () => {\n if (snapshot) void runtime?.openPage?.(snapshot);\n };\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 const updateIcon = async (nextIcon: string) => {\n updateAttributes({ icon: nextIcon });\n if (!snapshot?.pageId || !runtime?.updatePageIcon) return;\n setError(null);\n try {\n await runtime.updatePageIcon(snapshot.pageId, nextIcon);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not update the page icon.\");\n }\n };\n\n return (\n <NodeViewWrapper\n aria-label={snapshot ? `Open ${snapshot.title}` : undefined}\n className=\"oe-page\"\n data-page-id={snapshot?.pageId ?? \"\"}\n onClick={(event: MouseEvent<HTMLElement>) => {\n if ((event.target as Element).closest(\".oe-emoji-trigger\")) return;\n openPage();\n }}\n onKeyDown={(event: KeyboardEvent<HTMLElement>) => {\n if (snapshot && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n openPage();\n }\n }}\n role={snapshot ? \"button\" : undefined}\n tabIndex={snapshot ? 0 : undefined}\n >\n <span contentEditable={false}>\n <OpenEditorEmojiPicker\n className=\"oe-page-icon-trigger\"\n disabled={!editor.isEditable}\n emoji={icon}\n label=\"Change page emoji\"\n popupStyle={themeStyle}\n onEmojiSelect={(nextIcon) => void updateIcon(nextIcon)}\n />\n </span>\n <NodeViewContent\n as=\"div\"\n className=\"oe-page-title\"\n contentEditable={false}\n />\n {!snapshot && 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: DEFAULT_PAGE_EMOJI },\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\">{normalizeEmoji(page?.icon, DEFAULT_PAGE_EMOJI)}</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({\n resizable: true,\n HTMLAttributes: { \"data-openeditor-table\": \"\" },\n }),\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 false;\n }\n\n const block = resolveOpenEditorInsertBlock(blockName, registry);\n if (!block) return false;\n\n const chain = () => {\n const commandChain = editor.chain().focus();\n return range ? commandChain.deleteRange(range) : commandChain;\n };\n\n const inserted = chain().insertContent(block).run();\n if (inserted) setSlashState(null);\n return inserted;\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 execute: ({ 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 execute: ({ range }) => {\n if (!internalController.editor) return false;\n internalController.editor.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(-1);\n return true;\n },\n },\n {\n key: \"moveBlockDown\",\n label: \"Move Block Down\",\n group: \"block\",\n execute: ({ range }) => {\n if (!internalController.editor) return false;\n internalController.editor.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(1);\n return true;\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 execute: ({ 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 data-openeditor-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\"><span aria-hidden=\"true\" className=\"oe-callout-emoji\">{normalizeEmoji(node.attrs?.emoji, DEFAULT_CALLOUT_EMOJI)}</span><div className=\"oe-callout-content\">{children}</div></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"]}
1
+ {"version":3,"sources":["../src/theme.tsx","../src/index.tsx"],"names":["createContext","jsx","snapshot","Fragment","page","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import {\n createContext,\n useContext,\n useMemo,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\n\nexport const openEditorThemeTokenNames = [\n \"surface\", \"surfaceRaised\", \"surfaceMuted\", \"blockSurface\", \"text\",\n \"textSoft\", \"heading\", \"muted\", \"placeholder\", \"border\", \"borderStrong\",\n \"structuralLine\", \"accent\", \"accentText\", \"accentStrong\", \"buttonBackground\",\n \"buttonText\", \"codeBackground\", \"codeText\", \"link\", \"linkHover\", \"shadow\",\n \"fontSans\", \"fontMono\", \"radiusSmall\", \"radiusMedium\", \"radiusLarge\",\n \"spaceBlock\", \"spaceInline\",\n] as const;\n\nexport type OpenEditorThemeToken = (typeof openEditorThemeTokenNames)[number];\nexport type OpenEditorTheme = Partial<Record<OpenEditorThemeToken, string>>;\nexport type OpenEditorThemeStyle = CSSProperties & Record<`--oe-${string}`, string | undefined>;\n\nconst cssName = (token: OpenEditorThemeToken) =>\n `--oe-${token.replace(/[A-Z]/g, (character) => `-${character.toLowerCase()}`)}` as const;\n\nexport const createOpenEditorThemeStyle = (theme: OpenEditorTheme): OpenEditorThemeStyle =>\n Object.fromEntries(\n openEditorThemeTokenNames.flatMap((token) =>\n theme[token] === undefined ? [] : [[cssName(token), theme[token]]],\n ),\n ) as OpenEditorThemeStyle;\n\nconst ThemeContext = createContext<OpenEditorThemeStyle | undefined>(undefined);\nexport const useOpenEditorThemeStyle = () => useContext(ThemeContext);\n\nexport function OpenEditorThemeProvider({ children, className, theme }: {\n children: ReactNode;\n className?: string;\n theme: OpenEditorTheme;\n}) {\n const style = useMemo(() => createOpenEditorThemeStyle(theme), [theme]);\n return (\n <ThemeContext.Provider value={style}>\n <div className={className} data-openeditor-theme=\"\" style={style}>{children}</div>\n </ThemeContext.Provider>\n );\n}\n","import {\n DEFAULT_CALLOUT_EMOJI,\n DEFAULT_PAGE_EMOJI,\n createBlockRegistry,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n normalizeDocument,\n normalizeEmoji,\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 { OpenEditorEmojiPicker } from \"@openeditor/emoji\";\nexport {\n createOpenEditorThemeStyle,\n OpenEditorThemeProvider,\n openEditorThemeTokenNames,\n useOpenEditorThemeStyle,\n type OpenEditorTheme,\n type OpenEditorThemeStyle,\n type OpenEditorThemeToken,\n} from \"./theme\";\nimport { useOpenEditorThemeStyle } from \"./theme\";\nimport { renderMermaidSVG } from \"beautiful-mermaid\";\nimport { toExportBundle, type OpenEditorExporters } from \"@openeditor/exporters\";\nimport {\n defaultBlockRegistry,\n openEditorInsertPresets,\n resolveOpenEditorInsertBlock,\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, TextSelection } 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 KeyboardEvent, type MouseEvent, 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 updatePageIcon?: (pageId: string, icon: 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 blockActions?: readonly OpenEditorBlockAction[];\n};\n\nexport type OpenEditorBlockTarget = {\n pos: number;\n depth: number;\n nodeType: string;\n blockName?: string;\n rect: OpenEditorOverlayRect;\n};\n\nexport type OpenEditorBlockActionContext = {\n controller: OpenEditorController;\n target: OpenEditorBlockTarget;\n};\n\nexport type OpenEditorBlockAction = {\n id: string;\n label: string;\n group?: \"edit\" | \"danger\" | string;\n disabled?: (context: OpenEditorBlockActionContext) => boolean;\n run: (context: OpenEditorBlockActionContext) => void | Promise<void>;\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) => boolean;\n setLink: (url?: string | null) => void;\n getActiveLink: () => string | undefined;\n moveSelectedBlock: (direction: -1 | 1) => void;\n duplicateSelectedBlock: () => void;\n deleteSelectedBlock: () => void;\n selectBlock: (target: OpenEditorBlockTarget) => void;\n copyBlock: (target?: OpenEditorBlockTarget) => Promise<boolean>;\n duplicateBlock: (target?: OpenEditorBlockTarget) => boolean;\n deleteBlock: (target?: OpenEditorBlockTarget) => boolean;\n moveBlock: (direction: -1 | 1, target?: OpenEditorBlockTarget) => boolean;\n blockActions: readonly OpenEditorBlockAction[];\n blockTarget: OpenEditorBlockTarget | null;\n setBlockTargetAt: (pos: number | null) => 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 execute: (context: { controller: OpenEditorController; range: InsertRange }) => boolean;\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\" />\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 OpenEditorCalloutNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const themeStyle = useOpenEditorThemeStyle();\n return (\n <NodeViewWrapper as=\"aside\" className=\"oe-callout\">\n <span className=\"oe-callout-emoji\" contentEditable={false}>\n <OpenEditorEmojiPicker\n className=\"oe-callout-emoji-trigger\"\n disabled={!editor.isEditable}\n emoji={normalizeEmoji(node.attrs.emoji, DEFAULT_CALLOUT_EMOJI)}\n label=\"Change callout emoji\"\n onEmojiSelect={(emoji) => updateAttributes({ emoji })}\n popupStyle={themeStyle}\n />\n </span>\n <NodeViewContent as=\"div\" className=\"oe-callout-content\" />\n </NodeViewWrapper>\n );\n};\n\nconst Callout = Node.create({\n name: \"callout\",\n group: \"block\",\n content: \"block+\",\n defining: true,\n addAttributes: () => ({\n emoji: {\n default: DEFAULT_CALLOUT_EMOJI,\n parseHTML: (element) => element.getAttribute(\"data-emoji\") || DEFAULT_CALLOUT_EMOJI,\n renderHTML: (attributes) => ({ \"data-emoji\": normalizeEmoji(attributes.emoji, DEFAULT_CALLOUT_EMOJI) }),\n },\n }),\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: normalizeEmoji(node.attrs?.icon, DEFAULT_PAGE_EMOJI),\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 themeStyle = useOpenEditorThemeStyle();\n const [creating, setCreating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const snapshot = pageSnapshotFromNode(node);\n const icon = normalizeEmoji(node.attrs.icon, DEFAULT_PAGE_EMOJI);\n\n const openPage = () => {\n if (snapshot) void runtime?.openPage?.(snapshot);\n };\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 const updateIcon = async (nextIcon: string) => {\n updateAttributes({ icon: nextIcon });\n if (!snapshot?.pageId || !runtime?.updatePageIcon) return;\n setError(null);\n try {\n await runtime.updatePageIcon(snapshot.pageId, nextIcon);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not update the page icon.\");\n }\n };\n\n return (\n <NodeViewWrapper\n aria-label={snapshot ? `Open ${snapshot.title}` : undefined}\n className=\"oe-page\"\n data-page-id={snapshot?.pageId ?? \"\"}\n onClick={(event: MouseEvent<HTMLElement>) => {\n if ((event.target as Element).closest(\".oe-emoji-trigger\")) return;\n openPage();\n }}\n onKeyDown={(event: KeyboardEvent<HTMLElement>) => {\n if (snapshot && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n openPage();\n }\n }}\n role={snapshot ? \"button\" : undefined}\n tabIndex={snapshot ? 0 : undefined}\n >\n <span contentEditable={false}>\n <OpenEditorEmojiPicker\n className=\"oe-page-icon-trigger\"\n disabled={!editor.isEditable}\n emoji={icon}\n label=\"Change page emoji\"\n popupStyle={themeStyle}\n onEmojiSelect={(nextIcon) => void updateIcon(nextIcon)}\n />\n </span>\n <NodeViewContent\n as=\"div\"\n className=\"oe-page-title\"\n contentEditable={false}\n />\n {!snapshot && 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: DEFAULT_PAGE_EMOJI },\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\">{normalizeEmoji(page?.icon, DEFAULT_PAGE_EMOJI)}</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({\n resizable: true,\n HTMLAttributes: { \"data-openeditor-table\": \"\" },\n }),\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 (\n !(selection instanceof TextSelection)\n || selection.empty\n || editor.state.doc.textBetween(selection.from, selection.to).length === 0\n ) {\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 toBlockTarget = (\n editor: Editor,\n pos: number,\n registry: BlockRegistry,\n): OpenEditorBlockTarget | null => {\n const node = editor.state.doc.nodeAt(pos);\n if (!node || !node.isBlock) return null;\n const dom = editor.view.nodeDOM(pos);\n if (!(dom instanceof HTMLElement)) return null;\n const rect = dom.getBoundingClientRect();\n const portableNode = node.toJSON() as ProseMirrorNode;\n return {\n pos,\n depth: editor.state.doc.resolve(pos).depth,\n nodeType: node.type.name,\n blockName: findBlockSpecForNode(registry, portableNode)?.name,\n rect: toOverlayRect(rect),\n };\n};\n\nconst selectedBlockTarget = (editor: Editor, registry: BlockRegistry) => {\n const { selection } = editor.state;\n const pos = selection instanceof NodeSelection\n ? selection.from\n : selection.$from.depth > 0\n ? selection.$from.before(1)\n : 0;\n return toBlockTarget(editor, pos, registry);\n};\n\nconst regenerateClipboardNodeIds = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(regenerateClipboardNodeIds);\n if (!value || typeof value !== \"object\") return value;\n const result = Object.fromEntries(\n Object.entries(value).map(([key, nested]) => [key, regenerateClipboardNodeIds(nested)]),\n ) as Record<string, unknown>;\n if (result.attrs && typeof result.attrs === \"object\") {\n const attrs = { ...(result.attrs as Record<string, unknown>) };\n delete attrs[\"data-openeditor-id\"];\n if (attrs.openeditor && typeof attrs.openeditor === \"object\") {\n const meta = { ...(attrs.openeditor as Record<string, unknown>) };\n delete meta.id;\n attrs.openeditor = meta;\n }\n result.attrs = attrs;\n }\n return result;\n};\n\nconst OPENEDITOR_CLIPBOARD_TYPE = \"application/x-openeditor-blocks+json\";\nconst OPENEDITOR_WEB_CLIPBOARD_TYPE = `web ${OPENEDITOR_CLIPBOARD_TYPE}`;\n\nconst escapeClipboardHtml = (value: string) => value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\");\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 blockActions = [],\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 [blockTarget, setBlockTarget] = useState<OpenEditorBlockTarget | null>(null);\n const isPointerSelectingRef = useRef(false);\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 clipboard = event.clipboardData;\n const html = clipboard?.getData(\"text/html\");\n const embeddedPayload = html\n ? new DOMParser().parseFromString(html, \"text/html\")\n .querySelector(\"[data-openeditor-clipboard]\")\n ?.getAttribute(\"data-openeditor-clipboard\")\n : null;\n const encoded = clipboard?.getData(OPENEDITOR_WEB_CLIPBOARD_TYPE)\n || clipboard?.getData(OPENEDITOR_CLIPBOARD_TYPE)\n || (embeddedPayload ? decodeURIComponent(embeddedPayload) : \"\");\n if (encoded?.startsWith('{\"format\":\"openeditor-blocks\"')) {\n try {\n const payload = JSON.parse(encoded) as { format?: string; version?: number; blocks?: unknown[] };\n if (payload.format === \"openeditor-blocks\" && payload.version === 1 && Array.isArray(payload.blocks)) {\n const nodes = payload.blocks.map((node) =>\n view.state.schema.nodeFromJSON(regenerateClipboardNodeIds(node)),\n );\n const firstNode = nodes[0];\n if (firstNode) {\n event.preventDefault();\n view.dispatch(\n view.state.tr.replaceSelectionWith(firstNode, false).scrollIntoView(),\n );\n return true;\n }\n }\n } catch {\n // Invalid OpenEditor-looking text remains normal plain-text paste.\n }\n }\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 handleDOMEvents: {\n pointerdown: (_view, event) => {\n if (event.button === 0) {\n isPointerSelectingRef.current = true;\n setSelectionBubbleState(null);\n }\n return false;\n },\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(\n isPointerSelectingRef.current ? null : getSelectionBubbleState(currentEditor),\n );\n },\n onSelectionUpdate: ({ editor: currentEditor }) => {\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(\n isPointerSelectingRef.current ? null : getSelectionBubbleState(currentEditor),\n );\n if (currentEditor.state.selection instanceof NodeSelection) {\n setBlockTarget(selectedBlockTarget(currentEditor, registry));\n }\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\") return;\n const finishPointerSelection = () => {\n if (!isPointerSelectingRef.current) return;\n isPointerSelectingRef.current = false;\n setSelectionBubbleState(getSelectionBubbleState(editor));\n };\n window.addEventListener(\"pointerup\", finishPointerSelection, true);\n window.addEventListener(\"pointercancel\", finishPointerSelection, true);\n return () => {\n window.removeEventListener(\"pointerup\", finishPointerSelection, true);\n window.removeEventListener(\"pointercancel\", finishPointerSelection, true);\n };\n }, [editor]);\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 false;\n }\n\n const block = resolveOpenEditorInsertBlock(blockName, registry);\n if (!block) return false;\n\n const chain = () => {\n const commandChain = editor.chain().focus();\n return range ? commandChain.deleteRange(range) : commandChain;\n };\n\n if (blockName === \"page\" && pageRuntime?.createPage) {\n const prepared = chain().run();\n if (!prepared) return false;\n setSlashState(null);\n void pageRuntime.createPage({\n title: \"Untitled\",\n icon: DEFAULT_PAGE_EMOJI,\n }).then((created) => {\n editor.chain().focus().insertContent({\n ...block,\n attrs: {\n ...block.attrs,\n pageId: created.pageId,\n icon: created.icon ?? DEFAULT_PAGE_EMOJI,\n href: created.href ?? null,\n },\n content: [{ type: \"text\", text: created.title || \"Untitled\" }],\n }).run();\n }).catch(() => {\n // Preserve the recoverable placeholder when the host creation fails.\n editor.chain().focus().insertContent(block).run();\n });\n return true;\n }\n\n const inserted = chain().insertContent(block).run();\n if (inserted) setSlashState(null);\n return inserted;\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 resolveTarget = (target?: OpenEditorBlockTarget) =>\n target ?? (editor ? selectedBlockTarget(editor, registry) : null);\n\n const setBlockTargetAt = (pos: number | null) => {\n if (!editor || pos === null || pos < 0) {\n if (!(editor?.state.selection instanceof NodeSelection)) setBlockTarget(null);\n return;\n }\n setBlockTarget(toBlockTarget(editor, pos, registry));\n };\n\n const selectBlock = (target: OpenEditorBlockTarget) => {\n if (!editor) return;\n editor.view.dispatch(editor.state.tr.setSelection(NodeSelection.create(editor.state.doc, target.pos)));\n setBlockTarget(toBlockTarget(editor, target.pos, registry));\n };\n\n const deleteBlock = (target?: OpenEditorBlockTarget) => {\n if (!editor) return false;\n const resolved = resolveTarget(target);\n if (!resolved) return false;\n const node = editor.state.doc.nodeAt(resolved.pos);\n if (!node) return false;\n const tr = editor.state.tr.delete(resolved.pos, resolved.pos + node.nodeSize);\n if (tr.doc.childCount === 0) {\n const paragraph = editor.schema.nodes.paragraph?.create();\n if (paragraph) tr.insert(0, paragraph);\n }\n const selectionPos = Math.min(resolved.pos, Math.max(0, tr.doc.content.size - 1));\n tr.setSelection(TextSelection.near(tr.doc.resolve(selectionPos)));\n editor.view.dispatch(tr.scrollIntoView());\n setBlockTarget(null);\n return true;\n };\n\n const duplicateBlock = (target?: OpenEditorBlockTarget) => {\n if (!editor) return false;\n const resolved = resolveTarget(target);\n if (!resolved) return false;\n const node = editor.state.doc.nodeAt(resolved.pos);\n if (!node) return false;\n const copy = editor.schema.nodeFromJSON(regenerateClipboardNodeIds(node.toJSON()));\n const pos = resolved.pos + node.nodeSize;\n const tr = editor.state.tr.insert(pos, copy);\n tr.setSelection(NodeSelection.create(tr.doc, pos));\n editor.view.dispatch(tr.scrollIntoView());\n return true;\n };\n\n const moveBlock = (direction: -1 | 1, target?: OpenEditorBlockTarget) => {\n if (!editor) return false;\n const resolved = resolveTarget(target);\n if (!resolved) return false;\n const node = editor.state.doc.nodeAt(resolved.pos);\n if (!node) return false;\n const $pos = editor.state.doc.resolve(resolved.pos);\n const index = $pos.index(0);\n const destinationIndex = index + direction;\n if (destinationIndex < 0 || destinationIndex >= editor.state.doc.childCount) return false;\n const destinationPos = direction < 0\n ? resolved.pos - editor.state.doc.child(destinationIndex).nodeSize\n : resolved.pos + node.nodeSize + editor.state.doc.child(destinationIndex).nodeSize;\n let tr = editor.state.tr.delete(resolved.pos, resolved.pos + node.nodeSize);\n const insertPos = direction < 0 ? destinationPos : destinationPos - node.nodeSize;\n tr = tr.insert(insertPos, node).setSelection(NodeSelection.create(tr.doc, insertPos));\n editor.view.dispatch(tr.scrollIntoView());\n return true;\n };\n\n const copyBlock = async (target?: OpenEditorBlockTarget) => {\n if (!editor || typeof navigator === \"undefined\") return false;\n const resolved = resolveTarget(target);\n const node = resolved ? editor.state.doc.nodeAt(resolved.pos) : null;\n if (!resolved || !node) return false;\n const $pos = editor.state.doc.resolve(resolved.pos);\n const clipboardNode = [\"listItem\", \"taskItem\"].includes(node.type.name)\n && [\"bulletList\", \"orderedList\", \"taskList\"].includes($pos.parent.type.name)\n ? $pos.parent.type.create($pos.parent.attrs, node)\n : node;\n const payload = JSON.stringify({ format: \"openeditor-blocks\", version: 1, blocks: [clipboardNode.toJSON()] });\n const plainText = node.textContent || `[${resolved.blockName ?? resolved.nodeType}]`;\n const html = `<div data-openeditor-clipboard=\"${encodeURIComponent(payload)}\">${escapeClipboardHtml(plainText)}</div>`;\n try {\n if (typeof ClipboardItem !== \"undefined\" && navigator.clipboard?.write) {\n await navigator.clipboard.write([new ClipboardItem({\n \"text/html\": new Blob([html], { type: \"text/html\" }),\n \"text/plain\": new Blob([plainText], { type: \"text/plain\" }),\n })]);\n } else {\n await navigator.clipboard.writeText(plainText);\n }\n return true;\n } catch {\n try {\n await navigator.clipboard.writeText(plainText);\n return true;\n } catch {\n return false;\n }\n }\n };\n\n const moveSelectedBlock = (direction: -1 | 1) => { moveBlock(direction); };\n const duplicateSelectedBlock = () => { duplicateBlock(); };\n const deleteSelectedBlock = () => { deleteBlock(); };\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 selectBlock,\n copyBlock,\n duplicateBlock,\n deleteBlock,\n moveBlock,\n blockActions,\n blockTarget,\n setBlockTargetAt,\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 execute: ({ 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 execute: ({ range }) => {\n if (!internalController.editor) return false;\n internalController.editor.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(-1);\n return true;\n },\n },\n {\n key: \"moveBlockDown\",\n label: \"Move Block Down\",\n group: \"block\",\n execute: ({ range }) => {\n if (!internalController.editor) return false;\n internalController.editor.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(1);\n return true;\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 execute: ({ 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 data-openeditor-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\"><span aria-hidden=\"true\" className=\"oe-callout-emoji\">{normalizeEmoji(node.attrs?.emoji, DEFAULT_CALLOUT_EMOJI)}</span><div className=\"oe-callout-content\">{children}</div></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.17",
3
+ "version": "0.0.18",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "repository": {
@@ -25,10 +25,10 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@base-ui/react": "^1.6.0",
28
- "@openeditor/core": "0.0.17",
29
- "@openeditor/emoji": "0.0.17",
30
- "@openeditor/exporters": "0.0.17",
31
- "@openeditor/extensions": "0.0.17",
28
+ "@openeditor/core": "0.0.18",
29
+ "@openeditor/emoji": "0.0.18",
30
+ "@openeditor/exporters": "0.0.18",
31
+ "@openeditor/extensions": "0.0.18",
32
32
  "@tiptap/core": "3.27.1",
33
33
  "@tiptap/extension-horizontal-rule": "3.27.1",
34
34
  "@tiptap/extension-image": "3.27.1",