@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/Extension.ts CHANGED
@@ -1,13 +1,25 @@
1
1
  import { Plugin, Transaction } from 'prosemirror-state'
2
- import { Command as ProseMirrorCommand } from 'prosemirror-commands'
3
- import { InputRule } from 'prosemirror-inputrules'
2
+
3
+ import { ExtensionConfig } from '.'
4
4
  import { Editor } from './Editor'
5
+ import { getExtensionField } from './helpers/getExtensionField'
6
+ import { InputRule } from './InputRule'
7
+ import { Mark } from './Mark'
5
8
  import { Node } from './Node'
6
- import mergeDeep from './utilities/mergeDeep'
7
- import { GlobalAttributes, RawCommands, ExtensionConfig } from './types'
9
+ import { PasteRule } from './PasteRule'
10
+ import {
11
+ AnyConfig,
12
+ Extensions,
13
+ GlobalAttributes,
14
+ KeyboardShortcutCommand,
15
+ ParentConfig,
16
+ RawCommands,
17
+ } from './types'
18
+ import { callOrReturn } from './utilities/callOrReturn'
19
+ import { mergeDeep } from './utilities/mergeDeep'
8
20
 
9
21
  declare module '@tiptap/core' {
10
- interface ExtensionConfig<Options = any> {
22
+ interface ExtensionConfig<Options = any, Storage = any> {
11
23
  [key: string]: any;
12
24
 
13
25
  /**
@@ -15,114 +27,178 @@ declare module '@tiptap/core' {
15
27
  */
16
28
  name: string,
17
29
 
30
+ /**
31
+ * Priority
32
+ */
33
+ priority?: number,
34
+
18
35
  /**
19
36
  * Default options
20
37
  */
21
38
  defaultOptions?: Options,
22
39
 
40
+ /**
41
+ * Default Options
42
+ */
43
+ addOptions?: (this: {
44
+ name: string,
45
+ parent: Exclude<ParentConfig<ExtensionConfig<Options, Storage>>['addOptions'], undefined>,
46
+ }) => Options,
47
+
48
+ /**
49
+ * Default Storage
50
+ */
51
+ addStorage?: (this: {
52
+ name: string,
53
+ options: Options,
54
+ parent: Exclude<ParentConfig<ExtensionConfig<Options, Storage>>['addStorage'], undefined>,
55
+ }) => Storage,
56
+
23
57
  /**
24
58
  * Global attributes
25
59
  */
26
60
  addGlobalAttributes?: (this: {
61
+ name: string,
27
62
  options: Options,
63
+ storage: Storage,
64
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addGlobalAttributes'],
28
65
  }) => GlobalAttributes | {},
29
66
 
30
67
  /**
31
68
  * Raw
32
69
  */
33
70
  addCommands?: (this: {
71
+ name: string,
34
72
  options: Options,
73
+ storage: Storage,
35
74
  editor: Editor,
75
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addCommands'],
36
76
  }) => Partial<RawCommands>,
37
77
 
38
78
  /**
39
79
  * Keyboard shortcuts
40
80
  */
41
81
  addKeyboardShortcuts?: (this: {
82
+ name: string,
42
83
  options: Options,
84
+ storage: Storage,
43
85
  editor: Editor,
86
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addKeyboardShortcuts'],
44
87
  }) => {
45
- [key: string]: ProseMirrorCommand,
88
+ [key: string]: KeyboardShortcutCommand,
46
89
  },
47
90
 
48
91
  /**
49
92
  * Input rules
50
93
  */
51
94
  addInputRules?: (this: {
95
+ name: string,
52
96
  options: Options,
97
+ storage: Storage,
53
98
  editor: Editor,
99
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addInputRules'],
54
100
  }) => InputRule[],
55
101
 
56
102
  /**
57
103
  * Paste rules
58
104
  */
59
105
  addPasteRules?: (this: {
106
+ name: string,
60
107
  options: Options,
108
+ storage: Storage,
61
109
  editor: Editor,
62
- }) => Plugin[],
110
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addPasteRules'],
111
+ }) => PasteRule[],
63
112
 
64
113
  /**
65
114
  * ProseMirror plugins
66
115
  */
67
116
  addProseMirrorPlugins?: (this: {
117
+ name: string,
68
118
  options: Options,
119
+ storage: Storage,
69
120
  editor: Editor,
121
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addProseMirrorPlugins'],
70
122
  }) => Plugin[],
71
123
 
124
+ /**
125
+ * Extensions
126
+ */
127
+ addExtensions?: (this: {
128
+ name: string,
129
+ options: Options,
130
+ storage: Storage,
131
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addExtensions'],
132
+ }) => Extensions,
133
+
72
134
  /**
73
135
  * Extend Node Schema
74
136
  */
75
137
  extendNodeSchema?: ((
76
138
  this: {
139
+ name: string,
77
140
  options: Options,
141
+ storage: Storage,
142
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendNodeSchema'],
78
143
  },
79
144
  extension: Node,
80
- ) => {
81
- [key: string]: any,
82
- }) | null,
145
+ ) => Record<string, any>) | null,
83
146
 
84
147
  /**
85
148
  * Extend Mark Schema
86
149
  */
87
150
  extendMarkSchema?: ((
88
151
  this: {
152
+ name: string,
89
153
  options: Options,
154
+ storage: Storage,
155
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendMarkSchema'],
90
156
  },
91
- extension: Node,
92
- ) => {
93
- [key: string]: any,
94
- }) | null,
157
+ extension: Mark,
158
+ ) => Record<string, any>) | null,
95
159
 
96
160
  /**
97
- * The editor is ready.
161
+ * The editor is not ready yet.
98
162
  */
99
- onCreate?: ((this: {
163
+ onBeforeCreate?: ((this: {
164
+ name: string,
100
165
  options: Options,
166
+ storage: Storage,
101
167
  editor: Editor,
168
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBeforeCreate'],
102
169
  }) => void) | null,
103
170
 
104
171
  /**
105
- * The content has changed.
172
+ * The editor is ready.
106
173
  */
107
- onUpdate?: ((this: {
174
+ onCreate?: ((this: {
175
+ name: string,
108
176
  options: Options,
177
+ storage: Storage,
109
178
  editor: Editor,
179
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onCreate'],
110
180
  }) => void) | null,
111
181
 
112
182
  /**
113
- * The selection has changed.
183
+ * The content has changed.
114
184
  */
115
- onSelectionUpdate?: ((this: {
185
+ onUpdate?: ((this: {
186
+ name: string,
116
187
  options: Options,
188
+ storage: Storage,
117
189
  editor: Editor,
190
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onUpdate'],
118
191
  }) => void) | null,
119
192
 
120
193
  /**
121
- * The view has changed.
194
+ * The selection has changed.
122
195
  */
123
- onViewUpdate?: ((this: {
196
+ onSelectionUpdate?: ((this: {
197
+ name: string,
124
198
  options: Options,
199
+ storage: Storage,
125
200
  editor: Editor,
201
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onSelectionUpdate'],
126
202
  }) => void) | null,
127
203
 
128
204
  /**
@@ -130,8 +206,11 @@ declare module '@tiptap/core' {
130
206
  */
131
207
  onTransaction?: ((
132
208
  this: {
209
+ name: string,
133
210
  options: Options,
211
+ storage: Storage,
134
212
  editor: Editor,
213
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onTransaction'],
135
214
  },
136
215
  props: {
137
216
  transaction: Transaction,
@@ -143,8 +222,11 @@ declare module '@tiptap/core' {
143
222
  */
144
223
  onFocus?: ((
145
224
  this: {
225
+ name: string,
146
226
  options: Options,
227
+ storage: Storage,
147
228
  editor: Editor,
229
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onFocus'],
148
230
  },
149
231
  props: {
150
232
  event: FocusEvent,
@@ -156,8 +238,11 @@ declare module '@tiptap/core' {
156
238
  */
157
239
  onBlur?: ((
158
240
  this: {
241
+ name: string,
159
242
  options: Options,
243
+ storage: Storage,
160
244
  editor: Editor,
245
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBlur'],
161
246
  },
162
247
  props: {
163
248
  event: FocusEvent,
@@ -168,51 +253,123 @@ declare module '@tiptap/core' {
168
253
  * The editor is destroyed.
169
254
  */
170
255
  onDestroy?: ((this: {
256
+ name: string,
171
257
  options: Options,
258
+ storage: Storage,
172
259
  editor: Editor,
260
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onDestroy'],
173
261
  }) => void) | null,
174
262
  }
175
263
  }
176
264
 
177
- export class Extension<Options = any> {
265
+ export class Extension<Options = any, Storage = any> {
178
266
  type = 'extension'
179
267
 
268
+ name = 'extension'
269
+
270
+ parent: Extension | null = null
271
+
272
+ child: Extension | null = null
273
+
274
+ options: Options
275
+
276
+ storage: Storage
277
+
180
278
  config: ExtensionConfig = {
181
- name: 'extension',
279
+ name: this.name,
182
280
  defaultOptions: {},
183
281
  }
184
282
 
185
- options!: Options
186
-
187
- constructor(config: ExtensionConfig<Options>) {
283
+ constructor(config: Partial<ExtensionConfig<Options, Storage>> = {}) {
188
284
  this.config = {
189
285
  ...this.config,
190
286
  ...config,
191
287
  }
192
288
 
289
+ this.name = this.config.name
290
+
291
+ if (config.defaultOptions) {
292
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`)
293
+ }
294
+
295
+ // TODO: remove `addOptions` fallback
193
296
  this.options = this.config.defaultOptions
297
+
298
+ if (this.config.addOptions) {
299
+ this.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
300
+ this,
301
+ 'addOptions',
302
+ {
303
+ name: this.name,
304
+ },
305
+ ))
306
+ }
307
+
308
+ this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
309
+ this,
310
+ 'addStorage',
311
+ {
312
+ name: this.name,
313
+ options: this.options,
314
+ },
315
+ )) || {}
194
316
  }
195
317
 
196
- static create<O>(config: ExtensionConfig<O>) {
197
- return new Extension<O>(config)
318
+ static create<O = any, S = any>(config: Partial<ExtensionConfig<O, S>> = {}) {
319
+ return new Extension<O, S>(config)
198
320
  }
199
321
 
200
322
  configure(options: Partial<Options> = {}) {
201
- return Extension
202
- .create<Options>(this.config as ExtensionConfig<Options>)
203
- .#configure(options)
204
- }
323
+ // return a new instance so we can use the same extension
324
+ // with different calls of `configure`
325
+ const extension = this.extend()
326
+
327
+ extension.options = mergeDeep(this.options, options) as Options
205
328
 
206
- #configure = (options: Partial<Options>) => {
207
- this.options = mergeDeep(this.config.defaultOptions, options) as Options
329
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
330
+ extension,
331
+ 'addStorage',
332
+ {
333
+ name: extension.name,
334
+ options: extension.options,
335
+ },
336
+ ))
208
337
 
209
- return this
338
+ return extension
210
339
  }
211
340
 
212
- extend<ExtendedOptions = Options>(extendedConfig: Partial<ExtensionConfig<ExtendedOptions>>) {
213
- return new Extension<ExtendedOptions>({
214
- ...this.config,
215
- ...extendedConfig,
216
- } as ExtensionConfig<ExtendedOptions>)
341
+ extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<ExtensionConfig<ExtendedOptions, ExtendedStorage>> = {}) {
342
+ const extension = new Extension<ExtendedOptions, ExtendedStorage>(extendedConfig)
343
+
344
+ extension.parent = this
345
+
346
+ this.child = extension
347
+
348
+ extension.name = extendedConfig.name
349
+ ? extendedConfig.name
350
+ : extension.parent.name
351
+
352
+ if (extendedConfig.defaultOptions) {
353
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`)
354
+ }
355
+
356
+ extension.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
357
+ extension,
358
+ 'addOptions',
359
+ {
360
+ name: extension.name,
361
+ },
362
+ ))
363
+
364
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
365
+ extension,
366
+ 'addStorage',
367
+ {
368
+ name: extension.name,
369
+ options: extension.options,
370
+ },
371
+ ))
372
+
373
+ return extension
217
374
  }
218
375
  }