@tiptap/core 2.0.0-beta.17 → 2.0.0-beta.170

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 (318) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +2 -2
  3. package/dist/packages/core/src/CommandManager.d.ts +13 -6
  4. package/dist/packages/core/src/Editor.d.ts +23 -18
  5. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  6. package/dist/packages/core/src/Extension.d.ts +102 -26
  7. package/dist/packages/core/src/ExtensionManager.d.ts +7 -12
  8. package/dist/packages/core/src/InputRule.d.ts +42 -0
  9. package/dist/packages/core/src/Mark.d.ts +134 -30
  10. package/dist/packages/core/src/Node.d.ts +160 -32
  11. package/dist/packages/core/src/NodeView.d.ts +5 -9
  12. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  13. package/dist/packages/core/src/Tracker.d.ts +11 -0
  14. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  15. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  16. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  17. package/dist/packages/core/src/commands/command.d.ts +2 -2
  18. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  19. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  20. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  21. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  22. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  23. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  24. package/dist/packages/core/src/commands/extendMarkRange.d.ts +3 -3
  25. package/dist/packages/core/src/commands/first.d.ts +3 -3
  26. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  27. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  28. package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
  29. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  30. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  31. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  33. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
  38. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  39. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  40. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  41. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  42. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  43. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  44. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  45. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  46. package/dist/packages/core/src/commands/setMark.d.ts +3 -3
  47. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  48. package/dist/packages/core/src/commands/setNode.d.ts +3 -3
  49. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  50. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  51. package/dist/packages/core/src/commands/sinkListItem.d.ts +3 -3
  52. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  53. package/dist/packages/core/src/commands/splitListItem.d.ts +3 -3
  54. package/dist/packages/core/src/commands/toggleList.d.ts +3 -3
  55. package/dist/packages/core/src/commands/toggleMark.d.ts +8 -3
  56. package/dist/packages/core/src/commands/toggleNode.d.ts +3 -3
  57. package/dist/packages/core/src/commands/toggleWrap.d.ts +3 -3
  58. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  59. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  60. package/dist/packages/core/src/commands/unsetMark.d.ts +8 -3
  61. package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
  62. package/dist/packages/core/src/commands/wrapIn.d.ts +3 -3
  63. package/dist/packages/core/src/commands/wrapInList.d.ts +3 -3
  64. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  65. package/dist/packages/core/src/extensions/commands.d.ts +21 -15
  66. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  67. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  69. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  70. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  71. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  73. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  75. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  76. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  77. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  78. package/dist/packages/core/src/helpers/findParentNode.d.ts +1 -1
  79. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +1 -1
  80. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  81. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  82. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  83. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  84. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +1 -1
  85. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  86. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  87. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  88. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  89. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +1 -2
  90. package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
  91. package/dist/packages/core/src/helpers/getMarkType.d.ts +1 -1
  92. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  93. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +1 -2
  94. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +2 -2
  96. package/dist/packages/core/src/helpers/getSchema.d.ts +1 -1
  97. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  98. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +1 -1
  99. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +1 -1
  100. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  101. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  102. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  103. package/dist/packages/core/src/helpers/getTextSeralizersFromSchema.d.ts +3 -0
  104. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  105. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  106. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  107. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  108. package/dist/packages/core/src/helpers/isMarkActive.d.ts +1 -2
  109. package/dist/packages/core/src/helpers/isNodeActive.d.ts +1 -2
  110. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +1 -1
  111. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  112. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  113. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  114. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  115. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  116. package/dist/packages/core/src/helpers/splitExtensions.d.ts +4 -4
  117. package/dist/packages/core/src/index.d.ts +51 -20
  118. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  119. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  120. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  121. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  122. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  123. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  124. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  125. package/dist/packages/core/src/style.d.ts +1 -2
  126. package/dist/packages/core/src/types.d.ts +105 -52
  127. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  128. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  129. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  130. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  131. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  132. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  133. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/isClass.d.ts +1 -1
  135. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  139. package/dist/packages/core/src/utilities/isObject.d.ts +1 -1
  140. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  142. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  144. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  145. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  146. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  147. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  148. package/dist/tiptap-core.cjs.js +3572 -2041
  149. package/dist/tiptap-core.cjs.js.map +1 -1
  150. package/dist/tiptap-core.esm.js +3544 -2044
  151. package/dist/tiptap-core.esm.js.map +1 -1
  152. package/dist/tiptap-core.umd.js +3430 -1898
  153. package/dist/tiptap-core.umd.js.map +1 -1
  154. package/package.json +20 -16
  155. package/src/CommandManager.ts +60 -62
  156. package/src/Editor.ts +109 -74
  157. package/src/EventEmitter.ts +14 -4
  158. package/src/Extension.ts +196 -41
  159. package/src/ExtensionManager.ts +242 -78
  160. package/src/InputRule.ts +268 -0
  161. package/src/Mark.ts +242 -47
  162. package/src/Node.ts +279 -52
  163. package/src/NodeView.ts +105 -42
  164. package/src/PasteRule.ts +246 -0
  165. package/src/Tracker.ts +42 -0
  166. package/src/commands/blur.ts +12 -6
  167. package/src/commands/clearContent.ts +3 -3
  168. package/src/commands/clearNodes.ts +29 -18
  169. package/src/commands/command.ts +2 -2
  170. package/src/commands/createParagraphNear.ts +3 -3
  171. package/src/commands/deleteNode.ts +36 -0
  172. package/src/commands/deleteRange.ts +3 -3
  173. package/src/commands/deleteSelection.ts +3 -3
  174. package/src/commands/enter.ts +3 -3
  175. package/src/commands/exitCode.ts +3 -3
  176. package/src/commands/extendMarkRange.ts +10 -10
  177. package/src/commands/first.ts +3 -3
  178. package/src/commands/focus.ts +45 -44
  179. package/src/commands/forEach.ts +24 -0
  180. package/src/commands/insertContent.ts +12 -24
  181. package/src/commands/insertContentAt.ts +107 -0
  182. package/src/commands/joinBackward.ts +3 -3
  183. package/src/commands/joinForward.ts +3 -3
  184. package/src/commands/keyboardShortcut.ts +6 -6
  185. package/src/commands/lift.ts +5 -5
  186. package/src/commands/liftEmptyBlock.ts +3 -3
  187. package/src/commands/liftListItem.ts +4 -4
  188. package/src/commands/newlineInCode.ts +3 -3
  189. package/src/commands/resetAttributes.ts +61 -0
  190. package/src/commands/scrollIntoView.ts +3 -3
  191. package/src/commands/selectAll.ts +8 -6
  192. package/src/commands/selectNodeBackward.ts +3 -3
  193. package/src/commands/selectNodeForward.ts +3 -3
  194. package/src/commands/selectParentNode.ts +3 -3
  195. package/src/commands/selectTextblockEnd.ts +19 -0
  196. package/src/commands/selectTextblockStart.ts +19 -0
  197. package/src/commands/setContent.ts +7 -11
  198. package/src/commands/setMark.ts +35 -12
  199. package/src/commands/setMeta.ts +18 -0
  200. package/src/commands/setNode.ts +27 -6
  201. package/src/commands/setNodeSelection.ts +28 -0
  202. package/src/commands/setTextSelection.ts +32 -0
  203. package/src/commands/sinkListItem.ts +4 -4
  204. package/src/commands/splitBlock.ts +14 -9
  205. package/src/commands/splitListItem.ts +41 -15
  206. package/src/commands/toggleList.ts +82 -18
  207. package/src/commands/toggleMark.ts +17 -7
  208. package/src/commands/toggleNode.ts +5 -5
  209. package/src/commands/toggleWrap.ts +8 -9
  210. package/src/commands/undoInputRule.ts +34 -5
  211. package/src/commands/unsetAllMarks.ts +7 -11
  212. package/src/commands/unsetMark.ts +34 -22
  213. package/src/commands/updateAttributes.ts +72 -0
  214. package/src/commands/wrapIn.ts +4 -10
  215. package/src/commands/wrapInList.ts +4 -4
  216. package/src/extensions/clipboardTextSerializer.ts +13 -35
  217. package/src/extensions/commands.ts +30 -21
  218. package/src/extensions/focusEvents.ts +0 -3
  219. package/src/extensions/index.ts +1 -0
  220. package/src/extensions/keymap.ts +111 -13
  221. package/src/extensions/tabindex.ts +19 -0
  222. package/src/helpers/combineTransactionSteps.ts +18 -0
  223. package/src/helpers/createChainableState.ts +37 -0
  224. package/src/helpers/createDocument.ts +5 -7
  225. package/src/helpers/createNodeFromContent.ts +15 -18
  226. package/src/helpers/defaultBlockAt.ts +13 -0
  227. package/src/helpers/findChildren.ts +17 -0
  228. package/src/helpers/findChildrenInRange.ts +31 -0
  229. package/src/helpers/findParentNode.ts +2 -2
  230. package/src/helpers/findParentNodeClosestToPos.ts +1 -1
  231. package/src/helpers/generateHTML.ts +5 -5
  232. package/src/helpers/generateJSON.ts +13 -0
  233. package/src/helpers/generateText.ts +29 -0
  234. package/src/helpers/getAttributes.ts +27 -0
  235. package/src/helpers/getAttributesFromExtensions.ts +28 -7
  236. package/src/helpers/getChangedRanges.ts +82 -0
  237. package/src/helpers/getDebugJSON.ts +53 -0
  238. package/src/helpers/getExtensionField.ts +25 -0
  239. package/src/helpers/getHTMLFromFragment.ts +6 -5
  240. package/src/helpers/getMarkAttributes.ts +12 -9
  241. package/src/helpers/getMarkRange.ts +34 -6
  242. package/src/helpers/getMarkType.ts +5 -1
  243. package/src/helpers/getMarksBetween.ts +31 -10
  244. package/src/helpers/getNodeAttributes.ts +7 -8
  245. package/src/helpers/getNodeType.ts +5 -1
  246. package/src/helpers/getRenderedAttributes.ts +4 -6
  247. package/src/helpers/getSchema.ts +6 -133
  248. package/src/helpers/getSchemaByResolvedExtensions.ts +147 -0
  249. package/src/helpers/getSchemaTypeByName.ts +2 -10
  250. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  251. package/src/helpers/getSplittedAttributes.ts +4 -4
  252. package/src/helpers/getText.ts +18 -0
  253. package/src/helpers/getTextBetween.ts +45 -0
  254. package/src/helpers/getTextSeralizersFromSchema.ts +9 -0
  255. package/src/helpers/injectExtensionAttributesToParseRule.ts +15 -17
  256. package/src/helpers/isActive.ts +4 -5
  257. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  258. package/src/helpers/isList.ts +14 -7
  259. package/src/helpers/isMarkActive.ts +43 -19
  260. package/src/helpers/isNodeActive.ts +26 -34
  261. package/src/helpers/isNodeEmpty.ts +1 -1
  262. package/src/helpers/isNodeSelection.ts +2 -2
  263. package/src/helpers/isTextSelection.ts +2 -2
  264. package/src/helpers/posToDOMRect.ts +34 -0
  265. package/src/helpers/resolveFocusPosition.ts +34 -0
  266. package/src/helpers/selectionToInsertionEnd.ts +1 -1
  267. package/src/helpers/splitExtensions.ts +1 -1
  268. package/src/index.ts +53 -20
  269. package/src/inputRules/markInputRule.ts +58 -39
  270. package/src/inputRules/nodeInputRule.ts +44 -11
  271. package/src/inputRules/textInputRule.ts +35 -0
  272. package/src/inputRules/textblockTypeInputRule.ts +37 -0
  273. package/src/inputRules/wrappingInputRule.ts +59 -0
  274. package/src/pasteRules/markPasteRule.ts +61 -53
  275. package/src/pasteRules/textPasteRule.ts +35 -0
  276. package/src/style.ts +16 -3
  277. package/src/types.ts +119 -37
  278. package/src/utilities/callOrReturn.ts +6 -3
  279. package/src/utilities/createStyleTag.ts +8 -1
  280. package/src/utilities/deleteProps.ts +2 -4
  281. package/src/utilities/elementFromString.ts +4 -5
  282. package/src/utilities/escapeForRegEx.ts +4 -0
  283. package/src/utilities/findDuplicates.ts +5 -0
  284. package/src/utilities/fromString.ts +2 -2
  285. package/src/utilities/isClass.ts +2 -2
  286. package/src/utilities/isEmptyObject.ts +2 -2
  287. package/src/utilities/isFunction.ts +3 -0
  288. package/src/utilities/isMacOS.ts +5 -0
  289. package/src/utilities/isNumber.ts +3 -0
  290. package/src/utilities/isObject.ts +6 -6
  291. package/src/utilities/isPlainObject.ts +8 -5
  292. package/src/utilities/isRegExp.ts +3 -0
  293. package/src/utilities/isString.ts +3 -0
  294. package/src/utilities/isiOS.ts +12 -0
  295. package/src/utilities/mergeAttributes.ts +2 -3
  296. package/src/utilities/mergeDeep.ts +2 -3
  297. package/src/utilities/minMax.ts +1 -1
  298. package/src/utilities/objectIncludes.ts +17 -5
  299. package/src/utilities/removeDuplicates.ts +15 -0
  300. package/CHANGELOG.md +0 -324
  301. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  302. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  303. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  304. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  305. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  306. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  307. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  308. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  309. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  310. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  311. package/src/commands/insertHTML.ts +0 -30
  312. package/src/commands/insertNode.ts +0 -33
  313. package/src/commands/insertText.ts +0 -22
  314. package/src/commands/replace.ts +0 -20
  315. package/src/commands/replaceRange.ts +0 -36
  316. package/src/commands/resetNodeAttributes.ts +0 -31
  317. package/src/commands/updateNodeAttributes.ts +0 -33
  318. package/src/utilities/removeElement.ts +0 -5
package/src/Node.ts CHANGED
@@ -4,21 +4,27 @@ import {
4
4
  Node as ProseMirrorNode,
5
5
  NodeType,
6
6
  } from 'prosemirror-model'
7
- import { Command as ProseMirrorCommand } from 'prosemirror-commands'
8
7
  import { Plugin, Transaction } from 'prosemirror-state'
9
- import { InputRule } from 'prosemirror-inputrules'
10
- import mergeDeep from './utilities/mergeDeep'
8
+ import { InputRule } from './InputRule'
9
+ import { PasteRule } from './PasteRule'
10
+ import { mergeDeep } from './utilities/mergeDeep'
11
+ import { callOrReturn } from './utilities/callOrReturn'
12
+ import { getExtensionField } from './helpers/getExtensionField'
11
13
  import {
14
+ AnyConfig,
15
+ Extensions,
12
16
  Attributes,
13
17
  NodeViewRenderer,
14
18
  GlobalAttributes,
15
19
  RawCommands,
20
+ ParentConfig,
21
+ KeyboardShortcutCommand,
16
22
  } from './types'
17
23
  import { NodeConfig } from '.'
18
24
  import { Editor } from './Editor'
19
25
 
20
26
  declare module '@tiptap/core' {
21
- interface NodeConfig<Options = any> {
27
+ interface NodeConfig<Options = any, Storage = any> {
22
28
  [key: string]: any;
23
29
 
24
30
  /**
@@ -26,123 +32,187 @@ declare module '@tiptap/core' {
26
32
  */
27
33
  name: string,
28
34
 
35
+ /**
36
+ * Priority
37
+ */
38
+ priority?: number,
39
+
29
40
  /**
30
41
  * Default options
31
42
  */
32
43
  defaultOptions?: Options,
33
44
 
45
+ /**
46
+ * Default Options
47
+ */
48
+ addOptions?: (this: {
49
+ name: string,
50
+ parent: Exclude<ParentConfig<NodeConfig<Options, Storage>>['addOptions'], undefined>,
51
+ }) => Options,
52
+
53
+ /**
54
+ * Default Storage
55
+ */
56
+ addStorage?: (this: {
57
+ name: string,
58
+ options: Options,
59
+ parent: Exclude<ParentConfig<NodeConfig<Options, Storage>>['addStorage'], undefined>,
60
+ }) => Storage,
61
+
34
62
  /**
35
63
  * Global attributes
36
64
  */
37
65
  addGlobalAttributes?: (this: {
66
+ name: string,
38
67
  options: Options,
68
+ storage: Storage,
69
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addGlobalAttributes'],
39
70
  }) => GlobalAttributes | {},
40
71
 
41
72
  /**
42
73
  * Raw
43
74
  */
44
75
  addCommands?: (this: {
76
+ name: string,
45
77
  options: Options,
78
+ storage: Storage,
46
79
  editor: Editor,
47
80
  type: NodeType,
81
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addCommands'],
48
82
  }) => Partial<RawCommands>,
49
83
 
50
84
  /**
51
85
  * Keyboard shortcuts
52
86
  */
53
87
  addKeyboardShortcuts?: (this: {
88
+ name: string,
54
89
  options: Options,
90
+ storage: Storage,
55
91
  editor: Editor,
56
92
  type: NodeType,
93
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addKeyboardShortcuts'],
57
94
  }) => {
58
- [key: string]: ProseMirrorCommand,
95
+ [key: string]: KeyboardShortcutCommand,
59
96
  },
60
97
 
61
98
  /**
62
99
  * Input rules
63
100
  */
64
101
  addInputRules?: (this: {
102
+ name: string,
65
103
  options: Options,
104
+ storage: Storage,
66
105
  editor: Editor,
67
106
  type: NodeType,
107
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addInputRules'],
68
108
  }) => InputRule[],
69
109
 
70
110
  /**
71
111
  * Paste rules
72
112
  */
73
113
  addPasteRules?: (this: {
114
+ name: string,
74
115
  options: Options,
116
+ storage: Storage,
75
117
  editor: Editor,
76
118
  type: NodeType,
77
- }) => Plugin[],
119
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addPasteRules'],
120
+ }) => PasteRule[],
78
121
 
79
122
  /**
80
123
  * ProseMirror plugins
81
124
  */
82
125
  addProseMirrorPlugins?: (this: {
126
+ name: string,
83
127
  options: Options,
128
+ storage: Storage,
84
129
  editor: Editor,
85
130
  type: NodeType,
131
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addProseMirrorPlugins'],
86
132
  }) => Plugin[],
87
133
 
134
+ /**
135
+ * Extensions
136
+ */
137
+ addExtensions?: (this: {
138
+ name: string,
139
+ options: Options,
140
+ storage: Storage,
141
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addExtensions'],
142
+ }) => Extensions,
143
+
88
144
  /**
89
145
  * Extend Node Schema
90
146
  */
91
147
  extendNodeSchema?: ((
92
148
  this: {
149
+ name: string,
93
150
  options: Options,
151
+ storage: Storage,
152
+ parent: ParentConfig<NodeConfig<Options, Storage>>['extendNodeSchema'],
94
153
  },
95
154
  extension: Node,
96
- ) => {
97
- [key: string]: any,
98
- }) | null,
155
+ ) => Record<string, any>) | null,
99
156
 
100
157
  /**
101
158
  * Extend Mark Schema
102
159
  */
103
160
  extendMarkSchema?: ((
104
161
  this: {
162
+ name: string,
105
163
  options: Options,
164
+ storage: Storage,
165
+ parent: ParentConfig<NodeConfig<Options, Storage>>['extendMarkSchema'],
106
166
  },
107
167
  extension: Node,
108
- ) => {
109
- [key: string]: any,
110
- }) | null,
168
+ ) => Record<string, any>) | null,
111
169
 
112
170
  /**
113
- * The editor is ready.
171
+ * The editor is not ready yet.
114
172
  */
115
- onCreate?: ((this: {
173
+ onBeforeCreate?: ((this: {
174
+ name: string,
116
175
  options: Options,
176
+ storage: Storage,
117
177
  editor: Editor,
118
178
  type: NodeType,
179
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onBeforeCreate'],
119
180
  }) => void) | null,
120
181
 
121
182
  /**
122
- * The content has changed.
183
+ * The editor is ready.
123
184
  */
124
- onUpdate?: ((this: {
185
+ onCreate?: ((this: {
186
+ name: string,
125
187
  options: Options,
188
+ storage: Storage,
126
189
  editor: Editor,
127
190
  type: NodeType,
191
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onCreate'],
128
192
  }) => void) | null,
129
193
 
130
194
  /**
131
- * The selection has changed.
195
+ * The content has changed.
132
196
  */
133
- onSelectionUpdate?: ((this: {
197
+ onUpdate?: ((this: {
198
+ name: string,
134
199
  options: Options,
200
+ storage: Storage,
135
201
  editor: Editor,
136
202
  type: NodeType,
203
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onUpdate'],
137
204
  }) => void) | null,
138
205
 
139
206
  /**
140
- * The view has changed.
207
+ * The selection has changed.
141
208
  */
142
- onViewUpdate?: ((this: {
209
+ onSelectionUpdate?: ((this: {
210
+ name: string,
143
211
  options: Options,
212
+ storage: Storage,
144
213
  editor: Editor,
145
214
  type: NodeType,
215
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onSelectionUpdate'],
146
216
  }) => void) | null,
147
217
 
148
218
  /**
@@ -150,9 +220,12 @@ declare module '@tiptap/core' {
150
220
  */
151
221
  onTransaction?: ((
152
222
  this: {
223
+ name: string,
153
224
  options: Options,
225
+ storage: Storage,
154
226
  editor: Editor,
155
227
  type: NodeType,
228
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onTransaction'],
156
229
  },
157
230
  props: {
158
231
  transaction: Transaction,
@@ -164,9 +237,12 @@ declare module '@tiptap/core' {
164
237
  */
165
238
  onFocus?: ((
166
239
  this: {
240
+ name: string,
167
241
  options: Options,
242
+ storage: Storage,
168
243
  editor: Editor,
169
244
  type: NodeType,
245
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onFocus'],
170
246
  },
171
247
  props: {
172
248
  event: FocusEvent,
@@ -178,9 +254,12 @@ declare module '@tiptap/core' {
178
254
  */
179
255
  onBlur?: ((
180
256
  this: {
257
+ name: string,
181
258
  options: Options,
259
+ storage: Storage,
182
260
  editor: Editor,
183
261
  type: NodeType,
262
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onBlur'],
184
263
  },
185
264
  props: {
186
265
  event: FocusEvent,
@@ -191,18 +270,24 @@ declare module '@tiptap/core' {
191
270
  * The editor is destroyed.
192
271
  */
193
272
  onDestroy?: ((this: {
273
+ name: string,
194
274
  options: Options,
275
+ storage: Storage,
195
276
  editor: Editor,
196
277
  type: NodeType,
278
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onDestroy'],
197
279
  }) => void) | null,
198
280
 
199
281
  /**
200
282
  * Node View
201
283
  */
202
284
  addNodeView?: ((this: {
285
+ name: string,
203
286
  options: Options,
287
+ storage: Storage,
204
288
  editor: Editor,
205
289
  type: NodeType,
290
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addNodeView'],
206
291
  }) => NodeViewRenderer) | null,
207
292
 
208
293
  /**
@@ -213,59 +298,122 @@ declare module '@tiptap/core' {
213
298
  /**
214
299
  * Content
215
300
  */
216
- content?: NodeSpec['content'] | ((this: { options: Options }) => NodeSpec['content']),
301
+ content?: NodeSpec['content'] | ((this: {
302
+ name: string,
303
+ options: Options,
304
+ storage: Storage,
305
+ parent: ParentConfig<NodeConfig<Options, Storage>>['content'],
306
+ }) => NodeSpec['content']),
217
307
 
218
308
  /**
219
309
  * Marks
220
310
  */
221
- marks?: NodeSpec['marks'] | ((this: { options: Options }) => NodeSpec['marks']),
311
+ marks?: NodeSpec['marks'] | ((this: {
312
+ name: string,
313
+ options: Options,
314
+ storage: Storage,
315
+ parent: ParentConfig<NodeConfig<Options, Storage>>['marks'],
316
+ }) => NodeSpec['marks']),
222
317
 
223
318
  /**
224
319
  * Group
225
320
  */
226
- group?: NodeSpec['group'] | ((this: { options: Options }) => NodeSpec['group']),
321
+ group?: NodeSpec['group'] | ((this: {
322
+ name: string,
323
+ options: Options,
324
+ storage: Storage,
325
+ parent: ParentConfig<NodeConfig<Options, Storage>>['group'],
326
+ }) => NodeSpec['group']),
227
327
 
228
328
  /**
229
329
  * Inline
230
330
  */
231
- inline?: NodeSpec['inline'] | ((this: { options: Options }) => NodeSpec['inline']),
331
+ inline?: NodeSpec['inline'] | ((this: {
332
+ name: string,
333
+ options: Options,
334
+ storage: Storage,
335
+ parent: ParentConfig<NodeConfig<Options, Storage>>['inline'],
336
+ }) => NodeSpec['inline']),
232
337
 
233
338
  /**
234
339
  * Atom
235
340
  */
236
- atom?: NodeSpec['atom'] | ((this: { options: Options }) => NodeSpec['atom']),
341
+ atom?: NodeSpec['atom'] | ((this: {
342
+ name: string,
343
+ options: Options,
344
+ storage: Storage,
345
+ parent: ParentConfig<NodeConfig<Options, Storage>>['atom'],
346
+ }) => NodeSpec['atom']),
237
347
 
238
348
  /**
239
349
  * Selectable
240
350
  */
241
- selectable?: NodeSpec['selectable'] | ((this: { options: Options }) => NodeSpec['selectable']),
351
+ selectable?: NodeSpec['selectable'] | ((this: {
352
+ name: string,
353
+ options: Options,
354
+ storage: Storage,
355
+ parent: ParentConfig<NodeConfig<Options, Storage>>['selectable'],
356
+ }) => NodeSpec['selectable']),
242
357
 
243
358
  /**
244
359
  * Draggable
245
360
  */
246
- draggable?: NodeSpec['draggable'] | ((this: { options: Options }) => NodeSpec['draggable']),
361
+ draggable?: NodeSpec['draggable'] | ((this: {
362
+ name: string,
363
+ options: Options,
364
+ storage: Storage,
365
+ parent: ParentConfig<NodeConfig<Options, Storage>>['draggable'],
366
+ }) => NodeSpec['draggable']),
247
367
 
248
368
  /**
249
369
  * Code
250
370
  */
251
- code?: NodeSpec['code'] | ((this: { options: Options }) => NodeSpec['code']),
371
+ code?: NodeSpec['code'] | ((this: {
372
+ name: string,
373
+ options: Options,
374
+ storage: Storage,
375
+ parent: ParentConfig<NodeConfig<Options, Storage>>['code'],
376
+ }) => NodeSpec['code']),
377
+
378
+ /**
379
+ * Whitespace
380
+ */
381
+ whitespace?: NodeSpec['whitespace'] | ((this: {
382
+ name: string,
383
+ options: Options,
384
+ storage: Storage,
385
+ parent: ParentConfig<NodeConfig<Options, Storage>>['whitespace'],
386
+ }) => NodeSpec['whitespace']),
252
387
 
253
388
  /**
254
389
  * Defining
255
390
  */
256
- defining?: NodeSpec['defining'] | ((this: { options: Options }) => NodeSpec['defining']),
391
+ defining?: NodeSpec['defining'] | ((this: {
392
+ name: string,
393
+ options: Options,
394
+ storage: Storage,
395
+ parent: ParentConfig<NodeConfig<Options, Storage>>['defining'],
396
+ }) => NodeSpec['defining']),
257
397
 
258
398
  /**
259
399
  * Isolating
260
400
  */
261
- isolating?: NodeSpec['isolating'] | ((this: { options: Options }) => NodeSpec['isolating']),
401
+ isolating?: NodeSpec['isolating'] | ((this: {
402
+ name: string,
403
+ options: Options,
404
+ storage: Storage,
405
+ parent: ParentConfig<NodeConfig<Options, Storage>>['isolating'],
406
+ }) => NodeSpec['isolating']),
262
407
 
263
408
  /**
264
409
  * Parse HTML
265
410
  */
266
411
  parseHTML?: (
267
412
  this: {
413
+ name: string,
268
414
  options: Options,
415
+ storage: Storage,
416
+ parent: ParentConfig<NodeConfig<Options, Storage>>['parseHTML'],
269
417
  },
270
418
  ) => NodeSpec['parseDOM'],
271
419
 
@@ -274,11 +422,14 @@ declare module '@tiptap/core' {
274
422
  */
275
423
  renderHTML?: ((
276
424
  this: {
425
+ name: string,
277
426
  options: Options,
427
+ storage: Storage,
428
+ parent: ParentConfig<NodeConfig<Options, Storage>>['renderHTML'],
278
429
  },
279
430
  props: {
280
431
  node: ProseMirrorNode,
281
- HTMLAttributes: { [key: string]: any },
432
+ HTMLAttributes: Record<string, any>,
282
433
  }
283
434
  ) => DOMOutputSpec) | null,
284
435
 
@@ -287,12 +438,16 @@ declare module '@tiptap/core' {
287
438
  */
288
439
  renderText?: ((
289
440
  this: {
441
+ name: string,
290
442
  options: Options,
291
- editor: Editor,
292
- type: NodeType,
443
+ storage: Storage,
444
+ parent: ParentConfig<NodeConfig<Options, Storage>>['renderText'],
293
445
  },
294
446
  props: {
295
447
  node: ProseMirrorNode,
448
+ pos: number,
449
+ parent: ProseMirrorNode,
450
+ index: number,
296
451
  }
297
452
  ) => string) | null,
298
453
 
@@ -301,51 +456,123 @@ declare module '@tiptap/core' {
301
456
  */
302
457
  addAttributes?: (
303
458
  this: {
459
+ name: string,
304
460
  options: Options,
461
+ storage: Storage,
462
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addAttributes'],
305
463
  },
306
464
  ) => Attributes | {},
307
465
  }
308
466
  }
309
467
 
310
- export class Node<Options = any> {
468
+ export class Node<Options = any, Storage = any> {
311
469
  type = 'node'
312
470
 
471
+ name = 'node'
472
+
473
+ parent: Node | null = null
474
+
475
+ child: Node | null = null
476
+
477
+ options: Options
478
+
479
+ storage: Storage
480
+
313
481
  config: NodeConfig = {
314
- name: 'node',
482
+ name: this.name,
315
483
  defaultOptions: {},
316
484
  }
317
485
 
318
- options!: Options
319
-
320
- constructor(config: NodeConfig<Options>) {
486
+ constructor(config: Partial<NodeConfig<Options, Storage>> = {}) {
321
487
  this.config = {
322
488
  ...this.config,
323
489
  ...config,
324
490
  }
325
491
 
492
+ this.name = this.config.name
493
+
494
+ if (config.defaultOptions) {
495
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`)
496
+ }
497
+
498
+ // TODO: remove `addOptions` fallback
326
499
  this.options = this.config.defaultOptions
500
+
501
+ if (this.config.addOptions) {
502
+ this.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
503
+ this,
504
+ 'addOptions',
505
+ {
506
+ name: this.name,
507
+ },
508
+ ))
509
+ }
510
+
511
+ this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
512
+ this,
513
+ 'addStorage',
514
+ {
515
+ name: this.name,
516
+ options: this.options,
517
+ },
518
+ )) || {}
327
519
  }
328
520
 
329
- static create<O>(config: NodeConfig<O>) {
330
- return new Node<O>(config)
521
+ static create<O = any, S = any>(config: Partial<NodeConfig<O, S>> = {}) {
522
+ return new Node<O, S>(config)
331
523
  }
332
524
 
333
525
  configure(options: Partial<Options> = {}) {
334
- return Node
335
- .create<Options>(this.config as NodeConfig<Options>)
336
- .#configure(options)
526
+ // return a new instance so we can use the same extension
527
+ // with different calls of `configure`
528
+ const extension = this.extend()
529
+
530
+ extension.options = mergeDeep(this.options, options) as Options
531
+
532
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
533
+ extension,
534
+ 'addStorage',
535
+ {
536
+ name: extension.name,
537
+ options: extension.options,
538
+ },
539
+ ))
540
+
541
+ return extension
337
542
  }
338
543
 
339
- #configure = (options: Partial<Options>) => {
340
- this.options = mergeDeep(this.config.defaultOptions, options) as Options
544
+ extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<NodeConfig<ExtendedOptions, ExtendedStorage>> = {}) {
545
+ const extension = new Node<ExtendedOptions, ExtendedStorage>(extendedConfig)
341
546
 
342
- return this
343
- }
547
+ extension.parent = this
344
548
 
345
- extend<ExtendedOptions = Options>(extendedConfig: Partial<NodeConfig<ExtendedOptions>>) {
346
- return new Node<ExtendedOptions>({
347
- ...this.config,
348
- ...extendedConfig,
349
- } as NodeConfig<ExtendedOptions>)
549
+ this.child = extension
550
+
551
+ extension.name = extendedConfig.name
552
+ ? extendedConfig.name
553
+ : extension.parent.name
554
+
555
+ if (extendedConfig.defaultOptions) {
556
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`)
557
+ }
558
+
559
+ extension.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
560
+ extension,
561
+ 'addOptions',
562
+ {
563
+ name: extension.name,
564
+ },
565
+ ))
566
+
567
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
568
+ extension,
569
+ 'addStorage',
570
+ {
571
+ name: extension.name,
572
+ options: extension.options,
573
+ },
574
+ ))
575
+
576
+ return extension
350
577
  }
351
578
  }