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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/README.md +2 -2
  2. package/dist/packages/core/src/CommandManager.d.ts +13 -6
  3. package/dist/packages/core/src/Editor.d.ts +27 -25
  4. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  5. package/dist/packages/core/src/Extension.d.ts +103 -26
  6. package/dist/packages/core/src/ExtensionManager.d.ts +8 -12
  7. package/dist/packages/core/src/InputRule.d.ts +42 -0
  8. package/dist/packages/core/src/Mark.d.ts +148 -31
  9. package/dist/packages/core/src/Node.d.ts +162 -33
  10. package/dist/packages/core/src/NodeView.d.ts +27 -0
  11. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  12. package/dist/packages/core/src/Tracker.d.ts +11 -0
  13. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  14. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  15. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  16. package/dist/packages/core/src/commands/command.d.ts +2 -2
  17. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  18. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  19. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  20. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  21. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  22. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  23. package/dist/packages/core/src/commands/extendMarkRange.d.ts +3 -3
  24. package/dist/packages/core/src/commands/first.d.ts +3 -3
  25. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  26. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  27. package/dist/packages/core/src/commands/index.d.ts +50 -0
  28. package/dist/packages/core/src/commands/insertContent.d.ts +16 -0
  29. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  30. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  31. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  33. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
  38. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  39. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  40. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  41. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  42. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  43. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  44. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  45. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  46. package/dist/packages/core/src/commands/setMark.d.ts +3 -3
  47. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  48. package/dist/packages/core/src/commands/setNode.d.ts +3 -3
  49. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  50. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  51. package/dist/packages/core/src/commands/sinkListItem.d.ts +3 -3
  52. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  53. package/dist/packages/core/src/commands/splitListItem.d.ts +3 -3
  54. package/dist/packages/core/src/commands/toggleList.d.ts +3 -3
  55. package/dist/packages/core/src/commands/toggleMark.d.ts +8 -3
  56. package/dist/packages/core/src/commands/toggleNode.d.ts +3 -3
  57. package/dist/packages/core/src/commands/toggleWrap.d.ts +3 -3
  58. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  59. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  60. package/dist/packages/core/src/commands/unsetMark.d.ts +8 -3
  61. package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
  62. package/dist/packages/core/src/commands/wrapIn.d.ts +3 -3
  63. package/dist/packages/core/src/commands/wrapInList.d.ts +3 -3
  64. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  65. package/dist/packages/core/src/extensions/commands.d.ts +2 -91
  66. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  67. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  69. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  70. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  71. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  73. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -0
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +7 -0
  75. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  76. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  77. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  78. package/dist/packages/core/src/helpers/findParentNode.d.ts +2 -3
  79. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +2 -2
  80. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  81. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  82. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  83. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  84. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
  85. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  86. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  87. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  88. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  89. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +2 -3
  90. package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
  91. package/dist/packages/core/src/helpers/getMarkType.d.ts +1 -1
  92. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  93. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +2 -3
  94. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
  96. package/dist/packages/core/src/helpers/getSchema.d.ts +1 -1
  97. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  98. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +1 -1
  99. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +1 -1
  100. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  101. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  102. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  103. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
  104. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  105. package/dist/packages/core/src/helpers/index.d.ts +33 -0
  106. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  107. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  108. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  109. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  110. package/dist/packages/core/src/helpers/isMarkActive.d.ts +2 -3
  111. package/dist/packages/core/src/helpers/isNodeActive.d.ts +2 -3
  112. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -0
  113. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  114. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  115. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  116. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  117. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  118. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  119. package/dist/packages/core/src/index.d.ts +15 -20
  120. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  121. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  122. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  123. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  124. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  125. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  126. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  127. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  128. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  129. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  130. package/dist/packages/core/src/style.d.ts +1 -2
  131. package/dist/packages/core/src/types.d.ts +120 -53
  132. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  133. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  135. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  139. package/dist/packages/core/src/utilities/index.d.ts +3 -0
  140. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  142. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  145. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  146. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  147. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  148. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  149. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  150. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  151. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  152. package/dist/tiptap-core.cjs.js +2896 -1261
  153. package/dist/tiptap-core.cjs.js.map +1 -1
  154. package/dist/tiptap-core.esm.js +2889 -1290
  155. package/dist/tiptap-core.esm.js.map +1 -1
  156. package/dist/tiptap-core.umd.js +2899 -1263
  157. package/dist/tiptap-core.umd.js.map +1 -1
  158. package/package.json +16 -20
  159. package/src/CommandManager.ts +64 -65
  160. package/src/Editor.ts +133 -98
  161. package/src/EventEmitter.ts +14 -4
  162. package/src/Extension.ts +198 -41
  163. package/src/ExtensionManager.ts +263 -78
  164. package/src/InputRule.ts +265 -0
  165. package/src/Mark.ts +285 -49
  166. package/src/Node.ts +284 -56
  167. package/src/NodeView.ts +261 -0
  168. package/src/PasteRule.ts +280 -0
  169. package/src/Tracker.ts +42 -0
  170. package/src/commands/blur.ts +12 -6
  171. package/src/commands/clearContent.ts +3 -3
  172. package/src/commands/clearNodes.ts +32 -18
  173. package/src/commands/command.ts +2 -2
  174. package/src/commands/createParagraphNear.ts +4 -3
  175. package/src/commands/deleteNode.ts +37 -0
  176. package/src/commands/deleteRange.ts +3 -3
  177. package/src/commands/deleteSelection.ts +4 -3
  178. package/src/commands/enter.ts +3 -3
  179. package/src/commands/exitCode.ts +4 -3
  180. package/src/commands/extendMarkRange.ts +12 -11
  181. package/src/commands/first.ts +3 -3
  182. package/src/commands/focus.ts +47 -44
  183. package/src/commands/forEach.ts +24 -0
  184. package/src/commands/index.ts +50 -0
  185. package/src/commands/insertContent.ts +24 -0
  186. package/src/commands/insertContentAt.ts +108 -0
  187. package/src/commands/joinBackward.ts +4 -3
  188. package/src/commands/joinForward.ts +4 -3
  189. package/src/commands/keyboardShortcut.ts +6 -6
  190. package/src/commands/lift.ts +6 -5
  191. package/src/commands/liftEmptyBlock.ts +4 -3
  192. package/src/commands/liftListItem.ts +6 -5
  193. package/src/commands/newlineInCode.ts +4 -3
  194. package/src/commands/resetAttributes.ts +62 -0
  195. package/src/commands/scrollIntoView.ts +3 -3
  196. package/src/commands/selectAll.ts +8 -6
  197. package/src/commands/selectNodeBackward.ts +4 -3
  198. package/src/commands/selectNodeForward.ts +4 -3
  199. package/src/commands/selectParentNode.ts +4 -3
  200. package/src/commands/selectTextblockEnd.ts +20 -0
  201. package/src/commands/selectTextblockStart.ts +20 -0
  202. package/src/commands/setContent.ts +12 -9
  203. package/src/commands/setMark.ts +83 -15
  204. package/src/commands/setMeta.ts +18 -0
  205. package/src/commands/setNode.ts +29 -7
  206. package/src/commands/setNodeSelection.ts +27 -0
  207. package/src/commands/setTextSelection.ts +33 -0
  208. package/src/commands/sinkListItem.ts +6 -5
  209. package/src/commands/splitBlock.ts +20 -23
  210. package/src/commands/splitListItem.ts +45 -18
  211. package/src/commands/toggleList.ts +83 -18
  212. package/src/commands/toggleMark.ts +18 -7
  213. package/src/commands/toggleNode.ts +6 -5
  214. package/src/commands/toggleWrap.ts +9 -9
  215. package/src/commands/undoInputRule.ts +34 -5
  216. package/src/commands/unsetAllMarks.ts +8 -10
  217. package/src/commands/unsetMark.ts +31 -13
  218. package/src/commands/updateAttributes.ts +73 -0
  219. package/src/commands/wrapIn.ts +5 -10
  220. package/src/commands/wrapInList.ts +6 -5
  221. package/src/extensions/clipboardTextSerializer.ts +14 -35
  222. package/src/extensions/commands.ts +3 -135
  223. package/src/extensions/editable.ts +1 -0
  224. package/src/extensions/focusEvents.ts +3 -5
  225. package/src/extensions/index.ts +1 -0
  226. package/src/extensions/keymap.ts +110 -13
  227. package/src/extensions/tabindex.ts +18 -0
  228. package/src/helpers/combineTransactionSteps.ts +18 -0
  229. package/src/helpers/createChainableState.ts +38 -0
  230. package/src/helpers/createDocument.ts +12 -0
  231. package/src/helpers/createNodeFromContent.ts +57 -0
  232. package/src/helpers/defaultBlockAt.ts +13 -0
  233. package/src/helpers/findChildren.ts +18 -0
  234. package/src/helpers/findChildrenInRange.ts +32 -0
  235. package/src/helpers/findParentNode.ts +3 -2
  236. package/src/helpers/findParentNodeClosestToPos.ts +3 -2
  237. package/src/helpers/generateHTML.ts +6 -5
  238. package/src/helpers/generateJSON.ts +14 -0
  239. package/src/helpers/generateText.ts +30 -0
  240. package/src/helpers/getAttributes.ts +28 -0
  241. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  242. package/src/helpers/getChangedRanges.ts +83 -0
  243. package/src/helpers/getDebugJSON.ts +54 -0
  244. package/src/helpers/getExtensionField.ts +25 -0
  245. package/src/helpers/getHTMLFromFragment.ts +6 -5
  246. package/src/helpers/getMarkAttributes.ts +14 -10
  247. package/src/helpers/getMarkRange.ts +41 -8
  248. package/src/helpers/getMarkType.ts +5 -1
  249. package/src/helpers/getMarksBetween.ts +32 -10
  250. package/src/helpers/getNodeAttributes.ts +9 -9
  251. package/src/helpers/getNodeType.ts +5 -1
  252. package/src/helpers/getRenderedAttributes.ts +6 -7
  253. package/src/helpers/getSchema.ts +7 -137
  254. package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
  255. package/src/helpers/getSchemaTypeByName.ts +2 -10
  256. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  257. package/src/helpers/getSplittedAttributes.ts +4 -4
  258. package/src/helpers/getText.ts +19 -0
  259. package/src/helpers/getTextBetween.ts +49 -0
  260. package/src/helpers/getTextContentFromNodes.ts +21 -0
  261. package/src/helpers/getTextSerializersFromSchema.ts +10 -0
  262. package/src/helpers/index.ts +33 -0
  263. package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
  264. package/src/helpers/isActive.ts +5 -5
  265. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  266. package/src/helpers/isList.ts +14 -7
  267. package/src/helpers/isMarkActive.ts +45 -20
  268. package/src/helpers/isNodeActive.ts +28 -35
  269. package/src/helpers/isNodeEmpty.ts +8 -0
  270. package/src/helpers/isNodeSelection.ts +2 -3
  271. package/src/helpers/isTextSelection.ts +2 -3
  272. package/src/helpers/posToDOMRect.ts +35 -0
  273. package/src/helpers/resolveFocusPosition.ts +43 -0
  274. package/src/helpers/selectionToInsertionEnd.ts +2 -2
  275. package/src/helpers/splitExtensions.ts +3 -3
  276. package/src/index.ts +16 -22
  277. package/src/inputRules/index.ts +5 -0
  278. package/src/inputRules/markInputRule.ts +59 -39
  279. package/src/inputRules/nodeInputRule.ts +45 -11
  280. package/src/inputRules/textInputRule.ts +35 -0
  281. package/src/inputRules/textblockTypeInputRule.ts +38 -0
  282. package/src/inputRules/wrappingInputRule.ts +60 -0
  283. package/src/pasteRules/index.ts +3 -0
  284. package/src/pasteRules/markPasteRule.ts +62 -53
  285. package/src/pasteRules/nodePasteRule.ts +39 -0
  286. package/src/pasteRules/textPasteRule.ts +35 -0
  287. package/src/style.ts +16 -3
  288. package/src/types.ts +132 -47
  289. package/src/utilities/callOrReturn.ts +6 -3
  290. package/src/utilities/createStyleTag.ts +12 -1
  291. package/src/utilities/deleteProps.ts +2 -4
  292. package/src/utilities/elementFromString.ts +4 -5
  293. package/src/utilities/escapeForRegEx.ts +4 -0
  294. package/src/utilities/findDuplicates.ts +5 -0
  295. package/src/utilities/fromString.ts +2 -2
  296. package/src/utilities/index.ts +3 -0
  297. package/src/utilities/isEmptyObject.ts +2 -2
  298. package/src/utilities/isFunction.ts +3 -0
  299. package/src/utilities/isMacOS.ts +5 -0
  300. package/src/utilities/isNumber.ts +3 -0
  301. package/src/utilities/isPlainObject.ts +8 -5
  302. package/src/utilities/isRegExp.ts +3 -0
  303. package/src/utilities/isString.ts +3 -0
  304. package/src/utilities/isiOS.ts +12 -0
  305. package/src/utilities/mergeAttributes.ts +2 -3
  306. package/src/utilities/mergeDeep.ts +2 -3
  307. package/src/utilities/minMax.ts +1 -1
  308. package/src/utilities/objectIncludes.ts +17 -5
  309. package/src/utilities/removeDuplicates.ts +15 -0
  310. package/CHANGELOG.md +0 -198
  311. package/LICENSE.md +0 -21
  312. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  313. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  314. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  315. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  316. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  317. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  318. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  319. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  320. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  321. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  322. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  323. package/src/commands/insertHTML.ts +0 -28
  324. package/src/commands/insertText.ts +0 -20
  325. package/src/commands/replace.ts +0 -20
  326. package/src/commands/replaceRange.ts +0 -36
  327. package/src/commands/resetNodeAttributes.ts +0 -29
  328. package/src/commands/updateNodeAttributes.ts +0 -31
  329. package/src/utilities/isClass.ts +0 -7
  330. package/src/utilities/isObject.ts +0 -10
  331. package/src/utilities/removeElement.ts +0 -5
package/src/Mark.ts CHANGED
@@ -1,23 +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'
8
+
9
+ import { MarkConfig } from '.'
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'
11
15
  import {
16
+ AnyConfig,
12
17
  Attributes,
13
- RawCommands,
18
+ Extensions,
14
19
  GlobalAttributes,
15
- MarkConfig,
20
+ KeyboardShortcutCommand,
21
+ ParentConfig,
22
+ RawCommands,
16
23
  } from './types'
17
- import { Editor } from './Editor'
24
+ import { callOrReturn } from './utilities/callOrReturn'
25
+ import { mergeDeep } from './utilities/mergeDeep'
18
26
 
19
27
  declare module '@tiptap/core' {
20
- export interface MarkConfig<Options = any> {
28
+ export interface MarkConfig<Options = any, Storage = any> {
21
29
  [key: string]: any;
22
30
 
23
31
  /**
@@ -25,123 +33,187 @@ declare module '@tiptap/core' {
25
33
  */
26
34
  name: string,
27
35
 
36
+ /**
37
+ * Priority
38
+ */
39
+ priority?: number,
40
+
28
41
  /**
29
42
  * Default options
30
43
  */
31
44
  defaultOptions?: Options,
32
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
+
33
63
  /**
34
64
  * Global attributes
35
65
  */
36
66
  addGlobalAttributes?: (this: {
67
+ name: string,
37
68
  options: Options,
69
+ storage: Storage,
70
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addGlobalAttributes'],
38
71
  }) => GlobalAttributes | {},
39
72
 
40
73
  /**
41
74
  * Raw
42
75
  */
43
76
  addCommands?: (this: {
77
+ name: string,
44
78
  options: Options,
79
+ storage: Storage,
45
80
  editor: Editor,
46
81
  type: MarkType,
82
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addCommands'],
47
83
  }) => Partial<RawCommands>,
48
84
 
49
85
  /**
50
86
  * Keyboard shortcuts
51
87
  */
52
88
  addKeyboardShortcuts?: (this: {
89
+ name: string,
53
90
  options: Options,
91
+ storage: Storage,
54
92
  editor: Editor,
55
93
  type: MarkType,
94
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addKeyboardShortcuts'],
56
95
  }) => {
57
- [key: string]: ProseMirrorCommand,
96
+ [key: string]: KeyboardShortcutCommand,
58
97
  },
59
98
 
60
99
  /**
61
100
  * Input rules
62
101
  */
63
102
  addInputRules?: (this: {
103
+ name: string,
64
104
  options: Options,
105
+ storage: Storage,
65
106
  editor: Editor,
66
107
  type: MarkType,
108
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addInputRules'],
67
109
  }) => InputRule[],
68
110
 
69
111
  /**
70
112
  * Paste rules
71
113
  */
72
114
  addPasteRules?: (this: {
115
+ name: string,
73
116
  options: Options,
117
+ storage: Storage,
74
118
  editor: Editor,
75
119
  type: MarkType,
76
- }) => Plugin[],
120
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addPasteRules'],
121
+ }) => PasteRule[],
77
122
 
78
123
  /**
79
124
  * ProseMirror plugins
80
125
  */
81
126
  addProseMirrorPlugins?: (this: {
127
+ name: string,
82
128
  options: Options,
129
+ storage: Storage,
83
130
  editor: Editor,
84
131
  type: MarkType,
132
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addProseMirrorPlugins'],
85
133
  }) => Plugin[],
86
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
+
87
145
  /**
88
146
  * Extend Node Schema
89
147
  */
90
148
  extendNodeSchema?: ((
91
149
  this: {
150
+ name: string,
92
151
  options: Options,
152
+ storage: Storage,
153
+ parent: ParentConfig<MarkConfig<Options, Storage>>['extendNodeSchema'],
93
154
  },
94
155
  extension: Node,
95
- ) => {
96
- [key: string]: any,
97
- }) | null,
156
+ ) => Record<string, any>) | null,
98
157
 
99
158
  /**
100
159
  * Extend Mark Schema
101
160
  */
102
161
  extendMarkSchema?: ((
103
162
  this: {
163
+ name: string,
104
164
  options: Options,
165
+ storage: Storage,
166
+ parent: ParentConfig<MarkConfig<Options, Storage>>['extendMarkSchema'],
105
167
  },
106
- extension: Node,
107
- ) => {
108
- [key: string]: any,
109
- }) | null,
168
+ extension: Mark,
169
+ ) => Record<string, any>) | null,
110
170
 
111
171
  /**
112
- * The editor is ready.
172
+ * The editor is not ready yet.
113
173
  */
114
- onCreate?: ((this: {
174
+ onBeforeCreate?: ((this: {
175
+ name: string,
115
176
  options: Options,
177
+ storage: Storage,
116
178
  editor: Editor,
117
179
  type: MarkType,
180
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onBeforeCreate'],
118
181
  }) => void) | null,
119
182
 
120
183
  /**
121
- * The content has changed.
184
+ * The editor is ready.
122
185
  */
123
- onUpdate?: ((this: {
186
+ onCreate?: ((this: {
187
+ name: string,
124
188
  options: Options,
189
+ storage: Storage,
125
190
  editor: Editor,
126
191
  type: MarkType,
192
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onCreate'],
127
193
  }) => void) | null,
128
194
 
129
195
  /**
130
- * The selection has changed.
196
+ * The content has changed.
131
197
  */
132
- onSelectionUpdate?: ((this: {
198
+ onUpdate?: ((this: {
199
+ name: string,
133
200
  options: Options,
201
+ storage: Storage,
134
202
  editor: Editor,
135
203
  type: MarkType,
204
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onUpdate'],
136
205
  }) => void) | null,
137
206
 
138
207
  /**
139
- * The view has changed.
208
+ * The selection has changed.
140
209
  */
141
- onViewUpdate?: ((this: {
210
+ onSelectionUpdate?: ((this: {
211
+ name: string,
142
212
  options: Options,
213
+ storage: Storage,
143
214
  editor: Editor,
144
215
  type: MarkType,
216
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onSelectionUpdate'],
145
217
  }) => void) | null,
146
218
 
147
219
  /**
@@ -149,9 +221,12 @@ declare module '@tiptap/core' {
149
221
  */
150
222
  onTransaction?: ((
151
223
  this: {
224
+ name: string,
152
225
  options: Options,
226
+ storage: Storage,
153
227
  editor: Editor,
154
228
  type: MarkType,
229
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onTransaction'],
155
230
  },
156
231
  props: {
157
232
  transaction: Transaction,
@@ -163,9 +238,12 @@ declare module '@tiptap/core' {
163
238
  */
164
239
  onFocus?: ((
165
240
  this: {
241
+ name: string,
166
242
  options: Options,
243
+ storage: Storage,
167
244
  editor: Editor,
168
245
  type: MarkType,
246
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onFocus'],
169
247
  },
170
248
  props: {
171
249
  event: FocusEvent,
@@ -177,9 +255,12 @@ declare module '@tiptap/core' {
177
255
  */
178
256
  onBlur?: ((
179
257
  this: {
258
+ name: string,
180
259
  options: Options,
260
+ storage: Storage,
181
261
  editor: Editor,
182
262
  type: MarkType,
263
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onBlur'],
183
264
  },
184
265
  props: {
185
266
  event: FocusEvent,
@@ -190,37 +271,83 @@ declare module '@tiptap/core' {
190
271
  * The editor is destroyed.
191
272
  */
192
273
  onDestroy?: ((this: {
274
+ name: string,
193
275
  options: Options,
276
+ storage: Storage,
194
277
  editor: Editor,
195
278
  type: MarkType,
279
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onDestroy'],
196
280
  }) => void) | null,
197
281
 
282
+ /**
283
+ * Keep mark after split node
284
+ */
285
+ keepOnSplit?: boolean | (() => boolean),
286
+
198
287
  /**
199
288
  * Inclusive
200
289
  */
201
- 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']),
202
296
 
203
297
  /**
204
298
  * Excludes
205
299
  */
206
- 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),
207
311
 
208
312
  /**
209
313
  * Group
210
314
  */
211
- 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']),
212
321
 
213
322
  /**
214
323
  * Spanning
215
324
  */
216
- 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),
217
341
 
218
342
  /**
219
343
  * Parse HTML
220
344
  */
221
345
  parseHTML?: (
222
346
  this: {
347
+ name: string,
223
348
  options: Options,
349
+ storage: Storage,
350
+ parent: ParentConfig<MarkConfig<Options, Storage>>['parseHTML'],
224
351
  },
225
352
  ) => MarkSpec['parseDOM'],
226
353
 
@@ -229,12 +356,15 @@ declare module '@tiptap/core' {
229
356
  */
230
357
  renderHTML?: ((
231
358
  this: {
359
+ name: string,
232
360
  options: Options,
361
+ storage: Storage,
362
+ parent: ParentConfig<MarkConfig<Options, Storage>>['renderHTML'],
233
363
  },
234
364
  props: {
235
365
  mark: ProseMirrorMark,
236
- HTMLAttributes: { [key: string]: any },
237
- }
366
+ HTMLAttributes: Record<string, any>,
367
+ },
238
368
  ) => DOMOutputSpec) | null,
239
369
 
240
370
  /**
@@ -242,51 +372,157 @@ declare module '@tiptap/core' {
242
372
  */
243
373
  addAttributes?: (
244
374
  this: {
375
+ name: string,
245
376
  options: Options,
377
+ storage: Storage,
378
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addAttributes'],
246
379
  },
247
380
  ) => Attributes | {},
248
381
  }
249
382
  }
250
383
 
251
- export class Mark<Options = any> {
384
+ export class Mark<Options = any, Storage = any> {
252
385
  type = 'mark'
253
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
+
254
397
  config: MarkConfig = {
255
- name: 'mark',
398
+ name: this.name,
256
399
  defaultOptions: {},
257
400
  }
258
401
 
259
- options!: Options
260
-
261
- constructor(config: MarkConfig<Options>) {
402
+ constructor(config: Partial<MarkConfig<Options, Storage>> = {}) {
262
403
  this.config = {
263
404
  ...this.config,
264
405
  ...config,
265
406
  }
266
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
267
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
+ )) || {}
268
435
  }
269
436
 
270
- static create<O>(config: MarkConfig<O>) {
271
- return new Mark<O>(config)
437
+ static create<O = any, S = any>(config: Partial<MarkConfig<O, S>> = {}) {
438
+ return new Mark<O, S>(config)
272
439
  }
273
440
 
274
441
  configure(options: Partial<Options> = {}) {
275
- return Mark
276
- .create<Options>(this.config as MarkConfig<Options>)
277
- .#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
278
458
  }
279
459
 
280
- #configure = (options: Partial<Options>) => {
281
- 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
+ ))
282
491
 
283
- return this
492
+ return extension
284
493
  }
285
494
 
286
- extend<ExtendedOptions = Options>(extendedConfig: Partial<MarkConfig<ExtendedOptions>>) {
287
- return new Mark<ExtendedOptions>({
288
- ...this.config,
289
- ...extendedConfig,
290
- } 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
291
527
  }
292
528
  }