@tiptap/core 2.0.0-beta.2 → 2.0.0-beta.200
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/packages/core/src/CommandManager.d.ts +13 -6
- package/dist/packages/core/src/Editor.d.ts +27 -25
- package/dist/packages/core/src/EventEmitter.d.ts +8 -4
- package/dist/packages/core/src/Extension.d.ts +103 -26
- package/dist/packages/core/src/ExtensionManager.d.ts +8 -12
- package/dist/packages/core/src/InputRule.d.ts +42 -0
- package/dist/packages/core/src/Mark.d.ts +148 -31
- package/dist/packages/core/src/Node.d.ts +162 -33
- package/dist/packages/core/src/NodeView.d.ts +27 -0
- 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/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 +3 -3
- 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 +16 -0
- package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
- package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
- package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
- package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
- package/dist/packages/core/src/commands/lift.d.ts +3 -3
- package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
- package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
- package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
- package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
- 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 +3 -3
- package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
- package/dist/packages/core/src/commands/setNode.d.ts +3 -3
- 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 +3 -3
- package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
- package/dist/packages/core/src/commands/splitListItem.d.ts +3 -3
- package/dist/packages/core/src/commands/toggleList.d.ts +3 -3
- package/dist/packages/core/src/commands/toggleMark.d.ts +8 -3
- package/dist/packages/core/src/commands/toggleNode.d.ts +3 -3
- package/dist/packages/core/src/commands/toggleWrap.d.ts +3 -3
- 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 +8 -3
- package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
- package/dist/packages/core/src/commands/wrapIn.d.ts +3 -3
- package/dist/packages/core/src/commands/wrapInList.d.ts +3 -3
- package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
- package/dist/packages/core/src/extensions/commands.d.ts +2 -91
- 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 -0
- package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +7 -0
- package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
- package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
- package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
- package/dist/packages/core/src/helpers/findParentNode.d.ts +2 -3
- package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +2 -2
- 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 +2 -3
- package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
- package/dist/packages/core/src/helpers/getMarkType.d.ts +1 -1
- package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
- package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +2 -3
- package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
- package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
- package/dist/packages/core/src/helpers/getSchema.d.ts +1 -1
- package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
- package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +1 -1
- package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +1 -1
- 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 +33 -0
- package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
- package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
- 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 +2 -3
- package/dist/packages/core/src/helpers/isNodeActive.d.ts +2 -3
- package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -0
- package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
- package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
- 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 +1 -1
- package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
- package/dist/packages/core/src/index.d.ts +15 -20
- package/dist/packages/core/src/inputRules/index.d.ts +5 -0
- package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
- package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
- 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 +23 -0
- package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
- package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
- 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 +120 -53
- 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 +3 -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/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/dist/tiptap-core.cjs.js +2896 -1261
- package/dist/tiptap-core.cjs.js.map +1 -1
- package/dist/tiptap-core.esm.js +2889 -1290
- package/dist/tiptap-core.esm.js.map +1 -1
- package/dist/tiptap-core.umd.js +2899 -1263
- package/dist/tiptap-core.umd.js.map +1 -1
- package/package.json +16 -20
- package/src/CommandManager.ts +64 -65
- package/src/Editor.ts +133 -98
- package/src/EventEmitter.ts +14 -4
- package/src/Extension.ts +198 -41
- package/src/ExtensionManager.ts +263 -78
- package/src/InputRule.ts +265 -0
- package/src/Mark.ts +285 -49
- package/src/Node.ts +284 -56
- package/src/NodeView.ts +261 -0
- package/src/PasteRule.ts +280 -0
- package/src/Tracker.ts +42 -0
- package/src/commands/blur.ts +12 -6
- package/src/commands/clearContent.ts +3 -3
- package/src/commands/clearNodes.ts +32 -18
- package/src/commands/command.ts +2 -2
- package/src/commands/createParagraphNear.ts +4 -3
- package/src/commands/deleteNode.ts +37 -0
- package/src/commands/deleteRange.ts +3 -3
- package/src/commands/deleteSelection.ts +4 -3
- package/src/commands/enter.ts +3 -3
- package/src/commands/exitCode.ts +4 -3
- package/src/commands/extendMarkRange.ts +12 -11
- 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 +24 -0
- package/src/commands/insertContentAt.ts +108 -0
- package/src/commands/joinBackward.ts +4 -3
- package/src/commands/joinForward.ts +4 -3
- package/src/commands/keyboardShortcut.ts +6 -6
- package/src/commands/lift.ts +6 -5
- package/src/commands/liftEmptyBlock.ts +4 -3
- package/src/commands/liftListItem.ts +6 -5
- package/src/commands/newlineInCode.ts +4 -3
- package/src/commands/resetAttributes.ts +62 -0
- package/src/commands/scrollIntoView.ts +3 -3
- package/src/commands/selectAll.ts +8 -6
- package/src/commands/selectNodeBackward.ts +4 -3
- package/src/commands/selectNodeForward.ts +4 -3
- package/src/commands/selectParentNode.ts +4 -3
- package/src/commands/selectTextblockEnd.ts +20 -0
- package/src/commands/selectTextblockStart.ts +20 -0
- package/src/commands/setContent.ts +12 -9
- package/src/commands/setMark.ts +83 -15
- package/src/commands/setMeta.ts +18 -0
- package/src/commands/setNode.ts +29 -7
- package/src/commands/setNodeSelection.ts +27 -0
- package/src/commands/setTextSelection.ts +33 -0
- package/src/commands/sinkListItem.ts +6 -5
- package/src/commands/splitBlock.ts +20 -23
- package/src/commands/splitListItem.ts +45 -18
- package/src/commands/toggleList.ts +83 -18
- package/src/commands/toggleMark.ts +18 -7
- package/src/commands/toggleNode.ts +6 -5
- package/src/commands/toggleWrap.ts +9 -9
- package/src/commands/undoInputRule.ts +34 -5
- package/src/commands/unsetAllMarks.ts +8 -10
- package/src/commands/unsetMark.ts +31 -13
- package/src/commands/updateAttributes.ts +73 -0
- package/src/commands/wrapIn.ts +5 -10
- package/src/commands/wrapInList.ts +6 -5
- package/src/extensions/clipboardTextSerializer.ts +14 -35
- package/src/extensions/commands.ts +3 -135
- package/src/extensions/editable.ts +1 -0
- package/src/extensions/focusEvents.ts +3 -5
- package/src/extensions/index.ts +1 -0
- package/src/extensions/keymap.ts +110 -13
- package/src/extensions/tabindex.ts +18 -0
- package/src/helpers/combineTransactionSteps.ts +18 -0
- package/src/helpers/createChainableState.ts +38 -0
- package/src/helpers/createDocument.ts +12 -0
- package/src/helpers/createNodeFromContent.ts +57 -0
- package/src/helpers/defaultBlockAt.ts +13 -0
- package/src/helpers/findChildren.ts +18 -0
- package/src/helpers/findChildrenInRange.ts +32 -0
- package/src/helpers/findParentNode.ts +3 -2
- package/src/helpers/findParentNodeClosestToPos.ts +3 -2
- package/src/helpers/generateHTML.ts +6 -5
- package/src/helpers/generateJSON.ts +14 -0
- package/src/helpers/generateText.ts +30 -0
- package/src/helpers/getAttributes.ts +28 -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 +6 -5
- package/src/helpers/getMarkAttributes.ts +14 -10
- package/src/helpers/getMarkRange.ts +41 -8
- package/src/helpers/getMarkType.ts +5 -1
- package/src/helpers/getMarksBetween.ts +32 -10
- package/src/helpers/getNodeAttributes.ts +9 -9
- package/src/helpers/getNodeType.ts +5 -1
- package/src/helpers/getRenderedAttributes.ts +6 -7
- package/src/helpers/getSchema.ts +7 -137
- package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
- package/src/helpers/getSchemaTypeByName.ts +2 -10
- package/src/helpers/getSchemaTypeNameByName.ts +1 -1
- package/src/helpers/getSplittedAttributes.ts +4 -4
- package/src/helpers/getText.ts +19 -0
- package/src/helpers/getTextBetween.ts +49 -0
- package/src/helpers/getTextContentFromNodes.ts +21 -0
- package/src/helpers/getTextSerializersFromSchema.ts +10 -0
- package/src/helpers/index.ts +33 -0
- package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
- package/src/helpers/isActive.ts +5 -5
- package/src/helpers/isExtensionRulesEnabled.ts +15 -0
- package/src/helpers/isList.ts +14 -7
- package/src/helpers/isMarkActive.ts +45 -20
- package/src/helpers/isNodeActive.ts +28 -35
- package/src/helpers/isNodeEmpty.ts +8 -0
- package/src/helpers/isNodeSelection.ts +2 -3
- package/src/helpers/isTextSelection.ts +2 -3
- package/src/helpers/posToDOMRect.ts +35 -0
- package/src/helpers/resolveFocusPosition.ts +43 -0
- package/src/helpers/selectionToInsertionEnd.ts +2 -2
- package/src/helpers/splitExtensions.ts +3 -3
- package/src/index.ts +16 -22
- package/src/inputRules/index.ts +5 -0
- package/src/inputRules/markInputRule.ts +59 -39
- package/src/inputRules/nodeInputRule.ts +45 -11
- package/src/inputRules/textInputRule.ts +35 -0
- package/src/inputRules/textblockTypeInputRule.ts +38 -0
- package/src/inputRules/wrappingInputRule.ts +60 -0
- package/src/pasteRules/index.ts +3 -0
- package/src/pasteRules/markPasteRule.ts +62 -53
- package/src/pasteRules/nodePasteRule.ts +39 -0
- package/src/pasteRules/textPasteRule.ts +35 -0
- package/src/style.ts +16 -3
- package/src/types.ts +132 -47
- 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 +3 -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 -198
- package/LICENSE.md +0 -21
- package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
- package/dist/packages/core/src/commands/insertText.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/src/commands/insertHTML.ts +0 -28
- package/src/commands/insertText.ts +0 -20
- package/src/commands/replace.ts +0 -20
- package/src/commands/replaceRange.ts +0 -36
- package/src/commands/resetNodeAttributes.ts +0 -29
- package/src/commands/updateNodeAttributes.ts +0 -31
- 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,26 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MarkType, NodeType, Schema } from 'prosemirror-model'
|
|
2
|
+
import {
|
|
3
|
+
EditorState,
|
|
4
|
+
Plugin,
|
|
5
|
+
PluginKey,
|
|
6
|
+
Transaction,
|
|
7
|
+
} from 'prosemirror-state'
|
|
2
8
|
import { EditorView } from 'prosemirror-view'
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
9
|
+
|
|
10
|
+
import { CommandManager } from './CommandManager'
|
|
11
|
+
import { EventEmitter } from './EventEmitter'
|
|
12
|
+
import { ExtensionManager } from './ExtensionManager'
|
|
13
|
+
import * as extensions from './extensions'
|
|
14
|
+
import { createDocument } from './helpers/createDocument'
|
|
15
|
+
import { getAttributes } from './helpers/getAttributes'
|
|
16
|
+
import { getHTMLFromFragment } from './helpers/getHTMLFromFragment'
|
|
17
|
+
import { getText } from './helpers/getText'
|
|
18
|
+
import { getTextSerializersFromSchema } from './helpers/getTextSerializersFromSchema'
|
|
19
|
+
import { isActive } from './helpers/isActive'
|
|
20
|
+
import { isNodeEmpty } from './helpers/isNodeEmpty'
|
|
21
|
+
import { resolveFocusPosition } from './helpers/resolveFocusPosition'
|
|
22
|
+
import { style } from './style'
|
|
14
23
|
import {
|
|
15
|
-
EditorOptions,
|
|
16
|
-
Content,
|
|
17
24
|
CanCommands,
|
|
18
25
|
ChainedCommands,
|
|
26
|
+
EditorEvents,
|
|
27
|
+
EditorOptions,
|
|
28
|
+
JSONContent,
|
|
19
29
|
SingleCommands,
|
|
20
|
-
|
|
30
|
+
TextSerializer,
|
|
21
31
|
} from './types'
|
|
22
|
-
import
|
|
23
|
-
import
|
|
32
|
+
import { createStyleTag } from './utilities/createStyleTag'
|
|
33
|
+
import { isFunction } from './utilities/isFunction'
|
|
24
34
|
|
|
25
35
|
export { extensions }
|
|
26
36
|
|
|
@@ -28,7 +38,7 @@ export interface HTMLElement {
|
|
|
28
38
|
editor?: Editor
|
|
29
39
|
}
|
|
30
40
|
|
|
31
|
-
export class Editor extends EventEmitter {
|
|
41
|
+
export class Editor extends EventEmitter<EditorEvents> {
|
|
32
42
|
|
|
33
43
|
private commandManager!: CommandManager
|
|
34
44
|
|
|
@@ -42,10 +52,13 @@ export class Editor extends EventEmitter {
|
|
|
42
52
|
|
|
43
53
|
public isFocused = false
|
|
44
54
|
|
|
55
|
+
public extensionStorage: Record<string, any> = {}
|
|
56
|
+
|
|
45
57
|
public options: EditorOptions = {
|
|
46
58
|
element: document.createElement('div'),
|
|
47
59
|
content: '',
|
|
48
60
|
injectCSS: true,
|
|
61
|
+
injectNonce: undefined,
|
|
49
62
|
extensions: [],
|
|
50
63
|
autofocus: false,
|
|
51
64
|
editable: true,
|
|
@@ -53,10 +66,11 @@ export class Editor extends EventEmitter {
|
|
|
53
66
|
parseOptions: {},
|
|
54
67
|
enableInputRules: true,
|
|
55
68
|
enablePasteRules: true,
|
|
69
|
+
enableCoreExtensions: true,
|
|
70
|
+
onBeforeCreate: () => null,
|
|
56
71
|
onCreate: () => null,
|
|
57
72
|
onUpdate: () => null,
|
|
58
73
|
onSelectionUpdate: () => null,
|
|
59
|
-
onViewUpdate: () => null,
|
|
60
74
|
onTransaction: () => null,
|
|
61
75
|
onFocus: () => null,
|
|
62
76
|
onBlur: () => null,
|
|
@@ -69,42 +83,54 @@ export class Editor extends EventEmitter {
|
|
|
69
83
|
this.createExtensionManager()
|
|
70
84
|
this.createCommandManager()
|
|
71
85
|
this.createSchema()
|
|
86
|
+
this.on('beforeCreate', this.options.onBeforeCreate)
|
|
87
|
+
this.emit('beforeCreate', { editor: this })
|
|
72
88
|
this.createView()
|
|
73
89
|
this.injectCSS()
|
|
74
90
|
this.on('create', this.options.onCreate)
|
|
75
91
|
this.on('update', this.options.onUpdate)
|
|
76
92
|
this.on('selectionUpdate', this.options.onSelectionUpdate)
|
|
77
|
-
this.on('viewUpdate', this.options.onViewUpdate)
|
|
78
93
|
this.on('transaction', this.options.onTransaction)
|
|
79
94
|
this.on('focus', this.options.onFocus)
|
|
80
95
|
this.on('blur', this.options.onBlur)
|
|
81
96
|
this.on('destroy', this.options.onDestroy)
|
|
82
97
|
|
|
83
98
|
window.setTimeout(() => {
|
|
99
|
+
if (this.isDestroyed) {
|
|
100
|
+
return
|
|
101
|
+
}
|
|
102
|
+
|
|
84
103
|
this.commands.focus(this.options.autofocus)
|
|
85
104
|
this.emit('create', { editor: this })
|
|
86
105
|
}, 0)
|
|
87
106
|
}
|
|
88
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Returns the editor storage.
|
|
110
|
+
*/
|
|
111
|
+
public get storage(): Record<string, any> {
|
|
112
|
+
return this.extensionStorage
|
|
113
|
+
}
|
|
114
|
+
|
|
89
115
|
/**
|
|
90
116
|
* An object of all registered commands.
|
|
91
117
|
*/
|
|
92
118
|
public get commands(): SingleCommands {
|
|
93
|
-
return this.commandManager.
|
|
119
|
+
return this.commandManager.commands
|
|
94
120
|
}
|
|
95
121
|
|
|
96
122
|
/**
|
|
97
123
|
* Create a command chain to call multiple commands at once.
|
|
98
124
|
*/
|
|
99
125
|
public chain(): ChainedCommands {
|
|
100
|
-
return this.commandManager.
|
|
126
|
+
return this.commandManager.chain()
|
|
101
127
|
}
|
|
102
128
|
|
|
103
129
|
/**
|
|
104
130
|
* Check if a command or a command chain can be executed. Without executing it.
|
|
105
131
|
*/
|
|
106
132
|
public can(): CanCommands {
|
|
107
|
-
return this.commandManager.
|
|
133
|
+
return this.commandManager.can()
|
|
108
134
|
}
|
|
109
135
|
|
|
110
136
|
/**
|
|
@@ -112,7 +138,7 @@ export class Editor extends EventEmitter {
|
|
|
112
138
|
*/
|
|
113
139
|
private injectCSS(): void {
|
|
114
140
|
if (this.options.injectCSS && document) {
|
|
115
|
-
this.css = createStyleTag(style)
|
|
141
|
+
this.css = createStyleTag(style, this.options.injectNonce)
|
|
116
142
|
}
|
|
117
143
|
}
|
|
118
144
|
|
|
@@ -122,7 +148,20 @@ export class Editor extends EventEmitter {
|
|
|
122
148
|
* @param options A list of options
|
|
123
149
|
*/
|
|
124
150
|
public setOptions(options: Partial<EditorOptions> = {}): void {
|
|
125
|
-
this.options = {
|
|
151
|
+
this.options = {
|
|
152
|
+
...this.options,
|
|
153
|
+
...options,
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!this.view || !this.state || this.isDestroyed) {
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (this.options.editorProps) {
|
|
161
|
+
this.view.setProps(this.options.editorProps)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
this.view.updateState(this.state)
|
|
126
165
|
}
|
|
127
166
|
|
|
128
167
|
/**
|
|
@@ -130,17 +169,19 @@ export class Editor extends EventEmitter {
|
|
|
130
169
|
*/
|
|
131
170
|
public setEditable(editable: boolean): void {
|
|
132
171
|
this.setOptions({ editable })
|
|
133
|
-
|
|
134
|
-
if (this.view && this.state && !this.isDestroyed) {
|
|
135
|
-
this.view.updateState(this.state)
|
|
136
|
-
}
|
|
172
|
+
this.emit('update', { editor: this, transaction: this.state.tr })
|
|
137
173
|
}
|
|
138
174
|
|
|
139
175
|
/**
|
|
140
176
|
* Returns whether the editor is editable.
|
|
141
177
|
*/
|
|
142
178
|
public get isEditable(): boolean {
|
|
143
|
-
|
|
179
|
+
// since plugins are applied after creating the view
|
|
180
|
+
// `editable` is always `true` for one tick.
|
|
181
|
+
// that’s why we also have to check for `options.editable`
|
|
182
|
+
return this.options.editable
|
|
183
|
+
&& this.view
|
|
184
|
+
&& this.view.editable
|
|
144
185
|
}
|
|
145
186
|
|
|
146
187
|
/**
|
|
@@ -157,8 +198,8 @@ export class Editor extends EventEmitter {
|
|
|
157
198
|
* @param handlePlugins Control how to merge the plugin into the existing plugins.
|
|
158
199
|
*/
|
|
159
200
|
public registerPlugin(plugin: Plugin, handlePlugins?: (newPlugin: Plugin, plugins: Plugin[]) => Plugin[]): void {
|
|
160
|
-
const plugins =
|
|
161
|
-
? handlePlugins(plugin, this.state.plugins)
|
|
201
|
+
const plugins = isFunction(handlePlugins)
|
|
202
|
+
? handlePlugins(plugin, [...this.state.plugins])
|
|
162
203
|
: [...this.state.plugins, plugin]
|
|
163
204
|
|
|
164
205
|
const state = this.state.reconfigure({ plugins })
|
|
@@ -169,12 +210,21 @@ export class Editor extends EventEmitter {
|
|
|
169
210
|
/**
|
|
170
211
|
* Unregister a ProseMirror plugin.
|
|
171
212
|
*
|
|
172
|
-
* @param
|
|
213
|
+
* @param nameOrPluginKey The plugins name
|
|
173
214
|
*/
|
|
174
|
-
public unregisterPlugin(
|
|
215
|
+
public unregisterPlugin(nameOrPluginKey: string | PluginKey): void {
|
|
216
|
+
if (this.isDestroyed) {
|
|
217
|
+
return
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const name = typeof nameOrPluginKey === 'string'
|
|
221
|
+
? `${nameOrPluginKey}$`
|
|
222
|
+
// @ts-ignore
|
|
223
|
+
: nameOrPluginKey.key
|
|
224
|
+
|
|
175
225
|
const state = this.state.reconfigure({
|
|
176
226
|
// @ts-ignore
|
|
177
|
-
plugins: this.state.plugins.filter(plugin => !plugin.key.startsWith(
|
|
227
|
+
plugins: this.state.plugins.filter(plugin => !plugin.key.startsWith(name)),
|
|
178
228
|
})
|
|
179
229
|
|
|
180
230
|
this.view.updateState(state)
|
|
@@ -184,7 +234,9 @@ export class Editor extends EventEmitter {
|
|
|
184
234
|
* Creates an extension manager.
|
|
185
235
|
*/
|
|
186
236
|
private createExtensionManager(): void {
|
|
187
|
-
const coreExtensions =
|
|
237
|
+
const coreExtensions = this.options.enableCoreExtensions
|
|
238
|
+
? Object.values(extensions)
|
|
239
|
+
: []
|
|
188
240
|
const allExtensions = [...coreExtensions, ...this.options.extensions].filter(extension => {
|
|
189
241
|
return ['extension', 'node', 'mark'].includes(extension?.type)
|
|
190
242
|
})
|
|
@@ -196,7 +248,9 @@ export class Editor extends EventEmitter {
|
|
|
196
248
|
* Creates an command manager.
|
|
197
249
|
*/
|
|
198
250
|
private createCommandManager(): void {
|
|
199
|
-
this.commandManager = new CommandManager(
|
|
251
|
+
this.commandManager = new CommandManager({
|
|
252
|
+
editor: this,
|
|
253
|
+
})
|
|
200
254
|
}
|
|
201
255
|
|
|
202
256
|
/**
|
|
@@ -210,27 +264,22 @@ export class Editor extends EventEmitter {
|
|
|
210
264
|
* Creates a ProseMirror view.
|
|
211
265
|
*/
|
|
212
266
|
private createView(): void {
|
|
267
|
+
const doc = createDocument(this.options.content, this.schema, this.options.parseOptions)
|
|
268
|
+
const selection = resolveFocusPosition(doc, this.options.autofocus)
|
|
269
|
+
|
|
213
270
|
this.view = new EditorView(this.options.element, {
|
|
214
271
|
...this.options.editorProps,
|
|
215
272
|
dispatchTransaction: this.dispatchTransaction.bind(this),
|
|
216
273
|
state: EditorState.create({
|
|
217
|
-
doc
|
|
274
|
+
doc,
|
|
275
|
+
selection: selection || undefined,
|
|
218
276
|
}),
|
|
219
277
|
})
|
|
220
278
|
|
|
221
279
|
// `editor.view` is not yet available at this time.
|
|
222
280
|
// Therefore we will add all plugins and node views directly afterwards.
|
|
223
281
|
const newState = this.state.reconfigure({
|
|
224
|
-
plugins:
|
|
225
|
-
new Plugin({
|
|
226
|
-
view: () => ({
|
|
227
|
-
update: () => this.emit('viewUpdate', {
|
|
228
|
-
editor: this,
|
|
229
|
-
}),
|
|
230
|
-
}),
|
|
231
|
-
}),
|
|
232
|
-
...this.extensionManager.plugins,
|
|
233
|
-
],
|
|
282
|
+
plugins: this.extensionManager.plugins,
|
|
234
283
|
})
|
|
235
284
|
|
|
236
285
|
this.view.updateState(newState)
|
|
@@ -240,6 +289,7 @@ export class Editor extends EventEmitter {
|
|
|
240
289
|
// Let’s store the editor instance in the DOM element.
|
|
241
290
|
// So we’ll have access to it for tests.
|
|
242
291
|
const dom = this.view.dom as HTMLElement
|
|
292
|
+
|
|
243
293
|
dom.editor = this
|
|
244
294
|
}
|
|
245
295
|
|
|
@@ -252,34 +302,6 @@ export class Editor extends EventEmitter {
|
|
|
252
302
|
})
|
|
253
303
|
}
|
|
254
304
|
|
|
255
|
-
/**
|
|
256
|
-
* Creates a ProseMirror document.
|
|
257
|
-
*/
|
|
258
|
-
public createDocument = (content: Content, parseOptions = this.options.parseOptions): Node => {
|
|
259
|
-
if (content && typeof content === 'object') {
|
|
260
|
-
try {
|
|
261
|
-
return this.schema.nodeFromJSON(content)
|
|
262
|
-
} catch (error) {
|
|
263
|
-
console.warn(
|
|
264
|
-
'[tiptap warn]: Invalid content.',
|
|
265
|
-
'Passed value:',
|
|
266
|
-
content,
|
|
267
|
-
'Error:',
|
|
268
|
-
error,
|
|
269
|
-
)
|
|
270
|
-
return this.createDocument('')
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
if (typeof content === 'string') {
|
|
275
|
-
return DOMParser
|
|
276
|
-
.fromSchema(this.schema)
|
|
277
|
-
.parse(elementFromString(content), parseOptions)
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
return this.createDocument('')
|
|
281
|
-
}
|
|
282
|
-
|
|
283
305
|
public isCapturingTransaction = false
|
|
284
306
|
|
|
285
307
|
private capturedTransaction: Transaction | null = null
|
|
@@ -326,6 +348,7 @@ export class Editor extends EventEmitter {
|
|
|
326
348
|
if (selectionHasChanged) {
|
|
327
349
|
this.emit('selectionUpdate', {
|
|
328
350
|
editor: this,
|
|
351
|
+
transaction,
|
|
329
352
|
})
|
|
330
353
|
}
|
|
331
354
|
|
|
@@ -336,6 +359,7 @@ export class Editor extends EventEmitter {
|
|
|
336
359
|
this.emit('focus', {
|
|
337
360
|
editor: this,
|
|
338
361
|
event: focus.event,
|
|
362
|
+
transaction,
|
|
339
363
|
})
|
|
340
364
|
}
|
|
341
365
|
|
|
@@ -343,6 +367,7 @@ export class Editor extends EventEmitter {
|
|
|
343
367
|
this.emit('blur', {
|
|
344
368
|
editor: this,
|
|
345
369
|
event: blur.event,
|
|
370
|
+
transaction,
|
|
346
371
|
})
|
|
347
372
|
}
|
|
348
373
|
|
|
@@ -357,21 +382,10 @@ export class Editor extends EventEmitter {
|
|
|
357
382
|
}
|
|
358
383
|
|
|
359
384
|
/**
|
|
360
|
-
* Get attributes of the currently selected node.
|
|
361
|
-
*
|
|
362
|
-
* @param name Name of the node
|
|
385
|
+
* Get attributes of the currently selected node or mark.
|
|
363
386
|
*/
|
|
364
|
-
public
|
|
365
|
-
return
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/**
|
|
369
|
-
* Get attributes of the currently selected mark.
|
|
370
|
-
*
|
|
371
|
-
* @param name Name of the mark
|
|
372
|
-
*/
|
|
373
|
-
public getMarkAttributes(name: string): AnyObject {
|
|
374
|
-
return getMarkAttributes(this.state, name)
|
|
387
|
+
public getAttributes(nameOrType: string | NodeType | MarkType): Record<string, any> {
|
|
388
|
+
return getAttributes(this.state, nameOrType)
|
|
375
389
|
}
|
|
376
390
|
|
|
377
391
|
/**
|
|
@@ -397,7 +411,7 @@ export class Editor extends EventEmitter {
|
|
|
397
411
|
/**
|
|
398
412
|
* Get the document as JSON.
|
|
399
413
|
*/
|
|
400
|
-
public getJSON():
|
|
414
|
+
public getJSON(): JSONContent {
|
|
401
415
|
return this.state.doc.toJSON()
|
|
402
416
|
}
|
|
403
417
|
|
|
@@ -405,23 +419,45 @@ export class Editor extends EventEmitter {
|
|
|
405
419
|
* Get the document as HTML.
|
|
406
420
|
*/
|
|
407
421
|
public getHTML(): string {
|
|
408
|
-
return getHTMLFromFragment(this.state.doc, this.schema)
|
|
422
|
+
return getHTMLFromFragment(this.state.doc.content, this.schema)
|
|
409
423
|
}
|
|
410
424
|
|
|
411
425
|
/**
|
|
412
|
-
*
|
|
426
|
+
* Get the document as text.
|
|
413
427
|
*/
|
|
414
|
-
public
|
|
415
|
-
|
|
416
|
-
|
|
428
|
+
public getText(options?: {
|
|
429
|
+
blockSeparator?: string,
|
|
430
|
+
textSerializers?: Record<string, TextSerializer>,
|
|
431
|
+
}): string {
|
|
432
|
+
const {
|
|
433
|
+
blockSeparator = '\n\n',
|
|
434
|
+
textSerializers = {},
|
|
435
|
+
} = options || {}
|
|
436
|
+
|
|
437
|
+
return getText(this.state.doc, {
|
|
438
|
+
blockSeparator,
|
|
439
|
+
textSerializers: {
|
|
440
|
+
...textSerializers,
|
|
441
|
+
...getTextSerializersFromSchema(this.schema),
|
|
442
|
+
},
|
|
443
|
+
})
|
|
444
|
+
}
|
|
417
445
|
|
|
418
|
-
|
|
446
|
+
/**
|
|
447
|
+
* Check if there is no content.
|
|
448
|
+
*/
|
|
449
|
+
public get isEmpty(): boolean {
|
|
450
|
+
return isNodeEmpty(this.state.doc)
|
|
419
451
|
}
|
|
420
452
|
|
|
421
453
|
/**
|
|
422
454
|
* Get the number of characters for the current document.
|
|
455
|
+
*
|
|
456
|
+
* @deprecated
|
|
423
457
|
*/
|
|
424
458
|
public getCharacterCount(): number {
|
|
459
|
+
console.warn('[tiptap warn]: "editor.getCharacterCount()" is deprecated. Please use "editor.storage.characterCount.characters()" instead.')
|
|
460
|
+
|
|
425
461
|
return this.state.doc.content.size - 2
|
|
426
462
|
}
|
|
427
463
|
|
|
@@ -436,7 +472,6 @@ export class Editor extends EventEmitter {
|
|
|
436
472
|
}
|
|
437
473
|
|
|
438
474
|
this.removeAllListeners()
|
|
439
|
-
removeElement(this.css)
|
|
440
475
|
}
|
|
441
476
|
|
|
442
477
|
/**
|
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) {
|