@tiptap/core 2.11.7 → 3.0.0-beta.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 +21 -0
- package/README.md +5 -1
- package/dist/index.cjs +5047 -5070
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3326 -0
- package/dist/index.d.ts +3326 -25
- package/dist/index.js +4931 -4976
- package/dist/index.js.map +1 -1
- package/dist/jsx-runtime/jsx-runtime.cjs +56 -0
- package/dist/jsx-runtime/jsx-runtime.cjs.map +1 -0
- package/dist/jsx-runtime/jsx-runtime.d.cts +22 -0
- package/dist/jsx-runtime/jsx-runtime.d.ts +22 -0
- package/dist/jsx-runtime/jsx-runtime.js +26 -0
- package/dist/jsx-runtime/jsx-runtime.js.map +1 -0
- package/jsx-runtime/index.cjs +1 -0
- package/jsx-runtime/index.d.cts +1 -0
- package/jsx-runtime/index.d.ts +1 -0
- package/jsx-runtime/index.js +1 -0
- package/package.json +28 -9
- package/src/CommandManager.ts +4 -11
- package/src/Editor.ts +219 -103
- package/src/EventEmitter.ts +7 -10
- package/src/Extendable.ts +484 -0
- package/src/Extension.ts +17 -492
- package/src/ExtensionManager.ts +88 -140
- package/src/InputRule.ts +40 -51
- package/src/Mark.ts +146 -623
- package/src/MarkView.ts +66 -0
- package/src/Node.ts +332 -825
- package/src/NodePos.ts +3 -5
- package/src/NodeView.ts +13 -23
- package/src/PasteRule.ts +46 -56
- package/src/Tracker.ts +8 -10
- package/src/commands/blur.ts +15 -13
- package/src/commands/clearContent.ts +13 -6
- package/src/commands/clearNodes.ts +33 -31
- package/src/commands/command.ts +2 -2
- package/src/commands/createParagraphNear.ts +6 -4
- package/src/commands/cut.ts +13 -11
- package/src/commands/deleteCurrentNode.ts +24 -22
- package/src/commands/deleteNode.ts +20 -18
- package/src/commands/deleteRange.ts +11 -9
- package/src/commands/deleteSelection.ts +6 -4
- package/src/commands/enter.ts +7 -5
- package/src/commands/exitCode.ts +6 -4
- package/src/commands/extendMarkRange.ts +16 -14
- package/src/commands/first.ts +3 -5
- package/src/commands/focus.ts +50 -53
- package/src/commands/forEach.ts +3 -3
- package/src/commands/insertContent.ts +14 -16
- package/src/commands/insertContentAt.ts +111 -95
- package/src/commands/join.ts +21 -13
- package/src/commands/joinItemBackward.ts +17 -19
- package/src/commands/joinItemForward.ts +17 -19
- package/src/commands/joinTextblockBackward.ts +6 -4
- package/src/commands/joinTextblockForward.ts +6 -4
- package/src/commands/keyboardShortcut.ts +30 -35
- package/src/commands/lift.ts +12 -10
- package/src/commands/liftEmptyBlock.ts +7 -5
- package/src/commands/liftListItem.ts +8 -6
- package/src/commands/newlineInCode.ts +6 -4
- package/src/commands/resetAttributes.ts +38 -43
- package/src/commands/scrollIntoView.ts +10 -8
- package/src/commands/selectAll.ts +11 -9
- package/src/commands/selectNodeBackward.ts +6 -4
- package/src/commands/selectNodeForward.ts +6 -4
- package/src/commands/selectParentNode.ts +6 -4
- package/src/commands/selectTextblockEnd.ts +6 -4
- package/src/commands/selectTextblockStart.ts +6 -4
- package/src/commands/setContent.ts +39 -38
- package/src/commands/setMark.ts +58 -60
- package/src/commands/setMeta.ts +8 -6
- package/src/commands/setNode.ts +34 -32
- package/src/commands/setNodeSelection.ts +12 -10
- package/src/commands/setTextSelection.ts +16 -14
- package/src/commands/sinkListItem.ts +8 -6
- package/src/commands/splitBlock.ts +70 -78
- package/src/commands/splitListItem.ts +95 -107
- package/src/commands/toggleList.ts +76 -74
- package/src/commands/toggleMark.ts +13 -11
- package/src/commands/toggleNode.ts +20 -18
- package/src/commands/toggleWrap.ts +12 -10
- package/src/commands/undoInputRule.ts +32 -30
- package/src/commands/unsetAllMarks.ts +17 -15
- package/src/commands/unsetMark.ts +29 -27
- package/src/commands/updateAttributes.ts +94 -102
- package/src/commands/wrapIn.ts +8 -6
- package/src/commands/wrapInList.ts +8 -6
- package/src/extensions/clipboardTextSerializer.ts +2 -4
- package/src/extensions/delete.ts +89 -0
- package/src/extensions/focusEvents.ts +2 -6
- package/src/extensions/index.ts +1 -0
- package/src/extensions/keymap.ts +54 -50
- package/src/extensions/paste.ts +0 -1
- package/src/extensions/tabindex.ts +1 -1
- package/src/helpers/combineTransactionSteps.ts +3 -6
- package/src/helpers/createChainableState.ts +2 -5
- package/src/helpers/createDocument.ts +2 -4
- package/src/helpers/createNodeFromContent.ts +7 -12
- package/src/helpers/defaultBlockAt.ts +1 -1
- package/src/helpers/findChildren.ts +2 -2
- package/src/helpers/findChildrenInRange.ts +3 -7
- package/src/helpers/findParentNode.ts +5 -3
- package/src/helpers/findParentNodeClosestToPos.ts +2 -2
- package/src/helpers/flattenExtensions.ts +30 -0
- package/src/helpers/generateHTML.ts +1 -1
- package/src/helpers/generateJSON.ts +1 -1
- package/src/helpers/generateText.ts +1 -1
- package/src/helpers/getAttributes.ts +3 -6
- package/src/helpers/getAttributesFromExtensions.ts +29 -38
- package/src/helpers/getChangedRanges.ts +15 -13
- package/src/helpers/getDebugJSON.ts +2 -2
- package/src/helpers/getExtensionField.ts +12 -12
- package/src/helpers/getHTMLFromFragment.ts +2 -1
- package/src/helpers/getMarkAttributes.ts +3 -6
- package/src/helpers/getMarkRange.ts +7 -17
- package/src/helpers/getMarkType.ts +2 -4
- package/src/helpers/getMarksBetween.ts +2 -2
- package/src/helpers/getNodeAtPosition.ts +2 -2
- package/src/helpers/getNodeAttributes.ts +3 -6
- package/src/helpers/getNodeType.ts +2 -4
- package/src/helpers/getRenderedAttributes.ts +3 -5
- package/src/helpers/getSchema.ts +5 -5
- package/src/helpers/getSchemaByResolvedExtensions.ts +47 -78
- package/src/helpers/getSchemaTypeByName.ts +1 -1
- package/src/helpers/getSchemaTypeNameByName.ts +1 -1
- package/src/helpers/getSplittedAttributes.ts +5 -5
- package/src/helpers/getText.ts +2 -2
- package/src/helpers/getTextBetween.ts +2 -2
- package/src/helpers/getTextContentFromNodes.ts +9 -12
- package/src/helpers/getTextSerializersFromSchema.ts +2 -2
- package/src/helpers/index.ts +3 -0
- package/src/helpers/injectExtensionAttributesToParseRule.ts +3 -3
- package/src/helpers/isActive.ts +2 -6
- package/src/helpers/isAtEndOfNode.ts +1 -1
- package/src/helpers/isAtStartOfNode.ts +1 -1
- package/src/helpers/isExtensionRulesEnabled.ts +2 -4
- package/src/helpers/isList.ts +2 -2
- package/src/helpers/isMarkActive.ts +3 -3
- package/src/helpers/isNodeActive.ts +3 -3
- package/src/helpers/isNodeEmpty.ts +3 -3
- package/src/helpers/posToDOMRect.ts +1 -1
- package/src/helpers/resolveExtensions.ts +25 -0
- package/src/helpers/resolveFocusPosition.ts +5 -16
- package/src/helpers/rewriteUnknownContent.ts +25 -24
- package/src/helpers/selectionToInsertionEnd.ts +2 -1
- package/src/helpers/sortExtensions.ts +26 -0
- package/src/helpers/splitExtensions.ts +4 -4
- package/src/index.ts +3 -7
- package/src/inputRules/markInputRule.ts +5 -8
- package/src/inputRules/nodeInputRule.ts +6 -12
- package/src/inputRules/textInputRule.ts +3 -5
- package/src/inputRules/textblockTypeInputRule.ts +6 -11
- package/src/inputRules/wrappingInputRule.ts +18 -23
- package/src/jsx-runtime.ts +64 -0
- package/src/pasteRules/markPasteRule.ts +5 -6
- package/src/pasteRules/nodePasteRule.ts +6 -11
- package/src/pasteRules/textPasteRule.ts +3 -5
- package/src/style.ts +0 -4
- package/src/types.ts +534 -179
- package/src/utilities/callOrReturn.ts +1 -1
- package/src/utilities/createStyleTag.ts +3 -1
- package/src/utilities/deleteProps.ts +7 -11
- package/src/utilities/elementFromString.ts +3 -0
- package/src/utilities/findDuplicates.ts +4 -1
- package/src/utilities/index.ts +1 -0
- package/src/utilities/isMacOS.ts +1 -3
- package/src/utilities/isiOS.ts +5 -10
- package/src/utilities/mergeAttributes.ts +16 -6
- package/src/utilities/removeDuplicates.ts +1 -3
- package/dist/CommandManager.d.ts +0 -21
- package/dist/CommandManager.d.ts.map +0 -1
- package/dist/Editor.d.ts +0 -166
- package/dist/Editor.d.ts.map +0 -1
- package/dist/EventEmitter.d.ts +0 -13
- package/dist/EventEmitter.d.ts.map +0 -1
- package/dist/Extension.d.ts +0 -345
- package/dist/Extension.d.ts.map +0 -1
- package/dist/ExtensionManager.d.ts +0 -57
- package/dist/ExtensionManager.d.ts.map +0 -1
- package/dist/InputRule.d.ts +0 -43
- package/dist/InputRule.d.ts.map +0 -1
- package/dist/Mark.d.ts +0 -453
- package/dist/Mark.d.ts.map +0 -1
- package/dist/Node.d.ts +0 -629
- package/dist/Node.d.ts.map +0 -1
- package/dist/NodePos.d.ts +0 -45
- package/dist/NodePos.d.ts.map +0 -1
- package/dist/NodeView.d.ts +0 -41
- package/dist/NodeView.d.ts.map +0 -1
- package/dist/PasteRule.d.ts +0 -51
- package/dist/PasteRule.d.ts.map +0 -1
- package/dist/Tracker.d.ts +0 -12
- package/dist/Tracker.d.ts.map +0 -1
- package/dist/commands/blur.d.ts +0 -14
- package/dist/commands/blur.d.ts.map +0 -1
- package/dist/commands/clearContent.d.ts +0 -15
- package/dist/commands/clearContent.d.ts.map +0 -1
- package/dist/commands/clearNodes.d.ts +0 -14
- package/dist/commands/clearNodes.d.ts.map +0 -1
- package/dist/commands/command.d.ts +0 -19
- package/dist/commands/command.d.ts.map +0 -1
- package/dist/commands/createParagraphNear.d.ts +0 -14
- package/dist/commands/createParagraphNear.d.ts.map +0 -1
- package/dist/commands/cut.d.ts +0 -21
- package/dist/commands/cut.d.ts.map +0 -1
- package/dist/commands/deleteCurrentNode.d.ts +0 -14
- package/dist/commands/deleteCurrentNode.d.ts.map +0 -1
- package/dist/commands/deleteNode.d.ts +0 -16
- package/dist/commands/deleteNode.d.ts.map +0 -1
- package/dist/commands/deleteRange.d.ts +0 -15
- package/dist/commands/deleteRange.d.ts.map +0 -1
- package/dist/commands/deleteSelection.d.ts +0 -14
- package/dist/commands/deleteSelection.d.ts.map +0 -1
- package/dist/commands/enter.d.ts +0 -14
- package/dist/commands/enter.d.ts.map +0 -1
- package/dist/commands/exitCode.d.ts +0 -14
- package/dist/commands/exitCode.d.ts.map +0 -1
- package/dist/commands/extendMarkRange.d.ts +0 -26
- package/dist/commands/extendMarkRange.d.ts.map +0 -1
- package/dist/commands/first.d.ts +0 -15
- package/dist/commands/first.d.ts.map +0 -1
- package/dist/commands/focus.d.ts +0 -28
- package/dist/commands/focus.d.ts.map +0 -1
- package/dist/commands/forEach.d.ts +0 -15
- package/dist/commands/forEach.d.ts.map +0 -1
- package/dist/commands/index.d.ts +0 -56
- package/dist/commands/index.d.ts.map +0 -1
- package/dist/commands/insertContent.d.ts +0 -35
- package/dist/commands/insertContent.d.ts.map +0 -1
- package/dist/commands/insertContentAt.d.ts +0 -48
- package/dist/commands/insertContentAt.d.ts.map +0 -1
- package/dist/commands/join.d.ts +0 -42
- package/dist/commands/join.d.ts.map +0 -1
- package/dist/commands/joinItemBackward.d.ts +0 -14
- package/dist/commands/joinItemBackward.d.ts.map +0 -1
- package/dist/commands/joinItemForward.d.ts +0 -14
- package/dist/commands/joinItemForward.d.ts.map +0 -1
- package/dist/commands/joinTextblockBackward.d.ts +0 -13
- package/dist/commands/joinTextblockBackward.d.ts.map +0 -1
- package/dist/commands/joinTextblockForward.d.ts +0 -13
- package/dist/commands/joinTextblockForward.d.ts.map +0 -1
- package/dist/commands/keyboardShortcut.d.ts +0 -15
- package/dist/commands/keyboardShortcut.d.ts.map +0 -1
- package/dist/commands/lift.d.ts +0 -18
- package/dist/commands/lift.d.ts.map +0 -1
- package/dist/commands/liftEmptyBlock.d.ts +0 -14
- package/dist/commands/liftEmptyBlock.d.ts.map +0 -1
- package/dist/commands/liftListItem.d.ts +0 -16
- package/dist/commands/liftListItem.d.ts.map +0 -1
- package/dist/commands/newlineInCode.d.ts +0 -14
- package/dist/commands/newlineInCode.d.ts.map +0 -1
- package/dist/commands/resetAttributes.d.ts +0 -17
- package/dist/commands/resetAttributes.d.ts.map +0 -1
- package/dist/commands/scrollIntoView.d.ts +0 -14
- package/dist/commands/scrollIntoView.d.ts.map +0 -1
- package/dist/commands/selectAll.d.ts +0 -14
- package/dist/commands/selectAll.d.ts.map +0 -1
- package/dist/commands/selectNodeBackward.d.ts +0 -14
- package/dist/commands/selectNodeBackward.d.ts.map +0 -1
- package/dist/commands/selectNodeForward.d.ts +0 -14
- package/dist/commands/selectNodeForward.d.ts.map +0 -1
- package/dist/commands/selectParentNode.d.ts +0 -14
- package/dist/commands/selectParentNode.d.ts.map +0 -1
- package/dist/commands/selectTextblockEnd.d.ts +0 -14
- package/dist/commands/selectTextblockEnd.d.ts.map +0 -1
- package/dist/commands/selectTextblockStart.d.ts +0 -14
- package/dist/commands/selectTextblockStart.d.ts.map +0 -1
- package/dist/commands/setContent.d.ts +0 -41
- package/dist/commands/setContent.d.ts.map +0 -1
- package/dist/commands/setMark.d.ts +0 -16
- package/dist/commands/setMark.d.ts.map +0 -1
- package/dist/commands/setMeta.d.ts +0 -17
- package/dist/commands/setMeta.d.ts.map +0 -1
- package/dist/commands/setNode.d.ts +0 -17
- package/dist/commands/setNode.d.ts.map +0 -1
- package/dist/commands/setNodeSelection.d.ts +0 -15
- package/dist/commands/setNodeSelection.d.ts.map +0 -1
- package/dist/commands/setTextSelection.d.ts +0 -15
- package/dist/commands/setTextSelection.d.ts.map +0 -1
- package/dist/commands/sinkListItem.d.ts +0 -16
- package/dist/commands/sinkListItem.d.ts.map +0 -1
- package/dist/commands/splitBlock.d.ts +0 -18
- package/dist/commands/splitBlock.d.ts.map +0 -1
- package/dist/commands/splitListItem.d.ts +0 -17
- package/dist/commands/splitListItem.d.ts.map +0 -1
- package/dist/commands/toggleList.d.ts +0 -19
- package/dist/commands/toggleList.d.ts.map +0 -1
- package/dist/commands/toggleMark.d.ts +0 -31
- package/dist/commands/toggleMark.d.ts.map +0 -1
- package/dist/commands/toggleNode.d.ts +0 -18
- package/dist/commands/toggleNode.d.ts.map +0 -1
- package/dist/commands/toggleWrap.d.ts +0 -17
- package/dist/commands/toggleWrap.d.ts.map +0 -1
- package/dist/commands/undoInputRule.d.ts +0 -14
- package/dist/commands/undoInputRule.d.ts.map +0 -1
- package/dist/commands/unsetAllMarks.d.ts +0 -14
- package/dist/commands/unsetAllMarks.d.ts.map +0 -1
- package/dist/commands/unsetMark.d.ts +0 -26
- package/dist/commands/unsetMark.d.ts.map +0 -1
- package/dist/commands/updateAttributes.d.ts +0 -25
- package/dist/commands/updateAttributes.d.ts.map +0 -1
- package/dist/commands/wrapIn.d.ts +0 -17
- package/dist/commands/wrapIn.d.ts.map +0 -1
- package/dist/commands/wrapInList.d.ts +0 -17
- package/dist/commands/wrapInList.d.ts.map +0 -1
- package/dist/extensions/clipboardTextSerializer.d.ts +0 -6
- package/dist/extensions/clipboardTextSerializer.d.ts.map +0 -1
- package/dist/extensions/commands.d.ts +0 -4
- package/dist/extensions/commands.d.ts.map +0 -1
- package/dist/extensions/drop.d.ts +0 -3
- package/dist/extensions/drop.d.ts.map +0 -1
- package/dist/extensions/editable.d.ts +0 -3
- package/dist/extensions/editable.d.ts.map +0 -1
- package/dist/extensions/focusEvents.d.ts +0 -5
- package/dist/extensions/focusEvents.d.ts.map +0 -1
- package/dist/extensions/index.d.ts +0 -9
- package/dist/extensions/index.d.ts.map +0 -1
- package/dist/extensions/keymap.d.ts +0 -3
- package/dist/extensions/keymap.d.ts.map +0 -1
- package/dist/extensions/paste.d.ts +0 -3
- package/dist/extensions/paste.d.ts.map +0 -1
- package/dist/extensions/tabindex.d.ts +0 -3
- package/dist/extensions/tabindex.d.ts.map +0 -1
- package/dist/helpers/combineTransactionSteps.d.ts +0 -11
- package/dist/helpers/combineTransactionSteps.d.ts.map +0 -1
- package/dist/helpers/createChainableState.d.ts +0 -11
- package/dist/helpers/createChainableState.d.ts.map +0 -1
- package/dist/helpers/createDocument.d.ts +0 -13
- package/dist/helpers/createDocument.d.ts.map +0 -1
- package/dist/helpers/createNodeFromContent.d.ts +0 -16
- package/dist/helpers/createNodeFromContent.d.ts.map +0 -1
- package/dist/helpers/defaultBlockAt.d.ts +0 -8
- package/dist/helpers/defaultBlockAt.d.ts.map +0 -1
- package/dist/helpers/findChildren.d.ts +0 -10
- package/dist/helpers/findChildren.d.ts.map +0 -1
- package/dist/helpers/findChildrenInRange.d.ts +0 -11
- package/dist/helpers/findChildrenInRange.d.ts.map +0 -1
- package/dist/helpers/findParentNode.d.ts +0 -17
- package/dist/helpers/findParentNode.d.ts.map +0 -1
- package/dist/helpers/findParentNodeClosestToPos.d.ts +0 -18
- package/dist/helpers/findParentNodeClosestToPos.d.ts.map +0 -1
- package/dist/helpers/generateHTML.d.ts +0 -9
- package/dist/helpers/generateHTML.d.ts.map +0 -1
- package/dist/helpers/generateJSON.d.ts +0 -9
- package/dist/helpers/generateJSON.d.ts.map +0 -1
- package/dist/helpers/generateText.d.ts +0 -13
- package/dist/helpers/generateText.d.ts.map +0 -1
- package/dist/helpers/getAttributes.d.ts +0 -10
- package/dist/helpers/getAttributes.d.ts.map +0 -1
- package/dist/helpers/getAttributesFromExtensions.d.ts +0 -7
- package/dist/helpers/getAttributesFromExtensions.d.ts.map +0 -1
- package/dist/helpers/getChangedRanges.d.ts +0 -12
- package/dist/helpers/getChangedRanges.d.ts.map +0 -1
- package/dist/helpers/getDebugJSON.d.ts +0 -9
- package/dist/helpers/getDebugJSON.d.ts.map +0 -1
- package/dist/helpers/getExtensionField.d.ts +0 -10
- package/dist/helpers/getExtensionField.d.ts.map +0 -1
- package/dist/helpers/getHTMLFromFragment.d.ts +0 -3
- package/dist/helpers/getHTMLFromFragment.d.ts.map +0 -1
- package/dist/helpers/getMarkAttributes.d.ts +0 -4
- package/dist/helpers/getMarkAttributes.d.ts.map +0 -1
- package/dist/helpers/getMarkRange.d.ts +0 -20
- package/dist/helpers/getMarkRange.d.ts.map +0 -1
- package/dist/helpers/getMarkType.d.ts +0 -3
- package/dist/helpers/getMarkType.d.ts.map +0 -1
- package/dist/helpers/getMarksBetween.d.ts +0 -4
- package/dist/helpers/getMarksBetween.d.ts.map +0 -1
- package/dist/helpers/getNodeAtPosition.d.ts +0 -12
- package/dist/helpers/getNodeAtPosition.d.ts.map +0 -1
- package/dist/helpers/getNodeAttributes.d.ts +0 -4
- package/dist/helpers/getNodeAttributes.d.ts.map +0 -1
- package/dist/helpers/getNodeType.d.ts +0 -3
- package/dist/helpers/getNodeType.d.ts.map +0 -1
- package/dist/helpers/getRenderedAttributes.d.ts +0 -4
- package/dist/helpers/getRenderedAttributes.d.ts.map +0 -1
- package/dist/helpers/getSchema.d.ts +0 -5
- package/dist/helpers/getSchema.d.ts.map +0 -1
- package/dist/helpers/getSchemaByResolvedExtensions.d.ts +0 -11
- package/dist/helpers/getSchemaByResolvedExtensions.d.ts.map +0 -1
- package/dist/helpers/getSchemaTypeByName.d.ts +0 -9
- package/dist/helpers/getSchemaTypeByName.d.ts.map +0 -1
- package/dist/helpers/getSchemaTypeNameByName.d.ts +0 -9
- package/dist/helpers/getSchemaTypeNameByName.d.ts.map +0 -1
- package/dist/helpers/getSplittedAttributes.d.ts +0 -10
- package/dist/helpers/getSplittedAttributes.d.ts.map +0 -1
- package/dist/helpers/getText.d.ts +0 -16
- package/dist/helpers/getText.d.ts.map +0 -1
- package/dist/helpers/getTextBetween.d.ts +0 -15
- package/dist/helpers/getTextBetween.d.ts.map +0 -1
- package/dist/helpers/getTextContentFromNodes.d.ts +0 -9
- package/dist/helpers/getTextContentFromNodes.d.ts.map +0 -1
- package/dist/helpers/getTextSerializersFromSchema.d.ts +0 -9
- package/dist/helpers/getTextSerializersFromSchema.d.ts.map +0 -1
- package/dist/helpers/index.d.ts +0 -52
- package/dist/helpers/index.d.ts.map +0 -1
- package/dist/helpers/injectExtensionAttributesToParseRule.d.ts +0 -10
- package/dist/helpers/injectExtensionAttributesToParseRule.d.ts.map +0 -1
- package/dist/helpers/isActive.d.ts +0 -3
- package/dist/helpers/isActive.d.ts.map +0 -1
- package/dist/helpers/isAtEndOfNode.d.ts +0 -3
- package/dist/helpers/isAtEndOfNode.d.ts.map +0 -1
- package/dist/helpers/isAtStartOfNode.d.ts +0 -3
- package/dist/helpers/isAtStartOfNode.d.ts.map +0 -1
- package/dist/helpers/isExtensionRulesEnabled.d.ts +0 -3
- package/dist/helpers/isExtensionRulesEnabled.d.ts.map +0 -1
- package/dist/helpers/isList.d.ts +0 -3
- package/dist/helpers/isList.d.ts.map +0 -1
- package/dist/helpers/isMarkActive.d.ts +0 -4
- package/dist/helpers/isMarkActive.d.ts.map +0 -1
- package/dist/helpers/isNodeActive.d.ts +0 -4
- package/dist/helpers/isNodeActive.d.ts.map +0 -1
- package/dist/helpers/isNodeEmpty.d.ts +0 -15
- package/dist/helpers/isNodeEmpty.d.ts.map +0 -1
- package/dist/helpers/isNodeSelection.d.ts +0 -3
- package/dist/helpers/isNodeSelection.d.ts.map +0 -1
- package/dist/helpers/isTextSelection.d.ts +0 -3
- package/dist/helpers/isTextSelection.d.ts.map +0 -1
- package/dist/helpers/posToDOMRect.d.ts +0 -3
- package/dist/helpers/posToDOMRect.d.ts.map +0 -1
- package/dist/helpers/resolveFocusPosition.d.ts +0 -5
- package/dist/helpers/resolveFocusPosition.d.ts.map +0 -1
- package/dist/helpers/rewriteUnknownContent.d.ts +0 -46
- package/dist/helpers/rewriteUnknownContent.d.ts.map +0 -1
- package/dist/helpers/selectionToInsertionEnd.d.ts +0 -3
- package/dist/helpers/selectionToInsertionEnd.d.ts.map +0 -1
- package/dist/helpers/splitExtensions.d.ts +0 -10
- package/dist/helpers/splitExtensions.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.umd.js +0 -5525
- package/dist/index.umd.js.map +0 -1
- package/dist/inputRules/index.d.ts +0 -6
- package/dist/inputRules/index.d.ts.map +0 -1
- package/dist/inputRules/markInputRule.d.ts +0 -14
- package/dist/inputRules/markInputRule.d.ts.map +0 -1
- package/dist/inputRules/nodeInputRule.d.ts +0 -24
- package/dist/inputRules/nodeInputRule.d.ts.map +0 -1
- package/dist/inputRules/textInputRule.d.ts +0 -11
- package/dist/inputRules/textInputRule.d.ts.map +0 -1
- package/dist/inputRules/textblockTypeInputRule.d.ts +0 -16
- package/dist/inputRules/textblockTypeInputRule.d.ts.map +0 -1
- package/dist/inputRules/wrappingInputRule.d.ts +0 -29
- package/dist/inputRules/wrappingInputRule.d.ts.map +0 -1
- package/dist/pasteRules/index.d.ts +0 -4
- package/dist/pasteRules/index.d.ts.map +0 -1
- package/dist/pasteRules/markPasteRule.d.ts +0 -14
- package/dist/pasteRules/markPasteRule.d.ts.map +0 -1
- package/dist/pasteRules/nodePasteRule.d.ts +0 -15
- package/dist/pasteRules/nodePasteRule.d.ts.map +0 -1
- package/dist/pasteRules/textPasteRule.d.ts +0 -11
- package/dist/pasteRules/textPasteRule.d.ts.map +0 -1
- package/dist/style.d.ts +0 -2
- package/dist/style.d.ts.map +0 -1
- package/dist/types.d.ts +0 -323
- package/dist/types.d.ts.map +0 -1
- package/dist/utilities/callOrReturn.d.ts +0 -10
- package/dist/utilities/callOrReturn.d.ts.map +0 -1
- package/dist/utilities/createStyleTag.d.ts +0 -2
- package/dist/utilities/createStyleTag.d.ts.map +0 -1
- package/dist/utilities/deleteProps.d.ts +0 -7
- package/dist/utilities/deleteProps.d.ts.map +0 -1
- package/dist/utilities/elementFromString.d.ts +0 -2
- package/dist/utilities/elementFromString.d.ts.map +0 -1
- package/dist/utilities/escapeForRegEx.d.ts +0 -2
- package/dist/utilities/escapeForRegEx.d.ts.map +0 -1
- package/dist/utilities/findDuplicates.d.ts +0 -2
- package/dist/utilities/findDuplicates.d.ts.map +0 -1
- package/dist/utilities/fromString.d.ts +0 -2
- package/dist/utilities/fromString.d.ts.map +0 -1
- package/dist/utilities/index.d.ts +0 -21
- package/dist/utilities/index.d.ts.map +0 -1
- package/dist/utilities/isAndroid.d.ts +0 -2
- package/dist/utilities/isAndroid.d.ts.map +0 -1
- package/dist/utilities/isEmptyObject.d.ts +0 -2
- package/dist/utilities/isEmptyObject.d.ts.map +0 -1
- package/dist/utilities/isFunction.d.ts +0 -2
- package/dist/utilities/isFunction.d.ts.map +0 -1
- package/dist/utilities/isMacOS.d.ts +0 -2
- package/dist/utilities/isMacOS.d.ts.map +0 -1
- package/dist/utilities/isNumber.d.ts +0 -2
- package/dist/utilities/isNumber.d.ts.map +0 -1
- package/dist/utilities/isPlainObject.d.ts +0 -2
- package/dist/utilities/isPlainObject.d.ts.map +0 -1
- package/dist/utilities/isRegExp.d.ts +0 -2
- package/dist/utilities/isRegExp.d.ts.map +0 -1
- package/dist/utilities/isString.d.ts +0 -2
- package/dist/utilities/isString.d.ts.map +0 -1
- package/dist/utilities/isiOS.d.ts +0 -2
- package/dist/utilities/isiOS.d.ts.map +0 -1
- package/dist/utilities/mergeAttributes.d.ts +0 -2
- package/dist/utilities/mergeAttributes.d.ts.map +0 -1
- package/dist/utilities/mergeDeep.d.ts +0 -2
- package/dist/utilities/mergeDeep.d.ts.map +0 -1
- package/dist/utilities/minMax.d.ts +0 -2
- package/dist/utilities/minMax.d.ts.map +0 -1
- package/dist/utilities/objectIncludes.d.ts +0 -9
- package/dist/utilities/objectIncludes.d.ts.map +0 -1
- package/dist/utilities/removeDuplicates.d.ts +0 -9
- package/dist/utilities/removeDuplicates.d.ts.map +0 -1
package/src/Editor.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
NodeType,
|
|
6
|
-
Schema,
|
|
7
|
-
} from '@tiptap/pm/model'
|
|
8
|
-
import {
|
|
9
|
-
EditorState, Plugin, PluginKey, Transaction,
|
|
10
|
-
} from '@tiptap/pm/state'
|
|
2
|
+
import type { MarkType, Node as ProseMirrorNode, NodeType, Schema } from '@tiptap/pm/model'
|
|
3
|
+
import type { Plugin, PluginKey, Transaction } from '@tiptap/pm/state'
|
|
4
|
+
import { EditorState } from '@tiptap/pm/state'
|
|
11
5
|
import { EditorView } from '@tiptap/pm/view'
|
|
12
6
|
|
|
13
7
|
import { CommandManager } from './CommandManager.js'
|
|
14
8
|
import { EventEmitter } from './EventEmitter.js'
|
|
15
9
|
import { ExtensionManager } from './ExtensionManager.js'
|
|
16
10
|
import {
|
|
17
|
-
ClipboardTextSerializer,
|
|
11
|
+
ClipboardTextSerializer,
|
|
12
|
+
Commands,
|
|
13
|
+
Delete,
|
|
14
|
+
Drop,
|
|
15
|
+
Editable,
|
|
16
|
+
FocusEvents,
|
|
17
|
+
Keymap,
|
|
18
|
+
Paste,
|
|
18
19
|
Tabindex,
|
|
19
20
|
} from './extensions/index.js'
|
|
20
21
|
import { createDocument } from './helpers/createDocument.js'
|
|
@@ -25,16 +26,19 @@ import { getTextSerializersFromSchema } from './helpers/getTextSerializersFromSc
|
|
|
25
26
|
import { isActive } from './helpers/isActive.js'
|
|
26
27
|
import { isNodeEmpty } from './helpers/isNodeEmpty.js'
|
|
27
28
|
import { resolveFocusPosition } from './helpers/resolveFocusPosition.js'
|
|
29
|
+
import type { Storage } from './index.js'
|
|
28
30
|
import { NodePos } from './NodePos.js'
|
|
29
31
|
import { style } from './style.js'
|
|
30
|
-
import {
|
|
32
|
+
import type {
|
|
31
33
|
CanCommands,
|
|
32
34
|
ChainedCommands,
|
|
35
|
+
DocumentType,
|
|
33
36
|
EditorEvents,
|
|
34
37
|
EditorOptions,
|
|
35
|
-
|
|
38
|
+
NodeType as TNodeType,
|
|
36
39
|
SingleCommands,
|
|
37
40
|
TextSerializer,
|
|
41
|
+
TextType as TTextType,
|
|
38
42
|
} from './types.js'
|
|
39
43
|
import { createStyleTag } from './utilities/createStyleTag.js'
|
|
40
44
|
import { isFunction } from './utilities/isFunction.js'
|
|
@@ -51,23 +55,30 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
51
55
|
|
|
52
56
|
public extensionManager!: ExtensionManager
|
|
53
57
|
|
|
54
|
-
private css
|
|
58
|
+
private css: HTMLStyleElement | null = null
|
|
55
59
|
|
|
56
60
|
public schema!: Schema
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
private editorView: EditorView | null = null
|
|
59
63
|
|
|
60
64
|
public isFocused = false
|
|
61
65
|
|
|
66
|
+
private editorState!: EditorState
|
|
67
|
+
|
|
62
68
|
/**
|
|
63
69
|
* The editor is considered initialized after the `create` event has been emitted.
|
|
64
70
|
*/
|
|
65
71
|
public isInitialized = false
|
|
66
72
|
|
|
67
|
-
public extensionStorage:
|
|
73
|
+
public extensionStorage: Storage = {} as Storage
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A unique ID for this editor instance.
|
|
77
|
+
*/
|
|
78
|
+
public instanceId = Math.random().toString(36).slice(2, 9)
|
|
68
79
|
|
|
69
80
|
public options: EditorOptions = {
|
|
70
|
-
element: document.createElement('div'),
|
|
81
|
+
element: typeof document !== 'undefined' ? document.createElement('div') : null,
|
|
71
82
|
content: '',
|
|
72
83
|
injectCSS: true,
|
|
73
84
|
injectNonce: undefined,
|
|
@@ -89,9 +100,12 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
89
100
|
onFocus: () => null,
|
|
90
101
|
onBlur: () => null,
|
|
91
102
|
onDestroy: () => null,
|
|
92
|
-
onContentError: ({ error }) => {
|
|
103
|
+
onContentError: ({ error }) => {
|
|
104
|
+
throw error
|
|
105
|
+
},
|
|
93
106
|
onPaste: () => null,
|
|
94
107
|
onDrop: () => null,
|
|
108
|
+
onDelete: () => null,
|
|
95
109
|
}
|
|
96
110
|
|
|
97
111
|
constructor(options: Partial<EditorOptions> = {}) {
|
|
@@ -103,8 +117,6 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
103
117
|
this.on('beforeCreate', this.options.onBeforeCreate)
|
|
104
118
|
this.emit('beforeCreate', { editor: this })
|
|
105
119
|
this.on('contentError', this.options.onContentError)
|
|
106
|
-
this.createView()
|
|
107
|
-
this.injectCSS()
|
|
108
120
|
this.on('create', this.options.onCreate)
|
|
109
121
|
this.on('update', this.options.onUpdate)
|
|
110
122
|
this.on('selectionUpdate', this.options.onSelectionUpdate)
|
|
@@ -114,6 +126,33 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
114
126
|
this.on('destroy', this.options.onDestroy)
|
|
115
127
|
this.on('drop', ({ event, slice, moved }) => this.options.onDrop(event, slice, moved))
|
|
116
128
|
this.on('paste', ({ event, slice }) => this.options.onPaste(event, slice))
|
|
129
|
+
this.on('delete', this.options.onDelete)
|
|
130
|
+
|
|
131
|
+
const initialDoc = this.createDoc()
|
|
132
|
+
const selection = resolveFocusPosition(initialDoc, this.options.autofocus)
|
|
133
|
+
|
|
134
|
+
// Set editor state immediately, so that it's available independently from the view
|
|
135
|
+
this.editorState = EditorState.create({
|
|
136
|
+
doc: initialDoc,
|
|
137
|
+
schema: this.schema,
|
|
138
|
+
selection: selection || undefined,
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
if (this.options.element) {
|
|
142
|
+
this.mount(this.options.element)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Attach the editor to the DOM, creating a new editor view.
|
|
148
|
+
*/
|
|
149
|
+
public mount(el: NonNullable<EditorOptions['element']> & {}) {
|
|
150
|
+
if (typeof document === 'undefined') {
|
|
151
|
+
throw new Error(
|
|
152
|
+
`[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.`,
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
this.createView(el)
|
|
117
156
|
|
|
118
157
|
window.setTimeout(() => {
|
|
119
158
|
if (this.isDestroyed) {
|
|
@@ -126,10 +165,30 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
126
165
|
}, 0)
|
|
127
166
|
}
|
|
128
167
|
|
|
168
|
+
/**
|
|
169
|
+
* Remove the editor from the DOM, but still allow remounting at a different point in time
|
|
170
|
+
*/
|
|
171
|
+
public unmount() {
|
|
172
|
+
if (this.editorView) {
|
|
173
|
+
// Cleanup our reference to prevent circular references which caused memory leaks
|
|
174
|
+
// @ts-ignore
|
|
175
|
+
const dom = this.editorView.dom as TiptapEditorHTMLElement
|
|
176
|
+
|
|
177
|
+
if (dom?.editor) {
|
|
178
|
+
delete dom.editor
|
|
179
|
+
}
|
|
180
|
+
this.editorView.destroy()
|
|
181
|
+
}
|
|
182
|
+
this.editorView = null
|
|
183
|
+
this.isInitialized = false
|
|
184
|
+
this.css?.remove()
|
|
185
|
+
this.css = null
|
|
186
|
+
}
|
|
187
|
+
|
|
129
188
|
/**
|
|
130
189
|
* Returns the editor storage.
|
|
131
190
|
*/
|
|
132
|
-
public get storage():
|
|
191
|
+
public get storage(): Storage {
|
|
133
192
|
return this.extensionStorage
|
|
134
193
|
}
|
|
135
194
|
|
|
@@ -158,7 +217,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
158
217
|
* Inject CSS styles.
|
|
159
218
|
*/
|
|
160
219
|
private injectCSS(): void {
|
|
161
|
-
if (this.options.injectCSS && document) {
|
|
220
|
+
if (this.options.injectCSS && typeof document !== 'undefined') {
|
|
162
221
|
this.css = createStyleTag(style, this.options.injectNonce)
|
|
163
222
|
}
|
|
164
223
|
}
|
|
@@ -174,7 +233,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
174
233
|
...options,
|
|
175
234
|
}
|
|
176
235
|
|
|
177
|
-
if (!this.
|
|
236
|
+
if (!this.editorView || !this.state || this.isDestroyed) {
|
|
178
237
|
return
|
|
179
238
|
}
|
|
180
239
|
|
|
@@ -192,7 +251,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
192
251
|
this.setOptions({ editable })
|
|
193
252
|
|
|
194
253
|
if (emitUpdate) {
|
|
195
|
-
this.emit('update', { editor: this, transaction: this.state.tr })
|
|
254
|
+
this.emit('update', { editor: this, transaction: this.state.tr, appendedTransactions: [] })
|
|
196
255
|
}
|
|
197
256
|
}
|
|
198
257
|
|
|
@@ -206,11 +265,57 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
206
265
|
return this.options.editable && this.view && this.view.editable
|
|
207
266
|
}
|
|
208
267
|
|
|
268
|
+
/**
|
|
269
|
+
* Returns the editor state.
|
|
270
|
+
*/
|
|
271
|
+
public get view(): EditorView {
|
|
272
|
+
if (this.editorView) {
|
|
273
|
+
return this.editorView
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return new Proxy(
|
|
277
|
+
{
|
|
278
|
+
state: this.editorState,
|
|
279
|
+
updateState: (state: EditorState): ReturnType<EditorView['updateState']> => {
|
|
280
|
+
this.editorState = state
|
|
281
|
+
},
|
|
282
|
+
dispatch: (tr: Transaction): ReturnType<EditorView['dispatch']> => {
|
|
283
|
+
this.editorState = this.state.apply(tr)
|
|
284
|
+
},
|
|
285
|
+
|
|
286
|
+
// Stub some commonly accessed properties to prevent errors
|
|
287
|
+
composing: false,
|
|
288
|
+
dragging: null,
|
|
289
|
+
editable: true,
|
|
290
|
+
} as EditorView,
|
|
291
|
+
{
|
|
292
|
+
get: (obj, key) => {
|
|
293
|
+
// Specifically always return the most recent editorState
|
|
294
|
+
if (key === 'state') {
|
|
295
|
+
return this.editorState
|
|
296
|
+
}
|
|
297
|
+
if (key in obj) {
|
|
298
|
+
return Reflect.get(obj, key)
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// We throw an error here, because we know the view is not available
|
|
302
|
+
throw new Error(
|
|
303
|
+
`[tiptap error]: The editor view is not available. Cannot access view['${key as string}']. The editor may not be mounted yet.`,
|
|
304
|
+
)
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
) as EditorView
|
|
308
|
+
}
|
|
309
|
+
|
|
209
310
|
/**
|
|
210
311
|
* Returns the editor state.
|
|
211
312
|
*/
|
|
212
313
|
public get state(): EditorState {
|
|
213
|
-
|
|
314
|
+
if (this.editorView) {
|
|
315
|
+
this.editorState = this.view.state
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return this.editorState
|
|
214
319
|
}
|
|
215
320
|
|
|
216
321
|
/**
|
|
@@ -241,15 +346,17 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
241
346
|
* @param nameOrPluginKeyToRemove The plugins name
|
|
242
347
|
* @returns The new editor state or undefined if the editor is destroyed
|
|
243
348
|
*/
|
|
244
|
-
public unregisterPlugin(
|
|
349
|
+
public unregisterPlugin(
|
|
350
|
+
nameOrPluginKeyToRemove: string | PluginKey | (string | PluginKey)[],
|
|
351
|
+
): EditorState | undefined {
|
|
245
352
|
if (this.isDestroyed) {
|
|
246
353
|
return undefined
|
|
247
354
|
}
|
|
248
355
|
|
|
249
356
|
const prevPlugins = this.state.plugins
|
|
250
|
-
let plugins = prevPlugins
|
|
357
|
+
let plugins = prevPlugins
|
|
251
358
|
|
|
252
|
-
([] as (string | PluginKey)[]).concat(nameOrPluginKeyToRemove).forEach(nameOrPluginKey => {
|
|
359
|
+
;([] as (string | PluginKey)[]).concat(nameOrPluginKeyToRemove).forEach(nameOrPluginKey => {
|
|
253
360
|
// @ts-ignore
|
|
254
361
|
const name = typeof nameOrPluginKey === 'string' ? `${nameOrPluginKey}$` : nameOrPluginKey.key
|
|
255
362
|
|
|
@@ -275,24 +382,28 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
275
382
|
* Creates an extension manager.
|
|
276
383
|
*/
|
|
277
384
|
private createExtensionManager(): void {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
385
|
+
const coreExtensions = this.options.enableCoreExtensions
|
|
386
|
+
? [
|
|
387
|
+
Editable,
|
|
388
|
+
ClipboardTextSerializer.configure({
|
|
389
|
+
blockSeparator: this.options.coreExtensionOptions?.clipboardTextSerializer?.blockSeparator,
|
|
390
|
+
}),
|
|
391
|
+
Commands,
|
|
392
|
+
FocusEvents,
|
|
393
|
+
Keymap,
|
|
394
|
+
Tabindex,
|
|
395
|
+
Drop,
|
|
396
|
+
Paste,
|
|
397
|
+
Delete,
|
|
398
|
+
].filter(ext => {
|
|
399
|
+
if (typeof this.options.enableCoreExtensions === 'object') {
|
|
400
|
+
return (
|
|
401
|
+
this.options.enableCoreExtensions[ext.name as keyof typeof this.options.enableCoreExtensions] !== false
|
|
402
|
+
)
|
|
403
|
+
}
|
|
404
|
+
return true
|
|
405
|
+
})
|
|
406
|
+
: []
|
|
296
407
|
const allExtensions = [...coreExtensions, ...this.options.extensions].filter(extension => {
|
|
297
408
|
return ['extension', 'node', 'mark'].includes(extension?.type)
|
|
298
409
|
})
|
|
@@ -317,20 +428,20 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
317
428
|
}
|
|
318
429
|
|
|
319
430
|
/**
|
|
320
|
-
* Creates
|
|
431
|
+
* Creates the initial document.
|
|
321
432
|
*/
|
|
322
|
-
private
|
|
433
|
+
private createDoc(): ProseMirrorNode {
|
|
323
434
|
let doc: ProseMirrorNode
|
|
324
435
|
|
|
325
436
|
try {
|
|
326
|
-
doc = createDocument(
|
|
327
|
-
this.options.
|
|
328
|
-
|
|
329
|
-
this.options.parseOptions,
|
|
330
|
-
{ errorOnInvalidContent: this.options.enableContentCheck },
|
|
331
|
-
)
|
|
437
|
+
doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {
|
|
438
|
+
errorOnInvalidContent: this.options.enableContentCheck,
|
|
439
|
+
})
|
|
332
440
|
} catch (e) {
|
|
333
|
-
if (
|
|
441
|
+
if (
|
|
442
|
+
!(e instanceof Error) ||
|
|
443
|
+
!['[tiptap error]: Invalid JSON content', '[tiptap error]: Invalid HTML content'].includes(e.message)
|
|
444
|
+
) {
|
|
334
445
|
// Not the content error we were expecting
|
|
335
446
|
throw e
|
|
336
447
|
}
|
|
@@ -338,8 +449,12 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
338
449
|
editor: this,
|
|
339
450
|
error: e as Error,
|
|
340
451
|
disableCollaboration: () => {
|
|
341
|
-
if (
|
|
342
|
-
this.storage
|
|
452
|
+
if (
|
|
453
|
+
'collaboration' in this.storage &&
|
|
454
|
+
typeof this.storage.collaboration === 'object' &&
|
|
455
|
+
this.storage.collaboration
|
|
456
|
+
) {
|
|
457
|
+
;(this.storage.collaboration as any).isDisabled = true
|
|
343
458
|
}
|
|
344
459
|
// To avoid syncing back invalid content, reinitialize the extensions without the collaboration extension
|
|
345
460
|
this.options.extensions = this.options.extensions.filter(extension => extension.name !== 'collaboration')
|
|
@@ -350,16 +465,18 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
350
465
|
})
|
|
351
466
|
|
|
352
467
|
// Content is invalid, but attempt to create it anyway, stripping out the invalid parts
|
|
353
|
-
doc = createDocument(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
this.options.parseOptions,
|
|
357
|
-
{ errorOnInvalidContent: false },
|
|
358
|
-
)
|
|
468
|
+
doc = createDocument(this.options.content, this.schema, this.options.parseOptions, {
|
|
469
|
+
errorOnInvalidContent: false,
|
|
470
|
+
})
|
|
359
471
|
}
|
|
360
|
-
|
|
472
|
+
return doc
|
|
473
|
+
}
|
|
361
474
|
|
|
362
|
-
|
|
475
|
+
/**
|
|
476
|
+
* Creates a ProseMirror view.
|
|
477
|
+
*/
|
|
478
|
+
private createView(element: NonNullable<EditorOptions['element']> & {}): void {
|
|
479
|
+
this.editorView = new EditorView(element, {
|
|
363
480
|
...this.options.editorProps,
|
|
364
481
|
attributes: {
|
|
365
482
|
// add `role="textbox"` to the editor element
|
|
@@ -367,10 +484,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
367
484
|
...this.options.editorProps?.attributes,
|
|
368
485
|
},
|
|
369
486
|
dispatchTransaction: this.dispatchTransaction.bind(this),
|
|
370
|
-
state:
|
|
371
|
-
doc,
|
|
372
|
-
selection: selection || undefined,
|
|
373
|
-
}),
|
|
487
|
+
state: this.editorState,
|
|
374
488
|
})
|
|
375
489
|
|
|
376
490
|
// `editor.view` is not yet available at this time.
|
|
@@ -383,6 +497,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
383
497
|
|
|
384
498
|
this.createNodeViews()
|
|
385
499
|
this.prependClass()
|
|
500
|
+
this.injectCSS()
|
|
386
501
|
|
|
387
502
|
// Let’s store the editor instance in the DOM element.
|
|
388
503
|
// So we’ll have access to it for tests.
|
|
@@ -393,7 +508,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
393
508
|
}
|
|
394
509
|
|
|
395
510
|
/**
|
|
396
|
-
* Creates all node views.
|
|
511
|
+
* Creates all node and mark views.
|
|
397
512
|
*/
|
|
398
513
|
public createNodeViews(): void {
|
|
399
514
|
if (this.view.isDestroyed) {
|
|
@@ -401,6 +516,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
401
516
|
}
|
|
402
517
|
|
|
403
518
|
this.view.setProps({
|
|
519
|
+
markViews: this.extensionManager.markViews,
|
|
404
520
|
nodeViews: this.extensionManager.nodeViews,
|
|
405
521
|
})
|
|
406
522
|
}
|
|
@@ -452,18 +568,30 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
452
568
|
return
|
|
453
569
|
}
|
|
454
570
|
|
|
455
|
-
|
|
571
|
+
// Apply transaction and get resulting state and transactions
|
|
572
|
+
const { state, transactions } = this.state.applyTransaction(transaction)
|
|
456
573
|
const selectionHasChanged = !this.state.selection.eq(state.selection)
|
|
574
|
+
const rootTrWasApplied = transactions.includes(transaction)
|
|
575
|
+
const prevState = this.state
|
|
457
576
|
|
|
458
577
|
this.emit('beforeTransaction', {
|
|
459
578
|
editor: this,
|
|
460
579
|
transaction,
|
|
461
580
|
nextState: state,
|
|
462
581
|
})
|
|
582
|
+
|
|
583
|
+
// If transaction was filtered out, we can return early
|
|
584
|
+
if (!rootTrWasApplied) {
|
|
585
|
+
return
|
|
586
|
+
}
|
|
587
|
+
|
|
463
588
|
this.view.updateState(state)
|
|
589
|
+
|
|
590
|
+
// Emit transaction event with appended transactions info
|
|
464
591
|
this.emit('transaction', {
|
|
465
592
|
editor: this,
|
|
466
593
|
transaction,
|
|
594
|
+
appendedTransactions: transactions.slice(1),
|
|
467
595
|
})
|
|
468
596
|
|
|
469
597
|
if (selectionHasChanged) {
|
|
@@ -473,14 +601,17 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
473
601
|
})
|
|
474
602
|
}
|
|
475
603
|
|
|
476
|
-
|
|
477
|
-
const
|
|
604
|
+
// Only emit the latest between focus and blur events
|
|
605
|
+
const mostRecentFocusTr = transactions.findLast(tr => tr.getMeta('focus') || tr.getMeta('blur'))
|
|
606
|
+
const focus = mostRecentFocusTr?.getMeta('focus')
|
|
607
|
+
const blur = mostRecentFocusTr?.getMeta('blur')
|
|
478
608
|
|
|
479
609
|
if (focus) {
|
|
480
610
|
this.emit('focus', {
|
|
481
611
|
editor: this,
|
|
482
612
|
event: focus.event,
|
|
483
|
-
|
|
613
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
614
|
+
transaction: mostRecentFocusTr!,
|
|
484
615
|
})
|
|
485
616
|
}
|
|
486
617
|
|
|
@@ -488,17 +619,24 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
488
619
|
this.emit('blur', {
|
|
489
620
|
editor: this,
|
|
490
621
|
event: blur.event,
|
|
491
|
-
|
|
622
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
623
|
+
transaction: mostRecentFocusTr!,
|
|
492
624
|
})
|
|
493
625
|
}
|
|
494
626
|
|
|
495
|
-
|
|
627
|
+
// Compare states for update event
|
|
628
|
+
if (
|
|
629
|
+
transaction.getMeta('preventUpdate') ||
|
|
630
|
+
!transactions.some(tr => tr.docChanged) ||
|
|
631
|
+
prevState.doc.eq(state.doc)
|
|
632
|
+
) {
|
|
496
633
|
return
|
|
497
634
|
}
|
|
498
635
|
|
|
499
636
|
this.emit('update', {
|
|
500
637
|
editor: this,
|
|
501
638
|
transaction,
|
|
639
|
+
appendedTransactions: transactions.slice(1),
|
|
502
640
|
})
|
|
503
641
|
}
|
|
504
642
|
|
|
@@ -528,7 +666,10 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
528
666
|
/**
|
|
529
667
|
* Get the document as JSON.
|
|
530
668
|
*/
|
|
531
|
-
public getJSON():
|
|
669
|
+
public getJSON(): DocumentType<
|
|
670
|
+
Record<string, any> | undefined,
|
|
671
|
+
TNodeType<string, undefined | Record<string, any>, any, (TNodeType | TTextType)[]>[]
|
|
672
|
+
> {
|
|
532
673
|
return this.state.doc.toJSON()
|
|
533
674
|
}
|
|
534
675
|
|
|
@@ -542,10 +683,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
542
683
|
/**
|
|
543
684
|
* Get the document as text.
|
|
544
685
|
*/
|
|
545
|
-
public getText(options?: {
|
|
546
|
-
blockSeparator?: string
|
|
547
|
-
textSerializers?: Record<string, TextSerializer>
|
|
548
|
-
}): string {
|
|
686
|
+
public getText(options?: { blockSeparator?: string; textSerializers?: Record<string, TextSerializer> }): string {
|
|
549
687
|
const { blockSeparator = '\n\n', textSerializers = {} } = options || {}
|
|
550
688
|
|
|
551
689
|
return getText(this.state.doc, {
|
|
@@ -564,35 +702,13 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
564
702
|
return isNodeEmpty(this.state.doc)
|
|
565
703
|
}
|
|
566
704
|
|
|
567
|
-
/**
|
|
568
|
-
* Get the number of characters for the current document.
|
|
569
|
-
*
|
|
570
|
-
* @deprecated
|
|
571
|
-
*/
|
|
572
|
-
public getCharacterCount(): number {
|
|
573
|
-
console.warn(
|
|
574
|
-
'[tiptap warn]: "editor.getCharacterCount()" is deprecated. Please use "editor.storage.characterCount.characters()" instead.',
|
|
575
|
-
)
|
|
576
|
-
|
|
577
|
-
return this.state.doc.content.size - 2
|
|
578
|
-
}
|
|
579
|
-
|
|
580
705
|
/**
|
|
581
706
|
* Destroy the editor.
|
|
582
707
|
*/
|
|
583
708
|
public destroy(): void {
|
|
584
709
|
this.emit('destroy')
|
|
585
710
|
|
|
586
|
-
|
|
587
|
-
// Cleanup our reference to prevent circular references which caused memory leaks
|
|
588
|
-
// @ts-ignore
|
|
589
|
-
const dom = this.view.dom as TiptapEditorHTMLElement
|
|
590
|
-
|
|
591
|
-
if (dom && dom.editor) {
|
|
592
|
-
delete dom.editor
|
|
593
|
-
}
|
|
594
|
-
this.view.destroy()
|
|
595
|
-
}
|
|
711
|
+
this.unmount()
|
|
596
712
|
|
|
597
713
|
this.removeAllListeners()
|
|
598
714
|
}
|
package/src/EventEmitter.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
type StringKeyOf<T> = Extract<keyof T, string>
|
|
2
|
-
type CallbackType<
|
|
3
|
-
T
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
EventName extends StringKeyOf<T>,
|
|
9
|
-
> = (...props: CallbackType<T, EventName>) => any
|
|
2
|
+
type CallbackType<T extends Record<string, any>, EventName extends StringKeyOf<T>> = T[EventName] extends any[]
|
|
3
|
+
? T[EventName]
|
|
4
|
+
: [T[EventName]]
|
|
5
|
+
type CallbackFunction<T extends Record<string, any>, EventName extends StringKeyOf<T>> = (
|
|
6
|
+
...props: CallbackType<T, EventName>
|
|
7
|
+
) => any
|
|
10
8
|
|
|
11
9
|
export class EventEmitter<T extends Record<string, any>> {
|
|
12
|
-
|
|
13
|
-
private callbacks: { [key: string]: Array<(...args: any[])=>void> } = {}
|
|
10
|
+
private callbacks: { [key: string]: Array<(...args: any[]) => void> } = {}
|
|
14
11
|
|
|
15
12
|
public on<EventName extends StringKeyOf<T>>(event: EventName, fn: CallbackFunction<T, EventName>): this {
|
|
16
13
|
if (!this.callbacks[event]) {
|