@tiptap/core 2.5.0-beta.1 → 2.5.0-beta.3
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/dist/index.cjs +4534 -4528
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4534 -4526
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +4534 -4528
- package/dist/index.umd.js.map +1 -1
- package/dist/packages/core/src/CommandManager.d.ts +20 -20
- package/dist/packages/core/src/Editor.d.ts +161 -161
- package/dist/packages/core/src/EventEmitter.d.ts +11 -11
- package/dist/packages/core/src/Extension.d.ts +343 -342
- package/dist/packages/core/src/ExtensionManager.d.ts +55 -55
- package/dist/packages/core/src/InputRule.d.ts +42 -42
- package/dist/packages/core/src/Mark.d.ts +451 -450
- package/dist/packages/core/src/Node.d.ts +611 -609
- package/dist/packages/core/src/NodePos.d.ts +44 -44
- package/dist/packages/core/src/NodeView.d.ts +31 -31
- package/dist/packages/core/src/PasteRule.d.ts +50 -50
- package/dist/packages/core/src/Tracker.d.ts +11 -11
- package/dist/packages/core/src/commands/blur.d.ts +13 -13
- package/dist/packages/core/src/commands/clearContent.d.ts +14 -14
- package/dist/packages/core/src/commands/clearNodes.d.ts +13 -13
- package/dist/packages/core/src/commands/command.d.ts +18 -18
- package/dist/packages/core/src/commands/createParagraphNear.d.ts +13 -13
- package/dist/packages/core/src/commands/cut.d.ts +20 -20
- package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +13 -13
- package/dist/packages/core/src/commands/deleteNode.d.ts +15 -15
- package/dist/packages/core/src/commands/deleteRange.d.ts +14 -14
- package/dist/packages/core/src/commands/deleteSelection.d.ts +13 -13
- package/dist/packages/core/src/commands/enter.d.ts +13 -13
- package/dist/packages/core/src/commands/exitCode.d.ts +13 -13
- package/dist/packages/core/src/commands/extendMarkRange.d.ts +25 -25
- package/dist/packages/core/src/commands/first.d.ts +14 -14
- package/dist/packages/core/src/commands/focus.d.ts +27 -27
- package/dist/packages/core/src/commands/forEach.d.ts +14 -14
- package/dist/packages/core/src/commands/index.d.ts +55 -55
- package/dist/packages/core/src/commands/insertContent.d.ts +34 -34
- package/dist/packages/core/src/commands/insertContentAt.d.ts +47 -47
- package/dist/packages/core/src/commands/join.d.ts +41 -41
- package/dist/packages/core/src/commands/joinItemBackward.d.ts +13 -13
- package/dist/packages/core/src/commands/joinItemForward.d.ts +13 -13
- package/dist/packages/core/src/commands/joinTextblockBackward.d.ts +12 -12
- package/dist/packages/core/src/commands/joinTextblockForward.d.ts +12 -12
- package/dist/packages/core/src/commands/keyboardShortcut.d.ts +14 -14
- package/dist/packages/core/src/commands/lift.d.ts +17 -17
- package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +13 -13
- package/dist/packages/core/src/commands/liftListItem.d.ts +15 -15
- package/dist/packages/core/src/commands/newlineInCode.d.ts +13 -13
- package/dist/packages/core/src/commands/resetAttributes.d.ts +16 -16
- package/dist/packages/core/src/commands/scrollIntoView.d.ts +13 -13
- package/dist/packages/core/src/commands/selectAll.d.ts +13 -13
- package/dist/packages/core/src/commands/selectNodeBackward.d.ts +13 -13
- package/dist/packages/core/src/commands/selectNodeForward.d.ts +13 -13
- package/dist/packages/core/src/commands/selectParentNode.d.ts +13 -13
- package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +13 -13
- package/dist/packages/core/src/commands/selectTextblockStart.d.ts +13 -13
- package/dist/packages/core/src/commands/setContent.d.ts +40 -40
- package/dist/packages/core/src/commands/setMark.d.ts +15 -15
- package/dist/packages/core/src/commands/setMeta.d.ts +15 -15
- package/dist/packages/core/src/commands/setNode.d.ts +16 -16
- package/dist/packages/core/src/commands/setNodeSelection.d.ts +14 -14
- package/dist/packages/core/src/commands/setTextSelection.d.ts +14 -14
- package/dist/packages/core/src/commands/sinkListItem.d.ts +15 -15
- package/dist/packages/core/src/commands/splitBlock.d.ts +17 -17
- package/dist/packages/core/src/commands/splitListItem.d.ts +15 -15
- package/dist/packages/core/src/commands/toggleList.d.ts +18 -18
- package/dist/packages/core/src/commands/toggleMark.d.ts +30 -30
- package/dist/packages/core/src/commands/toggleNode.d.ts +17 -17
- package/dist/packages/core/src/commands/toggleWrap.d.ts +16 -16
- package/dist/packages/core/src/commands/undoInputRule.d.ts +13 -13
- package/dist/packages/core/src/commands/unsetAllMarks.d.ts +13 -13
- package/dist/packages/core/src/commands/unsetMark.d.ts +25 -25
- package/dist/packages/core/src/commands/updateAttributes.d.ts +24 -24
- package/dist/packages/core/src/commands/wrapIn.d.ts +16 -16
- package/dist/packages/core/src/commands/wrapInList.d.ts +16 -16
- package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +5 -5
- package/dist/packages/core/src/extensions/commands.d.ts +3 -3
- package/dist/packages/core/src/extensions/editable.d.ts +2 -2
- package/dist/packages/core/src/extensions/focusEvents.d.ts +2 -2
- package/dist/packages/core/src/extensions/index.d.ts +6 -6
- package/dist/packages/core/src/extensions/keymap.d.ts +2 -2
- package/dist/packages/core/src/extensions/tabindex.d.ts +2 -2
- package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +10 -10
- package/dist/packages/core/src/helpers/createChainableState.d.ts +10 -10
- package/dist/packages/core/src/helpers/createDocument.d.ts +12 -12
- package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +15 -15
- package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +7 -7
- package/dist/packages/core/src/helpers/findChildren.d.ts +9 -9
- package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +10 -10
- package/dist/packages/core/src/helpers/findParentNode.d.ts +16 -16
- package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +17 -17
- package/dist/packages/core/src/helpers/generateHTML.d.ts +8 -8
- package/dist/packages/core/src/helpers/generateJSON.d.ts +8 -8
- package/dist/packages/core/src/helpers/generateText.d.ts +12 -12
- package/dist/packages/core/src/helpers/getAttributes.d.ts +9 -9
- package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +6 -6
- package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -11
- package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -8
- package/dist/packages/core/src/helpers/getExtensionField.d.ts +9 -9
- 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 +3 -3
- package/dist/packages/core/src/helpers/getMarkType.d.ts +2 -2
- package/dist/packages/core/src/helpers/getMarksBetween.d.ts +3 -3
- package/dist/packages/core/src/helpers/getNodeAtPosition.d.ts +11 -11
- 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 +3 -3
- package/dist/packages/core/src/helpers/getSchema.d.ts +4 -4
- package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +10 -10
- package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +8 -8
- package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +8 -8
- package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +9 -9
- package/dist/packages/core/src/helpers/getText.d.ts +15 -15
- package/dist/packages/core/src/helpers/getTextBetween.d.ts +14 -14
- package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +8 -8
- package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +8 -8
- package/dist/packages/core/src/helpers/index.d.ts +50 -50
- package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +9 -9
- package/dist/packages/core/src/helpers/isActive.d.ts +2 -2
- package/dist/packages/core/src/helpers/isAtEndOfNode.d.ts +2 -2
- package/dist/packages/core/src/helpers/isAtStartOfNode.d.ts +2 -2
- package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -2
- package/dist/packages/core/src/helpers/isList.d.ts +2 -2
- 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 -4
- package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +2 -2
- package/dist/packages/core/src/helpers/splitExtensions.d.ts +9 -9
- package/dist/packages/core/src/index.d.ts +24 -24
- package/dist/packages/core/src/inputRules/index.d.ts +5 -5
- package/dist/packages/core/src/inputRules/markInputRule.d.ts +13 -13
- package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +23 -23
- package/dist/packages/core/src/inputRules/textInputRule.d.ts +10 -10
- package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +15 -15
- package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +28 -28
- package/dist/packages/core/src/pasteRules/index.d.ts +3 -3
- package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +13 -13
- package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +13 -13
- package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +10 -10
- package/dist/packages/core/src/style.d.ts +1 -1
- package/dist/packages/core/src/types.d.ts +250 -244
- package/dist/packages/core/src/utilities/callOrReturn.d.ts +9 -9
- package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
- package/dist/packages/core/src/utilities/deleteProps.d.ts +6 -6
- package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
- package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -1
- package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -1
- package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
- package/dist/packages/core/src/utilities/index.d.ts +20 -20
- package/dist/packages/core/src/utilities/isAndroid.d.ts +1 -1
- package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
- package/dist/packages/core/src/utilities/isFunction.d.ts +1 -1
- package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -1
- package/dist/packages/core/src/utilities/isNumber.d.ts +1 -1
- package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
- package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -1
- package/dist/packages/core/src/utilities/isString.d.ts +1 -1
- 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 +8 -8
- package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -8
- package/package.json +2 -2
- package/src/Extension.ts +3 -1
- package/src/ExtensionManager.ts +1 -1
- package/src/Mark.ts +3 -1
- package/src/Node.ts +4 -1
- package/src/commands/insertContentAt.ts +1 -1
- package/src/commands/updateAttributes.ts +40 -25
- package/src/helpers/getAttributesFromExtensions.ts +2 -3
- package/src/helpers/getSchemaByResolvedExtensions.ts +4 -2
- package/src/helpers/injectExtensionAttributesToParseRule.ts +4 -4
- package/src/helpers/isNodeEmpty.ts +6 -3
- package/src/types.ts +8 -2
- package/src/utilities/mergeDeep.ts +3 -7
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Check if object1 includes object2
|
|
3
|
-
* @param object1 Object
|
|
4
|
-
* @param object2 Object
|
|
5
|
-
*/
|
|
6
|
-
export declare function objectIncludes(object1: Record<string, any>, object2: Record<string, any>, options?: {
|
|
7
|
-
strict: boolean;
|
|
8
|
-
}): boolean;
|
|
1
|
+
/**
|
|
2
|
+
* Check if object1 includes object2
|
|
3
|
+
* @param object1 Object
|
|
4
|
+
* @param object2 Object
|
|
5
|
+
*/
|
|
6
|
+
export declare function objectIncludes(object1: Record<string, any>, object2: Record<string, any>, options?: {
|
|
7
|
+
strict: boolean;
|
|
8
|
+
}): boolean;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Removes duplicated values within an array.
|
|
3
|
-
* Supports numbers, strings and objects.
|
|
4
|
-
*/
|
|
5
|
-
export declare function removeDuplicates<T>(array: T[], by?: {
|
|
6
|
-
(value: any, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined): string;
|
|
7
|
-
(value: any, replacer?: (string | number)[] | null | undefined, space?: string | number | undefined): string;
|
|
8
|
-
}): T[];
|
|
1
|
+
/**
|
|
2
|
+
* Removes duplicated values within an array.
|
|
3
|
+
* Supports numbers, strings and objects.
|
|
4
|
+
*/
|
|
5
|
+
export declare function removeDuplicates<T>(array: T[], by?: {
|
|
6
|
+
(value: any, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined): string;
|
|
7
|
+
(value: any, replacer?: (string | number)[] | null | undefined, space?: string | number | undefined): string;
|
|
8
|
+
}): T[];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiptap/core",
|
|
3
3
|
"description": "headless rich text editor",
|
|
4
|
-
"version": "2.5.0-beta.
|
|
4
|
+
"version": "2.5.0-beta.3",
|
|
5
5
|
"homepage": "https://tiptap.dev",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"tiptap",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"dist"
|
|
33
33
|
],
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@tiptap/pm": "^2.5.0-beta.
|
|
35
|
+
"@tiptap/pm": "^2.5.0-beta.3"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@tiptap/pm": "^2.0.0"
|
package/src/Extension.ts
CHANGED
|
@@ -20,6 +20,7 @@ import { mergeDeep } from './utilities/mergeDeep.js'
|
|
|
20
20
|
|
|
21
21
|
declare module '@tiptap/core' {
|
|
22
22
|
interface ExtensionConfig<Options = any, Storage = any> {
|
|
23
|
+
// @ts-ignore - this is a dynamic key
|
|
23
24
|
[key: string]: any
|
|
24
25
|
|
|
25
26
|
/**
|
|
@@ -108,8 +109,9 @@ declare module '@tiptap/core' {
|
|
|
108
109
|
name: string
|
|
109
110
|
options: Options
|
|
110
111
|
storage: Storage
|
|
112
|
+
extensions: (Node | Mark)[]
|
|
111
113
|
parent: ParentConfig<ExtensionConfig<Options, Storage>>['addGlobalAttributes']
|
|
112
|
-
}) => GlobalAttributes
|
|
114
|
+
}) => GlobalAttributes
|
|
113
115
|
|
|
114
116
|
/**
|
|
115
117
|
* This function adds commands to the editor
|
package/src/ExtensionManager.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Node as ProsemirrorNode, Schema } from '@tiptap/pm/model'
|
|
|
3
3
|
import { Plugin } from '@tiptap/pm/state'
|
|
4
4
|
import { Decoration, EditorView } from '@tiptap/pm/view'
|
|
5
5
|
|
|
6
|
-
import { Editor } from './Editor.js'
|
|
6
|
+
import type { Editor } from './Editor.js'
|
|
7
7
|
import { getAttributesFromExtensions } from './helpers/getAttributesFromExtensions.js'
|
|
8
8
|
import { getExtensionField } from './helpers/getExtensionField.js'
|
|
9
9
|
import { getNodeType } from './helpers/getNodeType.js'
|
package/src/Mark.ts
CHANGED
|
@@ -23,6 +23,7 @@ import { mergeDeep } from './utilities/mergeDeep.js'
|
|
|
23
23
|
|
|
24
24
|
declare module '@tiptap/core' {
|
|
25
25
|
export interface MarkConfig<Options = any, Storage = any> {
|
|
26
|
+
// @ts-ignore - this is a dynamic key
|
|
26
27
|
[key: string]: any
|
|
27
28
|
|
|
28
29
|
/**
|
|
@@ -111,8 +112,9 @@ declare module '@tiptap/core' {
|
|
|
111
112
|
name: string
|
|
112
113
|
options: Options
|
|
113
114
|
storage: Storage
|
|
115
|
+
extensions: (Node | Mark)[]
|
|
114
116
|
parent: ParentConfig<MarkConfig<Options, Storage>>['addGlobalAttributes']
|
|
115
|
-
}) => GlobalAttributes
|
|
117
|
+
}) => GlobalAttributes
|
|
116
118
|
|
|
117
119
|
/**
|
|
118
120
|
* This function adds commands to the editor
|
package/src/Node.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { Editor } from './Editor.js'
|
|
|
7
7
|
import { getExtensionField } from './helpers/getExtensionField.js'
|
|
8
8
|
import { NodeConfig } from './index.js'
|
|
9
9
|
import { InputRule } from './InputRule.js'
|
|
10
|
+
import { Mark } from './Mark.js'
|
|
10
11
|
import { PasteRule } from './PasteRule.js'
|
|
11
12
|
import {
|
|
12
13
|
AnyConfig,
|
|
@@ -23,6 +24,7 @@ import { mergeDeep } from './utilities/mergeDeep.js'
|
|
|
23
24
|
|
|
24
25
|
declare module '@tiptap/core' {
|
|
25
26
|
interface NodeConfig<Options = any, Storage = any> {
|
|
27
|
+
// @ts-ignore - this is a dynamic key
|
|
26
28
|
[key: string]: any
|
|
27
29
|
|
|
28
30
|
/**
|
|
@@ -111,8 +113,9 @@ declare module '@tiptap/core' {
|
|
|
111
113
|
name: string
|
|
112
114
|
options: Options
|
|
113
115
|
storage: Storage
|
|
116
|
+
extensions: (Node | Mark)[]
|
|
114
117
|
parent: ParentConfig<NodeConfig<Options, Storage>>['addGlobalAttributes']
|
|
115
|
-
}) => GlobalAttributes
|
|
118
|
+
}) => GlobalAttributes
|
|
116
119
|
|
|
117
120
|
/**
|
|
118
121
|
* This function adds commands to the editor
|
|
@@ -57,7 +57,7 @@ declare module '@tiptap/core' {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
const isFragment = (nodeOrFragment: ProseMirrorNode | Fragment): nodeOrFragment is Fragment => {
|
|
60
|
-
return
|
|
60
|
+
return !('type' in nodeOrFragment)
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
export const insertContentAt: RawCommands['insertContentAt'] = (position, value, options) => ({ tr, dispatch, editor }) => {
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Mark, MarkType, Node, NodeType,
|
|
3
|
+
} from '@tiptap/pm/model'
|
|
4
|
+
import { SelectionRange } from '@tiptap/pm/state'
|
|
2
5
|
|
|
3
6
|
import { getMarkType } from '../helpers/getMarkType.js'
|
|
4
7
|
import { getNodeType } from '../helpers/getNodeType.js'
|
|
@@ -51,37 +54,49 @@ export const updateAttributes: RawCommands['updateAttributes'] = (typeOrName, at
|
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
if (dispatch) {
|
|
54
|
-
|
|
57
|
+
let lastPos: number | undefined
|
|
58
|
+
let lastNode: Node | undefined
|
|
59
|
+
let trimmedFrom: number
|
|
60
|
+
let trimmedTo: number
|
|
61
|
+
|
|
62
|
+
tr.selection.ranges.forEach((range: SelectionRange) => {
|
|
55
63
|
const from = range.$from.pos
|
|
56
64
|
const to = range.$to.pos
|
|
57
65
|
|
|
58
|
-
state.doc.nodesBetween(from, to, (node, pos) => {
|
|
66
|
+
state.doc.nodesBetween(from, to, (node: Node, pos: number) => {
|
|
59
67
|
if (nodeType && nodeType === node.type) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (markType && node.marks.length) {
|
|
67
|
-
node.marks.forEach(mark => {
|
|
68
|
-
if (markType === mark.type) {
|
|
69
|
-
const trimmedFrom = Math.max(pos, from)
|
|
70
|
-
const trimmedTo = Math.min(pos + node.nodeSize, to)
|
|
71
|
-
|
|
72
|
-
tr.addMark(
|
|
73
|
-
trimmedFrom,
|
|
74
|
-
trimmedTo,
|
|
75
|
-
markType.create({
|
|
76
|
-
...mark.attrs,
|
|
77
|
-
...attributes,
|
|
78
|
-
}),
|
|
79
|
-
)
|
|
80
|
-
}
|
|
81
|
-
})
|
|
68
|
+
trimmedFrom = Math.max(pos, from)
|
|
69
|
+
trimmedTo = Math.min(pos + node.nodeSize, to)
|
|
70
|
+
lastPos = pos
|
|
71
|
+
lastNode = node
|
|
82
72
|
}
|
|
83
73
|
})
|
|
84
74
|
})
|
|
75
|
+
|
|
76
|
+
if (lastNode) {
|
|
77
|
+
|
|
78
|
+
if (lastPos !== undefined) {
|
|
79
|
+
tr.setNodeMarkup(lastPos, undefined, {
|
|
80
|
+
...lastNode.attrs,
|
|
81
|
+
...attributes,
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (markType && lastNode.marks.length) {
|
|
86
|
+
lastNode.marks.forEach((mark: Mark) => {
|
|
87
|
+
if (markType === mark.type) {
|
|
88
|
+
tr.addMark(
|
|
89
|
+
trimmedFrom,
|
|
90
|
+
trimmedTo,
|
|
91
|
+
markType.create({
|
|
92
|
+
...mark.attrs,
|
|
93
|
+
...attributes,
|
|
94
|
+
}),
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
}
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
return true
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
Attributes,
|
|
6
6
|
ExtensionAttribute,
|
|
7
7
|
Extensions,
|
|
8
|
-
GlobalAttributes,
|
|
9
8
|
} from '../types.js'
|
|
10
9
|
import { getExtensionField } from './getExtensionField.js'
|
|
11
10
|
import { splitExtensions } from './splitExtensions.js'
|
|
@@ -32,6 +31,7 @@ export function getAttributesFromExtensions(extensions: Extensions): ExtensionAt
|
|
|
32
31
|
name: extension.name,
|
|
33
32
|
options: extension.options,
|
|
34
33
|
storage: extension.storage,
|
|
34
|
+
extensions: nodeAndMarkExtensions,
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
const addGlobalAttributes = getExtensionField<AnyConfig['addGlobalAttributes']>(
|
|
@@ -44,8 +44,7 @@ export function getAttributesFromExtensions(extensions: Extensions): ExtensionAt
|
|
|
44
44
|
return
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
const globalAttributes = addGlobalAttributes() as GlobalAttributes
|
|
47
|
+
const globalAttributes = addGlobalAttributes()
|
|
49
48
|
|
|
50
49
|
globalAttributes.forEach(globalAttribute => {
|
|
51
50
|
globalAttribute.types.forEach(type => {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
MarkSpec, NodeSpec, Schema, TagParseRule,
|
|
3
|
+
} from '@tiptap/pm/model'
|
|
2
4
|
|
|
3
5
|
import { Editor, MarkConfig, NodeConfig } from '../index.js'
|
|
4
6
|
import { AnyConfig, Extensions } from '../types.js'
|
|
@@ -93,7 +95,7 @@ export function getSchemaByResolvedExtensions(extensions: Extensions, editor?: E
|
|
|
93
95
|
)
|
|
94
96
|
|
|
95
97
|
if (parseHTML) {
|
|
96
|
-
schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes))
|
|
98
|
+
schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes)) as TagParseRule[]
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
const renderHTML = getExtensionField<NodeConfig['renderHTML']>(
|
|
@@ -13,13 +13,13 @@ export function injectExtensionAttributesToParseRule(
|
|
|
13
13
|
parseRule: ParseRule,
|
|
14
14
|
extensionAttributes: ExtensionAttribute[],
|
|
15
15
|
): ParseRule {
|
|
16
|
-
if (parseRule
|
|
16
|
+
if ('style' in parseRule) {
|
|
17
17
|
return parseRule
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
return {
|
|
21
21
|
...parseRule,
|
|
22
|
-
getAttrs: node => {
|
|
22
|
+
getAttrs: (node: HTMLElement) => {
|
|
23
23
|
const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs
|
|
24
24
|
|
|
25
25
|
if (oldAttributes === false) {
|
|
@@ -28,8 +28,8 @@ export function injectExtensionAttributesToParseRule(
|
|
|
28
28
|
|
|
29
29
|
const newAttributes = extensionAttributes.reduce((items, item) => {
|
|
30
30
|
const value = item.attribute.parseHTML
|
|
31
|
-
? item.attribute.parseHTML(node
|
|
32
|
-
: fromString((node
|
|
31
|
+
? item.attribute.parseHTML(node)
|
|
32
|
+
: fromString((node).getAttribute(item.name))
|
|
33
33
|
|
|
34
34
|
if (value === null || value === undefined) {
|
|
35
35
|
return items
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Node as ProseMirrorNode } from '@tiptap/pm/model'
|
|
2
2
|
|
|
3
3
|
export function isNodeEmpty(node: ProseMirrorNode): boolean {
|
|
4
|
-
const defaultContent = node.type.createAndFill()
|
|
5
|
-
const content = node.toJSON()
|
|
4
|
+
const defaultContent = node.type.createAndFill()
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
if (!defaultContent) {
|
|
7
|
+
return false
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return node.eq(defaultContent)
|
|
8
11
|
}
|
package/src/types.ts
CHANGED
|
@@ -133,11 +133,11 @@ export type CommandSpec = (...args: any[]) => Command
|
|
|
133
133
|
export type KeyboardShortcutCommand = (props: { editor: Editor }) => boolean
|
|
134
134
|
|
|
135
135
|
export type Attribute = {
|
|
136
|
-
default
|
|
136
|
+
default?: any
|
|
137
137
|
rendered?: boolean
|
|
138
138
|
renderHTML?: ((attributes: Record<string, any>) => Record<string, any> | null) | null
|
|
139
139
|
parseHTML?: ((element: HTMLElement) => any | null) | null
|
|
140
|
-
keepOnSplit
|
|
140
|
+
keepOnSplit?: boolean
|
|
141
141
|
isRequired?: boolean
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -152,7 +152,13 @@ export type ExtensionAttribute = {
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
export type GlobalAttributes = {
|
|
155
|
+
/**
|
|
156
|
+
* The node & mark types this attribute should be applied to.
|
|
157
|
+
*/
|
|
155
158
|
types: string[]
|
|
159
|
+
/**
|
|
160
|
+
* The attributes to add to the node or mark types.
|
|
161
|
+
*/
|
|
156
162
|
attributes: {
|
|
157
163
|
[key: string]: Attribute
|
|
158
164
|
}
|
|
@@ -5,14 +5,10 @@ export function mergeDeep(target: Record<string, any>, source: Record<string, an
|
|
|
5
5
|
|
|
6
6
|
if (isPlainObject(target) && isPlainObject(source)) {
|
|
7
7
|
Object.keys(source).forEach(key => {
|
|
8
|
-
if (isPlainObject(source[key])) {
|
|
9
|
-
|
|
10
|
-
Object.assign(output, { [key]: source[key] })
|
|
11
|
-
} else {
|
|
12
|
-
output[key] = mergeDeep(target[key], source[key])
|
|
13
|
-
}
|
|
8
|
+
if (isPlainObject(source[key]) && isPlainObject(target[key])) {
|
|
9
|
+
output[key] = mergeDeep(target[key], source[key])
|
|
14
10
|
} else {
|
|
15
|
-
|
|
11
|
+
output[key] = source[key]
|
|
16
12
|
}
|
|
17
13
|
})
|
|
18
14
|
}
|