@openeditor/react 0.0.11 β†’ 0.0.12

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
@@ -122,6 +122,26 @@ collisions. `nodeType` is the serialized ProseMirror node type and defaults to
122
122
  `name`; use an identifier without punctuation when interoperability requires it.
123
123
  Duplicate names and node types fail immediately during editor construction.
124
124
 
125
+ ## Pages
126
+
127
+ The first-party `page` block models a Notion-style child page as a reference to
128
+ a separately persisted document. Supply `pageRuntime` to connect creation,
129
+ resolution, renaming, and navigation to your application:
130
+
131
+ ```tsx
132
+ const controller = useOpenEditorController({
133
+ pageRuntime: {
134
+ createPage: async ({ title, icon }) => api.pages.create({ title, icon }),
135
+ resolvePage: async (pageId) => api.pages.get(pageId),
136
+ renamePage: async (pageId, title) => api.pages.rename(pageId, title),
137
+ openPage: (page) => router.push(`/pages/${page.pageId}`),
138
+ },
139
+ });
140
+ ```
141
+
142
+ The document stores only the stable reference and cached presentation. Page
143
+ contents, hierarchy, permissions, routing, and deletion remain host-owned.
144
+
125
145
  For an externally stored object, persist a stable ID in node attributes rather
126
146
  than embedding the entire application record. The React node view can resolve
127
147
  that ID using the consumer's own data layer. OpenEditor deliberately has no
package/dist/index.d.ts CHANGED
@@ -7,12 +7,28 @@ 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
+ type OpenEditorPageSnapshot = {
11
+ pageId: string;
12
+ title: string;
13
+ icon?: string | null;
14
+ href?: string | null;
15
+ };
16
+ type OpenEditorPageRuntime = {
17
+ createPage?: (input: {
18
+ title: string;
19
+ icon?: string | null;
20
+ }) => Promise<OpenEditorPageSnapshot>;
21
+ resolvePage?: (pageId: string) => Promise<OpenEditorPageSnapshot | null>;
22
+ renamePage?: (pageId: string, title: string) => Promise<void> | void;
23
+ openPage?: (page: OpenEditorPageSnapshot) => Promise<void> | void;
24
+ };
10
25
  type OpenEditorReactProps = {
11
26
  initialDocument?: OpenEditorDocument;
12
27
  editable?: boolean;
13
28
  placeholder?: string;
14
29
  onChange?: (document: OpenEditorDocument) => void;
15
30
  onFilePasteDrop?: (file: File) => boolean;
31
+ pageRuntime?: OpenEditorPageRuntime;
16
32
  slashMenuItems?: readonly OpenEditorSlashMenuItem[];
17
33
  /** Consumer-owned blocks. Extension names and node types must be unique. */
18
34
  extensions?: readonly OpenEditorReactExtension[];
@@ -50,6 +66,7 @@ type OpenEditorController = {
50
66
  deleteSelectedBlock: () => void;
51
67
  slashMenuItems: readonly OpenEditorSlashMenuItem[];
52
68
  extensions: readonly OpenEditorReactExtension[];
69
+ pageRuntime?: OpenEditorPageRuntime;
53
70
  slashState: SlashState | null;
54
71
  selectionBubbleState: SelectionBubbleState | null;
55
72
  };
@@ -125,6 +142,7 @@ type OpenEditorViewerProps = {
125
142
  className?: string;
126
143
  renderers?: Partial<Record<string, OpenEditorViewerRenderer>>;
127
144
  extensions?: readonly OpenEditorReactExtension[];
145
+ pageRuntime?: OpenEditorPageRuntime;
128
146
  };
129
147
  declare module "@tiptap/core" {
130
148
  interface Commands<ReturnType> {
@@ -133,10 +151,10 @@ declare module "@tiptap/core" {
133
151
  };
134
152
  }
135
153
  }
136
- declare const useOpenEditorController: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
154
+ declare const useOpenEditorController: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
137
155
  declare const getDefaultSlashMenuItems: (controller: OpenEditorController) => OpenEditorSlashMenuItem[];
138
156
  declare const OpenEditorContent: ({ controller, className, }: OpenEditorContentProps) => react.JSX.Element;
139
- declare const OpenEditorViewer: ({ document, className, renderers, extensions, }: OpenEditorViewerProps) => react.JSX.Element;
140
- declare const useOpenEditor: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
157
+ declare const OpenEditorViewer: ({ document, className, renderers, extensions, pageRuntime, }: OpenEditorViewerProps) => react.JSX.Element;
158
+ declare const useOpenEditor: ({ initialDocument, editable, placeholder, onChange, onFilePasteDrop, pageRuntime, slashMenuItems, extensions, }?: OpenEditorReactProps) => OpenEditorController;
141
159
 
142
- export { type InsertRange, OpenEditorContent, type OpenEditorContentProps, type OpenEditorController, type OpenEditorExtensionMenu, type OpenEditorOverlayRect, type OpenEditorReactConfig, type OpenEditorReactExtension, type OpenEditorReactNodeExtension, type OpenEditorReactProps, type OpenEditorSlashMenuItem, OpenEditorViewer, type OpenEditorViewerProps, type OpenEditorViewerRenderer, type SelectionBubbleState, type SlashState, defineOpenEditorReactExtension, defineOpenEditorReactNode, getDefaultSlashMenuItems, useOpenEditor, useOpenEditorController };
160
+ export { type InsertRange, OpenEditorContent, type OpenEditorContentProps, type OpenEditorController, type OpenEditorExtensionMenu, type OpenEditorOverlayRect, type OpenEditorPageRuntime, type OpenEditorPageSnapshot, type OpenEditorReactConfig, type OpenEditorReactExtension, type OpenEditorReactNodeExtension, type OpenEditorReactProps, type OpenEditorSlashMenuItem, OpenEditorViewer, type OpenEditorViewerProps, type OpenEditorViewerRenderer, type SelectionBubbleState, type SlashState, defineOpenEditorReactExtension, defineOpenEditorReactNode, getDefaultSlashMenuItems, useOpenEditor, useOpenEditorController };
package/dist/index.js CHANGED
@@ -22,10 +22,11 @@ import { ReplaceStep } from '@tiptap/pm/transform';
22
22
  import { ReactNodeViewRenderer, NodeViewWrapper, NodeViewContent, useEditor, EditorContent } from '@tiptap/react';
23
23
  export { NodeViewContent, NodeViewWrapper } from '@tiptap/react';
24
24
  import StarterKit from '@tiptap/starter-kit';
25
- import { useMemo, useState, useRef, useEffect } from 'react';
26
- import { jsxs, jsx } from 'react/jsx-runtime';
25
+ import { createContext, use, useState, useMemo, useRef, useEffect, Fragment } from 'react';
26
+ import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
27
27
 
28
28
  // src/index.tsx
29
+ var OpenEditorPageRuntimeContext = createContext(void 0);
29
30
  var defineOpenEditorReactExtension = (extension) => extension;
30
31
  var defineOpenEditorReactNode = ({
31
32
  block,
@@ -355,6 +356,136 @@ var Callout = Node.create({
355
356
  return ReactNodeViewRenderer(OpenEditorCalloutNodeView);
356
357
  }
357
358
  });
359
+ var pageSnapshotFromNode = (node) => {
360
+ const pageId = typeof node.attrs?.pageId === "string" ? node.attrs.pageId : "";
361
+ if (!pageId) return null;
362
+ return {
363
+ pageId,
364
+ title: node.textContent || getNodeText(node) || "Untitled",
365
+ icon: typeof node.attrs?.icon === "string" ? node.attrs.icon : "\u{1F4C4}",
366
+ href: typeof node.attrs?.href === "string" ? node.attrs.href : null
367
+ };
368
+ };
369
+ var OpenEditorPageNodeView = ({ editor, node, updateAttributes }) => {
370
+ const runtime = use(OpenEditorPageRuntimeContext);
371
+ const [creating, setCreating] = useState(false);
372
+ const [error, setError] = useState(null);
373
+ const snapshot = pageSnapshotFromNode(node);
374
+ const icon = typeof node.attrs.icon === "string" ? node.attrs.icon : "\u{1F4C4}";
375
+ const createPage = async () => {
376
+ if (!runtime?.createPage || creating) return;
377
+ setCreating(true);
378
+ setError(null);
379
+ try {
380
+ const created = await runtime.createPage({ title: node.textContent || "Untitled", icon });
381
+ updateAttributes({ pageId: created.pageId, icon: created.icon ?? icon, href: created.href ?? null });
382
+ } catch (cause) {
383
+ setError(cause instanceof Error ? cause.message : "Could not create the page.");
384
+ } finally {
385
+ setCreating(false);
386
+ }
387
+ };
388
+ return /* @__PURE__ */ jsxs(NodeViewWrapper, { className: "oe-page", "data-page-id": snapshot?.pageId ?? "", children: [
389
+ /* @__PURE__ */ jsx(
390
+ "input",
391
+ {
392
+ "aria-label": "Page icon",
393
+ className: "oe-page-icon-input",
394
+ contentEditable: false,
395
+ disabled: !editor.isEditable,
396
+ maxLength: 8,
397
+ onChange: (event) => updateAttributes({ icon: event.target.value || "\u{1F4C4}" }),
398
+ value: icon
399
+ }
400
+ ),
401
+ /* @__PURE__ */ jsx(
402
+ NodeViewContent,
403
+ {
404
+ as: "div",
405
+ className: "oe-page-title",
406
+ onBlur: () => {
407
+ if (snapshot?.pageId) void runtime?.renamePage?.(snapshot.pageId, node.textContent || "Untitled");
408
+ }
409
+ }
410
+ ),
411
+ snapshot ? /* @__PURE__ */ jsxs(
412
+ "button",
413
+ {
414
+ "aria-label": `Open ${snapshot.title}`,
415
+ className: "oe-page-action",
416
+ contentEditable: false,
417
+ onClick: () => void runtime?.openPage?.(snapshot),
418
+ type: "button",
419
+ children: [
420
+ "Open ",
421
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u2192" })
422
+ ]
423
+ }
424
+ ) : runtime?.createPage && editor.isEditable ? /* @__PURE__ */ jsx(
425
+ "button",
426
+ {
427
+ className: "oe-page-action",
428
+ contentEditable: false,
429
+ disabled: creating,
430
+ onClick: () => void createPage(),
431
+ type: "button",
432
+ children: creating ? "Creating\u2026" : "Create page"
433
+ }
434
+ ) : null,
435
+ error ? /* @__PURE__ */ jsx("span", { className: "oe-page-error", contentEditable: false, role: "alert", children: error }) : null
436
+ ] });
437
+ };
438
+ var Page = Node.create({
439
+ name: "page",
440
+ group: "block",
441
+ content: "inline*",
442
+ defining: true,
443
+ addAttributes: () => ({
444
+ pageId: { default: null },
445
+ icon: { default: "\u{1F4C4}" },
446
+ href: { default: null }
447
+ }),
448
+ parseHTML: () => [{ tag: "div[data-openeditor-page]" }, { tag: "a[data-openeditor-page]" }],
449
+ renderHTML: ({ HTMLAttributes }) => [
450
+ "div",
451
+ mergeAttributes(HTMLAttributes, { "data-openeditor-page": "" }),
452
+ 0
453
+ ],
454
+ addNodeView() {
455
+ return ReactNodeViewRenderer(OpenEditorPageNodeView);
456
+ }
457
+ });
458
+ var OpenEditorPageViewer = ({ node }) => {
459
+ const runtime = use(OpenEditorPageRuntimeContext);
460
+ const cached = pageSnapshotFromNode(node);
461
+ const [resolved, setResolved] = useState(null);
462
+ useEffect(() => {
463
+ let active = true;
464
+ setResolved(null);
465
+ if (cached?.pageId && runtime?.resolvePage) {
466
+ void runtime.resolvePage(cached.pageId).then((page2) => {
467
+ if (active && page2) setResolved(page2);
468
+ });
469
+ }
470
+ return () => {
471
+ active = false;
472
+ };
473
+ }, [cached?.pageId, runtime]);
474
+ const page = resolved ?? cached;
475
+ const title = page?.title ?? (getNodeText(node) || "Untitled");
476
+ const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
477
+ /* @__PURE__ */ jsx("span", { className: "oe-page-icon", "aria-hidden": "true", children: page?.icon ?? "\u{1F4C4}" }),
478
+ /* @__PURE__ */ jsx("span", { className: "oe-page-title", children: title }),
479
+ /* @__PURE__ */ jsx("span", { className: "oe-page-arrow", "aria-hidden": "true", children: "\u2192" })
480
+ ] });
481
+ if (page && runtime?.openPage) {
482
+ return /* @__PURE__ */ jsx("button", { className: "oe-page oe-page-viewer", onClick: () => void runtime.openPage?.(page), type: "button", children: content });
483
+ }
484
+ if (page?.href) {
485
+ return /* @__PURE__ */ jsx("a", { className: "oe-page oe-page-viewer", href: page.href, children: content });
486
+ }
487
+ return /* @__PURE__ */ jsx("div", { className: "oe-page oe-page-viewer", children: content });
488
+ };
358
489
  var MermaidPreview = ({ code }) => {
359
490
  const rendered = useMemo(() => {
360
491
  try {
@@ -446,6 +577,7 @@ var createEditorExtensions = (placeholder, customExtensions) => [
446
577
  ToggleList,
447
578
  ToggleListItem,
448
579
  Callout,
580
+ Page,
449
581
  MermaidDiagram,
450
582
  ...customExtensions.flatMap((extension) => extension.tiptapExtensions)
451
583
  ];
@@ -457,6 +589,7 @@ var createReactExporters = (extensions) => ({
457
589
  html: Object.assign({}, ...extensions.map((extension) => extension.exporters?.html ?? {})),
458
590
  text: Object.assign({}, ...extensions.map((extension) => extension.exporters?.text ?? {}))
459
591
  });
592
+ var getNodeText = (node) => node.text ?? node.content?.map((child) => getNodeText(child)).join("") ?? "";
460
593
  var toOverlayRect = (coordinates) => ({
461
594
  left: coordinates.left,
462
595
  right: coordinates.right,
@@ -539,6 +672,7 @@ var useOpenEditorController = ({
539
672
  placeholder = "Start writing...",
540
673
  onChange,
541
674
  onFilePasteDrop,
675
+ pageRuntime,
542
676
  slashMenuItems = [],
543
677
  extensions = EMPTY_EXTENSIONS
544
678
  } = {}) => {
@@ -772,6 +906,7 @@ var useOpenEditorController = ({
772
906
  deleteSelectedBlock,
773
907
  slashMenuItems,
774
908
  extensions,
909
+ pageRuntime,
775
910
  slashState,
776
911
  selectionBubbleState
777
912
  };
@@ -845,7 +980,7 @@ var renderViewerNode = (node, key, renderers, registry = defaultBlockRegistry) =
845
980
  const blockKey = findBlockSpecForNode(registry, node)?.name ?? node.type;
846
981
  const customRenderer = renderers?.[blockKey];
847
982
  if (customRenderer) {
848
- return customRenderer({ node, children });
983
+ return /* @__PURE__ */ jsx(Fragment, { children: customRenderer({ node, children }) }, key);
849
984
  }
850
985
  switch (blockKey) {
851
986
  case "paragraph":
@@ -893,6 +1028,8 @@ var renderViewerNode = (node, key, renderers, registry = defaultBlockRegistry) =
893
1028
  const code = typeof node.attrs?.code === "string" ? node.attrs.code : "";
894
1029
  return /* @__PURE__ */ jsx("figure", { className: "oe-diagram", children: /* @__PURE__ */ jsx(MermaidPreview, { code }) }, key);
895
1030
  }
1031
+ case "page":
1032
+ return /* @__PURE__ */ jsx(OpenEditorPageViewer, { node }, key);
896
1033
  default:
897
1034
  if (node.type === "column") {
898
1035
  return /* @__PURE__ */ jsx("div", { children }, key);
@@ -930,22 +1067,23 @@ var OpenEditorContent = ({
930
1067
  className = "oe-canvas"
931
1068
  }) => {
932
1069
  const internalController = controller;
933
- return /* @__PURE__ */ jsx(EditorContent, { editor: internalController.editor, className });
1070
+ return /* @__PURE__ */ jsx(OpenEditorPageRuntimeContext.Provider, { value: internalController.pageRuntime, children: /* @__PURE__ */ jsx(EditorContent, { editor: internalController.editor, className }) });
934
1071
  };
935
1072
  var OpenEditorViewer = ({
936
1073
  document,
937
1074
  className = "oe-viewer",
938
1075
  renderers,
939
- extensions = EMPTY_EXTENSIONS
1076
+ extensions = EMPTY_EXTENSIONS,
1077
+ pageRuntime
940
1078
  }) => {
941
1079
  const registry = createReactBlockRegistry(extensions);
942
1080
  const extensionRenderers = Object.fromEntries(
943
1081
  extensions.map((extension) => [extension.block.name, extension.viewer])
944
1082
  );
945
1083
  const mergedRenderers = { ...extensionRenderers, ...renderers };
946
- return /* @__PURE__ */ jsx("div", { className, children: normalizeDocument(document).content.map(
1084
+ return /* @__PURE__ */ jsx(OpenEditorPageRuntimeContext.Provider, { value: pageRuntime, children: /* @__PURE__ */ jsx("div", { className, children: normalizeDocument(document).content.map(
947
1085
  (node, index) => renderViewerNode(node, `viewer-${index}`, mergedRenderers, registry)
948
- ) });
1086
+ ) }) });
949
1087
  };
950
1088
  var useOpenEditor = useOpenEditorController;
951
1089
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {\n createBlockRegistry,\n deleteTopLevelBlock,\n duplicateTopLevelBlock,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n moveTopLevelBlock,\n normalizeDocument,\n toProseMirrorDocument,\n type ProseMirrorMark,\n type ProseMirrorNode,\n type OpenEditorDocument,\n type BlockRegistry,\n type BlockSpec,\n} from \"@openeditor/core\";\nimport { Checkbox } from \"@base-ui/react/checkbox\";\nimport { renderMermaidSVG } from \"beautiful-mermaid\";\nimport { toExportBundle, type OpenEditorExporters } from \"@openeditor/exporters\";\nimport {\n defaultBlockRegistry,\n createOpenEditorInsertBlock,\n openEditorInsertPresets,\n seedDocument,\n} from \"@openeditor/extensions\";\nimport { InputRule, mergeAttributes, Node, type AnyExtension, type Editor, type NodeConfig } from \"@tiptap/core\";\nimport HorizontalRule from \"@tiptap/extension-horizontal-rule\";\nimport Image from \"@tiptap/extension-image\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { Table } from \"@tiptap/extension-table\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Underline from \"@tiptap/extension-underline\";\nimport { NodeSelection, Plugin } from \"@tiptap/pm/state\";\nimport { ReplaceStep } from \"@tiptap/pm/transform\";\nimport {\n EditorContent,\n NodeViewContent,\n NodeViewWrapper,\n ReactNodeViewRenderer,\n useEditor,\n type ReactNodeViewProps,\n} from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { useEffect, useMemo, useRef, useState, type ComponentType, type ReactNode } from \"react\";\n\nexport type OpenEditorReactProps = {\n initialDocument?: OpenEditorDocument;\n editable?: boolean;\n placeholder?: string;\n onChange?: (document: OpenEditorDocument) => void;\n onFilePasteDrop?: (file: File) => boolean;\n slashMenuItems?: readonly OpenEditorSlashMenuItem[];\n /** Consumer-owned blocks. Extension names and node types must be unique. */\n extensions?: readonly OpenEditorReactExtension[];\n};\n\nexport type OpenEditorReactConfig = OpenEditorReactProps;\n\nexport type OpenEditorController = {\n editor: Editor | null;\n document: OpenEditorDocument;\n exports: ReturnType<typeof toExportBundle>;\n editable: boolean;\n placeholder: string;\n selectedBlock: string;\n setSelectedBlock: (blockName: string) => void;\n getContent: () => OpenEditorDocument;\n setContent: (document: OpenEditorDocument) => void;\n setParagraph: () => void;\n toggleHeading: (level: 1 | 2 | 3 | 4 | 5 | 6) => void;\n toggleBold: () => void;\n toggleItalic: () => void;\n toggleUnderline: () => void;\n toggleStrike: () => void;\n toggleInlineCode: () => void;\n toggleBulletList: () => void;\n toggleOrderedList: () => void;\n toggleTaskList: () => void;\n toggleBlockquote: () => void;\n toggleCodeBlock: () => void;\n undo: () => void;\n redo: () => void;\n insertBlock: (blockName?: string, range?: InsertRange) => void;\n setLink: (url?: string | null) => void;\n getActiveLink: () => string | undefined;\n moveSelectedBlock: (direction: -1 | 1) => void;\n duplicateSelectedBlock: () => void;\n deleteSelectedBlock: () => void;\n slashMenuItems: readonly OpenEditorSlashMenuItem[];\n extensions: readonly OpenEditorReactExtension[];\n slashState: SlashState | null;\n selectionBubbleState: SelectionBubbleState | null;\n};\n\nexport type OpenEditorContentProps = {\n controller: OpenEditorController;\n className?: string;\n};\n\ntype InternalOpenEditorController = OpenEditorController & {\n editor: Editor | null;\n};\n\ntype RenderAttributes = Record<string, string | number | boolean | null | undefined>;\nexport type InsertRange = { from: number; to: number };\nexport type OpenEditorOverlayRect = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\nexport type SlashState = {\n query: string;\n from: number;\n to: number;\n left: number;\n top: number;\n anchorRect?: OpenEditorOverlayRect;\n};\nexport type SelectionBubbleState = {\n left: number;\n top: number;\n anchorRect?: OpenEditorOverlayRect;\n};\nexport type OpenEditorSlashMenuItem = {\n key: string;\n label: string;\n group: string;\n keywords?: readonly string[];\n run: (context: { controller: OpenEditorController; range: InsertRange }) => void;\n};\n\nexport type OpenEditorViewerRenderer = (context: {\n node: ProseMirrorNode;\n children: ReactNode;\n}) => ReactNode;\n\nexport type OpenEditorExtensionMenu = {\n label?: string;\n group?: string;\n keywords?: readonly string[];\n};\n\n/**\n * Complete web integration for a consumer-owned block. The portable `block`\n * contract is shared by commands and platform support; the other fields are\n * adapters for the React/Tiptap runtime and non-interactive output.\n */\nexport type OpenEditorReactExtension = {\n block: BlockSpec;\n tiptapExtensions: readonly AnyExtension[];\n slashMenu?: false | OpenEditorExtensionMenu;\n viewer: OpenEditorViewerRenderer;\n exporters?: OpenEditorExporters;\n};\n\nexport const defineOpenEditorReactExtension = <T extends OpenEditorReactExtension>(extension: T): T => extension;\n\nexport type OpenEditorReactNodeExtension = Omit<OpenEditorReactExtension, \"tiptapExtensions\"> & {\n node: Omit<Partial<NodeConfig>, \"name\" | \"addNodeView\">;\n component: ComponentType<ReactNodeViewProps>;\n};\n\n/** Creates the common case: one custom ProseMirror node rendered by one React node view. */\nexport const defineOpenEditorReactNode = ({\n block,\n node,\n component,\n ...extension\n}: OpenEditorReactNodeExtension): OpenEditorReactExtension => ({\n ...extension,\n block,\n tiptapExtensions: [\n Node.create({\n ...node,\n name: block.nodeType ?? block.name,\n addNodeView() {\n return ReactNodeViewRenderer(component);\n },\n }),\n ],\n});\n\nexport type OpenEditorViewerProps = {\n document: OpenEditorDocument;\n className?: string;\n renderers?: Partial<Record<string, OpenEditorViewerRenderer>>;\n extensions?: readonly OpenEditorReactExtension[];\n};\n\nconst EMPTY_EXTENSIONS: readonly OpenEditorReactExtension[] = [];\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n columns: {\n insertColumns: (count?: 2 | 3 | 4) => ReturnType;\n };\n }\n}\n\nconst COMMON_HTML_ATTRIBUTES = [\"id\", \"class\", \"title\", \"lang\", \"dir\", \"data-id\", \"style\"] as const;\nconst LAYOUT_ATTRIBUTES = [\"align\", \"width\", \"height\"] as const;\nconst URL_ATTRIBUTES = new Set([\"href\", \"src\"]);\nconst FORBIDDEN_PASTE_TAGS = new Set([\"script\", \"iframe\", \"object\", \"embed\", \"meta\", \"base\"]);\n\nconst createStandardAttributes = (attributeNames: readonly string[]) =>\n Object.fromEntries(\n attributeNames.map((attribute) => [\n attribute,\n {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(attribute),\n renderHTML: (attributes: Record<string, unknown>) =>\n attributes[attribute] ? { [attribute]: attributes[attribute] } : {},\n },\n ]),\n );\n\nconst isSafeUrl = (value: string, allowDataImage: boolean) => {\n const normalized = value.trim().toLowerCase();\n\n if (normalized.startsWith(\"javascript:\") || normalized.startsWith(\"vbscript:\")) {\n return false;\n }\n\n if (normalized.startsWith(\"data:\")) {\n return allowDataImage && normalized.startsWith(\"data:image/\");\n }\n\n return true;\n};\n\nconst sanitizePastedHtml = (html: string) => {\n const parser = new DOMParser();\n const parsed = parser.parseFromString(html, \"text/html\");\n const isFromOpenEditor = /data-openeditor-|oe-|node-/.test(html);\n const preservedAttributes: Record<string, string[]> = {\n a: [\"href\", \"target\", \"rel\"],\n img: [\"src\", \"alt\", \"width\", \"height\"],\n td: [\"colspan\", \"rowspan\"],\n th: [\"colspan\", \"rowspan\", \"scope\"],\n table: [\"border\", \"cellpadding\", \"cellspacing\"],\n \"*\": [\"id\"],\n };\n\n for (const tag of FORBIDDEN_PASTE_TAGS) {\n for (const element of Array.from(parsed.body.getElementsByTagName(tag))) {\n element.remove();\n }\n }\n\n for (const element of Array.from(parsed.body.querySelectorAll<HTMLElement>(\"[href], [src]\"))) {\n const allowDataImage = element.tagName.toLowerCase() === \"img\";\n\n for (const attribute of URL_ATTRIBUTES) {\n const value = element.getAttribute(attribute);\n if (value !== null && !isSafeUrl(value, allowDataImage)) {\n element.removeAttribute(attribute);\n }\n }\n }\n\n if (isFromOpenEditor) {\n return parsed.body.innerHTML;\n }\n\n const sanitizeElement = (node: globalThis.Node) => {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n const allowed = new Set([...(preservedAttributes[tagName] ?? []), ...(preservedAttributes[\"*\"] ?? [])]);\n\n for (const attribute of Array.from(element.attributes)) {\n if (attribute.name.startsWith(\"data-\") || !allowed.has(attribute.name)) {\n element.removeAttribute(attribute.name);\n }\n }\n }\n\n for (const child of Array.from(node.childNodes)) {\n sanitizeElement(child);\n }\n };\n\n sanitizeElement(parsed.body);\n return parsed.body.innerHTML;\n};\n\nconst Columns = Node.create({\n name: \"columns\",\n group: \"block\",\n content: \"column+\",\n isolating: true,\n defining: true,\n addAttributes() {\n return createStandardAttributes([...COMMON_HTML_ATTRIBUTES, ...LAYOUT_ATTRIBUTES, \"cellspacing\"]);\n },\n parseHTML() {\n return [{ tag: \"section[data-openeditor-columns]\" }];\n },\n renderHTML({ node, HTMLAttributes }) {\n const count = node.childCount;\n return [\n \"section\",\n mergeAttributes(\n {\n class: \"oe-columns\",\n \"data-openeditor-columns\": count,\n style: `--oe-column-count:${Math.min(Math.max(count, 2), 4)};${HTMLAttributes.style ?? \"\"}`,\n },\n HTMLAttributes,\n ),\n 0,\n ];\n },\n addCommands() {\n return {\n insertColumns:\n (count: 2 | 3 | 4 = 2) =>\n ({ commands }) =>\n commands.insertContent({\n type: \"columns\",\n content: Array.from({ length: count }, (_, index) => ({\n type: \"column\",\n content: [\n {\n type: \"paragraph\",\n content: [{ type: \"text\", text: `Column ${index + 1}` }],\n },\n ],\n })),\n }),\n };\n },\n addKeyboardShortcuts() {\n return {\n Backspace: ({ editor }) => {\n const { selection } = editor.state;\n\n if (!(selection instanceof NodeSelection) || selection.node.type.name !== \"columns\") {\n return false;\n }\n\n const allColumnsEmpty = Array.from({ length: selection.node.childCount }, (_, index) =>\n selection.node.child(index),\n ).every(\n (column) =>\n column.childCount === 1 &&\n column.firstChild?.type.name === \"paragraph\" &&\n column.firstChild.childCount === 0,\n );\n\n if (!allColumnsEmpty) {\n return false;\n }\n\n editor.view.dispatch(\n editor.state.tr.replaceWith(selection.from, selection.to, editor.state.schema.nodes.paragraph.create()),\n );\n return true;\n },\n };\n },\n});\n\nconst Column = Node.create({\n name: \"column\",\n content: \"block+\",\n isolating: true,\n defining: true,\n addAttributes() {\n return createStandardAttributes([...COMMON_HTML_ATTRIBUTES, ...LAYOUT_ATTRIBUTES]);\n },\n parseHTML() {\n return [{ tag: \"div[data-openeditor-column]\" }];\n },\n renderHTML({ HTMLAttributes }: { HTMLAttributes: RenderAttributes }) {\n return [\"div\", mergeAttributes({ \"data-openeditor-column\": \"\", class: \"oe-column\" }, HTMLAttributes), 0];\n },\n});\n\nconst Divider = HorizontalRule.extend({\n addAttributes() {\n return {\n ...createStandardAttributes([\"class\", \"style\"]),\n class: {\n default: \"oe-divider\",\n },\n };\n },\n addInputRules() {\n return [\n new InputRule({\n find: /^(?:---|___|\\*\\*\\*)$/,\n handler: ({ state, range }) => {\n const { tr } = state;\n tr.insert(range.from - 1, this.type.create()).delete(tr.mapping.map(range.from), tr.mapping.map(range.to));\n },\n }),\n ];\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n filterTransaction(transaction, state) {\n const { selection } = state;\n const isDividerSelection = selection instanceof NodeSelection && selection.node.type.name === \"horizontalRule\";\n const isTypingOverDivider = transaction.steps.some(\n (step) => step instanceof ReplaceStep && step.slice.content.size > 0,\n );\n\n return !(isDividerSelection && transaction.docChanged && isTypingOverDivider);\n },\n }),\n ];\n },\n});\n\nconst OpenEditorTaskCheckbox = ({\n checked,\n label,\n readOnly = false,\n tabIndex,\n onCheckedChange,\n}: {\n checked: boolean;\n label: string;\n readOnly?: boolean;\n tabIndex?: number;\n onCheckedChange?: (checked: boolean) => void;\n}) => (\n <Checkbox.Root\n aria-label={label}\n checked={checked}\n className=\"oe-task-checkbox\"\n onCheckedChange={onCheckedChange}\n onMouseDown={(event) => event.preventDefault()}\n readOnly={readOnly}\n tabIndex={tabIndex}\n >\n <Checkbox.Indicator className=\"oe-task-checkbox-indicator\" keepMounted />\n </Checkbox.Root>\n);\n\nconst OpenEditorTaskItemNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const checked = Boolean(node.attrs.checked);\n\n return (\n <NodeViewWrapper as=\"li\" data-checked={checked ? \"true\" : \"false\"}>\n <span className=\"oe-task-item-checkbox\" contentEditable={false}>\n <OpenEditorTaskCheckbox\n checked={checked}\n label={`Task item checkbox for ${node.textContent || \"empty task item\"}`}\n onCheckedChange={(nextChecked) => {\n if (editor.isEditable) {\n updateAttributes({ checked: nextChecked });\n }\n }}\n readOnly={!editor.isEditable}\n />\n </span>\n <NodeViewContent as=\"div\" />\n </NodeViewWrapper>\n );\n};\n\nconst BaseUiTaskItem = TaskItem.extend({\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorTaskItemNodeView);\n },\n});\n\nconst ToggleList = Node.create({\n name: \"toggleList\",\n group: \"block\",\n content: \"toggleListItem+\",\n parseHTML: () => [{ tag: \"ul[data-openeditor-toggle-list]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"ul\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-toggle-list\": \"\" }),\n 0,\n ],\n});\n\nconst OpenEditorToggleListItemNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const open = Boolean(node.attrs.open);\n\n return (\n <NodeViewWrapper as=\"li\" className=\"oe-toggle-list-item\" data-open={open ? \"true\" : \"false\"}>\n <button\n aria-expanded={open}\n aria-label={open ? \"Collapse toggle item\" : \"Expand toggle item\"}\n className=\"oe-toggle-list-trigger\"\n contentEditable={false}\n disabled={!editor.isEditable}\n onClick={() => updateAttributes({ open: !open })}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"oe-toggle-list-chevron\">β€Ί</span>\n </button>\n <NodeViewContent as=\"div\" className=\"oe-toggle-list-content\" />\n </NodeViewWrapper>\n );\n};\n\nconst ToggleListItem = Node.create({\n name: \"toggleListItem\",\n content: \"paragraph block*\",\n defining: true,\n addAttributes: () => ({ open: { default: true } }),\n parseHTML: () => [{ tag: \"li[data-openeditor-toggle-list-item]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"li\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-toggle-list-item\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorToggleListItemNodeView);\n },\n});\n\nconst CALLOUT_TONES = [\"info\", \"success\", \"warning\", \"danger\"] as const;\n\nconst normalizeCalloutTone = (value: unknown) =>\n CALLOUT_TONES.includes(value as (typeof CALLOUT_TONES)[number]) ? String(value) : \"info\";\n\nconst OpenEditorCalloutNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => (\n <NodeViewWrapper as=\"aside\" className=\"oe-callout\" data-tone={normalizeCalloutTone(node.attrs.tone)}>\n <select\n aria-label=\"Callout tone\"\n className=\"oe-callout-tone\"\n contentEditable={false}\n disabled={!editor.isEditable}\n onChange={(event) => updateAttributes({ tone: event.target.value })}\n value={normalizeCalloutTone(node.attrs.tone)}\n >\n {CALLOUT_TONES.map((tone) => <option key={tone} value={tone}>{tone}</option>)}\n </select>\n <NodeViewContent as=\"div\" className=\"oe-callout-content\" />\n </NodeViewWrapper>\n);\n\nconst Callout = Node.create({\n name: \"callout\",\n group: \"block\",\n content: \"block+\",\n defining: true,\n addAttributes: () => ({ tone: { default: \"info\" } }),\n parseHTML: () => [{ tag: \"aside[data-openeditor-callout]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"aside\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-callout\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorCalloutNodeView);\n },\n});\n\nconst MermaidPreview = ({ code }: { code: string }) => {\n const rendered = useMemo(() => {\n try {\n return {\n error: null,\n svg: renderMermaidSVG(code, {\n bg: \"var(--oe-surface, #ffffff)\",\n fg: \"var(--oe-text, #171717)\",\n accent: \"var(--oe-accent-strong, #171717)\",\n border: \"var(--oe-border-strong, #d4d4d4)\",\n muted: \"var(--oe-muted, #737373)\",\n surface: \"var(--oe-surface-muted, #f5f5f5)\",\n transparent: true,\n }),\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n svg: null,\n };\n }\n }, [code]);\n\n return rendered.error ? (\n <pre className=\"oe-diagram-error\" role=\"alert\">{rendered.error}</pre>\n ) : (\n <div className=\"oe-diagram-preview\" dangerouslySetInnerHTML={{ __html: rendered.svg ?? \"\" }} />\n );\n};\n\nconst ToggleListViewerItem = ({ children, initiallyOpen }: { children: ReactNode; initiallyOpen: boolean }) => {\n const [open, setOpen] = useState(initiallyOpen);\n return (\n <li className=\"oe-toggle-list-item\" data-open={open ? \"true\" : \"false\"}>\n <button\n aria-expanded={open}\n aria-label={open ? \"Collapse toggle item\" : \"Expand toggle item\"}\n className=\"oe-toggle-list-trigger\"\n onClick={() => setOpen((current) => !current)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"oe-toggle-list-chevron\">β€Ί</span>\n </button>\n <div className=\"oe-toggle-list-content\">{children}</div>\n </li>\n );\n};\n\nconst OpenEditorDiagramNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const code = typeof node.attrs.code === \"string\" ? node.attrs.code : \"\";\n return (\n <NodeViewWrapper className=\"oe-diagram\" contentEditable={false}>\n <MermaidPreview code={code} />\n {editor.isEditable ? (\n <textarea\n aria-label=\"Mermaid diagram source\"\n className=\"oe-diagram-source\"\n onChange={(event) => updateAttributes({ code: event.target.value })}\n spellCheck={false}\n value={code}\n />\n ) : null}\n </NodeViewWrapper>\n );\n};\n\nconst MermaidDiagram = Node.create({\n name: \"mermaidDiagram\",\n group: \"block\",\n atom: true,\n draggable: true,\n addAttributes: () => ({ code: { default: \"\" } }),\n parseHTML: () => [{ tag: \"figure[data-openeditor-diagram]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"figure\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-diagram\": \"\" }),\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorDiagramNodeView);\n },\n});\n\nconst createEditorExtensions = (\n placeholder: string,\n customExtensions: readonly OpenEditorReactExtension[],\n) => [\n StarterKit.configure({ horizontalRule: false, link: false, underline: false }),\n Divider,\n Image.configure({ allowBase64: true }),\n Link.configure({ openOnClick: false }),\n Underline,\n TaskList,\n BaseUiTaskItem.configure({ nested: true }),\n Table.configure({ resizable: true }),\n TableRow,\n TableHeader,\n TableCell,\n TextAlign.configure({ types: [\"heading\", \"paragraph\"] }),\n Placeholder.configure({ placeholder }),\n Columns,\n Column,\n ToggleList,\n ToggleListItem,\n Callout,\n 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 slashMenuItems = [],\n extensions = EMPTY_EXTENSIONS,\n}: OpenEditorReactProps = {}): OpenEditorController => {\n const [document, setDocument] = useState(normalizeDocument(initialDocument));\n const [selectedBlock, setSelectedBlock] = useState(\"paragraph\");\n const [slashState, setSlashState] = useState<SlashState | null>(null);\n const [selectionBubbleState, setSelectionBubbleState] = useState<SelectionBubbleState | null>(null);\n const slashStateRef = useRef<SlashState | null>(null);\n const selectionBubbleStateRef = useRef<SelectionBubbleState | null>(null);\n const registry = useMemo(() => createReactBlockRegistry(extensions), [extensions]);\n const exporters = useMemo(() => createReactExporters(extensions), [extensions]);\n const editor = useEditor({\n immediatelyRender: false,\n extensions: createEditorExtensions(placeholder, extensions),\n content: toProseMirrorDocument(normalizeDocument(initialDocument)),\n editable,\n editorProps: {\n attributes: {\n class: \"oe-prosemirror\",\n \"aria-label\": \"OpenEditor document\",\n },\n transformPastedHTML: sanitizePastedHtml,\n handlePaste: (_view, event) => {\n const file = event.clipboardData?.files?.[0];\n\n if (!file || !onFilePasteDrop?.(file)) {\n return false;\n }\n\n event.preventDefault();\n return true;\n },\n handleDrop: (_view, event, _slice, moved) => {\n const file = event.dataTransfer?.files?.[0];\n\n if (moved || !file || !onFilePasteDrop?.(file)) {\n return false;\n }\n\n event.preventDefault();\n return true;\n },\n },\n onUpdate: ({ editor: currentEditor }) => {\n const nextDocument = normalizeDocument(\n fromProseMirrorDocument(\n currentEditor.getJSON(),\n initialDocument.meta,\n ),\n );\n setDocument(nextDocument);\n onChange?.(nextDocument);\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(getSelectionBubbleState(currentEditor));\n },\n onSelectionUpdate: ({ editor: currentEditor }) => {\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(getSelectionBubbleState(currentEditor));\n },\n }, [extensions]);\n const exports = useMemo(\n () => toExportBundle(document, exporters),\n [document, exporters],\n );\n\n useEffect(() => {\n slashStateRef.current = slashState;\n }, [slashState]);\n\n useEffect(() => {\n selectionBubbleStateRef.current = selectionBubbleState;\n }, [selectionBubbleState]);\n\n useEffect(() => {\n if (!editor || typeof window === \"undefined\") {\n return;\n }\n\n let animationFrame = 0;\n\n const refreshOverlayAnchors = () => {\n if (!slashStateRef.current && !selectionBubbleStateRef.current) {\n return;\n }\n\n window.cancelAnimationFrame(animationFrame);\n animationFrame = window.requestAnimationFrame(() => {\n if (slashStateRef.current) {\n setSlashState(getSlashState(editor));\n }\n\n if (selectionBubbleStateRef.current) {\n setSelectionBubbleState(getSelectionBubbleState(editor));\n }\n });\n };\n\n window.addEventListener(\"scroll\", refreshOverlayAnchors, true);\n window.addEventListener(\"resize\", refreshOverlayAnchors);\n\n return () => {\n window.cancelAnimationFrame(animationFrame);\n window.removeEventListener(\"scroll\", refreshOverlayAnchors, true);\n window.removeEventListener(\"resize\", refreshOverlayAnchors);\n };\n }, [editor]);\n\n const insertBlock = (blockName = selectedBlock, range?: InsertRange) => {\n if (!editor) {\n return;\n }\n\n const preset = openEditorInsertPresets.find((item) => item.key === blockName);\n const spec = registry.get(blockName);\n if (!spec) {\n return;\n }\n\n const chain = () => {\n const commandChain = editor.chain().focus();\n return range ? commandChain.deleteRange(range) : commandChain;\n };\n\n chain().insertContent(preset ? createOpenEditorInsertBlock(preset.key) : spec.defaultNode()).run();\n setSlashState(null);\n };\n\n const setDocumentContent = (content: OpenEditorDocument[\"content\"]) => {\n if (!editor) {\n return;\n }\n\n editor.commands.setContent(toProseMirrorDocument(normalizeDocument({ ...document, content })));\n };\n\n const setContent = (nextDocument: OpenEditorDocument) => {\n if (!editor) {\n return;\n }\n\n editor.commands.setContent(toProseMirrorDocument(normalizeDocument(nextDocument)));\n };\n\n const moveSelectedBlock = (direction: -1 | 1) => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n const nextIndex = selectedIndex + direction;\n\n if (nextIndex < 0 || nextIndex >= currentDocument.content.length) {\n return;\n }\n\n setDocumentContent(moveTopLevelBlock(currentDocument, selectedIndex, nextIndex).content);\n };\n\n const duplicateSelectedBlock = () => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n setDocumentContent(duplicateTopLevelBlock(currentDocument, selectedIndex).content);\n };\n\n const deleteSelectedBlock = () => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n setDocumentContent(deleteTopLevelBlock(currentDocument, selectedIndex).content);\n };\n\n const setLink = (url?: string | null) => {\n if (!editor) {\n return;\n }\n\n if (!url) {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n };\n\n const setParagraph = () => {\n editor?.chain().focus().setParagraph().run();\n };\n\n const toggleHeading = (level: 1 | 2 | 3 | 4 | 5 | 6) => {\n editor?.chain().focus().toggleHeading({ level }).run();\n };\n\n const toggleBold = () => {\n editor?.chain().focus().toggleBold().run();\n };\n\n const toggleItalic = () => {\n editor?.chain().focus().toggleItalic().run();\n };\n\n const toggleUnderline = () => {\n editor?.chain().focus().toggleUnderline().run();\n };\n\n const toggleStrike = () => {\n editor?.chain().focus().toggleStrike().run();\n };\n\n const toggleInlineCode = () => {\n editor?.chain().focus().toggleCode().run();\n };\n\n const toggleBulletList = () => {\n editor?.chain().focus().toggleBulletList().run();\n };\n\n const toggleOrderedList = () => {\n editor?.chain().focus().toggleOrderedList().run();\n };\n\n const toggleTaskList = () => {\n editor?.chain().focus().toggleTaskList().run();\n };\n\n const toggleBlockquote = () => {\n editor?.chain().focus().toggleBlockquote().run();\n };\n\n const toggleCodeBlock = () => {\n editor?.chain().focus().toggleCodeBlock().run();\n };\n\n const undo = () => {\n editor?.chain().focus().undo().run();\n };\n\n const redo = () => {\n editor?.chain().focus().redo().run();\n };\n\n const controller: InternalOpenEditorController = {\n document,\n editor,\n exports,\n editable,\n placeholder,\n selectedBlock,\n setSelectedBlock,\n getContent: () => document,\n setContent,\n setParagraph,\n toggleHeading,\n toggleBold,\n toggleItalic,\n toggleUnderline,\n toggleStrike,\n toggleInlineCode,\n toggleBulletList,\n toggleOrderedList,\n toggleTaskList,\n toggleBlockquote,\n toggleCodeBlock,\n undo,\n redo,\n insertBlock,\n setLink,\n getActiveLink: () => editor?.getAttributes(\"link\").href as string | undefined,\n moveSelectedBlock,\n duplicateSelectedBlock,\n deleteSelectedBlock,\n slashMenuItems,\n extensions,\n slashState,\n selectionBubbleState,\n };\n\n return controller;\n};\n\nexport const getDefaultSlashMenuItems = (controller: OpenEditorController): OpenEditorSlashMenuItem[] => {\n const internalController = controller as InternalOpenEditorController;\n\n return [\n ...openEditorInsertPresets.map((preset) => ({\n key: preset.key,\n label: preset.label,\n group: preset.group,\n keywords: [preset.key],\n run: ({ controller: current, range }: { controller: OpenEditorController; range: InsertRange }) =>\n current.insertBlock(preset.key, range),\n })),\n {\n key: \"moveBlockUp\",\n label: \"Move Block Up\",\n group: \"block\",\n run: ({ range }) => {\n internalController.editor?.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(-1);\n },\n },\n {\n key: \"moveBlockDown\",\n label: \"Move Block Down\",\n group: \"block\",\n run: ({ range }) => {\n internalController.editor?.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(1);\n },\n },\n ...controller.extensions\n .filter((extension) => extension.slashMenu !== false)\n .map((extension) => {\n const menu = extension.slashMenu || undefined;\n return {\n key: extension.block.name,\n label: menu?.label ?? extension.block.label,\n group: menu?.group ?? extension.block.group,\n keywords: menu?.keywords ?? [extension.block.name],\n run: ({ controller: current, range }: { controller: OpenEditorController; range: InsertRange }) =>\n current.insertBlock(extension.block.name, range),\n };\n }),\n ...controller.slashMenuItems,\n ];\n};\n\nconst renderTextWithMarks = (\n text: string,\n marks: readonly ProseMirrorMark[] = [],\n key: string,\n): ReactNode =>\n marks.reduceRight<ReactNode>((children, mark, index) => {\n const nodeKey = `${key}-${mark.type}-${index}`;\n switch (mark.type) {\n case \"bold\":\n return <strong key={nodeKey}>{children}</strong>;\n case \"italic\":\n return <em key={nodeKey}>{children}</em>;\n case \"underline\":\n return <u key={nodeKey}>{children}</u>;\n case \"strike\":\n return <s key={nodeKey}>{children}</s>;\n case \"code\":\n return <code key={nodeKey}>{children}</code>;\n case \"link\":\n return (\n <a key={nodeKey} href={typeof mark.attrs?.href === \"string\" ? mark.attrs.href : undefined}>\n {children}\n </a>\n );\n default:\n return children;\n }\n }, text);\n\nconst renderViewerNode = (\n node: ProseMirrorNode,\n key: string,\n renderers?: Partial<Record<string, OpenEditorViewerRenderer>>,\n registry: BlockRegistry = defaultBlockRegistry,\n): ReactNode => {\n if (node.type === \"text\") {\n return renderTextWithMarks(node.text ?? \"\", node.marks, key);\n }\n\n const children = node.content?.map((child, index) => renderViewerNode(child, `${key}-${index}`, renderers, registry)) ?? null;\n const blockKey = findBlockSpecForNode(registry, node)?.name ?? node.type;\n const customRenderer = renderers?.[blockKey];\n if (customRenderer) {\n return customRenderer({ node, children });\n }\n\n switch (blockKey) {\n case \"paragraph\":\n return <p key={key}>{children}</p>;\n case \"heading\": {\n const level = typeof node.attrs?.level === \"number\" ? Math.min(Math.max(node.attrs.level, 1), 6) : 2;\n switch (level) {\n case 1:\n return <h1 key={key}>{children}</h1>;\n case 2:\n return <h2 key={key}>{children}</h2>;\n case 3:\n return <h3 key={key}>{children}</h3>;\n case 4:\n return <h4 key={key}>{children}</h4>;\n case 5:\n return <h5 key={key}>{children}</h5>;\n default:\n return <h6 key={key}>{children}</h6>;\n }\n }\n case \"bulletList\":\n return <ul key={key}>{children}</ul>;\n case \"orderedList\":\n return <ol key={key}>{children}</ol>;\n case \"taskList\":\n return <ul key={key} data-type=\"taskList\">{children}</ul>;\n case \"blockquote\":\n return <blockquote key={key}>{children}</blockquote>;\n case \"codeBlock\":\n return <pre key={key}><code>{node.content?.map((child) => child.text ?? \"\").join(\"\")}</code></pre>;\n case \"divider\":\n return <hr key={key} />;\n case \"image\":\n return <img key={key} src={typeof node.attrs?.src === \"string\" ? node.attrs.src : \"\"} alt={typeof node.attrs?.alt === \"string\" ? node.attrs.alt : \"\"} />;\n case \"columns\":\n return <section key={key}>{children}</section>;\n case \"table\":\n return <table key={key}><tbody>{children}</tbody></table>;\n case \"toggleList\":\n return <ul key={key} data-openeditor-toggle-list>{children}</ul>;\n case \"callout\":\n return <aside key={key} className=\"oe-callout\" data-tone={normalizeCalloutTone(node.attrs?.tone)}>{children}</aside>;\n case \"diagram\": {\n const code = typeof node.attrs?.code === \"string\" ? node.attrs.code : \"\";\n return <figure key={key} className=\"oe-diagram\"><MermaidPreview code={code} /></figure>;\n }\n 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 <EditorContent editor={internalController.editor} className={className} />;\n};\n\nexport const OpenEditorViewer = ({\n document,\n className = \"oe-viewer\",\n renderers,\n extensions = EMPTY_EXTENSIONS,\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 <div className={className}>\n {normalizeDocument(document).content.map((node, index) =>\n renderViewerNode(node, `viewer-${index}`, mergedRenderers, registry),\n )}\n </div>\n );\n};\n\nexport const useOpenEditor = useOpenEditorController;\nexport { seedDocument };\nexport { NodeViewContent, NodeViewWrapper };\nexport type { ReactNodeViewProps as OpenEditorNodeViewProps };\n"]}
1
+ {"version":3,"sources":["../src/index.tsx"],"names":["page","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import {\n createBlockRegistry,\n deleteTopLevelBlock,\n duplicateTopLevelBlock,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n moveTopLevelBlock,\n normalizeDocument,\n toProseMirrorDocument,\n type ProseMirrorMark,\n type ProseMirrorNode,\n type OpenEditorDocument,\n type BlockRegistry,\n type BlockSpec,\n} from \"@openeditor/core\";\nimport { Checkbox } from \"@base-ui/react/checkbox\";\nimport { renderMermaidSVG } from \"beautiful-mermaid\";\nimport { toExportBundle, type OpenEditorExporters } from \"@openeditor/exporters\";\nimport {\n defaultBlockRegistry,\n createOpenEditorInsertBlock,\n openEditorInsertPresets,\n seedDocument,\n} from \"@openeditor/extensions\";\nimport { InputRule, mergeAttributes, Node, type AnyExtension, type Editor, type NodeConfig } from \"@tiptap/core\";\nimport HorizontalRule from \"@tiptap/extension-horizontal-rule\";\nimport Image from \"@tiptap/extension-image\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { Table } from \"@tiptap/extension-table\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Underline from \"@tiptap/extension-underline\";\nimport { NodeSelection, Plugin } from \"@tiptap/pm/state\";\nimport { ReplaceStep } from \"@tiptap/pm/transform\";\nimport {\n EditorContent,\n NodeViewContent,\n NodeViewWrapper,\n ReactNodeViewRenderer,\n useEditor,\n type ReactNodeViewProps,\n} from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { Fragment, createContext, use, useEffect, useMemo, useRef, useState, type ComponentType, type ReactNode } from \"react\";\n\nexport type OpenEditorPageSnapshot = {\n pageId: string;\n title: string;\n icon?: string | null;\n href?: string | null;\n};\n\nexport type OpenEditorPageRuntime = {\n createPage?: (input: { title: string; icon?: string | null }) => Promise<OpenEditorPageSnapshot>;\n resolvePage?: (pageId: string) => Promise<OpenEditorPageSnapshot | null>;\n renamePage?: (pageId: string, title: string) => Promise<void> | void;\n openPage?: (page: OpenEditorPageSnapshot) => Promise<void> | void;\n};\n\nconst OpenEditorPageRuntimeContext = createContext<OpenEditorPageRuntime | undefined>(undefined);\n\nexport type OpenEditorReactProps = {\n initialDocument?: OpenEditorDocument;\n editable?: boolean;\n placeholder?: string;\n onChange?: (document: OpenEditorDocument) => void;\n onFilePasteDrop?: (file: File) => boolean;\n pageRuntime?: OpenEditorPageRuntime;\n slashMenuItems?: readonly OpenEditorSlashMenuItem[];\n /** Consumer-owned blocks. Extension names and node types must be unique. */\n extensions?: readonly OpenEditorReactExtension[];\n};\n\nexport type OpenEditorReactConfig = OpenEditorReactProps;\n\nexport type OpenEditorController = {\n editor: Editor | null;\n document: OpenEditorDocument;\n exports: ReturnType<typeof toExportBundle>;\n editable: boolean;\n placeholder: string;\n selectedBlock: string;\n setSelectedBlock: (blockName: string) => void;\n getContent: () => OpenEditorDocument;\n setContent: (document: OpenEditorDocument) => void;\n setParagraph: () => void;\n toggleHeading: (level: 1 | 2 | 3 | 4 | 5 | 6) => void;\n toggleBold: () => void;\n toggleItalic: () => void;\n toggleUnderline: () => void;\n toggleStrike: () => void;\n toggleInlineCode: () => void;\n toggleBulletList: () => void;\n toggleOrderedList: () => void;\n toggleTaskList: () => void;\n toggleBlockquote: () => void;\n toggleCodeBlock: () => void;\n undo: () => void;\n redo: () => void;\n insertBlock: (blockName?: string, range?: InsertRange) => void;\n setLink: (url?: string | null) => void;\n getActiveLink: () => string | undefined;\n moveSelectedBlock: (direction: -1 | 1) => void;\n duplicateSelectedBlock: () => void;\n deleteSelectedBlock: () => void;\n slashMenuItems: readonly OpenEditorSlashMenuItem[];\n extensions: readonly OpenEditorReactExtension[];\n pageRuntime?: OpenEditorPageRuntime;\n slashState: SlashState | null;\n selectionBubbleState: SelectionBubbleState | null;\n};\n\nexport type OpenEditorContentProps = {\n controller: OpenEditorController;\n className?: string;\n};\n\ntype InternalOpenEditorController = OpenEditorController & {\n editor: Editor | null;\n};\n\ntype RenderAttributes = Record<string, string | number | boolean | null | undefined>;\nexport type InsertRange = { from: number; to: number };\nexport type OpenEditorOverlayRect = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\nexport type SlashState = {\n query: string;\n from: number;\n to: number;\n left: number;\n top: number;\n anchorRect?: OpenEditorOverlayRect;\n};\nexport type SelectionBubbleState = {\n left: number;\n top: number;\n anchorRect?: OpenEditorOverlayRect;\n};\nexport type OpenEditorSlashMenuItem = {\n key: string;\n label: string;\n group: string;\n keywords?: readonly string[];\n run: (context: { controller: OpenEditorController; range: InsertRange }) => void;\n};\n\nexport type OpenEditorViewerRenderer = (context: {\n node: ProseMirrorNode;\n children: ReactNode;\n}) => ReactNode;\n\nexport type OpenEditorExtensionMenu = {\n label?: string;\n group?: string;\n keywords?: readonly string[];\n};\n\n/**\n * Complete web integration for a consumer-owned block. The portable `block`\n * contract is shared by commands and platform support; the other fields are\n * adapters for the React/Tiptap runtime and non-interactive output.\n */\nexport type OpenEditorReactExtension = {\n block: BlockSpec;\n tiptapExtensions: readonly AnyExtension[];\n slashMenu?: false | OpenEditorExtensionMenu;\n viewer: OpenEditorViewerRenderer;\n exporters?: OpenEditorExporters;\n};\n\nexport const defineOpenEditorReactExtension = <T extends OpenEditorReactExtension>(extension: T): T => extension;\n\nexport type OpenEditorReactNodeExtension = Omit<OpenEditorReactExtension, \"tiptapExtensions\"> & {\n node: Omit<Partial<NodeConfig>, \"name\" | \"addNodeView\">;\n component: ComponentType<ReactNodeViewProps>;\n};\n\n/** Creates the common case: one custom ProseMirror node rendered by one React node view. */\nexport const defineOpenEditorReactNode = ({\n block,\n node,\n component,\n ...extension\n}: OpenEditorReactNodeExtension): OpenEditorReactExtension => ({\n ...extension,\n block,\n tiptapExtensions: [\n Node.create({\n ...node,\n name: block.nodeType ?? block.name,\n addNodeView() {\n return ReactNodeViewRenderer(component);\n },\n }),\n ],\n});\n\nexport type OpenEditorViewerProps = {\n document: OpenEditorDocument;\n className?: string;\n renderers?: Partial<Record<string, OpenEditorViewerRenderer>>;\n extensions?: readonly OpenEditorReactExtension[];\n pageRuntime?: OpenEditorPageRuntime;\n};\n\nconst EMPTY_EXTENSIONS: readonly OpenEditorReactExtension[] = [];\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n columns: {\n insertColumns: (count?: 2 | 3 | 4) => ReturnType;\n };\n }\n}\n\nconst COMMON_HTML_ATTRIBUTES = [\"id\", \"class\", \"title\", \"lang\", \"dir\", \"data-id\", \"style\"] as const;\nconst LAYOUT_ATTRIBUTES = [\"align\", \"width\", \"height\"] as const;\nconst URL_ATTRIBUTES = new Set([\"href\", \"src\"]);\nconst FORBIDDEN_PASTE_TAGS = new Set([\"script\", \"iframe\", \"object\", \"embed\", \"meta\", \"base\"]);\n\nconst createStandardAttributes = (attributeNames: readonly string[]) =>\n Object.fromEntries(\n attributeNames.map((attribute) => [\n attribute,\n {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(attribute),\n renderHTML: (attributes: Record<string, unknown>) =>\n attributes[attribute] ? { [attribute]: attributes[attribute] } : {},\n },\n ]),\n );\n\nconst isSafeUrl = (value: string, allowDataImage: boolean) => {\n const normalized = value.trim().toLowerCase();\n\n if (normalized.startsWith(\"javascript:\") || normalized.startsWith(\"vbscript:\")) {\n return false;\n }\n\n if (normalized.startsWith(\"data:\")) {\n return allowDataImage && normalized.startsWith(\"data:image/\");\n }\n\n return true;\n};\n\nconst sanitizePastedHtml = (html: string) => {\n const parser = new DOMParser();\n const parsed = parser.parseFromString(html, \"text/html\");\n const isFromOpenEditor = /data-openeditor-|oe-|node-/.test(html);\n const preservedAttributes: Record<string, string[]> = {\n a: [\"href\", \"target\", \"rel\"],\n img: [\"src\", \"alt\", \"width\", \"height\"],\n td: [\"colspan\", \"rowspan\"],\n th: [\"colspan\", \"rowspan\", \"scope\"],\n table: [\"border\", \"cellpadding\", \"cellspacing\"],\n \"*\": [\"id\"],\n };\n\n for (const tag of FORBIDDEN_PASTE_TAGS) {\n for (const element of Array.from(parsed.body.getElementsByTagName(tag))) {\n element.remove();\n }\n }\n\n for (const element of Array.from(parsed.body.querySelectorAll<HTMLElement>(\"[href], [src]\"))) {\n const allowDataImage = element.tagName.toLowerCase() === \"img\";\n\n for (const attribute of URL_ATTRIBUTES) {\n const value = element.getAttribute(attribute);\n if (value !== null && !isSafeUrl(value, allowDataImage)) {\n element.removeAttribute(attribute);\n }\n }\n }\n\n if (isFromOpenEditor) {\n return parsed.body.innerHTML;\n }\n\n const sanitizeElement = (node: globalThis.Node) => {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n const allowed = new Set([...(preservedAttributes[tagName] ?? []), ...(preservedAttributes[\"*\"] ?? [])]);\n\n for (const attribute of Array.from(element.attributes)) {\n if (attribute.name.startsWith(\"data-\") || !allowed.has(attribute.name)) {\n element.removeAttribute(attribute.name);\n }\n }\n }\n\n for (const child of Array.from(node.childNodes)) {\n sanitizeElement(child);\n }\n };\n\n sanitizeElement(parsed.body);\n return parsed.body.innerHTML;\n};\n\nconst Columns = Node.create({\n name: \"columns\",\n group: \"block\",\n content: \"column+\",\n isolating: true,\n defining: true,\n addAttributes() {\n return createStandardAttributes([...COMMON_HTML_ATTRIBUTES, ...LAYOUT_ATTRIBUTES, \"cellspacing\"]);\n },\n parseHTML() {\n return [{ tag: \"section[data-openeditor-columns]\" }];\n },\n renderHTML({ node, HTMLAttributes }) {\n const count = node.childCount;\n return [\n \"section\",\n mergeAttributes(\n {\n class: \"oe-columns\",\n \"data-openeditor-columns\": count,\n style: `--oe-column-count:${Math.min(Math.max(count, 2), 4)};${HTMLAttributes.style ?? \"\"}`,\n },\n HTMLAttributes,\n ),\n 0,\n ];\n },\n addCommands() {\n return {\n insertColumns:\n (count: 2 | 3 | 4 = 2) =>\n ({ commands }) =>\n commands.insertContent({\n type: \"columns\",\n content: Array.from({ length: count }, (_, index) => ({\n type: \"column\",\n content: [\n {\n type: \"paragraph\",\n content: [{ type: \"text\", text: `Column ${index + 1}` }],\n },\n ],\n })),\n }),\n };\n },\n addKeyboardShortcuts() {\n return {\n Backspace: ({ editor }) => {\n const { selection } = editor.state;\n\n if (!(selection instanceof NodeSelection) || selection.node.type.name !== \"columns\") {\n return false;\n }\n\n const allColumnsEmpty = Array.from({ length: selection.node.childCount }, (_, index) =>\n selection.node.child(index),\n ).every(\n (column) =>\n column.childCount === 1 &&\n column.firstChild?.type.name === \"paragraph\" &&\n column.firstChild.childCount === 0,\n );\n\n if (!allColumnsEmpty) {\n return false;\n }\n\n editor.view.dispatch(\n editor.state.tr.replaceWith(selection.from, selection.to, editor.state.schema.nodes.paragraph.create()),\n );\n return true;\n },\n };\n },\n});\n\nconst Column = Node.create({\n name: \"column\",\n content: \"block+\",\n isolating: true,\n defining: true,\n addAttributes() {\n return createStandardAttributes([...COMMON_HTML_ATTRIBUTES, ...LAYOUT_ATTRIBUTES]);\n },\n parseHTML() {\n return [{ tag: \"div[data-openeditor-column]\" }];\n },\n renderHTML({ HTMLAttributes }: { HTMLAttributes: RenderAttributes }) {\n return [\"div\", mergeAttributes({ \"data-openeditor-column\": \"\", class: \"oe-column\" }, HTMLAttributes), 0];\n },\n});\n\nconst Divider = HorizontalRule.extend({\n addAttributes() {\n return {\n ...createStandardAttributes([\"class\", \"style\"]),\n class: {\n default: \"oe-divider\",\n },\n };\n },\n addInputRules() {\n return [\n new InputRule({\n find: /^(?:---|___|\\*\\*\\*)$/,\n handler: ({ state, range }) => {\n const { tr } = state;\n tr.insert(range.from - 1, this.type.create()).delete(tr.mapping.map(range.from), tr.mapping.map(range.to));\n },\n }),\n ];\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n filterTransaction(transaction, state) {\n const { selection } = state;\n const isDividerSelection = selection instanceof NodeSelection && selection.node.type.name === \"horizontalRule\";\n const isTypingOverDivider = transaction.steps.some(\n (step) => step instanceof ReplaceStep && step.slice.content.size > 0,\n );\n\n return !(isDividerSelection && transaction.docChanged && isTypingOverDivider);\n },\n }),\n ];\n },\n});\n\nconst OpenEditorTaskCheckbox = ({\n checked,\n label,\n readOnly = false,\n tabIndex,\n onCheckedChange,\n}: {\n checked: boolean;\n label: string;\n readOnly?: boolean;\n tabIndex?: number;\n onCheckedChange?: (checked: boolean) => void;\n}) => (\n <Checkbox.Root\n aria-label={label}\n checked={checked}\n className=\"oe-task-checkbox\"\n onCheckedChange={onCheckedChange}\n onMouseDown={(event) => event.preventDefault()}\n readOnly={readOnly}\n tabIndex={tabIndex}\n >\n <Checkbox.Indicator className=\"oe-task-checkbox-indicator\" keepMounted />\n </Checkbox.Root>\n);\n\nconst OpenEditorTaskItemNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const checked = Boolean(node.attrs.checked);\n\n return (\n <NodeViewWrapper as=\"li\" data-checked={checked ? \"true\" : \"false\"}>\n <span className=\"oe-task-item-checkbox\" contentEditable={false}>\n <OpenEditorTaskCheckbox\n checked={checked}\n label={`Task item checkbox for ${node.textContent || \"empty task item\"}`}\n onCheckedChange={(nextChecked) => {\n if (editor.isEditable) {\n updateAttributes({ checked: nextChecked });\n }\n }}\n readOnly={!editor.isEditable}\n />\n </span>\n <NodeViewContent as=\"div\" />\n </NodeViewWrapper>\n );\n};\n\nconst BaseUiTaskItem = TaskItem.extend({\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorTaskItemNodeView);\n },\n});\n\nconst ToggleList = Node.create({\n name: \"toggleList\",\n group: \"block\",\n content: \"toggleListItem+\",\n parseHTML: () => [{ tag: \"ul[data-openeditor-toggle-list]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"ul\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-toggle-list\": \"\" }),\n 0,\n ],\n});\n\nconst OpenEditorToggleListItemNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const open = Boolean(node.attrs.open);\n\n return (\n <NodeViewWrapper as=\"li\" className=\"oe-toggle-list-item\" data-open={open ? \"true\" : \"false\"}>\n <button\n aria-expanded={open}\n aria-label={open ? \"Collapse toggle item\" : \"Expand toggle item\"}\n className=\"oe-toggle-list-trigger\"\n contentEditable={false}\n disabled={!editor.isEditable}\n onClick={() => updateAttributes({ open: !open })}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"oe-toggle-list-chevron\">β€Ί</span>\n </button>\n <NodeViewContent as=\"div\" className=\"oe-toggle-list-content\" />\n </NodeViewWrapper>\n );\n};\n\nconst ToggleListItem = Node.create({\n name: \"toggleListItem\",\n content: \"paragraph block*\",\n defining: true,\n addAttributes: () => ({ open: { default: true } }),\n parseHTML: () => [{ tag: \"li[data-openeditor-toggle-list-item]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"li\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-toggle-list-item\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorToggleListItemNodeView);\n },\n});\n\nconst CALLOUT_TONES = [\"info\", \"success\", \"warning\", \"danger\"] as const;\n\nconst normalizeCalloutTone = (value: unknown) =>\n CALLOUT_TONES.includes(value as (typeof CALLOUT_TONES)[number]) ? String(value) : \"info\";\n\nconst OpenEditorCalloutNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => (\n <NodeViewWrapper as=\"aside\" className=\"oe-callout\" data-tone={normalizeCalloutTone(node.attrs.tone)}>\n <select\n aria-label=\"Callout tone\"\n className=\"oe-callout-tone\"\n contentEditable={false}\n disabled={!editor.isEditable}\n onChange={(event) => updateAttributes({ tone: event.target.value })}\n value={normalizeCalloutTone(node.attrs.tone)}\n >\n {CALLOUT_TONES.map((tone) => <option key={tone} value={tone}>{tone}</option>)}\n </select>\n <NodeViewContent as=\"div\" className=\"oe-callout-content\" />\n </NodeViewWrapper>\n);\n\nconst Callout = Node.create({\n name: \"callout\",\n group: \"block\",\n content: \"block+\",\n defining: true,\n addAttributes: () => ({ tone: { default: \"info\" } }),\n parseHTML: () => [{ tag: \"aside[data-openeditor-callout]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"aside\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-callout\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorCalloutNodeView);\n },\n});\n\nconst pageSnapshotFromNode = (node: {\n attrs?: Record<string, unknown>;\n content?: unknown;\n textContent?: string;\n}): OpenEditorPageSnapshot | null => {\n const pageId = typeof node.attrs?.pageId === \"string\" ? node.attrs.pageId : \"\";\n if (!pageId) return null;\n return {\n pageId,\n title: node.textContent || getNodeText(node as { content?: unknown[] }) || \"Untitled\",\n icon: typeof node.attrs?.icon === \"string\" ? node.attrs.icon : \"πŸ“„\",\n href: typeof node.attrs?.href === \"string\" ? node.attrs.href : null,\n };\n};\n\nconst OpenEditorPageNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const runtime = use(OpenEditorPageRuntimeContext);\n const [creating, setCreating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const snapshot = pageSnapshotFromNode(node);\n const icon = typeof node.attrs.icon === \"string\" ? node.attrs.icon : \"πŸ“„\";\n\n const createPage = async () => {\n if (!runtime?.createPage || creating) return;\n setCreating(true);\n setError(null);\n try {\n const created = await runtime.createPage({ title: node.textContent || \"Untitled\", icon });\n updateAttributes({ pageId: created.pageId, icon: created.icon ?? icon, href: created.href ?? null });\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not create the page.\");\n } finally {\n setCreating(false);\n }\n };\n\n return (\n <NodeViewWrapper className=\"oe-page\" data-page-id={snapshot?.pageId ?? \"\"}>\n <input\n aria-label=\"Page icon\"\n className=\"oe-page-icon-input\"\n contentEditable={false}\n disabled={!editor.isEditable}\n maxLength={8}\n onChange={(event) => updateAttributes({ icon: event.target.value || \"πŸ“„\" })}\n value={icon}\n />\n <NodeViewContent\n as=\"div\"\n className=\"oe-page-title\"\n onBlur={() => {\n if (snapshot?.pageId) void runtime?.renamePage?.(snapshot.pageId, node.textContent || \"Untitled\");\n }}\n />\n {snapshot ? (\n <button\n aria-label={`Open ${snapshot.title}`}\n className=\"oe-page-action\"\n contentEditable={false}\n onClick={() => void runtime?.openPage?.(snapshot)}\n type=\"button\"\n >\n Open <span aria-hidden=\"true\">β†’</span>\n </button>\n ) : runtime?.createPage && editor.isEditable ? (\n <button\n className=\"oe-page-action\"\n contentEditable={false}\n disabled={creating}\n onClick={() => void createPage()}\n type=\"button\"\n >\n {creating ? \"Creating…\" : \"Create page\"}\n </button>\n ) : null}\n {error ? <span className=\"oe-page-error\" contentEditable={false} role=\"alert\">{error}</span> : null}\n </NodeViewWrapper>\n );\n};\n\nconst Page = Node.create({\n name: \"page\",\n group: \"block\",\n content: \"inline*\",\n defining: true,\n addAttributes: () => ({\n pageId: { default: null },\n icon: { default: \"πŸ“„\" },\n href: { default: null },\n }),\n parseHTML: () => [{ tag: \"div[data-openeditor-page]\" }, { tag: \"a[data-openeditor-page]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"div\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-page\": \"\" }),\n 0,\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorPageNodeView);\n },\n});\n\nconst OpenEditorPageViewer = ({ node }: { node: ProseMirrorNode }) => {\n const runtime = use(OpenEditorPageRuntimeContext);\n const cached = pageSnapshotFromNode(node);\n const [resolved, setResolved] = useState<OpenEditorPageSnapshot | null>(null);\n\n useEffect(() => {\n let active = true;\n setResolved(null);\n if (cached?.pageId && runtime?.resolvePage) {\n void runtime.resolvePage(cached.pageId).then((page) => {\n if (active && page) setResolved(page);\n });\n }\n return () => { active = false; };\n }, [cached?.pageId, runtime]);\n\n const page = resolved ?? cached;\n const title = page?.title ?? (getNodeText(node) || \"Untitled\");\n const content = <><span className=\"oe-page-icon\" aria-hidden=\"true\">{page?.icon ?? \"πŸ“„\"}</span><span className=\"oe-page-title\">{title}</span><span className=\"oe-page-arrow\" aria-hidden=\"true\">β†’</span></>;\n if (page && runtime?.openPage) {\n return <button className=\"oe-page oe-page-viewer\" onClick={() => void runtime.openPage?.(page)} type=\"button\">{content}</button>;\n }\n if (page?.href) {\n return <a className=\"oe-page oe-page-viewer\" href={page.href}>{content}</a>;\n }\n return <div className=\"oe-page oe-page-viewer\">{content}</div>;\n};\n\nconst MermaidPreview = ({ code }: { code: string }) => {\n const rendered = useMemo(() => {\n try {\n return {\n error: null,\n svg: renderMermaidSVG(code, {\n bg: \"var(--oe-surface, #ffffff)\",\n fg: \"var(--oe-text, #171717)\",\n accent: \"var(--oe-accent-strong, #171717)\",\n border: \"var(--oe-border-strong, #d4d4d4)\",\n muted: \"var(--oe-muted, #737373)\",\n surface: \"var(--oe-surface-muted, #f5f5f5)\",\n transparent: true,\n }),\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n svg: null,\n };\n }\n }, [code]);\n\n return rendered.error ? (\n <pre className=\"oe-diagram-error\" role=\"alert\">{rendered.error}</pre>\n ) : (\n <div className=\"oe-diagram-preview\" dangerouslySetInnerHTML={{ __html: rendered.svg ?? \"\" }} />\n );\n};\n\nconst ToggleListViewerItem = ({ children, initiallyOpen }: { children: ReactNode; initiallyOpen: boolean }) => {\n const [open, setOpen] = useState(initiallyOpen);\n return (\n <li className=\"oe-toggle-list-item\" data-open={open ? \"true\" : \"false\"}>\n <button\n aria-expanded={open}\n aria-label={open ? \"Collapse toggle item\" : \"Expand toggle item\"}\n className=\"oe-toggle-list-trigger\"\n onClick={() => setOpen((current) => !current)}\n type=\"button\"\n >\n <span aria-hidden=\"true\" className=\"oe-toggle-list-chevron\">β€Ί</span>\n </button>\n <div className=\"oe-toggle-list-content\">{children}</div>\n </li>\n );\n};\n\nconst OpenEditorDiagramNodeView = ({ editor, node, updateAttributes }: ReactNodeViewProps) => {\n const code = typeof node.attrs.code === \"string\" ? node.attrs.code : \"\";\n return (\n <NodeViewWrapper className=\"oe-diagram\" contentEditable={false}>\n <MermaidPreview code={code} />\n {editor.isEditable ? (\n <textarea\n aria-label=\"Mermaid diagram source\"\n className=\"oe-diagram-source\"\n onChange={(event) => updateAttributes({ code: event.target.value })}\n spellCheck={false}\n value={code}\n />\n ) : null}\n </NodeViewWrapper>\n );\n};\n\nconst MermaidDiagram = Node.create({\n name: \"mermaidDiagram\",\n group: \"block\",\n atom: true,\n draggable: true,\n addAttributes: () => ({ code: { default: \"\" } }),\n parseHTML: () => [{ tag: \"figure[data-openeditor-diagram]\" }],\n renderHTML: ({ HTMLAttributes }) => [\n \"figure\",\n mergeAttributes(HTMLAttributes, { \"data-openeditor-diagram\": \"\" }),\n ],\n addNodeView() {\n return ReactNodeViewRenderer(OpenEditorDiagramNodeView);\n },\n});\n\nconst createEditorExtensions = (\n placeholder: string,\n customExtensions: readonly OpenEditorReactExtension[],\n) => [\n StarterKit.configure({ horizontalRule: false, link: false, underline: false }),\n Divider,\n Image.configure({ allowBase64: true }),\n Link.configure({ openOnClick: false }),\n Underline,\n TaskList,\n BaseUiTaskItem.configure({ nested: true }),\n Table.configure({ resizable: true }),\n TableRow,\n TableHeader,\n TableCell,\n TextAlign.configure({ types: [\"heading\", \"paragraph\"] }),\n Placeholder.configure({ placeholder }),\n Columns,\n Column,\n ToggleList,\n ToggleListItem,\n Callout,\n Page,\n MermaidDiagram,\n ...customExtensions.flatMap((extension) => extension.tiptapExtensions),\n];\n\nconst createReactBlockRegistry = (extensions: readonly OpenEditorReactExtension[]): BlockRegistry =>\n createBlockRegistry([\n ...defaultBlockRegistry.values(),\n ...extensions.map((extension) => extension.block),\n ]);\n\nconst createReactExporters = (extensions: readonly OpenEditorReactExtension[]): OpenEditorExporters => ({\n html: Object.assign({}, ...extensions.map((extension) => extension.exporters?.html ?? {})),\n text: Object.assign({}, ...extensions.map((extension) => extension.exporters?.text ?? {})),\n});\n\nconst getNodeText = (node: { text?: string; content?: unknown[] }): string =>\n node.text ?? node.content?.map((child) => getNodeText(child as { text?: string; content?: unknown[] })).join(\"\") ?? \"\";\n\nconst toOverlayRect = (coordinates: { left: number; right: number; top: number; bottom: number }): OpenEditorOverlayRect => ({\n left: coordinates.left,\n right: coordinates.right,\n top: coordinates.top,\n bottom: coordinates.bottom,\n width: coordinates.right - coordinates.left,\n height: coordinates.bottom - coordinates.top,\n});\n\nconst getSlashState = (editor: NonNullable<ReturnType<typeof useEditor>>): SlashState | null => {\n const { selection } = editor.state;\n\n if (!selection.empty) {\n return null;\n }\n\n const { $from } = selection;\n const textBeforeCursor = $from.parent.textBetween(0, $from.parentOffset, \"\\n\", \"\\n\");\n const match = /(?:^|\\s)\\/([\\w -]*)$/.exec(textBeforeCursor);\n\n if (!match) {\n return null;\n }\n\n const query = match[1] ?? \"\";\n const from = $from.pos - query.length - 1;\n const to = $from.pos;\n const coordinates = editor.view.coordsAtPos(to);\n const anchorRect = toOverlayRect(coordinates);\n\n return {\n query,\n from,\n to,\n left: coordinates.left,\n top: coordinates.bottom + 8,\n anchorRect,\n };\n};\n\nconst getSelectionBubbleState = (editor: NonNullable<ReturnType<typeof useEditor>>): SelectionBubbleState | null => {\n const { selection } = editor.state;\n\n if (selection instanceof NodeSelection && selection.node.type.name === \"horizontalRule\") {\n return null;\n }\n\n if (selection.empty) {\n return null;\n }\n\n const domSelection = typeof window === \"undefined\" ? null : window.getSelection();\n const selectedRange = domSelection?.rangeCount ? domSelection.getRangeAt(0) : null;\n const selectedRect = selectedRange?.getBoundingClientRect();\n\n if (\n selectedRange &&\n editor.view.dom.contains(selectedRange.commonAncestorContainer) &&\n selectedRect &&\n selectedRect.width > 0 &&\n selectedRect.height > 0\n ) {\n return {\n left: selectedRect.left + selectedRect.width / 2,\n top: selectedRect.top,\n anchorRect: toOverlayRect(selectedRect),\n };\n }\n\n const fromCoordinates = editor.view.coordsAtPos(selection.from);\n const toCoordinates = editor.view.coordsAtPos(selection.to);\n const anchorRect = toOverlayRect({\n left: Math.min(fromCoordinates.left, toCoordinates.left),\n right: Math.max(fromCoordinates.right, toCoordinates.right),\n top: Math.min(fromCoordinates.top, toCoordinates.top),\n bottom: Math.max(fromCoordinates.bottom, toCoordinates.bottom),\n });\n\n return {\n left: (fromCoordinates.left + toCoordinates.right) / 2,\n top: Math.min(fromCoordinates.top, toCoordinates.top) - 8,\n anchorRect,\n };\n};\n\nconst getSelectedTopLevelIndex = (editor: NonNullable<ReturnType<typeof useEditor>>) => {\n const { $from } = editor.state.selection;\n const selectedTopLevelPosition = $from.depth > 0 ? $from.before(1) : 0;\n let selectedIndex = 0;\n\n editor.state.doc.forEach((_, offset, index) => {\n if (offset <= selectedTopLevelPosition) {\n selectedIndex = index;\n }\n });\n\n return selectedIndex;\n};\n\nexport const useOpenEditorController = ({\n initialDocument = seedDocument,\n editable = true,\n placeholder = \"Start writing...\",\n onChange,\n onFilePasteDrop,\n pageRuntime,\n slashMenuItems = [],\n extensions = EMPTY_EXTENSIONS,\n}: OpenEditorReactProps = {}): OpenEditorController => {\n const [document, setDocument] = useState(normalizeDocument(initialDocument));\n const [selectedBlock, setSelectedBlock] = useState(\"paragraph\");\n const [slashState, setSlashState] = useState<SlashState | null>(null);\n const [selectionBubbleState, setSelectionBubbleState] = useState<SelectionBubbleState | null>(null);\n const slashStateRef = useRef<SlashState | null>(null);\n const selectionBubbleStateRef = useRef<SelectionBubbleState | null>(null);\n const registry = useMemo(() => createReactBlockRegistry(extensions), [extensions]);\n const exporters = useMemo(() => createReactExporters(extensions), [extensions]);\n const editor = useEditor({\n immediatelyRender: false,\n extensions: createEditorExtensions(placeholder, extensions),\n content: toProseMirrorDocument(normalizeDocument(initialDocument)),\n editable,\n editorProps: {\n attributes: {\n class: \"oe-prosemirror\",\n \"aria-label\": \"OpenEditor document\",\n },\n transformPastedHTML: sanitizePastedHtml,\n handlePaste: (_view, event) => {\n const file = event.clipboardData?.files?.[0];\n\n if (!file || !onFilePasteDrop?.(file)) {\n return false;\n }\n\n event.preventDefault();\n return true;\n },\n handleDrop: (_view, event, _slice, moved) => {\n const file = event.dataTransfer?.files?.[0];\n\n if (moved || !file || !onFilePasteDrop?.(file)) {\n return false;\n }\n\n event.preventDefault();\n return true;\n },\n },\n onUpdate: ({ editor: currentEditor }) => {\n const nextDocument = normalizeDocument(\n fromProseMirrorDocument(\n currentEditor.getJSON(),\n initialDocument.meta,\n ),\n );\n setDocument(nextDocument);\n onChange?.(nextDocument);\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(getSelectionBubbleState(currentEditor));\n },\n onSelectionUpdate: ({ editor: currentEditor }) => {\n setSlashState(getSlashState(currentEditor));\n setSelectionBubbleState(getSelectionBubbleState(currentEditor));\n },\n }, [extensions]);\n const exports = useMemo(\n () => toExportBundle(document, exporters),\n [document, exporters],\n );\n\n useEffect(() => {\n slashStateRef.current = slashState;\n }, [slashState]);\n\n useEffect(() => {\n selectionBubbleStateRef.current = selectionBubbleState;\n }, [selectionBubbleState]);\n\n useEffect(() => {\n if (!editor || typeof window === \"undefined\") {\n return;\n }\n\n let animationFrame = 0;\n\n const refreshOverlayAnchors = () => {\n if (!slashStateRef.current && !selectionBubbleStateRef.current) {\n return;\n }\n\n window.cancelAnimationFrame(animationFrame);\n animationFrame = window.requestAnimationFrame(() => {\n if (slashStateRef.current) {\n setSlashState(getSlashState(editor));\n }\n\n if (selectionBubbleStateRef.current) {\n setSelectionBubbleState(getSelectionBubbleState(editor));\n }\n });\n };\n\n window.addEventListener(\"scroll\", refreshOverlayAnchors, true);\n window.addEventListener(\"resize\", refreshOverlayAnchors);\n\n return () => {\n window.cancelAnimationFrame(animationFrame);\n window.removeEventListener(\"scroll\", refreshOverlayAnchors, true);\n window.removeEventListener(\"resize\", refreshOverlayAnchors);\n };\n }, [editor]);\n\n const insertBlock = (blockName = selectedBlock, range?: InsertRange) => {\n if (!editor) {\n return;\n }\n\n const preset = openEditorInsertPresets.find((item) => item.key === blockName);\n const spec = registry.get(blockName);\n if (!spec) {\n return;\n }\n\n const chain = () => {\n const commandChain = editor.chain().focus();\n return range ? commandChain.deleteRange(range) : commandChain;\n };\n\n chain().insertContent(preset ? createOpenEditorInsertBlock(preset.key) : spec.defaultNode()).run();\n setSlashState(null);\n };\n\n const setDocumentContent = (content: OpenEditorDocument[\"content\"]) => {\n if (!editor) {\n return;\n }\n\n editor.commands.setContent(toProseMirrorDocument(normalizeDocument({ ...document, content })));\n };\n\n const setContent = (nextDocument: OpenEditorDocument) => {\n if (!editor) {\n return;\n }\n\n editor.commands.setContent(toProseMirrorDocument(normalizeDocument(nextDocument)));\n };\n\n const moveSelectedBlock = (direction: -1 | 1) => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n const nextIndex = selectedIndex + direction;\n\n if (nextIndex < 0 || nextIndex >= currentDocument.content.length) {\n return;\n }\n\n setDocumentContent(moveTopLevelBlock(currentDocument, selectedIndex, nextIndex).content);\n };\n\n const duplicateSelectedBlock = () => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n setDocumentContent(duplicateTopLevelBlock(currentDocument, selectedIndex).content);\n };\n\n const deleteSelectedBlock = () => {\n if (!editor) {\n return;\n }\n\n const currentDocument = normalizeDocument(fromProseMirrorDocument(editor.getJSON(), document.meta));\n const selectedIndex = getSelectedTopLevelIndex(editor);\n setDocumentContent(deleteTopLevelBlock(currentDocument, selectedIndex).content);\n };\n\n const setLink = (url?: string | null) => {\n if (!editor) {\n return;\n }\n\n if (!url) {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n return;\n }\n\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href: url }).run();\n };\n\n const setParagraph = () => {\n editor?.chain().focus().setParagraph().run();\n };\n\n const toggleHeading = (level: 1 | 2 | 3 | 4 | 5 | 6) => {\n editor?.chain().focus().toggleHeading({ level }).run();\n };\n\n const toggleBold = () => {\n editor?.chain().focus().toggleBold().run();\n };\n\n const toggleItalic = () => {\n editor?.chain().focus().toggleItalic().run();\n };\n\n const toggleUnderline = () => {\n editor?.chain().focus().toggleUnderline().run();\n };\n\n const toggleStrike = () => {\n editor?.chain().focus().toggleStrike().run();\n };\n\n const toggleInlineCode = () => {\n editor?.chain().focus().toggleCode().run();\n };\n\n const toggleBulletList = () => {\n editor?.chain().focus().toggleBulletList().run();\n };\n\n const toggleOrderedList = () => {\n editor?.chain().focus().toggleOrderedList().run();\n };\n\n const toggleTaskList = () => {\n editor?.chain().focus().toggleTaskList().run();\n };\n\n const toggleBlockquote = () => {\n editor?.chain().focus().toggleBlockquote().run();\n };\n\n const toggleCodeBlock = () => {\n editor?.chain().focus().toggleCodeBlock().run();\n };\n\n const undo = () => {\n editor?.chain().focus().undo().run();\n };\n\n const redo = () => {\n editor?.chain().focus().redo().run();\n };\n\n const controller: InternalOpenEditorController = {\n document,\n editor,\n exports,\n editable,\n placeholder,\n selectedBlock,\n setSelectedBlock,\n getContent: () => document,\n setContent,\n setParagraph,\n toggleHeading,\n toggleBold,\n toggleItalic,\n toggleUnderline,\n toggleStrike,\n toggleInlineCode,\n toggleBulletList,\n toggleOrderedList,\n toggleTaskList,\n toggleBlockquote,\n toggleCodeBlock,\n undo,\n redo,\n insertBlock,\n setLink,\n getActiveLink: () => editor?.getAttributes(\"link\").href as string | undefined,\n moveSelectedBlock,\n duplicateSelectedBlock,\n deleteSelectedBlock,\n slashMenuItems,\n extensions,\n pageRuntime,\n slashState,\n selectionBubbleState,\n };\n\n return controller;\n};\n\nexport const getDefaultSlashMenuItems = (controller: OpenEditorController): OpenEditorSlashMenuItem[] => {\n const internalController = controller as InternalOpenEditorController;\n\n return [\n ...openEditorInsertPresets.map((preset) => ({\n key: preset.key,\n label: preset.label,\n group: preset.group,\n keywords: [preset.key],\n run: ({ controller: current, range }: { controller: OpenEditorController; range: InsertRange }) =>\n current.insertBlock(preset.key, range),\n })),\n {\n key: \"moveBlockUp\",\n label: \"Move Block Up\",\n group: \"block\",\n run: ({ range }) => {\n internalController.editor?.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(-1);\n },\n },\n {\n key: \"moveBlockDown\",\n label: \"Move Block Down\",\n group: \"block\",\n run: ({ range }) => {\n internalController.editor?.chain().focus().deleteRange(range).run();\n controller.moveSelectedBlock(1);\n },\n },\n ...controller.extensions\n .filter((extension) => extension.slashMenu !== false)\n .map((extension) => {\n const menu = extension.slashMenu || undefined;\n return {\n key: extension.block.name,\n label: menu?.label ?? extension.block.label,\n group: menu?.group ?? extension.block.group,\n keywords: menu?.keywords ?? [extension.block.name],\n run: ({ controller: current, range }: { controller: OpenEditorController; range: InsertRange }) =>\n current.insertBlock(extension.block.name, range),\n };\n }),\n ...controller.slashMenuItems,\n ];\n};\n\nconst renderTextWithMarks = (\n text: string,\n marks: readonly ProseMirrorMark[] = [],\n key: string,\n): ReactNode =>\n marks.reduceRight<ReactNode>((children, mark, index) => {\n const nodeKey = `${key}-${mark.type}-${index}`;\n switch (mark.type) {\n case \"bold\":\n return <strong key={nodeKey}>{children}</strong>;\n case \"italic\":\n return <em key={nodeKey}>{children}</em>;\n case \"underline\":\n return <u key={nodeKey}>{children}</u>;\n case \"strike\":\n return <s key={nodeKey}>{children}</s>;\n case \"code\":\n return <code key={nodeKey}>{children}</code>;\n case \"link\":\n return (\n <a key={nodeKey} href={typeof mark.attrs?.href === \"string\" ? mark.attrs.href : undefined}>\n {children}\n </a>\n );\n default:\n return children;\n }\n }, text);\n\nconst renderViewerNode = (\n node: ProseMirrorNode,\n key: string,\n renderers?: Partial<Record<string, OpenEditorViewerRenderer>>,\n registry: BlockRegistry = defaultBlockRegistry,\n): ReactNode => {\n if (node.type === \"text\") {\n return renderTextWithMarks(node.text ?? \"\", node.marks, key);\n }\n\n const children = node.content?.map((child, index) => renderViewerNode(child, `${key}-${index}`, renderers, registry)) ?? null;\n const blockKey = findBlockSpecForNode(registry, node)?.name ?? node.type;\n const customRenderer = renderers?.[blockKey];\n if (customRenderer) {\n return <Fragment key={key}>{customRenderer({ node, children })}</Fragment>;\n }\n\n switch (blockKey) {\n case \"paragraph\":\n return <p key={key}>{children}</p>;\n case \"heading\": {\n const level = typeof node.attrs?.level === \"number\" ? Math.min(Math.max(node.attrs.level, 1), 6) : 2;\n switch (level) {\n case 1:\n return <h1 key={key}>{children}</h1>;\n case 2:\n return <h2 key={key}>{children}</h2>;\n case 3:\n return <h3 key={key}>{children}</h3>;\n case 4:\n return <h4 key={key}>{children}</h4>;\n case 5:\n return <h5 key={key}>{children}</h5>;\n default:\n return <h6 key={key}>{children}</h6>;\n }\n }\n case \"bulletList\":\n return <ul key={key}>{children}</ul>;\n case \"orderedList\":\n return <ol key={key}>{children}</ol>;\n case \"taskList\":\n return <ul key={key} data-type=\"taskList\">{children}</ul>;\n case \"blockquote\":\n return <blockquote key={key}>{children}</blockquote>;\n case \"codeBlock\":\n return <pre key={key}><code>{node.content?.map((child) => child.text ?? \"\").join(\"\")}</code></pre>;\n case \"divider\":\n return <hr key={key} />;\n case \"image\":\n return <img key={key} src={typeof node.attrs?.src === \"string\" ? node.attrs.src : \"\"} alt={typeof node.attrs?.alt === \"string\" ? node.attrs.alt : \"\"} />;\n case \"columns\":\n return <section key={key}>{children}</section>;\n case \"table\":\n return <table key={key}><tbody>{children}</tbody></table>;\n case \"toggleList\":\n return <ul key={key} data-openeditor-toggle-list>{children}</ul>;\n case \"callout\":\n return <aside key={key} className=\"oe-callout\" data-tone={normalizeCalloutTone(node.attrs?.tone)}>{children}</aside>;\n case \"diagram\": {\n const code = typeof node.attrs?.code === \"string\" ? node.attrs.code : \"\";\n return <figure key={key} className=\"oe-diagram\"><MermaidPreview code={code} /></figure>;\n }\n case \"page\":\n return <OpenEditorPageViewer key={key} node={node} />;\n default:\n if (node.type === \"column\") {\n return <div key={key}>{children}</div>;\n }\n if (node.type === \"tableRow\") {\n return <tr key={key}>{children}</tr>;\n }\n if (node.type === \"tableHeader\") {\n return <th key={key}>{children}</th>;\n }\n if (node.type === \"tableCell\") {\n return <td key={key}>{children}</td>;\n }\n if (node.type === \"listItem\") {\n return <li key={key}>{children}</li>;\n }\n if (node.type === \"taskItem\") {\n const checked = Boolean(node.attrs?.checked);\n return (\n <li key={key} data-checked={checked ? \"true\" : \"false\"}>\n <span className=\"oe-task-item-checkbox\" aria-hidden=\"true\">\n <OpenEditorTaskCheckbox checked={checked} label=\"Task item checkbox\" readOnly tabIndex={-1} />\n </span>\n <div>{children}</div>\n </li>\n );\n }\n if (node.type === \"toggleListItem\") {\n return <ToggleListViewerItem initiallyOpen={node.attrs?.open !== false} key={key}>{children}</ToggleListViewerItem>;\n }\n if (node.type === \"hardBreak\") {\n return <br key={key} />;\n }\n return <div key={key}>{children}</div>;\n }\n};\n\nexport const OpenEditorContent = ({\n controller,\n className = \"oe-canvas\",\n}: OpenEditorContentProps) => {\n const internalController = controller as InternalOpenEditorController;\n return (\n <OpenEditorPageRuntimeContext.Provider value={internalController.pageRuntime}>\n <EditorContent editor={internalController.editor} className={className} />\n </OpenEditorPageRuntimeContext.Provider>\n );\n};\n\nexport const OpenEditorViewer = ({\n document,\n className = \"oe-viewer\",\n renderers,\n extensions = EMPTY_EXTENSIONS,\n pageRuntime,\n}: OpenEditorViewerProps) => {\n const registry = createReactBlockRegistry(extensions);\n const extensionRenderers = Object.fromEntries(\n extensions.map((extension) => [extension.block.name, extension.viewer]),\n );\n const mergedRenderers = { ...extensionRenderers, ...renderers };\n\n return (\n <OpenEditorPageRuntimeContext.Provider value={pageRuntime}>\n <div className={className}>\n {normalizeDocument(document).content.map((node, index) =>\n renderViewerNode(node, `viewer-${index}`, mergedRenderers, registry),\n )}\n </div>\n </OpenEditorPageRuntimeContext.Provider>\n );\n};\n\nexport const useOpenEditor = useOpenEditorController;\nexport { seedDocument };\nexport { NodeViewContent, NodeViewWrapper };\nexport type { ReactNodeViewProps as OpenEditorNodeViewProps };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openeditor/react",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "repository": {
@@ -25,9 +25,9 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@base-ui/react": "^1.6.0",
28
- "@openeditor/core": "0.0.11",
29
- "@openeditor/exporters": "0.0.11",
30
- "@openeditor/extensions": "0.0.11",
28
+ "@openeditor/core": "0.0.12",
29
+ "@openeditor/exporters": "0.0.12",
30
+ "@openeditor/extensions": "0.0.12",
31
31
  "@tiptap/core": "3.27.1",
32
32
  "@tiptap/extension-horizontal-rule": "3.27.1",
33
33
  "@tiptap/extension-image": "3.27.1",