@tiptap/core 3.0.0 → 3.0.2

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 (340) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +5 -1
  3. package/dist/index.cjs +5169 -4654
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +3356 -0
  6. package/dist/index.d.ts +3356 -0
  7. package/dist/index.js +5051 -4561
  8. package/dist/index.js.map +1 -1
  9. package/dist/jsx-runtime/jsx-runtime.cjs +56 -0
  10. package/dist/jsx-runtime/jsx-runtime.cjs.map +1 -0
  11. package/dist/jsx-runtime/jsx-runtime.d.cts +22 -0
  12. package/dist/jsx-runtime/jsx-runtime.d.ts +22 -0
  13. package/dist/jsx-runtime/jsx-runtime.js +26 -0
  14. package/dist/jsx-runtime/jsx-runtime.js.map +1 -0
  15. package/jsx-dev-runtime/index.cjs +1 -0
  16. package/jsx-dev-runtime/index.d.cts +1 -0
  17. package/jsx-dev-runtime/index.d.ts +1 -0
  18. package/jsx-dev-runtime/index.js +1 -0
  19. package/jsx-runtime/index.cjs +1 -0
  20. package/jsx-runtime/index.d.cts +1 -0
  21. package/jsx-runtime/index.d.ts +1 -0
  22. package/jsx-runtime/index.js +1 -0
  23. package/package.json +30 -10
  24. package/src/CommandManager.ts +4 -11
  25. package/src/Editor.ts +273 -100
  26. package/src/EventEmitter.ts +16 -10
  27. package/src/Extendable.ts +484 -0
  28. package/src/Extension.ts +29 -493
  29. package/src/ExtensionManager.ts +100 -143
  30. package/src/InputRule.ts +28 -24
  31. package/src/Mark.ts +157 -624
  32. package/src/MarkView.ts +122 -0
  33. package/src/Node.ts +343 -807
  34. package/src/NodePos.ts +18 -9
  35. package/src/NodeView.ts +58 -35
  36. package/src/PasteRule.ts +68 -24
  37. package/src/Tracker.ts +8 -10
  38. package/src/commands/blur.ts +15 -13
  39. package/src/commands/clearContent.ts +13 -6
  40. package/src/commands/clearNodes.ts +33 -31
  41. package/src/commands/command.ts +2 -2
  42. package/src/commands/createParagraphNear.ts +6 -4
  43. package/src/commands/cut.ts +13 -11
  44. package/src/commands/deleteCurrentNode.ts +24 -22
  45. package/src/commands/deleteNode.ts +20 -18
  46. package/src/commands/deleteRange.ts +11 -9
  47. package/src/commands/deleteSelection.ts +6 -4
  48. package/src/commands/enter.ts +7 -5
  49. package/src/commands/exitCode.ts +6 -4
  50. package/src/commands/extendMarkRange.ts +16 -14
  51. package/src/commands/first.ts +3 -5
  52. package/src/commands/focus.ts +51 -53
  53. package/src/commands/forEach.ts +3 -3
  54. package/src/commands/insertContent.ts +8 -10
  55. package/src/commands/insertContentAt.ts +131 -76
  56. package/src/commands/join.ts +21 -13
  57. package/src/commands/joinItemBackward.ts +17 -19
  58. package/src/commands/joinItemForward.ts +17 -19
  59. package/src/commands/joinTextblockBackward.ts +6 -4
  60. package/src/commands/joinTextblockForward.ts +6 -4
  61. package/src/commands/keyboardShortcut.ts +30 -35
  62. package/src/commands/lift.ts +12 -10
  63. package/src/commands/liftEmptyBlock.ts +7 -5
  64. package/src/commands/liftListItem.ts +8 -6
  65. package/src/commands/newlineInCode.ts +6 -4
  66. package/src/commands/resetAttributes.ts +38 -43
  67. package/src/commands/scrollIntoView.ts +10 -8
  68. package/src/commands/selectAll.ts +15 -8
  69. package/src/commands/selectNodeBackward.ts +6 -4
  70. package/src/commands/selectNodeForward.ts +6 -4
  71. package/src/commands/selectParentNode.ts +6 -4
  72. package/src/commands/selectTextblockEnd.ts +6 -4
  73. package/src/commands/selectTextblockStart.ts +6 -4
  74. package/src/commands/setContent.ts +37 -40
  75. package/src/commands/setMark.ts +58 -60
  76. package/src/commands/setMeta.ts +10 -6
  77. package/src/commands/setNode.ts +36 -27
  78. package/src/commands/setNodeSelection.ts +12 -10
  79. package/src/commands/setTextSelection.ts +16 -14
  80. package/src/commands/sinkListItem.ts +8 -6
  81. package/src/commands/splitBlock.ts +60 -68
  82. package/src/commands/splitListItem.ts +99 -101
  83. package/src/commands/toggleList.ts +76 -74
  84. package/src/commands/toggleMark.ts +13 -11
  85. package/src/commands/toggleNode.ts +22 -11
  86. package/src/commands/toggleWrap.ts +12 -10
  87. package/src/commands/undoInputRule.ts +32 -30
  88. package/src/commands/unsetAllMarks.ts +17 -15
  89. package/src/commands/unsetMark.ts +29 -27
  90. package/src/commands/updateAttributes.ts +97 -45
  91. package/src/commands/wrapIn.ts +8 -6
  92. package/src/commands/wrapInList.ts +8 -6
  93. package/src/extensions/clipboardTextSerializer.ts +2 -4
  94. package/src/extensions/delete.ts +89 -0
  95. package/src/extensions/drop.ts +26 -0
  96. package/src/extensions/focusEvents.ts +5 -7
  97. package/src/extensions/index.ts +4 -1
  98. package/src/extensions/keymap.ts +63 -52
  99. package/src/extensions/paste.ts +25 -0
  100. package/src/extensions/tabindex.ts +1 -1
  101. package/src/helpers/combineTransactionSteps.ts +3 -6
  102. package/src/helpers/createChainableState.ts +2 -5
  103. package/src/helpers/createDocument.ts +3 -3
  104. package/src/helpers/createNodeFromContent.ts +37 -25
  105. package/src/helpers/defaultBlockAt.ts +1 -1
  106. package/src/helpers/findChildren.ts +2 -2
  107. package/src/helpers/findChildrenInRange.ts +3 -7
  108. package/src/helpers/findParentNode.ts +5 -3
  109. package/src/helpers/findParentNodeClosestToPos.ts +2 -2
  110. package/src/helpers/flattenExtensions.ts +30 -0
  111. package/src/helpers/generateHTML.ts +1 -1
  112. package/src/helpers/generateJSON.ts +1 -1
  113. package/src/helpers/generateText.ts +1 -1
  114. package/src/helpers/getAttributes.ts +3 -6
  115. package/src/helpers/getAttributesFromExtensions.ts +29 -38
  116. package/src/helpers/getChangedRanges.ts +15 -13
  117. package/src/helpers/getDebugJSON.ts +2 -2
  118. package/src/helpers/getExtensionField.ts +12 -12
  119. package/src/helpers/getHTMLFromFragment.ts +2 -1
  120. package/src/helpers/getMarkAttributes.ts +3 -6
  121. package/src/helpers/getMarkRange.ts +36 -19
  122. package/src/helpers/getMarkType.ts +2 -4
  123. package/src/helpers/getMarksBetween.ts +3 -3
  124. package/src/helpers/getNodeAtPosition.ts +2 -2
  125. package/src/helpers/getNodeAttributes.ts +3 -6
  126. package/src/helpers/getNodeType.ts +2 -4
  127. package/src/helpers/getRenderedAttributes.ts +3 -2
  128. package/src/helpers/getSchema.ts +5 -5
  129. package/src/helpers/getSchemaByResolvedExtensions.ts +49 -79
  130. package/src/helpers/getSchemaTypeByName.ts +1 -1
  131. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  132. package/src/helpers/getSplittedAttributes.ts +5 -5
  133. package/src/helpers/getText.ts +2 -2
  134. package/src/helpers/getTextBetween.ts +2 -2
  135. package/src/helpers/getTextContentFromNodes.ts +9 -12
  136. package/src/helpers/getTextSerializersFromSchema.ts +2 -2
  137. package/src/helpers/index.ts +4 -0
  138. package/src/helpers/injectExtensionAttributesToParseRule.ts +3 -3
  139. package/src/helpers/isActive.ts +2 -6
  140. package/src/helpers/isAtEndOfNode.ts +1 -1
  141. package/src/helpers/isAtStartOfNode.ts +1 -1
  142. package/src/helpers/isExtensionRulesEnabled.ts +2 -4
  143. package/src/helpers/isList.ts +2 -2
  144. package/src/helpers/isMarkActive.ts +3 -3
  145. package/src/helpers/isNodeActive.ts +3 -3
  146. package/src/helpers/isNodeEmpty.ts +56 -5
  147. package/src/helpers/posToDOMRect.ts +1 -1
  148. package/src/helpers/resolveExtensions.ts +25 -0
  149. package/src/helpers/resolveFocusPosition.ts +5 -16
  150. package/src/helpers/rewriteUnknownContent.ts +149 -0
  151. package/src/helpers/selectionToInsertionEnd.ts +2 -1
  152. package/src/helpers/sortExtensions.ts +26 -0
  153. package/src/helpers/splitExtensions.ts +4 -4
  154. package/src/index.ts +3 -7
  155. package/src/inputRules/markInputRule.ts +6 -9
  156. package/src/inputRules/nodeInputRule.ts +7 -13
  157. package/src/inputRules/textInputRule.ts +4 -6
  158. package/src/inputRules/textblockTypeInputRule.ts +7 -12
  159. package/src/inputRules/wrappingInputRule.ts +19 -24
  160. package/src/jsx-runtime.ts +64 -0
  161. package/src/pasteRules/markPasteRule.ts +6 -7
  162. package/src/pasteRules/nodePasteRule.ts +15 -11
  163. package/src/pasteRules/textPasteRule.ts +4 -6
  164. package/src/style.ts +2 -6
  165. package/src/types.ts +513 -58
  166. package/src/utilities/callOrReturn.ts +1 -1
  167. package/src/utilities/canInsertNode.ts +30 -0
  168. package/src/utilities/createStyleTag.ts +3 -1
  169. package/src/utilities/deleteProps.ts +7 -11
  170. package/src/utilities/elementFromString.ts +3 -0
  171. package/src/utilities/findDuplicates.ts +5 -2
  172. package/src/utilities/index.ts +2 -0
  173. package/src/utilities/isFunction.ts +1 -0
  174. package/src/utilities/isMacOS.ts +1 -3
  175. package/src/utilities/isiOS.ts +5 -10
  176. package/src/utilities/mergeAttributes.ts +32 -5
  177. package/src/utilities/removeDuplicates.ts +1 -3
  178. package/dist/index.umd.js +0 -5098
  179. package/dist/index.umd.js.map +0 -1
  180. package/dist/packages/core/src/CommandManager.d.ts +0 -20
  181. package/dist/packages/core/src/Editor.d.ts +0 -161
  182. package/dist/packages/core/src/EventEmitter.d.ts +0 -11
  183. package/dist/packages/core/src/Extension.d.ts +0 -343
  184. package/dist/packages/core/src/ExtensionManager.d.ts +0 -55
  185. package/dist/packages/core/src/InputRule.d.ts +0 -42
  186. package/dist/packages/core/src/Mark.d.ts +0 -451
  187. package/dist/packages/core/src/Node.d.ts +0 -611
  188. package/dist/packages/core/src/NodePos.d.ts +0 -44
  189. package/dist/packages/core/src/NodeView.d.ts +0 -31
  190. package/dist/packages/core/src/PasteRule.d.ts +0 -50
  191. package/dist/packages/core/src/Tracker.d.ts +0 -11
  192. package/dist/packages/core/src/commands/blur.d.ts +0 -13
  193. package/dist/packages/core/src/commands/clearContent.d.ts +0 -14
  194. package/dist/packages/core/src/commands/clearNodes.d.ts +0 -13
  195. package/dist/packages/core/src/commands/command.d.ts +0 -18
  196. package/dist/packages/core/src/commands/createParagraphNear.d.ts +0 -13
  197. package/dist/packages/core/src/commands/cut.d.ts +0 -20
  198. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +0 -13
  199. package/dist/packages/core/src/commands/deleteNode.d.ts +0 -15
  200. package/dist/packages/core/src/commands/deleteRange.d.ts +0 -14
  201. package/dist/packages/core/src/commands/deleteSelection.d.ts +0 -13
  202. package/dist/packages/core/src/commands/enter.d.ts +0 -13
  203. package/dist/packages/core/src/commands/exitCode.d.ts +0 -13
  204. package/dist/packages/core/src/commands/extendMarkRange.d.ts +0 -25
  205. package/dist/packages/core/src/commands/first.d.ts +0 -14
  206. package/dist/packages/core/src/commands/focus.d.ts +0 -27
  207. package/dist/packages/core/src/commands/forEach.d.ts +0 -14
  208. package/dist/packages/core/src/commands/index.d.ts +0 -55
  209. package/dist/packages/core/src/commands/insertContent.d.ts +0 -34
  210. package/dist/packages/core/src/commands/insertContentAt.d.ts +0 -47
  211. package/dist/packages/core/src/commands/join.d.ts +0 -41
  212. package/dist/packages/core/src/commands/joinItemBackward.d.ts +0 -13
  213. package/dist/packages/core/src/commands/joinItemForward.d.ts +0 -13
  214. package/dist/packages/core/src/commands/joinTextblockBackward.d.ts +0 -12
  215. package/dist/packages/core/src/commands/joinTextblockForward.d.ts +0 -12
  216. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +0 -14
  217. package/dist/packages/core/src/commands/lift.d.ts +0 -17
  218. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +0 -13
  219. package/dist/packages/core/src/commands/liftListItem.d.ts +0 -15
  220. package/dist/packages/core/src/commands/newlineInCode.d.ts +0 -13
  221. package/dist/packages/core/src/commands/resetAttributes.d.ts +0 -16
  222. package/dist/packages/core/src/commands/scrollIntoView.d.ts +0 -13
  223. package/dist/packages/core/src/commands/selectAll.d.ts +0 -13
  224. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +0 -13
  225. package/dist/packages/core/src/commands/selectNodeForward.d.ts +0 -13
  226. package/dist/packages/core/src/commands/selectParentNode.d.ts +0 -13
  227. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +0 -13
  228. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +0 -13
  229. package/dist/packages/core/src/commands/setContent.d.ts +0 -40
  230. package/dist/packages/core/src/commands/setMark.d.ts +0 -15
  231. package/dist/packages/core/src/commands/setMeta.d.ts +0 -15
  232. package/dist/packages/core/src/commands/setNode.d.ts +0 -16
  233. package/dist/packages/core/src/commands/setNodeSelection.d.ts +0 -14
  234. package/dist/packages/core/src/commands/setTextSelection.d.ts +0 -14
  235. package/dist/packages/core/src/commands/sinkListItem.d.ts +0 -15
  236. package/dist/packages/core/src/commands/splitBlock.d.ts +0 -17
  237. package/dist/packages/core/src/commands/splitListItem.d.ts +0 -15
  238. package/dist/packages/core/src/commands/toggleList.d.ts +0 -18
  239. package/dist/packages/core/src/commands/toggleMark.d.ts +0 -30
  240. package/dist/packages/core/src/commands/toggleNode.d.ts +0 -17
  241. package/dist/packages/core/src/commands/toggleWrap.d.ts +0 -16
  242. package/dist/packages/core/src/commands/undoInputRule.d.ts +0 -13
  243. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +0 -13
  244. package/dist/packages/core/src/commands/unsetMark.d.ts +0 -25
  245. package/dist/packages/core/src/commands/updateAttributes.d.ts +0 -24
  246. package/dist/packages/core/src/commands/wrapIn.d.ts +0 -16
  247. package/dist/packages/core/src/commands/wrapInList.d.ts +0 -16
  248. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +0 -5
  249. package/dist/packages/core/src/extensions/commands.d.ts +0 -3
  250. package/dist/packages/core/src/extensions/editable.d.ts +0 -2
  251. package/dist/packages/core/src/extensions/focusEvents.d.ts +0 -2
  252. package/dist/packages/core/src/extensions/index.d.ts +0 -6
  253. package/dist/packages/core/src/extensions/keymap.d.ts +0 -2
  254. package/dist/packages/core/src/extensions/tabindex.d.ts +0 -2
  255. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +0 -10
  256. package/dist/packages/core/src/helpers/createChainableState.d.ts +0 -10
  257. package/dist/packages/core/src/helpers/createDocument.d.ts +0 -12
  258. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +0 -15
  259. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +0 -7
  260. package/dist/packages/core/src/helpers/findChildren.d.ts +0 -9
  261. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +0 -10
  262. package/dist/packages/core/src/helpers/findParentNode.d.ts +0 -16
  263. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +0 -17
  264. package/dist/packages/core/src/helpers/generateHTML.d.ts +0 -8
  265. package/dist/packages/core/src/helpers/generateJSON.d.ts +0 -8
  266. package/dist/packages/core/src/helpers/generateText.d.ts +0 -12
  267. package/dist/packages/core/src/helpers/getAttributes.d.ts +0 -9
  268. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +0 -6
  269. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +0 -11
  270. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +0 -8
  271. package/dist/packages/core/src/helpers/getExtensionField.d.ts +0 -9
  272. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +0 -2
  273. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +0 -3
  274. package/dist/packages/core/src/helpers/getMarkRange.d.ts +0 -3
  275. package/dist/packages/core/src/helpers/getMarkType.d.ts +0 -2
  276. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +0 -3
  277. package/dist/packages/core/src/helpers/getNodeAtPosition.d.ts +0 -11
  278. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +0 -3
  279. package/dist/packages/core/src/helpers/getNodeType.d.ts +0 -2
  280. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +0 -3
  281. package/dist/packages/core/src/helpers/getSchema.d.ts +0 -4
  282. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +0 -10
  283. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +0 -8
  284. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +0 -8
  285. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +0 -9
  286. package/dist/packages/core/src/helpers/getText.d.ts +0 -15
  287. package/dist/packages/core/src/helpers/getTextBetween.d.ts +0 -14
  288. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +0 -8
  289. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +0 -8
  290. package/dist/packages/core/src/helpers/index.d.ts +0 -50
  291. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +0 -9
  292. package/dist/packages/core/src/helpers/isActive.d.ts +0 -2
  293. package/dist/packages/core/src/helpers/isAtEndOfNode.d.ts +0 -2
  294. package/dist/packages/core/src/helpers/isAtStartOfNode.d.ts +0 -2
  295. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +0 -2
  296. package/dist/packages/core/src/helpers/isList.d.ts +0 -2
  297. package/dist/packages/core/src/helpers/isMarkActive.d.ts +0 -3
  298. package/dist/packages/core/src/helpers/isNodeActive.d.ts +0 -3
  299. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +0 -2
  300. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +0 -2
  301. package/dist/packages/core/src/helpers/isTextSelection.d.ts +0 -2
  302. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +0 -2
  303. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +0 -4
  304. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +0 -2
  305. package/dist/packages/core/src/helpers/splitExtensions.d.ts +0 -9
  306. package/dist/packages/core/src/index.d.ts +0 -24
  307. package/dist/packages/core/src/inputRules/index.d.ts +0 -5
  308. package/dist/packages/core/src/inputRules/markInputRule.d.ts +0 -13
  309. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +0 -23
  310. package/dist/packages/core/src/inputRules/textInputRule.d.ts +0 -10
  311. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +0 -15
  312. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +0 -28
  313. package/dist/packages/core/src/pasteRules/index.d.ts +0 -3
  314. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +0 -13
  315. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +0 -13
  316. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +0 -10
  317. package/dist/packages/core/src/style.d.ts +0 -1
  318. package/dist/packages/core/src/types.d.ts +0 -255
  319. package/dist/packages/core/src/utilities/callOrReturn.d.ts +0 -9
  320. package/dist/packages/core/src/utilities/createStyleTag.d.ts +0 -1
  321. package/dist/packages/core/src/utilities/deleteProps.d.ts +0 -6
  322. package/dist/packages/core/src/utilities/elementFromString.d.ts +0 -1
  323. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +0 -1
  324. package/dist/packages/core/src/utilities/findDuplicates.d.ts +0 -1
  325. package/dist/packages/core/src/utilities/fromString.d.ts +0 -1
  326. package/dist/packages/core/src/utilities/index.d.ts +0 -20
  327. package/dist/packages/core/src/utilities/isAndroid.d.ts +0 -1
  328. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +0 -1
  329. package/dist/packages/core/src/utilities/isFunction.d.ts +0 -1
  330. package/dist/packages/core/src/utilities/isMacOS.d.ts +0 -1
  331. package/dist/packages/core/src/utilities/isNumber.d.ts +0 -1
  332. package/dist/packages/core/src/utilities/isPlainObject.d.ts +0 -1
  333. package/dist/packages/core/src/utilities/isRegExp.d.ts +0 -1
  334. package/dist/packages/core/src/utilities/isString.d.ts +0 -1
  335. package/dist/packages/core/src/utilities/isiOS.d.ts +0 -1
  336. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +0 -1
  337. package/dist/packages/core/src/utilities/mergeDeep.d.ts +0 -1
  338. package/dist/packages/core/src/utilities/minMax.d.ts +0 -1
  339. package/dist/packages/core/src/utilities/objectIncludes.d.ts +0 -8
  340. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +0 -8
package/src/Extension.ts CHANGED
@@ -1,507 +1,43 @@
1
- import { Plugin, Transaction } from '@tiptap/pm/state'
1
+ import { type ExtendableConfig, Extendable } from './Extendable.js'
2
2
 
3
- import { Editor } from './Editor.js'
4
- import { getExtensionField } from './helpers/getExtensionField.js'
5
- import { ExtensionConfig } from './index.js'
6
- import { InputRule } from './InputRule.js'
7
- import { Mark } from './Mark.js'
8
- import { Node } from './Node.js'
9
- import { PasteRule } from './PasteRule.js'
10
- import {
11
- AnyConfig,
12
- Extensions,
13
- GlobalAttributes,
14
- KeyboardShortcutCommand,
15
- ParentConfig,
16
- RawCommands,
17
- } from './types.js'
18
- import { callOrReturn } from './utilities/callOrReturn.js'
19
- import { mergeDeep } from './utilities/mergeDeep.js'
20
-
21
- declare module '@tiptap/core' {
22
- interface ExtensionConfig<Options = any, Storage = any> {
23
- // @ts-ignore - this is a dynamic key
24
- [key: string]: any
25
-
26
- /**
27
- * The extension name - this must be unique.
28
- * It will be used to identify the extension.
29
- *
30
- * @example 'myExtension'
31
- */
32
- name: string
33
-
34
- /**
35
- * The priority of your extension. The higher, the later it will be called
36
- * and will take precedence over other extensions with a lower priority.
37
- * @default 1000
38
- * @example 1001
39
- */
40
- priority?: number
41
-
42
- /**
43
- * The default options for this extension.
44
- * @example
45
- * defaultOptions: {
46
- * myOption: 'foo',
47
- * myOtherOption: 10,
48
- * }
49
- */
50
- defaultOptions?: Options
51
-
52
- /**
53
- * This method will add options to this extension
54
- * @see https://tiptap.dev/docs/editor/guide/custom-extensions#settings
55
- * @example
56
- * addOptions() {
57
- * return {
58
- * myOption: 'foo',
59
- * myOtherOption: 10,
60
- * }
61
- */
62
- addOptions?: (this: {
63
- name: string
64
- parent: Exclude<ParentConfig<ExtensionConfig<Options, Storage>>['addOptions'], undefined>
65
- }) => Options
66
-
67
- /**
68
- * The default storage this extension can save data to.
69
- * @see https://tiptap.dev/docs/editor/guide/custom-extensions#storage
70
- * @example
71
- * defaultStorage: {
72
- * prefetchedUsers: [],
73
- * loading: false,
74
- * }
75
- */
76
- addStorage?: (this: {
77
- name: string
78
- options: Options
79
- parent: Exclude<ParentConfig<ExtensionConfig<Options, Storage>>['addStorage'], undefined>
80
- }) => Storage
81
-
82
- /**
83
- * This function adds globalAttributes to specific nodes.
84
- * @see https://tiptap.dev/docs/editor/guide/custom-extensions#global-attributes
85
- * @example
86
- * addGlobalAttributes() {
87
- * return [
88
- * {
89
- // Extend the following extensions
90
- * types: [
91
- * 'heading',
92
- * 'paragraph',
93
- * ],
94
- * // … with those attributes
95
- * attributes: {
96
- * textAlign: {
97
- * default: 'left',
98
- * renderHTML: attributes => ({
99
- * style: `text-align: ${attributes.textAlign}`,
100
- * }),
101
- * parseHTML: element => element.style.textAlign || 'left',
102
- * },
103
- * },
104
- * },
105
- * ]
106
- * }
107
- */
108
- addGlobalAttributes?: (this: {
109
- name: string
110
- options: Options
111
- storage: Storage
112
- extensions: (Node | Mark)[]
113
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['addGlobalAttributes']
114
- }) => GlobalAttributes
115
-
116
- /**
117
- * This function adds commands to the editor
118
- * @see https://tiptap.dev/docs/editor/guide/custom-extensions#commands
119
- * @example
120
- * addCommands() {
121
- * return {
122
- * myCommand: () => ({ chain }) => chain().setMark('type', 'foo').run(),
123
- * }
124
- * }
125
- */
126
- addCommands?: (this: {
127
- name: string
128
- options: Options
129
- storage: Storage
130
- editor: Editor
131
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['addCommands']
132
- }) => Partial<RawCommands>
133
-
134
- /**
135
- * This function registers keyboard shortcuts.
136
- * @see https://tiptap.dev/docs/editor/guide/custom-extensions#keyboard-shortcuts
137
- * @example
138
- * addKeyboardShortcuts() {
139
- * return {
140
- * 'Mod-l': () => this.editor.commands.toggleBulletList(),
141
- * }
142
- * },
143
- */
144
- addKeyboardShortcuts?: (this: {
145
- name: string
146
- options: Options
147
- storage: Storage
148
- editor: Editor
149
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['addKeyboardShortcuts']
150
- }) => {
151
- [key: string]: KeyboardShortcutCommand
152
- }
153
-
154
- /**
155
- * This function adds input rules to the editor.
156
- * @see https://tiptap.dev/docs/editor/guide/custom-extensions#input-rules
157
- * @example
158
- * addInputRules() {
159
- * return [
160
- * markInputRule({
161
- * find: inputRegex,
162
- * type: this.type,
163
- * }),
164
- * ]
165
- * },
166
- */
167
- addInputRules?: (this: {
168
- name: string
169
- options: Options
170
- storage: Storage
171
- editor: Editor
172
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['addInputRules']
173
- }) => InputRule[]
174
-
175
- /**
176
- * This function adds paste rules to the editor.
177
- * @see https://tiptap.dev/docs/editor/guide/custom-extensions#paste-rules
178
- * @example
179
- * addPasteRules() {
180
- * return [
181
- * markPasteRule({
182
- * find: pasteRegex,
183
- * type: this.type,
184
- * }),
185
- * ]
186
- * },
187
- */
188
- addPasteRules?: (this: {
189
- name: string
190
- options: Options
191
- storage: Storage
192
- editor: Editor
193
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['addPasteRules']
194
- }) => PasteRule[]
195
-
196
- /**
197
- * This function adds Prosemirror plugins to the editor
198
- * @see https://tiptap.dev/docs/editor/guide/custom-extensions#prosemirror-plugins
199
- * @example
200
- * addProseMirrorPlugins() {
201
- * return [
202
- * customPlugin(),
203
- * ]
204
- * }
205
- */
206
- addProseMirrorPlugins?: (this: {
207
- name: string
208
- options: Options
209
- storage: Storage
210
- editor: Editor
211
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['addProseMirrorPlugins']
212
- }) => Plugin[]
213
-
214
- /**
215
- * This function adds additional extensions to the editor. This is useful for
216
- * building extension kits.
217
- * @example
218
- * addExtensions() {
219
- * return [
220
- * BulletList,
221
- * OrderedList,
222
- * ListItem
223
- * ]
224
- * }
225
- */
226
- addExtensions?: (this: {
227
- name: string
228
- options: Options
229
- storage: Storage
230
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['addExtensions']
231
- }) => Extensions
232
-
233
- /**
234
- * This function extends the schema of the node.
235
- * @example
236
- * extendNodeSchema() {
237
- * return {
238
- * group: 'inline',
239
- * selectable: false,
240
- * }
241
- * }
242
- */
243
- extendNodeSchema?:
244
- | ((
245
- this: {
246
- name: string
247
- options: Options
248
- storage: Storage
249
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendNodeSchema']
250
- },
251
- extension: Node,
252
- ) => Record<string, any>)
253
- | null
254
-
255
- /**
256
- * This function extends the schema of the mark.
257
- * @example
258
- * extendMarkSchema() {
259
- * return {
260
- * group: 'inline',
261
- * selectable: false,
262
- * }
263
- * }
264
- */
265
- extendMarkSchema?:
266
- | ((
267
- this: {
268
- name: string
269
- options: Options
270
- storage: Storage
271
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendMarkSchema']
272
- },
273
- extension: Mark,
274
- ) => Record<string, any>)
275
- | null
276
-
277
- /**
278
- * The editor is not ready yet.
279
- */
280
- onBeforeCreate?:
281
- | ((this: {
282
- name: string
283
- options: Options
284
- storage: Storage
285
- editor: Editor
286
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBeforeCreate']
287
- }) => void)
288
- | null
289
-
290
- /**
291
- * The editor is ready.
292
- */
293
- onCreate?:
294
- | ((this: {
295
- name: string
296
- options: Options
297
- storage: Storage
298
- editor: Editor
299
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['onCreate']
300
- }) => void)
301
- | null
302
-
303
- /**
304
- * The content has changed.
305
- */
306
- onUpdate?:
307
- | ((this: {
308
- name: string
309
- options: Options
310
- storage: Storage
311
- editor: Editor
312
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['onUpdate']
313
- }) => void)
314
- | null
315
-
316
- /**
317
- * The selection has changed.
318
- */
319
- onSelectionUpdate?:
320
- | ((this: {
321
- name: string
322
- options: Options
323
- storage: Storage
324
- editor: Editor
325
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['onSelectionUpdate']
326
- }) => void)
327
- | null
328
-
329
- /**
330
- * The editor state has changed.
331
- */
332
- onTransaction?:
333
- | ((
334
- this: {
335
- name: string
336
- options: Options
337
- storage: Storage
338
- editor: Editor
339
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['onTransaction']
340
- },
341
- props: {
342
- transaction: Transaction
343
- },
344
- ) => void)
345
- | null
346
-
347
- /**
348
- * The editor is focused.
349
- */
350
- onFocus?:
351
- | ((
352
- this: {
353
- name: string
354
- options: Options
355
- storage: Storage
356
- editor: Editor
357
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['onFocus']
358
- },
359
- props: {
360
- event: FocusEvent
361
- },
362
- ) => void)
363
- | null
364
-
365
- /**
366
- * The editor isn’t focused anymore.
367
- */
368
- onBlur?:
369
- | ((
370
- this: {
371
- name: string
372
- options: Options
373
- storage: Storage
374
- editor: Editor
375
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBlur']
376
- },
377
- props: {
378
- event: FocusEvent
379
- },
380
- ) => void)
381
- | null
382
-
383
- /**
384
- * The editor is destroyed.
385
- */
386
- onDestroy?:
387
- | ((this: {
388
- name: string
389
- options: Options
390
- storage: Storage
391
- editor: Editor
392
- parent: ParentConfig<ExtensionConfig<Options, Storage>>['onDestroy']
393
- }) => void)
394
- | null
395
- }
396
- }
3
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
4
+ export interface ExtensionConfig<Options = any, Storage = any>
5
+ extends ExtendableConfig<Options, Storage, ExtensionConfig<Options, Storage>, null> {}
397
6
 
398
7
  /**
399
8
  * The Extension class is the base class for all extensions.
400
9
  * @see https://tiptap.dev/api/extensions#create-a-new-extension
401
10
  */
402
- export class Extension<Options = any, Storage = any> {
11
+ export class Extension<Options = any, Storage = any> extends Extendable<
12
+ Options,
13
+ Storage,
14
+ ExtensionConfig<Options, Storage>
15
+ > {
403
16
  type = 'extension'
404
17
 
405
- name = 'extension'
406
-
407
- parent: Extension | null = null
408
-
409
- child: Extension | null = null
410
-
411
- options: Options
412
-
413
- storage: Storage
414
-
415
- config: ExtensionConfig = {
416
- name: this.name,
417
- defaultOptions: {},
418
- }
419
-
420
- constructor(config: Partial<ExtensionConfig<Options, Storage>> = {}) {
421
- this.config = {
422
- ...this.config,
423
- ...config,
424
- }
425
-
426
- this.name = this.config.name
427
-
428
- if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {
429
- console.warn(
430
- `[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`,
431
- )
432
- }
433
-
434
- // TODO: remove `addOptions` fallback
435
- this.options = this.config.defaultOptions
436
-
437
- if (this.config.addOptions) {
438
- this.options = callOrReturn(
439
- getExtensionField<AnyConfig['addOptions']>(this, 'addOptions', {
440
- name: this.name,
441
- }),
442
- )
443
- }
444
-
445
- this.storage = callOrReturn(
446
- getExtensionField<AnyConfig['addStorage']>(this, 'addStorage', {
447
- name: this.name,
448
- options: this.options,
449
- }),
450
- ) || {}
451
- }
452
-
453
- static create<O = any, S = any>(config: Partial<ExtensionConfig<O, S>> = {}) {
454
- return new Extension<O, S>(config)
18
+ /**
19
+ * Create a new Extension instance
20
+ * @param config - Extension configuration object or a function that returns a configuration object
21
+ */
22
+ static create<O = any, S = any>(
23
+ config: Partial<ExtensionConfig<O, S>> | (() => Partial<ExtensionConfig<O, S>>) = {},
24
+ ) {
25
+ // If the config is a function, execute it to get the configuration object
26
+ const resolvedConfig = typeof config === 'function' ? config() : config
27
+ return new Extension<O, S>(resolvedConfig)
455
28
  }
456
29
 
457
- configure(options: Partial<Options> = {}) {
458
- // return a new instance so we can use the same extension
459
- // with different calls of `configure`
460
- const extension = this.extend({
461
- ...this.config,
462
- addOptions() {
463
- return mergeDeep(this.parent?.() || {}, options) as Options
464
- },
465
- })
466
-
467
- // Always preserve the current name
468
- extension.name = this.name
469
- // Set the parent to be our parent
470
- extension.parent = this.parent
471
-
472
- return extension
30
+ configure(options?: Partial<Options>) {
31
+ return super.configure(options) as Extension<Options, Storage>
473
32
  }
474
33
 
475
- extend<ExtendedOptions = Options, ExtendedStorage = Storage>(
476
- extendedConfig: Partial<ExtensionConfig<ExtendedOptions, ExtendedStorage>> = {},
477
- ) {
478
- const extension = new Extension<ExtendedOptions, ExtendedStorage>({ ...this.config, ...extendedConfig })
479
-
480
- extension.parent = this
481
-
482
- this.child = extension
483
-
484
- extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name
485
-
486
- if (extendedConfig.defaultOptions && Object.keys(extendedConfig.defaultOptions).length > 0) {
487
- console.warn(
488
- `[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`,
489
- )
490
- }
491
-
492
- extension.options = callOrReturn(
493
- getExtensionField<AnyConfig['addOptions']>(extension, 'addOptions', {
494
- name: extension.name,
495
- }),
496
- )
497
-
498
- extension.storage = callOrReturn(
499
- getExtensionField<AnyConfig['addStorage']>(extension, 'addStorage', {
500
- name: extension.name,
501
- options: extension.options,
502
- }),
503
- )
504
-
505
- return extension
34
+ extend<
35
+ ExtendedOptions = Options,
36
+ ExtendedStorage = Storage,
37
+ ExtendedConfig = ExtensionConfig<ExtendedOptions, ExtendedStorage>,
38
+ >(extendedConfig?: Partial<ExtendedConfig> | (() => Partial<ExtendedConfig>)) {
39
+ // If the extended config is a function, execute it to get the configuration object
40
+ const resolvedConfig = typeof extendedConfig === 'function' ? extendedConfig() : extendedConfig
41
+ return super.extend(resolvedConfig) as Extension<ExtendedOptions, ExtendedStorage>
506
42
  }
507
43
  }