@openeditor/native 0.0.17 → 0.0.19
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/dist/document.js.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/selection.js.map +1 -0
- package/dist/toolbar.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/document.ts"],"names":[],"mappings":";;;;AAeA,IAAM,sBAAA,GAAyB,YAAA;AAE/B,IAAM,iBAAA,GAAoB,CAAC,KAAA,KACzB,OAAO,UAAU,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA;AAEhE,IAAM,6BAAA,GAAgC,CAAC,KAAA,KAA2D;AAChG,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,GAAG,WAAU,GAAI,KAAA;AACxC,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,SAAS,SAAA,GAAY,MAAA;AACrD,CAAA;AAEA,IAAM,iBAAA,GAAoB,CACxB,IAAA,EACA,OAAA,KACoB;AACpB,EAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,GAAI,MAAA,CAAO,OAAA,GAAU,EAAE,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAE,GAAI;AAAC,GACnE;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAAkD;AAC5E,EAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,oBAAA,EAAsB,IAAI,CAAA;AAC5D,EAAA,IAAI,IAAA,EAAM,OAAA,EAAS,MAAA,KAAW,aAAA,EAAe;AAC3C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,EACvB,GAAA,CAAI,kBAAkB,EACvB,MAAA,CAAO,CAAC,KAAA,KAAoC,KAAA,KAAU,IAAI,CAAA;AAE7D,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,GAAI,WAAA,GAAc,EAAE,OAAA,EAAS,WAAA,KAAgB;AAAC,GAChD;AACF,CAAA;AAEO,IAAM,4BAAA,GAA+B,CAC1C,QAAA,EACA,IAAA,GAA2C,SAAS,IAAA,KAEpD,cAAA;AAAA,EACE,iBAAA,CAAkB,QAAQ,CAAA,CAAE,OAAA,CACzB,GAAA,CAAI,kBAAkB,CAAA,CACtB,MAAA,CAAO,CAAC,IAAA,KAAkC,IAAA,KAAS,IAAI,CAAA;AAAA,EAC1D;AACF;AAEK,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAA2C;AAC5E,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,EAAM,kBAAkB,CAAA;AACzD,IAAA,MAAM,KAAA,GAAQ,6BAAA,CAA8B,IAAA,CAAK,KAAK,CAAA;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,GAAG,aAAY,GAAI,MAAA;AAE1C,IAAA,OAAO;AAAA,MACL,GAAG,WAAA;AAAA,MACH,MAAM,CAAA,CAAA,EAAI,iBAAA,CAAkB,IAAA,CAAK,KAAA,EAAO,KAAK,CAAC,CAAA,CAAA;AAAA,MAC9C,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU;AAAC,KAC3B;AAAA,EACF;AAEA,EAAA,OAAO,iBAAA,CAAkB,MAAM,kBAAkB,CAAA;AACnD;AAEO,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAA2C;AAC9E,EAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAE1D,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,EAAM,oBAAoB,CAAA;AAC3D,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,OAAO,MAAA,CAAO,YAAA,CAAa,CAAC,CAAC,CAAA;AAAE,KACzD;AAAA,EACF;AAEA,EAAA,OAAO,iBAAA,CAAkB,MAAM,oBAAoB,CAAA;AACrD;AAEO,IAAM,sBAAA,GAAyB,CAAC,QAAA,MACpC;AAAA,EACC,IAAA,EAAM,KAAA;AAAA,EACN,OAAA,EAAS,sBAAsB,4BAAA,CAA6B,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,IAAI,kBAAkB;AACvG,CAAA;AAEK,IAAM,wBAAA,GAA2B,CACtC,QAAA,EACA,IAAA,KAEA,iBAAA;AAAA,EACE,uBAAA;AAAA,IACE;AAAA,MACE,IAAA,EAAM,KAAA;AAAA,MACN,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,oBAAoB;AAAA,KACpD;AAAA,IACA;AAAA;AAEJ;AAEK,IAAM,0BAAA,GAA6B,CACxC,OAAA,EACA,IAAA,KACwB,uBAAuB,cAAA,CAAe,OAAA,EAAS,IAAI,CAAC","file":"document.js","sourcesContent":["import {\n cloneNode,\n createDocument,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n normalizeDocument,\n toProseMirrorDocument,\n type OpenEditorDocument,\n type OpenEditorDocumentMeta,\n type ProseMirrorAttrs,\n type ProseMirrorDocument,\n type ProseMirrorNode,\n} from \"@openeditor/core\";\nimport { defaultBlockRegistry } from \"@openeditor/schema\";\n\nconst NATIVE_HEADING_PATTERN = /^h([1-6])$/;\n\nconst clampHeadingLevel = (value: unknown) =>\n typeof value === \"number\" ? Math.min(Math.max(value, 1), 6) : 2;\n\nconst cloneAttrsWithoutHeadingLevel = (attrs?: ProseMirrorAttrs): ProseMirrorAttrs | undefined => {\n if (!attrs) {\n return undefined;\n }\n\n const { level: _level, ...nextAttrs } = attrs;\n return Object.keys(nextAttrs).length ? nextAttrs : undefined;\n};\n\nconst withMappedContent = (\n node: ProseMirrorNode,\n mapNode: (node: ProseMirrorNode) => ProseMirrorNode,\n): ProseMirrorNode => {\n const cloned = cloneNode(node);\n return {\n ...cloned,\n ...(cloned.content ? { content: cloned.content.map(mapNode) } : {}),\n };\n};\n\nconst sanitizeNativeNode = (node: ProseMirrorNode): ProseMirrorNode | null => {\n const spec = findBlockSpecForNode(defaultBlockRegistry, node);\n if (spec?.support?.native === \"unsupported\") {\n return null;\n }\n\n const cloned = cloneNode(node);\n const nextContent = cloned.content\n ?.map(sanitizeNativeNode)\n .filter((child): child is ProseMirrorNode => child !== null);\n\n return {\n ...cloned,\n ...(nextContent ? { content: nextContent } : {}),\n };\n};\n\nexport const sanitizeNativeEditorDocument = (\n document: OpenEditorDocument,\n meta: OpenEditorDocumentMeta | undefined = document.meta,\n): OpenEditorDocument =>\n createDocument(\n normalizeDocument(document).content\n .map(sanitizeNativeNode)\n .filter((node): node is ProseMirrorNode => node !== null),\n meta,\n );\n\nexport const toNativeEditorNode = (node: ProseMirrorNode): ProseMirrorNode => {\n if (node.type === \"heading\") {\n const cloned = withMappedContent(node, toNativeEditorNode);\n const attrs = cloneAttrsWithoutHeadingLevel(node.attrs);\n const { attrs: _attrs, ...headingNode } = cloned;\n\n return {\n ...headingNode,\n type: `h${clampHeadingLevel(node.attrs?.level)}`,\n ...(attrs ? { attrs } : {}),\n };\n }\n\n return withMappedContent(node, toNativeEditorNode);\n};\n\nexport const fromNativeEditorNode = (node: ProseMirrorNode): ProseMirrorNode => {\n const headingMatch = NATIVE_HEADING_PATTERN.exec(node.type);\n\n if (headingMatch) {\n const cloned = withMappedContent(node, fromNativeEditorNode);\n return {\n ...cloned,\n type: \"heading\",\n attrs: { ...node.attrs, level: Number(headingMatch[1]) },\n };\n }\n\n return withMappedContent(node, fromNativeEditorNode);\n};\n\nexport const toNativeEditorDocument = (document: OpenEditorDocument): ProseMirrorDocument =>\n ({\n type: \"doc\",\n content: toProseMirrorDocument(sanitizeNativeEditorDocument(document)).content.map(toNativeEditorNode),\n });\n\nexport const fromNativeEditorDocument = (\n document: ProseMirrorDocument,\n meta?: OpenEditorDocumentMeta,\n): OpenEditorDocument =>\n normalizeDocument(\n fromProseMirrorDocument(\n {\n type: \"doc\",\n content: document.content.map(fromNativeEditorNode),\n },\n meta,\n ),\n );\n\nexport const createNativeEditorDocument = (\n content: ProseMirrorNode[],\n meta?: OpenEditorDocumentMeta,\n): ProseMirrorDocument => toNativeEditorDocument(createDocument(content, meta));\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/document.ts","../src/selection.ts","../src/toolbar.ts","../src/index.tsx"],"names":["createDocument","findBlockSpecForNode","defaultBlockRegistry","NativeImage"],"mappings":"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","file":"index.js","sourcesContent":["import {\n cloneNode,\n createDocument,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n normalizeDocument,\n toProseMirrorDocument,\n type OpenEditorDocument,\n type OpenEditorDocumentMeta,\n type ProseMirrorAttrs,\n type ProseMirrorDocument,\n type ProseMirrorNode,\n} from \"@openeditor/core\";\nimport { defaultBlockRegistry } from \"@openeditor/schema\";\n\nconst NATIVE_HEADING_PATTERN = /^h([1-6])$/;\n\nconst clampHeadingLevel = (value: unknown) =>\n typeof value === \"number\" ? Math.min(Math.max(value, 1), 6) : 2;\n\nconst cloneAttrsWithoutHeadingLevel = (attrs?: ProseMirrorAttrs): ProseMirrorAttrs | undefined => {\n if (!attrs) {\n return undefined;\n }\n\n const { level: _level, ...nextAttrs } = attrs;\n return Object.keys(nextAttrs).length ? nextAttrs : undefined;\n};\n\nconst withMappedContent = (\n node: ProseMirrorNode,\n mapNode: (node: ProseMirrorNode) => ProseMirrorNode,\n): ProseMirrorNode => {\n const cloned = cloneNode(node);\n return {\n ...cloned,\n ...(cloned.content ? { content: cloned.content.map(mapNode) } : {}),\n };\n};\n\nconst sanitizeNativeNode = (node: ProseMirrorNode): ProseMirrorNode | null => {\n const spec = findBlockSpecForNode(defaultBlockRegistry, node);\n if (spec?.support?.native === \"unsupported\") {\n return null;\n }\n\n const cloned = cloneNode(node);\n const nextContent = cloned.content\n ?.map(sanitizeNativeNode)\n .filter((child): child is ProseMirrorNode => child !== null);\n\n return {\n ...cloned,\n ...(nextContent ? { content: nextContent } : {}),\n };\n};\n\nexport const sanitizeNativeEditorDocument = (\n document: OpenEditorDocument,\n meta: OpenEditorDocumentMeta | undefined = document.meta,\n): OpenEditorDocument =>\n createDocument(\n normalizeDocument(document).content\n .map(sanitizeNativeNode)\n .filter((node): node is ProseMirrorNode => node !== null),\n meta,\n );\n\nexport const toNativeEditorNode = (node: ProseMirrorNode): ProseMirrorNode => {\n if (node.type === \"heading\") {\n const cloned = withMappedContent(node, toNativeEditorNode);\n const attrs = cloneAttrsWithoutHeadingLevel(node.attrs);\n const { attrs: _attrs, ...headingNode } = cloned;\n\n return {\n ...headingNode,\n type: `h${clampHeadingLevel(node.attrs?.level)}`,\n ...(attrs ? { attrs } : {}),\n };\n }\n\n return withMappedContent(node, toNativeEditorNode);\n};\n\nexport const fromNativeEditorNode = (node: ProseMirrorNode): ProseMirrorNode => {\n const headingMatch = NATIVE_HEADING_PATTERN.exec(node.type);\n\n if (headingMatch) {\n const cloned = withMappedContent(node, fromNativeEditorNode);\n return {\n ...cloned,\n type: \"heading\",\n attrs: { ...node.attrs, level: Number(headingMatch[1]) },\n };\n }\n\n return withMappedContent(node, fromNativeEditorNode);\n};\n\nexport const toNativeEditorDocument = (document: OpenEditorDocument): ProseMirrorDocument =>\n ({\n type: \"doc\",\n content: toProseMirrorDocument(sanitizeNativeEditorDocument(document)).content.map(toNativeEditorNode),\n });\n\nexport const fromNativeEditorDocument = (\n document: ProseMirrorDocument,\n meta?: OpenEditorDocumentMeta,\n): OpenEditorDocument =>\n normalizeDocument(\n fromProseMirrorDocument(\n {\n type: \"doc\",\n content: document.content.map(fromNativeEditorNode),\n },\n meta,\n ),\n );\n\nexport const createNativeEditorDocument = (\n content: ProseMirrorNode[],\n meta?: OpenEditorDocumentMeta,\n): ProseMirrorDocument => toNativeEditorDocument(createDocument(content, meta));\n","import type { OpenEditorDocument, ProseMirrorNode } from \"@openeditor/core\";\nimport type { Selection } from \"@apollohg/react-native-prose-editor\";\n\nconst getNodeTextLength = (node: ProseMirrorNode): number => {\n if (node.type === \"text\") {\n return node.text?.length ?? 0;\n }\n\n return node.content?.reduce((total, child) => total + getNodeSize(child), 0) ?? 0;\n};\n\nconst getNodeSize = (node: ProseMirrorNode): number => {\n if (node.type === \"text\") {\n return getNodeTextLength(node);\n }\n\n if (!node.content?.length) {\n return 1;\n }\n\n return node.content.reduce((total, child) => total + getNodeSize(child), 2);\n};\n\nexport const resolveSelectedTopLevelIndex = (document: OpenEditorDocument, selection?: Selection) => {\n const position = selection?.type === \"node\"\n ? selection.pos\n : selection?.type === \"text\"\n ? Math.min(selection.anchor ?? 0, selection.head ?? 0)\n : 0;\n\n let offset = 0;\n for (let index = 0; index < document.content.length; index += 1) {\n const nodeSize = getNodeSize(document.content[index]);\n // A caret at a block boundary belongs to the following block, not the previous one.\n if (position == null || position < offset + nodeSize || index === document.content.length - 1) {\n return index;\n }\n offset += nodeSize;\n }\n\n return Math.max(document.content.length - 1, 0);\n};\n","import type { ProseMirrorDocument } from \"@openeditor/core\";\nimport {\n createOpenEditorInsertDocument,\n defaultBlockSpecs,\n defaultMarkSpecs,\n type OpenEditorInsertPresetKey,\n} from \"@openeditor/schema\";\nimport type { EditorToolbarIcon, EditorToolbarItem } from \"@apollohg/react-native-prose-editor\";\nimport { toNativeEditorDocument } from \"./document.js\";\n\nconst glyphIcon = (text: string): EditorToolbarIcon => ({ type: \"glyph\", text });\nconst defaultIcon = (id: string): EditorToolbarIcon => ({ type: \"default\", id } as EditorToolbarIcon);\nconst platformIcon = (\n iosName: string,\n androidName: string,\n fallbackText: string,\n): EditorToolbarIcon => ({\n type: \"platform\",\n ios: { type: \"sfSymbol\", name: iosName },\n android: { type: \"material\", name: androidName },\n fallbackText,\n});\n\nexport const openEditorNativeToolbarActionKeys = {\n paragraph: \"paragraph\",\n bulletList: \"bulletList\",\n orderedList: \"orderedList\",\n taskList: \"taskList\",\n codeBlock: \"codeBlock\",\n columns: \"columns\",\n table: \"table\",\n moveBlockUp: \"openeditor:block:moveUp\",\n moveBlockDown: \"openeditor:block:moveDown\",\n undo: \"openeditor:history:undo\",\n redo: \"openeditor:history:redo\",\n dismissKeyboard: \"openeditor:keyboard:dismiss\",\n} as const;\n\nexport type OpenEditorNativeToolbarActionKey =\n (typeof openEditorNativeToolbarActionKeys)[keyof typeof openEditorNativeToolbarActionKeys];\n\nexport const createOpenEditorNativeToolbarItems = ({\n canUndo = true,\n canRedo = true,\n}: {\n canUndo?: boolean;\n canRedo?: boolean;\n} = {}): readonly EditorToolbarItem[] => {\n const items = [\n {\n type: \"group\",\n key: \"openeditor-text\",\n label: \"Text\",\n icon: glyphIcon(\"T\"),\n presentation: \"menu\",\n items: [\n { type: \"action\", key: openEditorNativeToolbarActionKeys.paragraph, label: \"Paragraph\", icon: glyphIcon(\"P\") },\n { type: \"heading\", level: 1, label: \"Heading 1\", icon: glyphIcon(\"H1\") },\n { type: \"heading\", level: 2, label: \"Heading 2\", icon: glyphIcon(\"H2\") },\n { type: \"heading\", level: 3, label: \"Heading 3\", icon: glyphIcon(\"H3\") },\n { type: \"heading\", level: 4, label: \"Heading 4\", icon: glyphIcon(\"H4\") },\n { type: \"heading\", level: 5, label: \"Heading 5\", icon: glyphIcon(\"H5\") },\n { type: \"heading\", level: 6, label: \"Heading 6\", icon: glyphIcon(\"H6\") },\n ],\n },\n {\n type: \"group\",\n key: \"openeditor-marks\",\n label: \"Marks\",\n icon: defaultIcon(\"bold\"),\n presentation: \"menu\",\n items: [\n { type: \"mark\", mark: \"bold\", label: \"Bold\", icon: defaultIcon(\"bold\") },\n { type: \"mark\", mark: \"italic\", label: \"Italic\", icon: defaultIcon(\"italic\") },\n { type: \"mark\", mark: \"underline\", label: \"Underline\", icon: defaultIcon(\"underline\") },\n { type: \"mark\", mark: \"strike\", label: \"Strikethrough\", icon: defaultIcon(\"strike\") },\n { type: \"mark\", mark: \"code\", label: \"Inline Code\", icon: platformIcon(\"curlybraces\", \"code\", \"{}\") },\n { type: \"link\", label: \"Link\", icon: defaultIcon(\"link\") },\n ],\n },\n {\n type: \"group\",\n key: \"openeditor-lists\",\n label: \"Lists\",\n icon: defaultIcon(\"bulletList\"),\n presentation: \"menu\",\n items: [\n { type: \"action\", key: openEditorNativeToolbarActionKeys.bulletList, label: \"Bullet List\", icon: defaultIcon(\"bulletList\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.orderedList, label: \"Numbered List\", icon: defaultIcon(\"orderedList\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.taskList, label: \"Task List\", icon: platformIcon(\"checklist\", \"checklist\", \"[]\") },\n { type: \"command\", command: \"indentList\", label: \"Indent List\", icon: defaultIcon(\"indentList\") },\n { type: \"command\", command: \"outdentList\", label: \"Outdent List\", icon: defaultIcon(\"outdentList\") },\n ],\n },\n {\n type: \"group\",\n key: \"openeditor-blocks\",\n label: \"Blocks\",\n icon: defaultIcon(\"blockquote\"),\n presentation: \"menu\",\n items: [\n { type: \"blockquote\", label: \"Quote\", icon: defaultIcon(\"blockquote\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.codeBlock, label: \"Code\", icon: platformIcon(\"curlybraces.square\", \"code\", \"{}\") },\n { type: \"node\", nodeType: \"horizontalRule\", label: \"Divider\", icon: defaultIcon(\"horizontalRule\") },\n { type: \"image\", label: \"Image\", icon: defaultIcon(\"image\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.columns, label: \"Columns\", icon: platformIcon(\"rectangle.split.2x1\", \"view-column\", \"||\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.table, label: \"Table\", icon: platformIcon(\"tablecells\", \"table-chart\", \"[]\") },\n ],\n },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.moveBlockUp,\n label: \"Move Block Up\",\n icon: {\n type: \"platform\",\n ios: { type: \"sfSymbol\", name: \"arrow.up\" },\n android: { type: \"material\", name: \"keyboard-arrow-up\" },\n fallbackText: \"Up\",\n },\n },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.moveBlockDown,\n label: \"Move Block Down\",\n icon: {\n type: \"platform\",\n ios: { type: \"sfSymbol\", name: \"arrow.down\" },\n android: { type: \"material\", name: \"keyboard-arrow-down\" },\n fallbackText: \"Dn\",\n },\n },\n { type: \"separator\" },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.undo,\n label: \"Undo\",\n icon: defaultIcon(\"undo\"),\n isDisabled: !canUndo,\n placement: \"end\",\n },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.redo,\n label: \"Redo\",\n icon: defaultIcon(\"redo\"),\n isDisabled: !canRedo,\n placement: \"end\",\n },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.dismissKeyboard,\n label: \"Hide Keyboard\",\n icon: {\n type: \"platform\",\n ios: { type: \"sfSymbol\", name: \"keyboard.chevron.compact.down\" },\n android: { type: \"material\", name: \"keyboard_hide\" },\n fallbackText: \"v\",\n },\n placement: \"end\",\n },\n ] satisfies readonly EditorToolbarItem[];\n\n return items;\n};\n\nexport const openEditorNativeToolbarItems = createOpenEditorNativeToolbarItems();\n\nconst walkToolbarItems = (items: readonly EditorToolbarItem[]): EditorToolbarItem[] => {\n const leafItems: EditorToolbarItem[] = [];\n for (const item of items) {\n if (item.type === \"group\") {\n leafItems.push(...walkToolbarItems(item.items));\n } else if (item.type !== \"separator\") {\n leafItems.push(item);\n }\n }\n return leafItems;\n};\n\nexport const nativeToolbarParityCoverage = () => {\n const leafItems = walkToolbarItems(openEditorNativeToolbarItems);\n const blockControls = new Map<string, string>([\n [\"paragraph\", openEditorNativeToolbarActionKeys.paragraph],\n [\"heading\", \"heading\"],\n [\"bulletList\", openEditorNativeToolbarActionKeys.bulletList],\n [\"orderedList\", openEditorNativeToolbarActionKeys.orderedList],\n [\"taskList\", openEditorNativeToolbarActionKeys.taskList],\n [\"blockquote\", \"blockquote\"],\n [\"codeBlock\", openEditorNativeToolbarActionKeys.codeBlock],\n [\"divider\", \"horizontalRule\"],\n [\"image\", \"image\"],\n [\"columns\", openEditorNativeToolbarActionKeys.columns],\n [\"table\", openEditorNativeToolbarActionKeys.table],\n ]);\n const markControls = new Map<string, string>([\n [\"bold\", \"bold\"],\n [\"italic\", \"italic\"],\n [\"underline\", \"underline\"],\n [\"strike\", \"strike\"],\n [\"code\", \"code\"],\n [\"link\", \"link\"],\n ]);\n const hasBlockControl = (control: string) =>\n leafItems.some((item) =>\n item.type === \"action\"\n ? item.key === control\n : item.type === \"heading\"\n ? control === \"heading\"\n : item.type === \"list\"\n ? item.listType === control\n : item.type === \"image\"\n ? control === \"image\"\n : item.type === \"blockquote\"\n ? control === \"blockquote\"\n : item.type === \"node\"\n ? item.nodeType === control\n : false,\n );\n const hasMarkControl = (control: string) =>\n leafItems.some((item) =>\n item.type === \"link\"\n ? control === \"link\"\n : item.type === \"mark\"\n ? item.mark === control\n : false,\n );\n\n return {\n missingBlockControls: defaultBlockSpecs\n .filter((spec) => spec.support?.native === \"supported\")\n .map((spec) => spec.name)\n .filter((name) => !hasBlockControl(blockControls.get(name) ?? \"\")),\n missingMarkControls: defaultMarkSpecs\n .map((mark) => mark.name)\n .filter((name) => !hasMarkControl(markControls.get(name) ?? \"\")),\n };\n};\n\nexport const defaultDocumentForToolbarAction = (key: string): ProseMirrorDocument | null => {\n if (\n key === \"image\"\n || key === \"link\"\n || key === openEditorNativeToolbarActionKeys.moveBlockUp\n || key === openEditorNativeToolbarActionKeys.moveBlockDown\n || key === openEditorNativeToolbarActionKeys.dismissKeyboard\n ) {\n return null;\n }\n\n try {\n return toNativeEditorDocument(createOpenEditorInsertDocument(key as OpenEditorInsertPresetKey));\n } catch {\n return null;\n }\n};\n","import {\n createDocument,\n findBlockSpecForNode,\n moveTopLevelBlock,\n normalizeDocument,\n textBlock,\n type OpenEditorDocument,\n type ProseMirrorDocument,\n type ProseMirrorNode,\n} from \"@openeditor/core\";\nimport { useMemo, useRef, useState, type ComponentType, type ReactNode, type Ref } from \"react\";\nimport { Image as NativeImage, Keyboard, Modal, Platform, Pressable, StyleSheet, Text, TextInput, View } from \"react-native\";\nimport type {\n EditorTheme,\n ImageRequestContext,\n LinkRequestContext,\n NativeRichTextEditorProps,\n NativeRichTextEditorRef,\n NativeRichTextEditorToolbarPlacement,\n SchemaDefinition,\n Selection,\n} from \"@apollohg/react-native-prose-editor\";\nimport {\n fromNativeEditorDocument,\n sanitizeNativeEditorDocument,\n toNativeEditorDocument,\n} from \"./document.js\";\nimport { resolveSelectedTopLevelIndex } from \"./selection.js\";\nimport {\n createOpenEditorNativeToolbarItems,\n defaultDocumentForToolbarAction,\n openEditorNativeToolbarActionKeys,\n} from \"./toolbar.js\";\nimport { defaultBlockRegistry } from \"@openeditor/schema\";\n\ndeclare function require(id: \"@apollohg/react-native-prose-editor\"): typeof import(\"@apollohg/react-native-prose-editor\");\ndeclare function require(id: \"react-native-keyboard-controller\"): typeof import(\"react-native-keyboard-controller\");\n\nexport type OpenEditorNativeProps = {\n document?: OpenEditorDocument;\n editable?: boolean;\n showToolbar?: boolean;\n theme?: Partial<OpenEditorNativeTheme>;\n toolbarPlacement?: NativeRichTextEditorToolbarPlacement;\n onChange?: (document: OpenEditorDocument) => void;\n};\n\nexport type OpenEditorNativeViewerProps = Omit<\n OpenEditorNativeProps,\n \"editable\" | \"showToolbar\" | \"onChange\"\n> & {\n showToolbar?: false;\n renderers?: Partial<Record<string, OpenEditorNativeViewerRenderer>>;\n};\n\nexport type OpenEditorNativeToolbarAction = {\n key: string;\n label: string;\n onPress?: (key: string) => void;\n};\n\nexport type OpenEditorNativeToolbarProps = {\n actions?: readonly OpenEditorNativeToolbarAction[];\n onActionPress?: (key: string) => void;\n theme?: Partial<OpenEditorNativeTheme>;\n};\n\nexport type OpenEditorNativeViewerRenderer = (context: {\n node: ProseMirrorNode;\n children: ReactNode;\n theme: Required<OpenEditorNativeTheme>;\n}) => ReactNode;\n\nexport type OpenEditorNativeToolbarTheme = {\n height?: number;\n};\n\nexport type OpenEditorNativeTheme = {\n background: string;\n surface: string;\n surfaceMuted: string;\n text: string;\n textSoft?: string;\n muted: string;\n placeholder?: string;\n border: string;\n borderStrong?: string;\n accent: string;\n accentText: string;\n accentStrong?: string;\n primary: string;\n primaryText: string;\n codeBackground?: string;\n codeText?: string;\n debugBackground?: string;\n debugText?: string;\n debugHeading?: string;\n debugBorder?: string;\n debugButtonBackground?: string;\n success?: string;\n shadow?: string;\n backdrop: string;\n toolbar?: OpenEditorNativeToolbarTheme;\n};\n\ntype ResolvedOpenEditorNativeTheme = Required<OpenEditorNativeTheme>;\ntype NativeEditorComponent = ComponentType<\n NativeRichTextEditorProps & { ref?: Ref<NativeRichTextEditorRef> }\n>;\n\nconst defaultNativeTheme: ResolvedOpenEditorNativeTheme = {\n background: \"#fafafa\",\n surface: \"#ffffff\",\n surfaceMuted: \"#f5f5f5\",\n text: \"#171717\",\n textSoft: \"#262626\",\n muted: \"#737373\",\n placeholder: \"#a3a3a3\",\n border: \"#e5e5e5\",\n borderStrong: \"#d4d4d4\",\n accent: \"#f5f5f5\",\n accentText: \"#171717\",\n accentStrong: \"#171717\",\n primary: \"#171717\",\n primaryText: \"#ffffff\",\n codeBackground: \"#f5f5f5\",\n codeText: \"#171717\",\n debugBackground: \"#171717\",\n debugText: \"#d4d4d4\",\n debugHeading: \"#ffffff\",\n debugBorder: \"#404040\",\n debugButtonBackground: \"#262626\",\n success: \"#86efac\",\n shadow: \"rgba(0, 0, 0, 0.12)\",\n backdrop: \"rgba(0, 0, 0, 0.32)\",\n toolbar: {},\n};\n\nconst openEditorNativeSchema: SchemaDefinition = {\n nodes: [\n { name: \"doc\", content: \"block+\", role: \"doc\" },\n { name: \"paragraph\", content: \"inline*\", group: \"block\", role: \"textBlock\", htmlTag: \"p\" },\n { name: \"heading\", content: \"inline*\", group: \"block\", attrs: { level: { default: 2 } }, role: \"textBlock\" },\n { name: \"h1\", content: \"inline*\", group: \"block\", role: \"textBlock\", htmlTag: \"h1\" },\n { name: \"h2\", content: \"inline*\", group: \"block\", role: \"textBlock\", htmlTag: \"h2\" },\n { name: \"h3\", content: \"inline*\", group: \"block\", role: \"textBlock\", htmlTag: \"h3\" },\n { name: \"h4\", content: \"inline*\", group: \"block\", role: \"textBlock\", htmlTag: \"h4\" },\n { name: \"h5\", content: \"inline*\", group: \"block\", role: \"textBlock\", htmlTag: \"h5\" },\n { name: \"h6\", content: \"inline*\", group: \"block\", role: \"textBlock\", htmlTag: \"h6\" },\n { name: \"blockquote\", content: \"block+\", group: \"block\", role: \"block\", htmlTag: \"blockquote\" },\n { name: \"bulletList\", content: \"listItem+\", group: \"block\", role: \"list\", htmlTag: \"ul\" },\n { name: \"orderedList\", content: \"listItem+\", group: \"block\", attrs: { start: { default: 1 } }, role: \"list\", htmlTag: \"ol\" },\n { name: \"taskList\", content: \"taskItem+\", group: \"block\", role: \"list\", htmlTag: \"ul\" },\n { name: \"listItem\", content: \"paragraph block*\", role: \"listItem\", htmlTag: \"li\" },\n {\n name: \"taskItem\",\n content: \"paragraph block*\",\n role: \"listItem\",\n htmlTag: \"li\",\n attrs: { checked: { default: false } },\n },\n { name: \"codeBlock\", content: \"text*\", group: \"block\", role: \"textBlock\", htmlTag: \"pre\" },\n { name: \"horizontalRule\", content: \"\", group: \"block\", role: \"block\", htmlTag: \"hr\", isVoid: true },\n {\n name: \"columns\",\n content: \"column+\",\n group: \"block\",\n role: \"block\",\n htmlTag: \"section\",\n attrs: { count: { default: 2 } },\n },\n {\n name: \"column\",\n content: \"block+\",\n role: \"block\",\n htmlTag: \"div\",\n },\n {\n name: \"table\",\n content: \"tableRow+\",\n group: \"block\",\n role: \"block\",\n htmlTag: \"table\",\n },\n {\n name: \"tableRow\",\n content: \"(tableHeader | tableCell)+\",\n role: \"block\",\n htmlTag: \"tr\",\n },\n {\n name: \"tableHeader\",\n content: \"block+\",\n role: \"block\",\n htmlTag: \"th\",\n },\n {\n name: \"tableCell\",\n content: \"block+\",\n role: \"block\",\n htmlTag: \"td\",\n },\n {\n name: \"image\",\n content: \"\",\n group: \"block\",\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null },\n width: { default: null },\n height: { default: null },\n },\n role: \"block\",\n htmlTag: \"img\",\n isVoid: true,\n },\n { name: \"hardBreak\", content: \"\", group: \"inline\", role: \"hardBreak\", htmlTag: \"br\", isVoid: true },\n { name: \"text\", content: \"\", group: \"inline\", role: \"text\" },\n ],\n marks: [\n { name: \"bold\" },\n { name: \"italic\" },\n { name: \"underline\" },\n { name: \"strike\" },\n { name: \"code\" },\n { name: \"link\", attrs: { href: {} } },\n ],\n};\n\nconst toNativeEditorTheme = (theme: ResolvedOpenEditorNativeTheme): EditorTheme => ({\n backgroundColor: \"transparent\",\n borderRadius: 0,\n placeholderColor: theme.placeholder,\n contentInsets: {\n top: 16,\n right: 16,\n bottom: 16,\n left: 16,\n },\n text: {\n color: theme.text,\n fontSize: 16,\n lineHeight: 24,\n },\n paragraph: {\n color: theme.textSoft,\n fontSize: 16,\n lineHeight: 24,\n spacingAfter: 12,\n },\n headings: {\n h1: { color: theme.text, fontSize: 28, fontWeight: \"700\", lineHeight: 34, spacingAfter: 14 },\n h2: { color: theme.text, fontSize: 24, fontWeight: \"700\", lineHeight: 30, spacingAfter: 12 },\n h3: { color: theme.text, fontSize: 20, fontWeight: \"700\", lineHeight: 26, spacingAfter: 10 },\n h4: { color: theme.text, fontSize: 18, fontWeight: \"700\", lineHeight: 24, spacingAfter: 8 },\n h5: { color: theme.text, fontSize: 16, fontWeight: \"700\", lineHeight: 22, spacingAfter: 8 },\n h6: { color: theme.text, fontSize: 14, fontWeight: \"700\", lineHeight: 20, spacingAfter: 8 },\n },\n links: {\n color: theme.accent,\n underline: true,\n },\n list: {\n markerColor: theme.muted,\n itemSpacing: 6,\n },\n blockquote: {\n borderColor: theme.accent,\n borderWidth: 3,\n text: {\n color: theme.textSoft,\n fontSize: 16,\n lineHeight: 24,\n },\n },\n codeBlock: {\n backgroundColor: theme.codeBackground,\n borderRadius: 8,\n paddingHorizontal: 12,\n paddingVertical: 8,\n text: {\n color: theme.codeText,\n fontSize: 15,\n lineHeight: 22,\n },\n },\n horizontalRule: {\n color: theme.border,\n thickness: 1,\n verticalMargin: 16,\n },\n toolbar: {\n appearance: \"native\",\n ...(typeof theme.toolbar.height === \"number\" ? { height: theme.toolbar.height } : {}),\n buttonColor: theme.text,\n buttonActiveColor: theme.text,\n buttonActiveBackgroundColor: theme.accent,\n buttonDisabledColor: theme.muted,\n },\n});\n\nconst loadNativeEditor = (): NativeEditorComponent | null => {\n if (Platform.OS === \"web\") {\n return null;\n }\n\n try {\n return require(\"@apollohg/react-native-prose-editor\").NativeRichTextEditor as NativeEditorComponent;\n } catch {\n return null;\n }\n};\n\nconst dismissKeyboard = () => {\n try {\n const { KeyboardController } = require(\"react-native-keyboard-controller\");\n void KeyboardController.dismiss();\n } catch {\n Keyboard.dismiss();\n }\n};\n\nconst contentFromNativeJson = (json: ProseMirrorDocument) =>\n fromNativeEditorDocument(json) as OpenEditorDocument;\n\nconst normalizeForNativeEditor = (document: OpenEditorDocument) =>\n sanitizeNativeEditorDocument(document);\n\nconst isSafeInputUrl = (value: string, allowDataImage = false) => {\n const normalized = value.trim().toLowerCase();\n\n if (!normalized) {\n return false;\n }\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 documentsMatch = (left: OpenEditorDocument, right: OpenEditorDocument) =>\n JSON.stringify(left) === JSON.stringify(right);\n\nconst nativeSeedDocument = createDocument([\n textBlock(\"heading\", \"OpenEditor Native\", { level: 1 }),\n textBlock(\"paragraph\", \"This native surface is intentionally limited to engine-owned blocks for now.\"),\n {\n type: \"bulletList\",\n content: [\n { type: \"listItem\", content: [textBlock(\"paragraph\", \"Paragraphs and headings\")] },\n { type: \"listItem\", content: [textBlock(\"paragraph\", \"Bullet and numbered lists\")] },\n { type: \"listItem\", content: [textBlock(\"paragraph\", \"Task lists, code blocks, columns, quotes, dividers, and images\")] },\n ],\n },\n {\n type: \"taskList\",\n content: [\n { type: \"taskItem\", attrs: { checked: true }, content: [textBlock(\"paragraph\", \"Engine-owned structural list items\")] },\n { type: \"taskItem\", attrs: { checked: false }, content: [textBlock(\"paragraph\", \"Native task lists now live in the engine\")] },\n ],\n },\n {\n type: \"codeBlock\",\n content: [{ type: \"text\", text: \"const native = 'owned by the engine';\" }],\n },\n {\n type: \"blockquote\",\n content: [textBlock(\"paragraph\", \"Structural blocks return once the native engine owns them.\")],\n },\n {\n type: \"columns\",\n attrs: { count: 2 },\n content: [\n { type: \"column\", content: [textBlock(\"paragraph\", \"Columns now flow through the native engine.\")] },\n { type: \"column\", content: [textBlock(\"paragraph\", \"Tables now get a dedicated native surface too.\")] },\n ],\n },\n {\n type: \"table\",\n content: [\n {\n type: \"tableRow\",\n content: [\n { type: \"tableHeader\", content: [textBlock(\"paragraph\", \"Block\")] },\n { type: \"tableHeader\", content: [textBlock(\"paragraph\", \"Parity status\")] },\n ],\n },\n {\n type: \"tableRow\",\n content: [\n { type: \"tableCell\", content: [textBlock(\"paragraph\", \"Slash commands\")] },\n { type: \"tableCell\", content: [textBlock(\"paragraph\", \"Web\")] },\n ],\n },\n ],\n },\n { type: \"horizontalRule\" },\n { type: \"image\", attrs: { src: \"https://placehold.co/960x420/png\", alt: \"Placeholder\" } },\n]);\n\nconst renderNativeViewerNode = (\n node: ProseMirrorNode,\n key: string,\n theme: ResolvedOpenEditorNativeTheme,\n renderers?: Partial<Record<string, OpenEditorNativeViewerRenderer>>,\n): ReactNode => {\n if (node.type === \"text\") {\n return <Text key={key} style={{ color: theme.text }}>{node.text ?? \"\"}</Text>;\n }\n\n const children = node.content?.map((child, index) =>\n renderNativeViewerNode(child, `${key}-${index}`, theme, renderers),\n ) ?? null;\n const blockKey = findBlockSpecForNode(defaultBlockRegistry, node)?.name ?? node.type;\n const customRenderer = renderers?.[blockKey];\n\n if (customRenderer) {\n return customRenderer({ node, children, theme });\n }\n\n switch (blockKey) {\n case \"paragraph\":\n return <View key={key} style={{ marginBottom: 12 }}><Text style={{ color: theme.textSoft }}>{children}</Text></View>;\n case \"heading\": {\n const level = typeof node.attrs?.level === \"number\" ? Math.min(Math.max(node.attrs.level, 1), 6) : 2;\n const fontSize = [0, 28, 24, 20, 18, 16, 14][level];\n return <Text key={key} style={{ color: theme.text, fontSize, fontWeight: \"700\", marginBottom: 8 }}>{children}</Text>;\n }\n case \"bulletList\":\n case \"orderedList\":\n case \"taskList\":\n return <View key={key} style={{ marginBottom: 12 }}>{children}</View>;\n case \"blockquote\":\n return <View key={key} style={{ borderLeftColor: theme.accent, borderLeftWidth: 3, marginBottom: 12, paddingLeft: 12 }}>{children}</View>;\n case \"codeBlock\":\n return <View key={key} style={{ backgroundColor: theme.codeBackground, borderRadius: 8, marginBottom: 12, padding: 12 }}><Text style={{ color: theme.codeText }}>{node.content?.map((child) => child.text ?? \"\").join(\"\")}</Text></View>;\n case \"divider\":\n return <View key={key} style={{ backgroundColor: theme.border, height: 1, marginVertical: 16 }} />;\n case \"image\":\n return (\n <NativeImage\n key={key}\n source={{ uri: typeof node.attrs?.src === \"string\" ? node.attrs.src : \"\" }}\n accessibilityLabel={typeof node.attrs?.alt === \"string\" ? node.attrs.alt : undefined}\n style={{ borderRadius: 8, height: 220, marginBottom: 12, width: \"100%\" }}\n resizeMode=\"cover\"\n />\n );\n case \"columns\":\n return <View key={key} style={{ flexDirection: \"row\", gap: 12, marginBottom: 12 }}>{children}</View>;\n case \"table\":\n return <View key={key} style={{ borderColor: theme.border, borderRadius: 8, borderWidth: 1, marginBottom: 12, overflow: \"hidden\" }}>{children}</View>;\n default:\n if (node.type === \"column\") {\n return <View key={key} style={{ flex: 1 }}>{children}</View>;\n }\n if (node.type === \"tableRow\") {\n return <View key={key} style={{ borderBottomColor: theme.border, borderBottomWidth: StyleSheet.hairlineWidth, flexDirection: \"row\" }}>{children}</View>;\n }\n if (node.type === \"tableHeader\" || node.type === \"tableCell\") {\n return <View key={key} style={{ flex: 1, padding: 10 }}>{children}</View>;\n }\n if (node.type === \"listItem\" || node.type === \"taskItem\") {\n return <View key={key} style={{ flexDirection: \"row\", gap: 8, marginBottom: 6 }}><Text style={{ color: theme.muted }}>•</Text><View style={{ flex: 1 }}>{children}</View></View>;\n }\n return <View key={key}>{children}</View>;\n }\n};\n\nexport const OpenEditorNativeToolbar = ({\n actions = [\n { key: openEditorNativeToolbarActionKeys.undo, label: \"Undo\" },\n { key: openEditorNativeToolbarActionKeys.redo, label: \"Redo\" },\n { key: openEditorNativeToolbarActionKeys.paragraph, label: \"Paragraph\" },\n { key: openEditorNativeToolbarActionKeys.bulletList, label: \"Bullets\" },\n { key: openEditorNativeToolbarActionKeys.orderedList, label: \"Numbers\" },\n { key: openEditorNativeToolbarActionKeys.taskList, label: \"Tasks\" },\n ],\n onActionPress,\n theme,\n}: OpenEditorNativeToolbarProps) => {\n const resolvedTheme = {\n ...defaultNativeTheme,\n ...theme,\n toolbar: {\n ...defaultNativeTheme.toolbar,\n ...theme?.toolbar,\n },\n } satisfies ResolvedOpenEditorNativeTheme;\n\n return (\n <View style={[styles.toolbar, { backgroundColor: resolvedTheme.surface, borderColor: resolvedTheme.border }]}>\n {actions.map((action) => (\n <Pressable\n key={action.key}\n onPress={() => {\n action.onPress?.(action.key);\n onActionPress?.(action.key);\n }}\n style={[styles.toolbarButton, { backgroundColor: resolvedTheme.accent, borderColor: resolvedTheme.borderStrong }]}\n >\n <Text style={[styles.toolbarButtonText, { color: resolvedTheme.accentText }]}>{action.label}</Text>\n </Pressable>\n ))}\n </View>\n );\n};\n\nexport const OpenEditorNative = ({\n document = nativeSeedDocument,\n editable = true,\n showToolbar = true,\n theme,\n toolbarPlacement = \"keyboard\",\n onChange,\n}: OpenEditorNativeProps) => {\n const editorRef = useRef<NativeRichTextEditorRef | null>(null);\n const [currentDocument, setCurrentDocument] = useState(() => normalizeForNativeEditor(document));\n const [selection, setSelection] = useState<Selection | undefined>();\n const [linkRequest, setLinkRequest] = useState<LinkRequestContext | null>(null);\n const [linkUrl, setLinkUrl] = useState(\"https://\");\n const [imageRequest, setImageRequest] = useState<ImageRequestContext | null>(null);\n const [imageUrl, setImageUrl] = useState(\"https://placehold.co/960x420/png\");\n const [history, setHistory] = useState<{ undoStack: OpenEditorDocument[]; redoStack: OpenEditorDocument[] }>({\n undoStack: [],\n redoStack: [],\n });\n\n const nativeDocument = currentDocument;\n const NativeEditor = useMemo(() => loadNativeEditor(), []);\n const resolvedTheme = useMemo<ResolvedOpenEditorNativeTheme>(\n () => ({\n ...defaultNativeTheme,\n ...theme,\n toolbar: {\n ...defaultNativeTheme.toolbar,\n ...theme?.toolbar,\n },\n }),\n [theme],\n );\n const nativeEditorTheme = useMemo(() => toNativeEditorTheme(resolvedTheme), [resolvedTheme]);\n const toolbarItems = useMemo(\n () =>\n createOpenEditorNativeToolbarItems({\n canUndo: history.undoStack.length > 0,\n canRedo: history.redoStack.length > 0,\n }),\n [history.redoStack.length, history.undoStack.length],\n );\n\n const syncDocument = (nextDocument: OpenEditorDocument, updateEditor = true) => {\n const normalized = normalizeForNativeEditor(nextDocument);\n\n if (!documentsMatch(normalized, nativeDocument)) {\n setHistory((currentHistory) => ({\n undoStack: [...currentHistory.undoStack.slice(-99), nativeDocument],\n redoStack: [],\n }));\n }\n\n setCurrentDocument(normalized);\n onChange?.(normalized);\n\n if (updateEditor) {\n editorRef.current?.setContentJson(toNativeEditorDocument(normalized));\n }\n };\n\n const moveSelectedBlock = (direction: -1 | 1) => {\n const selectedIndex = resolveSelectedTopLevelIndex(nativeDocument, selection);\n const nextIndex = selectedIndex + direction;\n\n if (nextIndex < 0 || nextIndex >= nativeDocument.content.length) {\n return;\n }\n\n syncDocument(moveTopLevelBlock(nativeDocument, selectedIndex, nextIndex), true);\n };\n\n const handleToolbarAction = (key: string) => {\n if (key === openEditorNativeToolbarActionKeys.dismissKeyboard) {\n dismissKeyboard();\n return;\n }\n\n if (key === openEditorNativeToolbarActionKeys.moveBlockUp) {\n moveSelectedBlock(-1);\n return;\n }\n\n if (key === openEditorNativeToolbarActionKeys.moveBlockDown) {\n moveSelectedBlock(1);\n return;\n }\n\n if (key === openEditorNativeToolbarActionKeys.undo) {\n const previous = history.undoStack.at(-1);\n if (!previous) {\n return;\n }\n\n setHistory((currentHistory) => ({\n undoStack: currentHistory.undoStack.slice(0, -1),\n redoStack: [nativeDocument, ...currentHistory.redoStack].slice(0, 100),\n }));\n setCurrentDocument(previous);\n onChange?.(previous);\n editorRef.current?.setContentJson(toNativeEditorDocument(previous));\n return;\n }\n\n if (key === openEditorNativeToolbarActionKeys.redo) {\n const next = history.redoStack[0];\n if (!next) {\n return;\n }\n\n setHistory((currentHistory) => ({\n undoStack: [...currentHistory.undoStack.slice(-99), nativeDocument],\n redoStack: currentHistory.redoStack.slice(1),\n }));\n setCurrentDocument(next);\n onChange?.(next);\n editorRef.current?.setContentJson(toNativeEditorDocument(next));\n return;\n }\n\n if (key === openEditorNativeToolbarActionKeys.bulletList) {\n editorRef.current?.toggleList(\"bulletList\");\n return;\n }\n\n if (key === openEditorNativeToolbarActionKeys.orderedList) {\n editorRef.current?.toggleList(\"orderedList\");\n return;\n }\n\n if (key === openEditorNativeToolbarActionKeys.taskList) {\n editorRef.current?.toggleList(\"taskList\" as never);\n return;\n }\n\n const actionDocument = defaultDocumentForToolbarAction(key);\n if (actionDocument) {\n editorRef.current?.insertContentJson(actionDocument);\n }\n };\n\n const submitLinkDialog = () => {\n const url = linkUrl.trim();\n if (!linkRequest) {\n return;\n }\n\n if (url && isSafeInputUrl(url)) {\n linkRequest.setLink(url);\n } else {\n linkRequest.unsetLink();\n }\n\n setLinkRequest(null);\n };\n\n const submitImageDialog = () => {\n const url = imageUrl.trim();\n if (imageRequest && isSafeInputUrl(url, imageRequest.allowBase64)) {\n imageRequest.insertImage(url, { alt: \"Placeholder\" });\n }\n\n setImageRequest(null);\n };\n\n if (!NativeEditor) {\n return (\n <View style={[styles.unavailable, { backgroundColor: resolvedTheme.surface, borderColor: resolvedTheme.border }]}>\n <Text style={[styles.unavailableTitle, { color: resolvedTheme.text }]}>Native editor unavailable</Text>\n <Text style={[styles.unavailableText, { color: resolvedTheme.muted }]}>\n OpenEditorNative requires the @apollohg/react-native-prose-editor native module in a development build.\n </Text>\n </View>\n );\n }\n\n return (\n <>\n <NativeEditor\n ref={editorRef}\n initialJSON={toNativeEditorDocument(nativeDocument)}\n schema={openEditorNativeSchema}\n editable={editable}\n placeholder=\"Start writing...\"\n showToolbar={showToolbar}\n toolbarPlacement={toolbarPlacement}\n toolbarItems={toolbarItems}\n onToolbarAction={handleToolbarAction}\n theme={nativeEditorTheme}\n autoDetectLinks\n allowBase64Images\n allowImageResizing\n heightBehavior=\"autoGrow\"\n onRequestLink={(request) => {\n setLinkUrl(request.href ?? \"https://\");\n setLinkRequest(request);\n }}\n onRequestImage={(request) => {\n setImageUrl(\"https://placehold.co/960x420/png\");\n setImageRequest(request);\n }}\n onSelectionChange={setSelection}\n onContentChangeJSON={(json) => {\n syncDocument(contentFromNativeJson(json as ProseMirrorDocument), false);\n }}\n style={styles.nativeEditor}\n />\n <UrlDialog\n title=\"Link\"\n value={linkUrl}\n visible={linkRequest !== null}\n placeholder=\"https://\"\n confirmLabel={linkUrl.trim() ? \"Apply\" : \"Remove\"}\n onChangeText={setLinkUrl}\n onCancel={() => setLinkRequest(null)}\n onSubmit={submitLinkDialog}\n theme={resolvedTheme}\n />\n <UrlDialog\n title=\"Image\"\n value={imageUrl}\n visible={imageRequest !== null}\n placeholder=\"https://\"\n confirmLabel=\"Insert\"\n onChangeText={setImageUrl}\n onCancel={() => setImageRequest(null)}\n onSubmit={submitImageDialog}\n theme={resolvedTheme}\n />\n </>\n );\n};\n\nexport const OpenEditorNativeViewer = ({\n document = nativeSeedDocument,\n theme,\n renderers,\n}: OpenEditorNativeViewerProps) => {\n const resolvedTheme = {\n ...defaultNativeTheme,\n ...theme,\n toolbar: {\n ...defaultNativeTheme.toolbar,\n ...theme?.toolbar,\n },\n } satisfies ResolvedOpenEditorNativeTheme;\n const normalizedDocument = normalizeForNativeEditor(document);\n\n return (\n <View style={[styles.viewer, { backgroundColor: resolvedTheme.surface, borderColor: resolvedTheme.border }]}>\n {normalizedDocument.content.map((node, index) =>\n renderNativeViewerNode(node, `native-viewer-${index}`, resolvedTheme, renderers),\n )}\n </View>\n );\n};\n\nconst CommandButton = ({\n label,\n active = false,\n primary = false,\n theme,\n onPress,\n}: {\n label: string;\n active?: boolean;\n primary?: boolean;\n theme: ResolvedOpenEditorNativeTheme;\n onPress: () => void;\n}) => (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected: active }}\n onPress={onPress}\n style={[\n styles.commandButton,\n { backgroundColor: theme.surface, borderColor: theme.border },\n active && { backgroundColor: theme.accent, borderColor: theme.accent },\n primary && { backgroundColor: theme.primary, borderColor: theme.primary },\n ]}\n >\n <Text style={[styles.commandButtonText, { color: theme.text }, (active || primary) && { color: active ? theme.accentText : theme.primaryText }]}>\n {label}\n </Text>\n </Pressable>\n);\n\nconst UrlDialog = ({\n title,\n value,\n visible,\n placeholder,\n confirmLabel,\n onChangeText,\n onCancel,\n onSubmit,\n theme,\n}: {\n title: string;\n value: string;\n visible: boolean;\n placeholder: string;\n confirmLabel: string;\n onChangeText: (value: string) => void;\n onCancel: () => void;\n onSubmit: () => void;\n theme: ResolvedOpenEditorNativeTheme;\n}) => (\n <Modal visible={visible} transparent animationType=\"fade\" onRequestClose={onCancel}>\n <View style={[styles.dialogBackdrop, { backgroundColor: theme.backdrop }]}>\n <View style={[styles.dialog, { backgroundColor: theme.surface }]}>\n <Text style={[styles.dialogTitle, { color: theme.text }]}>{title}</Text>\n <TextInput\n autoCapitalize=\"none\"\n autoCorrect={false}\n keyboardType=\"url\"\n onChangeText={onChangeText}\n placeholder={placeholder}\n placeholderTextColor={theme.placeholder}\n style={[styles.dialogInput, { borderColor: theme.border, color: theme.text }]}\n value={value}\n />\n <View style={styles.dialogActions}>\n <CommandButton label=\"Cancel\" theme={theme} onPress={onCancel} />\n <CommandButton label={confirmLabel} primary theme={theme} onPress={onSubmit} />\n </View>\n </View>\n </View>\n </Modal>\n);\n\nconst styles = StyleSheet.create({\n viewer: {\n borderRadius: 12,\n borderWidth: 1,\n gap: 4,\n padding: 16,\n },\n nativeEditor: {\n minHeight: 320,\n },\n toolbar: {\n borderRadius: 10,\n borderWidth: 1,\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n gap: 8,\n padding: 8,\n },\n toolbarButton: {\n borderRadius: 999,\n borderWidth: 1,\n minHeight: 34,\n paddingHorizontal: 12,\n paddingVertical: 8,\n },\n toolbarButtonText: {\n fontSize: 13,\n fontWeight: \"700\",\n },\n unavailable: {\n backgroundColor: \"#ffffff\",\n borderColor: \"#e5e5e5\",\n borderRadius: 8,\n borderCurve: \"continuous\",\n borderWidth: 1,\n margin: 16,\n padding: 16,\n },\n unavailableTitle: {\n fontSize: 16,\n fontWeight: \"700\",\n marginBottom: 4,\n },\n unavailableText: {\n fontSize: 14,\n lineHeight: 20,\n },\n commandButton: {\n alignItems: \"center\",\n backgroundColor: \"#ffffff\",\n borderColor: \"#e5e5e5\",\n borderRadius: 8,\n borderWidth: 1,\n justifyContent: \"center\",\n minHeight: 38,\n paddingHorizontal: 12,\n },\n commandButtonText: {\n color: \"#171717\",\n fontSize: 13,\n fontWeight: \"700\",\n },\n dialogBackdrop: {\n alignItems: \"center\",\n backgroundColor: \"rgba(0, 0, 0, 0.32)\",\n flex: 1,\n justifyContent: \"center\",\n padding: 24,\n },\n dialog: {\n backgroundColor: \"#ffffff\",\n borderRadius: 8,\n gap: 12,\n maxWidth: 420,\n padding: 16,\n width: \"100%\",\n },\n dialogTitle: {\n color: \"#171717\",\n fontSize: 17,\n fontWeight: \"700\",\n },\n dialogInput: {\n borderColor: \"#e5e5e5\",\n borderRadius: 8,\n borderWidth: 1,\n color: \"#171717\",\n fontSize: 15,\n minHeight: 44,\n paddingHorizontal: 12,\n },\n dialogActions: {\n flexDirection: \"row\",\n gap: 8,\n justifyContent: \"flex-end\",\n },\n});\n\nexport {\n createNativeEditorDocument,\n fromNativeEditorDocument,\n sanitizeNativeEditorDocument,\n toNativeEditorDocument,\n} from \"./document.js\";\nexport {\n createOpenEditorNativeToolbarItems,\n defaultDocumentForToolbarAction,\n nativeToolbarParityCoverage,\n openEditorNativeToolbarActionKeys,\n openEditorNativeToolbarItems,\n} from \"./toolbar.js\";\nexport type { OpenEditorNativeToolbarActionKey } from \"./toolbar.js\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/selection.ts"],"names":[],"mappings":";AAGA,IAAM,iBAAA,GAAoB,CAAC,IAAA,KAAkC;AAC3D,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,OAAO,IAAA,CAAK,MAAM,MAAA,IAAU,CAAA;AAAA,EAC9B;AAEA,EAAA,OAAO,IAAA,CAAK,OAAA,EAAS,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA;AAClF,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,IAAA,KAAkC;AACrD,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,OAAO,kBAAkB,IAAI,CAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ;AACzB,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAA,EAAO,UAAU,KAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,EAAG,CAAC,CAAA;AAC5E,CAAA;AAEO,IAAM,4BAAA,GAA+B,CAAC,QAAA,EAA8B,SAAA,KAA0B;AACnG,EAAA,MAAM,WAAW,SAAA,EAAW,IAAA,KAAS,MAAA,GACjC,SAAA,CAAU,MACV,SAAA,EAAW,IAAA,KAAS,MAAA,GAClB,IAAA,CAAK,IAAI,SAAA,CAAU,MAAA,IAAU,GAAG,SAAA,CAAU,IAAA,IAAQ,CAAC,CAAA,GACnD,CAAA;AAEN,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,SAAS,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC/D,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAC,CAAA;AAEpD,IAAA,IAAI,QAAA,IAAY,QAAQ,QAAA,GAAW,MAAA,GAAS,YAAY,KAAA,KAAU,QAAA,CAAS,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC7F,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAA,IAAU,QAAA;AAAA,EACZ;AAEA,EAAA,OAAO,KAAK,GAAA,CAAI,QAAA,CAAS,OAAA,CAAQ,MAAA,GAAS,GAAG,CAAC,CAAA;AAChD","file":"selection.js","sourcesContent":["import type { OpenEditorDocument, ProseMirrorNode } from \"@openeditor/core\";\nimport type { Selection } from \"@apollohg/react-native-prose-editor\";\n\nconst getNodeTextLength = (node: ProseMirrorNode): number => {\n if (node.type === \"text\") {\n return node.text?.length ?? 0;\n }\n\n return node.content?.reduce((total, child) => total + getNodeSize(child), 0) ?? 0;\n};\n\nconst getNodeSize = (node: ProseMirrorNode): number => {\n if (node.type === \"text\") {\n return getNodeTextLength(node);\n }\n\n if (!node.content?.length) {\n return 1;\n }\n\n return node.content.reduce((total, child) => total + getNodeSize(child), 2);\n};\n\nexport const resolveSelectedTopLevelIndex = (document: OpenEditorDocument, selection?: Selection) => {\n const position = selection?.type === \"node\"\n ? selection.pos\n : selection?.type === \"text\"\n ? Math.min(selection.anchor ?? 0, selection.head ?? 0)\n : 0;\n\n let offset = 0;\n for (let index = 0; index < document.content.length; index += 1) {\n const nodeSize = getNodeSize(document.content[index]);\n // A caret at a block boundary belongs to the following block, not the previous one.\n if (position == null || position < offset + nodeSize || index === document.content.length - 1) {\n return index;\n }\n offset += nodeSize;\n }\n\n return Math.max(document.content.length - 1, 0);\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/document.ts","../src/toolbar.ts"],"names":[],"mappings":"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","file":"toolbar.js","sourcesContent":["import {\n cloneNode,\n createDocument,\n findBlockSpecForNode,\n fromProseMirrorDocument,\n normalizeDocument,\n toProseMirrorDocument,\n type OpenEditorDocument,\n type OpenEditorDocumentMeta,\n type ProseMirrorAttrs,\n type ProseMirrorDocument,\n type ProseMirrorNode,\n} from \"@openeditor/core\";\nimport { defaultBlockRegistry } from \"@openeditor/schema\";\n\nconst NATIVE_HEADING_PATTERN = /^h([1-6])$/;\n\nconst clampHeadingLevel = (value: unknown) =>\n typeof value === \"number\" ? Math.min(Math.max(value, 1), 6) : 2;\n\nconst cloneAttrsWithoutHeadingLevel = (attrs?: ProseMirrorAttrs): ProseMirrorAttrs | undefined => {\n if (!attrs) {\n return undefined;\n }\n\n const { level: _level, ...nextAttrs } = attrs;\n return Object.keys(nextAttrs).length ? nextAttrs : undefined;\n};\n\nconst withMappedContent = (\n node: ProseMirrorNode,\n mapNode: (node: ProseMirrorNode) => ProseMirrorNode,\n): ProseMirrorNode => {\n const cloned = cloneNode(node);\n return {\n ...cloned,\n ...(cloned.content ? { content: cloned.content.map(mapNode) } : {}),\n };\n};\n\nconst sanitizeNativeNode = (node: ProseMirrorNode): ProseMirrorNode | null => {\n const spec = findBlockSpecForNode(defaultBlockRegistry, node);\n if (spec?.support?.native === \"unsupported\") {\n return null;\n }\n\n const cloned = cloneNode(node);\n const nextContent = cloned.content\n ?.map(sanitizeNativeNode)\n .filter((child): child is ProseMirrorNode => child !== null);\n\n return {\n ...cloned,\n ...(nextContent ? { content: nextContent } : {}),\n };\n};\n\nexport const sanitizeNativeEditorDocument = (\n document: OpenEditorDocument,\n meta: OpenEditorDocumentMeta | undefined = document.meta,\n): OpenEditorDocument =>\n createDocument(\n normalizeDocument(document).content\n .map(sanitizeNativeNode)\n .filter((node): node is ProseMirrorNode => node !== null),\n meta,\n );\n\nexport const toNativeEditorNode = (node: ProseMirrorNode): ProseMirrorNode => {\n if (node.type === \"heading\") {\n const cloned = withMappedContent(node, toNativeEditorNode);\n const attrs = cloneAttrsWithoutHeadingLevel(node.attrs);\n const { attrs: _attrs, ...headingNode } = cloned;\n\n return {\n ...headingNode,\n type: `h${clampHeadingLevel(node.attrs?.level)}`,\n ...(attrs ? { attrs } : {}),\n };\n }\n\n return withMappedContent(node, toNativeEditorNode);\n};\n\nexport const fromNativeEditorNode = (node: ProseMirrorNode): ProseMirrorNode => {\n const headingMatch = NATIVE_HEADING_PATTERN.exec(node.type);\n\n if (headingMatch) {\n const cloned = withMappedContent(node, fromNativeEditorNode);\n return {\n ...cloned,\n type: \"heading\",\n attrs: { ...node.attrs, level: Number(headingMatch[1]) },\n };\n }\n\n return withMappedContent(node, fromNativeEditorNode);\n};\n\nexport const toNativeEditorDocument = (document: OpenEditorDocument): ProseMirrorDocument =>\n ({\n type: \"doc\",\n content: toProseMirrorDocument(sanitizeNativeEditorDocument(document)).content.map(toNativeEditorNode),\n });\n\nexport const fromNativeEditorDocument = (\n document: ProseMirrorDocument,\n meta?: OpenEditorDocumentMeta,\n): OpenEditorDocument =>\n normalizeDocument(\n fromProseMirrorDocument(\n {\n type: \"doc\",\n content: document.content.map(fromNativeEditorNode),\n },\n meta,\n ),\n );\n\nexport const createNativeEditorDocument = (\n content: ProseMirrorNode[],\n meta?: OpenEditorDocumentMeta,\n): ProseMirrorDocument => toNativeEditorDocument(createDocument(content, meta));\n","import type { ProseMirrorDocument } from \"@openeditor/core\";\nimport {\n createOpenEditorInsertDocument,\n defaultBlockSpecs,\n defaultMarkSpecs,\n type OpenEditorInsertPresetKey,\n} from \"@openeditor/schema\";\nimport type { EditorToolbarIcon, EditorToolbarItem } from \"@apollohg/react-native-prose-editor\";\nimport { toNativeEditorDocument } from \"./document.js\";\n\nconst glyphIcon = (text: string): EditorToolbarIcon => ({ type: \"glyph\", text });\nconst defaultIcon = (id: string): EditorToolbarIcon => ({ type: \"default\", id } as EditorToolbarIcon);\nconst platformIcon = (\n iosName: string,\n androidName: string,\n fallbackText: string,\n): EditorToolbarIcon => ({\n type: \"platform\",\n ios: { type: \"sfSymbol\", name: iosName },\n android: { type: \"material\", name: androidName },\n fallbackText,\n});\n\nexport const openEditorNativeToolbarActionKeys = {\n paragraph: \"paragraph\",\n bulletList: \"bulletList\",\n orderedList: \"orderedList\",\n taskList: \"taskList\",\n codeBlock: \"codeBlock\",\n columns: \"columns\",\n table: \"table\",\n moveBlockUp: \"openeditor:block:moveUp\",\n moveBlockDown: \"openeditor:block:moveDown\",\n undo: \"openeditor:history:undo\",\n redo: \"openeditor:history:redo\",\n dismissKeyboard: \"openeditor:keyboard:dismiss\",\n} as const;\n\nexport type OpenEditorNativeToolbarActionKey =\n (typeof openEditorNativeToolbarActionKeys)[keyof typeof openEditorNativeToolbarActionKeys];\n\nexport const createOpenEditorNativeToolbarItems = ({\n canUndo = true,\n canRedo = true,\n}: {\n canUndo?: boolean;\n canRedo?: boolean;\n} = {}): readonly EditorToolbarItem[] => {\n const items = [\n {\n type: \"group\",\n key: \"openeditor-text\",\n label: \"Text\",\n icon: glyphIcon(\"T\"),\n presentation: \"menu\",\n items: [\n { type: \"action\", key: openEditorNativeToolbarActionKeys.paragraph, label: \"Paragraph\", icon: glyphIcon(\"P\") },\n { type: \"heading\", level: 1, label: \"Heading 1\", icon: glyphIcon(\"H1\") },\n { type: \"heading\", level: 2, label: \"Heading 2\", icon: glyphIcon(\"H2\") },\n { type: \"heading\", level: 3, label: \"Heading 3\", icon: glyphIcon(\"H3\") },\n { type: \"heading\", level: 4, label: \"Heading 4\", icon: glyphIcon(\"H4\") },\n { type: \"heading\", level: 5, label: \"Heading 5\", icon: glyphIcon(\"H5\") },\n { type: \"heading\", level: 6, label: \"Heading 6\", icon: glyphIcon(\"H6\") },\n ],\n },\n {\n type: \"group\",\n key: \"openeditor-marks\",\n label: \"Marks\",\n icon: defaultIcon(\"bold\"),\n presentation: \"menu\",\n items: [\n { type: \"mark\", mark: \"bold\", label: \"Bold\", icon: defaultIcon(\"bold\") },\n { type: \"mark\", mark: \"italic\", label: \"Italic\", icon: defaultIcon(\"italic\") },\n { type: \"mark\", mark: \"underline\", label: \"Underline\", icon: defaultIcon(\"underline\") },\n { type: \"mark\", mark: \"strike\", label: \"Strikethrough\", icon: defaultIcon(\"strike\") },\n { type: \"mark\", mark: \"code\", label: \"Inline Code\", icon: platformIcon(\"curlybraces\", \"code\", \"{}\") },\n { type: \"link\", label: \"Link\", icon: defaultIcon(\"link\") },\n ],\n },\n {\n type: \"group\",\n key: \"openeditor-lists\",\n label: \"Lists\",\n icon: defaultIcon(\"bulletList\"),\n presentation: \"menu\",\n items: [\n { type: \"action\", key: openEditorNativeToolbarActionKeys.bulletList, label: \"Bullet List\", icon: defaultIcon(\"bulletList\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.orderedList, label: \"Numbered List\", icon: defaultIcon(\"orderedList\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.taskList, label: \"Task List\", icon: platformIcon(\"checklist\", \"checklist\", \"[]\") },\n { type: \"command\", command: \"indentList\", label: \"Indent List\", icon: defaultIcon(\"indentList\") },\n { type: \"command\", command: \"outdentList\", label: \"Outdent List\", icon: defaultIcon(\"outdentList\") },\n ],\n },\n {\n type: \"group\",\n key: \"openeditor-blocks\",\n label: \"Blocks\",\n icon: defaultIcon(\"blockquote\"),\n presentation: \"menu\",\n items: [\n { type: \"blockquote\", label: \"Quote\", icon: defaultIcon(\"blockquote\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.codeBlock, label: \"Code\", icon: platformIcon(\"curlybraces.square\", \"code\", \"{}\") },\n { type: \"node\", nodeType: \"horizontalRule\", label: \"Divider\", icon: defaultIcon(\"horizontalRule\") },\n { type: \"image\", label: \"Image\", icon: defaultIcon(\"image\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.columns, label: \"Columns\", icon: platformIcon(\"rectangle.split.2x1\", \"view-column\", \"||\") },\n { type: \"action\", key: openEditorNativeToolbarActionKeys.table, label: \"Table\", icon: platformIcon(\"tablecells\", \"table-chart\", \"[]\") },\n ],\n },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.moveBlockUp,\n label: \"Move Block Up\",\n icon: {\n type: \"platform\",\n ios: { type: \"sfSymbol\", name: \"arrow.up\" },\n android: { type: \"material\", name: \"keyboard-arrow-up\" },\n fallbackText: \"Up\",\n },\n },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.moveBlockDown,\n label: \"Move Block Down\",\n icon: {\n type: \"platform\",\n ios: { type: \"sfSymbol\", name: \"arrow.down\" },\n android: { type: \"material\", name: \"keyboard-arrow-down\" },\n fallbackText: \"Dn\",\n },\n },\n { type: \"separator\" },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.undo,\n label: \"Undo\",\n icon: defaultIcon(\"undo\"),\n isDisabled: !canUndo,\n placement: \"end\",\n },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.redo,\n label: \"Redo\",\n icon: defaultIcon(\"redo\"),\n isDisabled: !canRedo,\n placement: \"end\",\n },\n {\n type: \"action\",\n key: openEditorNativeToolbarActionKeys.dismissKeyboard,\n label: \"Hide Keyboard\",\n icon: {\n type: \"platform\",\n ios: { type: \"sfSymbol\", name: \"keyboard.chevron.compact.down\" },\n android: { type: \"material\", name: \"keyboard_hide\" },\n fallbackText: \"v\",\n },\n placement: \"end\",\n },\n ] satisfies readonly EditorToolbarItem[];\n\n return items;\n};\n\nexport const openEditorNativeToolbarItems = createOpenEditorNativeToolbarItems();\n\nconst walkToolbarItems = (items: readonly EditorToolbarItem[]): EditorToolbarItem[] => {\n const leafItems: EditorToolbarItem[] = [];\n for (const item of items) {\n if (item.type === \"group\") {\n leafItems.push(...walkToolbarItems(item.items));\n } else if (item.type !== \"separator\") {\n leafItems.push(item);\n }\n }\n return leafItems;\n};\n\nexport const nativeToolbarParityCoverage = () => {\n const leafItems = walkToolbarItems(openEditorNativeToolbarItems);\n const blockControls = new Map<string, string>([\n [\"paragraph\", openEditorNativeToolbarActionKeys.paragraph],\n [\"heading\", \"heading\"],\n [\"bulletList\", openEditorNativeToolbarActionKeys.bulletList],\n [\"orderedList\", openEditorNativeToolbarActionKeys.orderedList],\n [\"taskList\", openEditorNativeToolbarActionKeys.taskList],\n [\"blockquote\", \"blockquote\"],\n [\"codeBlock\", openEditorNativeToolbarActionKeys.codeBlock],\n [\"divider\", \"horizontalRule\"],\n [\"image\", \"image\"],\n [\"columns\", openEditorNativeToolbarActionKeys.columns],\n [\"table\", openEditorNativeToolbarActionKeys.table],\n ]);\n const markControls = new Map<string, string>([\n [\"bold\", \"bold\"],\n [\"italic\", \"italic\"],\n [\"underline\", \"underline\"],\n [\"strike\", \"strike\"],\n [\"code\", \"code\"],\n [\"link\", \"link\"],\n ]);\n const hasBlockControl = (control: string) =>\n leafItems.some((item) =>\n item.type === \"action\"\n ? item.key === control\n : item.type === \"heading\"\n ? control === \"heading\"\n : item.type === \"list\"\n ? item.listType === control\n : item.type === \"image\"\n ? control === \"image\"\n : item.type === \"blockquote\"\n ? control === \"blockquote\"\n : item.type === \"node\"\n ? item.nodeType === control\n : false,\n );\n const hasMarkControl = (control: string) =>\n leafItems.some((item) =>\n item.type === \"link\"\n ? control === \"link\"\n : item.type === \"mark\"\n ? item.mark === control\n : false,\n );\n\n return {\n missingBlockControls: defaultBlockSpecs\n .filter((spec) => spec.support?.native === \"supported\")\n .map((spec) => spec.name)\n .filter((name) => !hasBlockControl(blockControls.get(name) ?? \"\")),\n missingMarkControls: defaultMarkSpecs\n .map((mark) => mark.name)\n .filter((name) => !hasMarkControl(markControls.get(name) ?? \"\")),\n };\n};\n\nexport const defaultDocumentForToolbarAction = (key: string): ProseMirrorDocument | null => {\n if (\n key === \"image\"\n || key === \"link\"\n || key === openEditorNativeToolbarActionKeys.moveBlockUp\n || key === openEditorNativeToolbarActionKeys.moveBlockDown\n || key === openEditorNativeToolbarActionKeys.dismissKeyboard\n ) {\n return null;\n }\n\n try {\n return toNativeEditorDocument(createOpenEditorInsertDocument(key as OpenEditorInsertPresetKey));\n } catch {\n return null;\n }\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openeditor/native",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.19",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"repository": {
|
|
@@ -27,14 +27,14 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@expo/vector-icons": "15.0.3",
|
|
30
|
-
"@openeditor/core": "0.0.
|
|
31
|
-
"@openeditor/exporters": "0.0.
|
|
32
|
-
"@openeditor/extensions": "0.0.
|
|
30
|
+
"@openeditor/core": "0.0.19",
|
|
31
|
+
"@openeditor/exporters": "0.0.19",
|
|
32
|
+
"@openeditor/extensions": "0.0.19",
|
|
33
33
|
"react": "19.2.3",
|
|
34
34
|
"react-native": "0.85.3"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@openeditor/react-native-prose-editor": "0.0.
|
|
37
|
+
"@openeditor/react-native-prose-editor": "0.0.19",
|
|
38
38
|
"react-native-keyboard-controller": ">=1.21",
|
|
39
39
|
"react": ">=19",
|
|
40
40
|
"react-native": ">=0.85"
|