@tiptap/core 2.0.0-beta.99 → 2.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/index.cjs +4360 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{tiptap-core.esm.js → index.js} +2349 -1447
- package/dist/index.js.map +1 -0
- package/dist/index.umd.js +4358 -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 +25 -11
- package/dist/packages/core/src/EventEmitter.d.ts +8 -4
- package/dist/packages/core/src/Extension.d.ts +63 -29
- package/dist/packages/core/src/ExtensionManager.d.ts +3 -4
- package/dist/packages/core/src/InputRule.d.ts +42 -0
- package/dist/packages/core/src/Mark.d.ts +94 -36
- package/dist/packages/core/src/Node.d.ts +104 -45
- package/dist/packages/core/src/NodeView.d.ts +8 -8
- package/dist/packages/core/src/PasteRule.d.ts +42 -0
- package/dist/packages/core/src/Tracker.d.ts +1 -1
- package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +12 -0
- package/dist/packages/core/src/commands/deleteNode.d.ts +1 -1
- package/dist/packages/core/src/commands/deleteRange.d.ts +1 -1
- package/dist/packages/core/src/commands/extendMarkRange.d.ts +1 -1
- package/dist/packages/core/src/commands/focus.d.ts +4 -2
- package/dist/packages/core/src/commands/index.d.ts +50 -0
- package/dist/packages/core/src/commands/insertContent.d.ts +6 -3
- package/dist/packages/core/src/commands/insertContentAt.d.ts +6 -3
- package/dist/packages/core/src/commands/join.d.ts +33 -0
- package/dist/packages/core/src/commands/lift.d.ts +1 -1
- package/dist/packages/core/src/commands/liftListItem.d.ts +1 -1
- package/dist/packages/core/src/commands/resetAttributes.d.ts +1 -1
- 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 +2 -2
- package/dist/packages/core/src/commands/setMark.d.ts +1 -1
- package/dist/packages/core/src/commands/setNode.d.ts +1 -1
- package/dist/packages/core/src/commands/setTextSelection.d.ts +1 -1
- package/dist/packages/core/src/commands/sinkListItem.d.ts +1 -1
- package/dist/packages/core/src/commands/splitListItem.d.ts +1 -1
- package/dist/packages/core/src/commands/toggleList.d.ts +2 -2
- package/dist/packages/core/src/commands/toggleMark.d.ts +7 -2
- package/dist/packages/core/src/commands/toggleNode.d.ts +1 -1
- package/dist/packages/core/src/commands/toggleWrap.d.ts +1 -1
- package/dist/packages/core/src/commands/unsetMark.d.ts +7 -2
- package/dist/packages/core/src/commands/updateAttributes.d.ts +1 -1
- package/dist/packages/core/src/commands/wrapIn.d.ts +1 -1
- package/dist/packages/core/src/commands/wrapInList.d.ts +1 -1
- package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
- package/dist/packages/core/src/extensions/commands.d.ts +2 -97
- 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 +2 -2
- package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +2 -2
- package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
- package/dist/packages/core/src/helpers/findChildren.d.ts +3 -3
- package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +3 -3
- 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 +1 -1
- package/dist/packages/core/src/helpers/generateJSON.d.ts +1 -1
- package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
- package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -3
- 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 +2 -5
- package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -2
- package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
- package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +3 -3
- 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 -3
- package/dist/packages/core/src/helpers/getNodeType.d.ts +2 -2
- package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +2 -2
- package/dist/packages/core/src/helpers/getSchema.d.ts +2 -2
- package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +2 -2
- 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 +1 -1
- 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 -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 +3 -3
- package/dist/packages/core/src/helpers/isNodeActive.d.ts +3 -3
- 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 -2
- 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 +12 -34
- 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 +70 -40
- package/dist/packages/core/src/utilities/callOrReturn.d.ts +1 -1
- package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
- package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -1
- 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 -1
- package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -1
- package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -1
- package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
- package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -1
- package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
- package/package.json +25 -24
- package/src/CommandManager.ts +73 -83
- package/src/Editor.ts +101 -53
- package/src/EventEmitter.ts +14 -4
- package/src/Extension.ts +244 -138
- package/src/ExtensionManager.ts +153 -152
- package/src/InputRule.ts +260 -0
- package/src/Mark.ts +365 -204
- package/src/Node.ts +406 -253
- package/src/NodeView.ts +59 -38
- package/src/PasteRule.ts +240 -0
- package/src/Tracker.ts +4 -8
- package/src/commands/blur.ts +4 -0
- package/src/commands/clearNodes.ts +15 -9
- package/src/commands/createParagraphNear.ts +3 -2
- package/src/commands/deleteCurrentNode.ts +41 -0
- package/src/commands/deleteNode.ts +3 -2
- package/src/commands/deleteRange.ts +1 -1
- package/src/commands/deleteSelection.ts +3 -2
- package/src/commands/exitCode.ts +3 -2
- package/src/commands/extendMarkRange.ts +9 -5
- package/src/commands/focus.ts +31 -42
- package/src/commands/index.ts +50 -0
- package/src/commands/insertContent.ts +15 -4
- package/src/commands/insertContentAt.ts +71 -14
- package/src/commands/join.ts +53 -0
- package/src/commands/keyboardShortcut.ts +3 -3
- package/src/commands/lift.ts +6 -5
- package/src/commands/liftEmptyBlock.ts +2 -1
- package/src/commands/liftListItem.ts +5 -4
- package/src/commands/newlineInCode.ts +3 -2
- package/src/commands/resetAttributes.ts +16 -10
- package/src/commands/selectAll.ts +5 -3
- package/src/commands/selectNodeBackward.ts +3 -2
- package/src/commands/selectNodeForward.ts +3 -2
- package/src/commands/selectParentNode.ts +3 -2
- package/src/commands/selectTextblockEnd.ts +20 -0
- package/src/commands/selectTextblockStart.ts +20 -0
- package/src/commands/setContent.ts +6 -9
- package/src/commands/setMark.ts +66 -13
- package/src/commands/setNode.ts +30 -6
- package/src/commands/setNodeSelection.ts +6 -7
- package/src/commands/setTextSelection.ts +8 -9
- package/src/commands/sinkListItem.ts +5 -4
- package/src/commands/splitBlock.ts +23 -38
- package/src/commands/splitListItem.ts +30 -27
- package/src/commands/toggleList.ts +108 -19
- package/src/commands/toggleMark.ts +17 -6
- package/src/commands/toggleNode.ts +9 -4
- package/src/commands/toggleWrap.ts +8 -8
- package/src/commands/undoInputRule.ts +31 -2
- package/src/commands/unsetAllMarks.ts +4 -8
- package/src/commands/unsetMark.ts +34 -21
- package/src/commands/updateAttributes.ts +18 -12
- package/src/commands/wrapIn.ts +5 -10
- package/src/commands/wrapInList.ts +5 -4
- package/src/extensions/clipboardTextSerializer.ts +15 -36
- package/src/extensions/commands.ts +3 -144
- 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 +111 -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 +4 -3
- package/src/helpers/createNodeFromContent.ts +10 -15
- package/src/helpers/defaultBlockAt.ts +13 -0
- package/src/helpers/findChildren.ts +4 -3
- package/src/helpers/findChildrenInRange.ts +8 -3
- package/src/helpers/findParentNode.ts +4 -3
- package/src/helpers/findParentNodeClosestToPos.ts +13 -7
- package/src/helpers/generateHTML.ts +6 -5
- package/src/helpers/generateJSON.ts +6 -7
- package/src/helpers/generateText.ts +27 -0
- package/src/helpers/getAttributes.ts +8 -9
- package/src/helpers/getAttributesFromExtensions.ts +25 -12
- package/src/helpers/getChangedRanges.ts +83 -0
- package/src/helpers/getDebugJSON.ts +42 -38
- package/src/helpers/getExtensionField.ts +3 -3
- package/src/helpers/getHTMLFromFragment.ts +5 -6
- package/src/helpers/getMarkAttributes.ts +18 -10
- package/src/helpers/getMarkRange.ts +13 -8
- package/src/helpers/getMarkType.ts +5 -3
- package/src/helpers/getMarksBetween.ts +34 -10
- package/src/helpers/getNodeAttributes.ts +14 -12
- package/src/helpers/getNodeType.ts +5 -3
- package/src/helpers/getRenderedAttributes.ts +8 -6
- package/src/helpers/getSchema.ts +5 -4
- package/src/helpers/getSchemaByResolvedExtensions.ts +165 -111
- package/src/helpers/getSchemaTypeByName.ts +3 -11
- package/src/helpers/getSchemaTypeNameByName.ts +2 -2
- package/src/helpers/getSplittedAttributes.ts +1 -1
- 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 -5
- package/src/helpers/isExtensionRulesEnabled.ts +15 -0
- package/src/helpers/isList.ts +6 -5
- package/src/helpers/isMarkActive.ts +32 -35
- package/src/helpers/isNodeActive.ts +27 -37
- 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 +10 -4
- 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 +12 -37
- 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 +49 -56
- package/src/pasteRules/nodePasteRule.ts +37 -0
- package/src/pasteRules/textPasteRule.ts +35 -0
- package/src/style.ts +12 -3
- package/src/types.ts +140 -106
- package/src/utilities/callOrReturn.ts +3 -2
- package/src/utilities/createStyleTag.ts +8 -4
- package/src/utilities/deleteProps.ts +1 -1
- package/src/utilities/elementFromString.ts +1 -1
- 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 +1 -1
- package/src/utilities/mergeAttributes.ts +2 -1
- package/src/utilities/mergeDeep.ts +2 -2
- package/src/utilities/minMax.ts +1 -1
- package/src/utilities/objectIncludes.ts +18 -4
- package/src/utilities/removeDuplicates.ts +15 -0
- package/CHANGELOG.md +0 -1190
- package/LICENSE.md +0 -21
- 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/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.cjs.js +0 -3408
- package/dist/tiptap-core.cjs.js.map +0 -1
- package/dist/tiptap-core.esm.js.map +0 -1
- package/dist/tiptap-core.umd.js +0 -3405
- package/dist/tiptap-core.umd.js.map +0 -1
- package/src/commands/joinBackward.ts +0 -17
- package/src/commands/joinForward.ts +0 -17
- package/src/utilities/isClass.ts +0 -7
- package/src/utilities/isObject.ts +0 -10
- package/src/utilities/removeElement.ts +0 -5
package/src/commands/focus.ts
CHANGED
|
@@ -1,34 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
function resolveSelection(state: EditorState, position: FocusPosition = null) {
|
|
7
|
-
if (!position) {
|
|
8
|
-
return null
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
if (position === 'start' || position === true) {
|
|
12
|
-
return {
|
|
13
|
-
from: 0,
|
|
14
|
-
to: 0,
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (position === 'end') {
|
|
19
|
-
const { size } = state.doc.content
|
|
20
|
-
|
|
21
|
-
return {
|
|
22
|
-
from: size,
|
|
23
|
-
to: size,
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
from: position,
|
|
29
|
-
to: position,
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
import { isTextSelection } from '../helpers/isTextSelection'
|
|
2
|
+
import { resolveFocusPosition } from '../helpers/resolveFocusPosition'
|
|
3
|
+
import { FocusPosition, RawCommands } from '../types'
|
|
4
|
+
import { isiOS } from '../utilities/isiOS'
|
|
32
5
|
|
|
33
6
|
declare module '@tiptap/core' {
|
|
34
7
|
interface Commands<ReturnType> {
|
|
@@ -36,23 +9,43 @@ declare module '@tiptap/core' {
|
|
|
36
9
|
/**
|
|
37
10
|
* Focus the editor at the given position.
|
|
38
11
|
*/
|
|
39
|
-
focus: (
|
|
12
|
+
focus: (
|
|
13
|
+
position?: FocusPosition,
|
|
14
|
+
options?: {
|
|
15
|
+
scrollIntoView?: boolean,
|
|
16
|
+
},
|
|
17
|
+
) => ReturnType,
|
|
40
18
|
}
|
|
41
19
|
}
|
|
42
20
|
}
|
|
43
21
|
|
|
44
|
-
export const focus: RawCommands['focus'] = (position = null) => ({
|
|
22
|
+
export const focus: RawCommands['focus'] = (position = null, options = {}) => ({
|
|
45
23
|
editor,
|
|
46
24
|
view,
|
|
47
25
|
tr,
|
|
48
26
|
dispatch,
|
|
49
27
|
}) => {
|
|
28
|
+
options = {
|
|
29
|
+
scrollIntoView: true,
|
|
30
|
+
...options,
|
|
31
|
+
}
|
|
32
|
+
|
|
50
33
|
const delayedFocus = () => {
|
|
34
|
+
// focus within `requestAnimationFrame` breaks focus on iOS
|
|
35
|
+
// so we have to call this
|
|
36
|
+
if (isiOS()) {
|
|
37
|
+
(view.dom as HTMLElement).focus()
|
|
38
|
+
}
|
|
39
|
+
|
|
51
40
|
// For React we have to focus asynchronously. Otherwise wild things happen.
|
|
52
41
|
// see: https://github.com/ueberdosis/tiptap/issues/1520
|
|
53
42
|
requestAnimationFrame(() => {
|
|
54
43
|
if (!editor.isDestroyed) {
|
|
55
44
|
view.focus()
|
|
45
|
+
|
|
46
|
+
if (options?.scrollIntoView) {
|
|
47
|
+
editor.commands.scrollIntoView()
|
|
48
|
+
}
|
|
56
49
|
}
|
|
57
50
|
})
|
|
58
51
|
}
|
|
@@ -67,13 +60,9 @@ export const focus: RawCommands['focus'] = (position = null) => ({
|
|
|
67
60
|
return true
|
|
68
61
|
}
|
|
69
62
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
const maxPos = Selection.atEnd(doc).to
|
|
74
|
-
const resolvedFrom = minMax(from, minPos, maxPos)
|
|
75
|
-
const resolvedEnd = minMax(to, minPos, maxPos)
|
|
76
|
-
const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
|
|
63
|
+
// pass through tr.doc instead of editor.state.doc
|
|
64
|
+
// since transactions could change the editors state before this command has been run
|
|
65
|
+
const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection
|
|
77
66
|
const isSameSelection = editor.state.selection.eq(selection)
|
|
78
67
|
|
|
79
68
|
if (dispatch) {
|
|
@@ -83,8 +72,8 @@ export const focus: RawCommands['focus'] = (position = null) => ({
|
|
|
83
72
|
|
|
84
73
|
// `tr.setSelection` resets the stored marks
|
|
85
74
|
// so we’ll restore them if the selection is the same as before
|
|
86
|
-
if (isSameSelection && storedMarks) {
|
|
87
|
-
tr.setStoredMarks(storedMarks)
|
|
75
|
+
if (isSameSelection && tr.storedMarks) {
|
|
76
|
+
tr.setStoredMarks(tr.storedMarks)
|
|
88
77
|
}
|
|
89
78
|
|
|
90
79
|
delayedFocus()
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export * from './blur'
|
|
2
|
+
export * from './clearContent'
|
|
3
|
+
export * from './clearNodes'
|
|
4
|
+
export * from './command'
|
|
5
|
+
export * from './createParagraphNear'
|
|
6
|
+
export * from './deleteCurrentNode'
|
|
7
|
+
export * from './deleteNode'
|
|
8
|
+
export * from './deleteRange'
|
|
9
|
+
export * from './deleteSelection'
|
|
10
|
+
export * from './enter'
|
|
11
|
+
export * from './exitCode'
|
|
12
|
+
export * from './extendMarkRange'
|
|
13
|
+
export * from './first'
|
|
14
|
+
export * from './focus'
|
|
15
|
+
export * from './forEach'
|
|
16
|
+
export * from './insertContent'
|
|
17
|
+
export * from './insertContentAt'
|
|
18
|
+
export * from './join'
|
|
19
|
+
export * from './keyboardShortcut'
|
|
20
|
+
export * from './lift'
|
|
21
|
+
export * from './liftEmptyBlock'
|
|
22
|
+
export * from './liftListItem'
|
|
23
|
+
export * from './newlineInCode'
|
|
24
|
+
export * from './resetAttributes'
|
|
25
|
+
export * from './scrollIntoView'
|
|
26
|
+
export * from './selectAll'
|
|
27
|
+
export * from './selectNodeBackward'
|
|
28
|
+
export * from './selectNodeForward'
|
|
29
|
+
export * from './selectParentNode'
|
|
30
|
+
export * from './selectTextblockEnd'
|
|
31
|
+
export * from './selectTextblockStart'
|
|
32
|
+
export * from './setContent'
|
|
33
|
+
export * from './setMark'
|
|
34
|
+
export * from './setMeta'
|
|
35
|
+
export * from './setNode'
|
|
36
|
+
export * from './setNodeSelection'
|
|
37
|
+
export * from './setTextSelection'
|
|
38
|
+
export * from './sinkListItem'
|
|
39
|
+
export * from './splitBlock'
|
|
40
|
+
export * from './splitListItem'
|
|
41
|
+
export * from './toggleList'
|
|
42
|
+
export * from './toggleMark'
|
|
43
|
+
export * from './toggleNode'
|
|
44
|
+
export * from './toggleWrap'
|
|
45
|
+
export * from './undoInputRule'
|
|
46
|
+
export * from './unsetAllMarks'
|
|
47
|
+
export * from './unsetMark'
|
|
48
|
+
export * from './updateAttributes'
|
|
49
|
+
export * from './wrapIn'
|
|
50
|
+
export * from './wrapInList'
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { ParseOptions } from '@tiptap/pm/model'
|
|
2
|
+
|
|
3
|
+
import { Content, RawCommands } from '../types'
|
|
3
4
|
|
|
4
5
|
declare module '@tiptap/core' {
|
|
5
6
|
interface Commands<ReturnType> {
|
|
@@ -7,11 +8,21 @@ declare module '@tiptap/core' {
|
|
|
7
8
|
/**
|
|
8
9
|
* Insert a node or string of HTML at the current position.
|
|
9
10
|
*/
|
|
10
|
-
insertContent: (
|
|
11
|
+
insertContent: (
|
|
12
|
+
value: Content,
|
|
13
|
+
options?: {
|
|
14
|
+
parseOptions?: ParseOptions
|
|
15
|
+
updateSelection?: boolean
|
|
16
|
+
},
|
|
17
|
+
) => ReturnType
|
|
11
18
|
}
|
|
12
19
|
}
|
|
13
20
|
}
|
|
14
21
|
|
|
15
22
|
export const insertContent: RawCommands['insertContent'] = (value, options) => ({ tr, commands }) => {
|
|
16
|
-
return commands.insertContentAt(
|
|
23
|
+
return commands.insertContentAt(
|
|
24
|
+
{ from: tr.selection.from, to: tr.selection.to },
|
|
25
|
+
value,
|
|
26
|
+
options,
|
|
27
|
+
)
|
|
17
28
|
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Range,
|
|
7
|
-
} from '../types'
|
|
1
|
+
import { Fragment, Node as ProseMirrorNode, ParseOptions } from '@tiptap/pm/model'
|
|
2
|
+
|
|
3
|
+
import { createNodeFromContent } from '../helpers/createNodeFromContent'
|
|
4
|
+
import { selectionToInsertionEnd } from '../helpers/selectionToInsertionEnd'
|
|
5
|
+
import { Content, Range, RawCommands } from '../types'
|
|
8
6
|
|
|
9
7
|
declare module '@tiptap/core' {
|
|
10
8
|
interface Commands<ReturnType> {
|
|
@@ -12,18 +10,35 @@ declare module '@tiptap/core' {
|
|
|
12
10
|
/**
|
|
13
11
|
* Insert a node or string of HTML at a specific position.
|
|
14
12
|
*/
|
|
15
|
-
insertContentAt: (
|
|
13
|
+
insertContentAt: (
|
|
14
|
+
position: number | Range,
|
|
15
|
+
value: Content,
|
|
16
|
+
options?: {
|
|
17
|
+
parseOptions?: ParseOptions
|
|
18
|
+
updateSelection?: boolean
|
|
19
|
+
},
|
|
20
|
+
) => ReturnType
|
|
16
21
|
}
|
|
17
22
|
}
|
|
18
23
|
}
|
|
19
24
|
|
|
25
|
+
const isFragment = (nodeOrFragment: ProseMirrorNode | Fragment): nodeOrFragment is Fragment => {
|
|
26
|
+
return nodeOrFragment.toString().startsWith('<')
|
|
27
|
+
}
|
|
28
|
+
|
|
20
29
|
export const insertContentAt: RawCommands['insertContentAt'] = (position, value, options) => ({ tr, dispatch, editor }) => {
|
|
21
30
|
if (dispatch) {
|
|
31
|
+
options = {
|
|
32
|
+
parseOptions: {},
|
|
33
|
+
updateSelection: true,
|
|
34
|
+
...options,
|
|
35
|
+
}
|
|
36
|
+
|
|
22
37
|
const content = createNodeFromContent(value, editor.schema, {
|
|
23
38
|
parseOptions: {
|
|
24
39
|
preserveWhitespace: 'full',
|
|
40
|
+
...options.parseOptions,
|
|
25
41
|
},
|
|
26
|
-
...(options || {}),
|
|
27
42
|
})
|
|
28
43
|
|
|
29
44
|
// don’t dispatch an empty fragment because this can lead to strange errors
|
|
@@ -31,14 +46,56 @@ export const insertContentAt: RawCommands['insertContentAt'] = (position, value,
|
|
|
31
46
|
return true
|
|
32
47
|
}
|
|
33
48
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
49
|
+
let { from, to } = typeof position === 'number' ? { from: position, to: position } : position
|
|
50
|
+
|
|
51
|
+
let isOnlyTextContent = true
|
|
52
|
+
let isOnlyBlockContent = true
|
|
53
|
+
const nodes = isFragment(content) ? content : [content]
|
|
37
54
|
|
|
38
|
-
|
|
55
|
+
nodes.forEach(node => {
|
|
56
|
+
// check if added node is valid
|
|
57
|
+
node.check()
|
|
58
|
+
|
|
59
|
+
isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false
|
|
60
|
+
|
|
61
|
+
isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
// check if we can replace the wrapping node by
|
|
65
|
+
// the newly inserted content
|
|
66
|
+
// example:
|
|
67
|
+
// replace an empty paragraph by an inserted image
|
|
68
|
+
// instead of inserting the image below the paragraph
|
|
69
|
+
if (from === to && isOnlyBlockContent) {
|
|
70
|
+
const { parent } = tr.doc.resolve(from)
|
|
71
|
+
const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount
|
|
72
|
+
|
|
73
|
+
if (isEmptyTextBlock) {
|
|
74
|
+
from -= 1
|
|
75
|
+
to += 1
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// if there is only plain text we have to use `insertText`
|
|
80
|
+
// because this will keep the current marks
|
|
81
|
+
if (isOnlyTextContent) {
|
|
82
|
+
// if value is string, we can use it directly
|
|
83
|
+
// otherwise if it is an array, we have to join it
|
|
84
|
+
if (Array.isArray(value)) {
|
|
85
|
+
tr.insertText(value.map(v => v.text || '').join(''), from, to)
|
|
86
|
+
} else if (typeof value === 'object' && !!value && !!value.text) {
|
|
87
|
+
tr.insertText(value.text, from, to)
|
|
88
|
+
} else {
|
|
89
|
+
tr.insertText(value as string, from, to)
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
tr.replaceWith(from, to, content)
|
|
93
|
+
}
|
|
39
94
|
|
|
40
95
|
// set cursor at end of inserted content
|
|
41
|
-
|
|
96
|
+
if (options.updateSelection) {
|
|
97
|
+
selectionToInsertionEnd(tr, tr.steps.length - 1, -1)
|
|
98
|
+
}
|
|
42
99
|
}
|
|
43
100
|
|
|
44
101
|
return true
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
joinBackward as originalJoinBackward,
|
|
3
|
+
joinDown as originalJoinDown,
|
|
4
|
+
joinForward as originalJoinForward,
|
|
5
|
+
joinUp as originalJoinUp,
|
|
6
|
+
} from '@tiptap/pm/commands'
|
|
7
|
+
|
|
8
|
+
import { RawCommands } from '../types'
|
|
9
|
+
|
|
10
|
+
declare module '@tiptap/core' {
|
|
11
|
+
interface Commands<ReturnType> {
|
|
12
|
+
joinUp: {
|
|
13
|
+
/**
|
|
14
|
+
* Join two nodes Up.
|
|
15
|
+
*/
|
|
16
|
+
joinUp: () => ReturnType
|
|
17
|
+
}
|
|
18
|
+
joinDown: {
|
|
19
|
+
/**
|
|
20
|
+
* Join two nodes Down.
|
|
21
|
+
*/
|
|
22
|
+
joinDown: () => ReturnType
|
|
23
|
+
}
|
|
24
|
+
joinBackward: {
|
|
25
|
+
/**
|
|
26
|
+
* Join two nodes Backwards.
|
|
27
|
+
*/
|
|
28
|
+
joinBackward: () => ReturnType
|
|
29
|
+
}
|
|
30
|
+
joinForward: {
|
|
31
|
+
/**
|
|
32
|
+
* Join two nodes Forwards.
|
|
33
|
+
*/
|
|
34
|
+
joinForward: () => ReturnType
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const joinUp: RawCommands['joinUp'] = () => ({ state, dispatch }) => {
|
|
40
|
+
return originalJoinUp(state, dispatch)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const joinDown: RawCommands['joinDown'] = () => ({ state, dispatch }) => {
|
|
44
|
+
return originalJoinDown(state, dispatch)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const joinBackward: RawCommands['joinBackward'] = () => ({ state, dispatch }) => {
|
|
48
|
+
return originalJoinBackward(state, dispatch)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const joinForward: RawCommands['joinForward'] = () => ({ state, dispatch }) => {
|
|
52
|
+
return originalJoinForward(state, dispatch)
|
|
53
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RawCommands } from '../types'
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { isiOS } from '../utilities/isiOS'
|
|
3
|
+
import { isMacOS } from '../utilities/isMacOS'
|
|
4
4
|
|
|
5
5
|
function normalizeKeyName(name: string) {
|
|
6
6
|
const parts = name.split(/-(?!$)/)
|
|
@@ -27,7 +27,7 @@ function normalizeKeyName(name: string) {
|
|
|
27
27
|
} else if (/^s(hift)?$/i.test(mod)) {
|
|
28
28
|
shift = true
|
|
29
29
|
} else if (/^mod$/i.test(mod)) {
|
|
30
|
-
if (
|
|
30
|
+
if (isiOS() || isMacOS()) {
|
|
31
31
|
meta = true
|
|
32
32
|
} else {
|
|
33
33
|
ctrl = true
|
package/src/commands/lift.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { lift as originalLift } from '
|
|
2
|
-
import { NodeType } from '
|
|
1
|
+
import { lift as originalLift } from '@tiptap/pm/commands'
|
|
2
|
+
import { NodeType } from '@tiptap/pm/model'
|
|
3
|
+
|
|
4
|
+
import { getNodeType } from '../helpers/getNodeType'
|
|
5
|
+
import { isNodeActive } from '../helpers/isNodeActive'
|
|
3
6
|
import { RawCommands } from '../types'
|
|
4
|
-
import isNodeActive from '../helpers/isNodeActive'
|
|
5
|
-
import getNodeType from '../helpers/getNodeType'
|
|
6
7
|
|
|
7
8
|
declare module '@tiptap/core' {
|
|
8
9
|
interface Commands<ReturnType> {
|
|
@@ -10,7 +11,7 @@ declare module '@tiptap/core' {
|
|
|
10
11
|
/**
|
|
11
12
|
* Removes an existing wrap.
|
|
12
13
|
*/
|
|
13
|
-
lift: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType
|
|
14
|
+
lift: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { NodeType } from '@tiptap/pm/model'
|
|
2
|
+
import { liftListItem as originalLiftListItem } from '@tiptap/pm/schema-list'
|
|
3
|
+
|
|
4
|
+
import { getNodeType } from '../helpers/getNodeType'
|
|
3
5
|
import { RawCommands } from '../types'
|
|
4
|
-
import getNodeType from '../helpers/getNodeType'
|
|
5
6
|
|
|
6
7
|
declare module '@tiptap/core' {
|
|
7
8
|
interface Commands<ReturnType> {
|
|
@@ -9,7 +10,7 @@ declare module '@tiptap/core' {
|
|
|
9
10
|
/**
|
|
10
11
|
* Lift the list item into a wrapping list.
|
|
11
12
|
*/
|
|
12
|
-
liftListItem: (typeOrName: string | NodeType) => ReturnType
|
|
13
|
+
liftListItem: (typeOrName: string | NodeType) => ReturnType
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { newlineInCode as originalNewlineInCode } from '
|
|
1
|
+
import { newlineInCode as originalNewlineInCode } from '@tiptap/pm/commands'
|
|
2
|
+
|
|
2
3
|
import { RawCommands } from '../types'
|
|
3
4
|
|
|
4
5
|
declare module '@tiptap/core' {
|
|
@@ -7,7 +8,7 @@ declare module '@tiptap/core' {
|
|
|
7
8
|
/**
|
|
8
9
|
* Add a newline character in code.
|
|
9
10
|
*/
|
|
10
|
-
newlineInCode: () => ReturnType
|
|
11
|
+
newlineInCode: () => ReturnType
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import getMarkType from '../helpers/getMarkType'
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import { MarkType, NodeType } from '@tiptap/pm/model'
|
|
2
|
+
|
|
3
|
+
import { getMarkType } from '../helpers/getMarkType'
|
|
4
|
+
import { getNodeType } from '../helpers/getNodeType'
|
|
5
|
+
import { getSchemaTypeNameByName } from '../helpers/getSchemaTypeNameByName'
|
|
6
6
|
import { RawCommands } from '../types'
|
|
7
|
+
import { deleteProps } from '../utilities/deleteProps'
|
|
7
8
|
|
|
8
9
|
declare module '@tiptap/core' {
|
|
9
10
|
interface Commands<ReturnType> {
|
|
@@ -11,7 +12,10 @@ declare module '@tiptap/core' {
|
|
|
11
12
|
/**
|
|
12
13
|
* Resets some node attributes to the default value.
|
|
13
14
|
*/
|
|
14
|
-
resetAttributes: (
|
|
15
|
+
resetAttributes: (
|
|
16
|
+
typeOrName: string | NodeType | MarkType,
|
|
17
|
+
attributes: string | string[],
|
|
18
|
+
) => ReturnType
|
|
15
19
|
}
|
|
16
20
|
}
|
|
17
21
|
}
|
|
@@ -21,9 +25,7 @@ export const resetAttributes: RawCommands['resetAttributes'] = (typeOrName, attr
|
|
|
21
25
|
let markType: MarkType | null = null
|
|
22
26
|
|
|
23
27
|
const schemaType = getSchemaTypeNameByName(
|
|
24
|
-
typeof typeOrName === 'string'
|
|
25
|
-
? typeOrName
|
|
26
|
-
: typeOrName.name,
|
|
28
|
+
typeof typeOrName === 'string' ? typeOrName : typeOrName.name,
|
|
27
29
|
state.schema,
|
|
28
30
|
)
|
|
29
31
|
|
|
@@ -49,7 +51,11 @@ export const resetAttributes: RawCommands['resetAttributes'] = (typeOrName, attr
|
|
|
49
51
|
if (markType && node.marks.length) {
|
|
50
52
|
node.marks.forEach(mark => {
|
|
51
53
|
if (markType === mark.type) {
|
|
52
|
-
tr.addMark(
|
|
54
|
+
tr.addMark(
|
|
55
|
+
pos,
|
|
56
|
+
pos + node.nodeSize,
|
|
57
|
+
markType.create(deleteProps(mark.attrs, attributes)),
|
|
58
|
+
)
|
|
53
59
|
}
|
|
54
60
|
})
|
|
55
61
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { selectAll as originalSelectAll } from 'prosemirror-commands'
|
|
2
1
|
import { RawCommands } from '../types'
|
|
3
2
|
|
|
4
3
|
declare module '@tiptap/core' {
|
|
@@ -12,6 +11,9 @@ declare module '@tiptap/core' {
|
|
|
12
11
|
}
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
export const selectAll: RawCommands['selectAll'] = () => ({
|
|
16
|
-
return
|
|
14
|
+
export const selectAll: RawCommands['selectAll'] = () => ({ tr, commands }) => {
|
|
15
|
+
return commands.setTextSelection({
|
|
16
|
+
from: 0,
|
|
17
|
+
to: tr.doc.content.size,
|
|
18
|
+
})
|
|
17
19
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { selectNodeBackward as originalSelectNodeBackward } from '
|
|
1
|
+
import { selectNodeBackward as originalSelectNodeBackward } from '@tiptap/pm/commands'
|
|
2
|
+
|
|
2
3
|
import { RawCommands } from '../types'
|
|
3
4
|
|
|
4
5
|
declare module '@tiptap/core' {
|
|
@@ -7,7 +8,7 @@ declare module '@tiptap/core' {
|
|
|
7
8
|
/**
|
|
8
9
|
* Select a node backward.
|
|
9
10
|
*/
|
|
10
|
-
selectNodeBackward: () => ReturnType
|
|
11
|
+
selectNodeBackward: () => ReturnType
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { selectNodeForward as originalSelectNodeForward } from '
|
|
1
|
+
import { selectNodeForward as originalSelectNodeForward } from '@tiptap/pm/commands'
|
|
2
|
+
|
|
2
3
|
import { RawCommands } from '../types'
|
|
3
4
|
|
|
4
5
|
declare module '@tiptap/core' {
|
|
@@ -7,7 +8,7 @@ declare module '@tiptap/core' {
|
|
|
7
8
|
/**
|
|
8
9
|
* Select a node forward.
|
|
9
10
|
*/
|
|
10
|
-
selectNodeForward: () => ReturnType
|
|
11
|
+
selectNodeForward: () => ReturnType
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { selectParentNode as originalSelectParentNode } from '
|
|
1
|
+
import { selectParentNode as originalSelectParentNode } from '@tiptap/pm/commands'
|
|
2
|
+
|
|
2
3
|
import { RawCommands } from '../types'
|
|
3
4
|
|
|
4
5
|
declare module '@tiptap/core' {
|
|
@@ -7,7 +8,7 @@ declare module '@tiptap/core' {
|
|
|
7
8
|
/**
|
|
8
9
|
* Select the parent node.
|
|
9
10
|
*/
|
|
10
|
-
selectParentNode: () => ReturnType
|
|
11
|
+
selectParentNode: () => ReturnType
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
// TODO: add types to @types/prosemirror-commands
|
|
3
|
+
import { selectTextblockEnd as originalSelectTextblockEnd } from '@tiptap/pm/commands'
|
|
4
|
+
|
|
5
|
+
import { RawCommands } from '../types'
|
|
6
|
+
|
|
7
|
+
declare module '@tiptap/core' {
|
|
8
|
+
interface Commands<ReturnType> {
|
|
9
|
+
selectTextblockEnd: {
|
|
10
|
+
/**
|
|
11
|
+
* Moves the cursor to the end of current text block.
|
|
12
|
+
*/
|
|
13
|
+
selectTextblockEnd: () => ReturnType
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const selectTextblockEnd: RawCommands['selectTextblockEnd'] = () => ({ state, dispatch }) => {
|
|
19
|
+
return originalSelectTextblockEnd(state, dispatch)
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
// TODO: add types to @types/prosemirror-commands
|
|
3
|
+
import { selectTextblockStart as originalSelectTextblockStart } from '@tiptap/pm/commands'
|
|
4
|
+
|
|
5
|
+
import { RawCommands } from '../types'
|
|
6
|
+
|
|
7
|
+
declare module '@tiptap/core' {
|
|
8
|
+
interface Commands<ReturnType> {
|
|
9
|
+
selectTextblockStart: {
|
|
10
|
+
/**
|
|
11
|
+
* Moves the cursor to the start of current text block.
|
|
12
|
+
*/
|
|
13
|
+
selectTextblockStart: () => ReturnType
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const selectTextblockStart: RawCommands['selectTextblockStart'] = () => ({ state, dispatch }) => {
|
|
19
|
+
return originalSelectTextblockStart(state, dispatch)
|
|
20
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import createDocument from '../helpers/createDocument'
|
|
4
|
-
import {
|
|
1
|
+
import { ParseOptions } from '@tiptap/pm/model'
|
|
2
|
+
|
|
3
|
+
import { createDocument } from '../helpers/createDocument'
|
|
4
|
+
import { Content, RawCommands } from '../types'
|
|
5
5
|
|
|
6
6
|
declare module '@tiptap/core' {
|
|
7
7
|
interface Commands<ReturnType> {
|
|
@@ -13,7 +13,7 @@ declare module '@tiptap/core' {
|
|
|
13
13
|
content: Content,
|
|
14
14
|
emitUpdate?: boolean,
|
|
15
15
|
parseOptions?: ParseOptions,
|
|
16
|
-
) => ReturnType
|
|
16
|
+
) => ReturnType
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -21,12 +21,9 @@ declare module '@tiptap/core' {
|
|
|
21
21
|
export const setContent: RawCommands['setContent'] = (content, emitUpdate = false, parseOptions = {}) => ({ tr, editor, dispatch }) => {
|
|
22
22
|
const { doc } = tr
|
|
23
23
|
const document = createDocument(content, editor.schema, parseOptions)
|
|
24
|
-
const selection = TextSelection.create(doc, 0, doc.content.size)
|
|
25
24
|
|
|
26
25
|
if (dispatch) {
|
|
27
|
-
tr.
|
|
28
|
-
.replaceSelectionWith(document, false)
|
|
29
|
-
.setMeta('preventUpdate', !emitUpdate)
|
|
26
|
+
tr.replaceWith(0, doc.content.size, document).setMeta('preventUpdate', !emitUpdate)
|
|
30
27
|
}
|
|
31
28
|
|
|
32
29
|
return true
|