@tiptap/core 2.0.0-beta.22 → 2.0.0-beta.220

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