@primeui/texteditor-core 0.0.1-alpha.1 → 1.0.0-rc.1
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/LICENSE.md +35 -0
- package/README.md +12 -0
- package/dist/{chunk-GG56GLXC.mjs → chunks/chunk-25Y5HLDY.mjs} +2 -2
- package/dist/chunks/chunk-25Y5HLDY.mjs.map +1 -0
- package/dist/{chunk-PT2O4RV7.mjs → chunks/chunk-4BI7WWVV.mjs} +6 -5
- package/dist/chunks/chunk-4BI7WWVV.mjs.map +1 -0
- package/dist/{chunk-72T5I4O4.mjs → chunks/chunk-4C4R23A3.mjs} +2 -2
- package/dist/chunks/chunk-4C4R23A3.mjs.map +1 -0
- package/dist/{chunk-PT5V6UYE.mjs → chunks/chunk-4NWX3EPS.mjs} +2 -2
- package/dist/chunks/chunk-4NWX3EPS.mjs.map +1 -0
- package/dist/{chunk-XKY2VYPW.mjs → chunks/chunk-75IVOL6Q.mjs} +2 -2
- package/dist/chunks/chunk-75IVOL6Q.mjs.map +1 -0
- package/dist/{chunk-7QCHSEN2.mjs → chunks/chunk-C2TRJCIH.mjs} +2 -2
- package/dist/chunks/chunk-C2TRJCIH.mjs.map +1 -0
- package/dist/{chunk-AJOKUIQD.mjs → chunks/chunk-C6CEVLOL.mjs} +2 -2
- package/dist/chunks/chunk-C6CEVLOL.mjs.map +1 -0
- package/dist/{chunk-H3RFOYCT.mjs → chunks/chunk-DAVC2Z22.mjs} +2 -2
- package/dist/chunks/chunk-DAVC2Z22.mjs.map +1 -0
- package/dist/{chunk-NWRVBNBW.mjs → chunks/chunk-F2THMQFM.mjs} +3 -3
- package/dist/chunks/chunk-F2THMQFM.mjs.map +1 -0
- package/dist/{chunk-TBQVZVKA.mjs → chunks/chunk-F4KBJIZJ.mjs} +43 -31
- package/dist/chunks/chunk-F4KBJIZJ.mjs.map +1 -0
- package/dist/{chunk-J5LGTIGS.mjs → chunks/chunk-FLGC65SR.mjs} +2 -2
- package/dist/{chunk-J5LGTIGS.mjs.map → chunks/chunk-FLGC65SR.mjs.map} +1 -1
- package/dist/{chunk-3RKMABZR.mjs → chunks/chunk-KA3KNPLZ.mjs} +4 -4
- package/dist/chunks/chunk-KA3KNPLZ.mjs.map +1 -0
- package/dist/{chunk-OGEMGWLR.mjs → chunks/chunk-LHZDU6AA.mjs} +5 -5
- package/dist/chunks/chunk-LHZDU6AA.mjs.map +1 -0
- package/dist/{chunk-PRFYR67X.mjs → chunks/chunk-LYB4TGKX.mjs} +2 -2
- package/dist/chunks/chunk-LYB4TGKX.mjs.map +1 -0
- package/dist/{chunk-MNKMKFLQ.mjs → chunks/chunk-MMU3VGMT.mjs} +3 -3
- package/dist/chunks/chunk-MMU3VGMT.mjs.map +1 -0
- package/dist/{chunk-6YDCG63C.mjs → chunks/chunk-MMY4F74E.mjs} +9 -9
- package/dist/chunks/chunk-MMY4F74E.mjs.map +1 -0
- package/dist/{chunk-6GY64GPU.mjs → chunks/chunk-MSPB65AH.mjs} +2 -2
- package/dist/chunks/chunk-MSPB65AH.mjs.map +1 -0
- package/dist/{chunk-KNZAMA6H.mjs → chunks/chunk-NZCWIEXE.mjs} +3 -3
- package/dist/chunks/chunk-NZCWIEXE.mjs.map +1 -0
- package/dist/{chunk-DXPG5XMX.mjs → chunks/chunk-P4N6CW2J.mjs} +2 -2
- package/dist/chunks/chunk-P4N6CW2J.mjs.map +1 -0
- package/dist/{chunk-FFCQLWS5.mjs → chunks/chunk-PRW2CBOO.mjs} +2 -2
- package/dist/chunks/chunk-PRW2CBOO.mjs.map +1 -0
- package/dist/{chunk-IUQKSDKG.mjs → chunks/chunk-PSOP5GNT.mjs} +3 -3
- package/dist/chunks/chunk-PSOP5GNT.mjs.map +1 -0
- package/dist/{chunk-RH45QRSV.mjs → chunks/chunk-Q7MBG5CT.mjs} +2 -2
- package/dist/chunks/chunk-Q7MBG5CT.mjs.map +1 -0
- package/dist/{chunk-AUTGNC2Q.mjs → chunks/chunk-QMEKZ64Z.mjs} +6 -6
- package/dist/chunks/chunk-QMEKZ64Z.mjs.map +1 -0
- package/dist/{chunk-YHMP6AN3.mjs → chunks/chunk-QZUFYVD5.mjs} +4 -4
- package/dist/chunks/chunk-QZUFYVD5.mjs.map +1 -0
- package/dist/{chunk-22B454VC.mjs → chunks/chunk-RE46J3VH.mjs} +2 -2
- package/dist/chunks/chunk-RE46J3VH.mjs.map +1 -0
- package/dist/{chunk-MWT5PK3Z.mjs → chunks/chunk-SFUE4QBU.mjs} +2 -2
- package/dist/chunks/chunk-SFUE4QBU.mjs.map +1 -0
- package/dist/{chunk-TB7ZSSR2.mjs → chunks/chunk-UHENKXGQ.mjs} +2 -2
- package/dist/chunks/chunk-UHENKXGQ.mjs.map +1 -0
- package/dist/{chunk-GGPBV4BM.mjs → chunks/chunk-UN74246B.mjs} +2 -2
- package/dist/chunks/chunk-UN74246B.mjs.map +1 -0
- package/dist/{chunk-6ZN5XRH2.mjs → chunks/chunk-UORFAHNO.mjs} +2 -2
- package/dist/chunks/chunk-UORFAHNO.mjs.map +1 -0
- package/dist/{chunk-E2KXUP3F.mjs → chunks/chunk-VXO6D7N5.mjs} +2 -2
- package/dist/chunks/chunk-VXO6D7N5.mjs.map +1 -0
- package/dist/{chunk-RQ2HHNI6.mjs → chunks/chunk-XO4UUELZ.mjs} +3 -3
- package/dist/chunks/chunk-XO4UUELZ.mjs.map +1 -0
- package/dist/{chunk-EA2YI7LA.mjs → chunks/chunk-XOMJOYJG.mjs} +2 -2
- package/dist/chunks/chunk-XOMJOYJG.mjs.map +1 -0
- package/dist/{chunk-VWGQMUPD.mjs → chunks/chunk-YXOJODMQ.mjs} +3 -3
- package/dist/chunks/chunk-YXOJODMQ.mjs.map +1 -0
- package/dist/{chunk-XSVIGDQR.mjs → chunks/chunk-Z7KBTB2P.mjs} +2 -2
- package/dist/chunks/chunk-Z7KBTB2P.mjs.map +1 -0
- package/dist/{chunk-F7BJWPT6.mjs → chunks/chunk-ZSXWDZMQ.mjs} +6 -6
- package/dist/chunks/chunk-ZSXWDZMQ.mjs.map +1 -0
- package/dist/{chunk-CRAB2MFE.mjs → chunks/chunk-ZUZABDZC.mjs} +2 -2
- package/dist/chunks/chunk-ZUZABDZC.mjs.map +1 -0
- package/dist/commands/index.mjs +11 -11
- package/dist/createTextEditor.mjs +29 -29
- package/dist/index.mjs +31 -31
- package/dist/plugins/columnWidthPin.mjs +2 -2
- package/dist/plugins/contextToolbar.mjs +3 -3
- package/dist/plugins/defineTextEditorPlugin.mjs +2 -2
- package/dist/plugins/inputRules.mjs +6 -6
- package/dist/plugins/keymap.mjs +4 -4
- package/dist/plugins/mention.mjs +4 -3
- package/dist/plugins/mentionController.mjs +2 -2
- package/dist/plugins/placeholder.mjs +3 -3
- package/dist/plugins/registry.mjs +2 -2
- package/dist/plugins/selectionHighlight.mjs +3 -3
- package/dist/plugins/slashCommands.mjs +3 -3
- package/dist/plugins/tableOverlay.mjs +4 -4
- package/dist/plugins/trailingNode.mjs +2 -2
- package/dist/schema/index.mjs +6 -6
- package/dist/serialization/index.mjs +3 -3
- package/dist/texteditor.classes.mjs +2 -2
- package/dist/texteditor.constants.mjs +2 -2
- package/dist/texteditor.props.mjs +2 -2
- package/dist/texteditor.refs.mjs +2 -2
- package/dist/texteditor.state.mjs +2 -2
- package/dist/ui/focus.mjs +2 -2
- package/dist/ui/index.mjs +7 -7
- package/dist/ui/keyboard.mjs +2 -2
- package/dist/ui/menu.mjs +2 -2
- package/dist/ui/positioning.mjs +3 -3
- package/dist/ui/scroll.mjs +2 -2
- package/dist/utils/index.mjs +4 -4
- package/package.json +6 -10
- package/LICENSE +0 -23
- package/dist/chunk-22B454VC.mjs.map +0 -1
- package/dist/chunk-3RKMABZR.mjs.map +0 -1
- package/dist/chunk-6GY64GPU.mjs.map +0 -1
- package/dist/chunk-6YDCG63C.mjs.map +0 -1
- package/dist/chunk-6ZN5XRH2.mjs.map +0 -1
- package/dist/chunk-72T5I4O4.mjs.map +0 -1
- package/dist/chunk-7QCHSEN2.mjs.map +0 -1
- package/dist/chunk-AJOKUIQD.mjs.map +0 -1
- package/dist/chunk-AUTGNC2Q.mjs.map +0 -1
- package/dist/chunk-CRAB2MFE.mjs.map +0 -1
- package/dist/chunk-DXPG5XMX.mjs.map +0 -1
- package/dist/chunk-E2KXUP3F.mjs.map +0 -1
- package/dist/chunk-EA2YI7LA.mjs.map +0 -1
- package/dist/chunk-F7BJWPT6.mjs.map +0 -1
- package/dist/chunk-FFCQLWS5.mjs.map +0 -1
- package/dist/chunk-GG56GLXC.mjs.map +0 -1
- package/dist/chunk-GGPBV4BM.mjs.map +0 -1
- package/dist/chunk-H3RFOYCT.mjs.map +0 -1
- package/dist/chunk-IUQKSDKG.mjs.map +0 -1
- package/dist/chunk-KNZAMA6H.mjs.map +0 -1
- package/dist/chunk-MNKMKFLQ.mjs.map +0 -1
- package/dist/chunk-MWT5PK3Z.mjs.map +0 -1
- package/dist/chunk-NWRVBNBW.mjs.map +0 -1
- package/dist/chunk-OGEMGWLR.mjs.map +0 -1
- package/dist/chunk-PRFYR67X.mjs.map +0 -1
- package/dist/chunk-PT2O4RV7.mjs.map +0 -1
- package/dist/chunk-PT5V6UYE.mjs.map +0 -1
- package/dist/chunk-RH45QRSV.mjs.map +0 -1
- package/dist/chunk-RQ2HHNI6.mjs.map +0 -1
- package/dist/chunk-TB7ZSSR2.mjs.map +0 -1
- package/dist/chunk-TBQVZVKA.mjs.map +0 -1
- package/dist/chunk-VWGQMUPD.mjs.map +0 -1
- package/dist/chunk-XKY2VYPW.mjs.map +0 -1
- package/dist/chunk-XSVIGDQR.mjs.map +0 -1
- package/dist/chunk-YHMP6AN3.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/nodeviews/blockNodeView.ts","../../src/utils/blockPosition.ts","../../src/nodeviews/tableNodeView.ts","../../src/nodeviews/blockTableNodeView.ts","../../src/nodeviews/checkList.ts","../../src/upload/uploadManager.ts","../../src/upload/accept.ts","../../src/upload/validate.ts","../../src/logic/uploads.ts","../../src/utils/debounce.ts","../../src/logic/navigator.ts","../../src/commands/inlineContent.ts","../../src/logic/menuCommands.ts","../../src/serialization/blockSerializer.ts","../../src/texteditor.internal.ts","../../src/logic/valueEmitter.ts","../../src/serialization/markdownParser.ts","../../src/serialization/markdownSerializer.ts","../../src/state/formatState.ts","../../src/state/replaceDoc.ts","../../src/texteditor.logic.ts","../../src/createTextEditor.ts"],"names":["dom","contentDOM","TextSelection","DOMSerializer","Fragment","ProseMirrorDOMParser","document","state","CellSelection"],"mappings":"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","file":"chunk-F4KBJIZJ.mjs","sourcesContent":["import { DOMSerializer, type Node } from 'prosemirror-model';\nimport type { EditorView, NodeView } from 'prosemirror-view';\nimport { textEditorClasses as classes } from '../texteditor.classes';\n\nexport type BlockHoverCallback = (blockIndex: number, blockEl: HTMLElement | null) => void;\n\n/**\n * Get the block index (position among top-level doc children) for a given pos.\n */\nfunction getBlockIndex(view: EditorView, pos: number): number {\n let index = 0;\n\n view.state.doc.forEach((_child, childOffset) => {\n if (childOffset < pos) {\n index++;\n }\n });\n\n return index;\n}\n\n/**\n * Render a node's semantic DOM straight from the schema's `toDOM`, so block mode\n * never forks rendering: text alignment, code-block language, list `start`, etc.\n * all flow through automatically. Returns the outer element ProseMirror manages\n * and the inner `contentDOM` (the `0` hole) for inline/child content.\n */\nfunction renderFromSchema(node: Node): { dom: HTMLElement; contentDOM: HTMLElement | null } {\n const spec = node.type.spec.toDOM?.(node);\n\n if (!spec) return { dom: document.createElement('div'), contentDOM: null };\n\n const { dom, contentDOM } = DOMSerializer.renderSpec(document, spec);\n\n return { dom: dom as HTMLElement, contentDOM: (contentDOM as HTMLElement | null) ?? null };\n}\n\n/**\n * NodeView factory for block mode.\n *\n * Wraps each top-level node in:\n * <div class=\"p-text-editor-block\">\n * <div class=\"p-text-editor-block-content\">\n * <h1|p|blockquote|...> ← semantic element (contentDOM)\n * </div>\n * </div>\n *\n * Block controls are rendered by Vue as a single floating element\n * positioned based on hover state communicated via onHoverChange.\n */\nexport function createBlockNodeView(node: Node, view: EditorView, getPos: () => number | undefined, onHoverChange: BlockHoverCallback): NodeView {\n // Check if this is a top-level block (direct child of doc)\n const pos = getPos();\n const isTopLevel = pos != null && view.state.doc.resolve(pos).depth === 0;\n\n // Reject in-place updates whose attrs would change the rendered DOM, forcing\n // ProseMirror to rebuild the NodeView from the schema's toDOM. Cheaper than\n // re-deriving each attr here, and it keeps block mode byte-identical to the\n // schema (alignment, heading level, code-block language, list start, …).\n const attrsRenderEqual = (a: Node, b: Node) => JSON.stringify(a.attrs) === JSON.stringify(b.attrs);\n\n if (!isTopLevel) {\n // Nested node (e.g. paragraph inside list item) — schema DOM, no block shell.\n const { dom, contentDOM } = renderFromSchema(node);\n\n return {\n dom,\n contentDOM,\n update(updatedNode: Node) {\n if (updatedNode.type !== node.type || !attrsRenderEqual(node, updatedNode)) return false;\n\n node = updatedNode;\n\n return true;\n }\n };\n }\n\n const dom = document.createElement('div');\n\n dom.className = classes.block;\n\n const contentWrapper = document.createElement('div');\n\n contentWrapper.className = classes.blockContent;\n dom.appendChild(contentWrapper);\n\n const { dom: contentEl, contentDOM } = renderFromSchema(node);\n\n contentWrapper.appendChild(contentEl);\n\n const onMouseEnter = () => {\n const hoverPos = getPos();\n\n if (hoverPos != null) {\n onHoverChange(getBlockIndex(view, hoverPos), dom);\n }\n };\n\n const onMouseLeave = (event: MouseEvent) => {\n const related = event.relatedTarget as HTMLElement | null;\n\n if (related?.closest(`.${classes.blockControls}`)) return;\n if (related?.closest(`.${classes.block}`)) return;\n if (related?.closest(`.${classes.popoverMenu}`)) return;\n\n onHoverChange(-1, null);\n };\n\n dom.addEventListener('mouseenter', onMouseEnter);\n dom.addEventListener('mouseleave', onMouseLeave);\n\n const removeHoverListeners = () => {\n dom.removeEventListener('mouseenter', onMouseEnter);\n dom.removeEventListener('mouseleave', onMouseLeave);\n };\n\n // Atom nodes (hr, upload placeholders): no contentDOM, ProseMirror won't manage children\n if (node.type.spec.atom || !contentDOM) {\n return {\n dom,\n update(updatedNode: Node) {\n if (updatedNode.type !== node.type || !attrsRenderEqual(node, updatedNode)) return false;\n\n node = updatedNode;\n\n return true;\n },\n destroy() {\n removeHoverListeners();\n }\n };\n }\n\n return {\n dom,\n contentDOM,\n update(updatedNode: Node) {\n if (updatedNode.type !== node.type || !attrsRenderEqual(node, updatedNode)) return false;\n\n node = updatedNode;\n\n return true;\n },\n destroy() {\n removeHoverListeners();\n }\n };\n}\n","import type { Node } from 'prosemirror-model';\n\n// Top-level block index ↔ document position helpers (block mode).\n\n/** Start position of the top-level block at `index` (-1 if out of range). */\nexport function blockStartPos(doc: Node, index: number): number {\n if (index < 0 || index >= doc.childCount) return -1;\n\n let pos = 0;\n\n for (let i = 0; i < index; i++) pos += doc.child(i).nodeSize;\n\n return pos;\n}\n\n/** End position (start + nodeSize) of the top-level block at `index` (-1 if out of range). */\nexport function blockEndPos(doc: Node, index: number): number {\n const start = blockStartPos(doc, index);\n\n return start < 0 ? -1 : start + doc.child(index).nodeSize;\n}\n\n/** Insert position just after the top-level block at `index`; falls back to the\n * doc end when `index` is the last block or beyond. */\nexport function posAfterBlock(doc: Node, index: number): number {\n if (index >= doc.childCount - 1) return doc.content.size;\n\n return blockEndPos(doc, index);\n}\n\n/** Top-level block index containing the given document position. */\nexport function posToBlockIndex(doc: Node, pos: number): number {\n let offset = 0;\n\n for (let i = 0; i < doc.childCount; i++) {\n const size = doc.child(i).nodeSize;\n\n if (pos < offset + size) return i;\n offset += size;\n }\n\n return doc.childCount - 1;\n}\n","import type { Node } from 'prosemirror-model';\nimport type { EditorView, NodeView, ViewMutationRecord } from 'prosemirror-view';\nimport { textEditorClasses as classes } from '../texteditor.classes';\n\nexport interface TableNodeViewOptions {\n defaultCellWidth: number;\n}\n\n/**\n * Update colgroup columns to match the table node's column widths.\n * Replicates prosemirror-tables' updateColumnsOnResize logic.\n */\nfunction updateColumns(node: Node, colgroup: HTMLElement, table: HTMLTableElement, defaultCellMinWidth: number) {\n let totalWidth = 0;\n let fixedWidth = true;\n let nextDOM = colgroup.firstChild as HTMLElement | null;\n const row = node.firstChild;\n\n if (!row) return;\n\n for (let i = 0, col = 0; i < row.childCount; i++) {\n const { colspan, colwidth } = row.child(i).attrs;\n\n for (let j = 0; j < colspan; j++, col++) {\n const hasWidth = colwidth && colwidth[j];\n const cssWidth = hasWidth ? `${hasWidth}px` : '';\n\n totalWidth += hasWidth || defaultCellMinWidth;\n\n if (!hasWidth) fixedWidth = false;\n\n if (!nextDOM) {\n colgroup.appendChild(document.createElement('col')).style.width = cssWidth;\n } else {\n if (nextDOM.style.width !== cssWidth) nextDOM.style.width = cssWidth;\n\n nextDOM = nextDOM.nextSibling as HTMLElement | null;\n }\n }\n }\n\n // Remove extra cols\n while (nextDOM) {\n const after = nextDOM.nextSibling;\n\n nextDOM.remove();\n nextDOM = after as HTMLElement | null;\n }\n\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`;\n table.style.minWidth = '';\n } else {\n table.style.width = '';\n table.style.minWidth = `${totalWidth}px`;\n }\n}\n\n/**\n * Custom table NodeView that wraps the table in a div.tableWrapper.\n *\n * Replicates prosemirror-tables' TableView (wrapper, colgroup, tbody as contentDOM)\n * but adds ignoreMutation for our selection outline overlay.\n */\nexport function createTableNodeView(node: Node, _view: EditorView, _getPos: () => number | undefined, options: TableNodeViewOptions): NodeView {\n const dom = document.createElement('div');\n\n dom.className = 'tableWrapper';\n\n const table = dom.appendChild(document.createElement('table'));\n\n table.style.setProperty('--default-cell-min-width', `${options.defaultCellWidth}px`);\n\n const colgroup = table.appendChild(document.createElement('colgroup'));\n\n updateColumns(node, colgroup, table, options.defaultCellWidth);\n\n const contentDOM = table.appendChild(document.createElement('tbody'));\n\n return {\n dom,\n contentDOM,\n update(updatedNode: Node) {\n if (updatedNode.type !== node.type) return false;\n\n node = updatedNode;\n updateColumns(node, colgroup, table, options.defaultCellWidth);\n\n return true;\n },\n ignoreMutation(mutation: ViewMutationRecord) {\n const target = mutation.target as HTMLElement;\n\n // prosemirror-tables' original: ignore attribute changes on table or colgroup children\n if (mutation.type === 'attributes' && (target === table || colgroup.contains(target))) return true;\n\n // Ignore all our injected elements (triggers, outline, add buttons)\n if (target === dom && mutation.type === 'childList') {\n const isOurElement = (el: HTMLElement) => el.classList?.contains(classes.tableSelectionOutline) || el.classList?.contains(classes.tableTrigger) || el.classList?.contains(classes.tableAdd);\n\n for (let i = 0; i < mutation.addedNodes.length; i++) {\n if (isOurElement(mutation.addedNodes[i] as HTMLElement)) return true;\n }\n\n for (let i = 0; i < mutation.removedNodes.length; i++) {\n if (isOurElement(mutation.removedNodes[i] as HTMLElement)) return true;\n }\n }\n\n // Ignore mutations inside our injected elements\n if (target.closest?.(`.${classes.tableSelectionOutline}, .${classes.tableTrigger}, .${classes.tableAdd}`)) return true;\n\n return false;\n }\n };\n}\n","import type { Node } from 'prosemirror-model';\nimport type { EditorView, NodeView } from 'prosemirror-view';\nimport { textEditorClasses as classes } from '../texteditor.classes';\nimport { posToBlockIndex } from '../utils/blockPosition';\nimport { createTableNodeView } from './tableNodeView';\n\nexport interface BlockTableNodeViewOptions {\n defaultCellWidth: number;\n onBlockHoverChange: (index: number, el: HTMLElement | null) => void;\n}\n\n/**\n * Block-mode table NodeView: wraps the classic table NodeView in a block shell\n * (drag handle + hover surface) so tables participate in block-mode controls.\n */\nexport function createBlockTableNodeView(node: Node, view: EditorView, getPos: () => number | undefined, options: BlockTableNodeViewOptions): NodeView {\n const tableNV = createTableNodeView(node, view, getPos, { defaultCellWidth: options.defaultCellWidth });\n\n const dom = document.createElement('div');\n\n dom.className = classes.block;\n\n const contentWrapper = document.createElement('div');\n\n contentWrapper.className = classes.blockContent;\n contentWrapper.appendChild(tableNV.dom);\n dom.appendChild(contentWrapper);\n\n const onMouseEnter = () => {\n const pos = getPos();\n\n if (pos != null) options.onBlockHoverChange(posToBlockIndex(view.state.doc, pos), dom);\n };\n\n const onMouseLeave = (event: MouseEvent) => {\n const related = event.relatedTarget as HTMLElement | null;\n\n if (related?.closest(`.${classes.blockControls}`)) return;\n if (related?.closest(`.${classes.block}`)) return;\n if (related?.closest(`.${classes.popoverMenu}`)) return;\n options.onBlockHoverChange(-1, null);\n };\n\n dom.addEventListener('mouseenter', onMouseEnter);\n dom.addEventListener('mouseleave', onMouseLeave);\n\n return {\n dom,\n contentDOM: tableNV.contentDOM,\n update: tableNV.update?.bind(tableNV),\n ignoreMutation: tableNV.ignoreMutation?.bind(tableNV),\n destroy() {\n dom.removeEventListener('mouseenter', onMouseEnter);\n dom.removeEventListener('mouseleave', onMouseLeave);\n }\n };\n}\n","import type { Node } from 'prosemirror-model';\nimport type { EditorView } from 'prosemirror-view';\n\n/**\n * NodeView for check_list_item nodes.\n * Renders an interactive checkbox that dispatches ProseMirror transactions.\n *\n * Output DOM structure:\n * <li data-p-checked=\"false|true\">\n * <label contenteditable=\"false\">\n * <input type=\"checkbox\" />\n * <span></span>\n * </label>\n * <div> ← contentDOM (ProseMirror renders paragraph content here)\n * </div>\n * </li>\n */\nexport function checkListItemNodeView(node: Node, view: EditorView, getPos: () => number | undefined) {\n const li = document.createElement('li');\n\n li.setAttribute('data-p-checked', node.attrs.checked ? 'true' : 'false');\n\n // Checkbox label (non-editable)\n const label = document.createElement('label');\n\n label.contentEditable = 'false';\n\n const checkbox = document.createElement('input');\n\n checkbox.type = 'checkbox';\n checkbox.checked = node.attrs.checked;\n // Accessible name from the item's text (label text lives in sibling contentDOM).\n checkbox.setAttribute('aria-label', node.textContent || 'To-do item');\n\n const onChange = () => {\n const pos = getPos();\n\n if (pos == null) return;\n\n const tr = view.state.tr.setNodeMarkup(pos, null, {\n ...node.attrs,\n checked: checkbox.checked\n });\n\n view.dispatch(tr);\n };\n\n checkbox.addEventListener('change', onChange);\n\n const span = document.createElement('span');\n\n label.appendChild(checkbox);\n label.appendChild(span);\n li.appendChild(label);\n\n // Content container — ProseMirror renders the paragraph here\n const contentDOM = document.createElement('div');\n\n li.appendChild(contentDOM);\n\n return {\n dom: li,\n contentDOM,\n update(updatedNode: Node) {\n if (updatedNode.type.name !== 'check_list_item') return false;\n\n li.setAttribute('data-p-checked', updatedNode.attrs.checked ? 'true' : 'false');\n checkbox.checked = updatedNode.attrs.checked;\n checkbox.setAttribute('aria-label', updatedNode.textContent || 'To-do item');\n\n return true;\n },\n destroy() {\n checkbox.removeEventListener('change', onChange);\n }\n };\n}\n","import type { UploadSlotEntry } from '@primeui/texteditor-types';\n\ninterface InternalEntry {\n id: string;\n file: File;\n progress: number;\n status: 'uploading' | 'complete' | 'error' | 'cancelled';\n cancelled: boolean;\n controller: AbortController;\n cancel: () => void;\n}\n\ntype UploadHandler = (file: File, options: { onProgress: (percent: number) => void; signal: AbortSignal }) => Promise<string>;\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n}\n\nexport class UploadManager<TResult> {\n private entries: InternalEntry[] = [];\n private results = new Map<number, TResult>();\n private nextIndex = 0;\n private onStateChange: (entries: UploadSlotEntry[]) => void;\n private onAllComplete: (results: TResult[]) => void;\n private onAllDismissed: () => void;\n private onError?: (file: File, error: unknown) => void;\n\n constructor(callbacks: { onStateChange: (entries: UploadSlotEntry[]) => void; onAllComplete: (results: TResult[]) => void; onAllDismissed: () => void; onError?: (file: File, error: unknown) => void }) {\n this.onStateChange = callbacks.onStateChange;\n this.onAllComplete = callbacks.onAllComplete;\n this.onAllDismissed = callbacks.onAllDismissed;\n this.onError = callbacks.onError;\n }\n\n start(files: File[], uploadHandler: UploadHandler, mapResult: (url: string, file: File) => TResult): void {\n for (const file of files) {\n const id = Math.random().toString(36).slice(2, 10);\n const index = this.nextIndex++;\n const controller = new AbortController();\n const entry: InternalEntry = {\n id,\n file,\n progress: 0,\n status: 'uploading',\n cancelled: false,\n controller,\n cancel: () => {\n entry.cancelled = true;\n entry.status = 'cancelled';\n controller.abort();\n this.emitState();\n this.checkAllComplete();\n }\n };\n\n this.entries.push(entry);\n this.emitState();\n\n uploadHandler(file, {\n signal: controller.signal,\n onProgress: (percent: number) => {\n if (!entry.cancelled) {\n entry.progress = percent;\n this.emitState();\n }\n }\n })\n .then((url) => {\n if (!entry.cancelled) {\n entry.status = 'complete';\n entry.progress = 100;\n this.results.set(index, mapResult(url, file));\n this.emitState();\n }\n })\n .catch((error) => {\n if (!entry.cancelled) {\n entry.status = 'error';\n this.emitState();\n this.onError?.(file, error);\n }\n })\n .finally(() => this.checkAllComplete());\n }\n }\n\n dismiss(): void {\n this.entries.forEach((e) => {\n if (e.status === 'uploading') {\n e.cancelled = true;\n e.status = 'cancelled';\n e.controller.abort();\n }\n });\n this.reset();\n this.onAllDismissed();\n }\n\n getEntries(): UploadSlotEntry[] {\n return this.entries.map((e) => ({\n id: e.id,\n fileName: e.file.name,\n fileSize: e.file.size,\n fileSizeFormatted: formatFileSize(e.file.size),\n progress: e.progress,\n status: e.status,\n cancel: e.cancel\n }));\n }\n\n private checkAllComplete(): void {\n // Already finalized (e.g. dismiss() reset the queue) — nothing to do.\n if (this.entries.length === 0) return;\n\n if (this.entries.every((e) => e.status !== 'uploading')) {\n // Emit results in original selection order, not resolution order.\n const ordered = [...this.results.keys()].sort((a, b) => a - b).map((k) => this.results.get(k) as TResult);\n\n if (ordered.length > 0) {\n this.onAllComplete(ordered);\n } else {\n this.onAllDismissed();\n }\n\n this.reset();\n }\n }\n\n private reset(): void {\n this.entries = [];\n this.results = new Map();\n this.nextIndex = 0;\n this.emitState();\n }\n\n private emitState(): void {\n this.onStateChange(this.getEntries());\n }\n}\n","// Matches a file against an HTML `accept`-style allowlist (MIME, wildcard, or extension).\nexport function matchesAccept(file: File, accept: string | null | undefined): boolean {\n if (!accept) return true;\n\n const tokens = accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean);\n\n if (tokens.length === 0) return true;\n\n const fileType = (file.type || '').toLowerCase();\n const fileName = (file.name || '').toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith('.')) return fileName.endsWith(token);\n\n if (token.endsWith('/*')) return fileType.startsWith(token.slice(0, token.indexOf('/') + 1));\n\n return fileType === token;\n });\n}\n","import { matchesAccept } from './accept';\n\nexport type UploadRejectReason = 'max-file-count' | 'max-file-size' | 'file-type';\n\nexport interface UploadConstraints {\n maxCount: number;\n maxSize: number;\n accept?: string | null;\n}\n\n// Validates files against count, type and size; rejects via onReject and returns the valid ones.\n// Type check trusts the (spoofable) file.type/extension — the server MUST re-validate.\nexport function validateUploadFiles(files: File[], constraints: UploadConstraints, onReject: (files: File[], reason: UploadRejectReason) => void): File[] {\n const { maxCount, maxSize, accept } = constraints;\n\n if (files.length > maxCount) {\n onReject(files, 'max-file-count');\n\n return [];\n }\n\n const valid: File[] = [];\n\n for (const file of files) {\n if (!matchesAccept(file, accept)) {\n onReject([file], 'file-type');\n } else if (file.size > maxSize) {\n onReject([file], 'max-file-size');\n } else {\n valid.push(file);\n }\n }\n\n return valid;\n}\n","import { UploadManager } from '../upload/uploadManager';\nimport { validateUploadFiles, type UploadRejectReason } from '../upload/validate';\nimport { sanitizeImageUrl, sanitizeUrl } from '../utils/url';\nimport type { EditorContext } from './context';\n\ntype UploadHandler = (file: File, options: { onProgress: (percent: number) => void; signal: AbortSignal }) => Promise<string>;\n\nexport function createUploadModule(ctx: EditorContext) {\n const { props, emit, schema, findPlaceholderPos, removePlaceholder } = ctx;\n\n const imageConstraints = () => ({\n maxCount: (props.imageMaxFileCount as number) ?? 3,\n maxSize: (props.imageMaxFileSize as number) ?? 1024 * 1024,\n accept: (props.allowedImageTypes as string | undefined) ?? 'image/*'\n });\n const documentConstraints = () => ({\n maxCount: (props.documentMaxFileCount as number) ?? 3,\n maxSize: (props.documentMaxFileSize as number) ?? 10 * 1024 * 1024,\n accept: props.allowedDocumentTypes as string | undefined\n });\n const rejectImage = (files: File[], reason: UploadRejectReason) => emit('image-reject', { files, reason });\n const rejectDocument = (files: File[], reason: UploadRejectReason) => emit('document-reject', { files, reason });\n\n const imageManager = new UploadManager<{ src: string; alt?: string }>({\n onStateChange: (entries) => emit('image-upload-state-change', entries),\n onError: (file, error) => emit('image-upload-error', { file, error }),\n onAllComplete: (results) => {\n const view = ctx.getView();\n\n if (!view || results.length === 0) return;\n\n const pos = findPlaceholderPos(schema.nodes.image_upload_placeholder);\n\n if (pos >= 0) {\n const imageNodes = results\n .map(({ src, alt }) => ({ src: sanitizeImageUrl(src), alt }))\n .filter((r) => r.src != null)\n .map(({ src, alt }) => schema.nodes.image.create({ src, alt: alt || null }));\n\n view.dispatch(view.state.tr.replaceWith(pos, pos + 1, schema.nodes.paragraph.create(null, imageNodes)));\n }\n\n emit('image-upload-complete');\n },\n onAllDismissed: () => {\n removePlaceholder(schema.nodes.image_upload_placeholder);\n emit('image-upload-complete');\n }\n });\n\n const documentManager = new UploadManager<{ url: string; fileName: string }>({\n onStateChange: (entries) => emit('document-upload-state-change', entries),\n onError: (file, error) => emit('document-upload-error', { file, error }),\n onAllComplete: (results) => {\n const view = ctx.getView();\n\n if (!view || results.length === 0) return;\n\n const pos = findPlaceholderPos(schema.nodes.document_upload_placeholder);\n\n if (pos >= 0) {\n const nodes = results.map(({ url, fileName }) => {\n const href = sanitizeUrl(url);\n const marks = href ? [schema.marks.link.create({ href })] : [];\n\n return schema.nodes.paragraph.create(null, schema.text(fileName, marks));\n });\n\n view.dispatch(view.state.tr.replaceWith(pos, pos + 1, nodes));\n }\n\n emit('document-upload-complete');\n },\n onAllDismissed: () => {\n removePlaceholder(schema.nodes.document_upload_placeholder);\n emit('document-upload-complete');\n }\n });\n\n const imageHandler = () => (props.imageUploadHandler ?? props.uploadHandler) as UploadHandler | undefined;\n const documentHandler = () => (props.documentUploadHandler ?? props.uploadHandler) as UploadHandler | undefined;\n\n return {\n startImageUploads: (files: File[]) => {\n const handler = imageHandler();\n\n if (!handler) return;\n\n const valid = validateUploadFiles(files, imageConstraints(), rejectImage);\n\n if (valid.length > 0) imageManager.start(valid, handler, (url, file) => ({ src: url, alt: file.name }));\n else removePlaceholder(schema.nodes.image_upload_placeholder);\n },\n dismissImageUpload: () => imageManager.dismiss(),\n validateImageFiles: (files: File[]) => validateUploadFiles(files, imageConstraints(), rejectImage),\n startDocumentUploads: (files: File[]) => {\n const handler = documentHandler();\n\n if (!handler) return;\n\n const valid = validateUploadFiles(files, documentConstraints(), rejectDocument);\n\n if (valid.length > 0) documentManager.start(valid, handler, (url, file) => ({ url, fileName: file.name }));\n else removePlaceholder(schema.nodes.document_upload_placeholder);\n },\n dismissDocumentUpload: () => documentManager.dismiss(),\n validateDocumentFiles: (files: File[]) => validateUploadFiles(files, documentConstraints(), rejectDocument)\n };\n}\n","export interface Debouncer {\n schedule: (fn: () => void) => void;\n flush: () => void;\n cancel: () => void;\n}\n\n// Trailing debouncer; wait <= 0 runs synchronously (preserving immediate-emit behaviour).\nexport function createDebouncer(wait: number): Debouncer {\n let timer: ReturnType<typeof setTimeout> | null = null;\n let pending: (() => void) | null = null;\n\n const cancel = () => {\n if (timer != null) clearTimeout(timer);\n timer = null;\n pending = null;\n };\n\n const flush = () => {\n if (timer != null) clearTimeout(timer);\n timer = null;\n const fn = pending;\n\n pending = null;\n fn?.();\n };\n\n const schedule = (fn: () => void) => {\n if (wait <= 0) {\n fn();\n\n return;\n }\n\n pending = fn;\n\n if (timer != null) clearTimeout(timer);\n\n timer = setTimeout(() => {\n timer = null;\n const run = pending;\n\n pending = null;\n run?.();\n }, wait);\n };\n\n return { schedule, flush, cancel };\n}\n","import { TextSelection } from 'prosemirror-state';\nimport type { TextEditorHeadingEntry } from '@primeui/texteditor-types';\nimport { createDebouncer } from '../utils/debounce';\nimport type { EditorContext } from './context';\n\nexport function createNavigatorModule(ctx: EditorContext) {\n const { getView, getElement, emit, schema, props } = ctx;\n\n const getDocumentHeadings = (): TextEditorHeadingEntry[] => {\n const view = getView();\n\n if (!view) return [];\n\n const headings: TextEditorHeadingEntry[] = [];\n\n view.state.doc.descendants((node, pos) => {\n if (node.type === schema.nodes.heading) {\n headings.push({ pos, level: node.attrs.level, text: node.textContent });\n\n return false;\n }\n\n return undefined;\n });\n\n return headings;\n };\n\n const debouncer = createDebouncer((props.valueChangeDebounce as number) ?? 0);\n const scheduleHeadings = () => debouncer.schedule(() => emit('navigator-headings-change', getDocumentHeadings()));\n\n // The heading the caret currently sits under: the last heading at or before\n // the selection. Selection-based tracking works even when the document is too\n // short to scroll (where scroll-position tracking is stuck on the first one).\n const activeIndexFromSelection = (headings: TextEditorHeadingEntry[]): number | null => {\n const view = getView();\n\n if (!view || headings.length === 0) return null;\n\n const caret = view.state.selection.from;\n let idx = -1;\n\n for (let i = 0; i < headings.length; i++) {\n if (headings[i].pos <= caret) idx = i;\n else break;\n }\n\n return idx >= 0 ? idx : null;\n };\n\n // Resolve the active heading index from scroll position (shared by sync + rAF paths).\n const computeActiveIndex = (headings: TextEditorHeadingEntry[]) => {\n const el = getElement();\n\n if (!el || headings.length === 0) return null;\n\n // Prefer scroll position only when the document can actually scroll;\n // otherwise the selection is the reliable signal.\n const canScroll = el.scrollHeight - el.clientHeight > 1;\n\n if (!canScroll) return activeIndexFromSelection(headings);\n\n const editorTop = el.getBoundingClientRect().top;\n const headingEls = el.querySelectorAll('h1, h2, h3, h4, h5, h6');\n let activeIdx = 0;\n\n headingEls.forEach((node, i) => {\n if (i >= headings.length) return;\n if (node.getBoundingClientRect().top - editorTop <= 50) activeIdx = i;\n });\n\n return activeIdx;\n };\n\n let rafId = 0;\n\n return {\n getDocumentHeadings,\n scheduleHeadings,\n cancel: () => {\n debouncer.cancel();\n cancelAnimationFrame(rafId);\n },\n focusHeading: (pos: number) => {\n const view = getView();\n\n if (!view) return;\n\n view.dispatch(view.state.tr.setSelection(TextSelection.create(view.state.doc, pos + 1)));\n view.focus();\n },\n scrollToHeading: (pos: number, headings: TextEditorHeadingEntry[]) => {\n const view = getView();\n\n if (!view) return;\n\n // Move caret without view.focus() — focus would trigger a competing scroll.\n view.dispatch(view.state.tr.setSelection(TextSelection.create(view.state.doc, pos + 1)));\n\n const el = getElement();\n const headingEls = el?.querySelectorAll('h1, h2, h3, h4, h5, h6');\n const idx = headings.findIndex((h) => h.pos === pos);\n const target = headingEls && idx >= 0 ? (headingEls[idx] as HTMLElement | undefined) : undefined;\n\n if (el && target) {\n const raw = el.scrollTop + (target.getBoundingClientRect().top - el.getBoundingClientRect().top);\n // Clamp so the last headings don't request a scroll past the end\n // (which the browser ignores, leaving the active row out of sync).\n const top = Math.max(0, Math.min(raw, el.scrollHeight - el.clientHeight));\n\n el.scrollTo({ top, behavior: 'smooth' });\n }\n },\n updateActiveHeading: (headings: TextEditorHeadingEntry[]) => {\n const idx = computeActiveIndex(headings);\n\n if (idx !== null) emit('navigator-active-index-change', idx);\n },\n // Re-resolve the active heading from the caret when the selection moves\n // (no doc change). Keeps the minimap in sync as the user clicks/arrows\n // around, including in short documents that can't scroll.\n syncActiveFromSelection: () => {\n const idx = activeIndexFromSelection(getDocumentHeadings());\n\n if (idx !== null) emit('navigator-active-index-change', idx);\n },\n onNavigatorScroll: (headings: TextEditorHeadingEntry[]) => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(() => {\n const idx = computeActiveIndex(headings);\n\n if (idx !== null) emit('navigator-active-index-change', idx);\n });\n }\n };\n}\n","import { Fragment, type Node as PMNode, type Schema } from 'prosemirror-model';\n\n// Collects all inline content of a block into one fragment, joining textblocks with hard breaks.\nexport function collectInlineContent(block: PMNode, schema: Schema): Fragment {\n if (block.isTextblock) return block.content;\n\n const lines: Fragment[] = [];\n\n block.descendants((node) => {\n if (node.isTextblock) {\n lines.push(node.content);\n\n return false;\n }\n\n return true;\n });\n\n if (lines.length === 0) return Fragment.empty;\n\n const hardBreak = schema.nodes.hard_break;\n let result = Fragment.empty;\n\n lines.forEach((line, i) => {\n if (i > 0 && hardBreak) result = result.addToEnd(hardBreak.create());\n\n result = result.append(line);\n });\n\n return result;\n}\n\n// Collects a block's text as newline-joined lines (one per source textblock), for code blocks.\nexport function collectTextLines(block: PMNode): string {\n if (block.isTextblock) return block.textContent;\n\n const lines: string[] = [];\n\n block.descendants((node) => {\n if (node.isTextblock) {\n lines.push(node.textContent);\n\n return false;\n }\n\n return true;\n });\n\n return lines.join('\\n');\n}\n","import { TextSelection } from 'prosemirror-state';\nimport { DOMSerializer, type Node as PMNode } from 'prosemirror-model';\nimport type { TextEditorBlockMenuCommands, TextEditorSlashMenuCommands } from '@primeui/texteditor-types';\nimport { createCommands } from '../commands';\nimport { collectInlineContent, collectTextLines } from '../commands/inlineContent';\nimport { executeSlashCommand, executeSlashCommandInline } from '../plugins/slashCommands';\nimport type { EditorContext } from './context';\n\n// Block-handle and slash-menu commands (block-mode structural editing).\nexport function createMenuCommands(ctx: EditorContext) {\n const { getView, schema, emit, props } = ctx;\n\n const buildCommands = (view: NonNullable<ReturnType<typeof getView>>) =>\n createCommands(\n view,\n schema,\n {\n onUploadImages: () => emit('image-upload-request'),\n onUploadDocuments: () => emit('document-upload-request')\n },\n { defaultCellWidth: (props.defaultTableColumnWidth as number) ?? 120 }\n );\n\n const blockPos = (view: NonNullable<ReturnType<typeof getView>>, blockIndex: number): number => {\n let pos = 0;\n\n view.state.doc.forEach((_child, offset, i) => {\n if (i === blockIndex) pos = offset;\n });\n\n return pos;\n };\n\n const getBlockMenuCommands = (blockIndex: number, onDismiss: () => void): TextEditorBlockMenuCommands => {\n const view = getView();\n\n if (!view) return {} as TextEditorBlockMenuCommands;\n\n const commands = buildCommands(view);\n\n const selectBlock = () => {\n if (!view) return;\n\n const doc = view.state.doc;\n\n if (blockIndex >= doc.childCount) return;\n\n const startPos = blockPos(view, blockIndex);\n const endPos = startPos + doc.child(blockIndex).nodeSize;\n\n view.dispatch(view.state.tr.setSelection(TextSelection.create(doc, startPos + 1, endPos - 1)));\n };\n\n const deleteBlock = () => {\n if (!view) return;\n\n const doc = view.state.doc;\n\n if (blockIndex >= doc.childCount) return;\n\n const pos = blockPos(view, blockIndex);\n const tr = view.state.tr.delete(pos, pos + doc.child(blockIndex).nodeSize);\n\n if (tr.doc.childCount === 0) tr.insert(0, schema.nodes.paragraph.create());\n\n view.dispatch(tr);\n view.focus();\n onDismiss();\n };\n\n const duplicateBlock = () => {\n if (!view) return;\n\n const doc = view.state.doc;\n\n if (blockIndex >= doc.childCount) return;\n\n const pos = blockPos(view, blockIndex);\n const block = doc.child(blockIndex);\n\n view.dispatch(view.state.tr.insert(pos + block.nodeSize, block.copy(block.content)));\n view.focus();\n onDismiss();\n };\n\n const copyToClipboard = () => {\n if (!view) return;\n\n selectBlock();\n\n const { from, to } = view.state.selection;\n const plain = view.state.doc.textBetween(from, to, '\\n');\n const slice = view.state.selection.content();\n const fragment = DOMSerializer.fromSchema(schema).serializeFragment(slice.content);\n const div = document.createElement('div');\n\n div.appendChild(fragment);\n const html = div.innerHTML;\n\n // Write both flavors so paste preserves block structure (parity with Cmd+C).\n if (typeof ClipboardItem !== 'undefined' && navigator.clipboard?.write) {\n navigator.clipboard.write([new ClipboardItem({ 'text/html': new Blob([html], { type: 'text/html' }), 'text/plain': new Blob([plain], { type: 'text/plain' }) })]).catch(() => navigator.clipboard.writeText(plain));\n } else {\n navigator.clipboard.writeText(plain);\n }\n\n onDismiss();\n };\n\n const turnBlockInto = (targetType: string, attrs?: Record<string, unknown>) => {\n if (!view) return;\n\n const doc = view.state.doc;\n\n if (blockIndex >= doc.childCount) return;\n\n const pos = blockPos(view, blockIndex);\n const block = doc.child(blockIndex);\n const blockEnd = pos + block.nodeSize;\n const getInlineContent = () => collectInlineContent(block, schema);\n\n const tr = view.state.tr;\n let newBlock;\n\n if (targetType === 'paragraph') {\n newBlock = schema.nodes.paragraph.create(attrs || null, getInlineContent());\n } else if (targetType === 'heading') {\n newBlock = schema.nodes.heading.create(attrs || { level: 1 }, getInlineContent());\n } else if (targetType === 'code_block') {\n const text = collectTextLines(block);\n\n newBlock = schema.nodes.code_block.create(null, text ? schema.text(text) : undefined);\n } else if (targetType === 'blockquote') {\n newBlock = schema.nodes.blockquote.create(null, schema.nodes.paragraph.create(null, getInlineContent()));\n } else if (targetType === 'bullet_list' || targetType === 'ordered_list' || targetType === 'check_list') {\n const listType = schema.nodes[targetType];\n\n if (block.type === schema.nodes.bullet_list || block.type === schema.nodes.ordered_list || block.type === schema.nodes.check_list) {\n const targetItemType = targetType === 'check_list' ? schema.nodes.check_list_item : schema.nodes.list_item;\n const items: PMNode[] = [];\n\n block.forEach((item) => {\n const itemAttrs = targetItemType === schema.nodes.check_list_item ? { checked: false } : null;\n\n items.push(targetItemType.create(itemAttrs, item.content));\n });\n\n newBlock = listType.create(null, items);\n } else {\n const itemType = targetType === 'check_list' ? schema.nodes.check_list_item : schema.nodes.list_item;\n const itemAttrs = targetType === 'check_list' ? { checked: false } : null;\n const item = itemType.create(itemAttrs, schema.nodes.paragraph.create(null, getInlineContent()));\n\n newBlock = listType.create(null, item);\n }\n } else {\n return;\n }\n\n tr.replaceWith(pos, blockEnd, newBlock);\n\n const selection = TextSelection.findFrom(tr.doc.resolve(pos + 1), 1, true);\n\n if (selection) tr.setSelection(selection);\n\n view.dispatch(tr);\n view.focus();\n onDismiss();\n };\n\n const applyColor = (color: string, property: 'color' | 'backgroundColor') => {\n selectBlock();\n\n if (property === 'color') commands.foregroundColor(color);\n else commands.backgroundColor(color);\n\n if (view) {\n const { to } = view.state.selection;\n\n view.dispatch(view.state.tr.setSelection(TextSelection.create(view.state.doc, to)));\n }\n\n onDismiss();\n };\n\n return {\n duplicate: duplicateBlock,\n copyToClipboard,\n deleteBlock,\n turnInto: {\n text: () => turnBlockInto('paragraph'),\n heading1: () => turnBlockInto('heading', { level: 1 }),\n heading2: () => turnBlockInto('heading', { level: 2 }),\n heading3: () => turnBlockInto('heading', { level: 3 }),\n bulletList: () => turnBlockInto('bullet_list'),\n orderedList: () => turnBlockInto('ordered_list'),\n checkList: () => turnBlockInto('check_list'),\n blockquote: () => turnBlockInto('blockquote'),\n codeBlock: () => turnBlockInto('code_block')\n },\n foregroundColor: (color: string) => applyColor(color, 'color'),\n backgroundColor: (color: string) => applyColor(color, 'backgroundColor')\n };\n };\n\n const getSlashMenuCommands = (_blockIndex: number, onDismiss: () => void): TextEditorSlashMenuCommands => {\n const view = getView();\n\n if (!view) return {} as TextEditorSlashMenuCommands;\n\n const commands = buildCommands(view);\n\n const exec = (fn: () => void, options?: { inline?: boolean }) => {\n if (!view) return;\n\n if (options?.inline) executeSlashCommandInline(view, fn);\n else executeSlashCommand(view, fn);\n\n onDismiss();\n };\n\n return {\n text: () => exec(() => commands.paragraph()),\n heading: (level: number) => exec(() => commands.heading(level)),\n bulletList: () => exec(() => commands.bulletList()),\n orderedList: () => exec(() => commands.orderedList()),\n checkList: () => exec(() => commands.checkList()),\n blockquote: () => exec(() => commands.blockquote()),\n code: () => exec(() => commands.codeBlock()),\n divider: () => exec(() => commands.insertHorizontalRule()),\n uploadImages: () => exec(() => commands.uploadImages()),\n uploadDocuments: () => exec(() => commands.uploadDocuments()),\n table: () => exec(() => commands.table(3, 3))\n };\n };\n\n return { getBlockMenuCommands, getSlashMenuCommands };\n}\n","import { Fragment, type Node, type Schema } from 'prosemirror-model';\nimport { DOMParser as ProseMirrorDOMParser, DOMSerializer } from 'prosemirror-model';\nimport { withoutPlaceholders } from './placeholders';\nimport { htmlToInertFragment } from './htmlParser';\n\nconst EMPTY_BLOCK = '<p><br></p>';\n\n/**\n * Serialize a ProseMirror doc into an array of HTML strings,\n * one per top-level block node.\n */\nexport function docToBlocks(doc: Node, schema: Schema): string[] {\n const serializer = DOMSerializer.fromSchema(schema);\n const blocks: string[] = [];\n\n withoutPlaceholders(doc.content, schema).forEach((child) => {\n const fragment = serializer.serializeFragment(Fragment.from(child));\n const container = document.createElement('div');\n\n container.appendChild(fragment);\n\n const html = container.innerHTML;\n\n blocks.push(html || EMPTY_BLOCK);\n });\n\n return blocks.length > 0 ? blocks : [EMPTY_BLOCK];\n}\n\n/**\n * Parse an array of HTML strings into a ProseMirror doc.\n * Each string becomes one or more top-level block nodes.\n */\nexport function blocksToDoc(blocks: string[], schema: Schema): Node {\n const parser = ProseMirrorDOMParser.fromSchema(schema);\n const nodes: Node[] = [];\n\n for (const html of blocks) {\n const parsed = parser.parse(htmlToInertFragment(html || EMPTY_BLOCK));\n\n parsed.content.forEach((child) => {\n nodes.push(child);\n });\n }\n\n if (nodes.length === 0) {\n nodes.push(schema.nodes.paragraph.create());\n }\n\n return schema.node('doc', null, nodes);\n}\n\nexport { EMPTY_BLOCK };\n","// Internal constants — not part of the public API (those live in texteditor.constants.ts).\n\n// Table column sizing defaults (px), used when the matching prop is unset.\nexport const TABLE_MIN_COLUMN_WIDTH = 40;\nexport const TABLE_DEFAULT_COLUMN_WIDTH = 120;\n\n// Doc size above which value-change emits coalesce into one rAF instead of firing per keystroke.\nexport const VALUE_CHANGE_AUTO_DEFER_THRESHOLD = 8000;\n\n// Combobox menu ids referenced by aria-controls. Same literals appear as `menu-id` on the Vue\n// PopoverMenu parts and in the a11y e2e spec — changing one requires updating those call sites.\nexport const MENTION_MENU_ID = 'p-te-mention-menu';\nexport const SLASH_MENU_ID = 'p-te-slash-menu';\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport { createDebouncer } from '../utils/debounce';\nimport { docToBlocks } from '../serialization/blockSerializer';\nimport { docToHtml } from '../serialization/htmlSerializer';\nimport { VALUE_CHANGE_AUTO_DEFER_THRESHOLD } from '../texteditor.internal';\n\nexport interface ValueEmitterOptions {\n /** Live view accessor (the view is created after this module). */\n getView: () => EditorView | null;\n schema: Schema;\n /** Emits 'value-change' with the serialized document. */\n emit: (value: string | string[]) => void;\n isBlockMode: () => boolean;\n /** Explicit debounce in ms; 0 (or unset) keeps synchronous emit on small docs. */\n debounceMs: number;\n}\n\nexport interface ValueEmitter {\n /** Serialize the current doc and emit immediately. */\n emitValueChange: () => void;\n /**\n * Emit honoring the configured strategy: explicit debounce when set, else a\n * synchronous emit on small docs and a single coalesced rAF on large docs.\n */\n scheduleValueChange: () => void;\n /** Flush any pending rAF/debounced emit synchronously (unmount / getValue). */\n flushValueChange: () => void;\n}\n\n/**\n * Owns the value-change emit strategy: explicit debounce when set, else sync\n * emit on small docs and a single coalesced rAF on large docs (where per-\n * keystroke O(doc) serialization would block the main thread).\n */\nexport function createValueEmitter({ getView, schema, emit, isBlockMode, debounceMs }: ValueEmitterOptions): ValueEmitter {\n const debouncer = createDebouncer(debounceMs);\n const hasExplicitDebounce = debounceMs > 0;\n let valueRaf = 0;\n\n const emitValueChange = () => {\n const view = getView();\n\n if (!view) return;\n\n emit(isBlockMode() ? docToBlocks(view.state.doc, schema) : docToHtml(view.state.doc, schema));\n };\n\n const scheduleValueChange = () => {\n if (hasExplicitDebounce) {\n debouncer.schedule(emitValueChange);\n\n return;\n }\n\n const view = getView();\n\n if (view && view.state.doc.content.size > VALUE_CHANGE_AUTO_DEFER_THRESHOLD) {\n if (valueRaf) return;\n valueRaf = requestAnimationFrame(() => {\n valueRaf = 0;\n emitValueChange();\n });\n\n return;\n }\n\n emitValueChange();\n };\n\n const flushValueChange = () => {\n if (valueRaf) {\n cancelAnimationFrame(valueRaf);\n valueRaf = 0;\n emitValueChange();\n }\n\n debouncer.flush();\n };\n\n return { emitValueChange, scheduleValueChange, flushValueChange };\n}\n","// Lightweight Markdown -> HTML converter for paste. Covers the constructs our\n// input rules support (headings, emphasis, code, links, images, lists, task\n// lists, blockquotes, fenced code, hr, tables). Output is fed to htmlToSlice,\n// which sanitizes URLs/markup, so this stays a structural transform only.\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n}\n\nfunction inlineToHtml(text: string): string {\n let out = escapeHtml(text);\n\n // images before links (![]() contains []())\n out = out.replace(/!\\[([^\\]]*)\\]\\(([^)\\s]+)\\)/g, (_m, alt, src) => `<img src=\"${src}\" alt=\"${alt}\">`);\n out = out.replace(/\\[([^\\]]+)\\]\\(([^)\\s]+)\\)/g, (_m, t, href) => `<a href=\"${href}\">${t}</a>`);\n // angle-bracket autolinks: <https://...> (escapeHtml turned < > into entities)\n out = out.replace(/<((?:https?|mailto):[^\\s&]+)>/g, (_m, url) => `<a href=\"${url}\">${url}</a>`);\n out = out.replace(/`([^`]+)`/g, (_m, c) => `<code>${c}</code>`);\n out = out.replace(/\\*\\*\\*([^*]+)\\*\\*\\*/g, '<strong><em>$1</em></strong>');\n out = out.replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>');\n out = out.replace(/(^|[^*])\\*([^*]+)\\*/g, '$1<em>$2</em>');\n out = out.replace(/~~([^~]+)~~/g, '<del>$1</del>');\n out = out.replace(/==([^=]+)==/g, '<span style=\"background-color: rgba(242, 201, 76, 0.4)\">$1</span>');\n\n return out;\n}\n\nfunction isTableSeparator(line: string): boolean {\n return /^\\s*\\|?\\s*:?-{1,}:?\\s*(\\|\\s*:?-{1,}:?\\s*)+\\|?\\s*$/.test(line);\n}\n\nfunction splitRow(line: string): string[] {\n return line\n .trim()\n .replace(/^\\||\\|$/g, '')\n .split('|')\n .map((c) => c.trim());\n}\n\nexport function markdownToHtml(md: string): string {\n const lines = md.replace(/\\r\\n?/g, '\\n').split('\\n');\n const html: string[] = [];\n let i = 0;\n\n const flushParagraph = (buf: string[]) => {\n if (buf.length) html.push(`<p>${inlineToHtml(buf.join(' '))}</p>`);\n };\n\n let para: string[] = [];\n\n while (i < lines.length) {\n const line = lines[i];\n\n // fenced code block (with optional language after the opening fence)\n const fence = line.match(/^(```|~~~)([\\w-]*)/);\n\n if (fence) {\n flushParagraph(para);\n para = [];\n const code: string[] = [];\n const lang = fence[2];\n\n i++;\n while (i < lines.length && !lines[i].startsWith(fence[1])) code.push(lines[i++]);\n i++; // skip closing fence\n\n const openTag = lang ? `<pre data-language=\"${lang}\"><code class=\"language-${lang}\">` : '<pre><code>';\n\n html.push(`${openTag}${escapeHtml(code.join('\\n'))}</code></pre>`);\n continue;\n }\n\n // table (header row + separator)\n if (line.includes('|') && i + 1 < lines.length && isTableSeparator(lines[i + 1])) {\n flushParagraph(para);\n para = [];\n const headers = splitRow(line);\n const rows: string[][] = [];\n\n i += 2;\n while (i < lines.length && lines[i].includes('|') && lines[i].trim()) rows.push(splitRow(lines[i++]));\n\n const head = `<tr>${headers.map((h) => `<th>${inlineToHtml(h)}</th>`).join('')}</tr>`;\n const body = rows.map((r) => `<tr>${r.map((c) => `<td>${inlineToHtml(c)}</td>`).join('')}</tr>`).join('');\n\n html.push(`<table>${head}${body}</table>`);\n continue;\n }\n\n const heading = line.match(/^(#{1,6})\\s+(.*)$/);\n\n if (heading) {\n flushParagraph(para);\n para = [];\n html.push(`<h${heading[1].length}>${inlineToHtml(heading[2])}</h${heading[1].length}>`);\n i++;\n continue;\n }\n\n if (/^\\s*([-*_])\\s*\\1\\s*\\1[\\s\\S]*$/.test(line) || /^---+$/.test(line.trim())) {\n flushParagraph(para);\n para = [];\n html.push('<hr>');\n i++;\n continue;\n }\n\n if (/^\\s*>\\s?/.test(line)) {\n flushParagraph(para);\n para = [];\n const quote: string[] = [];\n\n while (i < lines.length && /^\\s*>\\s?/.test(lines[i])) quote.push(lines[i++].replace(/^\\s*>\\s?/, ''));\n html.push(`<blockquote><p>${inlineToHtml(quote.join(' '))}</p></blockquote>`);\n continue;\n }\n\n // task list\n if (/^\\s*[-*]\\s+\\[[ xX]\\]\\s+/.test(line)) {\n flushParagraph(para);\n para = [];\n const items: string[] = [];\n\n while (i < lines.length && /^\\s*[-*]\\s+\\[[ xX]\\]\\s+/.test(lines[i])) {\n const m = lines[i].match(/^\\s*[-*]\\s+\\[([ xX])\\]\\s+(.*)$/)!;\n const checked = m[1].toLowerCase() === 'x';\n\n items.push(`<li data-p-checked=\"${checked}\"><p>${inlineToHtml(m[2])}</p></li>`);\n i++;\n }\n\n html.push(`<ul data-p-checked-list>${items.join('')}</ul>`);\n continue;\n }\n\n // bullet / ordered list\n const bullet = line.match(/^\\s*([-*+])\\s+(.*)$/);\n const ordered = line.match(/^\\s*(\\d+)\\.\\s+(.*)$/);\n\n if (bullet || ordered) {\n flushParagraph(para);\n para = [];\n const tag = ordered ? 'ol' : 'ul';\n const items: string[] = [];\n\n while (i < lines.length) {\n const b = lines[i].match(/^\\s*[-*+]\\s+(.*)$/);\n const o = lines[i].match(/^\\s*\\d+\\.\\s+(.*)$/);\n\n if (ordered && o) items.push(`<li><p>${inlineToHtml(o[1])}</p></li>`);\n else if (!ordered && b && !/^\\s*[-*]\\s+\\[[ xX]\\]/.test(lines[i])) items.push(`<li><p>${inlineToHtml(b[1])}</p></li>`);\n else break;\n i++;\n }\n\n html.push(`<${tag}>${items.join('')}</${tag}>`);\n continue;\n }\n\n // blank line ends a paragraph\n if (!line.trim()) {\n flushParagraph(para);\n para = [];\n i++;\n continue;\n }\n\n para.push(line.trim());\n i++;\n }\n\n flushParagraph(para);\n\n return html.join('');\n}\n\n// Heuristic: does this text look like markdown worth converting on paste?\nexport function looksLikeMarkdown(text: string): boolean {\n return /(^|\\n)\\s*(#{1,6}\\s|[-*+]\\s|\\d+\\.\\s|>\\s|```|\\|.*\\|)/.test(text) || /\\*\\*[^*]+\\*\\*|\\[[^\\]]+\\]\\([^)]+\\)|`[^`]+`/.test(text);\n}\n\n// Tags that carry real structure — their presence means the HTML is genuine\n// rich content, not a plain-text wrapper, so markdown conversion must defer to it.\nconst STRUCTURAL_TAGS = /<(h[1-6]|ul|ol|li|table|tr|td|th|thead|tbody|blockquote|pre|code|img|a|hr|strong|em|b|i|s|del|mark|input)\\b/i;\n\n// Does this clipboard text/html merely wrap the plain text in layout-only tags\n// (meta/span/div/p/br) with no real markup? Such wrappers come from editors,\n// terminals and raw views and would otherwise render markdown literally.\nexport function isTrivialHtmlWrapper(html: string, plain: string | undefined): boolean {\n if (!plain) return false;\n\n // A clipboard <meta charset> prefix is always present from Chromium; strip it.\n const body = html.replace(/^\\s*<meta[^>]*>/i, '');\n\n if (STRUCTURAL_TAGS.test(body)) return false;\n\n // Compare the HTML's visible text to the plain text. If they match (ignoring\n // whitespace), the HTML added nothing but a wrapper around the same markdown.\n const stripped = body\n .replace(/<\\/(p|div|li|tr)>/gi, '\\n')\n .replace(/<br\\s*\\/?>/gi, '\\n')\n .replace(/<[^>]+>/g, '')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/ /g, ' ');\n\n const norm = (s: string) => s.replace(/\\s+/g, ' ').trim();\n\n return norm(stripped) === norm(plain);\n}\n","import type { Mark, Node as PMNode, Schema } from 'prosemirror-model';\nimport { nodeToHtml } from './htmlSerializer';\n\n// Serialize a ProseMirror doc to Markdown (clipboard text/plain on copy). Nodes Markdown\n// can't represent (mentions, plugin nodes) fall back to raw HTML so structure/attrs survive.\n\n// Inline node types with a native markdown form; anything else falls back to HTML.\nfunction isKnownInline(node: PMNode, schema: Schema): boolean {\n return node.isText || node.type === schema.nodes.hard_break || node.type === schema.nodes.image;\n}\n\n// Block node types with a native markdown form.\nconst MARKDOWN_BLOCKS = ['paragraph', 'heading', 'blockquote', 'code_block', 'horizontal_rule', 'bullet_list', 'ordered_list', 'check_list', 'table'] as const;\n\nfunction isKnownBlock(node: PMNode, schema: Schema): boolean {\n return MARKDOWN_BLOCKS.some((name) => node.type === schema.nodes[name]);\n}\n\nfunction escapeText(text: string): string {\n return text.replace(/([\\\\`*_~[\\]])/g, '\\\\$1');\n}\n\nfunction serializeInline(node: PMNode, schema: Schema): string {\n if (node.type === schema.nodes.hard_break) return '\\n';\n\n if (node.type === schema.nodes.image) {\n const alt = (node.attrs.alt as string) || '';\n\n return ``;\n }\n\n if (!node.isText && !isKnownInline(node, schema)) return nodeToHtml(node, schema);\n if (!node.isText) return node.textContent;\n\n let text = escapeText(node.text ?? '');\n const marks: readonly Mark[] = node.marks;\n\n // Innermost first: code, then em/strong/strike, then link wrapping.\n if (marks.some((m) => m.type === schema.marks.code)) text = `\\`${node.text ?? ''}\\``;\n if (marks.some((m) => m.type === schema.marks.bold) && marks.some((m) => m.type === schema.marks.italic)) text = `***${text}***`;\n else if (marks.some((m) => m.type === schema.marks.bold)) text = `**${text}**`;\n else if (marks.some((m) => m.type === schema.marks.italic)) text = `*${text}*`;\n if (marks.some((m) => m.type === schema.marks.strikethrough)) text = `~~${text}~~`;\n\n const link = marks.find((m) => m.type === schema.marks.link);\n\n if (link) text = `[${text}](${link.attrs.href})`;\n\n return text;\n}\n\nfunction serializeInlineContent(node: PMNode, schema: Schema): string {\n let out = '';\n\n node.forEach((child) => {\n out += serializeInline(child, schema);\n });\n\n return out;\n}\n\nfunction serializeTableRow(row: PMNode, schema: Schema): string {\n const cells: string[] = [];\n\n row.forEach((cell) => {\n cells.push(\n serializeInlineContent(cell.firstChild ?? cell, schema)\n .replace(/\\n/g, ' ')\n .trim()\n );\n });\n\n return `| ${cells.join(' | ')} |`;\n}\n\nfunction serializeBlock(node: PMNode, schema: Schema, indent = ''): string {\n const n = node.type;\n\n if (n === schema.nodes.paragraph) return indent + serializeInlineContent(node, schema);\n\n if (n === schema.nodes.heading) return `${'#'.repeat(node.attrs.level as number)} ${serializeInlineContent(node, schema)}`;\n\n if (n === schema.nodes.blockquote) {\n return node.content.content.map((child) => `> ${serializeBlock(child, schema)}`).join('\\n');\n }\n\n if (n === schema.nodes.code_block) return '```' + (node.attrs.language || '') + '\\n' + node.textContent + '\\n```';\n\n if (n === schema.nodes.horizontal_rule) return '---';\n\n if (n === schema.nodes.bullet_list || n === schema.nodes.ordered_list) {\n const ordered = n === schema.nodes.ordered_list;\n const start = ordered ? (node.attrs.start as number) || 1 : 0;\n const lines: string[] = [];\n\n node.content.forEach((item, _o, i) => {\n const bullet = ordered ? `${start + i}.` : '-';\n const inner = item.content.content.map((c) => serializeBlock(c, schema, indent + ' ')).join('\\n');\n\n lines.push(`${indent}${bullet} ${inner.replace(new RegExp(`^${indent} `), '').trimStart()}`);\n });\n\n return lines.join('\\n');\n }\n\n if (n === schema.nodes.check_list) {\n const lines: string[] = [];\n\n node.content.forEach((item) => {\n const checked = item.attrs.checked ? 'x' : ' ';\n const inner = item.content.content.map((c) => serializeBlock(c, schema)).join('\\n');\n\n lines.push(`${indent}- [${checked}] ${inner.trimStart()}`);\n });\n\n return lines.join('\\n');\n }\n\n if (n === schema.nodes.table) {\n const rows: string[] = [];\n let isFirst = true;\n\n node.content.forEach((row) => {\n rows.push(serializeTableRow(row, schema));\n\n if (isFirst) {\n const cols = row.childCount;\n\n rows.push(`| ${Array(cols).fill('---').join(' | ')} |`);\n isFirst = false;\n }\n });\n\n return rows.join('\\n');\n }\n\n if (!isKnownBlock(node, schema)) return nodeToHtml(node, schema);\n\n return serializeInlineContent(node, schema);\n}\n\nexport function docToMarkdown(doc: PMNode, schema: Schema): string {\n const blocks: string[] = [];\n\n doc.forEach((node) => {\n blocks.push(serializeBlock(node, schema));\n });\n\n return blocks.join('\\n\\n');\n}\n\n// Serialize just a slice (current selection) to markdown for copy.\nexport function sliceToMarkdown(slice: { content: PMNode['content'] }, schema: Schema): string {\n const blocks: string[] = [];\n\n slice.content.forEach((node) => {\n blocks.push(node.isTextblock || node.isBlock ? serializeBlock(node, schema) : serializeInline(node, schema));\n });\n\n return blocks.join('\\n\\n');\n}\n","import type { EditorState } from 'prosemirror-state';\nimport type { Schema } from 'prosemirror-model';\nimport type { EditorView } from 'prosemirror-view';\nimport type { TextEditorFormatState } from '@primeui/texteditor-types';\nimport { undo, redo } from 'prosemirror-history';\nimport { CellSelection } from 'prosemirror-tables';\nimport { isMarkActive, isNodeActive, getMarkAttrs } from './selection';\n\nexport function deriveFormatState(state: EditorState, schema: Schema, view?: EditorView, cachedPlaceholders?: { image: boolean; document: boolean }): TextEditorFormatState {\n const { $from } = state.selection;\n\n // Marks\n const textStyleAttrs = getMarkAttrs(state, schema.marks.textStyle);\n\n // Find heading level\n let headingLevel: number | null = null;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n if ($from.node(depth).type === schema.nodes.heading) {\n headingLevel = $from.node(depth).attrs.level;\n break;\n }\n }\n\n // Find text alignment from nearest block\n let textAlign: string = 'left';\n\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type === schema.nodes.paragraph || node.type === schema.nodes.heading) {\n textAlign = node.attrs.textAlign || 'left';\n break;\n }\n }\n\n // Link — check stored marks, cursor marks, or marks within the selection range\n let linkMark = schema.marks.link.isInSet(state.storedMarks || $from.marks());\n\n if (!linkMark && !state.selection.empty) {\n const { from, to } = state.selection;\n\n state.doc.nodesBetween(from, to, (node) => {\n if (linkMark) return false;\n\n const mark = schema.marks.link.isInSet(node.marks);\n\n if (mark) linkMark = mark;\n\n return undefined;\n });\n }\n\n const placeholders = cachedPlaceholders ?? findPlaceholders(state, schema);\n\n // Fall back to the cursor's rendered font when no explicit textStyle mark.\n const computedFont = textStyleAttrs?.fontFamily && textStyleAttrs?.fontSize ? null : getComputedFont(state, view);\n const fontFamily = (textStyleAttrs?.fontFamily as string) || computedFont?.fontFamily || null;\n const fontSize = (textStyleAttrs?.fontSize as string) || computedFont?.fontSize || null;\n\n return {\n bold: isMarkActive(state, schema.marks.bold),\n italic: isMarkActive(state, schema.marks.italic),\n underline: isMarkActive(state, schema.marks.underline),\n strikethrough: isMarkActive(state, schema.marks.strikethrough),\n subscript: isMarkActive(state, schema.marks.subscript),\n superscript: isMarkActive(state, schema.marks.superscript),\n code: isMarkActive(state, schema.marks.code),\n codeBlock: isNodeActive(state, schema.nodes.code_block),\n blockquote: isNodeActive(state, schema.nodes.blockquote),\n heading: headingLevel,\n bulletList: isNodeActive(state, schema.nodes.bullet_list),\n orderedList: isNodeActive(state, schema.nodes.ordered_list),\n checkList: isNodeActive(state, schema.nodes.check_list),\n textAlign,\n fontFamily,\n fontSize,\n foregroundColor: (textStyleAttrs?.color as string) || null,\n backgroundColor: (textStyleAttrs?.backgroundColor as string) || null,\n highlight: !!textStyleAttrs?.backgroundColor,\n inTable: isNodeActive(state, schema.nodes.table),\n hasSelection: !state.selection.empty,\n hasFocus: view?.hasFocus() ?? false,\n link: !!linkMark,\n linkUrl: linkMark?.attrs.href || null,\n canUndo: undo(state),\n canRedo: redo(state),\n hasImageUploadPlaceholder: placeholders.image,\n hasDocumentUploadPlaceholder: placeholders.document,\n isMultiCellSelected: state.selection instanceof CellSelection,\n isCellMerged: isCellMergedCheck($from)\n };\n}\n\n// Last element we read computed font off, plus its result. getComputedStyle\n// forces a synchronous style recalc, and deriveFormatState runs on every\n// keystroke/selection change — but the rendered font only changes when the\n// caret moves to a different element. Caching by element skips the layout read\n// while the caret stays put (the common typing case).\nlet fontCacheEl: WeakRef<HTMLElement> | null = null;\nlet fontCacheVal: { fontFamily: string; fontSize: string } | null = null;\n\n// Read the cursor's rendered font from the DOM (fallback for unstyled text).\nfunction getComputedFont(state: EditorState, view?: EditorView): { fontFamily: string; fontSize: string } | null {\n if (!view || typeof window === 'undefined') return null;\n\n try {\n const { $from } = state.selection;\n const at = view.domAtPos($from.pos);\n let node: Node | null = at.node;\n\n // Resolve to the nearest element we can read computed styles off.\n if (node && node.nodeType === Node.TEXT_NODE) node = node.parentElement;\n\n const el = node as HTMLElement | null;\n\n if (!el || !el.isConnected) return null;\n\n // Reuse the last reading while the caret stays on the same element.\n if (fontCacheEl?.deref() === el) return fontCacheVal;\n\n const cs = window.getComputedStyle(el);\n // font-family resolves to the full stack; take the first family and\n // strip quotes so it can match the select options (e.g. \"Georgia\").\n const fontFamily = (cs.fontFamily.split(',')[0] || '').trim().replace(/^[\"']|[\"']$/g, '');\n const fontSize = cs.fontSize; // already in px, e.g. \"16px\"\n\n const result = !fontFamily && !fontSize ? null : { fontFamily, fontSize };\n\n fontCacheEl = new WeakRef(el);\n fontCacheVal = result;\n\n return result;\n } catch {\n return null;\n }\n}\n\nfunction isCellMergedCheck($from: EditorState['selection']['$from']): boolean {\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type.name === 'table_cell' || node.type.name === 'table_header') {\n return (node.attrs.colspan ?? 1) > 1 || (node.attrs.rowspan ?? 1) > 1;\n }\n }\n\n return false;\n}\n\nexport function findPlaceholders(state: EditorState, schema: Schema): { image: boolean; document: boolean } {\n const imageType = schema.nodes.image_upload_placeholder;\n const documentType = schema.nodes.document_upload_placeholder;\n let image = false;\n let document = false;\n\n state.doc.descendants((node) => {\n if (node.type === imageType) image = true;\n else if (node.type === documentType) document = true;\n\n return !(image && document);\n });\n\n return { image, document };\n}\n","import { TextSelection } from 'prosemirror-state';\nimport type { Node as PMNode } from 'prosemirror-model';\nimport type { EditorView } from 'prosemirror-view';\n\n// Replaces the whole document, clamping the prior selection into the new doc.\nexport function replaceDocPreservingSelection(view: EditorView, doc: PMNode): void {\n const prev = view.state.selection;\n const tr = view.state.tr.replaceWith(0, view.state.doc.content.size, doc.content);\n\n const max = tr.doc.content.size;\n const anchor = Math.min(prev.anchor, max);\n const head = Math.min(prev.head, max);\n\n tr.setSelection(TextSelection.between(tr.doc.resolve(anchor), tr.doc.resolve(head)));\n view.dispatch(tr);\n}\n","import type { TableActiveState, TableOverlayRect, TextEditorExpose, TextEditorInstance } from '@primeui/texteditor-types';\nimport { dropCursor } from 'prosemirror-dropcursor';\nimport { gapCursor } from 'prosemirror-gapcursor';\nimport { history } from 'prosemirror-history';\nimport { type Node as PMNode, type NodeType as PMNodeType } from 'prosemirror-model';\nimport { EditorState, TextSelection, type Command as PMCommand, type Plugin as PMPlugin } from 'prosemirror-state';\nimport { addColumnAfter, addRowAfter, CellSelection, columnResizing, tableEditing } from 'prosemirror-tables';\nimport { EditorView } from 'prosemirror-view';\nimport { createCommands } from './commands';\nimport { createTableCellCommands, createTableColumnCommands, createTableRowCommands, selectColumn, selectRow } from './commands/tables';\nimport { createBlockNodeView } from './nodeviews/blockNodeView';\nimport { createBlockTableNodeView } from './nodeviews/blockTableNodeView';\nimport { checkListItemNodeView } from './nodeviews/checkList';\nimport { createTableNodeView } from './nodeviews/tableNodeView';\nimport { createContextToolbarPlugin } from './plugins/contextToolbar';\nimport { createMarkdownInputRules } from './plugins/inputRules';\nimport { baseKeymap, createEditorKeymap, keymap } from './plugins/keymap';\nimport { createMentionPlugin, insertMention } from './plugins/mention';\nimport { createMentionController } from './plugins/mentionController';\nimport type { EditorContext } from './logic/context';\nimport { createUploadModule } from './logic/uploads';\nimport { createNavigatorModule } from './logic/navigator';\nimport { createMenuCommands } from './logic/menuCommands';\nimport { createPlaceholderPlugin } from './plugins/placeholder';\nimport { addProseMirrorPlugin, removeProseMirrorPlugin } from './plugins/registry';\nimport { blockEndPos, blockStartPos, posAfterBlock } from './utils/blockPosition';\nimport { createColumnWidthPinPlugin } from './plugins/columnWidthPin';\nimport { createSelectionHighlightPlugin, preserveSelection } from './plugins/selectionHighlight';\nimport { createSlashPlugin } from './plugins/slashCommands';\nimport { createTableOverlayPlugin } from './plugins/tableOverlay';\nimport { createTrailingNodePlugin } from './plugins/trailingNode';\nimport { createEditorSchema, type SchemaExtension } from './schema';\nimport { blocksToDoc, docToBlocks } from './serialization/blockSerializer';\nimport { textEditorClasses as classes } from './texteditor.classes';\nimport { MENTION_MENU_ID, SLASH_MENU_ID, TABLE_DEFAULT_COLUMN_WIDTH, TABLE_MIN_COLUMN_WIDTH } from './texteditor.internal';\nimport { createValueEmitter } from './logic/valueEmitter';\n\nconst isRtl = (el?: HTMLElement | null) => {\n const target = el ?? document.documentElement;\n\n return target.closest?.('[dir=\"rtl\"]') != null || getComputedStyle(target).direction === 'rtl';\n};\n\nimport { htmlExceedsMaxDepth, htmlToDoc, htmlToSlice } from './serialization/htmlParser';\nimport { docToHtml } from './serialization/htmlSerializer';\nimport { isTrivialHtmlWrapper, looksLikeMarkdown, markdownToHtml } from './serialization/markdownParser';\nimport { sanitizeUrl } from './utils/url';\nimport { docToMarkdown, sliceToMarkdown } from './serialization/markdownSerializer';\nimport { deriveFormatState, findPlaceholders } from './state/formatState';\nimport { replaceDocPreservingSelection } from './state/replaceDoc';\nimport { getSelectionPosition } from './state/selection';\n\nexport function useTextEditorLogic(instance: TextEditorInstance): TextEditorExpose {\n const { $refs, $props, $state, $emit, onMounted, onUnmounted } = instance;\n\n // Per-instance schema, extended by any schema-contributing plugins.\n const collectSchemaExtensions = (): SchemaExtension[] => {\n const plugins = ($props.plugins as unknown[]) || [];\n\n return plugins\n .map((entry) => (Array.isArray(entry) ? entry[0] : entry))\n .map((p) => (p as { schema?: SchemaExtension } | null)?.schema)\n .filter((s): s is SchemaExtension => !!s);\n };\n\n const schema = createEditorSchema(collectSchemaExtensions());\n\n // ProseMirror plugins contributed by plugins for the INITIAL state (e.g. Yjs\n // collaboration). Each plugin's own options (from the [plugin, options] tuple)\n // are passed through so config-dependent plugins can build here.\n const collectProseMirrorPlugins = (): PMPlugin[] => {\n const plugins = ($props.plugins as unknown[]) || [];\n const result: PMPlugin[] = [];\n\n for (const entry of plugins) {\n const plugin = Array.isArray(entry) ? entry[0] : entry;\n const options = Array.isArray(entry) ? entry[1] : undefined;\n const factory = (plugin as { prosemirrorPlugins?: (s: typeof schema, o?: unknown) => PMPlugin[] } | null)?.prosemirrorPlugins;\n\n if (typeof factory === 'function') result.push(...factory(schema, options));\n }\n\n return result;\n };\n\n let view: EditorView | null = null;\n let tableActiveState: TableActiveState | null = null;\n let tableOverlayRect: TableOverlayRect | null = null;\n\n // Plugins install before the view exists; queue their plugins and flush once it does.\n const pendingProseMirrorPlugins: PMPlugin[] = [];\n\n // Remover for the one-shot mouseup probe, so an unmount mid-drag doesn't leak it.\n let pendingMouseUpRemover: (() => void) | null = null;\n\n const emit = (event: string, ...args: unknown[]) => {\n ($emit as unknown as (event: string, ...args: unknown[]) => void)(event, ...args);\n };\n\n const isBlockMode = () => ($props.mode as string) === 'block';\n const isMarkdownEnabled = () => !!$props.markdown;\n\n const { scheduleValueChange, flushValueChange } = createValueEmitter({\n getView: () => view,\n schema,\n emit: (value) => emit('value-change', value),\n isBlockMode,\n debounceMs: ($props.valueChangeDebounce as number) ?? 0\n });\n\n let placeholderCache = { image: false, document: false };\n\n const emitFormatState = () => {\n if (!view) return;\n\n emit('format-state-change', deriveFormatState(view.state, schema, view, placeholderCache));\n };\n\n const findPlaceholderPos = (nodeType: PMNodeType): number => {\n if (!view) return -1;\n\n let pos = -1;\n\n view.state.doc.descendants((node, p) => {\n if (pos !== -1) return false;\n if (node.type === nodeType) pos = p;\n\n return undefined;\n });\n\n return pos;\n };\n\n const removePlaceholder = (nodeType: PMNodeType) => {\n const pos = findPlaceholderPos(nodeType);\n\n if (view && pos >= 0) view.dispatch(view.state.tr.delete(pos, pos + 1));\n };\n\n const ctx: EditorContext = {\n getView: () => view,\n getElement: () => $refs.element as HTMLElement | undefined,\n props: $props as Record<string, unknown>,\n emit,\n schema,\n findPlaceholderPos,\n removePlaceholder\n };\n const uploadModule = createUploadModule(ctx);\n const navigatorModule = createNavigatorModule(ctx);\n const menuCommands = createMenuCommands(ctx);\n\n // ARIA combobox state for type-ahead menus (slash / mention).\n let comboboxState: { controls: string; activedescendant?: string } | null = null;\n\n const editorAttributes = (): Record<string, string> => {\n const attrs: Record<string, string> = {\n class: classes.content,\n role: 'textbox',\n 'aria-multiline': 'true'\n };\n\n if ($props.ariaLabelledby) {\n attrs['aria-labelledby'] = $props.ariaLabelledby as string;\n } else {\n // Always give the textbox an accessible name (WCAG 4.1.2): consumer\n // label, else the placeholder, else a sensible default.\n attrs['aria-label'] = ($props.ariaLabel as string) || ($props.placeholder as string) || 'Rich text editor';\n }\n\n if ($props.disabled) attrs['aria-disabled'] = 'true';\n if ($props.disabled || $props.readonly) attrs['aria-readonly'] = 'true';\n\n if (comboboxState) {\n attrs['aria-expanded'] = 'true';\n attrs['aria-controls'] = comboboxState.controls;\n if (comboboxState.activedescendant) attrs['aria-activedescendant'] = comboboxState.activedescendant;\n } else {\n attrs['aria-expanded'] = 'false';\n }\n\n return attrs;\n };\n\n const setComboboxState = (state: { controls: string; activedescendant?: string } | null) => {\n // Preserve activedescendant when the plugin re-emits controls-only for the same menu.\n let next = state;\n\n if (state && state.activedescendant === undefined && state.controls === comboboxState?.controls) {\n next = { controls: state.controls, activedescendant: comboboxState.activedescendant };\n }\n\n // Skip the setProps re-entry when nothing changed — it would recurse via the plugin's update hook.\n if (next?.controls === comboboxState?.controls && next?.activedescendant === comboboxState?.activedescendant) return;\n\n comboboxState = next;\n view?.setProps({ attributes: editorAttributes });\n };\n\n // The menu UI relays its active option id here so the textbox carries aria-activedescendant.\n const setComboboxActiveDescendant = (id: string | null) => {\n if (!comboboxState) return;\n\n setComboboxState({ controls: comboboxState.controls, activedescendant: id ?? undefined });\n };\n\n // Parse a v-model value into a doc, never throwing — pathological input\n // (e.g. thousands of nested elements) can blow the parser's call stack;\n // fall back to an empty document instead of crashing the editor.\n const parseValueToDoc = (value: unknown) => {\n const emptyDoc = () => schema.node('doc', null, [schema.node('paragraph')]);\n\n try {\n if (isBlockMode()) {\n const blocks = Array.isArray(value) ? (value as string[]) : [];\n\n return blocksToDoc(blocks.length > 0 ? blocks : ['<p></p>'], schema);\n }\n\n const html = (value as string) || '';\n\n return html ? htmlToDoc(html, schema) : emptyDoc();\n } catch (error) {\n emit('parse-error', { error });\n\n return emptyDoc();\n }\n };\n\n const mentionController = createMentionController({\n getHandler: () => $props.mentionHandler as (() => unknown[] | Promise<unknown[]>) | undefined,\n getFilterField: () => ($props.mentionFilterField as string) || 'name',\n emit: (update) => {\n setComboboxState(update.active ? { controls: MENTION_MENU_ID } : null);\n emit('mention-request', update);\n }\n });\n\n // Single markdown input-rules plugin instance, toggled live when the\n // `markdown` prop changes (see `refreshMarkdown` below).\n const markdownPlugin = createMarkdownInputRules(schema);\n\n const createEditorView = (mountEl: HTMLElement) => {\n const doc = parseValueToDoc($props.value);\n\n const state = EditorState.create({\n doc,\n plugins: [\n createEditorKeymap(schema, { blockMode: isBlockMode() }),\n keymap(baseKeymap),\n history(),\n ...(isBlockMode() ? [createTrailingNodePlugin(schema), gapCursor()] : [dropCursor(), createTrailingNodePlugin(schema), gapCursor()]),\n ...($props.markdown ? [markdownPlugin] : []),\n // prosemirror-tables columnResizing drags from the wrong edge under RTL,\n // so it is disabled there. RTL column resizing is a known limitation.\n ...(isRtl(mountEl)\n ? []\n : [\n columnResizing({ View: null as any, cellMinWidth: ($props.minTableColumnWidth as number) ?? TABLE_MIN_COLUMN_WIDTH, defaultCellMinWidth: ($props.defaultTableColumnWidth as number) ?? TABLE_DEFAULT_COLUMN_WIDTH }), // eslint-disable-line @typescript-eslint/no-explicit-any\n // Pin every unsized column to its rendered width when a\n // resize starts, so a single drag (or even a plain click on\n // the handle) doesn't snap the other columns to the default.\n createColumnWidthPinPlugin()\n ]),\n tableEditing(),\n createTableOverlayPlugin({\n onActiveStateChange: (state) => {\n tableActiveState = state;\n emit('table-active-state-change', state);\n },\n onOverlayRectChange: (rect) => {\n tableOverlayRect = rect;\n emit('table-overlay-rect-change', rect);\n },\n onColumnTriggerClick: (colIndex, event) => {\n if (view) selectColumn(view, colIndex);\n\n emit('table-column-menu-request', colIndex, event);\n },\n onRowTriggerClick: (rowIndex, event) => {\n if (view) selectRow(view, rowIndex);\n\n emit('table-row-menu-request', rowIndex, event);\n },\n onCellTriggerClick: (event) => {\n emit('table-cell-menu-request', event);\n },\n onAddColumn: () => {\n if (view) addColumnAfter(view.state, view.dispatch);\n },\n onAddRow: () => {\n if (view) addRowAfter(view.state, view.dispatch);\n }\n }),\n createPlaceholderPlugin({\n text: () => $props.placeholder as string | null,\n blockMode: isBlockMode()\n }),\n createContextToolbarPlugin({\n onRequest: (position) => {\n emit('context-toolbar-request', position);\n }\n }),\n ...($state.isMentionEnabled\n ? [\n createMentionPlugin(schema, {\n onUpdate: (update) => mentionController.onUpdate(update)\n })\n ]\n : []),\n createSelectionHighlightPlugin(),\n ...(isBlockMode() && $state.isSlashCommandsEnabled\n ? [\n createSlashPlugin({\n onUpdate: (update) => {\n setComboboxState(update.active ? { controls: SLASH_MENU_ID } : null);\n emit('slash-menu-request', update);\n },\n placeholder: ($props.slashPlaceholder as string) ?? undefined\n })\n ]\n : []),\n ...collectProseMirrorPlugins()\n ]\n });\n\n view = new EditorView(mountEl, {\n state,\n editable: () => !($props.disabled || $props.readonly),\n dispatchTransaction(tr) {\n if (!view) return;\n\n // In readonly/disabled mode, reject document-mutating transactions\n // (from toolbar/slash/block-menu commands) but still allow selection\n // changes so content stays selectable/copyable.\n if (tr.docChanged && ($props.disabled || $props.readonly)) return;\n\n const newState = view.state.apply(tr);\n\n view.updateState(newState);\n\n if (tr.docChanged) {\n placeholderCache = findPlaceholders(newState, schema);\n scheduleValueChange();\n\n if ($props.navigator) {\n navigatorModule.scheduleHeadings();\n }\n } else if (tr.selectionSet) {\n if ($props.navigator) {\n navigatorModule.syncActiveFromSelection();\n }\n\n emit('selection-update');\n }\n\n emitFormatState();\n },\n nodeViews: {\n ...(!isBlockMode()\n ? {\n table: (node: PMNode, tableView: EditorView, getPos: () => number | undefined) =>\n createTableNodeView(node, tableView, getPos, {\n defaultCellWidth: ($props.defaultTableColumnWidth as number) ?? TABLE_DEFAULT_COLUMN_WIDTH\n })\n }\n : {}),\n check_list_item: (node: PMNode, checkView: EditorView, getPos: () => number | undefined) => checkListItemNodeView(node, checkView, getPos),\n ...(isBlockMode()\n ? {\n ...Object.fromEntries(\n ['paragraph', 'heading', 'blockquote', 'code_block', 'horizontal_rule', 'bullet_list', 'ordered_list', 'check_list', 'image_upload_placeholder', 'document_upload_placeholder'].map((typeName) => [\n typeName,\n (node: PMNode, blockView: EditorView, getPos: () => number | undefined) => createBlockNodeView(node, blockView, getPos, (index, el) => emit('block-hover-change', { index, element: el }))\n ])\n ),\n table: (node: PMNode, tableView: EditorView, getPos: () => number | undefined) =>\n createBlockTableNodeView(node, tableView, getPos, {\n defaultCellWidth: ($props.defaultTableColumnWidth as number) ?? TABLE_DEFAULT_COLUMN_WIDTH,\n onBlockHoverChange: (index, el) => emit('block-hover-change', { index, element: el })\n })\n }\n : {})\n },\n attributes: editorAttributes,\n // Surface focus/blur as granular events without intercepting them\n // (return false so ProseMirror keeps its default handling).\n handleDOMEvents: {\n focus: () => {\n emit('editor-focus');\n\n return false;\n },\n blur: () => {\n emit('editor-blur');\n\n return false;\n }\n },\n // Bound pasted/dropped HTML to the same depth guard as setValue, so a\n // deeply-nested clipboard payload can't freeze the main thread.\n transformPastedHTML: (html) => (htmlExceedsMaxDepth(html) ? '' : html),\n // Modifier-click (Cmd/Ctrl) opens a link without leaving the editor; a\n // plain click still positions the caret for editing.\n handleClickOn: (clickView, pos, _node, _nodePos, event) => {\n if (!(event.metaKey || event.ctrlKey)) return false;\n\n const mark = schema.marks.link.isInSet(clickView.state.doc.resolve(pos).marks());\n const href = mark?.attrs.href ? sanitizeUrl(mark.attrs.href as string) : null;\n\n if (!href) return false;\n\n window.open(href, '_blank', 'noopener,noreferrer');\n\n return true;\n },\n // Copy: in markdown mode put markdown (not HTML) on text/plain.\n clipboardTextSerializer: (slice) => (isMarkdownEnabled() ? sliceToMarkdown(slice, schema) : slice.content.textBetween(0, slice.content.size, '\\n\\n')),\n // Paste: in markdown mode, convert pasted markdown text into rich content.\n handlePaste: (pasteView, event) => {\n if (!isMarkdownEnabled()) return false;\n\n const html = event.clipboardData?.getData('text/html');\n const text = event.clipboardData?.getData('text/plain');\n\n // Real structured HTML takes its normal path. But many plain-text\n // sources (editors, terminals, raw views) also put a trivial HTML\n // wrapper on the clipboard whose text equals the plain text — that\n // would render the markdown literally, so fall through to convert.\n if (html && !isTrivialHtmlWrapper(html, text)) return false;\n\n if (!text || !looksLikeMarkdown(text)) return false;\n\n const generated = markdownToHtml(text);\n\n if (htmlExceedsMaxDepth(generated)) return false;\n\n const slice = htmlToSlice(generated, schema);\n\n pasteView.dispatch(pasteView.state.tr.replaceSelection(slice).scrollIntoView());\n\n return true;\n },\n handleDrop: (_view, event) => {\n const html = event.dataTransfer?.getData('text/html');\n\n if (html && htmlExceedsMaxDepth(html)) {\n event.preventDefault();\n\n return true;\n }\n\n return false;\n }\n });\n\n placeholderCache = findPlaceholders(view.state, schema);\n\n // Apply ProseMirror plugins that plugins registered before the view existed.\n if (pendingProseMirrorPlugins.length) {\n const queued = pendingProseMirrorPlugins.splice(0);\n\n for (const plugin of queued) addProseMirrorPlugin(view, plugin);\n }\n\n emit('editor-create');\n };\n\n onMounted(() => {\n const mountEl = $refs.element as HTMLElement | undefined;\n\n if (mountEl) {\n createEditorView(mountEl);\n }\n });\n\n onUnmounted(() => {\n flushValueChange();\n navigatorModule.cancel();\n uploadModule.dismissImageUpload();\n uploadModule.dismissDocumentUpload();\n pendingMouseUpRemover?.();\n pendingMouseUpRemover = null;\n\n if (view) {\n view.destroy();\n view = null;\n }\n });\n\n return {\n /**\n * Re-evaluates the EditorView's `editable` predicate. Call after\n * mutating `$props.disabled` or `$props.readonly` so ProseMirror\n * picks up the change without remounting.\n */\n refreshEditable: () => {\n view?.setProps({ editable: () => !($props.disabled || $props.readonly), attributes: editorAttributes });\n },\n /**\n * Add/remove the markdown input-rules plugin live so toggling the\n * `markdown` prop at runtime takes effect without remounting.\n */\n refreshMarkdown: () => {\n if (!view) return;\n const active = view.state.plugins.includes(markdownPlugin);\n\n if ($props.markdown && !active) addProseMirrorPlugin(view, markdownPlugin);\n else if (!$props.markdown && active) removeProseMirrorPlugin(view, markdownPlugin);\n },\n onEditorKeyDown: () => {\n if (isBlockMode()) {\n emit('block-hover-change', { index: -1, element: null });\n }\n },\n onEditorMouseDown: () => {\n // Snapshot the selection range (not just \"was there one\"), so a\n // triple-click that REPLACES an existing selection still emits.\n const before = view ? view.state.selection : null;\n const beforeFrom = before?.from ?? -1;\n const beforeTo = before?.to ?? -1;\n\n const onMouseUp = () => {\n document.removeEventListener('mouseup', onMouseUp);\n pendingMouseUpRemover = null;\n\n if (!view || view.state.selection.empty) return;\n\n const { from, to } = view.state.selection;\n\n // Unchanged selection (e.g. plain click inside an existing one) -> ignore.\n if (from === beforeFrom && to === beforeTo) return;\n\n const position = getSelectionPosition(view);\n\n if (position) {\n emit('context-toolbar-request', position);\n }\n };\n\n // Replace any earlier pending probe before attaching the new one.\n pendingMouseUpRemover?.();\n document.addEventListener('mouseup', onMouseUp);\n pendingMouseUpRemover = () => document.removeEventListener('mouseup', onMouseUp);\n },\n\n // Upload (image + document) — delegated to the upload module\n startImageUploads: uploadModule.startImageUploads,\n dismissImageUpload: uploadModule.dismissImageUpload,\n validateImageFiles: uploadModule.validateImageFiles,\n startDocumentUploads: uploadModule.startDocumentUploads,\n dismissDocumentUpload: uploadModule.dismissDocumentUpload,\n validateDocumentFiles: uploadModule.validateDocumentFiles,\n\n // Block mode (Phase 6)\n addBlockAfter: (index: number) => {\n if (!view) return;\n\n const targetPos = posAfterBlock(view.state.doc, index);\n const paragraph = schema.nodes.paragraph.create();\n const tr = view.state.tr.insert(targetPos, paragraph);\n\n tr.setSelection(TextSelection.create(tr.doc, targetPos + 1));\n view.dispatch(tr);\n view.focus();\n },\n getBlockType: (index: number) => {\n if (!view || index >= view.state.doc.childCount) return 'text';\n\n const node = view.state.doc.child(index);\n\n if (node.type.name === 'paragraph') return 'text';\n if (node.type.name === 'heading') return `heading:${node.attrs.level}`;\n\n return node.type.name;\n },\n onBlockDragStart: (index: number, event: DragEvent) => {\n if (!event.dataTransfer) return;\n\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('application/x-block-drag', String(index));\n\n // Use the block's own DOM node as the drag ghost so users drag a\n // preview of the whole block, not just the tiny handle icon.\n if (view && index < view.state.doc.childCount) {\n const dom = view.nodeDOM(blockStartPos(view.state.doc, index));\n const blockEl = dom instanceof HTMLElement ? dom : ((dom as ChildNode | null)?.parentElement ?? null);\n\n if (blockEl) {\n const rect = blockEl.getBoundingClientRect();\n\n event.dataTransfer.setDragImage(blockEl, event.clientX - rect.left, event.clientY - rect.top);\n }\n }\n\n emit('block-drag-start', index);\n },\n moveBlock: (fromIndex: number, toIndex: number) => {\n if (!view || fromIndex === toIndex || fromIndex < 0 || toIndex < 0) return;\n\n const doc = view.state.doc;\n\n if (fromIndex >= doc.childCount || toIndex > doc.childCount) return;\n\n const fromPos = blockStartPos(doc, fromIndex);\n const blockNode = doc.child(fromIndex);\n\n // Remove the block from its original position\n const tr = view.state.tr;\n\n tr.delete(fromPos, blockEndPos(doc, fromIndex));\n\n // Insert after the block at (adjustedTarget - 1) in the updated doc,\n // or at the start. `adjustedTarget` accounts for the removed block.\n const adjustedTarget = toIndex > fromIndex ? toIndex - 1 : toIndex;\n const insertPos = adjustedTarget > 0 ? blockEndPos(tr.doc, adjustedTarget - 1) : 0;\n\n tr.insert(insertPos, blockNode);\n\n tr.setSelection(TextSelection.create(tr.doc, insertPos + 1));\n view.dispatch(tr);\n view.focus();\n emit('block-drag-end');\n },\n onBlockDragEnd: () => {\n emit('block-drag-end');\n },\n\n getCommands: () => {\n if (!view) return {} as ReturnType<TextEditorExpose['getCommands']>;\n\n return createCommands(\n view,\n schema,\n {\n onUploadImages: () => emit('image-upload-request'),\n onUploadDocuments: () => emit('document-upload-request')\n },\n { defaultCellWidth: ($props.defaultTableColumnWidth as number) ?? TABLE_DEFAULT_COLUMN_WIDTH, highlightColor: ($props.defaultHighlightColor as string) ?? null }\n );\n },\n getBlockMenuCommands: menuCommands.getBlockMenuCommands,\n getSlashMenuCommands: menuCommands.getSlashMenuCommands,\n // Recent colors (deferred)\n\n // Table — insert after the selected cell's row/column.\n onTableAddRow: () => {\n if (view) addRowAfter(view.state, view.dispatch);\n },\n onTableAddColumn: () => {\n if (view) addColumnAfter(view.state, view.dispatch);\n },\n getTableColumnCommands: (colIndex: number, onDismiss: () => void) => {\n if (!view) return {} as ReturnType<TextEditorExpose['getTableColumnCommands']>;\n\n return createTableColumnCommands(view, schema, colIndex, onDismiss);\n },\n getTableRowCommands: (rowIndex: number, onDismiss: () => void) => {\n if (!view) return {} as ReturnType<TextEditorExpose['getTableRowCommands']>;\n\n return createTableRowCommands(view, schema, rowIndex, onDismiss);\n },\n getTableCellCommands: (onDismiss: () => void) => {\n if (!view) return {} as ReturnType<TextEditorExpose['getTableCellCommands']>;\n\n return createTableCellCommands(view, schema, onDismiss);\n },\n getTableOverlayRect: () => tableOverlayRect,\n getTableActiveState: () => tableActiveState,\n getIsMultiCellSelected: () => {\n if (!view) return false;\n\n return view.state.selection instanceof CellSelection;\n },\n getIsCellMerged: () => {\n if (!view) return false;\n\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type.name === 'table_cell' || node.type.name === 'table_header') {\n return (node.attrs.colspan ?? 1) > 1 || (node.attrs.rowspan ?? 1) > 1;\n }\n }\n\n return false;\n },\n updateTableOverlayRect: () => {\n if (tableActiveState) {\n const rect = tableActiveState.table.getBoundingClientRect();\n\n if (rect.width > 0) {\n emit('table-overlay-rect-change', tableOverlayRect);\n }\n }\n },\n\n // Mention\n getMentionCommands: (onDismiss: () => void, options?: { filterField?: string; template?: (data: unknown) => string }) => ({\n select: (data: unknown) => {\n if (!view) return;\n\n insertMention(view, schema, data, options);\n onDismiss();\n }\n }),\n getFilteredMentionItems: (items: unknown[], filterField?: string, filterText?: string) => {\n if (!filterText) return items;\n\n const query = filterText.toLowerCase();\n\n return items.filter((item) => {\n if (!item || typeof item !== 'object') return false;\n\n const value = String((item as Record<string, unknown>)[filterField || 'name'] || '');\n\n return value.toLowerCase().includes(query);\n });\n },\n\n // Plugin helpers\n getSelectedText: () => {\n if (!view) return '';\n\n const { from, to } = view.state.selection;\n\n // Join across blocks with newlines so plugins get readable multi-block text.\n return view.state.doc.textBetween(from, to, '\\n');\n },\n replaceSelection: (content: string, asHtml?: boolean) => {\n if (!view) return;\n\n const { from, to } = view.state.selection;\n\n if (asHtml) {\n // Open slice fits block or inline HTML at any caret position.\n const slice = htmlToSlice(content, schema);\n\n view.dispatch(view.state.tr.replaceSelection(slice));\n } else {\n view.dispatch(view.state.tr.insertText(content, from, to));\n }\n },\n getEditorElement: () => (view?.dom as HTMLElement) || null,\n\n // Direct ProseMirror access for extension authors (additive, opt-in)\n getView: () => view,\n getState: () => view?.state ?? null,\n registerProseMirrorPlugin: (plugin: PMPlugin) => {\n if (!view) {\n pendingProseMirrorPlugins.push(plugin);\n\n return () => {\n const idx = pendingProseMirrorPlugins.indexOf(plugin);\n\n if (idx !== -1) pendingProseMirrorPlugins.splice(idx, 1);\n if (view) removeProseMirrorPlugin(view, plugin);\n };\n }\n\n return addProseMirrorPlugin(view, plugin);\n },\n runCommand: (command: PMCommand) => {\n if (!view) return false;\n\n return command(view.state, view.dispatch, view);\n },\n\n // Selection highlight\n preserveSelection: () => {\n if (view) preserveSelection(view);\n },\n\n /** Points aria-activedescendant at an open menu's active option; null clears. */\n setComboboxActiveDescendant,\n\n /**\n * Serialize the current document to HTML. Works in both modes;\n * in block mode the result is the concatenated HTML of every\n * block (use `getBlocks` for the block-split array).\n */\n getHTML: (): string => {\n if (!view) return '';\n\n return docToHtml(view.state.doc, schema);\n },\n /**\n * Serialize as the array-of-block-HTML representation used by\n * block-mode `v-model`. In classic mode returns a single-item\n * array for parity.\n */\n getBlocks: (): string[] => {\n if (!view) return [];\n const result = docToBlocks(view.state.doc, schema);\n\n return Array.isArray(result) ? result : [result];\n },\n /** ProseMirror document as plain JSON (loss-less). */\n getJSON: (): unknown => {\n if (!view) return null;\n\n return view.state.doc.toJSON();\n },\n /** Plain-text projection. Useful for previews and full-text search indexes. */\n getText: (): string => {\n if (!view) return '';\n\n return view.state.doc.textContent;\n },\n /** Markdown projection of the document (same serializer as markdown copy). */\n getMarkdown: (): string => {\n if (!view) return '';\n\n return docToMarkdown(view.state.doc, schema);\n },\n\n // Value\n setValue: (value: string | string[]) => {\n if (!view) return;\n\n // Skip external writes mid-IME-composition (they abort it).\n if (view.composing) return;\n\n // Value-equality short-circuit avoids a needless full-document rebuild.\n if (isBlockMode()) {\n const blocks = Array.isArray(value) ? value : [];\n\n if (JSON.stringify(docToBlocks(view.state.doc, schema)) === JSON.stringify(blocks.length > 0 ? blocks : ['<p></p>'])) return;\n } else {\n const html = (typeof value === 'string' ? value : '') || '';\n\n if (docToHtml(view.state.doc, schema) === html) return;\n }\n\n replaceDocPreservingSelection(view, parseValueToDoc(value));\n },\n\n // Navigator — delegated to the navigator module\n getDocumentHeadings: navigatorModule.getDocumentHeadings,\n focusHeading: navigatorModule.focusHeading,\n scrollToHeading: navigatorModule.scrollToHeading,\n updateActiveHeading: navigatorModule.updateActiveHeading,\n onNavigatorScroll: navigatorModule.onNavigatorScroll\n };\n}\n","import { defineComponent } from '@primeui/core';\nimport type { TextEditorInstance } from '@primeui/texteditor-types';\nimport { useTextEditorLogic } from './texteditor.logic';\nimport { defaultTextEditorProps } from './texteditor.props';\nimport { defaultTextEditorRefs } from './texteditor.refs';\nimport { defaultTextEditorState } from './texteditor.state';\n\nexport const createTextEditor = defineComponent<TextEditorInstance>('TextEditor', ({ getCurrentInstance, defineRefs, defineProps, defineState, defineEmits, defineExpose }) => {\n defineRefs(defaultTextEditorRefs);\n defineProps(defaultTextEditorProps);\n defineState(defaultTextEditorState);\n defineEmits([\n 'value-change',\n 'format-state-change',\n 'table-overlay-rect-change',\n 'table-active-state-change',\n 'context-toolbar-request',\n 'image-upload-request',\n 'document-upload-request',\n 'image-reject',\n 'document-reject',\n 'image-upload-error',\n 'document-upload-error',\n 'parse-error',\n 'mention-request',\n 'block-hover-change',\n 'block-drag-start',\n 'block-drag-end',\n 'slash-menu-request',\n 'table-column-menu-request',\n 'table-row-menu-request',\n 'table-cell-menu-request',\n 'navigator-headings-change',\n 'navigator-active-index-change',\n 'image-upload-state-change',\n 'document-upload-state-change',\n 'image-upload-complete',\n 'document-upload-complete',\n 'selection-update',\n 'editor-focus',\n 'editor-blur',\n 'editor-create'\n ]);\n\n const currentInstance = getCurrentInstance();\n const expose = useTextEditorLogic(currentInstance);\n\n defineExpose(expose);\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-FLGC65SR.mjs"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { setInlineStart } from './chunk-
|
|
2
|
-
import { textEditorClasses } from './chunk-
|
|
1
|
+
import { setInlineStart } from './chunk-RE46J3VH.mjs';
|
|
2
|
+
import { textEditorClasses } from './chunk-25Y5HLDY.mjs';
|
|
3
3
|
import { PluginKey, Plugin } from 'prosemirror-state';
|
|
4
4
|
import { CellSelection } from 'prosemirror-tables';
|
|
5
5
|
|
|
@@ -316,5 +316,5 @@ function createTableOverlayPlugin(callbacks) {
|
|
|
316
316
|
}
|
|
317
317
|
|
|
318
318
|
export { createTableOverlayPlugin };
|
|
319
|
-
//# sourceMappingURL=chunk-
|
|
320
|
-
//# sourceMappingURL=chunk-
|
|
319
|
+
//# sourceMappingURL=chunk-KA3KNPLZ.mjs.map
|
|
320
|
+
//# sourceMappingURL=chunk-KA3KNPLZ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/tableOverlay.ts"],"names":[],"mappings":"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","file":"chunk-KA3KNPLZ.mjs","sourcesContent":["import { Plugin, PluginKey } from 'prosemirror-state';\nimport type { EditorView } from 'prosemirror-view';\nimport type { TableActiveState, TableOverlayRect } from '@primeui/texteditor-types';\nimport { CellSelection } from 'prosemirror-tables';\nimport { textEditorClasses as classes } from '../texteditor.classes';\nimport { setInlineStart } from '../utils/position';\n\nconst tableOverlayKey = new PluginKey('tableOverlay');\n\ninterface TableOverlayCallbacks {\n onActiveStateChange: (state: TableActiveState | null) => void;\n onOverlayRectChange: (rect: TableOverlayRect | null) => void;\n onColumnTriggerClick: (colIndex: number, event: MouseEvent) => void;\n onRowTriggerClick: (rowIndex: number, event: MouseEvent) => void;\n onCellTriggerClick: (event: MouseEvent) => void;\n onAddColumn: () => void;\n onAddRow: () => void;\n}\n\nfunction getTableActiveState(view: EditorView): TableActiveState | null {\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type.name === 'table_cell' || node.type.name === 'table_header') {\n for (let tableDepth = depth - 1; tableDepth > 0; tableDepth--) {\n if ($from.node(tableDepth).type.name === 'table') {\n const tableNode = $from.node(tableDepth);\n let tableDOM = view.nodeDOM($from.before(tableDepth)) as HTMLElement | null;\n\n if (!tableDOM) return null;\n\n if (tableDOM.tagName !== 'TABLE') {\n tableDOM = tableDOM.querySelector('table');\n }\n\n if (!tableDOM) return null;\n\n const cellDOM = view.nodeDOM($from.before(depth)) as HTMLTableCellElement | null;\n\n if (!cellDOM) return null;\n\n const row = cellDOM.parentElement as HTMLTableRowElement;\n const colIndex = Array.from(row.cells).indexOf(cellDOM);\n const rowIndex = Array.from(tableDOM.querySelectorAll('tr')).indexOf(row);\n const rowCount = tableNode.childCount;\n const colCount = tableNode.firstChild?.childCount || 0;\n\n return { table: tableDOM as HTMLTableElement, colIndex, rowIndex, colCount, rowCount };\n }\n }\n }\n }\n\n return null;\n}\n\nfunction computeOverlayRect(activeState: TableActiveState): TableOverlayRect | null {\n const { table, colIndex, rowIndex } = activeState;\n const tableRect = table.getBoundingClientRect();\n const rows = table.querySelectorAll('tr');\n const currentRow = rows[rowIndex];\n\n if (!currentRow) return null;\n\n const currentCell = currentRow.cells[colIndex];\n\n if (!currentCell) return null;\n\n const cellRect = currentCell.getBoundingClientRect();\n\n const columnBorders: number[] = [];\n const firstRow = rows[0];\n\n if (firstRow) {\n let x = tableRect.left;\n\n for (let i = 0; i < firstRow.cells.length; i++) {\n x += firstRow.cells[i].getBoundingClientRect().width;\n columnBorders.push(x);\n }\n }\n\n return {\n tableRect,\n cellRect,\n isLastColumn: colIndex === activeState.colCount - 1,\n isLastRow: rowIndex === activeState.rowCount - 1,\n columnBorders\n };\n}\n\nfunction getTableWrapper(tableEl: HTMLElement): HTMLElement | null {\n const parent = tableEl.parentElement;\n\n return parent?.classList.contains('tableWrapper') ? parent : null;\n}\n\ntype TriggerElement = HTMLDivElement & { _teCleanup?: () => void };\n\nfunction createTrigger(className: string, onClick: (event: MouseEvent) => void): TriggerElement {\n const el = document.createElement('div') as TriggerElement;\n\n el.className = className;\n el.contentEditable = 'false';\n\n const handler = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onClick(event);\n };\n\n el.addEventListener('mousedown', handler);\n el._teCleanup = () => el.removeEventListener('mousedown', handler);\n\n return el;\n}\n\nexport function createTableOverlayPlugin(callbacks: TableOverlayCallbacks) {\n let currentActiveState: TableActiveState | null = null;\n\n return new Plugin({\n key: tableOverlayKey,\n view() {\n // Selection outline\n let overlayEl: HTMLDivElement | null = null;\n let cellTriggerEl: HTMLDivElement | null = null;\n\n // Column/row triggers\n let colTriggerEl: HTMLDivElement | null = null;\n let rowTriggerEl: HTMLDivElement | null = null;\n\n // Add buttons\n let addColEl: HTMLDivElement | null = null;\n let addRowEl: HTMLDivElement | null = null;\n\n // ResizeObserver for live updates\n let resizeObserver: ResizeObserver | null = null;\n let observedTable: HTMLElement | null = null;\n let lastActiveState: TableActiveState | null = null;\n let isCellSelectionMode = false;\n\n let currentWrapper: HTMLElement | null = null;\n let rafId = 0;\n\n const removeAll = () => {\n [overlayEl, cellTriggerEl, colTriggerEl, rowTriggerEl, addColEl, addRowEl].forEach((el) => {\n (el as TriggerElement | null)?._teCleanup?.();\n });\n overlayEl?.remove();\n colTriggerEl?.remove();\n rowTriggerEl?.remove();\n addColEl?.remove();\n addRowEl?.remove();\n overlayEl = null;\n cellTriggerEl = null;\n colTriggerEl = null;\n rowTriggerEl = null;\n addColEl = null;\n addRowEl = null;\n currentWrapper = null;\n lastActiveState = null;\n\n if (resizeObserver && observedTable) {\n resizeObserver.unobserve(observedTable);\n observedTable = null;\n }\n };\n\n const ensureElements = (wrapper: HTMLElement) => {\n if (currentWrapper === wrapper && overlayEl) return;\n\n removeAll();\n currentWrapper = wrapper;\n\n // Selection outline with cell trigger (hidden until positioned)\n overlayEl = document.createElement('div');\n overlayEl.className = classes.tableSelectionOutline;\n overlayEl.style.visibility = 'hidden';\n\n cellTriggerEl = createTrigger(`${classes.tableTrigger} ${classes.tableTriggerCell}`, (event) => {\n callbacks.onCellTriggerClick(event);\n });\n overlayEl.appendChild(cellTriggerEl);\n wrapper.appendChild(overlayEl);\n\n // Column trigger\n colTriggerEl = createTrigger(`${classes.tableTrigger} ${classes.tableTriggerCol}`, (event) => {\n if (lastActiveState) callbacks.onColumnTriggerClick(lastActiveState.colIndex, event);\n });\n colTriggerEl.style.visibility = 'hidden';\n wrapper.appendChild(colTriggerEl);\n\n // Row trigger\n rowTriggerEl = createTrigger(`${classes.tableTrigger} ${classes.tableTriggerRow}`, (event) => {\n if (lastActiveState) callbacks.onRowTriggerClick(lastActiveState.rowIndex, event);\n });\n rowTriggerEl.style.visibility = 'hidden';\n wrapper.appendChild(rowTriggerEl);\n\n // Add column button\n addColEl = createTrigger(`${classes.tableAdd} ${classes.tableAddCol}`, () => {\n callbacks.onAddColumn();\n });\n addColEl.style.visibility = 'hidden';\n addColEl.innerHTML = '<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M6 1v10M1 6h10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>';\n wrapper.appendChild(addColEl);\n\n // Add row button\n addRowEl = createTrigger(`${classes.tableAdd} ${classes.tableAddRow}`, () => {\n callbacks.onAddRow();\n });\n addRowEl.style.visibility = 'hidden';\n addRowEl.innerHTML = '<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M6 1v10M1 6h10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>';\n wrapper.appendChild(addRowEl);\n };\n\n const showElements = () => {\n if (overlayEl) overlayEl.style.visibility = '';\n if (colTriggerEl) colTriggerEl.style.visibility = '';\n if (rowTriggerEl) rowTriggerEl.style.visibility = '';\n if (addColEl) addColEl.style.visibility = '';\n if (addRowEl) addRowEl.style.visibility = '';\n };\n\n // Defer to the next frame so element rects are read AFTER the table's\n // layout settles (e.g. right after a column is added or the table is\n // resized); otherwise triggers/handles latch onto a stale width.\n const schedulePosition = () => {\n if (rafId) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n rafId = 0;\n positionElements();\n });\n };\n\n const positionElements = () => {\n if (!currentWrapper || !overlayEl) return;\n\n const wrapperRect = currentWrapper.getBoundingClientRect();\n const tableEl = currentWrapper.querySelector('table');\n\n if (!tableEl) return;\n\n const tableRect = tableEl.getBoundingClientRect();\n const w = wrapperRect.width;\n // Absolutely-positioned elements live in the wrapper's scrolled\n // content box; viewport rects don't include that scroll, so add it\n // back or the handles latch to the wrong place once scrolled.\n const sx = currentWrapper.scrollLeft;\n const sy = currentWrapper.scrollTop;\n\n // Skip positioning if table hasn't been laid out yet\n if (tableRect.width === 0 || tableRect.height === 0) return;\n\n if (isCellSelectionMode) {\n // Multi-cell: outline from .selectedCell rects\n const selectedCells = currentWrapper.querySelectorAll('.selectedCell');\n\n if (selectedCells.length > 0) {\n let minTop = Infinity;\n let minLeft = Infinity;\n let maxBottom = -Infinity;\n let maxRight = -Infinity;\n\n selectedCells.forEach((cell) => {\n const rect = cell.getBoundingClientRect();\n\n minTop = Math.min(minTop, rect.top);\n minLeft = Math.min(minLeft, rect.left);\n maxBottom = Math.max(maxBottom, rect.bottom);\n maxRight = Math.max(maxRight, rect.right);\n });\n\n const selWidth = maxRight - minLeft;\n\n overlayEl.style.top = `${minTop - wrapperRect.top + sy}px`;\n setInlineStart(overlayEl, minLeft - wrapperRect.left + sx, w, selWidth);\n overlayEl.style.width = `${selWidth}px`;\n overlayEl.style.height = `${maxBottom - minTop}px`;\n }\n } else if (lastActiveState) {\n // Single cell outline\n const rows = tableEl.querySelectorAll('tr');\n const row = rows[lastActiveState.rowIndex];\n\n if (row) {\n const cell = row.cells[lastActiveState.colIndex];\n\n if (cell) {\n const cellRect = cell.getBoundingClientRect();\n\n overlayEl.style.top = `${cellRect.top - wrapperRect.top + sy}px`;\n setInlineStart(overlayEl, cellRect.left - wrapperRect.left + sx, w, cellRect.width);\n overlayEl.style.width = `${cellRect.width}px`;\n overlayEl.style.height = `${cellRect.height}px`;\n }\n }\n }\n\n // Column trigger — top center of active cell's column\n if (colTriggerEl && lastActiveState) {\n const rows = tableEl.querySelectorAll('tr');\n const firstRow = rows[0];\n\n if (firstRow && firstRow.cells[lastActiveState.colIndex]) {\n const cellRect = firstRow.cells[lastActiveState.colIndex].getBoundingClientRect();\n\n colTriggerEl.style.top = `${cellRect.top - wrapperRect.top + sy}px`;\n setInlineStart(colTriggerEl, cellRect.left - wrapperRect.left + sx + cellRect.width / 2, w);\n colTriggerEl.style.display = '';\n } else {\n colTriggerEl.style.display = 'none';\n }\n }\n\n // Row trigger — inline-start center of active cell's row\n if (rowTriggerEl && lastActiveState) {\n const rows = tableEl.querySelectorAll('tr');\n const activeRow = rows[lastActiveState.rowIndex];\n\n if (activeRow && activeRow.cells[0]) {\n const cellRect = activeRow.cells[0].getBoundingClientRect();\n\n rowTriggerEl.style.top = `${cellRect.top - wrapperRect.top + sy + cellRect.height / 2}px`;\n setInlineStart(rowTriggerEl, cellRect.left - wrapperRect.left + sx, w);\n rowTriggerEl.style.display = '';\n } else {\n rowTriggerEl.style.display = 'none';\n }\n }\n\n // Add column button — inline-end edge of table, full height\n if (addColEl) {\n const rtl = document.documentElement.dir === 'rtl' || getComputedStyle(document.documentElement).direction === 'rtl';\n\n addColEl.style.top = `${tableRect.top - wrapperRect.top + sy}px`;\n\n if (rtl) {\n addColEl.style.right = `${wrapperRect.right - tableRect.left - sx + 4}px`;\n addColEl.style.left = '';\n } else {\n addColEl.style.left = `${tableRect.right - wrapperRect.left + sx + 4}px`;\n addColEl.style.right = '';\n }\n\n addColEl.style.height = `${tableRect.height}px`;\n }\n\n // Add row button — bottom edge of table, full width\n if (addRowEl) {\n addRowEl.style.top = `${tableRect.bottom - wrapperRect.top + sy + 4}px`;\n setInlineStart(addRowEl, tableRect.left - wrapperRect.left + sx, w, tableRect.width);\n addRowEl.style.width = `${tableRect.width}px`;\n }\n\n showElements();\n };\n\n const observeTable = (tableEl: HTMLElement) => {\n if (observedTable === tableEl) return;\n\n if (resizeObserver && observedTable) {\n resizeObserver.unobserve(observedTable);\n }\n\n if (!resizeObserver) {\n resizeObserver = new ResizeObserver(() => schedulePosition());\n }\n\n resizeObserver.observe(tableEl);\n observedTable = tableEl;\n };\n\n return {\n update(view) {\n const isCellSel = view.state.selection instanceof CellSelection;\n\n if (isCellSel) {\n isCellSelectionMode = true;\n\n // During CellSelection, keep elements but reposition\n if (currentWrapper) {\n positionElements();\n }\n\n if (currentActiveState) {\n currentActiveState = null;\n callbacks.onActiveStateChange(null);\n callbacks.onOverlayRectChange(null);\n }\n\n return;\n }\n\n isCellSelectionMode = false;\n\n const newState = getTableActiveState(view);\n\n if (newState) {\n currentActiveState = newState;\n callbacks.onActiveStateChange(newState);\n callbacks.onOverlayRectChange(computeOverlayRect(newState));\n\n const wrapper = getTableWrapper(newState.table);\n\n if (wrapper) {\n ensureElements(wrapper);\n lastActiveState = newState;\n positionElements();\n schedulePosition();\n observeTable(newState.table);\n } else {\n lastActiveState = newState;\n }\n } else {\n removeAll();\n\n if (currentActiveState) {\n currentActiveState = null;\n callbacks.onActiveStateChange(null);\n callbacks.onOverlayRectChange(null);\n }\n }\n },\n destroy() {\n if (rafId) cancelAnimationFrame(rafId);\n removeAll();\n resizeObserver?.disconnect();\n resizeObserver = null;\n currentActiveState = null;\n callbacks.onActiveStateChange(null);\n callbacks.onOverlayRectChange(null);\n }\n };\n }\n });\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { clearTypographyMarks } from './chunk-
|
|
2
|
-
import { DEFAULT_HIGHLIGHT_COLOR } from './chunk-
|
|
3
|
-
import { sanitizeImageUrl, sanitizeTextAttr, sanitizeUrl } from './chunk-
|
|
1
|
+
import { clearTypographyMarks } from './chunk-YXOJODMQ.mjs';
|
|
2
|
+
import { DEFAULT_HIGHLIGHT_COLOR } from './chunk-UHENKXGQ.mjs';
|
|
3
|
+
import { sanitizeImageUrl, sanitizeTextAttr, sanitizeUrl } from './chunk-MMU3VGMT.mjs';
|
|
4
4
|
import { inputRules, InputRule, wrappingInputRule, textblockTypeInputRule } from 'prosemirror-inputrules';
|
|
5
5
|
|
|
6
6
|
function headingRule(schema, nodeType, maxLevel) {
|
|
@@ -176,5 +176,5 @@ function createMarkdownInputRules(schema) {
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
export { createMarkdownInputRules };
|
|
179
|
-
//# sourceMappingURL=chunk-
|
|
180
|
-
//# sourceMappingURL=chunk-
|
|
179
|
+
//# sourceMappingURL=chunk-LHZDU6AA.mjs.map
|
|
180
|
+
//# sourceMappingURL=chunk-LHZDU6AA.mjs.map
|