@primeui/texteditor-core 0.0.1-alpha.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 +23 -0
- package/README.md +1 -0
- package/dist/chunk-22B454VC.mjs +83 -0
- package/dist/chunk-22B454VC.mjs.map +1 -0
- package/dist/chunk-3RKMABZR.mjs +320 -0
- package/dist/chunk-3RKMABZR.mjs.map +1 -0
- package/dist/chunk-6GY64GPU.mjs +18 -0
- package/dist/chunk-6GY64GPU.mjs.map +1 -0
- package/dist/chunk-6YDCG63C.mjs +833 -0
- package/dist/chunk-6YDCG63C.mjs.map +1 -0
- package/dist/chunk-6ZN5XRH2.mjs +45 -0
- package/dist/chunk-6ZN5XRH2.mjs.map +1 -0
- package/dist/chunk-72T5I4O4.mjs +76 -0
- package/dist/chunk-72T5I4O4.mjs.map +1 -0
- package/dist/chunk-7QCHSEN2.mjs +16 -0
- package/dist/chunk-7QCHSEN2.mjs.map +1 -0
- package/dist/chunk-AJOKUIQD.mjs +33 -0
- package/dist/chunk-AJOKUIQD.mjs.map +1 -0
- package/dist/chunk-AUTGNC2Q.mjs +197 -0
- package/dist/chunk-AUTGNC2Q.mjs.map +1 -0
- package/dist/chunk-CRAB2MFE.mjs +19 -0
- package/dist/chunk-CRAB2MFE.mjs.map +1 -0
- package/dist/chunk-DXPG5XMX.mjs +18 -0
- package/dist/chunk-DXPG5XMX.mjs.map +1 -0
- package/dist/chunk-E2KXUP3F.mjs +9 -0
- package/dist/chunk-E2KXUP3F.mjs.map +1 -0
- package/dist/chunk-EA2YI7LA.mjs +23 -0
- package/dist/chunk-EA2YI7LA.mjs.map +1 -0
- package/dist/chunk-F7BJWPT6.mjs +401 -0
- package/dist/chunk-F7BJWPT6.mjs.map +1 -0
- package/dist/chunk-FFCQLWS5.mjs +32 -0
- package/dist/chunk-FFCQLWS5.mjs.map +1 -0
- package/dist/chunk-GG56GLXC.mjs +42 -0
- package/dist/chunk-GG56GLXC.mjs.map +1 -0
- package/dist/chunk-GGPBV4BM.mjs +37 -0
- package/dist/chunk-GGPBV4BM.mjs.map +1 -0
- package/dist/chunk-H3RFOYCT.mjs +27 -0
- package/dist/chunk-H3RFOYCT.mjs.map +1 -0
- package/dist/chunk-IUQKSDKG.mjs +23 -0
- package/dist/chunk-IUQKSDKG.mjs.map +1 -0
- package/dist/chunk-J5LGTIGS.mjs +9 -0
- package/dist/chunk-J5LGTIGS.mjs.map +1 -0
- package/dist/chunk-KNZAMA6H.mjs +198 -0
- package/dist/chunk-KNZAMA6H.mjs.map +1 -0
- package/dist/chunk-MNKMKFLQ.mjs +27 -0
- package/dist/chunk-MNKMKFLQ.mjs.map +1 -0
- package/dist/chunk-MWT5PK3Z.mjs +52 -0
- package/dist/chunk-MWT5PK3Z.mjs.map +1 -0
- package/dist/chunk-NWRVBNBW.mjs +65 -0
- package/dist/chunk-NWRVBNBW.mjs.map +1 -0
- package/dist/chunk-OGEMGWLR.mjs +180 -0
- package/dist/chunk-OGEMGWLR.mjs.map +1 -0
- package/dist/chunk-PRFYR67X.mjs +60 -0
- package/dist/chunk-PRFYR67X.mjs.map +1 -0
- package/dist/chunk-PT2O4RV7.mjs +143 -0
- package/dist/chunk-PT2O4RV7.mjs.map +1 -0
- package/dist/chunk-PT5V6UYE.mjs +10 -0
- package/dist/chunk-PT5V6UYE.mjs.map +1 -0
- package/dist/chunk-RH45QRSV.mjs +26 -0
- package/dist/chunk-RH45QRSV.mjs.map +1 -0
- package/dist/chunk-RQ2HHNI6.mjs +55 -0
- package/dist/chunk-RQ2HHNI6.mjs.map +1 -0
- package/dist/chunk-TB7ZSSR2.mjs +6 -0
- package/dist/chunk-TB7ZSSR2.mjs.map +1 -0
- package/dist/chunk-TBQVZVKA.mjs +1891 -0
- package/dist/chunk-TBQVZVKA.mjs.map +1 -0
- package/dist/chunk-VWGQMUPD.mjs +182 -0
- package/dist/chunk-VWGQMUPD.mjs.map +1 -0
- package/dist/chunk-XKY2VYPW.mjs +26 -0
- package/dist/chunk-XKY2VYPW.mjs.map +1 -0
- package/dist/chunk-XSVIGDQR.mjs +22 -0
- package/dist/chunk-XSVIGDQR.mjs.map +1 -0
- package/dist/chunk-YHMP6AN3.mjs +231 -0
- package/dist/chunk-YHMP6AN3.mjs.map +1 -0
- package/dist/commands/index.d.mts +13 -0
- package/dist/commands/index.mjs +13 -0
- package/dist/commands/index.mjs.map +1 -0
- package/dist/createTextEditor.d.mts +7 -0
- package/dist/createTextEditor.mjs +31 -0
- package/dist/createTextEditor.mjs.map +1 -0
- package/dist/index.d.mts +17 -0
- package/dist/index.mjs +45 -0
- package/dist/index.mjs.map +1 -0
- package/dist/plugins/columnWidthPin.d.mts +5 -0
- package/dist/plugins/columnWidthPin.mjs +4 -0
- package/dist/plugins/columnWidthPin.mjs.map +1 -0
- package/dist/plugins/contextToolbar.d.mts +9 -0
- package/dist/plugins/contextToolbar.mjs +5 -0
- package/dist/plugins/contextToolbar.mjs.map +1 -0
- package/dist/plugins/defineTextEditorPlugin.d.mts +20 -0
- package/dist/plugins/defineTextEditorPlugin.mjs +4 -0
- package/dist/plugins/defineTextEditorPlugin.mjs.map +1 -0
- package/dist/plugins/inputRules.d.mts +14 -0
- package/dist/plugins/inputRules.mjs +8 -0
- package/dist/plugins/inputRules.mjs.map +1 -0
- package/dist/plugins/keymap.d.mts +16 -0
- package/dist/plugins/keymap.mjs +6 -0
- package/dist/plugins/keymap.mjs.map +1 -0
- package/dist/plugins/mention.d.mts +24 -0
- package/dist/plugins/mention.mjs +5 -0
- package/dist/plugins/mention.mjs.map +1 -0
- package/dist/plugins/mentionController.d.mts +16 -0
- package/dist/plugins/mentionController.mjs +4 -0
- package/dist/plugins/mentionController.mjs.map +1 -0
- package/dist/plugins/placeholder.d.mts +9 -0
- package/dist/plugins/placeholder.mjs +5 -0
- package/dist/plugins/placeholder.mjs.map +1 -0
- package/dist/plugins/registry.d.mts +7 -0
- package/dist/plugins/registry.mjs +4 -0
- package/dist/plugins/registry.mjs.map +1 -0
- package/dist/plugins/selectionHighlight.d.mts +14 -0
- package/dist/plugins/selectionHighlight.mjs +5 -0
- package/dist/plugins/selectionHighlight.mjs.map +1 -0
- package/dist/plugins/slashCommands.d.mts +28 -0
- package/dist/plugins/slashCommands.mjs +5 -0
- package/dist/plugins/slashCommands.mjs.map +1 -0
- package/dist/plugins/tableOverlay.d.mts +15 -0
- package/dist/plugins/tableOverlay.mjs +6 -0
- package/dist/plugins/tableOverlay.mjs.map +1 -0
- package/dist/plugins/trailingNode.d.mts +6 -0
- package/dist/plugins/trailingNode.mjs +4 -0
- package/dist/plugins/trailingNode.mjs.map +1 -0
- package/dist/position-DbkbTrFL.d.mts +50 -0
- package/dist/schema/index.d.mts +89 -0
- package/dist/schema/index.mjs +8 -0
- package/dist/schema/index.mjs.map +1 -0
- package/dist/serialization/index.d.mts +8 -0
- package/dist/serialization/index.mjs +5 -0
- package/dist/serialization/index.mjs.map +1 -0
- package/dist/texteditor.classes.d.mts +34 -0
- package/dist/texteditor.classes.mjs +4 -0
- package/dist/texteditor.classes.mjs.map +1 -0
- package/dist/texteditor.constants.d.mts +36 -0
- package/dist/texteditor.constants.mjs +4 -0
- package/dist/texteditor.constants.mjs.map +1 -0
- package/dist/texteditor.props.d.mts +5 -0
- package/dist/texteditor.props.mjs +4 -0
- package/dist/texteditor.props.mjs.map +1 -0
- package/dist/texteditor.refs.d.mts +5 -0
- package/dist/texteditor.refs.mjs +4 -0
- package/dist/texteditor.refs.mjs.map +1 -0
- package/dist/texteditor.state.d.mts +5 -0
- package/dist/texteditor.state.mjs +4 -0
- package/dist/texteditor.state.mjs.map +1 -0
- package/dist/ui/focus.d.mts +5 -0
- package/dist/ui/focus.mjs +4 -0
- package/dist/ui/focus.mjs.map +1 -0
- package/dist/ui/index.d.mts +6 -0
- package/dist/ui/index.mjs +9 -0
- package/dist/ui/index.mjs.map +1 -0
- package/dist/ui/keyboard.d.mts +4 -0
- package/dist/ui/keyboard.mjs +4 -0
- package/dist/ui/keyboard.mjs.map +1 -0
- package/dist/ui/menu.d.mts +10 -0
- package/dist/ui/menu.mjs +4 -0
- package/dist/ui/menu.mjs.map +1 -0
- package/dist/ui/positioning.d.mts +30 -0
- package/dist/ui/positioning.mjs +5 -0
- package/dist/ui/positioning.mjs.map +1 -0
- package/dist/ui/scroll.d.mts +6 -0
- package/dist/ui/scroll.mjs +4 -0
- package/dist/ui/scroll.mjs.map +1 -0
- package/dist/utils/index.d.mts +18 -0
- package/dist/utils/index.mjs +18 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/formatting.ts","../src/commands/lists.ts","../src/commands/tableHelpers.ts","../src/commands/tables.ts","../src/commands/markRange.ts","../src/commands/content.ts","../src/commands/editor.ts","../src/commands/index.ts"],"names":["tr","CellSelection","TextSelection","addColumnAfter"],"mappings":"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","file":"chunk-6YDCG63C.mjs","sourcesContent":["import type { EditorView } from 'prosemirror-view';\nimport type { MarkType, Schema } from 'prosemirror-model';\nimport type { Transaction } from 'prosemirror-state';\nimport { toggleMark } from 'prosemirror-commands';\nimport { CellSelection } from 'prosemirror-tables';\nimport { getMarkAttrs } from '../state/selection';\nimport { DEFAULT_HIGHLIGHT_COLOR } from './constants';\n\nfunction toggleMarkCommand(view: EditorView, markType: MarkType) {\n toggleMark(markType)(view.state, view.dispatch);\n view.focus();\n}\n\n// Apply a textStyle attr over [from,to], preserving each node's other attrs.\nfunction applyStyleToRange(tr: Transaction, markType: MarkType, attr: string, value: string | null, from: number, to: number) {\n const ranges: { from: number; to: number; attrs: Record<string, unknown> }[] = [];\n\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText) return;\n\n const existingMark = markType.isInSet(node.marks);\n const existingAttrs = existingMark ? { ...existingMark.attrs } : {};\n const mergedAttrs = { ...existingAttrs, [attr]: value || null };\n\n ranges.push({ from: Math.max(pos, from), to: Math.min(pos + node.nodeSize, to), attrs: mergedAttrs });\n });\n\n tr.removeMark(from, to, markType);\n\n for (const range of ranges) {\n if (Object.values(range.attrs).some((v) => v != null)) {\n tr.addMark(range.from, range.to, markType.create(range.attrs));\n }\n }\n\n // Fallback: empty cell/range but setting a value — apply directly.\n if (ranges.length === 0 && value) {\n tr.addMark(from, to, markType.create({ [attr]: value }));\n }\n}\n\nfunction applyTextStyle(view: EditorView, schema: Schema, attr: string, value: string | null) {\n const markType = schema.marks.textStyle;\n const { selection } = view.state;\n const { empty } = selection;\n\n if (empty) {\n // Apply to stored marks for next typed content\n const currentAttrs = getMarkAttrs(view.state, markType) || {};\n const newAttrs = { ...currentAttrs, [attr]: value || null };\n const hasValue = Object.values(newAttrs).some((v) => v != null);\n const tr = hasValue ? view.state.tr.addStoredMark(markType.create(newAttrs)) : view.state.tr.removeStoredMark(markType);\n\n view.dispatch(tr);\n view.focus();\n\n return;\n }\n\n const tr = view.state.tr;\n\n if (selection instanceof CellSelection) {\n // Apply to every selected cell, not just the flat anchor→head range.\n selection.forEachCell((cell, pos) => {\n applyStyleToRange(tr, markType, attr, value, pos + 1, pos + cell.nodeSize - 1);\n });\n } else {\n applyStyleToRange(tr, markType, attr, value, selection.from, selection.to);\n }\n\n view.dispatch(tr);\n view.focus();\n}\n\nfunction isHighlightActive(view: EditorView, schema: Schema): boolean {\n const attrs = getMarkAttrs(view.state, schema.marks.textStyle);\n\n return !!attrs?.backgroundColor;\n}\n\nexport function createFormattingCommands(view: EditorView, schema: Schema, options?: { highlightColor?: string | null }) {\n const highlightColor = options?.highlightColor || DEFAULT_HIGHLIGHT_COLOR;\n\n return {\n bold: () => toggleMarkCommand(view, schema.marks.bold),\n italic: () => toggleMarkCommand(view, schema.marks.italic),\n underline: () => toggleMarkCommand(view, schema.marks.underline),\n strikethrough: () => toggleMarkCommand(view, schema.marks.strikethrough),\n subscript: () => toggleMarkCommand(view, schema.marks.subscript),\n superscript: () => toggleMarkCommand(view, schema.marks.superscript),\n code: () => toggleMarkCommand(view, schema.marks.code),\n fontFamily: (family: string | null) => applyTextStyle(view, schema, 'fontFamily', family),\n fontSize: (size: string | null) => applyTextStyle(view, schema, 'fontSize', size),\n foregroundColor: (color: string | null) => applyTextStyle(view, schema, 'color', color),\n backgroundColor: (color: string | null) => applyTextStyle(view, schema, 'backgroundColor', color),\n highlight: () => applyTextStyle(view, schema, 'backgroundColor', isHighlightActive(view, schema) ? null : highlightColor)\n };\n}\n","import type { Fragment, Node, NodeType, Schema } from 'prosemirror-model';\nimport { TextSelection } from 'prosemirror-state';\nimport { liftListItem } from 'prosemirror-schema-list';\nimport type { EditorView } from 'prosemirror-view';\nimport { wrapInListNormalized } from './normalize';\n\nfunction currentListItemType(view: EditorView, schema: Schema): NodeType | 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 === schema.nodes.list_item) return schema.nodes.list_item;\n if (node.type === schema.nodes.check_list_item) return schema.nodes.check_list_item;\n }\n\n return null;\n}\n\n/**\n * Find the list node around the cursor/selection.\n */\nfunction findList(view: EditorView, schema: Schema): { pos: number; node: Node; depth: number } | null {\n const { $from } = view.state.selection;\n const listTypes = [schema.nodes.bullet_list, schema.nodes.ordered_list, schema.nodes.check_list];\n\n // Walk up from cursor position\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (listTypes.includes(node.type)) {\n return { pos: $from.before(depth), node, depth };\n }\n }\n\n // Selection at doc level (e.g. select all) — scan for first list in selection range\n const { from, to } = view.state.selection;\n let found: { pos: number; node: Node; depth: number } | null = null;\n\n view.state.doc.nodesBetween(from, to, (node, pos) => {\n if (found) return false;\n\n if (listTypes.includes(node.type)) {\n const $pos = view.state.doc.resolve(pos);\n\n found = { pos, node, depth: $pos.depth };\n\n return false;\n }\n\n return undefined;\n });\n\n return found;\n}\n\n/**\n * Recursively convert a node to the target list type: list items are re-typed\n * and any nested sub-list is converted too, so switching e.g. bullet→ordered\n * doesn't leave nested sub-lists in the old type.\n */\nfunction convertNode(node: Node, targetListType: NodeType, targetItemType: NodeType, schema: Schema): Node {\n const listTypes = [schema.nodes.bullet_list, schema.nodes.ordered_list, schema.nodes.check_list];\n const itemTypes = [schema.nodes.list_item, schema.nodes.check_list_item];\n\n if (listTypes.includes(node.type)) {\n const children: Node[] = [];\n\n node.content.forEach((child) => children.push(convertNode(child, targetListType, targetItemType, schema)));\n\n return targetListType.create(null, children);\n }\n\n if (itemTypes.includes(node.type)) {\n const inner: Node[] = [];\n\n node.content.forEach((child) => inner.push(convertNode(child, targetListType, targetItemType, schema)));\n const attrs = targetItemType === schema.nodes.check_list_item ? { checked: false } : null;\n\n return targetItemType.create(attrs, inner, node.marks);\n }\n\n return node;\n}\n\nfunction convertItems(content: Fragment, targetListType: NodeType, targetItemType: NodeType, schema: Schema): Node[] {\n const items: Node[] = [];\n\n content.forEach((child) => items.push(convertNode(child, targetListType, targetItemType, schema)));\n\n return items;\n}\n\nfunction findAllLists(view: EditorView, schema: Schema): { pos: number; node: Node; depth: number }[] {\n const { from, to } = view.state.selection;\n const listTypes = [schema.nodes.bullet_list, schema.nodes.ordered_list, schema.nodes.check_list];\n const results: { pos: number; node: Node; depth: number }[] = [];\n\n view.state.doc.nodesBetween(from, to, (node, pos) => {\n if (listTypes.includes(node.type)) {\n const $pos = view.state.doc.resolve(pos);\n\n results.push({ pos, node, depth: $pos.depth });\n\n return false;\n }\n\n return undefined;\n });\n\n return results;\n}\n\nfunction toggleList(view: EditorView, schema: Schema, targetListType: NodeType, targetItemType: NodeType) {\n const existing = findList(view, schema);\n\n if (existing && existing.node.type === targetListType) {\n // Already in this list type — unwrap\n const itemType = currentListItemType(view, schema) || targetItemType;\n\n liftListItem(itemType)(view.state, view.dispatch);\n view.focus();\n\n return;\n }\n\n if (existing) {\n // Convert all lists in the selection to the target type\n const allLists = findAllLists(view, schema);\n\n if (allLists.length > 0) {\n const tr = view.state.tr;\n const { anchor, head } = view.state.selection;\n\n for (let i = allLists.length - 1; i >= 0; i--) {\n const list = allLists[i];\n const newList = targetListType.create(null, convertItems(list.node.content, targetListType, targetItemType, schema));\n\n tr.replaceWith(list.pos, list.pos + list.node.nodeSize, newList);\n }\n\n // A type conversion replaces each list node with one of identical inner\n // structure/size, so absolute cursor positions are unchanged. Mapping through\n // the replace collapses interior positions to a list boundary (cursor would\n // jump to the first item), so restore the original positions directly.\n try {\n tr.setSelection(TextSelection.between(tr.doc.resolve(anchor), tr.doc.resolve(head)));\n } catch {\n /* keep mapped default if resolve fails */\n }\n\n view.dispatch(tr.scrollIntoView());\n view.focus();\n\n return;\n }\n }\n\n // Not in any list — wrap in a new list (normalizing non-paragraph blocks).\n wrapInListNormalized(view, schema, targetListType);\n view.focus();\n}\n\nexport function createListCommands(view: EditorView, schema: Schema) {\n return {\n bulletList: () => toggleList(view, schema, schema.nodes.bullet_list, schema.nodes.list_item),\n orderedList: () => toggleList(view, schema, schema.nodes.ordered_list, schema.nodes.list_item),\n checkList: () => toggleList(view, schema, schema.nodes.check_list, schema.nodes.check_list_item)\n };\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Node as PMNode } from 'prosemirror-model';\nimport type { Transaction } from 'prosemirror-state';\nimport { addColumnAfter, CellSelection, TableMap } from 'prosemirror-tables';\n\n/**\n * Internal table helpers shared by the public table commands in `tables.ts`.\n * Split out to keep `tables.ts` focused on the public surface (insertTable,\n * select*, and the three command factories). None of these are part of the\n * package's public API.\n */\n\n/** Find the table node and start position from the current selection. */\nexport function findTable(view: EditorView) {\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n if ($from.node(depth).type.name === 'table') {\n return { node: $from.node(depth), start: $from.before(depth) + 1 };\n }\n }\n\n return null;\n}\n\n/** Select an entire column by creating a CellSelection from the first to last cell. */\nexport function selectColumn(view: EditorView, colIndex: number) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n\n if (colIndex >= map.width) return;\n\n const firstCellPos = table.start + map.map[colIndex];\n const lastCellPos = table.start + map.map[(map.height - 1) * map.width + colIndex];\n const $first = view.state.doc.resolve(firstCellPos);\n const $last = view.state.doc.resolve(lastCellPos);\n\n view.dispatch(view.state.tr.setSelection(CellSelection.create(view.state.doc, $first.pos, $last.pos)));\n}\n\n/** Select an entire row by creating a CellSelection from the first to last cell. */\nexport function selectRow(view: EditorView, rowIndex: number) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n\n if (rowIndex >= map.height) return;\n\n const firstCellPos = table.start + map.map[rowIndex * map.width];\n const lastCellPos = table.start + map.map[rowIndex * map.width + (map.width - 1)];\n const $first = view.state.doc.resolve(firstCellPos);\n const $last = view.state.doc.resolve(lastCellPos);\n\n view.dispatch(view.state.tr.setSelection(CellSelection.create(view.state.doc, $first.pos, $last.pos)));\n}\n\n/** Move a column left or right by swapping cell content in each row. */\nexport function moveColumn(view: EditorView, colIndex: number, direction: -1 | 1) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n const targetCol = colIndex + direction;\n\n if (targetCol < 0 || targetCol >= map.width) return;\n\n const tr = view.state.tr;\n\n // Process rows bottom-to-top to avoid position shifting\n for (let row = map.height - 1; row >= 0; row--) {\n const fromCellPos = table.start + map.map[row * map.width + colIndex];\n const toCellPos = table.start + map.map[row * map.width + targetCol];\n const fromCell = view.state.doc.nodeAt(fromCellPos);\n const toCell = view.state.doc.nodeAt(toCellPos);\n\n if (!fromCell || !toCell) return;\n if ((fromCell.attrs.colspan ?? 1) > 1 || (toCell.attrs.colspan ?? 1) > 1 || (fromCell.attrs.rowspan ?? 1) > 1 || (toCell.attrs.rowspan ?? 1) > 1) return;\n\n // Swap by replacing both cells — do the later position first to avoid mapping issues\n const [firstPos, firstCell, secondPos, secondCell] = fromCellPos < toCellPos ? [fromCellPos, fromCell, toCellPos, toCell] : [toCellPos, toCell, fromCellPos, fromCell];\n\n tr.replaceWith(tr.mapping.map(secondPos), tr.mapping.map(secondPos + secondCell.nodeSize), firstCell.copy(firstCell.content));\n tr.replaceWith(tr.mapping.map(firstPos), tr.mapping.map(firstPos + firstCell.nodeSize), secondCell.copy(secondCell.content));\n }\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n}\n\n/** Move a row up or down by swapping row nodes. */\nexport function moveRow(view: EditorView, rowIndex: number, direction: -1 | 1) {\n const table = findTable(view);\n\n if (!table) return;\n\n const targetRow = rowIndex + direction;\n\n if (targetRow < 0 || targetRow >= table.node.childCount) return;\n\n const fromRow = table.node.child(rowIndex);\n const toRow = table.node.child(targetRow);\n\n // Merged cells make the two rows structurally different — refuse to swap.\n if (fromRow.childCount !== toRow.childCount) return;\n\n for (let col = 0; col < fromRow.childCount; col++) {\n const a = fromRow.child(col);\n const b = toRow.child(col);\n\n if ((a.attrs.rowspan ?? 1) > 1 || (b.attrs.rowspan ?? 1) > 1 || (a.attrs.colspan ?? 1) > 1 || (b.attrs.colspan ?? 1) > 1) return;\n }\n\n let fromRowPos = table.start;\n\n for (let i = 0; i < rowIndex; i++) {\n fromRowPos += table.node.child(i).nodeSize;\n }\n\n let toRowPos = table.start;\n\n for (let i = 0; i < targetRow; i++) {\n toRowPos += table.node.child(i).nodeSize;\n }\n\n const tr = view.state.tr;\n\n // Swap: replace the later row first, then the earlier one\n const [firstPos, firstRow, secondPos, secondRow] = fromRowPos < toRowPos ? [fromRowPos, fromRow, toRowPos, toRow] : [toRowPos, toRow, fromRowPos, fromRow];\n\n tr.replaceWith(secondPos, secondPos + secondRow.nodeSize, firstRow.copy(firstRow.content));\n tr.replaceWith(firstPos, firstPos + firstRow.nodeSize, secondRow.copy(secondRow.content));\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n}\n\n/** Set text-align on all paragraph/heading nodes within a cell at the given position. */\nfunction alignCell(tr: Transaction, cellPos: number, doc: PMNode, alignment: string) {\n const cell = doc.nodeAt(cellPos);\n\n if (!cell) return;\n\n cell.forEach((child, offset) => {\n if (child.type.name === 'paragraph' || child.type.name === 'heading') {\n const pos = cellPos + 1 + offset;\n\n tr.setNodeMarkup(tr.mapping.map(pos), null, { ...child.attrs, textAlign: alignment === 'left' ? null : alignment });\n }\n });\n}\n\n/** Set text-align on all cells in a column. */\nexport function alignColumn(view: EditorView, colIndex: number, alignment: string) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n const tr = view.state.tr;\n\n for (let row = 0; row < map.height; row++) {\n const cellPos = table.start + map.map[row * map.width + colIndex];\n\n alignCell(tr, cellPos, view.state.doc, alignment);\n }\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n}\n\n/** Set text-align on all cells in a row. */\nexport function alignRow(view: EditorView, rowIndex: number, alignment: string) {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n const tr = view.state.tr;\n\n for (let col = 0; col < map.width; col++) {\n const cellPos = table.start + map.map[rowIndex * map.width + col];\n\n alignCell(tr, cellPos, view.state.doc, alignment);\n }\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n}\n\n/** Set text-align on the current cell (the one containing the cursor). */\nexport function alignCurrentCell(view: EditorView, alignment: string) {\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 const cellPos = $from.before(depth);\n const tr = view.state.tr;\n\n alignCell(tr, cellPos, view.state.doc, alignment);\n\n if (tr.docChanged) {\n view.dispatch(tr);\n view.focus();\n }\n\n return;\n }\n }\n}\n\n/** Apply background color to a cell by setting its backgroundColor attr. */\nfunction setCellBackgroundColor(tr: Transaction, cellPos: number, color: string | null) {\n const cell = tr.doc.nodeAt(tr.mapping.map(cellPos));\n\n if (!cell) return;\n\n tr.setNodeMarkup(tr.mapping.map(cellPos), null, { ...cell.attrs, backgroundColor: color });\n}\n\n/** Apply foreground color to all text in a cell using the textStyle mark. */\nfunction setCellForegroundColor(view: EditorView, cellPos: number, color: string) {\n const cell = view.state.doc.nodeAt(cellPos);\n\n if (!cell) return;\n\n const from = cellPos + 1;\n const to = cellPos + cell.nodeSize - 1;\n const textStyleType = view.state.schema.marks.textStyle;\n\n if (!textStyleType) return;\n\n const tr = view.state.tr;\n\n if (color) {\n tr.addMark(from, to, textStyleType.create({ color }));\n } else {\n tr.removeMark(from, to, textStyleType);\n }\n\n view.dispatch(tr);\n}\n\n/** Apply color to cells in a column. */\nexport function colorColumn(view: EditorView, colIndex: number, color: string, property: 'color' | 'backgroundColor') {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n\n if (property === 'backgroundColor') {\n const tr = view.state.tr;\n\n for (let row = 0; row < map.height; row++) {\n setCellBackgroundColor(tr, table.start + map.map[row * map.width + colIndex], color || null);\n }\n\n if (tr.docChanged) view.dispatch(tr);\n } else {\n for (let row = 0; row < map.height; row++) {\n setCellForegroundColor(view, table.start + map.map[row * map.width + colIndex], color);\n }\n }\n\n view.focus();\n}\n\n/** Apply color to cells in a row. */\nexport function colorRow(view: EditorView, rowIndex: number, color: string, property: 'color' | 'backgroundColor') {\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n\n if (property === 'backgroundColor') {\n const tr = view.state.tr;\n\n for (let col = 0; col < map.width; col++) {\n setCellBackgroundColor(tr, table.start + map.map[rowIndex * map.width + col], color || null);\n }\n\n if (tr.docChanged) view.dispatch(tr);\n } else {\n for (let col = 0; col < map.width; col++) {\n setCellForegroundColor(view, table.start + map.map[rowIndex * map.width + col], color);\n }\n }\n\n view.focus();\n}\n\n/** Apply color to the current cell. */\nexport function colorCurrentCell(view: EditorView, color: string, property: 'color' | 'backgroundColor') {\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 const cellPos = $from.before(depth);\n\n if (property === 'backgroundColor') {\n const tr = view.state.tr;\n\n setCellBackgroundColor(tr, cellPos, color || null);\n\n if (tr.docChanged) view.dispatch(tr);\n } else {\n setCellForegroundColor(view, cellPos, color);\n }\n\n view.focus();\n\n return;\n }\n }\n}\n\n/** Duplicate a column: add a new column after and copy cell content from the source. */\nexport function duplicateColumn(view: EditorView, colIndex: number) {\n const source = findTable(view);\n\n if (!source) return;\n\n // Bail on merged cells in the source column — the duplicate would lose data.\n const sourceMap = TableMap.get(source.node);\n\n for (let row = 0; row < sourceMap.height; row++) {\n const cell = view.state.doc.nodeAt(source.start + sourceMap.map[row * sourceMap.width + colIndex]);\n\n if (cell && ((cell.attrs.colspan ?? 1) > 1 || (cell.attrs.rowspan ?? 1) > 1)) return;\n }\n\n addColumnAfter(view.state, view.dispatch);\n\n // Now copy content from source column to the new column (colIndex + 1)\n const table = findTable(view);\n\n if (!table) return;\n\n const map = TableMap.get(table.node);\n const tr = view.state.tr;\n\n for (let row = 0; row < map.height; row++) {\n const sourceCellPos = table.start + map.map[row * map.width + colIndex];\n const targetCellPos = table.start + map.map[row * map.width + colIndex + 1];\n const sourceCell = view.state.doc.nodeAt(sourceCellPos);\n const targetCell = view.state.doc.nodeAt(targetCellPos);\n\n if (!sourceCell || !targetCell) continue;\n\n // Replace the target cell's content with a copy of the source cell's content\n tr.replaceWith(tr.mapping.map(targetCellPos + 1), tr.mapping.map(targetCellPos + targetCell.nodeSize - 1), sourceCell.content);\n }\n\n if (tr.docChanged) {\n view.dispatch(tr);\n }\n\n view.focus();\n}\n\n/** Duplicate a row: insert a copy of the row after the current one. */\nexport function duplicateRow(view: EditorView, rowIndex: number) {\n const table = findTable(view);\n\n if (!table) return;\n\n const row = table.node.child(rowIndex);\n\n // Calculate the position after the current row\n let rowEndPos = table.start;\n\n for (let i = 0; i <= rowIndex; i++) {\n rowEndPos += table.node.child(i).nodeSize;\n }\n\n const tr = view.state.tr.insert(rowEndPos, row.copy(row.content));\n\n view.dispatch(tr);\n view.focus();\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport type { TextEditorTableColumnCommands, TextEditorTableRowCommands, TextEditorTableCellCommands } from '@primeui/texteditor-types';\nimport { addColumnAfter, addColumnBefore, addRowAfter, addRowBefore, deleteColumn, deleteRow, deleteTable, mergeCells, splitCell, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow } from 'prosemirror-tables';\nimport { TextSelection } from 'prosemirror-state';\nimport { alignColumn, alignCurrentCell, alignRow, colorColumn, colorCurrentCell, colorRow, duplicateColumn, duplicateRow, moveColumn, moveRow, selectColumn, selectRow } from './tableHelpers';\n\n// selectColumn/selectRow live in tableHelpers (shared with move*), but are part\n// of the public command surface — re-export so consumers keep importing from here.\nexport { selectColumn, selectRow };\n\n/**\n * Insert a table with the given number of rows and columns.\n */\nexport function insertTable(view: EditorView, schema: Schema, rows: number = 3, cols: number = 3, defaultCellWidth?: number) {\n const cells: ReturnType<typeof schema.nodes.table_cell.create>[] = [];\n const cellAttrs = defaultCellWidth ? { colwidth: [defaultCellWidth] } : null;\n\n for (let i = 0; i < cols; i++) {\n cells.push(schema.nodes.table_cell.create(cellAttrs, schema.nodes.paragraph.create()));\n }\n\n const tableRows: ReturnType<typeof schema.nodes.table_row.create>[] = [];\n\n for (let i = 0; i < rows; i++) {\n const rowCells = cells.map((cell) => cell.copy(cell.content));\n\n tableRows.push(schema.nodes.table_row.create(null, rowCells));\n }\n\n const table = schema.nodes.table.create(null, tableRows);\n const $from = view.state.selection.$from;\n const parent = $from.node($from.depth);\n const tr = view.state.tr;\n let tablePos: number;\n\n if (parent.isTextblock && parent.content.size === 0) {\n // Empty block — replace it with the table\n tablePos = $from.before($from.depth);\n tr.replaceWith(tablePos, tablePos + parent.nodeSize, table);\n } else {\n // Non-empty block — insert table after the current top-level block\n tablePos = $from.after(1);\n tr.insert(tablePos, table);\n }\n\n // Place cursor inside the first cell's paragraph (table > tr > td > p, +3 from table pos)\n const cellParagraphPos = tablePos + 3;\n const selection = TextSelection.findFrom(tr.doc.resolve(cellParagraphPos), 1, true);\n\n if (selection) tr.setSelection(selection);\n\n view.dispatch(tr.scrollIntoView());\n view.focus();\n}\n\n/**\n * Create table column commands for the downloadable UI components.\n */\nexport function createTableColumnCommands(view: EditorView, schema: Schema, _colIndex: number, onDismiss: () => void): TextEditorTableColumnCommands {\n const run = (cmd: (state: typeof view.state, dispatch?: typeof view.dispatch) => boolean) => {\n cmd(view.state, view.dispatch);\n view.focus();\n onDismiss();\n };\n\n return {\n insertBefore: () => run(addColumnBefore),\n insertAfter: () => run(addColumnAfter),\n delete: () => run(deleteColumn),\n moveLeft: () => {\n moveColumn(view, _colIndex, -1);\n selectColumn(view, _colIndex - 1);\n onDismiss();\n },\n moveRight: () => {\n moveColumn(view, _colIndex, 1);\n selectColumn(view, _colIndex + 1);\n onDismiss();\n },\n duplicate: () => {\n duplicateColumn(view, _colIndex);\n onDismiss();\n },\n align: (value: string) => {\n alignColumn(view, _colIndex, value);\n onDismiss();\n },\n toggleHeader: () => run(toggleHeaderColumn),\n foregroundColor: (color: string) => {\n colorColumn(view, _colIndex, color, 'color');\n onDismiss();\n },\n backgroundColor: (color: string) => {\n colorColumn(view, _colIndex, color, 'backgroundColor');\n onDismiss();\n }\n };\n}\n\n/**\n * Create table row commands for the downloadable UI components.\n */\nexport function createTableRowCommands(view: EditorView, schema: Schema, _rowIndex: number, onDismiss: () => void): TextEditorTableRowCommands {\n const run = (cmd: (state: typeof view.state, dispatch?: typeof view.dispatch) => boolean) => {\n cmd(view.state, view.dispatch);\n view.focus();\n onDismiss();\n };\n\n return {\n insertBefore: () => run(addRowBefore),\n insertAfter: () => run(addRowAfter),\n delete: () => run(deleteRow),\n moveUp: () => {\n moveRow(view, _rowIndex, -1);\n selectRow(view, _rowIndex - 1);\n onDismiss();\n },\n moveDown: () => {\n moveRow(view, _rowIndex, 1);\n selectRow(view, _rowIndex + 1);\n onDismiss();\n },\n duplicate: () => {\n duplicateRow(view, _rowIndex);\n onDismiss();\n },\n deleteTable: () => run(deleteTable),\n align: (value: string) => {\n alignRow(view, _rowIndex, value);\n onDismiss();\n },\n toggleHeader: () => run(toggleHeaderRow),\n foregroundColor: (color: string) => {\n colorRow(view, _rowIndex, color, 'color');\n onDismiss();\n },\n backgroundColor: (color: string) => {\n colorRow(view, _rowIndex, color, 'backgroundColor');\n onDismiss();\n }\n };\n}\n\n/**\n * Create table cell commands for the downloadable UI components.\n */\nexport function createTableCellCommands(view: EditorView, schema: Schema, onDismiss: () => void): TextEditorTableCellCommands {\n return {\n clearContents: () => {\n // Replace cell content with empty paragraph\n const { $from } = view.state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n if ($from.node(depth).type === schema.nodes.table_cell || $from.node(depth).type === schema.nodes.table_header) {\n const cellStart = $from.start(depth);\n const cellEnd = $from.end(depth);\n const tr = view.state.tr.replaceWith(cellStart, cellEnd, schema.nodes.paragraph.create());\n\n view.dispatch(tr);\n break;\n }\n }\n\n view.focus();\n onDismiss();\n },\n align: (value: string) => {\n alignCurrentCell(view, value);\n onDismiss();\n },\n mergeCells: () => {\n mergeCells(view.state, view.dispatch);\n view.focus();\n onDismiss();\n },\n splitCell: () => {\n splitCell(view.state, view.dispatch);\n view.focus();\n onDismiss();\n },\n toggleHeader: () => {\n toggleHeaderCell(view.state, view.dispatch);\n view.focus();\n onDismiss();\n },\n foregroundColor: (color: string) => {\n colorCurrentCell(view, color, 'color');\n onDismiss();\n },\n backgroundColor: (color: string) => {\n colorCurrentCell(view, color, 'backgroundColor');\n onDismiss();\n }\n };\n}\n","import type { MarkType, Node as PMNode } from 'prosemirror-model';\n\n// Returns the full {from,to} extent of `markType` (matching attrs) covering `pos`, or null if absent.\nexport function findMarkRange(doc: PMNode, pos: number, markType: MarkType): { from: number; to: number } | null {\n const $pos = doc.resolve(pos);\n const parent = $pos.parent;\n const parentStart = $pos.start();\n const markAt = (i: number) => (i >= 0 && i < parent.childCount ? markType.isInSet(parent.child(i).marks) || null : null);\n\n let index = $pos.index();\n let anchor = markAt(index);\n\n if (!anchor && markAt(index - 1)) {\n index -= 1;\n anchor = markAt(index);\n }\n\n if (!anchor) return null;\n\n const sameMark = (i: number) => {\n const m = markAt(i);\n\n return !!m && m.eq(anchor!);\n };\n\n let start = index;\n let end = index;\n\n while (start > 0 && sameMark(start - 1)) start--;\n while (end < parent.childCount - 1 && sameMark(end + 1)) end++;\n\n let from = parentStart;\n\n for (let i = 0; i < start; i++) from += parent.child(i).nodeSize;\n\n let to = from;\n\n for (let i = start; i <= end; i++) to += parent.child(i).nodeSize;\n\n return { from, to };\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport type { ImageAttributes } from '@primeui/texteditor-types';\nimport { sanitizeUrl, sanitizeImageUrl, sanitizeTextAttr } from '../utils/url';\nimport { parseDimension } from '../schema/nodes';\nimport { findMarkRange } from './markRange';\n\nexport function createContentCommands(view: EditorView, schema: Schema) {\n const getLinkRange = (): { from: number; to: number } => {\n const { from, to, empty } = view.state.selection;\n\n if (!empty) return { from, to };\n\n return findMarkRange(view.state.doc, from, schema.marks.link) ?? { from, to };\n };\n\n return {\n insertLink: (url: string, text?: string) => {\n const href = sanitizeUrl(url);\n\n // Refuse to create a link with an unsafe scheme.\n if (href == null) return;\n\n const { from, to, empty } = view.state.selection;\n const linkMark = schema.marks.link.create({ href });\n\n if (empty && text) {\n const textNode = schema.text(text, [linkMark]);\n\n view.dispatch(view.state.tr.replaceSelectionWith(textNode, false));\n } else if (empty) {\n const displayText = href;\n const textNode = schema.text(displayText, [linkMark]);\n\n view.dispatch(view.state.tr.replaceSelectionWith(textNode, false));\n } else {\n view.dispatch(view.state.tr.addMark(from, to, linkMark));\n }\n\n view.focus();\n },\n\n updateLink: (url: string) => {\n const href = sanitizeUrl(url);\n\n // Refuse to update a link to an unsafe scheme.\n if (href == null) return;\n\n const { from, to } = getLinkRange();\n const tr = view.state.tr;\n\n tr.removeMark(from, to, schema.marks.link);\n tr.addMark(from, to, schema.marks.link.create({ href }));\n view.dispatch(tr);\n view.focus();\n },\n\n removeLink: () => {\n const { from, to } = getLinkRange();\n\n view.dispatch(view.state.tr.removeMark(from, to, schema.marks.link));\n view.focus();\n },\n\n openLink: () => {\n const { $from } = view.state.selection;\n const linkMark = schema.marks.link.isInSet($from.marks()) ?? schema.marks.link.isInSet(view.state.doc.resolve(Math.max(0, $from.pos - 1)).marks());\n const href = linkMark?.attrs.href ? sanitizeUrl(linkMark.attrs.href as string) : null;\n\n if (href) window.open(href, '_blank', 'noopener,noreferrer');\n },\n\n insertImage: (src: string, attrs?: ImageAttributes) => {\n const safeSrc = sanitizeImageUrl(src);\n\n if (safeSrc == null) return;\n\n // Sanitize attrs like the parse path (command path also feeds getJSON).\n const imageNode = schema.nodes.image.create({\n src: safeSrc,\n alt: sanitizeTextAttr(attrs?.alt) || null,\n width: parseDimension(attrs?.width == null ? null : String(attrs.width)),\n height: parseDimension(attrs?.height == null ? null : String(attrs.height))\n });\n\n view.dispatch(view.state.tr.replaceSelectionWith(imageNode));\n view.focus();\n }\n };\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport { undo, redo } from 'prosemirror-history';\nimport { docToHtml } from '../serialization/htmlSerializer';\n\nexport interface EditorCommandCallbacks {\n onUploadImages?: () => void;\n onUploadDocuments?: () => void;\n}\n\n// Editor-level commands (clear formatting, print, upload placeholders, history).\n// Kept out of the aggregator so index.ts stays a thin assembler.\nexport function createEditorCommands(view: EditorView, schema: Schema, callbacks?: EditorCommandCallbacks) {\n const insertUploadPlaceholder = (placeholderType: typeof schema.nodes.image_upload_placeholder, onInsert?: () => void) => {\n let exists = false;\n\n view.state.doc.descendants((node) => {\n if (node.type === placeholderType) exists = true;\n });\n\n if (exists) return;\n\n view.dispatch(view.state.tr.replaceSelectionWith(placeholderType.create()).scrollIntoView());\n onInsert?.();\n };\n\n return {\n clearFormatting: () => {\n const { from, to, empty } = view.state.selection;\n\n if (empty) return;\n\n const tr = view.state.tr;\n\n for (const markType of Object.values(schema.marks)) {\n tr.removeMark(from, to, markType);\n }\n\n view.state.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isTextblock && node.type !== schema.nodes.paragraph && node.type !== schema.nodes.code_block) {\n tr.setNodeMarkup(pos, schema.nodes.paragraph);\n }\n });\n\n view.dispatch(tr);\n view.focus();\n },\n\n print: () => {\n const content = docToHtml(view.state.doc, schema);\n const iframe = document.createElement('iframe');\n\n iframe.setAttribute('sandbox', 'allow-modals allow-same-origin');\n iframe.style.position = 'fixed';\n iframe.style.inset = '0';\n iframe.style.width = '0';\n iframe.style.height = '0';\n iframe.style.border = 'none';\n document.body.appendChild(iframe);\n\n const doc = iframe.contentDocument;\n\n if (doc) {\n doc.open();\n doc.write(\n `<!DOCTYPE html><html><head><style>body { font-family: system-ui, sans-serif; padding: 2rem; line-height: 1.6; } img { max-width: 100%; } table { border-collapse: collapse; width: 100%; } td, th { border: 1px solid #ccc; padding: 0.5rem; }</style></head><body>${content}</body></html>`\n );\n doc.close();\n\n iframe.contentWindow?.focus();\n iframe.contentWindow?.print();\n }\n\n setTimeout(() => iframe.remove(), 1000);\n },\n\n uploadImages: () => insertUploadPlaceholder(schema.nodes.image_upload_placeholder, callbacks?.onUploadImages),\n uploadDocuments: () => insertUploadPlaceholder(schema.nodes.document_upload_placeholder, callbacks?.onUploadDocuments),\n\n undo: () => {\n undo(view.state, view.dispatch);\n view.focus();\n },\n redo: () => {\n redo(view.state, view.dispatch);\n view.focus();\n }\n };\n}\n","import type { EditorView } from 'prosemirror-view';\nimport type { Schema } from 'prosemirror-model';\nimport type { TextEditorCommands } from '@primeui/texteditor-types';\nimport { setBlockType } from 'prosemirror-commands';\nimport { preserveSelection } from '../plugins/selectionHighlight';\nimport { wrapInBlockquoteNormalized, wrapInListNormalized } from './normalize';\nimport { createFormattingCommands } from './formatting';\nimport { createBlockCommands } from './blocks';\nimport { createListCommands } from './lists';\nimport { insertTable } from './tables';\nimport { createContentCommands } from './content';\nimport { createEditorCommands } from './editor';\n\nexport function createCommands(view: EditorView, schema: Schema, callbacks?: { onUploadImages?: () => void; onUploadDocuments?: () => void }, options?: { defaultCellWidth?: number; highlightColor?: string | null }): TextEditorCommands {\n const formatting = createFormattingCommands(view, schema, { highlightColor: options?.highlightColor });\n const blocks = createBlockCommands(view, schema);\n const lists = createListCommands(view, schema);\n const content = createContentCommands(view, schema);\n const editorCmds = createEditorCommands(view, schema, callbacks);\n\n return {\n // Formatting marks\n bold: formatting.bold,\n italic: formatting.italic,\n underline: formatting.underline,\n strikethrough: formatting.strikethrough,\n subscript: formatting.subscript,\n superscript: formatting.superscript,\n code: formatting.code,\n highlight: formatting.highlight,\n clearFormatting: editorCmds.clearFormatting,\n\n // Block types\n heading: blocks.heading,\n paragraph: blocks.paragraph,\n codeBlock: blocks.codeBlock,\n blockquote: blocks.blockquote,\n insertHorizontalRule: blocks.insertHorizontalRule,\n textAlign: blocks.textAlign,\n\n // Formatting styles\n fontFamily: formatting.fontFamily,\n fontSize: formatting.fontSize,\n foregroundColor: formatting.foregroundColor,\n backgroundColor: formatting.backgroundColor,\n\n // Lists\n bulletList: lists.bulletList,\n orderedList: lists.orderedList,\n checkList: lists.checkList,\n\n // Content\n insertLink: content.insertLink,\n updateLink: content.updateLink,\n removeLink: content.removeLink,\n openLink: content.openLink,\n insertImage: content.insertImage,\n\n // Table\n table: (rows?: number, cols?: number) => insertTable(view, schema, rows || 3, cols || 3, options?.defaultCellWidth),\n\n // Features\n print: editorCmds.print,\n uploadImages: editorCmds.uploadImages,\n uploadDocuments: editorCmds.uploadDocuments,\n\n // History\n undo: editorCmds.undo,\n redo: editorCmds.redo,\n\n // Selection highlight\n preserveSelection: () => preserveSelection(view),\n\n // Turn into (non-toggle: always sets the type)\n turnInto: {\n text: () => {\n setBlockType(schema.nodes.paragraph)(view.state, view.dispatch);\n view.focus();\n },\n heading1: () => {\n setBlockType(schema.nodes.heading, { level: 1 })(view.state, view.dispatch);\n view.focus();\n },\n heading2: () => {\n setBlockType(schema.nodes.heading, { level: 2 })(view.state, view.dispatch);\n view.focus();\n },\n heading3: () => {\n setBlockType(schema.nodes.heading, { level: 3 })(view.state, view.dispatch);\n view.focus();\n },\n bulletList: () => {\n wrapInListNormalized(view, schema, schema.nodes.bullet_list);\n view.focus();\n },\n orderedList: () => {\n wrapInListNormalized(view, schema, schema.nodes.ordered_list);\n view.focus();\n },\n checkList: () => {\n wrapInListNormalized(view, schema, schema.nodes.check_list);\n view.focus();\n },\n blockquote: () => {\n wrapInBlockquoteNormalized(view, schema);\n view.focus();\n },\n codeBlock: () => {\n setBlockType(schema.nodes.code_block)(view.state, view.dispatch);\n view.focus();\n }\n }\n };\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Fragment, DOMSerializer } from 'prosemirror-model';
|
|
2
|
+
|
|
3
|
+
// src/serialization/htmlSerializer.ts
|
|
4
|
+
function withoutPlaceholders(content, schema) {
|
|
5
|
+
const placeholders = [schema.nodes.image_upload_placeholder, schema.nodes.document_upload_placeholder];
|
|
6
|
+
const kept = [];
|
|
7
|
+
content.forEach((child) => {
|
|
8
|
+
if (placeholders.includes(child.type)) return;
|
|
9
|
+
if (child.childCount > 0 && !child.isText) {
|
|
10
|
+
kept.push(child.copy(withoutPlaceholders(child.content, schema)));
|
|
11
|
+
} else {
|
|
12
|
+
kept.push(child);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
return Fragment.fromArray(kept);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// src/serialization/htmlSerializer.ts
|
|
19
|
+
var serializerCache = /* @__PURE__ */ new WeakMap();
|
|
20
|
+
function getSerializer(schema) {
|
|
21
|
+
let serializer = serializerCache.get(schema);
|
|
22
|
+
if (!serializer) {
|
|
23
|
+
serializer = DOMSerializer.fromSchema(schema);
|
|
24
|
+
serializerCache.set(schema, serializer);
|
|
25
|
+
}
|
|
26
|
+
return serializer;
|
|
27
|
+
}
|
|
28
|
+
function docToHtml(doc, schema) {
|
|
29
|
+
const serializer = getSerializer(schema);
|
|
30
|
+
const fragment = serializer.serializeFragment(withoutPlaceholders(doc.content, schema));
|
|
31
|
+
const container = document.createElement("div");
|
|
32
|
+
container.appendChild(fragment);
|
|
33
|
+
return container.innerHTML;
|
|
34
|
+
}
|
|
35
|
+
function nodeToHtml(node, schema) {
|
|
36
|
+
const serializer = getSerializer(schema);
|
|
37
|
+
const dom = serializer.serializeNode(node);
|
|
38
|
+
const container = document.createElement("div");
|
|
39
|
+
container.appendChild(dom);
|
|
40
|
+
return container.innerHTML;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { docToHtml, nodeToHtml, withoutPlaceholders };
|
|
44
|
+
//# sourceMappingURL=chunk-6ZN5XRH2.mjs.map
|
|
45
|
+
//# sourceMappingURL=chunk-6ZN5XRH2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/serialization/placeholders.ts","../src/serialization/htmlSerializer.ts"],"names":[],"mappings":";;;AAGO,SAAS,mBAAA,CAAoB,SAAmB,MAAA,EAA0B;AAC7E,EAAA,MAAM,eAAe,CAAC,MAAA,CAAO,MAAM,wBAAA,EAA0B,MAAA,CAAO,MAAM,2BAA2B,CAAA;AACrG,EAAA,MAAM,OAAe,EAAC;AAEtB,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU;AACvB,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG;AAEvC,IAAA,IAAI,KAAA,CAAM,UAAA,GAAa,CAAA,IAAK,CAAC,MAAM,MAAA,EAAQ;AACvC,MAAA,IAAA,CAAK,IAAA,CAAK,MAAM,IAAA,CAAK,mBAAA,CAAoB,MAAM,OAAA,EAAS,MAAM,CAAC,CAAC,CAAA;AAAA,IACpE,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,IACnB;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,QAAA,CAAS,UAAU,IAAI,CAAA;AAClC;;;ACfA,IAAM,eAAA,uBAAsB,OAAA,EAA+B;AAE3D,SAAS,cAAc,MAAA,EAA+B;AAClD,EAAA,IAAI,UAAA,GAAa,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAA;AAE3C,EAAA,IAAI,CAAC,UAAA,EAAY;AACb,IAAA,UAAA,GAAa,aAAA,CAAc,WAAW,MAAM,CAAA;AAC5C,IAAA,eAAA,CAAgB,GAAA,CAAI,QAAQ,UAAU,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,UAAA;AACX;AAEO,SAAS,SAAA,CAAU,KAAW,MAAA,EAAwB;AACzD,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,WAAW,UAAA,CAAW,iBAAA,CAAkB,oBAAoB,GAAA,CAAI,OAAA,EAAS,MAAM,CAAC,CAAA;AACtF,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAE9C,EAAA,SAAA,CAAU,YAAY,QAAQ,CAAA;AAE9B,EAAA,OAAO,SAAA,CAAU,SAAA;AACrB;AAQO,SAAS,UAAA,CAAW,MAAY,MAAA,EAAwB;AAC3D,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,aAAA,CAAc,IAAI,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAE9C,EAAA,SAAA,CAAU,YAAY,GAAG,CAAA;AAEzB,EAAA,OAAO,SAAA,CAAU,SAAA;AACrB","file":"chunk-6ZN5XRH2.mjs","sourcesContent":["import { Fragment, type Node, type Schema } from 'prosemirror-model';\n\n// Drops transient upload-placeholder nodes so they never leak into emitted output.\nexport function withoutPlaceholders(content: Fragment, schema: Schema): Fragment {\n const placeholders = [schema.nodes.image_upload_placeholder, schema.nodes.document_upload_placeholder];\n const kept: Node[] = [];\n\n content.forEach((child) => {\n if (placeholders.includes(child.type)) return;\n\n if (child.childCount > 0 && !child.isText) {\n kept.push(child.copy(withoutPlaceholders(child.content, schema)));\n } else {\n kept.push(child);\n }\n });\n\n return Fragment.fromArray(kept);\n}\n","import { DOMSerializer, type Node, type Schema } from 'prosemirror-model';\nimport { withoutPlaceholders } from './placeholders';\n\nconst serializerCache = new WeakMap<Schema, DOMSerializer>();\n\nfunction getSerializer(schema: Schema): DOMSerializer {\n let serializer = serializerCache.get(schema);\n\n if (!serializer) {\n serializer = DOMSerializer.fromSchema(schema);\n serializerCache.set(schema, serializer);\n }\n\n return serializer;\n}\n\nexport function docToHtml(doc: Node, schema: Schema): string {\n const serializer = getSerializer(schema);\n const fragment = serializer.serializeFragment(withoutPlaceholders(doc.content, schema));\n const container = document.createElement('div');\n\n container.appendChild(fragment);\n\n return container.innerHTML;\n}\n\n/**\n * Serialize a single node to HTML via the schema's own toDOM. Used as a lossless\n * fallback when a target format (e.g. Markdown) cannot represent the node —\n * embedding raw HTML preserves its structure and attrs rather than flattening\n * it to plain text.\n */\nexport function nodeToHtml(node: Node, schema: Schema): string {\n const serializer = getSerializer(schema);\n const dom = serializer.serializeNode(node);\n const container = document.createElement('div');\n\n container.appendChild(dom);\n\n return container.innerHTML;\n}\n"]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// src/state/selection.ts
|
|
2
|
+
function isMarkActive(state, markType) {
|
|
3
|
+
const { from, $from, to, empty } = state.selection;
|
|
4
|
+
if (empty) {
|
|
5
|
+
if (state.storedMarks) return !!markType.isInSet(state.storedMarks);
|
|
6
|
+
if (markType.isInSet($from.marks())) return true;
|
|
7
|
+
const after = $from.nodeAfter;
|
|
8
|
+
return !!(after && markType.isInSet(after.marks));
|
|
9
|
+
}
|
|
10
|
+
let hasText = false;
|
|
11
|
+
let covered = true;
|
|
12
|
+
state.doc.nodesBetween(from, to, (node) => {
|
|
13
|
+
if (!node.isText) return;
|
|
14
|
+
hasText = true;
|
|
15
|
+
if (!markType.isInSet(node.marks)) covered = false;
|
|
16
|
+
});
|
|
17
|
+
return hasText && covered;
|
|
18
|
+
}
|
|
19
|
+
function getMarkAttrs(state, markType) {
|
|
20
|
+
const { from, $from, to, empty } = state.selection;
|
|
21
|
+
if (empty) {
|
|
22
|
+
const mark = markType.isInSet(state.storedMarks || $from.marks()) || (!state.storedMarks && $from.nodeAfter ? markType.isInSet($from.nodeAfter.marks) : null);
|
|
23
|
+
return mark ? mark.attrs : null;
|
|
24
|
+
}
|
|
25
|
+
let seen = false;
|
|
26
|
+
const merged = {};
|
|
27
|
+
state.doc.nodesBetween(from, to, (node) => {
|
|
28
|
+
if (!node.isText) return;
|
|
29
|
+
const attrs = markType.isInSet(node.marks)?.attrs ?? {};
|
|
30
|
+
const keys = /* @__PURE__ */ new Set([...Object.keys(merged), ...Object.keys(attrs)]);
|
|
31
|
+
if (!seen) {
|
|
32
|
+
seen = true;
|
|
33
|
+
Object.assign(merged, attrs);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
for (const key of keys) {
|
|
37
|
+
if (merged[key] !== attrs[key]) merged[key] = null;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return seen ? merged : null;
|
|
41
|
+
}
|
|
42
|
+
function getParentNodeOfType(state, nodeType) {
|
|
43
|
+
const { $from } = state.selection;
|
|
44
|
+
for (let depth = $from.depth; depth > 0; depth--) {
|
|
45
|
+
const node = $from.node(depth);
|
|
46
|
+
if (node.type === nodeType) {
|
|
47
|
+
return { node, pos: $from.before(depth), depth };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function isNodeActive(state, nodeType, attrs) {
|
|
53
|
+
const result = getParentNodeOfType(state, nodeType);
|
|
54
|
+
if (!result) return false;
|
|
55
|
+
if (attrs) {
|
|
56
|
+
return Object.entries(attrs).every(([key, val]) => result.node?.attrs[key] === val);
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
function getSelectionPosition(view) {
|
|
61
|
+
const { from, to } = view.state.selection;
|
|
62
|
+
if (from === to) return null;
|
|
63
|
+
const start = view.coordsAtPos(from);
|
|
64
|
+
const end = view.coordsAtPos(to);
|
|
65
|
+
return {
|
|
66
|
+
top: Math.min(start.top, end.top),
|
|
67
|
+
left: start.left,
|
|
68
|
+
bottom: Math.max(start.bottom, end.bottom),
|
|
69
|
+
height: Math.max(start.bottom, end.bottom) - Math.min(start.top, end.top),
|
|
70
|
+
width: Math.abs(end.left - start.left)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { getMarkAttrs, getParentNodeOfType, getSelectionPosition, isMarkActive, isNodeActive };
|
|
75
|
+
//# sourceMappingURL=chunk-72T5I4O4.mjs.map
|
|
76
|
+
//# sourceMappingURL=chunk-72T5I4O4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/state/selection.ts"],"names":[],"mappings":"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","file":"chunk-72T5I4O4.mjs","sourcesContent":["import type { EditorState } from 'prosemirror-state';\nimport type { EditorView } from 'prosemirror-view';\nimport type { MarkType, NodeType } from 'prosemirror-model';\nimport type { CaretPosition } from '@primeui/texteditor-types';\n\nexport function isMarkActive(state: EditorState, markType: MarkType): boolean {\n const { from, $from, to, empty } = state.selection;\n\n if (empty) {\n if (state.storedMarks) return !!markType.isInSet(state.storedMarks);\n\n // At a boundary, $from.marks() reflects the char before the cursor, so a\n // cursor at the left edge of a code span misses it. Also check the mark\n // on the character immediately after the cursor.\n if (markType.isInSet($from.marks())) return true;\n\n const after = $from.nodeAfter;\n\n return !!(after && markType.isInSet(after.marks));\n }\n\n // Active only when the mark fully covers the selection.\n let hasText = false;\n let covered = true;\n\n state.doc.nodesBetween(from, to, (node) => {\n if (!node.isText) return;\n hasText = true;\n if (!markType.isInSet(node.marks)) covered = false;\n });\n\n return hasText && covered;\n}\n\nexport function getMarkAttrs(state: EditorState, markType: MarkType): Record<string, unknown> | null {\n const { from, $from, to, empty } = state.selection;\n\n if (empty) {\n const mark = markType.isInSet(state.storedMarks || $from.marks()) || (!state.storedMarks && $from.nodeAfter ? markType.isInSet($from.nodeAfter.marks) : null);\n\n return mark ? mark.attrs : null;\n }\n\n // Report an attr only when uniform across the selection; mixed -> null.\n let seen = false;\n const merged: Record<string, unknown> = {};\n\n state.doc.nodesBetween(from, to, (node) => {\n if (!node.isText) return;\n\n const attrs = (markType.isInSet(node.marks)?.attrs ?? {}) as Record<string, unknown>;\n const keys = new Set([...Object.keys(merged), ...Object.keys(attrs)]);\n\n if (!seen) {\n seen = true;\n Object.assign(merged, attrs);\n\n return;\n }\n\n for (const key of keys) {\n if (merged[key] !== attrs[key]) merged[key] = null;\n }\n });\n\n return seen ? merged : null;\n}\n\nexport function getParentNodeOfType(state: EditorState, nodeType: NodeType): { node: ReturnType<typeof state.doc.nodeAt>; pos: number; depth: number } | null {\n const { $from } = state.selection;\n\n for (let depth = $from.depth; depth > 0; depth--) {\n const node = $from.node(depth);\n\n if (node.type === nodeType) {\n return { node, pos: $from.before(depth), depth };\n }\n }\n\n return null;\n}\n\nexport function isNodeActive(state: EditorState, nodeType: NodeType, attrs?: Record<string, unknown>): boolean {\n const result = getParentNodeOfType(state, nodeType);\n\n if (!result) return false;\n\n if (attrs) {\n return Object.entries(attrs).every(([key, val]) => result.node?.attrs[key] === val);\n }\n\n return true;\n}\n\nexport function getSelectionPosition(view: EditorView): CaretPosition | null {\n const { from, to } = view.state.selection;\n\n if (from === to) return null;\n\n const start = view.coordsAtPos(from);\n const end = view.coordsAtPos(to);\n\n return {\n top: Math.min(start.top, end.top),\n left: start.left,\n bottom: Math.max(start.bottom, end.bottom),\n height: Math.max(start.bottom, end.bottom) - Math.min(start.top, end.top),\n width: Math.abs(end.left - start.left)\n };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/utils/css.ts
|
|
2
|
+
function sanitizeCssValue(value) {
|
|
3
|
+
if (value == null) return null;
|
|
4
|
+
const v = value.trim();
|
|
5
|
+
if (v === "") return null;
|
|
6
|
+
if (/[<>`\\]/.test(v)) return null;
|
|
7
|
+
const lower = v.toLowerCase();
|
|
8
|
+
if (lower.includes("url(") || lower.includes("expression") || lower.includes("javascript:") || lower.includes("behavior") || lower.includes("-moz-binding") || lower.includes("@import") || lower.includes("/*") || lower.includes("}") || lower.includes(";")) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return v;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { sanitizeCssValue };
|
|
15
|
+
//# sourceMappingURL=chunk-7QCHSEN2.mjs.map
|
|
16
|
+
//# sourceMappingURL=chunk-7QCHSEN2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/css.ts"],"names":[],"mappings":";AAEO,SAAS,iBAAiB,KAAA,EAAiD;AAC9E,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAE1B,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AAErB,EAAA,IAAI,CAAA,KAAM,IAAI,OAAO,IAAA;AAIrB,EAAA,IAAI,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,IAAA;AAE9B,EAAA,MAAM,KAAA,GAAQ,EAAE,WAAA,EAAY;AAE5B,EAAA,IACI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IACrB,MAAM,QAAA,CAAS,YAAY,CAAA,IAC3B,KAAA,CAAM,SAAS,aAAa,CAAA,IAC5B,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,IACzB,KAAA,CAAM,QAAA,CAAS,cAAc,KAC7B,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,IACxB,MAAM,QAAA,CAAS,IAAI,CAAA,IACnB,KAAA,CAAM,SAAS,GAAG,CAAA,IAClB,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EACpB;AACE,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX","file":"chunk-7QCHSEN2.mjs","sourcesContent":["// Rejects a CSS value that could inject extra declarations, trigger requests,\n// or break out of the style attribute / serialized markup (mXSS hardening).\nexport function sanitizeCssValue(value: string | null | undefined): string | null {\n if (value == null) return null;\n\n const v = value.trim();\n\n if (v === '') return null;\n\n // Markup/template breakout chars (angle brackets, backtick, backslash).\n // Quotes are allowed: they are legitimate CSS string delimiters (e.g. font-family).\n if (/[<>`\\\\]/.test(v)) return null;\n\n const lower = v.toLowerCase();\n\n if (\n lower.includes('url(') ||\n lower.includes('expression') ||\n lower.includes('javascript:') ||\n lower.includes('behavior') ||\n lower.includes('-moz-binding') ||\n lower.includes('@import') ||\n lower.includes('/*') ||\n lower.includes('}') ||\n lower.includes(';')\n ) {\n return null;\n }\n\n return v;\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// src/texteditor.props.ts
|
|
2
|
+
var defaultTextEditorProps = {
|
|
3
|
+
value: null,
|
|
4
|
+
mode: null,
|
|
5
|
+
placeholder: null,
|
|
6
|
+
ariaLabel: void 0,
|
|
7
|
+
ariaLabelledby: void 0,
|
|
8
|
+
slashPlaceholder: null,
|
|
9
|
+
checklistPlaceholder: null,
|
|
10
|
+
allowedImageTypes: void 0,
|
|
11
|
+
allowedDocumentTypes: void 0,
|
|
12
|
+
imageMaxFileCount: null,
|
|
13
|
+
imageMaxFileSize: null,
|
|
14
|
+
documentMaxFileCount: null,
|
|
15
|
+
documentMaxFileSize: null,
|
|
16
|
+
navigator: false,
|
|
17
|
+
markdown: false,
|
|
18
|
+
valueChangeDebounce: null,
|
|
19
|
+
minTableColumnWidth: null,
|
|
20
|
+
defaultTableColumnWidth: null,
|
|
21
|
+
defaultHighlightColor: null,
|
|
22
|
+
uploadHandler: void 0,
|
|
23
|
+
imageUploadHandler: void 0,
|
|
24
|
+
documentUploadHandler: void 0,
|
|
25
|
+
mentionHandler: void 0,
|
|
26
|
+
mentionFilterField: void 0,
|
|
27
|
+
mentionTemplate: void 0,
|
|
28
|
+
plugins: void 0
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { defaultTextEditorProps };
|
|
32
|
+
//# sourceMappingURL=chunk-AJOKUIQD.mjs.map
|
|
33
|
+
//# sourceMappingURL=chunk-AJOKUIQD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/texteditor.props.ts"],"names":[],"mappings":";AAEO,IAAM,sBAAA,GAA0C;AAAA,EACnD,KAAA,EAAO,IAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,WAAA,EAAa,IAAA;AAAA,EACb,SAAA,EAAW,MAAA;AAAA,EACX,cAAA,EAAgB,MAAA;AAAA,EAChB,gBAAA,EAAkB,IAAA;AAAA,EAClB,oBAAA,EAAsB,IAAA;AAAA,EACtB,iBAAA,EAAmB,MAAA;AAAA,EACnB,oBAAA,EAAsB,MAAA;AAAA,EACtB,iBAAA,EAAmB,IAAA;AAAA,EACnB,gBAAA,EAAkB,IAAA;AAAA,EAClB,oBAAA,EAAsB,IAAA;AAAA,EACtB,mBAAA,EAAqB,IAAA;AAAA,EACrB,SAAA,EAAW,KAAA;AAAA,EACX,QAAA,EAAU,KAAA;AAAA,EACV,mBAAA,EAAqB,IAAA;AAAA,EACrB,mBAAA,EAAqB,IAAA;AAAA,EACrB,uBAAA,EAAyB,IAAA;AAAA,EACzB,qBAAA,EAAuB,IAAA;AAAA,EACvB,aAAA,EAAe,MAAA;AAAA,EACf,kBAAA,EAAoB,MAAA;AAAA,EACpB,qBAAA,EAAuB,MAAA;AAAA,EACvB,cAAA,EAAgB,MAAA;AAAA,EAChB,kBAAA,EAAoB,MAAA;AAAA,EACpB,eAAA,EAAiB,MAAA;AAAA,EACjB,OAAA,EAAS;AACb","file":"chunk-AJOKUIQD.mjs","sourcesContent":["import type { TextEditorProps } from '@primeui/texteditor-types';\n\nexport const defaultTextEditorProps: TextEditorProps = {\n value: null,\n mode: null,\n placeholder: null,\n ariaLabel: undefined,\n ariaLabelledby: undefined,\n slashPlaceholder: null,\n checklistPlaceholder: null,\n allowedImageTypes: undefined,\n allowedDocumentTypes: undefined,\n imageMaxFileCount: null,\n imageMaxFileSize: null,\n documentMaxFileCount: null,\n documentMaxFileSize: null,\n navigator: false,\n markdown: false,\n valueChangeDebounce: null,\n minTableColumnWidth: null,\n defaultTableColumnWidth: null,\n defaultHighlightColor: null,\n uploadHandler: undefined,\n imageUploadHandler: undefined,\n documentUploadHandler: undefined,\n mentionHandler: undefined,\n mentionFilterField: undefined,\n mentionTemplate: undefined,\n plugins: undefined\n};\n"]}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { table_header, table_cell, table_row, table, check_list_item, check_list, list_item, ordered_list, bullet_list, document_upload_placeholder, image_upload_placeholder, mention, image, hard_break, horizontal_rule, code_block, blockquote, heading, text, paragraph, doc } from './chunk-F7BJWPT6.mjs';
|
|
2
|
+
import { sanitizeCssValue } from './chunk-7QCHSEN2.mjs';
|
|
3
|
+
import { sanitizeUrl } from './chunk-MNKMKFLQ.mjs';
|
|
4
|
+
import { __export } from './chunk-J5LGTIGS.mjs';
|
|
5
|
+
import { Schema } from 'prosemirror-model';
|
|
6
|
+
|
|
7
|
+
// src/schema/marks.ts
|
|
8
|
+
var marks_exports = {};
|
|
9
|
+
__export(marks_exports, {
|
|
10
|
+
bold: () => bold,
|
|
11
|
+
code: () => code,
|
|
12
|
+
italic: () => italic,
|
|
13
|
+
link: () => link,
|
|
14
|
+
strikethrough: () => strikethrough,
|
|
15
|
+
subscript: () => subscript,
|
|
16
|
+
superscript: () => superscript,
|
|
17
|
+
textStyle: () => textStyle,
|
|
18
|
+
underline: () => underline
|
|
19
|
+
});
|
|
20
|
+
var TARGETS = ["_blank", "_self", "_parent", "_top"];
|
|
21
|
+
var safeTarget = (t) => t && TARGETS.includes(t) ? t : "_blank";
|
|
22
|
+
var bold = {
|
|
23
|
+
parseDOM: [
|
|
24
|
+
{ tag: "strong" },
|
|
25
|
+
{ tag: "b", getAttrs: (node) => node.style.fontWeight !== "normal" && null },
|
|
26
|
+
{ style: "font-weight=bold" },
|
|
27
|
+
{ style: "font-weight", getAttrs: (value) => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null }
|
|
28
|
+
],
|
|
29
|
+
toDOM() {
|
|
30
|
+
return ["strong", 0];
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
var italic = {
|
|
34
|
+
parseDOM: [{ tag: "i" }, { tag: "em" }, { style: "font-style=italic" }],
|
|
35
|
+
toDOM() {
|
|
36
|
+
return ["em", 0];
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var underline = {
|
|
40
|
+
parseDOM: [{ tag: "u" }, { style: "text-decoration=underline" }],
|
|
41
|
+
toDOM() {
|
|
42
|
+
return ["u", 0];
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var strikethrough = {
|
|
46
|
+
parseDOM: [{ tag: "s" }, { tag: "del" }, { tag: "strike" }, { style: "text-decoration=line-through" }],
|
|
47
|
+
toDOM() {
|
|
48
|
+
return ["s", 0];
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var subscript = {
|
|
52
|
+
excludes: "superscript",
|
|
53
|
+
parseDOM: [{ tag: "sub" }],
|
|
54
|
+
toDOM() {
|
|
55
|
+
return ["sub", 0];
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
var superscript = {
|
|
59
|
+
excludes: "subscript",
|
|
60
|
+
parseDOM: [{ tag: "sup" }],
|
|
61
|
+
toDOM() {
|
|
62
|
+
return ["sup", 0];
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
var code = {
|
|
66
|
+
parseDOM: [{ tag: "code" }],
|
|
67
|
+
toDOM() {
|
|
68
|
+
return ["code", 0];
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var link = {
|
|
72
|
+
attrs: {
|
|
73
|
+
href: {},
|
|
74
|
+
target: { default: "_blank" }
|
|
75
|
+
},
|
|
76
|
+
inclusive: false,
|
|
77
|
+
parseDOM: [
|
|
78
|
+
{
|
|
79
|
+
tag: "a[href]",
|
|
80
|
+
getAttrs(node) {
|
|
81
|
+
const el = node;
|
|
82
|
+
const href = sanitizeUrl(el.getAttribute("href"));
|
|
83
|
+
if (href == null) return false;
|
|
84
|
+
return { href, target: safeTarget(el.getAttribute("target")) };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
toDOM(mark) {
|
|
89
|
+
const href = sanitizeUrl(mark.attrs.href);
|
|
90
|
+
return ["a", href == null ? { rel: "noopener noreferrer" } : { href, target: safeTarget(mark.attrs.target), rel: "noopener noreferrer" }, 0];
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
var textStyle = {
|
|
94
|
+
attrs: {
|
|
95
|
+
fontFamily: { default: null },
|
|
96
|
+
fontSize: { default: null },
|
|
97
|
+
color: { default: null },
|
|
98
|
+
backgroundColor: { default: null }
|
|
99
|
+
},
|
|
100
|
+
parseDOM: [
|
|
101
|
+
{
|
|
102
|
+
tag: "span",
|
|
103
|
+
getAttrs(node) {
|
|
104
|
+
const el = node;
|
|
105
|
+
const fontFamily = sanitizeCssValue(el.style.fontFamily);
|
|
106
|
+
const fontSize = sanitizeCssValue(el.style.fontSize);
|
|
107
|
+
const color = sanitizeCssValue(el.style.color);
|
|
108
|
+
const backgroundColor = sanitizeCssValue(el.style.backgroundColor);
|
|
109
|
+
if (!fontFamily && !fontSize && !color && !backgroundColor) return false;
|
|
110
|
+
return { fontFamily, fontSize, color, backgroundColor };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
toDOM(mark) {
|
|
115
|
+
const style = [];
|
|
116
|
+
const fontFamily = sanitizeCssValue(mark.attrs.fontFamily);
|
|
117
|
+
const fontSize = sanitizeCssValue(mark.attrs.fontSize);
|
|
118
|
+
const color = sanitizeCssValue(mark.attrs.color);
|
|
119
|
+
const backgroundColor = sanitizeCssValue(mark.attrs.backgroundColor);
|
|
120
|
+
if (fontFamily) style.push(`font-family: ${fontFamily}`);
|
|
121
|
+
if (fontSize) style.push(`font-size: ${fontSize}`);
|
|
122
|
+
if (color) style.push(`color: ${color}`);
|
|
123
|
+
if (backgroundColor) style.push(`background-color: ${backgroundColor}`);
|
|
124
|
+
return ["span", { style: style.join("; ") }, 0];
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// src/schema/index.ts
|
|
129
|
+
function extendNodeSpec(base, override) {
|
|
130
|
+
return {
|
|
131
|
+
...base,
|
|
132
|
+
...override,
|
|
133
|
+
attrs: { ...base.attrs, ...override.attrs }
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
var baseNodes = {
|
|
137
|
+
doc,
|
|
138
|
+
paragraph,
|
|
139
|
+
text,
|
|
140
|
+
heading,
|
|
141
|
+
blockquote,
|
|
142
|
+
code_block,
|
|
143
|
+
horizontal_rule,
|
|
144
|
+
hard_break,
|
|
145
|
+
image,
|
|
146
|
+
mention,
|
|
147
|
+
image_upload_placeholder,
|
|
148
|
+
document_upload_placeholder,
|
|
149
|
+
bullet_list,
|
|
150
|
+
ordered_list,
|
|
151
|
+
list_item,
|
|
152
|
+
check_list,
|
|
153
|
+
check_list_item,
|
|
154
|
+
table,
|
|
155
|
+
table_row,
|
|
156
|
+
table_cell,
|
|
157
|
+
table_header
|
|
158
|
+
};
|
|
159
|
+
var baseMarks = {
|
|
160
|
+
bold,
|
|
161
|
+
italic,
|
|
162
|
+
underline,
|
|
163
|
+
strikethrough,
|
|
164
|
+
subscript,
|
|
165
|
+
superscript,
|
|
166
|
+
code,
|
|
167
|
+
link,
|
|
168
|
+
textStyle
|
|
169
|
+
};
|
|
170
|
+
function warnOnOverride(kind, existing, incoming) {
|
|
171
|
+
if (!incoming || typeof console === "undefined") return;
|
|
172
|
+
for (const name of Object.keys(incoming)) {
|
|
173
|
+
if (name in existing) {
|
|
174
|
+
console.warn(`[PrimeUI TextEditor] schema ${kind} "${name}" is being overridden by a plugin extension. If this is intentional (e.g. extendNodeSpec), ignore; otherwise two extensions may be colliding.`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function createEditorSchema(extensions) {
|
|
179
|
+
if (!extensions || extensions.length === 0) return new Schema({ nodes: baseNodes, marks: baseMarks });
|
|
180
|
+
const extNodes = { ...baseNodes };
|
|
181
|
+
const extMarks = { ...baseMarks };
|
|
182
|
+
for (const ext of extensions) {
|
|
183
|
+
warnOnOverride("node", extNodes, ext.nodes);
|
|
184
|
+
warnOnOverride("mark", extMarks, ext.marks);
|
|
185
|
+
Object.assign(extNodes, ext.nodes);
|
|
186
|
+
Object.assign(extMarks, ext.marks);
|
|
187
|
+
}
|
|
188
|
+
return new Schema({ nodes: extNodes, marks: extMarks });
|
|
189
|
+
}
|
|
190
|
+
var _defaultSchema = null;
|
|
191
|
+
function getEditorSchema() {
|
|
192
|
+
return _defaultSchema ?? (_defaultSchema = createEditorSchema());
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export { baseMarks, baseNodes, createEditorSchema, extendNodeSpec, getEditorSchema, marks_exports };
|
|
196
|
+
//# sourceMappingURL=chunk-AUTGNC2Q.mjs.map
|
|
197
|
+
//# sourceMappingURL=chunk-AUTGNC2Q.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema/marks.ts","../src/schema/index.ts"],"names":[],"mappings":"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","file":"chunk-AUTGNC2Q.mjs","sourcesContent":["import type { MarkSpec } from 'prosemirror-model';\nimport { sanitizeUrl } from '../utils/url';\nimport { sanitizeCssValue } from '../utils/css';\n\nconst TARGETS = ['_blank', '_self', '_parent', '_top'];\nconst safeTarget = (t: string | null) => (t && TARGETS.includes(t) ? t : '_blank');\n\nexport const bold: MarkSpec = {\n parseDOM: [\n { tag: 'strong' },\n { tag: 'b', getAttrs: (node) => (node as HTMLElement).style.fontWeight !== 'normal' && null },\n { style: 'font-weight=bold' },\n { style: 'font-weight', getAttrs: (value) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value as string) && null }\n ],\n toDOM() {\n return ['strong', 0];\n }\n};\n\nexport const italic: MarkSpec = {\n parseDOM: [{ tag: 'i' }, { tag: 'em' }, { style: 'font-style=italic' }],\n toDOM() {\n return ['em', 0];\n }\n};\n\nexport const underline: MarkSpec = {\n parseDOM: [{ tag: 'u' }, { style: 'text-decoration=underline' }],\n toDOM() {\n return ['u', 0];\n }\n};\n\nexport const strikethrough: MarkSpec = {\n parseDOM: [{ tag: 's' }, { tag: 'del' }, { tag: 'strike' }, { style: 'text-decoration=line-through' }],\n toDOM() {\n return ['s', 0];\n }\n};\n\nexport const subscript: MarkSpec = {\n excludes: 'superscript',\n parseDOM: [{ tag: 'sub' }],\n toDOM() {\n return ['sub', 0];\n }\n};\n\nexport const superscript: MarkSpec = {\n excludes: 'subscript',\n parseDOM: [{ tag: 'sup' }],\n toDOM() {\n return ['sup', 0];\n }\n};\n\nexport const code: MarkSpec = {\n parseDOM: [{ tag: 'code' }],\n toDOM() {\n return ['code', 0];\n }\n};\n\nexport const link: MarkSpec = {\n attrs: {\n href: {},\n target: { default: '_blank' }\n },\n inclusive: false,\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs(node) {\n const el = node as HTMLAnchorElement;\n const href = sanitizeUrl(el.getAttribute('href'));\n\n // Drop the link mark (keep the text) when the href is unsafe.\n if (href == null) return false;\n\n return { href, target: safeTarget(el.getAttribute('target')) };\n }\n }\n ],\n toDOM(mark) {\n const href = sanitizeUrl(mark.attrs.href);\n\n return ['a', href == null ? { rel: 'noopener noreferrer' } : { href, target: safeTarget(mark.attrs.target), rel: 'noopener noreferrer' }, 0];\n }\n};\n\nexport const textStyle: MarkSpec = {\n attrs: {\n fontFamily: { default: null },\n fontSize: { default: null },\n color: { default: null },\n backgroundColor: { default: null }\n },\n parseDOM: [\n {\n tag: 'span',\n getAttrs(node) {\n const el = node as HTMLElement;\n // Sanitize at parse time so a dirty CSS value never enters the model.\n const fontFamily = sanitizeCssValue(el.style.fontFamily);\n const fontSize = sanitizeCssValue(el.style.fontSize);\n const color = sanitizeCssValue(el.style.color);\n const backgroundColor = sanitizeCssValue(el.style.backgroundColor);\n\n if (!fontFamily && !fontSize && !color && !backgroundColor) return false;\n\n return { fontFamily, fontSize, color, backgroundColor };\n }\n }\n ],\n toDOM(mark) {\n const style: string[] = [];\n const fontFamily = sanitizeCssValue(mark.attrs.fontFamily);\n const fontSize = sanitizeCssValue(mark.attrs.fontSize);\n const color = sanitizeCssValue(mark.attrs.color);\n const backgroundColor = sanitizeCssValue(mark.attrs.backgroundColor);\n\n if (fontFamily) style.push(`font-family: ${fontFamily}`);\n if (fontSize) style.push(`font-size: ${fontSize}`);\n if (color) style.push(`color: ${color}`);\n if (backgroundColor) style.push(`background-color: ${backgroundColor}`);\n\n return ['span', { style: style.join('; ') }, 0];\n }\n};\n","import { Schema, type NodeSpec, type MarkSpec } from 'prosemirror-model';\nimport * as nodes from './nodes';\nimport * as marks from './marks';\n\nexport { nodes, marks };\n\n/**\n * Derive a NodeSpec from a base one with shallow `attrs` merge — lets a plugin\n * enrich an existing node (e.g. add `id` to `heading`) without copying its spec.\n */\nexport function extendNodeSpec(base: NodeSpec, override: Partial<NodeSpec>): NodeSpec {\n return {\n ...base,\n ...override,\n attrs: { ...base.attrs, ...override.attrs }\n };\n}\n\nexport const baseNodes: Record<string, NodeSpec> = {\n doc: nodes.doc,\n paragraph: nodes.paragraph,\n text: nodes.text,\n heading: nodes.heading,\n blockquote: nodes.blockquote,\n code_block: nodes.code_block,\n horizontal_rule: nodes.horizontal_rule,\n hard_break: nodes.hard_break,\n image: nodes.image,\n mention: nodes.mention,\n image_upload_placeholder: nodes.image_upload_placeholder,\n document_upload_placeholder: nodes.document_upload_placeholder,\n bullet_list: nodes.bullet_list,\n ordered_list: nodes.ordered_list,\n list_item: nodes.list_item,\n check_list: nodes.check_list,\n check_list_item: nodes.check_list_item,\n table: nodes.table,\n table_row: nodes.table_row,\n table_cell: nodes.table_cell,\n table_header: nodes.table_header\n};\n\nexport const baseMarks: Record<string, MarkSpec> = {\n bold: marks.bold,\n italic: marks.italic,\n underline: marks.underline,\n strikethrough: marks.strikethrough,\n subscript: marks.subscript,\n superscript: marks.superscript,\n code: marks.code,\n link: marks.link,\n textStyle: marks.textStyle\n};\n\nexport interface SchemaExtension {\n nodes?: Record<string, NodeSpec>;\n marks?: Record<string, MarkSpec>;\n}\n\n// Surface a silent node/mark name collision between extensions (a legitimate\n// override via extendNodeSpec is fine; two plugins clobbering the same name is a bug).\nfunction warnOnOverride(kind: 'node' | 'mark', existing: Record<string, unknown>, incoming?: Record<string, unknown>) {\n if (!incoming || typeof console === 'undefined') return;\n\n for (const name of Object.keys(incoming)) {\n if (name in existing) {\n // eslint-disable-next-line no-console\n console.warn(`[PrimeUI TextEditor] schema ${kind} \"${name}\" is being overridden by a plugin extension. If this is intentional (e.g. extendNodeSpec), ignore; otherwise two extensions may be colliding.`);\n }\n }\n}\n\n// Builds a Schema from the base specs plus any extension-contributed nodes/marks.\nexport function createEditorSchema(extensions?: SchemaExtension[]): Schema {\n if (!extensions || extensions.length === 0) return new Schema({ nodes: baseNodes, marks: baseMarks });\n\n const extNodes = { ...baseNodes };\n const extMarks = { ...baseMarks };\n\n for (const ext of extensions) {\n warnOnOverride('node', extNodes, ext.nodes);\n warnOnOverride('mark', extMarks, ext.marks);\n Object.assign(extNodes, ext.nodes);\n Object.assign(extMarks, ext.marks);\n }\n\n return new Schema({ nodes: extNodes, marks: extMarks });\n}\n\nlet _defaultSchema: Schema | null = null;\n\n// Lazily-built, memoized default schema. Lazy so importing this module has no\n// side effect (no eager `new Schema()`), keeping `sideEffects:false` honest.\nexport function getEditorSchema(): Schema {\n return (_defaultSchema ??= createEditorSchema());\n}\n"]}
|