@tiptap/core 2.0.0-beta.22 → 2.0.0-beta.220
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.cjs +4354 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +4264 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.js +4352 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/packages/core/src/CommandManager.d.ts +14 -7
- package/dist/packages/core/src/Editor.d.ts +27 -22
- package/dist/packages/core/src/EventEmitter.d.ts +8 -4
- package/dist/packages/core/src/Extension.d.ts +93 -21
- package/dist/packages/core/src/ExtensionManager.d.ts +8 -14
- package/dist/packages/core/src/InputRule.d.ts +42 -0
- package/dist/packages/core/src/Mark.d.ts +132 -24
- package/dist/packages/core/src/Node.d.ts +150 -26
- package/dist/packages/core/src/NodeView.d.ts +11 -15
- package/dist/packages/core/src/PasteRule.d.ts +42 -0
- package/dist/packages/core/src/Tracker.d.ts +11 -0
- package/dist/packages/core/src/commands/blur.d.ts +3 -3
- package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
- package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
- package/dist/packages/core/src/commands/command.d.ts +2 -2
- package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
- package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +12 -0
- package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
- package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
- package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
- package/dist/packages/core/src/commands/enter.d.ts +3 -3
- package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
- package/dist/packages/core/src/commands/extendMarkRange.d.ts +4 -4
- package/dist/packages/core/src/commands/first.d.ts +3 -3
- package/dist/packages/core/src/commands/focus.d.ts +5 -3
- package/dist/packages/core/src/commands/forEach.d.ts +14 -0
- package/dist/packages/core/src/commands/index.d.ts +50 -0
- package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
- package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
- package/dist/packages/core/src/commands/join.d.ts +33 -0
- package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
- package/dist/packages/core/src/commands/lift.d.ts +4 -4
- package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
- package/dist/packages/core/src/commands/liftListItem.d.ts +4 -4
- package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
- package/dist/packages/core/src/commands/resetAttributes.d.ts +4 -4
- package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
- package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
- package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
- package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
- package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
- package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
- package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
- package/dist/packages/core/src/commands/setContent.d.ts +4 -3
- package/dist/packages/core/src/commands/setMark.d.ts +4 -4
- package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
- package/dist/packages/core/src/commands/setNode.d.ts +4 -4
- package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
- package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
- package/dist/packages/core/src/commands/sinkListItem.d.ts +4 -4
- package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
- package/dist/packages/core/src/commands/splitListItem.d.ts +4 -4
- package/dist/packages/core/src/commands/toggleList.d.ts +4 -4
- package/dist/packages/core/src/commands/toggleMark.d.ts +9 -4
- package/dist/packages/core/src/commands/toggleNode.d.ts +4 -4
- package/dist/packages/core/src/commands/toggleWrap.d.ts +4 -4
- package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
- package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
- package/dist/packages/core/src/commands/unsetMark.d.ts +9 -4
- package/dist/packages/core/src/commands/updateAttributes.d.ts +4 -4
- package/dist/packages/core/src/commands/wrapIn.d.ts +4 -4
- package/dist/packages/core/src/commands/wrapInList.d.ts +4 -4
- package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
- package/dist/packages/core/src/extensions/commands.d.ts +2 -99
- package/dist/packages/core/src/extensions/editable.d.ts +1 -1
- package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
- package/dist/packages/core/src/extensions/index.d.ts +1 -0
- package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
- package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
- package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
- package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
- package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
- package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
- package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
- package/dist/packages/core/src/helpers/findChildren.d.ts +3 -8
- package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
- package/dist/packages/core/src/helpers/findParentNode.d.ts +3 -4
- package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +3 -3
- package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
- package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
- package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
- package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
- package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
- package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
- package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
- package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
- package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
- package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +3 -4
- package/dist/packages/core/src/helpers/getMarkRange.d.ts +2 -2
- package/dist/packages/core/src/helpers/getMarkType.d.ts +2 -2
- package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
- package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +3 -4
- package/dist/packages/core/src/helpers/getNodeType.d.ts +2 -2
- package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
- package/dist/packages/core/src/helpers/getSchema.d.ts +2 -2
- package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
- package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +2 -2
- package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +2 -2
- package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
- package/dist/packages/core/src/helpers/getText.d.ts +6 -0
- package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
- package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
- package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
- package/dist/packages/core/src/helpers/index.d.ts +47 -0
- package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +2 -2
- package/dist/packages/core/src/helpers/isActive.d.ts +2 -3
- package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
- package/dist/packages/core/src/helpers/isList.d.ts +1 -1
- package/dist/packages/core/src/helpers/isMarkActive.d.ts +3 -4
- package/dist/packages/core/src/helpers/isNodeActive.d.ts +3 -4
- package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -2
- package/dist/packages/core/src/helpers/isNodeSelection.d.ts +2 -2
- package/dist/packages/core/src/helpers/isTextSelection.d.ts +2 -2
- package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
- package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
- package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +2 -2
- package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
- package/dist/packages/core/src/index.d.ts +14 -23
- package/dist/packages/core/src/inputRules/index.d.ts +5 -0
- package/dist/packages/core/src/inputRules/markInputRule.d.ts +12 -3
- package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +12 -3
- package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
- package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
- package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +27 -0
- package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
- package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +12 -3
- package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
- package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
- package/dist/packages/core/src/style.d.ts +1 -2
- package/dist/packages/core/src/types.d.ts +122 -62
- package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
- package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
- package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
- package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
- package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
- package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
- package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
- package/dist/packages/core/src/utilities/index.d.ts +20 -0
- package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
- package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
- package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
- package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
- package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
- package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
- package/dist/packages/core/src/utilities/isString.d.ts +1 -0
- package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
- package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
- package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
- package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
- package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
- package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
- package/package.json +29 -24
- package/src/CommandManager.ts +76 -86
- package/src/Editor.ts +121 -79
- package/src/EventEmitter.ts +14 -4
- package/src/Extension.ts +276 -112
- package/src/ExtensionManager.ts +252 -110
- package/src/InputRule.ts +260 -0
- package/src/Mark.ts +394 -152
- package/src/Node.ts +433 -176
- package/src/NodeView.ts +144 -67
- package/src/PasteRule.ts +240 -0
- package/src/Tracker.ts +38 -0
- package/src/commands/blur.ts +12 -6
- package/src/commands/clearContent.ts +3 -3
- package/src/commands/clearNodes.ts +31 -19
- package/src/commands/command.ts +2 -2
- package/src/commands/createParagraphNear.ts +5 -4
- package/src/commands/deleteCurrentNode.ts +41 -0
- package/src/commands/deleteNode.ts +37 -0
- package/src/commands/deleteRange.ts +3 -3
- package/src/commands/deleteSelection.ts +5 -4
- package/src/commands/enter.ts +3 -3
- package/src/commands/exitCode.ts +5 -4
- package/src/commands/extendMarkRange.ts +16 -12
- package/src/commands/first.ts +3 -3
- package/src/commands/focus.ts +47 -44
- package/src/commands/forEach.ts +24 -0
- package/src/commands/index.ts +50 -0
- package/src/commands/insertContent.ts +17 -24
- package/src/commands/insertContentAt.ts +102 -0
- package/src/commands/join.ts +53 -0
- package/src/commands/keyboardShortcut.ts +6 -6
- package/src/commands/lift.ts +8 -7
- package/src/commands/liftEmptyBlock.ts +5 -4
- package/src/commands/liftListItem.ts +7 -6
- package/src/commands/newlineInCode.ts +5 -4
- package/src/commands/resetAttributes.ts +18 -12
- package/src/commands/scrollIntoView.ts +3 -3
- package/src/commands/selectAll.ts +8 -6
- package/src/commands/selectNodeBackward.ts +5 -4
- package/src/commands/selectNodeForward.ts +5 -4
- package/src/commands/selectParentNode.ts +5 -4
- package/src/commands/selectTextblockEnd.ts +20 -0
- package/src/commands/selectTextblockStart.ts +20 -0
- package/src/commands/setContent.ts +9 -16
- package/src/commands/setMark.ts +90 -14
- package/src/commands/setMeta.ts +18 -0
- package/src/commands/setNode.ts +32 -8
- package/src/commands/setNodeSelection.ts +27 -0
- package/src/commands/setTextSelection.ts +31 -0
- package/src/commands/sinkListItem.ts +7 -6
- package/src/commands/splitBlock.ts +31 -41
- package/src/commands/splitListItem.ts +58 -29
- package/src/commands/toggleList.ts +109 -20
- package/src/commands/toggleMark.ts +19 -8
- package/src/commands/toggleNode.ts +11 -6
- package/src/commands/toggleWrap.ts +10 -10
- package/src/commands/undoInputRule.ts +34 -5
- package/src/commands/unsetAllMarks.ts +7 -11
- package/src/commands/unsetMark.ts +36 -23
- package/src/commands/updateAttributes.ts +27 -15
- package/src/commands/wrapIn.ts +7 -12
- package/src/commands/wrapInList.ts +7 -6
- package/src/extensions/clipboardTextSerializer.ts +15 -36
- package/src/extensions/commands.ts +3 -147
- package/src/extensions/editable.ts +2 -1
- package/src/extensions/focusEvents.ts +4 -6
- package/src/extensions/index.ts +1 -0
- package/src/extensions/keymap.ts +106 -13
- package/src/extensions/tabindex.ts +18 -0
- package/src/helpers/combineTransactionSteps.ts +21 -0
- package/src/helpers/createChainableState.ts +38 -0
- package/src/helpers/createDocument.ts +5 -6
- package/src/helpers/createNodeFromContent.ts +20 -28
- package/src/helpers/defaultBlockAt.ts +13 -0
- package/src/helpers/findChildren.ts +3 -7
- package/src/helpers/findChildrenInRange.ts +36 -0
- package/src/helpers/findParentNode.ts +4 -3
- package/src/helpers/findParentNodeClosestToPos.ts +13 -7
- package/src/helpers/generateHTML.ts +7 -6
- package/src/helpers/generateJSON.ts +12 -0
- package/src/helpers/generateText.ts +27 -0
- package/src/helpers/getAttributes.ts +26 -0
- package/src/helpers/getAttributesFromExtensions.ts +42 -14
- package/src/helpers/getChangedRanges.ts +83 -0
- package/src/helpers/getDebugJSON.ts +54 -0
- package/src/helpers/getExtensionField.ts +25 -0
- package/src/helpers/getHTMLFromFragment.ts +5 -6
- package/src/helpers/getMarkAttributes.ts +18 -11
- package/src/helpers/getMarkRange.ts +41 -8
- package/src/helpers/getMarkType.ts +8 -2
- package/src/helpers/getMarksBetween.ts +34 -10
- package/src/helpers/getNodeAttributes.ts +14 -13
- package/src/helpers/getNodeType.ts +8 -2
- package/src/helpers/getRenderedAttributes.ts +9 -7
- package/src/helpers/getSchema.ts +7 -133
- package/src/helpers/getSchemaByResolvedExtensions.ts +192 -0
- package/src/helpers/getSchemaTypeByName.ts +3 -11
- package/src/helpers/getSchemaTypeNameByName.ts +2 -2
- package/src/helpers/getSplittedAttributes.ts +4 -4
- package/src/helpers/getText.ts +19 -0
- package/src/helpers/getTextBetween.ts +46 -0
- package/src/helpers/getTextContentFromNodes.ts +26 -0
- package/src/helpers/getTextSerializersFromSchema.ts +11 -0
- package/src/helpers/index.ts +47 -0
- package/src/helpers/injectExtensionAttributesToParseRule.ts +22 -23
- package/src/helpers/isActive.ts +10 -6
- package/src/helpers/isExtensionRulesEnabled.ts +15 -0
- package/src/helpers/isList.ts +14 -7
- package/src/helpers/isMarkActive.ts +49 -27
- package/src/helpers/isNodeActive.ts +29 -39
- package/src/helpers/isNodeEmpty.ts +2 -2
- package/src/helpers/isNodeSelection.ts +3 -4
- package/src/helpers/isTextSelection.ts +3 -4
- package/src/helpers/posToDOMRect.ts +35 -0
- package/src/helpers/resolveFocusPosition.ts +42 -0
- package/src/helpers/selectionToInsertionEnd.ts +3 -3
- package/src/helpers/splitExtensions.ts +3 -3
- package/src/index.ts +15 -26
- package/src/inputRules/index.ts +5 -0
- package/src/inputRules/markInputRule.ts +59 -40
- package/src/inputRules/nodeInputRule.ts +45 -12
- package/src/inputRules/textInputRule.ts +35 -0
- package/src/inputRules/textblockTypeInputRule.ts +37 -0
- package/src/inputRules/wrappingInputRule.ts +84 -0
- package/src/pasteRules/index.ts +3 -0
- package/src/pasteRules/markPasteRule.ts +61 -53
- package/src/pasteRules/nodePasteRule.ts +37 -0
- package/src/pasteRules/textPasteRule.ts +35 -0
- package/src/style.ts +16 -3
- package/src/types.ts +175 -97
- package/src/utilities/callOrReturn.ts +6 -3
- package/src/utilities/createStyleTag.ts +12 -1
- package/src/utilities/deleteProps.ts +2 -4
- package/src/utilities/elementFromString.ts +4 -5
- package/src/utilities/escapeForRegEx.ts +4 -0
- package/src/utilities/findDuplicates.ts +5 -0
- package/src/utilities/fromString.ts +2 -2
- package/src/utilities/index.ts +20 -0
- package/src/utilities/isEmptyObject.ts +2 -2
- package/src/utilities/isFunction.ts +3 -0
- package/src/utilities/isMacOS.ts +5 -0
- package/src/utilities/isNumber.ts +3 -0
- package/src/utilities/isPlainObject.ts +8 -5
- package/src/utilities/isRegExp.ts +3 -0
- package/src/utilities/isString.ts +3 -0
- package/src/utilities/isiOS.ts +12 -0
- package/src/utilities/mergeAttributes.ts +2 -3
- package/src/utilities/mergeDeep.ts +2 -3
- package/src/utilities/minMax.ts +1 -1
- package/src/utilities/objectIncludes.ts +17 -5
- package/src/utilities/removeDuplicates.ts +15 -0
- package/CHANGELOG.md +0 -373
- package/LICENSE.md +0 -21
- package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
- package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
- package/dist/packages/core/src/commands/insertText.d.ts +0 -12
- package/dist/packages/core/src/commands/joinBackward.d.ts +0 -12
- package/dist/packages/core/src/commands/joinForward.d.ts +0 -12
- package/dist/packages/core/src/commands/replace.d.ts +0 -13
- package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
- package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
- package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
- package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
- package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
- package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
- package/dist/tiptap-core.bundle.umd.min.js +0 -17
- package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
- package/dist/tiptap-core.cjs.js +0 -3048
- package/dist/tiptap-core.cjs.js.map +0 -1
- package/dist/tiptap-core.esm.js +0 -3021
- package/dist/tiptap-core.esm.js.map +0 -1
- package/dist/tiptap-core.umd.js +0 -3045
- package/dist/tiptap-core.umd.js.map +0 -1
- package/src/commands/insertHTML.ts +0 -30
- package/src/commands/insertNode.ts +0 -33
- package/src/commands/insertText.ts +0 -22
- package/src/commands/joinBackward.ts +0 -17
- package/src/commands/joinForward.ts +0 -17
- package/src/commands/replace.ts +0 -20
- package/src/commands/replaceRange.ts +0 -36
- package/src/commands/resetNodeAttributes.ts +0 -33
- package/src/commands/updateNodeAttributes.ts +0 -35
- package/src/utilities/isClass.ts +0 -7
- package/src/utilities/isObject.ts +0 -10
- package/src/utilities/removeElement.ts +0 -5
package/src/Editor.ts
CHANGED
|
@@ -1,28 +1,33 @@
|
|
|
1
|
+
import { MarkType, NodeType, Schema } from '@tiptap/pm/model'
|
|
1
2
|
import {
|
|
2
3
|
EditorState, Plugin, PluginKey, Transaction,
|
|
3
|
-
} from '
|
|
4
|
-
import { EditorView } from '
|
|
5
|
-
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import createDocument from './helpers/createDocument'
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
4
|
+
} from '@tiptap/pm/state'
|
|
5
|
+
import { EditorView } from '@tiptap/pm/view'
|
|
6
|
+
|
|
7
|
+
import { CommandManager } from './CommandManager'
|
|
8
|
+
import { EventEmitter } from './EventEmitter'
|
|
9
|
+
import { ExtensionManager } from './ExtensionManager'
|
|
10
|
+
import * as extensions from './extensions'
|
|
11
|
+
import { createDocument } from './helpers/createDocument'
|
|
12
|
+
import { getAttributes } from './helpers/getAttributes'
|
|
13
|
+
import { getHTMLFromFragment } from './helpers/getHTMLFromFragment'
|
|
14
|
+
import { getText } from './helpers/getText'
|
|
15
|
+
import { getTextSerializersFromSchema } from './helpers/getTextSerializersFromSchema'
|
|
16
|
+
import { isActive } from './helpers/isActive'
|
|
17
|
+
import { isNodeEmpty } from './helpers/isNodeEmpty'
|
|
18
|
+
import { resolveFocusPosition } from './helpers/resolveFocusPosition'
|
|
19
|
+
import { style } from './style'
|
|
17
20
|
import {
|
|
18
|
-
EditorOptions,
|
|
19
21
|
CanCommands,
|
|
20
22
|
ChainedCommands,
|
|
23
|
+
EditorEvents,
|
|
24
|
+
EditorOptions,
|
|
25
|
+
JSONContent,
|
|
21
26
|
SingleCommands,
|
|
22
|
-
|
|
27
|
+
TextSerializer,
|
|
23
28
|
} from './types'
|
|
24
|
-
import
|
|
25
|
-
import
|
|
29
|
+
import { createStyleTag } from './utilities/createStyleTag'
|
|
30
|
+
import { isFunction } from './utilities/isFunction'
|
|
26
31
|
|
|
27
32
|
export { extensions }
|
|
28
33
|
|
|
@@ -30,8 +35,7 @@ export interface HTMLElement {
|
|
|
30
35
|
editor?: Editor
|
|
31
36
|
}
|
|
32
37
|
|
|
33
|
-
export class Editor extends EventEmitter {
|
|
34
|
-
|
|
38
|
+
export class Editor extends EventEmitter<EditorEvents> {
|
|
35
39
|
private commandManager!: CommandManager
|
|
36
40
|
|
|
37
41
|
public extensionManager!: ExtensionManager
|
|
@@ -44,12 +48,13 @@ export class Editor extends EventEmitter {
|
|
|
44
48
|
|
|
45
49
|
public isFocused = false
|
|
46
50
|
|
|
47
|
-
|
|
51
|
+
public extensionStorage: Record<string, any> = {}
|
|
48
52
|
|
|
49
53
|
public options: EditorOptions = {
|
|
50
54
|
element: document.createElement('div'),
|
|
51
55
|
content: '',
|
|
52
56
|
injectCSS: true,
|
|
57
|
+
injectNonce: undefined,
|
|
53
58
|
extensions: [],
|
|
54
59
|
autofocus: false,
|
|
55
60
|
editable: true,
|
|
@@ -57,6 +62,7 @@ export class Editor extends EventEmitter {
|
|
|
57
62
|
parseOptions: {},
|
|
58
63
|
enableInputRules: true,
|
|
59
64
|
enablePasteRules: true,
|
|
65
|
+
enableCoreExtensions: true,
|
|
60
66
|
onBeforeCreate: () => null,
|
|
61
67
|
onCreate: () => null,
|
|
62
68
|
onUpdate: () => null,
|
|
@@ -64,7 +70,6 @@ export class Editor extends EventEmitter {
|
|
|
64
70
|
onTransaction: () => null,
|
|
65
71
|
onFocus: () => null,
|
|
66
72
|
onBlur: () => null,
|
|
67
|
-
onResize: () => null,
|
|
68
73
|
onDestroy: () => null,
|
|
69
74
|
}
|
|
70
75
|
|
|
@@ -74,7 +79,7 @@ export class Editor extends EventEmitter {
|
|
|
74
79
|
this.createExtensionManager()
|
|
75
80
|
this.createCommandManager()
|
|
76
81
|
this.createSchema()
|
|
77
|
-
this.on('beforeCreate', this.options.
|
|
82
|
+
this.on('beforeCreate', this.options.onBeforeCreate)
|
|
78
83
|
this.emit('beforeCreate', { editor: this })
|
|
79
84
|
this.createView()
|
|
80
85
|
this.injectCSS()
|
|
@@ -87,38 +92,41 @@ export class Editor extends EventEmitter {
|
|
|
87
92
|
this.on('destroy', this.options.onDestroy)
|
|
88
93
|
|
|
89
94
|
window.setTimeout(() => {
|
|
95
|
+
if (this.isDestroyed) {
|
|
96
|
+
return
|
|
97
|
+
}
|
|
98
|
+
|
|
90
99
|
this.commands.focus(this.options.autofocus)
|
|
91
100
|
this.emit('create', { editor: this })
|
|
92
|
-
|
|
93
|
-
if (window.ResizeObserver) {
|
|
94
|
-
this.resizeObserver = new ResizeObserver(() => {
|
|
95
|
-
this.emit('resize', { editor: this })
|
|
96
|
-
})
|
|
97
|
-
this.resizeObserver.observe(this.view.dom)
|
|
98
|
-
}
|
|
99
101
|
}, 0)
|
|
102
|
+
}
|
|
100
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Returns the editor storage.
|
|
106
|
+
*/
|
|
107
|
+
public get storage(): Record<string, any> {
|
|
108
|
+
return this.extensionStorage
|
|
101
109
|
}
|
|
102
110
|
|
|
103
111
|
/**
|
|
104
112
|
* An object of all registered commands.
|
|
105
113
|
*/
|
|
106
114
|
public get commands(): SingleCommands {
|
|
107
|
-
return this.commandManager.
|
|
115
|
+
return this.commandManager.commands
|
|
108
116
|
}
|
|
109
117
|
|
|
110
118
|
/**
|
|
111
119
|
* Create a command chain to call multiple commands at once.
|
|
112
120
|
*/
|
|
113
121
|
public chain(): ChainedCommands {
|
|
114
|
-
return this.commandManager.
|
|
122
|
+
return this.commandManager.chain()
|
|
115
123
|
}
|
|
116
124
|
|
|
117
125
|
/**
|
|
118
126
|
* Check if a command or a command chain can be executed. Without executing it.
|
|
119
127
|
*/
|
|
120
128
|
public can(): CanCommands {
|
|
121
|
-
return this.commandManager.
|
|
129
|
+
return this.commandManager.can()
|
|
122
130
|
}
|
|
123
131
|
|
|
124
132
|
/**
|
|
@@ -126,7 +134,7 @@ export class Editor extends EventEmitter {
|
|
|
126
134
|
*/
|
|
127
135
|
private injectCSS(): void {
|
|
128
136
|
if (this.options.injectCSS && document) {
|
|
129
|
-
this.css = createStyleTag(style)
|
|
137
|
+
this.css = createStyleTag(style, this.options.injectNonce)
|
|
130
138
|
}
|
|
131
139
|
}
|
|
132
140
|
|
|
@@ -136,17 +144,30 @@ export class Editor extends EventEmitter {
|
|
|
136
144
|
* @param options A list of options
|
|
137
145
|
*/
|
|
138
146
|
public setOptions(options: Partial<EditorOptions> = {}): void {
|
|
139
|
-
this.options = {
|
|
147
|
+
this.options = {
|
|
148
|
+
...this.options,
|
|
149
|
+
...options,
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (!this.view || !this.state || this.isDestroyed) {
|
|
153
|
+
return
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (this.options.editorProps) {
|
|
157
|
+
this.view.setProps(this.options.editorProps)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
this.view.updateState(this.state)
|
|
140
161
|
}
|
|
141
162
|
|
|
142
163
|
/**
|
|
143
164
|
* Update editable state of the editor.
|
|
144
165
|
*/
|
|
145
|
-
public setEditable(editable: boolean): void {
|
|
166
|
+
public setEditable(editable: boolean, emitUpdate = true): void {
|
|
146
167
|
this.setOptions({ editable })
|
|
147
168
|
|
|
148
|
-
if (
|
|
149
|
-
this.
|
|
169
|
+
if (emitUpdate) {
|
|
170
|
+
this.emit('update', { editor: this, transaction: this.state.tr })
|
|
150
171
|
}
|
|
151
172
|
}
|
|
152
173
|
|
|
@@ -154,7 +175,10 @@ export class Editor extends EventEmitter {
|
|
|
154
175
|
* Returns whether the editor is editable.
|
|
155
176
|
*/
|
|
156
177
|
public get isEditable(): boolean {
|
|
157
|
-
|
|
178
|
+
// since plugins are applied after creating the view
|
|
179
|
+
// `editable` is always `true` for one tick.
|
|
180
|
+
// that’s why we also have to check for `options.editable`
|
|
181
|
+
return this.options.editable && this.view && this.view.editable
|
|
158
182
|
}
|
|
159
183
|
|
|
160
184
|
/**
|
|
@@ -170,9 +194,12 @@ export class Editor extends EventEmitter {
|
|
|
170
194
|
* @param plugin A ProseMirror plugin
|
|
171
195
|
* @param handlePlugins Control how to merge the plugin into the existing plugins.
|
|
172
196
|
*/
|
|
173
|
-
public registerPlugin(
|
|
174
|
-
|
|
175
|
-
|
|
197
|
+
public registerPlugin(
|
|
198
|
+
plugin: Plugin,
|
|
199
|
+
handlePlugins?: (newPlugin: Plugin, plugins: Plugin[]) => Plugin[],
|
|
200
|
+
): void {
|
|
201
|
+
const plugins = isFunction(handlePlugins)
|
|
202
|
+
? handlePlugins(plugin, [...this.state.plugins])
|
|
176
203
|
: [...this.state.plugins, plugin]
|
|
177
204
|
|
|
178
205
|
const state = this.state.reconfigure({ plugins })
|
|
@@ -183,17 +210,15 @@ export class Editor extends EventEmitter {
|
|
|
183
210
|
/**
|
|
184
211
|
* Unregister a ProseMirror plugin.
|
|
185
212
|
*
|
|
186
|
-
* @param
|
|
213
|
+
* @param nameOrPluginKey The plugins name
|
|
187
214
|
*/
|
|
188
215
|
public unregisterPlugin(nameOrPluginKey: string | PluginKey): void {
|
|
189
216
|
if (this.isDestroyed) {
|
|
190
217
|
return
|
|
191
218
|
}
|
|
192
219
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
// @ts-ignore
|
|
196
|
-
: nameOrPluginKey.key
|
|
220
|
+
// @ts-ignore
|
|
221
|
+
const name = typeof nameOrPluginKey === 'string' ? `${nameOrPluginKey}$` : nameOrPluginKey.key
|
|
197
222
|
|
|
198
223
|
const state = this.state.reconfigure({
|
|
199
224
|
// @ts-ignore
|
|
@@ -207,7 +232,7 @@ export class Editor extends EventEmitter {
|
|
|
207
232
|
* Creates an extension manager.
|
|
208
233
|
*/
|
|
209
234
|
private createExtensionManager(): void {
|
|
210
|
-
const coreExtensions = Object.
|
|
235
|
+
const coreExtensions = this.options.enableCoreExtensions ? Object.values(extensions) : []
|
|
211
236
|
const allExtensions = [...coreExtensions, ...this.options.extensions].filter(extension => {
|
|
212
237
|
return ['extension', 'node', 'mark'].includes(extension?.type)
|
|
213
238
|
})
|
|
@@ -219,7 +244,9 @@ export class Editor extends EventEmitter {
|
|
|
219
244
|
* Creates an command manager.
|
|
220
245
|
*/
|
|
221
246
|
private createCommandManager(): void {
|
|
222
|
-
this.commandManager = new CommandManager(
|
|
247
|
+
this.commandManager = new CommandManager({
|
|
248
|
+
editor: this,
|
|
249
|
+
})
|
|
223
250
|
}
|
|
224
251
|
|
|
225
252
|
/**
|
|
@@ -233,11 +260,15 @@ export class Editor extends EventEmitter {
|
|
|
233
260
|
* Creates a ProseMirror view.
|
|
234
261
|
*/
|
|
235
262
|
private createView(): void {
|
|
263
|
+
const doc = createDocument(this.options.content, this.schema, this.options.parseOptions)
|
|
264
|
+
const selection = resolveFocusPosition(doc, this.options.autofocus)
|
|
265
|
+
|
|
236
266
|
this.view = new EditorView(this.options.element, {
|
|
237
267
|
...this.options.editorProps,
|
|
238
268
|
dispatchTransaction: this.dispatchTransaction.bind(this),
|
|
239
269
|
state: EditorState.create({
|
|
240
|
-
doc
|
|
270
|
+
doc,
|
|
271
|
+
selection: selection || undefined,
|
|
241
272
|
}),
|
|
242
273
|
})
|
|
243
274
|
|
|
@@ -254,6 +285,7 @@ export class Editor extends EventEmitter {
|
|
|
254
285
|
// Let’s store the editor instance in the DOM element.
|
|
255
286
|
// So we’ll have access to it for tests.
|
|
256
287
|
const dom = this.view.dom as HTMLElement
|
|
288
|
+
|
|
257
289
|
dom.editor = this
|
|
258
290
|
}
|
|
259
291
|
|
|
@@ -288,7 +320,9 @@ export class Editor extends EventEmitter {
|
|
|
288
320
|
* @param transaction An editor state transaction
|
|
289
321
|
*/
|
|
290
322
|
private dispatchTransaction(transaction: Transaction): void {
|
|
291
|
-
if
|
|
323
|
+
// if the editor / the view of the editor was destroyed
|
|
324
|
+
// the transaction should not be dispatched as there is no view anymore.
|
|
325
|
+
if (this.view.isDestroyed) {
|
|
292
326
|
return
|
|
293
327
|
}
|
|
294
328
|
|
|
@@ -316,6 +350,7 @@ export class Editor extends EventEmitter {
|
|
|
316
350
|
if (selectionHasChanged) {
|
|
317
351
|
this.emit('selectionUpdate', {
|
|
318
352
|
editor: this,
|
|
353
|
+
transaction,
|
|
319
354
|
})
|
|
320
355
|
}
|
|
321
356
|
|
|
@@ -326,6 +361,7 @@ export class Editor extends EventEmitter {
|
|
|
326
361
|
this.emit('focus', {
|
|
327
362
|
editor: this,
|
|
328
363
|
event: focus.event,
|
|
364
|
+
transaction,
|
|
329
365
|
})
|
|
330
366
|
}
|
|
331
367
|
|
|
@@ -333,6 +369,7 @@ export class Editor extends EventEmitter {
|
|
|
333
369
|
this.emit('blur', {
|
|
334
370
|
editor: this,
|
|
335
371
|
event: blur.event,
|
|
372
|
+
transaction,
|
|
336
373
|
})
|
|
337
374
|
}
|
|
338
375
|
|
|
@@ -347,21 +384,10 @@ export class Editor extends EventEmitter {
|
|
|
347
384
|
}
|
|
348
385
|
|
|
349
386
|
/**
|
|
350
|
-
* Get attributes of the currently selected node.
|
|
351
|
-
*
|
|
352
|
-
* @param name Name of the node
|
|
387
|
+
* Get attributes of the currently selected node or mark.
|
|
353
388
|
*/
|
|
354
|
-
public
|
|
355
|
-
return
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
/**
|
|
359
|
-
* Get attributes of the currently selected mark.
|
|
360
|
-
*
|
|
361
|
-
* @param name Name of the mark
|
|
362
|
-
*/
|
|
363
|
-
public getMarkAttributes(name: string): AnyObject {
|
|
364
|
-
return getMarkAttributes(this.state, name)
|
|
389
|
+
public getAttributes(nameOrType: string | NodeType | MarkType): Record<string, any> {
|
|
390
|
+
return getAttributes(this.state, nameOrType)
|
|
365
391
|
}
|
|
366
392
|
|
|
367
393
|
/**
|
|
@@ -370,16 +396,12 @@ export class Editor extends EventEmitter {
|
|
|
370
396
|
* @param name Name of the node or mark
|
|
371
397
|
* @param attributes Attributes of the node or mark
|
|
372
398
|
*/
|
|
373
|
-
public isActive(name: string, attributes?: {}): boolean
|
|
374
|
-
public isActive(attributes: {}): boolean
|
|
399
|
+
public isActive(name: string, attributes?: {}): boolean
|
|
400
|
+
public isActive(attributes: {}): boolean
|
|
375
401
|
public isActive(nameOrAttributes: string, attributesOrUndefined?: {}): boolean {
|
|
376
|
-
const name = typeof nameOrAttributes === 'string'
|
|
377
|
-
? nameOrAttributes
|
|
378
|
-
: null
|
|
402
|
+
const name = typeof nameOrAttributes === 'string' ? nameOrAttributes : null
|
|
379
403
|
|
|
380
|
-
const attributes = typeof nameOrAttributes === 'string'
|
|
381
|
-
? attributesOrUndefined
|
|
382
|
-
: nameOrAttributes
|
|
404
|
+
const attributes = typeof nameOrAttributes === 'string' ? attributesOrUndefined : nameOrAttributes
|
|
383
405
|
|
|
384
406
|
return isActive(this.state, name, attributes)
|
|
385
407
|
}
|
|
@@ -387,7 +409,7 @@ export class Editor extends EventEmitter {
|
|
|
387
409
|
/**
|
|
388
410
|
* Get the document as JSON.
|
|
389
411
|
*/
|
|
390
|
-
public getJSON():
|
|
412
|
+
public getJSON(): JSONContent {
|
|
391
413
|
return this.state.doc.toJSON()
|
|
392
414
|
}
|
|
393
415
|
|
|
@@ -395,7 +417,25 @@ export class Editor extends EventEmitter {
|
|
|
395
417
|
* Get the document as HTML.
|
|
396
418
|
*/
|
|
397
419
|
public getHTML(): string {
|
|
398
|
-
return getHTMLFromFragment(this.state.doc, this.schema)
|
|
420
|
+
return getHTMLFromFragment(this.state.doc.content, this.schema)
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Get the document as text.
|
|
425
|
+
*/
|
|
426
|
+
public getText(options?: {
|
|
427
|
+
blockSeparator?: string
|
|
428
|
+
textSerializers?: Record<string, TextSerializer>
|
|
429
|
+
}): string {
|
|
430
|
+
const { blockSeparator = '\n\n', textSerializers = {} } = options || {}
|
|
431
|
+
|
|
432
|
+
return getText(this.state.doc, {
|
|
433
|
+
blockSeparator,
|
|
434
|
+
textSerializers: {
|
|
435
|
+
...getTextSerializersFromSchema(this.schema),
|
|
436
|
+
...textSerializers,
|
|
437
|
+
},
|
|
438
|
+
})
|
|
399
439
|
}
|
|
400
440
|
|
|
401
441
|
/**
|
|
@@ -407,8 +447,14 @@ export class Editor extends EventEmitter {
|
|
|
407
447
|
|
|
408
448
|
/**
|
|
409
449
|
* Get the number of characters for the current document.
|
|
450
|
+
*
|
|
451
|
+
* @deprecated
|
|
410
452
|
*/
|
|
411
453
|
public getCharacterCount(): number {
|
|
454
|
+
console.warn(
|
|
455
|
+
'[tiptap warn]: "editor.getCharacterCount()" is deprecated. Please use "editor.storage.characterCount.characters()" instead.',
|
|
456
|
+
)
|
|
457
|
+
|
|
412
458
|
return this.state.doc.content.size - 2
|
|
413
459
|
}
|
|
414
460
|
|
|
@@ -416,8 +462,6 @@ export class Editor extends EventEmitter {
|
|
|
416
462
|
* Destroy the editor.
|
|
417
463
|
*/
|
|
418
464
|
public destroy(): void {
|
|
419
|
-
this.resizeObserver?.unobserve(this.view.dom)
|
|
420
|
-
|
|
421
465
|
this.emit('destroy')
|
|
422
466
|
|
|
423
467
|
if (this.view) {
|
|
@@ -425,7 +469,6 @@ export class Editor extends EventEmitter {
|
|
|
425
469
|
}
|
|
426
470
|
|
|
427
471
|
this.removeAllListeners()
|
|
428
|
-
removeElement(this.css)
|
|
429
472
|
}
|
|
430
473
|
|
|
431
474
|
/**
|
|
@@ -435,5 +478,4 @@ export class Editor extends EventEmitter {
|
|
|
435
478
|
// @ts-ignore
|
|
436
479
|
return !this.view?.docView
|
|
437
480
|
}
|
|
438
|
-
|
|
439
481
|
}
|
package/src/EventEmitter.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
type StringKeyOf<T> = Extract<keyof T, string>
|
|
2
|
+
type CallbackType<
|
|
3
|
+
T extends Record<string, any>,
|
|
4
|
+
EventName extends StringKeyOf<T>,
|
|
5
|
+
> = T[EventName] extends any[] ? T[EventName] : [T[EventName]]
|
|
6
|
+
type CallbackFunction<
|
|
7
|
+
T extends Record<string, any>,
|
|
8
|
+
EventName extends StringKeyOf<T>,
|
|
9
|
+
> = (...props: CallbackType<T, EventName>) => any
|
|
10
|
+
|
|
11
|
+
export class EventEmitter<T extends Record<string, any>> {
|
|
2
12
|
|
|
3
13
|
private callbacks: { [key: string]: Function[] } = {}
|
|
4
14
|
|
|
5
|
-
public on(event:
|
|
15
|
+
public on<EventName extends StringKeyOf<T>>(event: EventName, fn: CallbackFunction<T, EventName>): this {
|
|
6
16
|
if (!this.callbacks[event]) {
|
|
7
17
|
this.callbacks[event] = []
|
|
8
18
|
}
|
|
@@ -12,7 +22,7 @@ export default class EventEmitter {
|
|
|
12
22
|
return this
|
|
13
23
|
}
|
|
14
24
|
|
|
15
|
-
protected emit(event:
|
|
25
|
+
protected emit<EventName extends StringKeyOf<T>>(event: EventName, ...args: CallbackType<T, EventName>): this {
|
|
16
26
|
const callbacks = this.callbacks[event]
|
|
17
27
|
|
|
18
28
|
if (callbacks) {
|
|
@@ -22,7 +32,7 @@ export default class EventEmitter {
|
|
|
22
32
|
return this
|
|
23
33
|
}
|
|
24
34
|
|
|
25
|
-
public off(event:
|
|
35
|
+
public off<EventName extends StringKeyOf<T>>(event: EventName, fn?: CallbackFunction<T, EventName>): this {
|
|
26
36
|
const callbacks = this.callbacks[event]
|
|
27
37
|
|
|
28
38
|
if (callbacks) {
|