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

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 (333) 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 +3 -0
  128. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  129. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  130. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  131. package/dist/packages/core/src/style.d.ts +1 -2
  132. package/dist/packages/core/src/types.d.ts +112 -56
  133. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  134. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  135. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  136. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  137. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  139. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  140. package/dist/packages/core/src/utilities/index.d.ts +3 -0
  141. package/dist/packages/core/src/utilities/isClass.d.ts +1 -1
  142. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  143. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  145. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  146. package/dist/packages/core/src/utilities/isObject.d.ts +1 -1
  147. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  148. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  149. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  150. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  151. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  152. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  153. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  154. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  155. package/dist/tiptap-core.cjs.js +2696 -1374
  156. package/dist/tiptap-core.cjs.js.map +1 -1
  157. package/dist/tiptap-core.esm.js +2630 -1342
  158. package/dist/tiptap-core.esm.js.map +1 -1
  159. package/dist/tiptap-core.umd.js +2648 -1325
  160. package/dist/tiptap-core.umd.js.map +1 -1
  161. package/package.json +17 -20
  162. package/src/CommandManager.ts +63 -64
  163. package/src/Editor.ts +115 -78
  164. package/src/EventEmitter.ts +14 -4
  165. package/src/Extension.ts +193 -43
  166. package/src/ExtensionManager.ts +232 -83
  167. package/src/InputRule.ts +265 -0
  168. package/src/Mark.ts +239 -49
  169. package/src/Node.ts +279 -57
  170. package/src/NodeView.ts +115 -47
  171. package/src/PasteRule.ts +247 -0
  172. package/src/Tracker.ts +42 -0
  173. package/src/commands/blur.ts +12 -6
  174. package/src/commands/clearContent.ts +3 -3
  175. package/src/commands/clearNodes.ts +30 -18
  176. package/src/commands/command.ts +2 -2
  177. package/src/commands/createParagraphNear.ts +4 -3
  178. package/src/commands/deleteNode.ts +37 -0
  179. package/src/commands/deleteRange.ts +3 -3
  180. package/src/commands/deleteSelection.ts +4 -3
  181. package/src/commands/enter.ts +3 -3
  182. package/src/commands/exitCode.ts +4 -3
  183. package/src/commands/extendMarkRange.ts +12 -11
  184. package/src/commands/first.ts +3 -3
  185. package/src/commands/focus.ts +47 -44
  186. package/src/commands/forEach.ts +24 -0
  187. package/src/commands/index.ts +50 -0
  188. package/src/commands/insertContent.ts +13 -24
  189. package/src/commands/insertContentAt.ts +108 -0
  190. package/src/commands/joinBackward.ts +4 -3
  191. package/src/commands/joinForward.ts +4 -3
  192. package/src/commands/keyboardShortcut.ts +6 -6
  193. package/src/commands/lift.ts +6 -5
  194. package/src/commands/liftEmptyBlock.ts +4 -3
  195. package/src/commands/liftListItem.ts +6 -5
  196. package/src/commands/newlineInCode.ts +4 -3
  197. package/src/commands/resetAttributes.ts +62 -0
  198. package/src/commands/scrollIntoView.ts +3 -3
  199. package/src/commands/selectAll.ts +8 -6
  200. package/src/commands/selectNodeBackward.ts +4 -3
  201. package/src/commands/selectNodeForward.ts +4 -3
  202. package/src/commands/selectParentNode.ts +4 -3
  203. package/src/commands/selectTextblockEnd.ts +20 -0
  204. package/src/commands/selectTextblockStart.ts +20 -0
  205. package/src/commands/setContent.ts +9 -15
  206. package/src/commands/setMark.ts +36 -12
  207. package/src/commands/setMeta.ts +18 -0
  208. package/src/commands/setNode.ts +29 -7
  209. package/src/commands/setNodeSelection.ts +29 -0
  210. package/src/commands/setTextSelection.ts +33 -0
  211. package/src/commands/sinkListItem.ts +6 -5
  212. package/src/commands/splitBlock.ts +16 -10
  213. package/src/commands/splitListItem.ts +45 -18
  214. package/src/commands/toggleList.ts +83 -18
  215. package/src/commands/toggleMark.ts +18 -7
  216. package/src/commands/toggleNode.ts +6 -5
  217. package/src/commands/toggleWrap.ts +9 -9
  218. package/src/commands/undoInputRule.ts +34 -5
  219. package/src/commands/unsetAllMarks.ts +7 -11
  220. package/src/commands/unsetMark.ts +35 -22
  221. package/src/commands/updateAttributes.ts +73 -0
  222. package/src/commands/wrapIn.ts +5 -10
  223. package/src/commands/wrapInList.ts +6 -5
  224. package/src/extensions/clipboardTextSerializer.ts +14 -35
  225. package/src/extensions/commands.ts +3 -141
  226. package/src/extensions/editable.ts +1 -0
  227. package/src/extensions/focusEvents.ts +3 -5
  228. package/src/extensions/index.ts +1 -0
  229. package/src/extensions/keymap.ts +110 -13
  230. package/src/extensions/tabindex.ts +18 -0
  231. package/src/helpers/combineTransactionSteps.ts +18 -0
  232. package/src/helpers/createChainableState.ts +38 -0
  233. package/src/helpers/createDocument.ts +5 -6
  234. package/src/helpers/createNodeFromContent.ts +17 -19
  235. package/src/helpers/defaultBlockAt.ts +13 -0
  236. package/src/helpers/findChildren.ts +18 -0
  237. package/src/helpers/findChildrenInRange.ts +32 -0
  238. package/src/helpers/findParentNode.ts +3 -2
  239. package/src/helpers/findParentNodeClosestToPos.ts +3 -2
  240. package/src/helpers/generateHTML.ts +6 -5
  241. package/src/helpers/generateJSON.ts +14 -0
  242. package/src/helpers/generateText.ts +30 -0
  243. package/src/helpers/getAttributes.ts +28 -0
  244. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  245. package/src/helpers/getChangedRanges.ts +83 -0
  246. package/src/helpers/getDebugJSON.ts +54 -0
  247. package/src/helpers/getExtensionField.ts +25 -0
  248. package/src/helpers/getHTMLFromFragment.ts +6 -5
  249. package/src/helpers/getMarkAttributes.ts +14 -10
  250. package/src/helpers/getMarkRange.ts +41 -8
  251. package/src/helpers/getMarkType.ts +5 -1
  252. package/src/helpers/getMarksBetween.ts +32 -10
  253. package/src/helpers/getNodeAttributes.ts +9 -9
  254. package/src/helpers/getNodeType.ts +5 -1
  255. package/src/helpers/getRenderedAttributes.ts +6 -7
  256. package/src/helpers/getSchema.ts +7 -133
  257. package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
  258. package/src/helpers/getSchemaTypeByName.ts +2 -10
  259. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  260. package/src/helpers/getSplittedAttributes.ts +4 -4
  261. package/src/helpers/getText.ts +19 -0
  262. package/src/helpers/getTextBetween.ts +49 -0
  263. package/src/helpers/getTextContentFromNodes.ts +17 -0
  264. package/src/helpers/getTextSerializersFromSchema.ts +10 -0
  265. package/src/helpers/index.ts +33 -0
  266. package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
  267. package/src/helpers/isActive.ts +5 -5
  268. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  269. package/src/helpers/isList.ts +14 -7
  270. package/src/helpers/isMarkActive.ts +45 -20
  271. package/src/helpers/isNodeActive.ts +28 -35
  272. package/src/helpers/isNodeEmpty.ts +1 -1
  273. package/src/helpers/isNodeSelection.ts +3 -2
  274. package/src/helpers/isTextSelection.ts +3 -2
  275. package/src/helpers/posToDOMRect.ts +35 -0
  276. package/src/helpers/resolveFocusPosition.ts +43 -0
  277. package/src/helpers/selectionToInsertionEnd.ts +2 -2
  278. package/src/helpers/splitExtensions.ts +3 -3
  279. package/src/index.ts +15 -24
  280. package/src/inputRules/index.ts +5 -0
  281. package/src/inputRules/markInputRule.ts +59 -39
  282. package/src/inputRules/nodeInputRule.ts +45 -11
  283. package/src/inputRules/textInputRule.ts +35 -0
  284. package/src/inputRules/textblockTypeInputRule.ts +38 -0
  285. package/src/inputRules/wrappingInputRule.ts +60 -0
  286. package/src/pasteRules/index.ts +3 -0
  287. package/src/pasteRules/markPasteRule.ts +62 -53
  288. package/src/pasteRules/nodePasteRule.ts +39 -0
  289. package/src/pasteRules/textPasteRule.ts +35 -0
  290. package/src/style.ts +16 -3
  291. package/src/types.ts +129 -43
  292. package/src/utilities/callOrReturn.ts +6 -3
  293. package/src/utilities/createStyleTag.ts +12 -1
  294. package/src/utilities/deleteProps.ts +2 -4
  295. package/src/utilities/elementFromString.ts +4 -5
  296. package/src/utilities/escapeForRegEx.ts +4 -0
  297. package/src/utilities/findDuplicates.ts +5 -0
  298. package/src/utilities/fromString.ts +2 -2
  299. package/src/utilities/index.ts +3 -0
  300. package/src/utilities/isClass.ts +2 -2
  301. package/src/utilities/isEmptyObject.ts +2 -2
  302. package/src/utilities/isFunction.ts +3 -0
  303. package/src/utilities/isMacOS.ts +5 -0
  304. package/src/utilities/isNumber.ts +3 -0
  305. package/src/utilities/isObject.ts +6 -6
  306. package/src/utilities/isPlainObject.ts +8 -5
  307. package/src/utilities/isRegExp.ts +3 -0
  308. package/src/utilities/isString.ts +3 -0
  309. package/src/utilities/isiOS.ts +12 -0
  310. package/src/utilities/mergeAttributes.ts +2 -3
  311. package/src/utilities/mergeDeep.ts +2 -3
  312. package/src/utilities/minMax.ts +1 -1
  313. package/src/utilities/objectIncludes.ts +17 -5
  314. package/src/utilities/removeDuplicates.ts +15 -0
  315. package/CHANGELOG.md +0 -335
  316. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  317. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  318. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  319. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  320. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  321. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  322. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  323. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  324. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  325. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  326. package/src/commands/insertHTML.ts +0 -30
  327. package/src/commands/insertNode.ts +0 -33
  328. package/src/commands/insertText.ts +0 -22
  329. package/src/commands/replace.ts +0 -20
  330. package/src/commands/replaceRange.ts +0 -36
  331. package/src/commands/resetNodeAttributes.ts +0 -31
  332. package/src/commands/updateNodeAttributes.ts +0 -33
  333. package/src/utilities/removeElement.ts +0 -5
package/src/Mark.ts CHANGED
@@ -1,19 +1,31 @@
1
1
  import {
2
2
  DOMOutputSpec,
3
- MarkSpec,
4
3
  Mark as ProseMirrorMark,
4
+ MarkSpec,
5
5
  MarkType,
6
6
  } from 'prosemirror-model'
7
7
  import { Plugin, Transaction } from 'prosemirror-state'
8
- import { Command as ProseMirrorCommand } from 'prosemirror-commands'
9
- import { InputRule } from 'prosemirror-inputrules'
10
- import mergeDeep from './utilities/mergeDeep'
11
- import { Attributes, RawCommands, GlobalAttributes } from './types'
8
+
12
9
  import { MarkConfig } from '.'
13
10
  import { Editor } from './Editor'
11
+ import { getExtensionField } from './helpers/getExtensionField'
12
+ import { InputRule } from './InputRule'
13
+ import { Node } from './Node'
14
+ import { PasteRule } from './PasteRule'
15
+ import {
16
+ AnyConfig,
17
+ Attributes,
18
+ Extensions,
19
+ GlobalAttributes,
20
+ KeyboardShortcutCommand,
21
+ ParentConfig,
22
+ RawCommands,
23
+ } from './types'
24
+ import { callOrReturn } from './utilities/callOrReturn'
25
+ import { mergeDeep } from './utilities/mergeDeep'
14
26
 
15
27
  declare module '@tiptap/core' {
16
- export interface MarkConfig<Options = any> {
28
+ export interface MarkConfig<Options = any, Storage = any> {
17
29
  [key: string]: any;
18
30
 
19
31
  /**
@@ -31,118 +43,177 @@ declare module '@tiptap/core' {
31
43
  */
32
44
  defaultOptions?: Options,
33
45
 
46
+ /**
47
+ * Default Options
48
+ */
49
+ addOptions?: (this: {
50
+ name: string,
51
+ parent: Exclude<ParentConfig<MarkConfig<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<MarkConfig<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<MarkConfig<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: MarkType,
82
+ parent: ParentConfig<MarkConfig<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: MarkType,
94
+ parent: ParentConfig<MarkConfig<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: MarkType,
108
+ parent: ParentConfig<MarkConfig<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: MarkType,
77
- }) => Plugin[],
120
+ parent: ParentConfig<MarkConfig<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: MarkType,
132
+ parent: ParentConfig<MarkConfig<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<MarkConfig<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<MarkConfig<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<MarkConfig<Options, Storage>>['extendMarkSchema'],
106
167
  },
107
- extension: Node,
108
- ) => {
109
- [key: string]: any,
110
- }) | null,
168
+ extension: Mark,
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: MarkType,
180
+ parent: ParentConfig<MarkConfig<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: MarkType,
192
+ parent: ParentConfig<MarkConfig<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: MarkType,
204
+ parent: ParentConfig<MarkConfig<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: MarkType,
216
+ parent: ParentConfig<MarkConfig<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: MarkType,
229
+ parent: ParentConfig<MarkConfig<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: MarkType,
246
+ parent: ParentConfig<MarkConfig<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: MarkType,
263
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onBlur'],
184
264
  },
185
265
  props: {
186
266
  event: FocusEvent,
@@ -191,9 +271,12 @@ 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: MarkType,
279
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onDestroy'],
197
280
  }) => void) | null,
198
281
 
199
282
  /**
@@ -204,29 +287,62 @@ declare module '@tiptap/core' {
204
287
  /**
205
288
  * Inclusive
206
289
  */
207
- inclusive?: MarkSpec['inclusive'] | ((this: { options: Options }) => MarkSpec['inclusive']),
290
+ inclusive?: MarkSpec['inclusive'] | ((this: {
291
+ name: string,
292
+ options: Options,
293
+ storage: Storage,
294
+ parent: ParentConfig<MarkConfig<Options, Storage>>['inclusive'],
295
+ }) => MarkSpec['inclusive']),
208
296
 
209
297
  /**
210
298
  * Excludes
211
299
  */
212
- excludes?: MarkSpec['excludes'] | ((this: { options: Options }) => MarkSpec['excludes']),
300
+ excludes?: MarkSpec['excludes'] | ((this: {
301
+ name: string,
302
+ options: Options,
303
+ storage: Storage,
304
+ parent: ParentConfig<MarkConfig<Options, Storage>>['excludes'],
305
+ }) => MarkSpec['excludes']),
213
306
 
214
307
  /**
215
308
  * Group
216
309
  */
217
- group?: MarkSpec['group'] | ((this: { options: Options }) => MarkSpec['group']),
310
+ group?: MarkSpec['group'] | ((this: {
311
+ name: string,
312
+ options: Options,
313
+ storage: Storage,
314
+ parent: ParentConfig<MarkConfig<Options, Storage>>['group'],
315
+ }) => MarkSpec['group']),
218
316
 
219
317
  /**
220
318
  * Spanning
221
319
  */
222
- spanning?: MarkSpec['spanning'] | ((this: { options: Options }) => MarkSpec['spanning']),
320
+ spanning?: MarkSpec['spanning'] | ((this: {
321
+ name: string,
322
+ options: Options,
323
+ storage: Storage,
324
+ parent: ParentConfig<MarkConfig<Options, Storage>>['spanning'],
325
+ }) => MarkSpec['spanning']),
326
+
327
+ /**
328
+ * Code
329
+ */
330
+ code?: boolean | ((this: {
331
+ name: string,
332
+ options: Options,
333
+ storage: Storage,
334
+ parent: ParentConfig<MarkConfig<Options, Storage>>['code'],
335
+ }) => boolean),
223
336
 
224
337
  /**
225
338
  * Parse HTML
226
339
  */
227
340
  parseHTML?: (
228
341
  this: {
342
+ name: string,
229
343
  options: Options,
344
+ storage: Storage,
345
+ parent: ParentConfig<MarkConfig<Options, Storage>>['parseHTML'],
230
346
  },
231
347
  ) => MarkSpec['parseDOM'],
232
348
 
@@ -235,12 +351,15 @@ declare module '@tiptap/core' {
235
351
  */
236
352
  renderHTML?: ((
237
353
  this: {
354
+ name: string,
238
355
  options: Options,
356
+ storage: Storage,
357
+ parent: ParentConfig<MarkConfig<Options, Storage>>['renderHTML'],
239
358
  },
240
359
  props: {
241
360
  mark: ProseMirrorMark,
242
- HTMLAttributes: { [key: string]: any },
243
- }
361
+ HTMLAttributes: Record<string, any>,
362
+ },
244
363
  ) => DOMOutputSpec) | null,
245
364
 
246
365
  /**
@@ -248,52 +367,123 @@ declare module '@tiptap/core' {
248
367
  */
249
368
  addAttributes?: (
250
369
  this: {
370
+ name: string,
251
371
  options: Options,
372
+ storage: Storage,
373
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addAttributes'],
252
374
  },
253
375
  ) => Attributes | {},
254
376
  }
255
377
  }
256
378
 
257
- export class Mark<Options = any> {
379
+ export class Mark<Options = any, Storage = any> {
258
380
  type = 'mark'
259
381
 
382
+ name = 'mark'
383
+
384
+ parent: Mark | null = null
385
+
386
+ child: Mark | null = null
387
+
388
+ options: Options
389
+
390
+ storage: Storage
391
+
260
392
  config: MarkConfig = {
261
- name: 'mark',
262
- priority: 100,
393
+ name: this.name,
263
394
  defaultOptions: {},
264
395
  }
265
396
 
266
- options!: Options
267
-
268
- constructor(config: MarkConfig<Options>) {
397
+ constructor(config: Partial<MarkConfig<Options, Storage>> = {}) {
269
398
  this.config = {
270
399
  ...this.config,
271
400
  ...config,
272
401
  }
273
402
 
403
+ this.name = this.config.name
404
+
405
+ if (config.defaultOptions) {
406
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`)
407
+ }
408
+
409
+ // TODO: remove `addOptions` fallback
274
410
  this.options = this.config.defaultOptions
411
+
412
+ if (this.config.addOptions) {
413
+ this.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
414
+ this,
415
+ 'addOptions',
416
+ {
417
+ name: this.name,
418
+ },
419
+ ))
420
+ }
421
+
422
+ this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
423
+ this,
424
+ 'addStorage',
425
+ {
426
+ name: this.name,
427
+ options: this.options,
428
+ },
429
+ )) || {}
275
430
  }
276
431
 
277
- static create<O>(config: MarkConfig<O>) {
278
- return new Mark<O>(config)
432
+ static create<O = any, S = any>(config: Partial<MarkConfig<O, S>> = {}) {
433
+ return new Mark<O, S>(config)
279
434
  }
280
435
 
281
436
  configure(options: Partial<Options> = {}) {
282
- return Mark
283
- .create<Options>(this.config as MarkConfig<Options>)
284
- .#configure(options)
437
+ // return a new instance so we can use the same extension
438
+ // with different calls of `configure`
439
+ const extension = this.extend()
440
+
441
+ extension.options = mergeDeep(this.options, options) as Options
442
+
443
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
444
+ extension,
445
+ 'addStorage',
446
+ {
447
+ name: extension.name,
448
+ options: extension.options,
449
+ },
450
+ ))
451
+
452
+ return extension
285
453
  }
286
454
 
287
- #configure = (options: Partial<Options>) => {
288
- this.options = mergeDeep(this.config.defaultOptions, options) as Options
455
+ extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<MarkConfig<ExtendedOptions, ExtendedStorage>> = {}) {
456
+ const extension = new Mark<ExtendedOptions, ExtendedStorage>(extendedConfig)
289
457
 
290
- return this
291
- }
458
+ extension.parent = this
292
459
 
293
- extend<ExtendedOptions = Options>(extendedConfig: Partial<MarkConfig<ExtendedOptions>>) {
294
- return new Mark<ExtendedOptions>({
295
- ...this.config,
296
- ...extendedConfig,
297
- } as MarkConfig<ExtendedOptions>)
460
+ this.child = extension
461
+
462
+ extension.name = extendedConfig.name
463
+ ? extendedConfig.name
464
+ : extension.parent.name
465
+
466
+ if (extendedConfig.defaultOptions) {
467
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`)
468
+ }
469
+
470
+ extension.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
471
+ extension,
472
+ 'addOptions',
473
+ {
474
+ name: extension.name,
475
+ },
476
+ ))
477
+
478
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
479
+ extension,
480
+ 'addStorage',
481
+ {
482
+ name: extension.name,
483
+ options: extension.options,
484
+ },
485
+ ))
486
+
487
+ return extension
298
488
  }
299
489
  }