@openeditor/react 0.0.16 → 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
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ComponentType } from 'react';
2
+ import { ReactNode, CSSProperties, ComponentType } from 'react';
3
3
  import { OpenEditorDocument, BlockSpec, ProseMirrorNode, OpenEditorAttachmentRuntime } from '@openeditor/core';
4
4
  import { toExportBundle, OpenEditorExporters } from '@openeditor/exporters';
5
5
  export { seedDocument } from '@openeditor/extensions';
@@ -7,6 +7,18 @@ import { Editor, AnyExtension, NodeConfig } from '@tiptap/core';
7
7
  import { ReactNodeViewProps } from '@tiptap/react';
8
8
  export { NodeViewContent, NodeViewWrapper, ReactNodeViewProps as OpenEditorNodeViewProps } from '@tiptap/react';
9
9
 
10
+ declare const openEditorThemeTokenNames: readonly ["surface", "surfaceRaised", "surfaceMuted", "blockSurface", "text", "textSoft", "heading", "muted", "placeholder", "border", "borderStrong", "structuralLine", "accent", "accentText", "accentStrong", "buttonBackground", "buttonText", "codeBackground", "codeText", "link", "linkHover", "shadow", "fontSans", "fontMono", "radiusSmall", "radiusMedium", "radiusLarge", "spaceBlock", "spaceInline"];
11
+ type OpenEditorThemeToken = (typeof openEditorThemeTokenNames)[number];
12
+ type OpenEditorTheme = Partial<Record<OpenEditorThemeToken, string>>;
13
+ type OpenEditorThemeStyle = CSSProperties & Record<`--oe-${string}`, string | undefined>;
14
+ declare const createOpenEditorThemeStyle: (theme: OpenEditorTheme) => OpenEditorThemeStyle;
15
+ declare const useOpenEditorThemeStyle: () => OpenEditorThemeStyle | undefined;
16
+ declare function OpenEditorThemeProvider({ children, className, theme }: {
17
+ children: ReactNode;
18
+ className?: string;
19
+ theme: OpenEditorTheme;
20
+ }): react.JSX.Element;
21
+
10
22
  type OpenEditorPageSnapshot = {
11
23
  pageId: string;
12
24
  title: string;
@@ -34,6 +46,25 @@ type OpenEditorReactProps = {
34
46
  slashMenuItems?: readonly OpenEditorSlashMenuItem[];
35
47
  /** Consumer-owned blocks. Extension names and node types must be unique. */
36
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>;
37
68
  };
38
69
  type OpenEditorReactConfig = OpenEditorReactProps;
39
70
  type OpenEditorController = {
@@ -66,6 +97,14 @@ type OpenEditorController = {
66
97
  moveSelectedBlock: (direction: -1 | 1) => void;
67
98
  duplicateSelectedBlock: () => void;
68
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;
69
108
  slashMenuItems: readonly OpenEditorSlashMenuItem[];
70
109
  extensions: readonly OpenEditorReactExtension[];
71
110
  pageRuntime?: OpenEditorPageRuntime;
@@ -156,10 +195,10 @@ declare module "@tiptap/core" {
156
195
  }
157
196
  }
158
197
  declare const formatAttachmentSize: (size: number | null) => string;
159
- 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;
160
199
  declare const getDefaultSlashMenuItems: (controller: OpenEditorController) => OpenEditorSlashMenuItem[];
161
200
  declare const OpenEditorContent: ({ controller, className, }: OpenEditorContentProps) => react.JSX.Element;
162
201
  declare const OpenEditorViewer: ({ document, className, renderers, extensions, pageRuntime, attachmentRuntime, }: OpenEditorViewerProps) => react.JSX.Element;
163
- 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;
164
203
 
165
- export { type InsertRange, OpenEditorContent, type OpenEditorContentProps, type OpenEditorController, type OpenEditorExtensionMenu, type OpenEditorOverlayRect, type OpenEditorPageRuntime, type OpenEditorPageSnapshot, type OpenEditorReactConfig, type OpenEditorReactExtension, type OpenEditorReactNodeExtension, type OpenEditorReactProps, type OpenEditorSlashMenuItem, OpenEditorViewer, type OpenEditorViewerProps, type OpenEditorViewerRenderer, type SelectionBubbleState, type SlashState, defineOpenEditorReactExtension, defineOpenEditorReactNode, formatAttachmentSize, getDefaultSlashMenuItems, useOpenEditor, useOpenEditorController };
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,6 +1,8 @@
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
+ import { createContext, use, useState, useRef, useEffect, useContext, useMemo, Fragment } from 'react';
5
+ import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
4
6
  import { renderMermaidSVG } from 'beautiful-mermaid';
5
7
  import { toExportBundle } from '@openeditor/exporters';
6
8
  import { seedDocument, openEditorInsertPresets, resolveOpenEditorInsertBlock, defaultBlockRegistry } from '@openeditor/extensions';
@@ -18,15 +20,56 @@ import TaskItem from '@tiptap/extension-task-item';
18
20
  import TaskList from '@tiptap/extension-task-list';
19
21
  import TextAlign from '@tiptap/extension-text-align';
20
22
  import Underline from '@tiptap/extension-underline';
21
- import { NodeSelection, Plugin } from '@tiptap/pm/state';
23
+ import { NodeSelection, Plugin, TextSelection } from '@tiptap/pm/state';
22
24
  import { ReplaceStep } from '@tiptap/pm/transform';
23
25
  import { ReactNodeViewRenderer, NodeViewWrapper, NodeViewContent, useEditor, EditorContent } from '@tiptap/react';
24
26
  export { NodeViewContent, NodeViewWrapper } from '@tiptap/react';
25
27
  import StarterKit from '@tiptap/starter-kit';
26
- import { createContext, use, useState, useRef, useEffect, useMemo, Fragment } from 'react';
27
- import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
28
28
 
29
29
  // src/index.tsx
30
+ var openEditorThemeTokenNames = [
31
+ "surface",
32
+ "surfaceRaised",
33
+ "surfaceMuted",
34
+ "blockSurface",
35
+ "text",
36
+ "textSoft",
37
+ "heading",
38
+ "muted",
39
+ "placeholder",
40
+ "border",
41
+ "borderStrong",
42
+ "structuralLine",
43
+ "accent",
44
+ "accentText",
45
+ "accentStrong",
46
+ "buttonBackground",
47
+ "buttonText",
48
+ "codeBackground",
49
+ "codeText",
50
+ "link",
51
+ "linkHover",
52
+ "shadow",
53
+ "fontSans",
54
+ "fontMono",
55
+ "radiusSmall",
56
+ "radiusMedium",
57
+ "radiusLarge",
58
+ "spaceBlock",
59
+ "spaceInline"
60
+ ];
61
+ var cssName = (token) => `--oe-${token.replace(/[A-Z]/g, (character) => `-${character.toLowerCase()}`)}`;
62
+ var createOpenEditorThemeStyle = (theme) => Object.fromEntries(
63
+ openEditorThemeTokenNames.flatMap(
64
+ (token) => theme[token] === void 0 ? [] : [[cssName(token), theme[token]]]
65
+ )
66
+ );
67
+ var ThemeContext = createContext(void 0);
68
+ var useOpenEditorThemeStyle = () => useContext(ThemeContext);
69
+ function OpenEditorThemeProvider({ children, className, theme }) {
70
+ const style = useMemo(() => createOpenEditorThemeStyle(theme), [theme]);
71
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: style, children: /* @__PURE__ */ jsx("div", { className, "data-openeditor-theme": "", style, children }) });
72
+ }
30
73
  var OpenEditorPageRuntimeContext = createContext(void 0);
31
74
  var OpenEditorAttachmentRuntimeContext = createContext(void 0);
32
75
  var defineOpenEditorReactExtension = (extension) => extension;
@@ -325,19 +368,23 @@ var ToggleListItem = Node.create({
325
368
  return ReactNodeViewRenderer(OpenEditorToggleListItemNodeView);
326
369
  }
327
370
  });
328
- var OpenEditorCalloutNodeView = ({ editor, node, updateAttributes }) => /* @__PURE__ */ jsxs(NodeViewWrapper, { as: "aside", className: "oe-callout", children: [
329
- /* @__PURE__ */ jsx("span", { className: "oe-callout-emoji", contentEditable: false, children: /* @__PURE__ */ jsx(
330
- OpenEditorEmojiPicker,
331
- {
332
- className: "oe-callout-emoji-trigger",
333
- disabled: !editor.isEditable,
334
- emoji: normalizeEmoji(node.attrs.emoji, DEFAULT_CALLOUT_EMOJI),
335
- label: "Change callout emoji",
336
- onEmojiSelect: (emoji) => updateAttributes({ emoji })
337
- }
338
- ) }),
339
- /* @__PURE__ */ jsx(NodeViewContent, { as: "div", className: "oe-callout-content" })
340
- ] });
371
+ var OpenEditorCalloutNodeView = ({ editor, node, updateAttributes }) => {
372
+ const themeStyle = useOpenEditorThemeStyle();
373
+ return /* @__PURE__ */ jsxs(NodeViewWrapper, { as: "aside", className: "oe-callout", children: [
374
+ /* @__PURE__ */ jsx("span", { className: "oe-callout-emoji", contentEditable: false, children: /* @__PURE__ */ jsx(
375
+ OpenEditorEmojiPicker,
376
+ {
377
+ className: "oe-callout-emoji-trigger",
378
+ disabled: !editor.isEditable,
379
+ emoji: normalizeEmoji(node.attrs.emoji, DEFAULT_CALLOUT_EMOJI),
380
+ label: "Change callout emoji",
381
+ onEmojiSelect: (emoji) => updateAttributes({ emoji }),
382
+ popupStyle: themeStyle
383
+ }
384
+ ) }),
385
+ /* @__PURE__ */ jsx(NodeViewContent, { as: "div", className: "oe-callout-content" })
386
+ ] });
387
+ };
341
388
  var Callout = Node.create({
342
389
  name: "callout",
343
390
  group: "block",
@@ -542,6 +589,7 @@ var pageSnapshotFromNode = (node) => {
542
589
  };
543
590
  var OpenEditorPageNodeView = ({ editor, node, updateAttributes }) => {
544
591
  const runtime = use(OpenEditorPageRuntimeContext);
592
+ const themeStyle = useOpenEditorThemeStyle();
545
593
  const [creating, setCreating] = useState(false);
546
594
  const [error, setError] = useState(null);
547
595
  const snapshot = pageSnapshotFromNode(node);
@@ -598,6 +646,7 @@ var OpenEditorPageNodeView = ({ editor, node, updateAttributes }) => {
598
646
  disabled: !editor.isEditable,
599
647
  emoji: icon,
600
648
  label: "Change page emoji",
649
+ popupStyle: themeStyle,
601
650
  onEmojiSelect: (nextIcon) => void updateIcon(nextIcon)
602
651
  }
603
652
  ) }),
@@ -819,10 +868,7 @@ var getSlashState = (editor) => {
819
868
  };
820
869
  var getSelectionBubbleState = (editor) => {
821
870
  const { selection } = editor.state;
822
- if (selection instanceof NodeSelection && selection.node.type.name === "horizontalRule") {
823
- return null;
824
- }
825
- if (selection.empty) {
871
+ if (!(selection instanceof TextSelection) || selection.empty || editor.state.doc.textBetween(selection.from, selection.to).length === 0) {
826
872
  return null;
827
873
  }
828
874
  const domSelection = typeof window === "undefined" ? null : window.getSelection();
@@ -849,17 +895,47 @@ var getSelectionBubbleState = (editor) => {
849
895
  anchorRect
850
896
  };
851
897
  };
852
- var getSelectedTopLevelIndex = (editor) => {
853
- const { $from } = editor.state.selection;
854
- const selectedTopLevelPosition = $from.depth > 0 ? $from.before(1) : 0;
855
- let selectedIndex = 0;
856
- editor.state.doc.forEach((_, offset, index) => {
857
- if (offset <= selectedTopLevelPosition) {
858
- 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;
859
931
  }
860
- });
861
- return selectedIndex;
932
+ result.attrs = attrs;
933
+ }
934
+ return result;
862
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;");
863
939
  var useOpenEditorController = ({
864
940
  initialDocument = seedDocument,
865
941
  editable = true,
@@ -869,12 +945,15 @@ var useOpenEditorController = ({
869
945
  pageRuntime,
870
946
  attachmentRuntime,
871
947
  slashMenuItems = [],
872
- extensions = EMPTY_EXTENSIONS
948
+ extensions = EMPTY_EXTENSIONS,
949
+ blockActions = []
873
950
  } = {}) => {
874
951
  const [document, setDocument] = useState(normalizeDocument(initialDocument));
875
952
  const [selectedBlock, setSelectedBlock] = useState("paragraph");
876
953
  const [slashState, setSlashState] = useState(null);
877
954
  const [selectionBubbleState, setSelectionBubbleState] = useState(null);
955
+ const [blockTarget, setBlockTarget] = useState(null);
956
+ const isPointerSelectingRef = useRef(false);
878
957
  const slashStateRef = useRef(null);
879
958
  const selectionBubbleStateRef = useRef(null);
880
959
  const registry = useMemo(() => createReactBlockRegistry(extensions), [extensions]);
@@ -890,7 +969,30 @@ var useOpenEditorController = ({
890
969
  "aria-label": "OpenEditor document"
891
970
  },
892
971
  transformPastedHTML: sanitizePastedHtml,
893
- 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
+ }
894
996
  const file = event.clipboardData?.files?.[0];
895
997
  if (!file || !onFilePasteDrop?.(file)) {
896
998
  return false;
@@ -905,6 +1007,15 @@ var useOpenEditorController = ({
905
1007
  }
906
1008
  event.preventDefault();
907
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
+ }
908
1019
  }
909
1020
  },
910
1021
  onUpdate: ({ editor: currentEditor }) => {
@@ -917,11 +1028,18 @@ var useOpenEditorController = ({
917
1028
  setDocument(nextDocument);
918
1029
  onChange?.(nextDocument);
919
1030
  setSlashState(getSlashState(currentEditor));
920
- setSelectionBubbleState(getSelectionBubbleState(currentEditor));
1031
+ setSelectionBubbleState(
1032
+ isPointerSelectingRef.current ? null : getSelectionBubbleState(currentEditor)
1033
+ );
921
1034
  },
922
1035
  onSelectionUpdate: ({ editor: currentEditor }) => {
923
1036
  setSlashState(getSlashState(currentEditor));
924
- 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
+ }
925
1043
  }
926
1044
  }, [extensions]);
927
1045
  const exports = useMemo(
@@ -934,6 +1052,20 @@ var useOpenEditorController = ({
934
1052
  useEffect(() => {
935
1053
  selectionBubbleStateRef.current = selectionBubbleState;
936
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]);
937
1069
  useEffect(() => {
938
1070
  if (!editor || typeof window === "undefined") {
939
1071
  return;
@@ -971,49 +1103,136 @@ var useOpenEditorController = ({
971
1103
  const commandChain = editor.chain().focus();
972
1104
  return range ? commandChain.deleteRange(range) : commandChain;
973
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
+ }
974
1129
  const inserted = chain().insertContent(block).run();
975
1130
  if (inserted) setSlashState(null);
976
1131
  return inserted;
977
1132
  };
978
- const setDocumentContent = (content) => {
979
- if (!editor) {
980
- return;
981
- }
982
- editor.commands.setContent(toProseMirrorDocument(normalizeDocument({ ...document, content })));
983
- };
984
1133
  const setContent = (nextDocument) => {
985
1134
  if (!editor) {
986
1135
  return;
987
1136
  }
988
1137
  editor.commands.setContent(toProseMirrorDocument(normalizeDocument(nextDocument)));
989
1138
  };
990
- const moveSelectedBlock = (direction) => {
991
- 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);
992
1143
  return;
993
1144
  }
994
- const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));
995
- const selectedIndex = getSelectedTopLevelIndex(editor);
996
- const nextIndex = selectedIndex + direction;
997
- if (nextIndex < 0 || nextIndex >= currentDocument.content.length) {
998
- 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);
999
1162
  }
1000
- 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;
1001
1168
  };
1002
- const duplicateSelectedBlock = () => {
1003
- if (!editor) {
1004
- 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
+ }
1005
1226
  }
1006
- const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));
1007
- const selectedIndex = getSelectedTopLevelIndex(editor);
1008
- setDocumentContent(duplicateTopLevelBlock(currentDocument, selectedIndex).content);
1227
+ };
1228
+ const moveSelectedBlock = (direction) => {
1229
+ moveBlock(direction);
1230
+ };
1231
+ const duplicateSelectedBlock = () => {
1232
+ duplicateBlock();
1009
1233
  };
1010
1234
  const deleteSelectedBlock = () => {
1011
- if (!editor) {
1012
- return;
1013
- }
1014
- const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));
1015
- const selectedIndex = getSelectedTopLevelIndex(editor);
1016
- setDocumentContent(deleteTopLevelBlock(currentDocument, selectedIndex).content);
1235
+ deleteBlock();
1017
1236
  };
1018
1237
  const setLink = (url) => {
1019
1238
  if (!editor) {
@@ -1097,6 +1316,14 @@ var useOpenEditorController = ({
1097
1316
  moveSelectedBlock,
1098
1317
  duplicateSelectedBlock,
1099
1318
  deleteSelectedBlock,
1319
+ selectBlock,
1320
+ copyBlock,
1321
+ duplicateBlock,
1322
+ deleteBlock,
1323
+ moveBlock,
1324
+ blockActions,
1325
+ blockTarget,
1326
+ setBlockTargetAt,
1100
1327
  slashMenuItems,
1101
1328
  extensions,
1102
1329
  pageRuntime,
@@ -1291,6 +1518,6 @@ var OpenEditorViewer = ({
1291
1518
  };
1292
1519
  var useOpenEditor = useOpenEditorController;
1293
1520
 
1294
- export { OpenEditorContent, OpenEditorViewer, defineOpenEditorReactExtension, defineOpenEditorReactNode, formatAttachmentSize, getDefaultSlashMenuItems, useOpenEditor, useOpenEditorController };
1521
+ export { OpenEditorContent, OpenEditorThemeProvider, OpenEditorViewer, createOpenEditorThemeStyle, defineOpenEditorReactExtension, defineOpenEditorReactNode, formatAttachmentSize, getDefaultSlashMenuItems, openEditorThemeTokenNames, useOpenEditor, useOpenEditorController, useOpenEditorThemeStyle };
1295
1522
  //# sourceMappingURL=index.js.map
1296
1523
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx"],"names":["snapshot","Fragment","page"],"mappings":"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","file":"index.js","sourcesContent":["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\";\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 <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 />\n </span>\n <NodeViewContent as=\"div\" className=\"oe-callout-content\" />\n </NodeViewWrapper>\n);\n\nconst Callout = Node.create({\n name: \"callout\",\n group: \"block\",\n content: \"block+\",\n defining: true,\n addAttributes: () => ({\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 [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 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.16",
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.16",
29
- "@openeditor/emoji": "0.0.16",
30
- "@openeditor/exporters": "0.0.16",
31
- "@openeditor/extensions": "0.0.16",
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",