@tiptap/core 2.0.0-beta.2 → 2.0.0-beta.200

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/README.md +2 -2
  2. package/dist/packages/core/src/CommandManager.d.ts +13 -6
  3. package/dist/packages/core/src/Editor.d.ts +27 -25
  4. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  5. package/dist/packages/core/src/Extension.d.ts +103 -26
  6. package/dist/packages/core/src/ExtensionManager.d.ts +8 -12
  7. package/dist/packages/core/src/InputRule.d.ts +42 -0
  8. package/dist/packages/core/src/Mark.d.ts +148 -31
  9. package/dist/packages/core/src/Node.d.ts +162 -33
  10. package/dist/packages/core/src/NodeView.d.ts +27 -0
  11. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  12. package/dist/packages/core/src/Tracker.d.ts +11 -0
  13. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  14. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  15. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  16. package/dist/packages/core/src/commands/command.d.ts +2 -2
  17. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  18. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  19. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  20. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  21. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  22. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  23. package/dist/packages/core/src/commands/extendMarkRange.d.ts +3 -3
  24. package/dist/packages/core/src/commands/first.d.ts +3 -3
  25. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  26. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  27. package/dist/packages/core/src/commands/index.d.ts +50 -0
  28. package/dist/packages/core/src/commands/insertContent.d.ts +16 -0
  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 +2 -91
  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 -0
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +7 -0
  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 +2 -3
  79. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +2 -2
  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 +2 -2
  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 +2 -3
  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 +2 -3
  94. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
  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/getTextContentFromNodes.d.ts +2 -0
  104. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  105. package/dist/packages/core/src/helpers/index.d.ts +33 -0
  106. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  107. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  108. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  109. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  110. package/dist/packages/core/src/helpers/isMarkActive.d.ts +2 -3
  111. package/dist/packages/core/src/helpers/isNodeActive.d.ts +2 -3
  112. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -0
  113. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  114. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  115. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  116. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  117. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  118. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  119. package/dist/packages/core/src/index.d.ts +15 -20
  120. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  121. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  122. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  123. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  124. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  125. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  126. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  127. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  128. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  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 +120 -53
  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/isEmptyObject.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  142. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  145. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  146. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  147. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  148. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  149. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  150. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  151. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  152. package/dist/tiptap-core.cjs.js +2896 -1261
  153. package/dist/tiptap-core.cjs.js.map +1 -1
  154. package/dist/tiptap-core.esm.js +2889 -1290
  155. package/dist/tiptap-core.esm.js.map +1 -1
  156. package/dist/tiptap-core.umd.js +2899 -1263
  157. package/dist/tiptap-core.umd.js.map +1 -1
  158. package/package.json +16 -20
  159. package/src/CommandManager.ts +64 -65
  160. package/src/Editor.ts +133 -98
  161. package/src/EventEmitter.ts +14 -4
  162. package/src/Extension.ts +198 -41
  163. package/src/ExtensionManager.ts +263 -78
  164. package/src/InputRule.ts +265 -0
  165. package/src/Mark.ts +285 -49
  166. package/src/Node.ts +284 -56
  167. package/src/NodeView.ts +261 -0
  168. package/src/PasteRule.ts +280 -0
  169. package/src/Tracker.ts +42 -0
  170. package/src/commands/blur.ts +12 -6
  171. package/src/commands/clearContent.ts +3 -3
  172. package/src/commands/clearNodes.ts +32 -18
  173. package/src/commands/command.ts +2 -2
  174. package/src/commands/createParagraphNear.ts +4 -3
  175. package/src/commands/deleteNode.ts +37 -0
  176. package/src/commands/deleteRange.ts +3 -3
  177. package/src/commands/deleteSelection.ts +4 -3
  178. package/src/commands/enter.ts +3 -3
  179. package/src/commands/exitCode.ts +4 -3
  180. package/src/commands/extendMarkRange.ts +12 -11
  181. package/src/commands/first.ts +3 -3
  182. package/src/commands/focus.ts +47 -44
  183. package/src/commands/forEach.ts +24 -0
  184. package/src/commands/index.ts +50 -0
  185. package/src/commands/insertContent.ts +24 -0
  186. package/src/commands/insertContentAt.ts +108 -0
  187. package/src/commands/joinBackward.ts +4 -3
  188. package/src/commands/joinForward.ts +4 -3
  189. package/src/commands/keyboardShortcut.ts +6 -6
  190. package/src/commands/lift.ts +6 -5
  191. package/src/commands/liftEmptyBlock.ts +4 -3
  192. package/src/commands/liftListItem.ts +6 -5
  193. package/src/commands/newlineInCode.ts +4 -3
  194. package/src/commands/resetAttributes.ts +62 -0
  195. package/src/commands/scrollIntoView.ts +3 -3
  196. package/src/commands/selectAll.ts +8 -6
  197. package/src/commands/selectNodeBackward.ts +4 -3
  198. package/src/commands/selectNodeForward.ts +4 -3
  199. package/src/commands/selectParentNode.ts +4 -3
  200. package/src/commands/selectTextblockEnd.ts +20 -0
  201. package/src/commands/selectTextblockStart.ts +20 -0
  202. package/src/commands/setContent.ts +12 -9
  203. package/src/commands/setMark.ts +83 -15
  204. package/src/commands/setMeta.ts +18 -0
  205. package/src/commands/setNode.ts +29 -7
  206. package/src/commands/setNodeSelection.ts +27 -0
  207. package/src/commands/setTextSelection.ts +33 -0
  208. package/src/commands/sinkListItem.ts +6 -5
  209. package/src/commands/splitBlock.ts +20 -23
  210. package/src/commands/splitListItem.ts +45 -18
  211. package/src/commands/toggleList.ts +83 -18
  212. package/src/commands/toggleMark.ts +18 -7
  213. package/src/commands/toggleNode.ts +6 -5
  214. package/src/commands/toggleWrap.ts +9 -9
  215. package/src/commands/undoInputRule.ts +34 -5
  216. package/src/commands/unsetAllMarks.ts +8 -10
  217. package/src/commands/unsetMark.ts +31 -13
  218. package/src/commands/updateAttributes.ts +73 -0
  219. package/src/commands/wrapIn.ts +5 -10
  220. package/src/commands/wrapInList.ts +6 -5
  221. package/src/extensions/clipboardTextSerializer.ts +14 -35
  222. package/src/extensions/commands.ts +3 -135
  223. package/src/extensions/editable.ts +1 -0
  224. package/src/extensions/focusEvents.ts +3 -5
  225. package/src/extensions/index.ts +1 -0
  226. package/src/extensions/keymap.ts +110 -13
  227. package/src/extensions/tabindex.ts +18 -0
  228. package/src/helpers/combineTransactionSteps.ts +18 -0
  229. package/src/helpers/createChainableState.ts +38 -0
  230. package/src/helpers/createDocument.ts +12 -0
  231. package/src/helpers/createNodeFromContent.ts +57 -0
  232. package/src/helpers/defaultBlockAt.ts +13 -0
  233. package/src/helpers/findChildren.ts +18 -0
  234. package/src/helpers/findChildrenInRange.ts +32 -0
  235. package/src/helpers/findParentNode.ts +3 -2
  236. package/src/helpers/findParentNodeClosestToPos.ts +3 -2
  237. package/src/helpers/generateHTML.ts +6 -5
  238. package/src/helpers/generateJSON.ts +14 -0
  239. package/src/helpers/generateText.ts +30 -0
  240. package/src/helpers/getAttributes.ts +28 -0
  241. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  242. package/src/helpers/getChangedRanges.ts +83 -0
  243. package/src/helpers/getDebugJSON.ts +54 -0
  244. package/src/helpers/getExtensionField.ts +25 -0
  245. package/src/helpers/getHTMLFromFragment.ts +6 -5
  246. package/src/helpers/getMarkAttributes.ts +14 -10
  247. package/src/helpers/getMarkRange.ts +41 -8
  248. package/src/helpers/getMarkType.ts +5 -1
  249. package/src/helpers/getMarksBetween.ts +32 -10
  250. package/src/helpers/getNodeAttributes.ts +9 -9
  251. package/src/helpers/getNodeType.ts +5 -1
  252. package/src/helpers/getRenderedAttributes.ts +6 -7
  253. package/src/helpers/getSchema.ts +7 -137
  254. package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
  255. package/src/helpers/getSchemaTypeByName.ts +2 -10
  256. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  257. package/src/helpers/getSplittedAttributes.ts +4 -4
  258. package/src/helpers/getText.ts +19 -0
  259. package/src/helpers/getTextBetween.ts +49 -0
  260. package/src/helpers/getTextContentFromNodes.ts +21 -0
  261. package/src/helpers/getTextSerializersFromSchema.ts +10 -0
  262. package/src/helpers/index.ts +33 -0
  263. package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
  264. package/src/helpers/isActive.ts +5 -5
  265. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  266. package/src/helpers/isList.ts +14 -7
  267. package/src/helpers/isMarkActive.ts +45 -20
  268. package/src/helpers/isNodeActive.ts +28 -35
  269. package/src/helpers/isNodeEmpty.ts +8 -0
  270. package/src/helpers/isNodeSelection.ts +2 -3
  271. package/src/helpers/isTextSelection.ts +2 -3
  272. package/src/helpers/posToDOMRect.ts +35 -0
  273. package/src/helpers/resolveFocusPosition.ts +43 -0
  274. package/src/helpers/selectionToInsertionEnd.ts +2 -2
  275. package/src/helpers/splitExtensions.ts +3 -3
  276. package/src/index.ts +16 -22
  277. package/src/inputRules/index.ts +5 -0
  278. package/src/inputRules/markInputRule.ts +59 -39
  279. package/src/inputRules/nodeInputRule.ts +45 -11
  280. package/src/inputRules/textInputRule.ts +35 -0
  281. package/src/inputRules/textblockTypeInputRule.ts +38 -0
  282. package/src/inputRules/wrappingInputRule.ts +60 -0
  283. package/src/pasteRules/index.ts +3 -0
  284. package/src/pasteRules/markPasteRule.ts +62 -53
  285. package/src/pasteRules/nodePasteRule.ts +39 -0
  286. package/src/pasteRules/textPasteRule.ts +35 -0
  287. package/src/style.ts +16 -3
  288. package/src/types.ts +132 -47
  289. package/src/utilities/callOrReturn.ts +6 -3
  290. package/src/utilities/createStyleTag.ts +12 -1
  291. package/src/utilities/deleteProps.ts +2 -4
  292. package/src/utilities/elementFromString.ts +4 -5
  293. package/src/utilities/escapeForRegEx.ts +4 -0
  294. package/src/utilities/findDuplicates.ts +5 -0
  295. package/src/utilities/fromString.ts +2 -2
  296. package/src/utilities/index.ts +3 -0
  297. package/src/utilities/isEmptyObject.ts +2 -2
  298. package/src/utilities/isFunction.ts +3 -0
  299. package/src/utilities/isMacOS.ts +5 -0
  300. package/src/utilities/isNumber.ts +3 -0
  301. package/src/utilities/isPlainObject.ts +8 -5
  302. package/src/utilities/isRegExp.ts +3 -0
  303. package/src/utilities/isString.ts +3 -0
  304. package/src/utilities/isiOS.ts +12 -0
  305. package/src/utilities/mergeAttributes.ts +2 -3
  306. package/src/utilities/mergeDeep.ts +2 -3
  307. package/src/utilities/minMax.ts +1 -1
  308. package/src/utilities/objectIncludes.ts +17 -5
  309. package/src/utilities/removeDuplicates.ts +15 -0
  310. package/CHANGELOG.md +0 -198
  311. package/LICENSE.md +0 -21
  312. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  313. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  314. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  315. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  316. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  317. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  318. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  319. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  320. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  321. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  322. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  323. package/src/commands/insertHTML.ts +0 -28
  324. package/src/commands/insertText.ts +0 -20
  325. package/src/commands/replace.ts +0 -20
  326. package/src/commands/replaceRange.ts +0 -36
  327. package/src/commands/resetNodeAttributes.ts +0 -29
  328. package/src/commands/updateNodeAttributes.ts +0 -31
  329. package/src/utilities/isClass.ts +0 -7
  330. package/src/utilities/isObject.ts +0 -10
  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
- NodeConfig,
17
23
  } from './types'
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
  /**
@@ -26,123 +33,187 @@ declare module '@tiptap/core' {
26
33
  */
27
34
  name: string,
28
35
 
36
+ /**
37
+ * Priority
38
+ */
39
+ priority?: number,
40
+
29
41
  /**
30
42
  * Default options
31
43
  */
32
44
  defaultOptions?: Options,
33
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
+
34
63
  /**
35
64
  * Global attributes
36
65
  */
37
66
  addGlobalAttributes?: (this: {
67
+ name: string,
38
68
  options: Options,
69
+ storage: Storage,
70
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addGlobalAttributes'],
39
71
  }) => GlobalAttributes | {},
40
72
 
41
73
  /**
42
74
  * Raw
43
75
  */
44
76
  addCommands?: (this: {
77
+ name: string,
45
78
  options: Options,
79
+ storage: Storage,
46
80
  editor: Editor,
47
81
  type: NodeType,
82
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addCommands'],
48
83
  }) => Partial<RawCommands>,
49
84
 
50
85
  /**
51
86
  * Keyboard shortcuts
52
87
  */
53
88
  addKeyboardShortcuts?: (this: {
89
+ name: string,
54
90
  options: Options,
91
+ storage: Storage,
55
92
  editor: Editor,
56
93
  type: NodeType,
94
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addKeyboardShortcuts'],
57
95
  }) => {
58
- [key: string]: ProseMirrorCommand,
96
+ [key: string]: KeyboardShortcutCommand,
59
97
  },
60
98
 
61
99
  /**
62
100
  * Input rules
63
101
  */
64
102
  addInputRules?: (this: {
103
+ name: string,
65
104
  options: Options,
105
+ storage: Storage,
66
106
  editor: Editor,
67
107
  type: NodeType,
108
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addInputRules'],
68
109
  }) => InputRule[],
69
110
 
70
111
  /**
71
112
  * Paste rules
72
113
  */
73
114
  addPasteRules?: (this: {
115
+ name: string,
74
116
  options: Options,
117
+ storage: Storage,
75
118
  editor: Editor,
76
119
  type: NodeType,
77
- }) => Plugin[],
120
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addPasteRules'],
121
+ }) => PasteRule[],
78
122
 
79
123
  /**
80
124
  * ProseMirror plugins
81
125
  */
82
126
  addProseMirrorPlugins?: (this: {
127
+ name: string,
83
128
  options: Options,
129
+ storage: Storage,
84
130
  editor: Editor,
85
131
  type: NodeType,
132
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addProseMirrorPlugins'],
86
133
  }) => Plugin[],
87
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
+
88
145
  /**
89
146
  * Extend Node Schema
90
147
  */
91
148
  extendNodeSchema?: ((
92
149
  this: {
150
+ name: string,
93
151
  options: Options,
152
+ storage: Storage,
153
+ parent: ParentConfig<NodeConfig<Options, Storage>>['extendNodeSchema'],
94
154
  },
95
155
  extension: Node,
96
- ) => {
97
- [key: string]: any,
98
- }) | null,
156
+ ) => Record<string, any>) | null,
99
157
 
100
158
  /**
101
159
  * Extend Mark Schema
102
160
  */
103
161
  extendMarkSchema?: ((
104
162
  this: {
163
+ name: string,
105
164
  options: Options,
165
+ storage: Storage,
166
+ parent: ParentConfig<NodeConfig<Options, Storage>>['extendMarkSchema'],
106
167
  },
107
168
  extension: Node,
108
- ) => {
109
- [key: string]: any,
110
- }) | null,
169
+ ) => Record<string, any>) | null,
111
170
 
112
171
  /**
113
- * The editor is ready.
172
+ * The editor is not ready yet.
114
173
  */
115
- onCreate?: ((this: {
174
+ onBeforeCreate?: ((this: {
175
+ name: string,
116
176
  options: Options,
177
+ storage: Storage,
117
178
  editor: Editor,
118
179
  type: NodeType,
180
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onBeforeCreate'],
119
181
  }) => void) | null,
120
182
 
121
183
  /**
122
- * The content has changed.
184
+ * The editor is ready.
123
185
  */
124
- onUpdate?: ((this: {
186
+ onCreate?: ((this: {
187
+ name: string,
125
188
  options: Options,
189
+ storage: Storage,
126
190
  editor: Editor,
127
191
  type: NodeType,
192
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onCreate'],
128
193
  }) => void) | null,
129
194
 
130
195
  /**
131
- * The selection has changed.
196
+ * The content has changed.
132
197
  */
133
- onSelectionUpdate?: ((this: {
198
+ onUpdate?: ((this: {
199
+ name: string,
134
200
  options: Options,
201
+ storage: Storage,
135
202
  editor: Editor,
136
203
  type: NodeType,
204
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onUpdate'],
137
205
  }) => void) | null,
138
206
 
139
207
  /**
140
- * The view has changed.
208
+ * The selection has changed.
141
209
  */
142
- onViewUpdate?: ((this: {
210
+ onSelectionUpdate?: ((this: {
211
+ name: string,
143
212
  options: Options,
213
+ storage: Storage,
144
214
  editor: Editor,
145
215
  type: NodeType,
216
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onSelectionUpdate'],
146
217
  }) => void) | null,
147
218
 
148
219
  /**
@@ -150,9 +221,12 @@ declare module '@tiptap/core' {
150
221
  */
151
222
  onTransaction?: ((
152
223
  this: {
224
+ name: string,
153
225
  options: Options,
226
+ storage: Storage,
154
227
  editor: Editor,
155
228
  type: NodeType,
229
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onTransaction'],
156
230
  },
157
231
  props: {
158
232
  transaction: Transaction,
@@ -164,9 +238,12 @@ declare module '@tiptap/core' {
164
238
  */
165
239
  onFocus?: ((
166
240
  this: {
241
+ name: string,
167
242
  options: Options,
243
+ storage: Storage,
168
244
  editor: Editor,
169
245
  type: NodeType,
246
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onFocus'],
170
247
  },
171
248
  props: {
172
249
  event: FocusEvent,
@@ -178,9 +255,12 @@ declare module '@tiptap/core' {
178
255
  */
179
256
  onBlur?: ((
180
257
  this: {
258
+ name: string,
181
259
  options: Options,
260
+ storage: Storage,
182
261
  editor: Editor,
183
262
  type: NodeType,
263
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onBlur'],
184
264
  },
185
265
  props: {
186
266
  event: FocusEvent,
@@ -191,18 +271,24 @@ declare module '@tiptap/core' {
191
271
  * The editor is destroyed.
192
272
  */
193
273
  onDestroy?: ((this: {
274
+ name: string,
194
275
  options: Options,
276
+ storage: Storage,
195
277
  editor: Editor,
196
278
  type: NodeType,
279
+ parent: ParentConfig<NodeConfig<Options, Storage>>['onDestroy'],
197
280
  }) => void) | null,
198
281
 
199
282
  /**
200
283
  * Node View
201
284
  */
202
285
  addNodeView?: ((this: {
286
+ name: string,
203
287
  options: Options,
288
+ storage: Storage,
204
289
  editor: Editor,
205
290
  type: NodeType,
291
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addNodeView'],
206
292
  }) => NodeViewRenderer) | null,
207
293
 
208
294
  /**
@@ -213,59 +299,122 @@ declare module '@tiptap/core' {
213
299
  /**
214
300
  * Content
215
301
  */
216
- 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']),
217
308
 
218
309
  /**
219
310
  * Marks
220
311
  */
221
- 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']),
222
318
 
223
319
  /**
224
320
  * Group
225
321
  */
226
- 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']),
227
328
 
228
329
  /**
229
330
  * Inline
230
331
  */
231
- 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']),
232
338
 
233
339
  /**
234
340
  * Atom
235
341
  */
236
- 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']),
237
348
 
238
349
  /**
239
350
  * Selectable
240
351
  */
241
- 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']),
242
358
 
243
359
  /**
244
360
  * Draggable
245
361
  */
246
- 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']),
247
368
 
248
369
  /**
249
370
  * Code
250
371
  */
251
- 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']),
252
388
 
253
389
  /**
254
390
  * Defining
255
391
  */
256
- 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']),
257
398
 
258
399
  /**
259
400
  * Isolating
260
401
  */
261
- 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']),
262
408
 
263
409
  /**
264
410
  * Parse HTML
265
411
  */
266
412
  parseHTML?: (
267
413
  this: {
414
+ name: string,
268
415
  options: Options,
416
+ storage: Storage,
417
+ parent: ParentConfig<NodeConfig<Options, Storage>>['parseHTML'],
269
418
  },
270
419
  ) => NodeSpec['parseDOM'],
271
420
 
@@ -274,11 +423,14 @@ declare module '@tiptap/core' {
274
423
  */
275
424
  renderHTML?: ((
276
425
  this: {
426
+ name: string,
277
427
  options: Options,
428
+ storage: Storage,
429
+ parent: ParentConfig<NodeConfig<Options, Storage>>['renderHTML'],
278
430
  },
279
431
  props: {
280
432
  node: ProseMirrorNode,
281
- HTMLAttributes: { [key: string]: any },
433
+ HTMLAttributes: Record<string, any>,
282
434
  }
283
435
  ) => DOMOutputSpec) | null,
284
436
 
@@ -287,12 +439,16 @@ declare module '@tiptap/core' {
287
439
  */
288
440
  renderText?: ((
289
441
  this: {
442
+ name: string,
290
443
  options: Options,
291
- editor: Editor,
292
- type: NodeType,
444
+ storage: Storage,
445
+ parent: ParentConfig<NodeConfig<Options, Storage>>['renderText'],
293
446
  },
294
447
  props: {
295
448
  node: ProseMirrorNode,
449
+ pos: number,
450
+ parent: ProseMirrorNode,
451
+ index: number,
296
452
  }
297
453
  ) => string) | null,
298
454
 
@@ -301,51 +457,123 @@ declare module '@tiptap/core' {
301
457
  */
302
458
  addAttributes?: (
303
459
  this: {
460
+ name: string,
304
461
  options: Options,
462
+ storage: Storage,
463
+ parent: ParentConfig<NodeConfig<Options, Storage>>['addAttributes'],
305
464
  },
306
465
  ) => Attributes | {},
307
466
  }
308
467
  }
309
468
 
310
- export class Node<Options = any> {
469
+ export class Node<Options = any, Storage = any> {
311
470
  type = 'node'
312
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
+
313
482
  config: NodeConfig = {
314
- name: 'node',
483
+ name: this.name,
315
484
  defaultOptions: {},
316
485
  }
317
486
 
318
- options!: Options
319
-
320
- constructor(config: NodeConfig<Options>) {
487
+ constructor(config: Partial<NodeConfig<Options, Storage>> = {}) {
321
488
  this.config = {
322
489
  ...this.config,
323
490
  ...config,
324
491
  }
325
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
326
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
+ )) || {}
327
520
  }
328
521
 
329
- static create<O>(config: NodeConfig<O>) {
330
- return new Node<O>(config)
522
+ static create<O = any, S = any>(config: Partial<NodeConfig<O, S>> = {}) {
523
+ return new Node<O, S>(config)
331
524
  }
332
525
 
333
526
  configure(options: Partial<Options> = {}) {
334
- return Node
335
- .create<Options>(this.config as NodeConfig<Options>)
336
- .#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
337
543
  }
338
544
 
339
- #configure = (options: Partial<Options>) => {
340
- 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)
341
547
 
342
- return this
343
- }
548
+ extension.parent = this
344
549
 
345
- extend<ExtendedOptions = Options>(extendedConfig: Partial<NodeConfig<ExtendedOptions>>) {
346
- return new Node<ExtendedOptions>({
347
- ...this.config,
348
- ...extendedConfig,
349
- } 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
350
578
  }
351
579
  }