@tiptap/core 2.0.0-beta.20 → 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 (333) 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 +24 -19
  4. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  5. package/dist/packages/core/src/Extension.d.ts +99 -27
  6. package/dist/packages/core/src/ExtensionManager.d.ts +7 -13
  7. package/dist/packages/core/src/InputRule.d.ts +42 -0
  8. package/dist/packages/core/src/Mark.d.ts +139 -31
  9. package/dist/packages/core/src/Node.d.ts +157 -33
  10. package/dist/packages/core/src/NodeView.d.ts +8 -12
  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 +7 -3
  29. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  30. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  31. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  33. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +4 -4
  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 +4 -4
  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 -99
  66. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  67. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  69. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  70. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  71. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  73. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  75. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  76. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  77. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  78. package/dist/packages/core/src/helpers/findParentNode.d.ts +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 +1 -1
  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 +14 -21
  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 +112 -56
  132. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  133. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  135. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  139. package/dist/packages/core/src/utilities/index.d.ts +3 -0
  140. package/dist/packages/core/src/utilities/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 +2755 -1460
  153. package/dist/tiptap-core.cjs.js.map +1 -1
  154. package/dist/tiptap-core.esm.js +2709 -1448
  155. package/dist/tiptap-core.esm.js.map +1 -1
  156. package/dist/tiptap-core.umd.js +2731 -1435
  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 +116 -78
  161. package/src/EventEmitter.ts +14 -4
  162. package/src/Extension.ts +193 -43
  163. package/src/ExtensionManager.ts +242 -84
  164. package/src/InputRule.ts +265 -0
  165. package/src/Mark.ts +277 -48
  166. package/src/Node.ts +279 -57
  167. package/src/NodeView.ts +115 -47
  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 +30 -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 +13 -24
  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 +9 -8
  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 +9 -15
  203. package/src/commands/setMark.ts +80 -14
  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 +14 -19
  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 +7 -11
  217. package/src/commands/unsetMark.ts +35 -22
  218. package/src/commands/updateAttributes.ts +16 -9
  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 -147
  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 +5 -6
  231. package/src/helpers/createNodeFromContent.ts +17 -19
  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 -133
  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 +1 -1
  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 +15 -24
  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 +129 -43
  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 -357
  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/insertNode.d.ts +0 -13
  314. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  315. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  316. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  317. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  318. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  319. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  320. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  321. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  322. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  323. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  324. package/src/commands/insertHTML.ts +0 -30
  325. package/src/commands/insertNode.ts +0 -33
  326. package/src/commands/insertText.ts +0 -22
  327. package/src/commands/replace.ts +0 -20
  328. package/src/commands/replaceRange.ts +0 -36
  329. package/src/commands/resetNodeAttributes.ts +0 -33
  330. package/src/commands/updateNodeAttributes.ts +0 -35
  331. package/src/utilities/isClass.ts +0 -7
  332. package/src/utilities/isObject.ts +0 -10
  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,67 @@ 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']),
306
+
307
+ /**
308
+ * Marks this Mark as exitable
309
+ */
310
+ exitable?: boolean | (() => boolean),
213
311
 
214
312
  /**
215
313
  * Group
216
314
  */
217
- group?: MarkSpec['group'] | ((this: { options: Options }) => MarkSpec['group']),
315
+ group?: MarkSpec['group'] | ((this: {
316
+ name: string,
317
+ options: Options,
318
+ storage: Storage,
319
+ parent: ParentConfig<MarkConfig<Options, Storage>>['group'],
320
+ }) => MarkSpec['group']),
218
321
 
219
322
  /**
220
323
  * Spanning
221
324
  */
222
- spanning?: MarkSpec['spanning'] | ((this: { options: Options }) => MarkSpec['spanning']),
325
+ spanning?: MarkSpec['spanning'] | ((this: {
326
+ name: string,
327
+ options: Options,
328
+ storage: Storage,
329
+ parent: ParentConfig<MarkConfig<Options, Storage>>['spanning'],
330
+ }) => MarkSpec['spanning']),
331
+
332
+ /**
333
+ * Code
334
+ */
335
+ code?: boolean | ((this: {
336
+ name: string,
337
+ options: Options,
338
+ storage: Storage,
339
+ parent: ParentConfig<MarkConfig<Options, Storage>>['code'],
340
+ }) => boolean),
223
341
 
224
342
  /**
225
343
  * Parse HTML
226
344
  */
227
345
  parseHTML?: (
228
346
  this: {
347
+ name: string,
229
348
  options: Options,
349
+ storage: Storage,
350
+ parent: ParentConfig<MarkConfig<Options, Storage>>['parseHTML'],
230
351
  },
231
352
  ) => MarkSpec['parseDOM'],
232
353
 
@@ -235,12 +356,15 @@ declare module '@tiptap/core' {
235
356
  */
236
357
  renderHTML?: ((
237
358
  this: {
359
+ name: string,
238
360
  options: Options,
361
+ storage: Storage,
362
+ parent: ParentConfig<MarkConfig<Options, Storage>>['renderHTML'],
239
363
  },
240
364
  props: {
241
365
  mark: ProseMirrorMark,
242
- HTMLAttributes: { [key: string]: any },
243
- }
366
+ HTMLAttributes: Record<string, any>,
367
+ },
244
368
  ) => DOMOutputSpec) | null,
245
369
 
246
370
  /**
@@ -248,52 +372,157 @@ declare module '@tiptap/core' {
248
372
  */
249
373
  addAttributes?: (
250
374
  this: {
375
+ name: string,
251
376
  options: Options,
377
+ storage: Storage,
378
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addAttributes'],
252
379
  },
253
380
  ) => Attributes | {},
254
381
  }
255
382
  }
256
383
 
257
- export class Mark<Options = any> {
384
+ export class Mark<Options = any, Storage = any> {
258
385
  type = 'mark'
259
386
 
387
+ name = 'mark'
388
+
389
+ parent: Mark | null = null
390
+
391
+ child: Mark | null = null
392
+
393
+ options: Options
394
+
395
+ storage: Storage
396
+
260
397
  config: MarkConfig = {
261
- name: 'mark',
262
- priority: 100,
398
+ name: this.name,
263
399
  defaultOptions: {},
264
400
  }
265
401
 
266
- options!: Options
267
-
268
- constructor(config: MarkConfig<Options>) {
402
+ constructor(config: Partial<MarkConfig<Options, Storage>> = {}) {
269
403
  this.config = {
270
404
  ...this.config,
271
405
  ...config,
272
406
  }
273
407
 
408
+ this.name = this.config.name
409
+
410
+ if (config.defaultOptions) {
411
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`)
412
+ }
413
+
414
+ // TODO: remove `addOptions` fallback
274
415
  this.options = this.config.defaultOptions
416
+
417
+ if (this.config.addOptions) {
418
+ this.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
419
+ this,
420
+ 'addOptions',
421
+ {
422
+ name: this.name,
423
+ },
424
+ ))
425
+ }
426
+
427
+ this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
428
+ this,
429
+ 'addStorage',
430
+ {
431
+ name: this.name,
432
+ options: this.options,
433
+ },
434
+ )) || {}
275
435
  }
276
436
 
277
- static create<O>(config: MarkConfig<O>) {
278
- return new Mark<O>(config)
437
+ static create<O = any, S = any>(config: Partial<MarkConfig<O, S>> = {}) {
438
+ return new Mark<O, S>(config)
279
439
  }
280
440
 
281
441
  configure(options: Partial<Options> = {}) {
282
- return Mark
283
- .create<Options>(this.config as MarkConfig<Options>)
284
- .#configure(options)
442
+ // return a new instance so we can use the same extension
443
+ // with different calls of `configure`
444
+ const extension = this.extend()
445
+
446
+ extension.options = mergeDeep(this.options, options) as Options
447
+
448
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
449
+ extension,
450
+ 'addStorage',
451
+ {
452
+ name: extension.name,
453
+ options: extension.options,
454
+ },
455
+ ))
456
+
457
+ return extension
285
458
  }
286
459
 
287
- #configure = (options: Partial<Options>) => {
288
- this.options = mergeDeep(this.config.defaultOptions, options) as Options
460
+ extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<MarkConfig<ExtendedOptions, ExtendedStorage>> = {}) {
461
+ const extension = new Mark<ExtendedOptions, ExtendedStorage>(extendedConfig)
462
+
463
+ extension.parent = this
464
+
465
+ this.child = extension
466
+
467
+ extension.name = extendedConfig.name
468
+ ? extendedConfig.name
469
+ : extension.parent.name
470
+
471
+ if (extendedConfig.defaultOptions) {
472
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`)
473
+ }
474
+
475
+ extension.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
476
+ extension,
477
+ 'addOptions',
478
+ {
479
+ name: extension.name,
480
+ },
481
+ ))
482
+
483
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
484
+ extension,
485
+ 'addStorage',
486
+ {
487
+ name: extension.name,
488
+ options: extension.options,
489
+ },
490
+ ))
289
491
 
290
- return this
492
+ return extension
291
493
  }
292
494
 
293
- extend<ExtendedOptions = Options>(extendedConfig: Partial<MarkConfig<ExtendedOptions>>) {
294
- return new Mark<ExtendedOptions>({
295
- ...this.config,
296
- ...extendedConfig,
297
- } as MarkConfig<ExtendedOptions>)
495
+ static handleExit({
496
+ editor,
497
+ mark,
498
+ }: {
499
+ editor: Editor
500
+ mark: Mark
501
+ }) {
502
+ const { tr } = editor.state
503
+ const currentPos = editor.state.selection.$from
504
+ const isAtEnd = currentPos.pos === currentPos.end()
505
+
506
+ if (isAtEnd) {
507
+ const currentMarks = currentPos.marks()
508
+ const isInMark = !!currentMarks.find(m => m?.type.name === mark.name)
509
+
510
+ if (!isInMark) {
511
+ return false
512
+ }
513
+
514
+ const removeMark = currentMarks.find(m => m?.type.name === mark.name)
515
+
516
+ if (removeMark) {
517
+ tr.removeStoredMark(removeMark)
518
+ }
519
+ tr.insertText(' ', currentPos.pos)
520
+
521
+ editor.view.dispatch(tr)
522
+
523
+ return true
524
+ }
525
+
526
+ return false
298
527
  }
299
528
  }