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

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