@tiptap/core 2.0.0-beta.19 → 2.0.0-beta.193

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.
Files changed (283) hide show
  1. package/README.md +2 -2
  2. package/package.json +16 -20
  3. package/src/CommandManager.ts +64 -65
  4. package/src/Editor.ts +116 -78
  5. package/src/EventEmitter.ts +14 -4
  6. package/src/Extension.ts +193 -43
  7. package/src/ExtensionManager.ts +242 -84
  8. package/src/InputRule.ts +265 -0
  9. package/src/Mark.ts +277 -48
  10. package/src/Node.ts +279 -57
  11. package/src/NodeView.ts +115 -47
  12. package/src/PasteRule.ts +247 -0
  13. package/src/Tracker.ts +42 -0
  14. package/src/commands/blur.ts +12 -6
  15. package/src/commands/clearContent.ts +3 -3
  16. package/src/commands/clearNodes.ts +30 -18
  17. package/src/commands/command.ts +2 -2
  18. package/src/commands/createParagraphNear.ts +4 -3
  19. package/src/commands/deleteNode.ts +37 -0
  20. package/src/commands/deleteRange.ts +3 -3
  21. package/src/commands/deleteSelection.ts +4 -3
  22. package/src/commands/enter.ts +3 -3
  23. package/src/commands/exitCode.ts +4 -3
  24. package/src/commands/extendMarkRange.ts +12 -11
  25. package/src/commands/first.ts +3 -3
  26. package/src/commands/focus.ts +47 -44
  27. package/src/commands/forEach.ts +24 -0
  28. package/src/commands/index.ts +50 -0
  29. package/src/commands/insertContent.ts +13 -24
  30. package/src/commands/insertContentAt.ts +108 -0
  31. package/src/commands/joinBackward.ts +4 -3
  32. package/src/commands/joinForward.ts +4 -3
  33. package/src/commands/keyboardShortcut.ts +6 -6
  34. package/src/commands/lift.ts +6 -5
  35. package/src/commands/liftEmptyBlock.ts +4 -3
  36. package/src/commands/liftListItem.ts +6 -5
  37. package/src/commands/newlineInCode.ts +4 -3
  38. package/src/commands/resetAttributes.ts +62 -0
  39. package/src/commands/scrollIntoView.ts +3 -3
  40. package/src/commands/selectAll.ts +8 -6
  41. package/src/commands/selectNodeBackward.ts +4 -3
  42. package/src/commands/selectNodeForward.ts +4 -3
  43. package/src/commands/selectParentNode.ts +4 -3
  44. package/src/commands/selectTextblockEnd.ts +20 -0
  45. package/src/commands/selectTextblockStart.ts +20 -0
  46. package/src/commands/setContent.ts +9 -15
  47. package/src/commands/setMark.ts +36 -12
  48. package/src/commands/setMeta.ts +18 -0
  49. package/src/commands/setNode.ts +29 -7
  50. package/src/commands/setNodeSelection.ts +27 -0
  51. package/src/commands/setTextSelection.ts +33 -0
  52. package/src/commands/sinkListItem.ts +6 -5
  53. package/src/commands/splitBlock.ts +14 -19
  54. package/src/commands/splitListItem.ts +45 -18
  55. package/src/commands/toggleList.ts +83 -18
  56. package/src/commands/toggleMark.ts +18 -7
  57. package/src/commands/toggleNode.ts +6 -5
  58. package/src/commands/toggleWrap.ts +9 -9
  59. package/src/commands/undoInputRule.ts +34 -5
  60. package/src/commands/unsetAllMarks.ts +7 -11
  61. package/src/commands/unsetMark.ts +35 -22
  62. package/src/commands/updateAttributes.ts +16 -9
  63. package/src/commands/wrapIn.ts +5 -10
  64. package/src/commands/wrapInList.ts +6 -5
  65. package/src/extensions/clipboardTextSerializer.ts +14 -35
  66. package/src/extensions/commands.ts +3 -144
  67. package/src/extensions/editable.ts +1 -0
  68. package/src/extensions/focusEvents.ts +3 -5
  69. package/src/extensions/index.ts +1 -0
  70. package/src/extensions/keymap.ts +110 -13
  71. package/src/extensions/tabindex.ts +18 -0
  72. package/src/helpers/combineTransactionSteps.ts +18 -0
  73. package/src/helpers/createChainableState.ts +38 -0
  74. package/src/helpers/createDocument.ts +5 -6
  75. package/src/helpers/createNodeFromContent.ts +17 -19
  76. package/src/helpers/defaultBlockAt.ts +13 -0
  77. package/src/helpers/findChildren.ts +18 -0
  78. package/src/helpers/findChildrenInRange.ts +32 -0
  79. package/src/helpers/findParentNode.ts +3 -2
  80. package/src/helpers/findParentNodeClosestToPos.ts +3 -2
  81. package/src/helpers/generateHTML.ts +6 -5
  82. package/src/helpers/generateJSON.ts +14 -0
  83. package/src/helpers/generateText.ts +30 -0
  84. package/src/helpers/getAttributes.ts +28 -0
  85. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  86. package/src/helpers/getChangedRanges.ts +83 -0
  87. package/src/helpers/getDebugJSON.ts +54 -0
  88. package/src/helpers/getExtensionField.ts +25 -0
  89. package/src/helpers/getHTMLFromFragment.ts +6 -5
  90. package/src/helpers/getMarkAttributes.ts +14 -10
  91. package/src/helpers/getMarkRange.ts +41 -8
  92. package/src/helpers/getMarkType.ts +5 -1
  93. package/src/helpers/getMarksBetween.ts +32 -10
  94. package/src/helpers/getNodeAttributes.ts +9 -9
  95. package/src/helpers/getNodeType.ts +5 -1
  96. package/src/helpers/getRenderedAttributes.ts +6 -7
  97. package/src/helpers/getSchema.ts +7 -133
  98. package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
  99. package/src/helpers/getSchemaTypeByName.ts +2 -10
  100. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  101. package/src/helpers/getSplittedAttributes.ts +4 -4
  102. package/src/helpers/getText.ts +19 -0
  103. package/src/helpers/getTextBetween.ts +49 -0
  104. package/src/helpers/getTextContentFromNodes.ts +17 -0
  105. package/src/helpers/getTextSerializersFromSchema.ts +10 -0
  106. package/src/helpers/index.ts +33 -0
  107. package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
  108. package/src/helpers/isActive.ts +5 -5
  109. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  110. package/src/helpers/isList.ts +14 -7
  111. package/src/helpers/isMarkActive.ts +45 -20
  112. package/src/helpers/isNodeActive.ts +28 -35
  113. package/src/helpers/isNodeEmpty.ts +1 -1
  114. package/src/helpers/isNodeSelection.ts +2 -3
  115. package/src/helpers/isTextSelection.ts +2 -3
  116. package/src/helpers/posToDOMRect.ts +35 -0
  117. package/src/helpers/resolveFocusPosition.ts +43 -0
  118. package/src/helpers/selectionToInsertionEnd.ts +2 -2
  119. package/src/helpers/splitExtensions.ts +3 -3
  120. package/src/index.ts +15 -24
  121. package/src/inputRules/index.ts +5 -0
  122. package/src/inputRules/markInputRule.ts +59 -39
  123. package/src/inputRules/nodeInputRule.ts +45 -11
  124. package/src/inputRules/textInputRule.ts +35 -0
  125. package/src/inputRules/textblockTypeInputRule.ts +38 -0
  126. package/src/inputRules/wrappingInputRule.ts +60 -0
  127. package/src/pasteRules/index.ts +3 -0
  128. package/src/pasteRules/markPasteRule.ts +62 -53
  129. package/src/pasteRules/nodePasteRule.ts +39 -0
  130. package/src/pasteRules/textPasteRule.ts +35 -0
  131. package/src/style.ts +16 -3
  132. package/src/types.ts +129 -43
  133. package/src/utilities/callOrReturn.ts +6 -3
  134. package/src/utilities/createStyleTag.ts +12 -1
  135. package/src/utilities/deleteProps.ts +2 -4
  136. package/src/utilities/elementFromString.ts +4 -5
  137. package/src/utilities/escapeForRegEx.ts +4 -0
  138. package/src/utilities/findDuplicates.ts +5 -0
  139. package/src/utilities/fromString.ts +2 -2
  140. package/src/utilities/index.ts +3 -0
  141. package/src/utilities/isEmptyObject.ts +2 -2
  142. package/src/utilities/isFunction.ts +3 -0
  143. package/src/utilities/isMacOS.ts +5 -0
  144. package/src/utilities/isNumber.ts +3 -0
  145. package/src/utilities/isPlainObject.ts +8 -5
  146. package/src/utilities/isRegExp.ts +3 -0
  147. package/src/utilities/isString.ts +3 -0
  148. package/src/utilities/isiOS.ts +12 -0
  149. package/src/utilities/mergeAttributes.ts +2 -3
  150. package/src/utilities/mergeDeep.ts +2 -3
  151. package/src/utilities/minMax.ts +1 -1
  152. package/src/utilities/objectIncludes.ts +17 -5
  153. package/src/utilities/removeDuplicates.ts +15 -0
  154. package/CHANGELOG.md +0 -346
  155. package/LICENSE.md +0 -21
  156. package/dist/packages/core/src/CommandManager.d.ts +0 -13
  157. package/dist/packages/core/src/Editor.d.ts +0 -142
  158. package/dist/packages/core/src/EventEmitter.d.ts +0 -7
  159. package/dist/packages/core/src/Extension.d.ts +0 -155
  160. package/dist/packages/core/src/ExtensionManager.d.ts +0 -24
  161. package/dist/packages/core/src/Mark.d.ts +0 -219
  162. package/dist/packages/core/src/Node.d.ts +0 -273
  163. package/dist/packages/core/src/NodeView.d.ts +0 -31
  164. package/dist/packages/core/src/commands/blur.d.ts +0 -12
  165. package/dist/packages/core/src/commands/clearContent.d.ts +0 -12
  166. package/dist/packages/core/src/commands/clearNodes.d.ts +0 -12
  167. package/dist/packages/core/src/commands/command.d.ts +0 -12
  168. package/dist/packages/core/src/commands/createParagraphNear.d.ts +0 -12
  169. package/dist/packages/core/src/commands/deleteRange.d.ts +0 -12
  170. package/dist/packages/core/src/commands/deleteSelection.d.ts +0 -12
  171. package/dist/packages/core/src/commands/enter.d.ts +0 -12
  172. package/dist/packages/core/src/commands/exitCode.d.ts +0 -12
  173. package/dist/packages/core/src/commands/extendMarkRange.d.ts +0 -13
  174. package/dist/packages/core/src/commands/first.d.ts +0 -12
  175. package/dist/packages/core/src/commands/focus.d.ts +0 -12
  176. package/dist/packages/core/src/commands/insertContent.d.ts +0 -12
  177. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  178. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  179. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  180. package/dist/packages/core/src/commands/joinBackward.d.ts +0 -12
  181. package/dist/packages/core/src/commands/joinForward.d.ts +0 -12
  182. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +0 -12
  183. package/dist/packages/core/src/commands/lift.d.ts +0 -13
  184. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +0 -12
  185. package/dist/packages/core/src/commands/liftListItem.d.ts +0 -13
  186. package/dist/packages/core/src/commands/newlineInCode.d.ts +0 -12
  187. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  188. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  189. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  190. package/dist/packages/core/src/commands/scrollIntoView.d.ts +0 -12
  191. package/dist/packages/core/src/commands/selectAll.d.ts +0 -12
  192. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +0 -12
  193. package/dist/packages/core/src/commands/selectNodeForward.d.ts +0 -12
  194. package/dist/packages/core/src/commands/selectParentNode.d.ts +0 -12
  195. package/dist/packages/core/src/commands/setContent.d.ts +0 -12
  196. package/dist/packages/core/src/commands/setMark.d.ts +0 -13
  197. package/dist/packages/core/src/commands/setNode.d.ts +0 -13
  198. package/dist/packages/core/src/commands/sinkListItem.d.ts +0 -13
  199. package/dist/packages/core/src/commands/splitBlock.d.ts +0 -14
  200. package/dist/packages/core/src/commands/splitListItem.d.ts +0 -13
  201. package/dist/packages/core/src/commands/toggleList.d.ts +0 -13
  202. package/dist/packages/core/src/commands/toggleMark.d.ts +0 -13
  203. package/dist/packages/core/src/commands/toggleNode.d.ts +0 -13
  204. package/dist/packages/core/src/commands/toggleWrap.d.ts +0 -13
  205. package/dist/packages/core/src/commands/undoInputRule.d.ts +0 -12
  206. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +0 -12
  207. package/dist/packages/core/src/commands/unsetMark.d.ts +0 -13
  208. package/dist/packages/core/src/commands/updateAttributes.d.ts +0 -13
  209. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  210. package/dist/packages/core/src/commands/wrapIn.d.ts +0 -13
  211. package/dist/packages/core/src/commands/wrapInList.d.ts +0 -13
  212. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +0 -2
  213. package/dist/packages/core/src/extensions/commands.d.ts +0 -98
  214. package/dist/packages/core/src/extensions/editable.d.ts +0 -2
  215. package/dist/packages/core/src/extensions/focusEvents.d.ts +0 -2
  216. package/dist/packages/core/src/extensions/index.d.ts +0 -5
  217. package/dist/packages/core/src/extensions/keymap.d.ts +0 -2
  218. package/dist/packages/core/src/helpers/createDocument.d.ts +0 -4
  219. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +0 -8
  220. package/dist/packages/core/src/helpers/findParentNode.d.ts +0 -9
  221. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +0 -8
  222. package/dist/packages/core/src/helpers/generateHTML.d.ts +0 -2
  223. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +0 -6
  224. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +0 -2
  225. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +0 -4
  226. package/dist/packages/core/src/helpers/getMarkRange.d.ts +0 -3
  227. package/dist/packages/core/src/helpers/getMarkType.d.ts +0 -2
  228. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +0 -3
  229. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +0 -4
  230. package/dist/packages/core/src/helpers/getNodeType.d.ts +0 -2
  231. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +0 -3
  232. package/dist/packages/core/src/helpers/getSchema.d.ts +0 -3
  233. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +0 -2
  234. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +0 -2
  235. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +0 -2
  236. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +0 -9
  237. package/dist/packages/core/src/helpers/isActive.d.ts +0 -3
  238. package/dist/packages/core/src/helpers/isList.d.ts +0 -2
  239. package/dist/packages/core/src/helpers/isMarkActive.d.ts +0 -4
  240. package/dist/packages/core/src/helpers/isNodeActive.d.ts +0 -4
  241. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +0 -2
  242. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +0 -2
  243. package/dist/packages/core/src/helpers/isTextSelection.d.ts +0 -2
  244. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +0 -2
  245. package/dist/packages/core/src/helpers/splitExtensions.d.ts +0 -9
  246. package/dist/packages/core/src/index.d.ts +0 -30
  247. package/dist/packages/core/src/inputRules/markInputRule.d.ts +0 -3
  248. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +0 -3
  249. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +0 -3
  250. package/dist/packages/core/src/style.d.ts +0 -2
  251. package/dist/packages/core/src/types.d.ts +0 -157
  252. package/dist/packages/core/src/utilities/callOrReturn.d.ts +0 -8
  253. package/dist/packages/core/src/utilities/createStyleTag.d.ts +0 -1
  254. package/dist/packages/core/src/utilities/deleteProps.d.ts +0 -7
  255. package/dist/packages/core/src/utilities/elementFromString.d.ts +0 -1
  256. package/dist/packages/core/src/utilities/fromString.d.ts +0 -1
  257. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  258. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +0 -1
  259. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  260. package/dist/packages/core/src/utilities/isPlainObject.d.ts +0 -1
  261. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +0 -2
  262. package/dist/packages/core/src/utilities/mergeDeep.d.ts +0 -2
  263. package/dist/packages/core/src/utilities/minMax.d.ts +0 -1
  264. package/dist/packages/core/src/utilities/objectIncludes.d.ts +0 -7
  265. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  266. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  267. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  268. package/dist/tiptap-core.cjs.js +0 -3000
  269. package/dist/tiptap-core.cjs.js.map +0 -1
  270. package/dist/tiptap-core.esm.js +0 -2975
  271. package/dist/tiptap-core.esm.js.map +0 -1
  272. package/dist/tiptap-core.umd.js +0 -2997
  273. package/dist/tiptap-core.umd.js.map +0 -1
  274. package/src/commands/insertHTML.ts +0 -30
  275. package/src/commands/insertNode.ts +0 -33
  276. package/src/commands/insertText.ts +0 -22
  277. package/src/commands/replace.ts +0 -20
  278. package/src/commands/replaceRange.ts +0 -36
  279. package/src/commands/resetNodeAttributes.ts +0 -31
  280. package/src/commands/updateNodeAttributes.ts +0 -35
  281. package/src/utilities/isClass.ts +0 -7
  282. package/src/utilities/isObject.ts +0 -10
  283. package/src/utilities/removeElement.ts +0 -5
package/src/Extension.ts CHANGED
@@ -1,14 +1,25 @@
1
1
  import { Plugin, Transaction } from 'prosemirror-state'
2
- import { Command as ProseMirrorCommand } from 'prosemirror-commands'
3
- import { InputRule } from 'prosemirror-inputrules'
2
+
3
+ import { ExtensionConfig } from '.'
4
4
  import { Editor } from './Editor'
5
+ import { getExtensionField } from './helpers/getExtensionField'
6
+ import { InputRule } from './InputRule'
7
+ import { Mark } from './Mark'
5
8
  import { Node } from './Node'
6
- import mergeDeep from './utilities/mergeDeep'
7
- import { GlobalAttributes, RawCommands } from './types'
8
- import { ExtensionConfig } from '.'
9
+ import { PasteRule } from './PasteRule'
10
+ import {
11
+ AnyConfig,
12
+ Extensions,
13
+ GlobalAttributes,
14
+ KeyboardShortcutCommand,
15
+ ParentConfig,
16
+ RawCommands,
17
+ } from './types'
18
+ import { callOrReturn } from './utilities/callOrReturn'
19
+ import { mergeDeep } from './utilities/mergeDeep'
9
20
 
10
21
  declare module '@tiptap/core' {
11
- interface ExtensionConfig<Options = any> {
22
+ interface ExtensionConfig<Options = any, Storage = any> {
12
23
  [key: string]: any;
13
24
 
14
25
  /**
@@ -26,109 +37,168 @@ declare module '@tiptap/core' {
26
37
  */
27
38
  defaultOptions?: Options,
28
39
 
40
+ /**
41
+ * Default Options
42
+ */
43
+ addOptions?: (this: {
44
+ name: string,
45
+ parent: Exclude<ParentConfig<ExtensionConfig<Options, Storage>>['addOptions'], undefined>,
46
+ }) => Options,
47
+
48
+ /**
49
+ * Default Storage
50
+ */
51
+ addStorage?: (this: {
52
+ name: string,
53
+ options: Options,
54
+ parent: Exclude<ParentConfig<ExtensionConfig<Options, Storage>>['addStorage'], undefined>,
55
+ }) => Storage,
56
+
29
57
  /**
30
58
  * Global attributes
31
59
  */
32
60
  addGlobalAttributes?: (this: {
61
+ name: string,
33
62
  options: Options,
63
+ storage: Storage,
64
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addGlobalAttributes'],
34
65
  }) => GlobalAttributes | {},
35
66
 
36
67
  /**
37
68
  * Raw
38
69
  */
39
70
  addCommands?: (this: {
71
+ name: string,
40
72
  options: Options,
73
+ storage: Storage,
41
74
  editor: Editor,
75
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addCommands'],
42
76
  }) => Partial<RawCommands>,
43
77
 
44
78
  /**
45
79
  * Keyboard shortcuts
46
80
  */
47
81
  addKeyboardShortcuts?: (this: {
82
+ name: string,
48
83
  options: Options,
84
+ storage: Storage,
49
85
  editor: Editor,
86
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addKeyboardShortcuts'],
50
87
  }) => {
51
- [key: string]: ProseMirrorCommand,
88
+ [key: string]: KeyboardShortcutCommand,
52
89
  },
53
90
 
54
91
  /**
55
92
  * Input rules
56
93
  */
57
94
  addInputRules?: (this: {
95
+ name: string,
58
96
  options: Options,
97
+ storage: Storage,
59
98
  editor: Editor,
99
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addInputRules'],
60
100
  }) => InputRule[],
61
101
 
62
102
  /**
63
103
  * Paste rules
64
104
  */
65
105
  addPasteRules?: (this: {
106
+ name: string,
66
107
  options: Options,
108
+ storage: Storage,
67
109
  editor: Editor,
68
- }) => Plugin[],
110
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addPasteRules'],
111
+ }) => PasteRule[],
69
112
 
70
113
  /**
71
114
  * ProseMirror plugins
72
115
  */
73
116
  addProseMirrorPlugins?: (this: {
117
+ name: string,
74
118
  options: Options,
119
+ storage: Storage,
75
120
  editor: Editor,
121
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addProseMirrorPlugins'],
76
122
  }) => Plugin[],
77
123
 
124
+ /**
125
+ * Extensions
126
+ */
127
+ addExtensions?: (this: {
128
+ name: string,
129
+ options: Options,
130
+ storage: Storage,
131
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addExtensions'],
132
+ }) => Extensions,
133
+
78
134
  /**
79
135
  * Extend Node Schema
80
136
  */
81
137
  extendNodeSchema?: ((
82
138
  this: {
139
+ name: string,
83
140
  options: Options,
141
+ storage: Storage,
142
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendNodeSchema'],
84
143
  },
85
144
  extension: Node,
86
- ) => {
87
- [key: string]: any,
88
- }) | null,
145
+ ) => Record<string, any>) | null,
89
146
 
90
147
  /**
91
148
  * Extend Mark Schema
92
149
  */
93
150
  extendMarkSchema?: ((
94
151
  this: {
152
+ name: string,
95
153
  options: Options,
154
+ storage: Storage,
155
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendMarkSchema'],
96
156
  },
97
- extension: Node,
98
- ) => {
99
- [key: string]: any,
100
- }) | null,
157
+ extension: Mark,
158
+ ) => Record<string, any>) | null,
101
159
 
102
160
  /**
103
- * The editor is ready.
161
+ * The editor is not ready yet.
104
162
  */
105
- onCreate?: ((this: {
163
+ onBeforeCreate?: ((this: {
164
+ name: string,
106
165
  options: Options,
166
+ storage: Storage,
107
167
  editor: Editor,
168
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBeforeCreate'],
108
169
  }) => void) | null,
109
170
 
110
171
  /**
111
- * The content has changed.
172
+ * The editor is ready.
112
173
  */
113
- onUpdate?: ((this: {
174
+ onCreate?: ((this: {
175
+ name: string,
114
176
  options: Options,
177
+ storage: Storage,
115
178
  editor: Editor,
179
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onCreate'],
116
180
  }) => void) | null,
117
181
 
118
182
  /**
119
- * The selection has changed.
183
+ * The content has changed.
120
184
  */
121
- onSelectionUpdate?: ((this: {
185
+ onUpdate?: ((this: {
186
+ name: string,
122
187
  options: Options,
188
+ storage: Storage,
123
189
  editor: Editor,
190
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onUpdate'],
124
191
  }) => void) | null,
125
192
 
126
193
  /**
127
- * The view has changed.
194
+ * The selection has changed.
128
195
  */
129
- onViewUpdate?: ((this: {
196
+ onSelectionUpdate?: ((this: {
197
+ name: string,
130
198
  options: Options,
199
+ storage: Storage,
131
200
  editor: Editor,
201
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onSelectionUpdate'],
132
202
  }) => void) | null,
133
203
 
134
204
  /**
@@ -136,8 +206,11 @@ declare module '@tiptap/core' {
136
206
  */
137
207
  onTransaction?: ((
138
208
  this: {
209
+ name: string,
139
210
  options: Options,
211
+ storage: Storage,
140
212
  editor: Editor,
213
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onTransaction'],
141
214
  },
142
215
  props: {
143
216
  transaction: Transaction,
@@ -149,8 +222,11 @@ declare module '@tiptap/core' {
149
222
  */
150
223
  onFocus?: ((
151
224
  this: {
225
+ name: string,
152
226
  options: Options,
227
+ storage: Storage,
153
228
  editor: Editor,
229
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onFocus'],
154
230
  },
155
231
  props: {
156
232
  event: FocusEvent,
@@ -162,8 +238,11 @@ declare module '@tiptap/core' {
162
238
  */
163
239
  onBlur?: ((
164
240
  this: {
241
+ name: string,
165
242
  options: Options,
243
+ storage: Storage,
166
244
  editor: Editor,
245
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBlur'],
167
246
  },
168
247
  props: {
169
248
  event: FocusEvent,
@@ -174,52 +253,123 @@ declare module '@tiptap/core' {
174
253
  * The editor is destroyed.
175
254
  */
176
255
  onDestroy?: ((this: {
256
+ name: string,
177
257
  options: Options,
258
+ storage: Storage,
178
259
  editor: Editor,
260
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onDestroy'],
179
261
  }) => void) | null,
180
262
  }
181
263
  }
182
264
 
183
- export class Extension<Options = any> {
265
+ export class Extension<Options = any, Storage = any> {
184
266
  type = 'extension'
185
267
 
268
+ name = 'extension'
269
+
270
+ parent: Extension | null = null
271
+
272
+ child: Extension | null = null
273
+
274
+ options: Options
275
+
276
+ storage: Storage
277
+
186
278
  config: ExtensionConfig = {
187
- name: 'extension',
188
- priority: 100,
279
+ name: this.name,
189
280
  defaultOptions: {},
190
281
  }
191
282
 
192
- options!: Options
193
-
194
- constructor(config: ExtensionConfig<Options>) {
283
+ constructor(config: Partial<ExtensionConfig<Options, Storage>> = {}) {
195
284
  this.config = {
196
285
  ...this.config,
197
286
  ...config,
198
287
  }
199
288
 
289
+ this.name = this.config.name
290
+
291
+ if (config.defaultOptions) {
292
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`)
293
+ }
294
+
295
+ // TODO: remove `addOptions` fallback
200
296
  this.options = this.config.defaultOptions
297
+
298
+ if (this.config.addOptions) {
299
+ this.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
300
+ this,
301
+ 'addOptions',
302
+ {
303
+ name: this.name,
304
+ },
305
+ ))
306
+ }
307
+
308
+ this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
309
+ this,
310
+ 'addStorage',
311
+ {
312
+ name: this.name,
313
+ options: this.options,
314
+ },
315
+ )) || {}
201
316
  }
202
317
 
203
- static create<O>(config: ExtensionConfig<O>) {
204
- return new Extension<O>(config)
318
+ static create<O = any, S = any>(config: Partial<ExtensionConfig<O, S>> = {}) {
319
+ return new Extension<O, S>(config)
205
320
  }
206
321
 
207
322
  configure(options: Partial<Options> = {}) {
208
- return Extension
209
- .create<Options>(this.config as ExtensionConfig<Options>)
210
- .#configure(options)
211
- }
323
+ // return a new instance so we can use the same extension
324
+ // with different calls of `configure`
325
+ const extension = this.extend()
212
326
 
213
- #configure = (options: Partial<Options>) => {
214
- this.options = mergeDeep(this.config.defaultOptions, options) as Options
327
+ extension.options = mergeDeep(this.options, options) as Options
215
328
 
216
- return this
329
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
330
+ extension,
331
+ 'addStorage',
332
+ {
333
+ name: extension.name,
334
+ options: extension.options,
335
+ },
336
+ ))
337
+
338
+ return extension
217
339
  }
218
340
 
219
- extend<ExtendedOptions = Options>(extendedConfig: Partial<ExtensionConfig<ExtendedOptions>>) {
220
- return new Extension<ExtendedOptions>({
221
- ...this.config,
222
- ...extendedConfig,
223
- } as ExtensionConfig<ExtendedOptions>)
341
+ extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<ExtensionConfig<ExtendedOptions, ExtendedStorage>> = {}) {
342
+ const extension = new Extension<ExtendedOptions, ExtendedStorage>(extendedConfig)
343
+
344
+ extension.parent = this
345
+
346
+ this.child = extension
347
+
348
+ extension.name = extendedConfig.name
349
+ ? extendedConfig.name
350
+ : extension.parent.name
351
+
352
+ if (extendedConfig.defaultOptions) {
353
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`)
354
+ }
355
+
356
+ extension.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
357
+ extension,
358
+ 'addOptions',
359
+ {
360
+ name: extension.name,
361
+ },
362
+ ))
363
+
364
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
365
+ extension,
366
+ 'addStorage',
367
+ {
368
+ name: extension.name,
369
+ options: extension.options,
370
+ },
371
+ ))
372
+
373
+ return extension
224
374
  }
225
375
  }