@tiptap/core 2.0.0-beta.18 → 2.0.0-beta.180

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