@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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Node as ProseMirrorNode, NodeType } from 'prosemirror-model'
|
|
2
|
+
import { canJoin, findWrapping } from 'prosemirror-transform'
|
|
3
|
+
|
|
4
|
+
import { InputRule, InputRuleFinder } from '../InputRule'
|
|
5
|
+
import { ExtendedRegExpMatchArray } from '../types'
|
|
6
|
+
import { callOrReturn } from '../utilities/callOrReturn'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Build an input rule for automatically wrapping a textblock when a
|
|
10
|
+
* given string is typed. When using a regular expresion you’ll
|
|
11
|
+
* probably want the regexp to start with `^`, so that the pattern can
|
|
12
|
+
* only occur at the start of a textblock.
|
|
13
|
+
*
|
|
14
|
+
* `type` is the type of node to wrap in.
|
|
15
|
+
*
|
|
16
|
+
* By default, if there’s a node with the same type above the newly
|
|
17
|
+
* wrapped node, the rule will try to join those
|
|
18
|
+
* two nodes. You can pass a join predicate, which takes a regular
|
|
19
|
+
* expression match and the node before the wrapped node, and can
|
|
20
|
+
* return a boolean to indicate whether a join should happen.
|
|
21
|
+
*/
|
|
22
|
+
export function wrappingInputRule(config: {
|
|
23
|
+
find: InputRuleFinder,
|
|
24
|
+
type: NodeType,
|
|
25
|
+
getAttributes?:
|
|
26
|
+
| Record<string, any>
|
|
27
|
+
| ((match: ExtendedRegExpMatchArray) => Record<string, any>)
|
|
28
|
+
| false
|
|
29
|
+
| null
|
|
30
|
+
,
|
|
31
|
+
joinPredicate?: (match: ExtendedRegExpMatchArray, node: ProseMirrorNode) => boolean,
|
|
32
|
+
}) {
|
|
33
|
+
return new InputRule({
|
|
34
|
+
find: config.find,
|
|
35
|
+
handler: ({ state, range, match }) => {
|
|
36
|
+
const attributes = callOrReturn(config.getAttributes, undefined, match) || {}
|
|
37
|
+
const tr = state.tr.delete(range.from, range.to)
|
|
38
|
+
const $start = tr.doc.resolve(range.from)
|
|
39
|
+
const blockRange = $start.blockRange()
|
|
40
|
+
const wrapping = blockRange && findWrapping(blockRange, config.type, attributes)
|
|
41
|
+
|
|
42
|
+
if (!wrapping) {
|
|
43
|
+
return null
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
tr.wrap(blockRange, wrapping)
|
|
47
|
+
|
|
48
|
+
const before = tr.doc.resolve(range.from - 1).nodeBefore
|
|
49
|
+
|
|
50
|
+
if (
|
|
51
|
+
before
|
|
52
|
+
&& before.type === config.type
|
|
53
|
+
&& canJoin(tr.doc, range.from - 1)
|
|
54
|
+
&& (!config.joinPredicate || config.joinPredicate(match, before))
|
|
55
|
+
) {
|
|
56
|
+
tr.join(range.from - 1)
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
})
|
|
60
|
+
}
|
|
@@ -1,61 +1,70 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
1
|
+
import { MarkType } from 'prosemirror-model'
|
|
2
|
+
|
|
3
|
+
import { getMarksBetween } from '../helpers/getMarksBetween'
|
|
4
|
+
import { PasteRule, PasteRuleFinder } from '../PasteRule'
|
|
5
|
+
import { ExtendedRegExpMatchArray } from '../types'
|
|
6
|
+
import { callOrReturn } from '../utilities/callOrReturn'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Build an paste rule that adds a mark when the
|
|
10
|
+
* matched text is pasted into it.
|
|
11
|
+
*/
|
|
12
|
+
export function markPasteRule(config: {
|
|
13
|
+
find: PasteRuleFinder,
|
|
14
|
+
type: MarkType,
|
|
15
|
+
getAttributes?:
|
|
16
|
+
| Record<string, any>
|
|
17
|
+
| ((match: ExtendedRegExpMatchArray) => Record<string, any>)
|
|
18
|
+
| false
|
|
19
|
+
| null
|
|
20
|
+
,
|
|
21
|
+
}) {
|
|
22
|
+
return new PasteRule({
|
|
23
|
+
find: config.find,
|
|
24
|
+
handler: ({ state, range, match }) => {
|
|
25
|
+
const attributes = callOrReturn(config.getAttributes, undefined, match)
|
|
26
|
+
|
|
27
|
+
if (attributes === false || attributes === null) {
|
|
28
|
+
return null
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const { tr } = state
|
|
32
|
+
const captureGroup = match[match.length - 1]
|
|
33
|
+
const fullMatch = match[0]
|
|
34
|
+
let markEnd = range.to
|
|
35
|
+
|
|
36
|
+
if (captureGroup) {
|
|
37
|
+
const startSpaces = fullMatch.search(/\S/)
|
|
38
|
+
const textStart = range.from + fullMatch.indexOf(captureGroup)
|
|
39
|
+
const textEnd = textStart + captureGroup.length
|
|
40
|
+
|
|
41
|
+
const excludedMarks = getMarksBetween(range.from, range.to, state.doc)
|
|
42
|
+
.filter(item => {
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
const excluded = item.mark.type.excluded as MarkType[]
|
|
45
|
+
|
|
46
|
+
return excluded.find(type => type === config.type && type !== item.mark.type)
|
|
47
|
+
})
|
|
48
|
+
.filter(item => item.to > textStart)
|
|
49
|
+
|
|
50
|
+
if (excludedMarks.length) {
|
|
51
|
+
return null
|
|
39
52
|
}
|
|
40
53
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
nodes.push(child.cut(pos))
|
|
54
|
+
if (textEnd < range.to) {
|
|
55
|
+
tr.delete(textEnd, range.to)
|
|
44
56
|
}
|
|
45
|
-
} else {
|
|
46
|
-
nodes.push(child.copy(handler(child.content, child)))
|
|
47
|
-
}
|
|
48
|
-
})
|
|
49
57
|
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
if (textStart > range.from) {
|
|
59
|
+
tr.delete(range.from + startSpaces, textStart)
|
|
60
|
+
}
|
|
52
61
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
62
|
+
markEnd = range.from + startSpaces + captureGroup.length
|
|
63
|
+
|
|
64
|
+
tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}))
|
|
65
|
+
|
|
66
|
+
tr.removeStoredMark(config.type)
|
|
67
|
+
}
|
|
59
68
|
},
|
|
60
69
|
})
|
|
61
70
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NodeType } from 'prosemirror-model'
|
|
2
|
+
|
|
3
|
+
import { PasteRule } from '../PasteRule'
|
|
4
|
+
import { ExtendedRegExpMatchArray } from '../types'
|
|
5
|
+
import { callOrReturn } from '../utilities'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Build an paste rule that adds a node when the
|
|
9
|
+
* matched text is pasted into it.
|
|
10
|
+
*/
|
|
11
|
+
export function nodePasteRule(config: {
|
|
12
|
+
find: RegExp,
|
|
13
|
+
type: NodeType,
|
|
14
|
+
getAttributes?:
|
|
15
|
+
| Record<string, any>
|
|
16
|
+
| ((match: ExtendedRegExpMatchArray) => Record<string, any>)
|
|
17
|
+
| false
|
|
18
|
+
| null,
|
|
19
|
+
}) {
|
|
20
|
+
return new PasteRule({
|
|
21
|
+
find: config.find,
|
|
22
|
+
handler({ match, chain, range }) {
|
|
23
|
+
const attributes = callOrReturn(config.getAttributes, undefined, match)
|
|
24
|
+
|
|
25
|
+
if (attributes === false || attributes === null) {
|
|
26
|
+
return null
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (match.input) {
|
|
30
|
+
chain()
|
|
31
|
+
.deleteRange(range)
|
|
32
|
+
.insertContentAt(range.from, {
|
|
33
|
+
type: config.type.name,
|
|
34
|
+
attrs: attributes,
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
})
|
|
39
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { PasteRule, PasteRuleFinder } from '../PasteRule'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Build an paste rule that replaces text when the
|
|
5
|
+
* matched text is pasted into it.
|
|
6
|
+
*/
|
|
7
|
+
export function textPasteRule(config: {
|
|
8
|
+
find: PasteRuleFinder,
|
|
9
|
+
replace: string,
|
|
10
|
+
}) {
|
|
11
|
+
return new PasteRule({
|
|
12
|
+
find: config.find,
|
|
13
|
+
handler: ({ state, range, match }) => {
|
|
14
|
+
let insert = config.replace
|
|
15
|
+
let start = range.from
|
|
16
|
+
const end = range.to
|
|
17
|
+
|
|
18
|
+
if (match[1]) {
|
|
19
|
+
const offset = match[0].lastIndexOf(match[1])
|
|
20
|
+
|
|
21
|
+
insert += match[0].slice(offset + match[1].length)
|
|
22
|
+
start += offset
|
|
23
|
+
|
|
24
|
+
const cutOff = start - end
|
|
25
|
+
|
|
26
|
+
if (cutOff > 0) {
|
|
27
|
+
insert = match[0].slice(offset - cutOff, offset) + insert
|
|
28
|
+
start = end
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
state.tr.insertText(insert, start, end)
|
|
33
|
+
},
|
|
34
|
+
})
|
|
35
|
+
}
|
package/src/style.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
const style = `.ProseMirror {
|
|
1
|
+
export const style = `.ProseMirror {
|
|
2
2
|
position: relative;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
5
|
.ProseMirror {
|
|
6
6
|
word-wrap: break-word;
|
|
7
7
|
white-space: pre-wrap;
|
|
8
|
+
white-space: break-spaces;
|
|
8
9
|
-webkit-font-variant-ligatures: none;
|
|
9
10
|
font-variant-ligatures: none;
|
|
11
|
+
font-feature-settings: "liga" 0; /* the above doesn't seem to work in Edge */
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
.ProseMirror [contenteditable="false"] {
|
|
@@ -21,10 +23,19 @@ const style = `.ProseMirror {
|
|
|
21
23
|
white-space: pre-wrap;
|
|
22
24
|
}
|
|
23
25
|
|
|
26
|
+
img.ProseMirror-separator {
|
|
27
|
+
display: inline !important;
|
|
28
|
+
border: none !important;
|
|
29
|
+
margin: 0 !important;
|
|
30
|
+
width: 1px !important;
|
|
31
|
+
height: 1px !important;
|
|
32
|
+
}
|
|
33
|
+
|
|
24
34
|
.ProseMirror-gapcursor {
|
|
25
35
|
display: none;
|
|
26
36
|
pointer-events: none;
|
|
27
37
|
position: absolute;
|
|
38
|
+
margin: 0;
|
|
28
39
|
}
|
|
29
40
|
|
|
30
41
|
.ProseMirror-gapcursor:after {
|
|
@@ -57,6 +68,8 @@ const style = `.ProseMirror {
|
|
|
57
68
|
|
|
58
69
|
.ProseMirror-focused .ProseMirror-gapcursor {
|
|
59
70
|
display: block;
|
|
60
|
-
}
|
|
71
|
+
}
|
|
61
72
|
|
|
62
|
-
|
|
73
|
+
.tippy-box[data-animation=fade][data-state=hidden] {
|
|
74
|
+
opacity: 0
|
|
75
|
+
}`
|
package/src/types.ts
CHANGED
|
@@ -1,57 +1,110 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Node as ProseMirrorNode,
|
|
3
2
|
Mark as ProseMirrorMark,
|
|
3
|
+
Node as ProseMirrorNode,
|
|
4
4
|
ParseOptions,
|
|
5
5
|
} from 'prosemirror-model'
|
|
6
|
+
import { EditorState, Transaction } from 'prosemirror-state'
|
|
6
7
|
import {
|
|
7
|
-
EditorView,
|
|
8
8
|
Decoration,
|
|
9
|
-
NodeView,
|
|
10
9
|
EditorProps,
|
|
10
|
+
EditorView,
|
|
11
|
+
NodeView,
|
|
11
12
|
} from 'prosemirror-view'
|
|
12
|
-
|
|
13
|
-
import { Extension } from './Extension'
|
|
14
|
-
import { Node } from './Node'
|
|
15
|
-
import { Mark } from './Mark'
|
|
16
|
-
import { Editor } from './Editor'
|
|
13
|
+
|
|
17
14
|
import {
|
|
18
15
|
Commands,
|
|
19
16
|
ExtensionConfig,
|
|
20
|
-
NodeConfig,
|
|
21
17
|
MarkConfig,
|
|
18
|
+
NodeConfig,
|
|
22
19
|
} from '.'
|
|
20
|
+
import { Editor } from './Editor'
|
|
21
|
+
import { Extension } from './Extension'
|
|
22
|
+
import { Mark } from './Mark'
|
|
23
|
+
import { Node } from './Node'
|
|
23
24
|
|
|
24
|
-
export
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
export type AnyConfig = ExtensionConfig | NodeConfig | MarkConfig
|
|
26
|
+
export type AnyExtension = Extension | Node | Mark
|
|
27
|
+
export type Extensions = AnyExtension[]
|
|
28
|
+
|
|
29
|
+
export type ParentConfig<T> = Partial<{
|
|
30
|
+
[P in keyof T]: Required<T>[P] extends (...args: any) => any
|
|
31
|
+
? (...args: Parameters<Required<T>[P]>) => ReturnType<Required<T>[P]>
|
|
32
|
+
: T[P]
|
|
33
|
+
}>
|
|
34
|
+
|
|
35
|
+
export type Primitive =
|
|
36
|
+
| null
|
|
37
|
+
| undefined
|
|
38
|
+
| string
|
|
39
|
+
| number
|
|
40
|
+
| boolean
|
|
41
|
+
| symbol
|
|
42
|
+
| bigint
|
|
43
|
+
|
|
44
|
+
export type RemoveThis<T> = T extends (...args: any) => any
|
|
45
|
+
? (...args: Parameters<T>) => ReturnType<T>
|
|
46
|
+
: T
|
|
47
|
+
|
|
48
|
+
export type MaybeReturnType<T> = T extends (...args: any) => any
|
|
49
|
+
? ReturnType<T>
|
|
50
|
+
: T
|
|
51
|
+
|
|
52
|
+
export type MaybeThisParameterType<T> = Exclude<T, Primitive> extends (...args: any) => any
|
|
53
|
+
? ThisParameterType<Exclude<T, Primitive>>
|
|
54
|
+
: any
|
|
55
|
+
|
|
56
|
+
export interface EditorEvents {
|
|
57
|
+
beforeCreate: { editor: Editor },
|
|
58
|
+
create: { editor: Editor },
|
|
59
|
+
update: { editor: Editor, transaction: Transaction },
|
|
60
|
+
selectionUpdate: { editor: Editor, transaction: Transaction },
|
|
61
|
+
transaction: { editor: Editor, transaction: Transaction },
|
|
62
|
+
focus: { editor: Editor, event: FocusEvent, transaction: Transaction },
|
|
63
|
+
blur: { editor: Editor, event: FocusEvent, transaction: Transaction },
|
|
64
|
+
destroy: void,
|
|
29
65
|
}
|
|
30
66
|
|
|
31
|
-
export type
|
|
67
|
+
export type EnableRules = (AnyExtension | string)[] | boolean
|
|
32
68
|
|
|
33
69
|
export interface EditorOptions {
|
|
34
70
|
element: Element,
|
|
35
71
|
content: Content,
|
|
36
72
|
extensions: Extensions,
|
|
37
73
|
injectCSS: boolean,
|
|
74
|
+
injectNonce: string | undefined,
|
|
38
75
|
autofocus: FocusPosition,
|
|
39
76
|
editable: boolean,
|
|
40
77
|
editorProps: EditorProps,
|
|
41
78
|
parseOptions: ParseOptions,
|
|
42
|
-
enableInputRules:
|
|
43
|
-
enablePasteRules:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
79
|
+
enableInputRules: EnableRules,
|
|
80
|
+
enablePasteRules: EnableRules,
|
|
81
|
+
enableCoreExtensions: boolean,
|
|
82
|
+
onBeforeCreate: (props: EditorEvents['beforeCreate']) => void,
|
|
83
|
+
onCreate: (props: EditorEvents['create']) => void,
|
|
84
|
+
onUpdate: (props: EditorEvents['update']) => void,
|
|
85
|
+
onSelectionUpdate: (props: EditorEvents['selectionUpdate']) => void,
|
|
86
|
+
onTransaction: (props: EditorEvents['transaction']) => void,
|
|
87
|
+
onFocus: (props: EditorEvents['focus']) => void,
|
|
88
|
+
onBlur: (props: EditorEvents['blur']) => void,
|
|
89
|
+
onDestroy: (props: EditorEvents['destroy']) => void,
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export type HTMLContent = string
|
|
93
|
+
|
|
94
|
+
export type JSONContent = {
|
|
95
|
+
type?: string,
|
|
96
|
+
attrs?: Record<string, any>,
|
|
97
|
+
content?: JSONContent[],
|
|
98
|
+
marks?: {
|
|
99
|
+
type: string,
|
|
100
|
+
attrs?: Record<string, any>,
|
|
101
|
+
[key: string]: any,
|
|
102
|
+
}[],
|
|
103
|
+
text?: string,
|
|
104
|
+
[key: string]: any,
|
|
52
105
|
}
|
|
53
106
|
|
|
54
|
-
export type Content =
|
|
107
|
+
export type Content = HTMLContent | JSONContent | JSONContent[] | null
|
|
55
108
|
|
|
56
109
|
export type CommandProps = {
|
|
57
110
|
editor: Editor,
|
|
@@ -68,12 +121,15 @@ export type Command = (props: CommandProps) => boolean
|
|
|
68
121
|
|
|
69
122
|
export type CommandSpec = (...args: any[]) => Command
|
|
70
123
|
|
|
124
|
+
export type KeyboardShortcutCommand = (props: { editor: Editor }) => boolean
|
|
125
|
+
|
|
71
126
|
export type Attribute = {
|
|
72
127
|
default: any,
|
|
73
128
|
rendered?: boolean,
|
|
74
|
-
renderHTML?: ((attributes:
|
|
75
|
-
parseHTML?: ((element: HTMLElement) =>
|
|
129
|
+
renderHTML?: ((attributes: Record<string, any>) => Record<string, any> | null) | null,
|
|
130
|
+
parseHTML?: ((element: HTMLElement) => any | null) | null,
|
|
76
131
|
keepOnSplit: boolean,
|
|
132
|
+
isRequired?: boolean,
|
|
77
133
|
}
|
|
78
134
|
|
|
79
135
|
export type Attributes = {
|
|
@@ -95,59 +151,71 @@ export type GlobalAttributes = {
|
|
|
95
151
|
|
|
96
152
|
export type PickValue<T, K extends keyof T> = T[K]
|
|
97
153
|
|
|
98
|
-
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I)=>void)
|
|
154
|
+
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void)
|
|
99
155
|
? I
|
|
100
156
|
: never
|
|
101
157
|
|
|
102
158
|
export type Diff<T extends keyof any, U extends keyof any> =
|
|
103
159
|
({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T]
|
|
104
160
|
|
|
105
|
-
export type Overwrite<T, U> = Pick<T, Diff<keyof T, keyof U>> & U
|
|
161
|
+
export type Overwrite<T, U> = Pick<T, Diff<keyof T, keyof U>> & U
|
|
106
162
|
|
|
107
|
-
export type
|
|
108
|
-
|
|
109
|
-
}
|
|
163
|
+
export type ValuesOf<T> = T[keyof T]
|
|
164
|
+
|
|
165
|
+
export type KeysWithTypeOf<T, Type> = ({ [P in keyof T]: T[P] extends Type ? P : never })[keyof T]
|
|
110
166
|
|
|
111
|
-
export type
|
|
167
|
+
export type NodeViewProps = {
|
|
168
|
+
editor: Editor,
|
|
169
|
+
node: ProseMirrorNode,
|
|
170
|
+
decorations: Decoration[],
|
|
171
|
+
selected: boolean,
|
|
172
|
+
extension: Node,
|
|
173
|
+
getPos: () => number,
|
|
174
|
+
updateAttributes: (attributes: Record<string, any>) => void,
|
|
175
|
+
deleteNode: () => void,
|
|
176
|
+
}
|
|
112
177
|
|
|
113
|
-
export
|
|
178
|
+
export interface NodeViewRendererOptions {
|
|
179
|
+
stopEvent: ((props: {
|
|
180
|
+
event: Event
|
|
181
|
+
}) => boolean) | null,
|
|
182
|
+
ignoreMutation: ((props: {
|
|
183
|
+
mutation: MutationRecord | { type: 'selection', target: Element }
|
|
184
|
+
}) => boolean) | null,
|
|
185
|
+
}
|
|
114
186
|
|
|
115
187
|
export type NodeViewRendererProps = {
|
|
116
188
|
editor: Editor,
|
|
117
189
|
node: ProseMirrorNode,
|
|
118
190
|
getPos: (() => number) | boolean,
|
|
119
|
-
HTMLAttributes:
|
|
191
|
+
HTMLAttributes: Record<string, any>,
|
|
120
192
|
decorations: Decoration[],
|
|
121
193
|
extension: Node,
|
|
122
194
|
}
|
|
123
195
|
|
|
124
196
|
export type NodeViewRenderer = (props: NodeViewRendererProps) => (NodeView | {})
|
|
125
197
|
|
|
126
|
-
export type
|
|
198
|
+
export type AnyCommands = Record<string, (...args: any[]) => Command>
|
|
199
|
+
|
|
200
|
+
export type UnionCommands<T = Command> = UnionToIntersection<ValuesOf<Pick<Commands<T>, KeysWithTypeOf<Commands<T>, {}>>>>
|
|
127
201
|
|
|
128
202
|
export type RawCommands = {
|
|
129
|
-
[Item in keyof UnionCommands]: UnionCommands[Item]
|
|
130
|
-
? (...args: Parameters<UnionCommands[Item]>) => Command
|
|
131
|
-
: never
|
|
203
|
+
[Item in keyof UnionCommands]: UnionCommands<Command>[Item]
|
|
132
204
|
}
|
|
133
205
|
|
|
134
206
|
export type SingleCommands = {
|
|
135
|
-
[Item in keyof
|
|
136
|
-
? (...args: Parameters<RawCommands[Item]>) => boolean
|
|
137
|
-
: never
|
|
207
|
+
[Item in keyof UnionCommands]: UnionCommands<boolean>[Item]
|
|
138
208
|
}
|
|
139
209
|
|
|
140
210
|
export type ChainedCommands = {
|
|
141
|
-
[Item in keyof
|
|
142
|
-
? (...args: Parameters<RawCommands[Item]>) => ChainedCommands
|
|
143
|
-
: never
|
|
211
|
+
[Item in keyof UnionCommands]: UnionCommands<ChainedCommands>[Item]
|
|
144
212
|
} & {
|
|
145
213
|
run: () => boolean
|
|
146
214
|
}
|
|
147
215
|
|
|
148
216
|
export type CanCommands = SingleCommands & { chain: () => ChainedCommands }
|
|
149
217
|
|
|
150
|
-
export type FocusPosition = 'start' | 'end' | number | boolean | null
|
|
218
|
+
export type FocusPosition = 'start' | 'end' | 'all' | number | boolean | null
|
|
151
219
|
|
|
152
220
|
export type Range = {
|
|
153
221
|
from: number,
|
|
@@ -167,3 +235,20 @@ export type MarkRange = {
|
|
|
167
235
|
}
|
|
168
236
|
|
|
169
237
|
export type Predicate = (node: ProseMirrorNode) => boolean
|
|
238
|
+
|
|
239
|
+
export type NodeWithPos = {
|
|
240
|
+
node: ProseMirrorNode,
|
|
241
|
+
pos: number,
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export type TextSerializer = (props: {
|
|
245
|
+
node: ProseMirrorNode,
|
|
246
|
+
pos: number,
|
|
247
|
+
parent: ProseMirrorNode,
|
|
248
|
+
index: number,
|
|
249
|
+
range: Range,
|
|
250
|
+
}) => string
|
|
251
|
+
|
|
252
|
+
export type ExtendedRegExpMatchArray = RegExpMatchArray & {
|
|
253
|
+
data?: Record<string, any>,
|
|
254
|
+
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { MaybeReturnType } from '../types'
|
|
2
|
+
import { isFunction } from './isFunction'
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Optionally calls `value` as a function.
|
|
3
6
|
* Otherwise it is returned directly.
|
|
@@ -5,8 +8,8 @@
|
|
|
5
8
|
* @param context Optional context to bind to function.
|
|
6
9
|
* @param props Optional props to pass to function.
|
|
7
10
|
*/
|
|
8
|
-
export
|
|
9
|
-
if (
|
|
11
|
+
export function callOrReturn<T>(value: T, context: any = undefined, ...props: any[]): MaybeReturnType<T> {
|
|
12
|
+
if (isFunction(value)) {
|
|
10
13
|
if (context) {
|
|
11
14
|
return value.bind(context)(...props)
|
|
12
15
|
}
|
|
@@ -14,5 +17,5 @@ export default function callOrReturn(value: any, context: any = undefined, ...pr
|
|
|
14
17
|
return value(...props)
|
|
15
18
|
}
|
|
16
19
|
|
|
17
|
-
return value
|
|
20
|
+
return value as MaybeReturnType<T>
|
|
18
21
|
}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
-
export
|
|
1
|
+
export function createStyleTag(style: string, nonce?: string): HTMLStyleElement {
|
|
2
|
+
const tipTapStyleTag = (<HTMLStyleElement>document.querySelector('style[data-tiptap-style]'))
|
|
3
|
+
|
|
4
|
+
if (tipTapStyleTag !== null) {
|
|
5
|
+
return tipTapStyleTag
|
|
6
|
+
}
|
|
7
|
+
|
|
2
8
|
const styleNode = document.createElement('style')
|
|
3
9
|
|
|
10
|
+
if (nonce) {
|
|
11
|
+
styleNode.setAttribute('nonce', nonce)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
styleNode.setAttribute('data-tiptap-style', '')
|
|
4
15
|
styleNode.innerHTML = style
|
|
5
16
|
document.getElementsByTagName('head')[0].appendChild(styleNode)
|
|
6
17
|
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import { AnyObject } from '../types'
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* Remove a property or an array of properties from an object
|
|
5
3
|
* @param obj Object
|
|
6
4
|
* @param key Key to remove
|
|
7
5
|
*/
|
|
8
|
-
export
|
|
6
|
+
export function deleteProps(obj: Record<string, any>, propOrProps: string | string[]): Record<string, any> {
|
|
9
7
|
const props = typeof propOrProps === 'string'
|
|
10
8
|
? [propOrProps]
|
|
11
9
|
: propOrProps
|
|
12
10
|
|
|
13
11
|
return Object
|
|
14
12
|
.keys(obj)
|
|
15
|
-
.reduce((newObj:
|
|
13
|
+
.reduce((newObj: Record<string, any>, prop) => {
|
|
16
14
|
if (!props.includes(prop)) {
|
|
17
15
|
newObj[prop] = obj[prop]
|
|
18
16
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const element = parser.parseFromString(htmlString, 'text/html').body
|
|
1
|
+
export function elementFromString(value: string): HTMLElement {
|
|
2
|
+
// add a wrapper to preserve leading and trailing whitespace
|
|
3
|
+
const wrappedValue = `<body>${value}</body>`
|
|
5
4
|
|
|
6
|
-
return
|
|
5
|
+
return new window.DOMParser().parseFromString(wrappedValue, 'text/html').body
|
|
7
6
|
}
|