@tiptap/core 2.0.0-beta.21 → 2.0.0-beta.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.cjs +4311 -0
- package/dist/index.d.ts +2330 -0
- package/dist/index.js +4311 -0
- package/package.json +39 -25
- package/src/CommandManager.ts +76 -86
- package/src/Editor.ts +120 -81
- package/src/EventEmitter.ts +14 -4
- package/src/Extension.ts +280 -108
- package/src/ExtensionManager.ts +254 -108
- package/src/InputRule.ts +260 -0
- package/src/Mark.ts +398 -147
- package/src/Node.ts +437 -171
- package/src/NodeView.ts +132 -63
- package/src/PasteRule.ts +240 -0
- package/src/Tracker.ts +38 -0
- package/src/commands/blur.ts +12 -6
- package/src/commands/clearContent.ts +3 -3
- package/src/commands/clearNodes.ts +31 -19
- package/src/commands/command.ts +2 -2
- package/src/commands/createParagraphNear.ts +5 -4
- package/src/commands/deleteCurrentNode.ts +41 -0
- package/src/commands/deleteNode.ts +37 -0
- package/src/commands/deleteRange.ts +3 -3
- package/src/commands/deleteSelection.ts +5 -4
- package/src/commands/enter.ts +3 -3
- package/src/commands/exitCode.ts +5 -4
- package/src/commands/extendMarkRange.ts +16 -12
- package/src/commands/first.ts +3 -3
- package/src/commands/focus.ts +47 -44
- package/src/commands/forEach.ts +24 -0
- package/src/commands/index.ts +50 -0
- package/src/commands/insertContent.ts +17 -24
- package/src/commands/insertContentAt.ts +94 -0
- package/src/commands/join.ts +53 -0
- package/src/commands/keyboardShortcut.ts +6 -6
- package/src/commands/lift.ts +8 -7
- package/src/commands/liftEmptyBlock.ts +5 -4
- package/src/commands/liftListItem.ts +7 -6
- package/src/commands/newlineInCode.ts +5 -4
- package/src/commands/resetAttributes.ts +18 -12
- package/src/commands/scrollIntoView.ts +3 -3
- package/src/commands/selectAll.ts +8 -6
- package/src/commands/selectNodeBackward.ts +5 -4
- package/src/commands/selectNodeForward.ts +5 -4
- package/src/commands/selectParentNode.ts +5 -4
- package/src/commands/selectTextblockEnd.ts +20 -0
- package/src/commands/selectTextblockStart.ts +20 -0
- package/src/commands/setContent.ts +9 -16
- package/src/commands/setMark.ts +90 -14
- package/src/commands/setMeta.ts +18 -0
- package/src/commands/setNode.ts +32 -8
- package/src/commands/setNodeSelection.ts +27 -0
- package/src/commands/setTextSelection.ts +31 -0
- package/src/commands/sinkListItem.ts +7 -6
- package/src/commands/splitBlock.ts +31 -41
- package/src/commands/splitListItem.ts +46 -29
- package/src/commands/toggleList.ts +88 -20
- package/src/commands/toggleMark.ts +19 -8
- package/src/commands/toggleNode.ts +11 -6
- package/src/commands/toggleWrap.ts +10 -10
- package/src/commands/undoInputRule.ts +34 -5
- package/src/commands/unsetAllMarks.ts +7 -11
- package/src/commands/unsetMark.ts +36 -23
- package/src/commands/updateAttributes.ts +27 -15
- package/src/commands/wrapIn.ts +7 -12
- package/src/commands/wrapInList.ts +7 -6
- package/src/extensions/clipboardTextSerializer.ts +15 -36
- package/src/extensions/commands.ts +3 -147
- package/src/extensions/editable.ts +2 -1
- package/src/extensions/focusEvents.ts +4 -6
- package/src/extensions/index.ts +1 -0
- package/src/extensions/keymap.ts +106 -13
- package/src/extensions/tabindex.ts +18 -0
- package/src/helpers/combineTransactionSteps.ts +21 -0
- package/src/helpers/createChainableState.ts +38 -0
- package/src/helpers/createDocument.ts +5 -6
- package/src/helpers/createNodeFromContent.ts +20 -28
- package/src/helpers/defaultBlockAt.ts +13 -0
- package/src/helpers/findChildren.ts +18 -0
- package/src/helpers/findChildrenInRange.ts +36 -0
- package/src/helpers/findParentNode.ts +4 -3
- package/src/helpers/findParentNodeClosestToPos.ts +13 -7
- package/src/helpers/generateHTML.ts +7 -6
- package/src/helpers/generateJSON.ts +12 -0
- package/src/helpers/generateText.ts +27 -0
- package/src/helpers/getAttributes.ts +26 -0
- package/src/helpers/getAttributesFromExtensions.ts +42 -14
- package/src/helpers/getChangedRanges.ts +83 -0
- package/src/helpers/getDebugJSON.ts +54 -0
- package/src/helpers/getExtensionField.ts +25 -0
- package/src/helpers/getHTMLFromFragment.ts +5 -6
- package/src/helpers/getMarkAttributes.ts +18 -11
- package/src/helpers/getMarkRange.ts +41 -8
- package/src/helpers/getMarkType.ts +8 -2
- package/src/helpers/getMarksBetween.ts +34 -10
- package/src/helpers/getNodeAttributes.ts +14 -13
- package/src/helpers/getNodeType.ts +8 -2
- package/src/helpers/getRenderedAttributes.ts +9 -7
- package/src/helpers/getSchema.ts +7 -133
- package/src/helpers/getSchemaByResolvedExtensions.ts +192 -0
- package/src/helpers/getSchemaTypeByName.ts +3 -11
- package/src/helpers/getSchemaTypeNameByName.ts +2 -2
- package/src/helpers/getSplittedAttributes.ts +4 -4
- package/src/helpers/getText.ts +19 -0
- package/src/helpers/getTextBetween.ts +46 -0
- package/src/helpers/getTextContentFromNodes.ts +26 -0
- package/src/helpers/getTextSerializersFromSchema.ts +11 -0
- package/src/helpers/index.ts +33 -0
- package/src/helpers/injectExtensionAttributesToParseRule.ts +22 -23
- package/src/helpers/isActive.ts +10 -6
- package/src/helpers/isExtensionRulesEnabled.ts +15 -0
- package/src/helpers/isList.ts +14 -7
- package/src/helpers/isMarkActive.ts +49 -27
- package/src/helpers/isNodeActive.ts +29 -39
- package/src/helpers/isNodeEmpty.ts +2 -2
- package/src/helpers/isNodeSelection.ts +3 -4
- package/src/helpers/isTextSelection.ts +3 -4
- package/src/helpers/posToDOMRect.ts +35 -0
- package/src/helpers/resolveFocusPosition.ts +42 -0
- package/src/helpers/selectionToInsertionEnd.ts +3 -3
- package/src/helpers/splitExtensions.ts +3 -3
- package/src/index.ts +15 -24
- 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 +59 -0
- package/src/pasteRules/index.ts +3 -0
- package/src/pasteRules/markPasteRule.ts +61 -53
- package/src/pasteRules/nodePasteRule.ts +37 -0
- package/src/pasteRules/textPasteRule.ts +35 -0
- package/src/style.ts +16 -3
- package/src/types.ts +170 -97
- package/src/utilities/callOrReturn.ts +6 -3
- package/src/utilities/createStyleTag.ts +12 -1
- package/src/utilities/deleteProps.ts +2 -4
- package/src/utilities/elementFromString.ts +4 -5
- package/src/utilities/escapeForRegEx.ts +4 -0
- package/src/utilities/findDuplicates.ts +5 -0
- package/src/utilities/fromString.ts +2 -2
- package/src/utilities/index.ts +20 -0
- package/src/utilities/isEmptyObject.ts +2 -2
- package/src/utilities/isFunction.ts +3 -0
- package/src/utilities/isMacOS.ts +5 -0
- package/src/utilities/isNumber.ts +3 -0
- package/src/utilities/isPlainObject.ts +8 -5
- package/src/utilities/isRegExp.ts +3 -0
- package/src/utilities/isString.ts +3 -0
- package/src/utilities/isiOS.ts +12 -0
- package/src/utilities/mergeAttributes.ts +2 -3
- package/src/utilities/mergeDeep.ts +2 -3
- package/src/utilities/minMax.ts +1 -1
- package/src/utilities/objectIncludes.ts +17 -5
- package/src/utilities/removeDuplicates.ts +15 -0
- package/CHANGELOG.md +0 -365
- package/LICENSE.md +0 -21
- package/dist/packages/core/src/CommandManager.d.ts +0 -13
- package/dist/packages/core/src/Editor.d.ts +0 -142
- package/dist/packages/core/src/EventEmitter.d.ts +0 -7
- package/dist/packages/core/src/Extension.d.ts +0 -148
- package/dist/packages/core/src/ExtensionManager.d.ts +0 -24
- package/dist/packages/core/src/Mark.d.ts +0 -211
- package/dist/packages/core/src/Node.d.ts +0 -265
- package/dist/packages/core/src/NodeView.d.ts +0 -31
- package/dist/packages/core/src/commands/blur.d.ts +0 -12
- package/dist/packages/core/src/commands/clearContent.d.ts +0 -12
- package/dist/packages/core/src/commands/clearNodes.d.ts +0 -12
- package/dist/packages/core/src/commands/command.d.ts +0 -12
- package/dist/packages/core/src/commands/createParagraphNear.d.ts +0 -12
- package/dist/packages/core/src/commands/deleteRange.d.ts +0 -12
- package/dist/packages/core/src/commands/deleteSelection.d.ts +0 -12
- package/dist/packages/core/src/commands/enter.d.ts +0 -12
- package/dist/packages/core/src/commands/exitCode.d.ts +0 -12
- package/dist/packages/core/src/commands/extendMarkRange.d.ts +0 -13
- package/dist/packages/core/src/commands/first.d.ts +0 -12
- package/dist/packages/core/src/commands/focus.d.ts +0 -12
- package/dist/packages/core/src/commands/insertContent.d.ts +0 -12
- package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
- package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
- package/dist/packages/core/src/commands/insertText.d.ts +0 -12
- package/dist/packages/core/src/commands/joinBackward.d.ts +0 -12
- package/dist/packages/core/src/commands/joinForward.d.ts +0 -12
- package/dist/packages/core/src/commands/keyboardShortcut.d.ts +0 -12
- package/dist/packages/core/src/commands/lift.d.ts +0 -13
- package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +0 -12
- package/dist/packages/core/src/commands/liftListItem.d.ts +0 -13
- package/dist/packages/core/src/commands/newlineInCode.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/resetAttributes.d.ts +0 -13
- package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
- package/dist/packages/core/src/commands/scrollIntoView.d.ts +0 -12
- package/dist/packages/core/src/commands/selectAll.d.ts +0 -12
- package/dist/packages/core/src/commands/selectNodeBackward.d.ts +0 -12
- package/dist/packages/core/src/commands/selectNodeForward.d.ts +0 -12
- package/dist/packages/core/src/commands/selectParentNode.d.ts +0 -12
- package/dist/packages/core/src/commands/setContent.d.ts +0 -12
- package/dist/packages/core/src/commands/setMark.d.ts +0 -13
- package/dist/packages/core/src/commands/setNode.d.ts +0 -13
- package/dist/packages/core/src/commands/sinkListItem.d.ts +0 -13
- package/dist/packages/core/src/commands/splitBlock.d.ts +0 -14
- package/dist/packages/core/src/commands/splitListItem.d.ts +0 -13
- package/dist/packages/core/src/commands/toggleList.d.ts +0 -13
- package/dist/packages/core/src/commands/toggleMark.d.ts +0 -13
- package/dist/packages/core/src/commands/toggleNode.d.ts +0 -13
- package/dist/packages/core/src/commands/toggleWrap.d.ts +0 -13
- package/dist/packages/core/src/commands/undoInputRule.d.ts +0 -12
- package/dist/packages/core/src/commands/unsetAllMarks.d.ts +0 -12
- package/dist/packages/core/src/commands/unsetMark.d.ts +0 -13
- package/dist/packages/core/src/commands/updateAttributes.d.ts +0 -13
- package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
- package/dist/packages/core/src/commands/wrapIn.d.ts +0 -13
- package/dist/packages/core/src/commands/wrapInList.d.ts +0 -13
- package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +0 -2
- package/dist/packages/core/src/extensions/commands.d.ts +0 -100
- package/dist/packages/core/src/extensions/editable.d.ts +0 -2
- package/dist/packages/core/src/extensions/focusEvents.d.ts +0 -2
- package/dist/packages/core/src/extensions/index.d.ts +0 -5
- package/dist/packages/core/src/extensions/keymap.d.ts +0 -2
- package/dist/packages/core/src/helpers/createDocument.d.ts +0 -4
- package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +0 -8
- package/dist/packages/core/src/helpers/findParentNode.d.ts +0 -9
- package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +0 -8
- package/dist/packages/core/src/helpers/generateHTML.d.ts +0 -2
- package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +0 -6
- package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +0 -2
- package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +0 -4
- package/dist/packages/core/src/helpers/getMarkRange.d.ts +0 -3
- package/dist/packages/core/src/helpers/getMarkType.d.ts +0 -2
- package/dist/packages/core/src/helpers/getMarksBetween.d.ts +0 -3
- package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +0 -4
- package/dist/packages/core/src/helpers/getNodeType.d.ts +0 -2
- package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +0 -3
- package/dist/packages/core/src/helpers/getSchema.d.ts +0 -3
- package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +0 -2
- package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +0 -2
- package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +0 -2
- package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +0 -9
- package/dist/packages/core/src/helpers/isActive.d.ts +0 -3
- package/dist/packages/core/src/helpers/isList.d.ts +0 -2
- package/dist/packages/core/src/helpers/isMarkActive.d.ts +0 -4
- package/dist/packages/core/src/helpers/isNodeActive.d.ts +0 -4
- package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +0 -2
- package/dist/packages/core/src/helpers/isNodeSelection.d.ts +0 -2
- package/dist/packages/core/src/helpers/isTextSelection.d.ts +0 -2
- package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +0 -2
- package/dist/packages/core/src/helpers/splitExtensions.d.ts +0 -9
- package/dist/packages/core/src/index.d.ts +0 -30
- package/dist/packages/core/src/inputRules/markInputRule.d.ts +0 -3
- package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +0 -3
- package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +0 -3
- package/dist/packages/core/src/style.d.ts +0 -2
- package/dist/packages/core/src/types.d.ts +0 -154
- package/dist/packages/core/src/utilities/callOrReturn.d.ts +0 -8
- package/dist/packages/core/src/utilities/createStyleTag.d.ts +0 -1
- package/dist/packages/core/src/utilities/deleteProps.d.ts +0 -7
- package/dist/packages/core/src/utilities/elementFromString.d.ts +0 -1
- package/dist/packages/core/src/utilities/fromString.d.ts +0 -1
- package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
- package/dist/packages/core/src/utilities/isEmptyObject.d.ts +0 -1
- package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
- package/dist/packages/core/src/utilities/isPlainObject.d.ts +0 -1
- package/dist/packages/core/src/utilities/mergeAttributes.d.ts +0 -2
- package/dist/packages/core/src/utilities/mergeDeep.d.ts +0 -2
- package/dist/packages/core/src/utilities/minMax.d.ts +0 -1
- package/dist/packages/core/src/utilities/objectIncludes.d.ts +0 -7
- package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
- package/dist/tiptap-core.bundle.umd.min.js +0 -17
- package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
- package/dist/tiptap-core.cjs.js +0 -3027
- package/dist/tiptap-core.cjs.js.map +0 -1
- package/dist/tiptap-core.esm.js +0 -3002
- package/dist/tiptap-core.esm.js.map +0 -1
- package/dist/tiptap-core.umd.js +0 -3024
- package/dist/tiptap-core.umd.js.map +0 -1
- package/src/commands/insertHTML.ts +0 -30
- package/src/commands/insertNode.ts +0 -33
- package/src/commands/insertText.ts +0 -22
- package/src/commands/joinBackward.ts +0 -17
- package/src/commands/joinForward.ts +0 -17
- package/src/commands/replace.ts +0 -20
- package/src/commands/replaceRange.ts +0 -36
- package/src/commands/resetNodeAttributes.ts +0 -33
- package/src/commands/updateNodeAttributes.ts +0 -35
- package/src/utilities/isClass.ts +0 -7
- package/src/utilities/isObject.ts +0 -10
- package/src/utilities/removeElement.ts +0 -5
package/src/commands/command.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Command, RawCommands } from '../types'
|
|
2
2
|
|
|
3
3
|
declare module '@tiptap/core' {
|
|
4
|
-
interface Commands {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
5
|
command: {
|
|
6
6
|
/**
|
|
7
7
|
* Define a command inline.
|
|
8
8
|
*/
|
|
9
|
-
command: (fn: (props: Parameters<Command>[0]) => boolean) =>
|
|
9
|
+
command: (fn: (props: Parameters<Command>[0]) => boolean) => ReturnType,
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { createParagraphNear as originalCreateParagraphNear } from '
|
|
2
|
-
|
|
1
|
+
import { createParagraphNear as originalCreateParagraphNear } from '@tiptap/pm/commands'
|
|
2
|
+
|
|
3
|
+
import { RawCommands } from '../types'
|
|
3
4
|
|
|
4
5
|
declare module '@tiptap/core' {
|
|
5
|
-
interface Commands {
|
|
6
|
+
interface Commands<ReturnType> {
|
|
6
7
|
createParagraphNear: {
|
|
7
8
|
/**
|
|
8
9
|
* Create a paragraph nearby.
|
|
9
10
|
*/
|
|
10
|
-
createParagraphNear: () =>
|
|
11
|
+
createParagraphNear: () => ReturnType
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { RawCommands } from '../types'
|
|
2
|
+
|
|
3
|
+
declare module '@tiptap/core' {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
|
+
deleteCurrentNode: {
|
|
6
|
+
/**
|
|
7
|
+
* Delete the node that currently has the selection anchor.
|
|
8
|
+
*/
|
|
9
|
+
deleteCurrentNode: () => ReturnType,
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const deleteCurrentNode: RawCommands['deleteCurrentNode'] = () => ({ tr, dispatch }) => {
|
|
15
|
+
const { selection } = tr
|
|
16
|
+
const currentNode = selection.$anchor.node()
|
|
17
|
+
|
|
18
|
+
// if there is content inside the current node, break out of this command
|
|
19
|
+
if (currentNode.content.size > 0) {
|
|
20
|
+
return false
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const $pos = tr.selection.$anchor
|
|
24
|
+
|
|
25
|
+
for (let depth = $pos.depth; depth > 0; depth -= 1) {
|
|
26
|
+
const node = $pos.node(depth)
|
|
27
|
+
|
|
28
|
+
if (node.type === currentNode.type) {
|
|
29
|
+
if (dispatch) {
|
|
30
|
+
const from = $pos.before(depth)
|
|
31
|
+
const to = $pos.after(depth)
|
|
32
|
+
|
|
33
|
+
tr.delete(from, to).scrollIntoView()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return true
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return false
|
|
41
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { NodeType } from '@tiptap/pm/model'
|
|
2
|
+
|
|
3
|
+
import { getNodeType } from '../helpers/getNodeType'
|
|
4
|
+
import { RawCommands } from '../types'
|
|
5
|
+
|
|
6
|
+
declare module '@tiptap/core' {
|
|
7
|
+
interface Commands<ReturnType> {
|
|
8
|
+
deleteNode: {
|
|
9
|
+
/**
|
|
10
|
+
* Delete a node.
|
|
11
|
+
*/
|
|
12
|
+
deleteNode: (typeOrName: string | NodeType) => ReturnType,
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const deleteNode: RawCommands['deleteNode'] = typeOrName => ({ tr, state, dispatch }) => {
|
|
18
|
+
const type = getNodeType(typeOrName, state.schema)
|
|
19
|
+
const $pos = tr.selection.$anchor
|
|
20
|
+
|
|
21
|
+
for (let depth = $pos.depth; depth > 0; depth -= 1) {
|
|
22
|
+
const node = $pos.node(depth)
|
|
23
|
+
|
|
24
|
+
if (node.type === type) {
|
|
25
|
+
if (dispatch) {
|
|
26
|
+
const from = $pos.before(depth)
|
|
27
|
+
const to = $pos.after(depth)
|
|
28
|
+
|
|
29
|
+
tr.delete(from, to).scrollIntoView()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return true
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Range, RawCommands } from '../types'
|
|
2
2
|
|
|
3
3
|
declare module '@tiptap/core' {
|
|
4
|
-
interface Commands {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
5
|
deleteRange: {
|
|
6
6
|
/**
|
|
7
7
|
* Delete a given range.
|
|
8
8
|
*/
|
|
9
|
-
deleteRange: (range: Range) =>
|
|
9
|
+
deleteRange: (range: Range) => ReturnType,
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { deleteSelection as originalDeleteSelection } from '
|
|
2
|
-
|
|
1
|
+
import { deleteSelection as originalDeleteSelection } from '@tiptap/pm/commands'
|
|
2
|
+
|
|
3
|
+
import { RawCommands } from '../types'
|
|
3
4
|
|
|
4
5
|
declare module '@tiptap/core' {
|
|
5
|
-
interface Commands {
|
|
6
|
+
interface Commands<ReturnType> {
|
|
6
7
|
deleteSelection: {
|
|
7
8
|
/**
|
|
8
9
|
* Delete the selection, if there is one.
|
|
9
10
|
*/
|
|
10
|
-
deleteSelection: () =>
|
|
11
|
+
deleteSelection: () => ReturnType
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
package/src/commands/enter.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RawCommands } from '../types'
|
|
2
2
|
|
|
3
3
|
declare module '@tiptap/core' {
|
|
4
|
-
interface Commands {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
5
|
enter: {
|
|
6
6
|
/**
|
|
7
7
|
* Trigger enter.
|
|
8
8
|
*/
|
|
9
|
-
enter: () =>
|
|
9
|
+
enter: () => ReturnType,
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
}
|
package/src/commands/exitCode.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { exitCode as originalExitCode } from '
|
|
2
|
-
|
|
1
|
+
import { exitCode as originalExitCode } from '@tiptap/pm/commands'
|
|
2
|
+
|
|
3
|
+
import { RawCommands } from '../types'
|
|
3
4
|
|
|
4
5
|
declare module '@tiptap/core' {
|
|
5
|
-
interface Commands {
|
|
6
|
+
interface Commands<ReturnType> {
|
|
6
7
|
exitCode: {
|
|
7
8
|
/**
|
|
8
9
|
* Exit from a code block.
|
|
9
10
|
*/
|
|
10
|
-
exitCode: () =>
|
|
11
|
+
exitCode: () => ReturnType
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -1,29 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import { MarkType } from '@tiptap/pm/model'
|
|
2
|
+
import { TextSelection } from '@tiptap/pm/state'
|
|
3
|
+
|
|
4
|
+
import { getMarkRange } from '../helpers/getMarkRange'
|
|
5
|
+
import { getMarkType } from '../helpers/getMarkType'
|
|
6
|
+
import { RawCommands } from '../types'
|
|
6
7
|
|
|
7
8
|
declare module '@tiptap/core' {
|
|
8
|
-
interface Commands {
|
|
9
|
+
interface Commands<ReturnType> {
|
|
9
10
|
extendMarkRange: {
|
|
10
11
|
/**
|
|
11
12
|
* Extends the text selection to the current mark.
|
|
12
13
|
*/
|
|
13
|
-
extendMarkRange: (
|
|
14
|
+
extendMarkRange: (
|
|
15
|
+
typeOrName: string | MarkType,
|
|
16
|
+
attributes?: Record<string, any>,
|
|
17
|
+
) => ReturnType
|
|
14
18
|
}
|
|
15
19
|
}
|
|
16
20
|
}
|
|
17
21
|
|
|
18
|
-
export const extendMarkRange: RawCommands['extendMarkRange'] = typeOrName => ({ tr, state, dispatch }) => {
|
|
22
|
+
export const extendMarkRange: RawCommands['extendMarkRange'] = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {
|
|
19
23
|
const type = getMarkType(typeOrName, state.schema)
|
|
20
24
|
const { doc, selection } = tr
|
|
21
|
-
const { $from,
|
|
25
|
+
const { $from, from, to } = selection
|
|
22
26
|
|
|
23
|
-
if (
|
|
24
|
-
const range = getMarkRange($from, type)
|
|
27
|
+
if (dispatch) {
|
|
28
|
+
const range = getMarkRange($from, type, attributes)
|
|
25
29
|
|
|
26
|
-
if (range) {
|
|
30
|
+
if (range && range.from <= from && range.to >= to) {
|
|
27
31
|
const newSelection = TextSelection.create(doc, range.from, range.to)
|
|
28
32
|
|
|
29
33
|
tr.setSelection(newSelection)
|
package/src/commands/first.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Command, RawCommands } from '../types'
|
|
1
|
+
import { Command, CommandProps, RawCommands } from '../types'
|
|
2
2
|
|
|
3
3
|
declare module '@tiptap/core' {
|
|
4
|
-
interface Commands {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
5
|
first: {
|
|
6
6
|
/**
|
|
7
7
|
* Runs one command after the other and stops at the first which returns true.
|
|
8
8
|
*/
|
|
9
|
-
first: (commands: Command[] | ((props:
|
|
9
|
+
first: (commands: Command[] | ((props: CommandProps) => Command[])) => ReturnType,
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
}
|
package/src/commands/focus.ts
CHANGED
|
@@ -1,79 +1,82 @@
|
|
|
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
|
-
interface Commands {
|
|
7
|
+
interface Commands<ReturnType> {
|
|
35
8
|
focus: {
|
|
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
|
+
|
|
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
|
+
|
|
40
|
+
// For React we have to focus asynchronously. Otherwise wild things happen.
|
|
41
|
+
// see: https://github.com/ueberdosis/tiptap/issues/1520
|
|
42
|
+
requestAnimationFrame(() => {
|
|
43
|
+
if (!editor.isDestroyed) {
|
|
44
|
+
view.focus()
|
|
45
|
+
|
|
46
|
+
if (options?.scrollIntoView) {
|
|
47
|
+
editor.commands.scrollIntoView()
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
|
|
50
53
|
if ((view.hasFocus() && position === null) || position === false) {
|
|
51
54
|
return true
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
// we don’t try to resolve a NodeSelection or CellSelection
|
|
55
58
|
if (dispatch && position === null && !isTextSelection(editor.state.selection)) {
|
|
56
|
-
|
|
59
|
+
delayedFocus()
|
|
57
60
|
return true
|
|
58
61
|
}
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
const resolvedEnd = minMax(to, 0, doc.content.size)
|
|
64
|
-
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
|
|
65
66
|
const isSameSelection = editor.state.selection.eq(selection)
|
|
66
67
|
|
|
67
68
|
if (dispatch) {
|
|
68
|
-
|
|
69
|
+
if (!isSameSelection) {
|
|
70
|
+
tr.setSelection(selection)
|
|
71
|
+
}
|
|
69
72
|
|
|
70
73
|
// `tr.setSelection` resets the stored marks
|
|
71
74
|
// so we’ll restore them if the selection is the same as before
|
|
72
|
-
if (isSameSelection && storedMarks) {
|
|
73
|
-
tr.setStoredMarks(storedMarks)
|
|
75
|
+
if (isSameSelection && tr.storedMarks) {
|
|
76
|
+
tr.setStoredMarks(tr.storedMarks)
|
|
74
77
|
}
|
|
75
78
|
|
|
76
|
-
|
|
79
|
+
delayedFocus()
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
return true
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CommandProps, RawCommands } from '../types'
|
|
2
|
+
|
|
3
|
+
declare module '@tiptap/core' {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
|
+
forEach: {
|
|
6
|
+
/**
|
|
7
|
+
* Loop through an array of items.
|
|
8
|
+
*/
|
|
9
|
+
forEach: <T>(
|
|
10
|
+
items: T[],
|
|
11
|
+
fn: (
|
|
12
|
+
item: T,
|
|
13
|
+
props: CommandProps & {
|
|
14
|
+
index: number,
|
|
15
|
+
},
|
|
16
|
+
) => boolean,
|
|
17
|
+
) => ReturnType,
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const forEach: RawCommands['forEach'] = (items, fn) => props => {
|
|
23
|
+
return items.every((item, index) => fn(item, { ...props, index }))
|
|
24
|
+
}
|
|
@@ -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,35 +1,28 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import {
|
|
1
|
+
import { ParseOptions } from '@tiptap/pm/model'
|
|
2
|
+
|
|
3
|
+
import { Content, RawCommands } from '../types'
|
|
4
4
|
|
|
5
5
|
declare module '@tiptap/core' {
|
|
6
|
-
interface Commands {
|
|
6
|
+
interface Commands<ReturnType> {
|
|
7
7
|
insertContent: {
|
|
8
8
|
/**
|
|
9
9
|
* Insert a node or string of HTML at the current position.
|
|
10
10
|
*/
|
|
11
|
-
insertContent: (
|
|
11
|
+
insertContent: (
|
|
12
|
+
value: Content,
|
|
13
|
+
options?: {
|
|
14
|
+
parseOptions?: ParseOptions
|
|
15
|
+
updateSelection?: boolean
|
|
16
|
+
},
|
|
17
|
+
) => ReturnType
|
|
12
18
|
}
|
|
13
19
|
}
|
|
14
20
|
}
|
|
15
21
|
|
|
16
|
-
export const insertContent: RawCommands['insertContent'] = value => ({ tr,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return true
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (!tr.selection.empty) {
|
|
27
|
-
tr.deleteSelection()
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
tr.insert(tr.selection.anchor, content)
|
|
31
|
-
selectionToInsertionEnd(tr, tr.steps.length - 1, -1)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return true
|
|
22
|
+
export const insertContent: RawCommands['insertContent'] = (value, options) => ({ tr, commands }) => {
|
|
23
|
+
return commands.insertContentAt(
|
|
24
|
+
{ from: tr.selection.from, to: tr.selection.to },
|
|
25
|
+
value,
|
|
26
|
+
options,
|
|
27
|
+
)
|
|
35
28
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
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'
|
|
6
|
+
|
|
7
|
+
declare module '@tiptap/core' {
|
|
8
|
+
interface Commands<ReturnType> {
|
|
9
|
+
insertContentAt: {
|
|
10
|
+
/**
|
|
11
|
+
* Insert a node or string of HTML at a specific position.
|
|
12
|
+
*/
|
|
13
|
+
insertContentAt: (
|
|
14
|
+
position: number | Range,
|
|
15
|
+
value: Content,
|
|
16
|
+
options?: {
|
|
17
|
+
parseOptions?: ParseOptions
|
|
18
|
+
updateSelection?: boolean
|
|
19
|
+
},
|
|
20
|
+
) => ReturnType
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const isFragment = (nodeOrFragment: ProseMirrorNode | Fragment): nodeOrFragment is Fragment => {
|
|
26
|
+
return nodeOrFragment.toString().startsWith('<')
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const insertContentAt: RawCommands['insertContentAt'] = (position, value, options) => ({ tr, dispatch, editor }) => {
|
|
30
|
+
if (dispatch) {
|
|
31
|
+
options = {
|
|
32
|
+
parseOptions: {},
|
|
33
|
+
updateSelection: true,
|
|
34
|
+
...options,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const content = createNodeFromContent(value, editor.schema, {
|
|
38
|
+
parseOptions: {
|
|
39
|
+
preserveWhitespace: 'full',
|
|
40
|
+
...options.parseOptions,
|
|
41
|
+
},
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
// don’t dispatch an empty fragment because this can lead to strange errors
|
|
45
|
+
if (content.toString() === '<>') {
|
|
46
|
+
return true
|
|
47
|
+
}
|
|
48
|
+
|
|
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]
|
|
54
|
+
|
|
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
|
+
tr.insertText(value as string, from, to)
|
|
83
|
+
} else {
|
|
84
|
+
tr.replaceWith(from, to, content)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// set cursor at end of inserted content
|
|
88
|
+
if (options.updateSelection) {
|
|
89
|
+
selectionToInsertionEnd(tr, tr.steps.length - 1, -1)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return true
|
|
94
|
+
}
|
|
@@ -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
|
+
}
|