@tiptap/core 2.0.0-beta.17 → 2.0.0-beta.170

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 (318) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +2 -2
  3. package/dist/packages/core/src/CommandManager.d.ts +13 -6
  4. package/dist/packages/core/src/Editor.d.ts +23 -18
  5. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  6. package/dist/packages/core/src/Extension.d.ts +102 -26
  7. package/dist/packages/core/src/ExtensionManager.d.ts +7 -12
  8. package/dist/packages/core/src/InputRule.d.ts +42 -0
  9. package/dist/packages/core/src/Mark.d.ts +134 -30
  10. package/dist/packages/core/src/Node.d.ts +160 -32
  11. package/dist/packages/core/src/NodeView.d.ts +5 -9
  12. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  13. package/dist/packages/core/src/Tracker.d.ts +11 -0
  14. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  15. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  16. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  17. package/dist/packages/core/src/commands/command.d.ts +2 -2
  18. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  19. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  20. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  21. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  22. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  23. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  24. package/dist/packages/core/src/commands/extendMarkRange.d.ts +3 -3
  25. package/dist/packages/core/src/commands/first.d.ts +3 -3
  26. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  27. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  28. package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
  29. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  30. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  31. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  33. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +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 +21 -15
  66. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  67. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  69. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  70. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  71. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  73. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  75. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  76. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  77. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  78. package/dist/packages/core/src/helpers/findParentNode.d.ts +1 -1
  79. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +1 -1
  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 +1 -1
  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 +1 -2
  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 +1 -2
  94. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +2 -2
  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/getTextSeralizersFromSchema.d.ts +3 -0
  104. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  105. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  106. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  107. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  108. package/dist/packages/core/src/helpers/isMarkActive.d.ts +1 -2
  109. package/dist/packages/core/src/helpers/isNodeActive.d.ts +1 -2
  110. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +1 -1
  111. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  112. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  113. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  114. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  115. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  116. package/dist/packages/core/src/helpers/splitExtensions.d.ts +4 -4
  117. package/dist/packages/core/src/index.d.ts +51 -20
  118. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  119. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  120. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  121. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  122. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  123. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  124. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  125. package/dist/packages/core/src/style.d.ts +1 -2
  126. package/dist/packages/core/src/types.d.ts +105 -52
  127. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  128. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  129. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  130. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  131. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  132. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  133. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/isClass.d.ts +1 -1
  135. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  139. package/dist/packages/core/src/utilities/isObject.d.ts +1 -1
  140. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  142. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  144. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  145. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  146. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  147. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  148. package/dist/tiptap-core.cjs.js +3572 -2041
  149. package/dist/tiptap-core.cjs.js.map +1 -1
  150. package/dist/tiptap-core.esm.js +3544 -2044
  151. package/dist/tiptap-core.esm.js.map +1 -1
  152. package/dist/tiptap-core.umd.js +3430 -1898
  153. package/dist/tiptap-core.umd.js.map +1 -1
  154. package/package.json +20 -16
  155. package/src/CommandManager.ts +60 -62
  156. package/src/Editor.ts +109 -74
  157. package/src/EventEmitter.ts +14 -4
  158. package/src/Extension.ts +196 -41
  159. package/src/ExtensionManager.ts +242 -78
  160. package/src/InputRule.ts +268 -0
  161. package/src/Mark.ts +242 -47
  162. package/src/Node.ts +279 -52
  163. package/src/NodeView.ts +105 -42
  164. package/src/PasteRule.ts +246 -0
  165. package/src/Tracker.ts +42 -0
  166. package/src/commands/blur.ts +12 -6
  167. package/src/commands/clearContent.ts +3 -3
  168. package/src/commands/clearNodes.ts +29 -18
  169. package/src/commands/command.ts +2 -2
  170. package/src/commands/createParagraphNear.ts +3 -3
  171. package/src/commands/deleteNode.ts +36 -0
  172. package/src/commands/deleteRange.ts +3 -3
  173. package/src/commands/deleteSelection.ts +3 -3
  174. package/src/commands/enter.ts +3 -3
  175. package/src/commands/exitCode.ts +3 -3
  176. package/src/commands/extendMarkRange.ts +10 -10
  177. package/src/commands/first.ts +3 -3
  178. package/src/commands/focus.ts +45 -44
  179. package/src/commands/forEach.ts +24 -0
  180. package/src/commands/insertContent.ts +12 -24
  181. package/src/commands/insertContentAt.ts +107 -0
  182. package/src/commands/joinBackward.ts +3 -3
  183. package/src/commands/joinForward.ts +3 -3
  184. package/src/commands/keyboardShortcut.ts +6 -6
  185. package/src/commands/lift.ts +5 -5
  186. package/src/commands/liftEmptyBlock.ts +3 -3
  187. package/src/commands/liftListItem.ts +4 -4
  188. package/src/commands/newlineInCode.ts +3 -3
  189. package/src/commands/resetAttributes.ts +61 -0
  190. package/src/commands/scrollIntoView.ts +3 -3
  191. package/src/commands/selectAll.ts +8 -6
  192. package/src/commands/selectNodeBackward.ts +3 -3
  193. package/src/commands/selectNodeForward.ts +3 -3
  194. package/src/commands/selectParentNode.ts +3 -3
  195. package/src/commands/selectTextblockEnd.ts +19 -0
  196. package/src/commands/selectTextblockStart.ts +19 -0
  197. package/src/commands/setContent.ts +7 -11
  198. package/src/commands/setMark.ts +35 -12
  199. package/src/commands/setMeta.ts +18 -0
  200. package/src/commands/setNode.ts +27 -6
  201. package/src/commands/setNodeSelection.ts +28 -0
  202. package/src/commands/setTextSelection.ts +32 -0
  203. package/src/commands/sinkListItem.ts +4 -4
  204. package/src/commands/splitBlock.ts +14 -9
  205. package/src/commands/splitListItem.ts +41 -15
  206. package/src/commands/toggleList.ts +82 -18
  207. package/src/commands/toggleMark.ts +17 -7
  208. package/src/commands/toggleNode.ts +5 -5
  209. package/src/commands/toggleWrap.ts +8 -9
  210. package/src/commands/undoInputRule.ts +34 -5
  211. package/src/commands/unsetAllMarks.ts +7 -11
  212. package/src/commands/unsetMark.ts +34 -22
  213. package/src/commands/updateAttributes.ts +72 -0
  214. package/src/commands/wrapIn.ts +4 -10
  215. package/src/commands/wrapInList.ts +4 -4
  216. package/src/extensions/clipboardTextSerializer.ts +13 -35
  217. package/src/extensions/commands.ts +30 -21
  218. package/src/extensions/focusEvents.ts +0 -3
  219. package/src/extensions/index.ts +1 -0
  220. package/src/extensions/keymap.ts +111 -13
  221. package/src/extensions/tabindex.ts +19 -0
  222. package/src/helpers/combineTransactionSteps.ts +18 -0
  223. package/src/helpers/createChainableState.ts +37 -0
  224. package/src/helpers/createDocument.ts +5 -7
  225. package/src/helpers/createNodeFromContent.ts +15 -18
  226. package/src/helpers/defaultBlockAt.ts +13 -0
  227. package/src/helpers/findChildren.ts +17 -0
  228. package/src/helpers/findChildrenInRange.ts +31 -0
  229. package/src/helpers/findParentNode.ts +2 -2
  230. package/src/helpers/findParentNodeClosestToPos.ts +1 -1
  231. package/src/helpers/generateHTML.ts +5 -5
  232. package/src/helpers/generateJSON.ts +13 -0
  233. package/src/helpers/generateText.ts +29 -0
  234. package/src/helpers/getAttributes.ts +27 -0
  235. package/src/helpers/getAttributesFromExtensions.ts +28 -7
  236. package/src/helpers/getChangedRanges.ts +82 -0
  237. package/src/helpers/getDebugJSON.ts +53 -0
  238. package/src/helpers/getExtensionField.ts +25 -0
  239. package/src/helpers/getHTMLFromFragment.ts +6 -5
  240. package/src/helpers/getMarkAttributes.ts +12 -9
  241. package/src/helpers/getMarkRange.ts +34 -6
  242. package/src/helpers/getMarkType.ts +5 -1
  243. package/src/helpers/getMarksBetween.ts +31 -10
  244. package/src/helpers/getNodeAttributes.ts +7 -8
  245. package/src/helpers/getNodeType.ts +5 -1
  246. package/src/helpers/getRenderedAttributes.ts +4 -6
  247. package/src/helpers/getSchema.ts +6 -133
  248. package/src/helpers/getSchemaByResolvedExtensions.ts +147 -0
  249. package/src/helpers/getSchemaTypeByName.ts +2 -10
  250. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  251. package/src/helpers/getSplittedAttributes.ts +4 -4
  252. package/src/helpers/getText.ts +18 -0
  253. package/src/helpers/getTextBetween.ts +45 -0
  254. package/src/helpers/getTextSeralizersFromSchema.ts +9 -0
  255. package/src/helpers/injectExtensionAttributesToParseRule.ts +15 -17
  256. package/src/helpers/isActive.ts +4 -5
  257. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  258. package/src/helpers/isList.ts +14 -7
  259. package/src/helpers/isMarkActive.ts +43 -19
  260. package/src/helpers/isNodeActive.ts +26 -34
  261. package/src/helpers/isNodeEmpty.ts +1 -1
  262. package/src/helpers/isNodeSelection.ts +2 -2
  263. package/src/helpers/isTextSelection.ts +2 -2
  264. package/src/helpers/posToDOMRect.ts +34 -0
  265. package/src/helpers/resolveFocusPosition.ts +34 -0
  266. package/src/helpers/selectionToInsertionEnd.ts +1 -1
  267. package/src/helpers/splitExtensions.ts +1 -1
  268. package/src/index.ts +53 -20
  269. package/src/inputRules/markInputRule.ts +58 -39
  270. package/src/inputRules/nodeInputRule.ts +44 -11
  271. package/src/inputRules/textInputRule.ts +35 -0
  272. package/src/inputRules/textblockTypeInputRule.ts +37 -0
  273. package/src/inputRules/wrappingInputRule.ts +59 -0
  274. package/src/pasteRules/markPasteRule.ts +61 -53
  275. package/src/pasteRules/textPasteRule.ts +35 -0
  276. package/src/style.ts +16 -3
  277. package/src/types.ts +119 -37
  278. package/src/utilities/callOrReturn.ts +6 -3
  279. package/src/utilities/createStyleTag.ts +8 -1
  280. package/src/utilities/deleteProps.ts +2 -4
  281. package/src/utilities/elementFromString.ts +4 -5
  282. package/src/utilities/escapeForRegEx.ts +4 -0
  283. package/src/utilities/findDuplicates.ts +5 -0
  284. package/src/utilities/fromString.ts +2 -2
  285. package/src/utilities/isClass.ts +2 -2
  286. package/src/utilities/isEmptyObject.ts +2 -2
  287. package/src/utilities/isFunction.ts +3 -0
  288. package/src/utilities/isMacOS.ts +5 -0
  289. package/src/utilities/isNumber.ts +3 -0
  290. package/src/utilities/isObject.ts +6 -6
  291. package/src/utilities/isPlainObject.ts +8 -5
  292. package/src/utilities/isRegExp.ts +3 -0
  293. package/src/utilities/isString.ts +3 -0
  294. package/src/utilities/isiOS.ts +12 -0
  295. package/src/utilities/mergeAttributes.ts +2 -3
  296. package/src/utilities/mergeDeep.ts +2 -3
  297. package/src/utilities/minMax.ts +1 -1
  298. package/src/utilities/objectIncludes.ts +17 -5
  299. package/src/utilities/removeDuplicates.ts +15 -0
  300. package/CHANGELOG.md +0 -324
  301. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  302. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  303. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  304. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  305. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  306. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  307. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  308. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  309. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  310. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  311. package/src/commands/insertHTML.ts +0 -30
  312. package/src/commands/insertNode.ts +0 -33
  313. package/src/commands/insertText.ts +0 -22
  314. package/src/commands/replace.ts +0 -20
  315. package/src/commands/replaceRange.ts +0 -36
  316. package/src/commands/resetNodeAttributes.ts +0 -31
  317. package/src/commands/updateNodeAttributes.ts +0 -33
  318. package/src/utilities/removeElement.ts +0 -5
@@ -1,8 +1,18 @@
1
- export default class EventEmitter {
1
+ type StringKeyOf<T> = Extract<keyof T, string>
2
+ type CallbackType<
3
+ T extends Record<string, any>,
4
+ EventName extends StringKeyOf<T>,
5
+ > = T[EventName] extends any[] ? T[EventName] : [T[EventName]]
6
+ type CallbackFunction<
7
+ T extends Record<string, any>,
8
+ EventName extends StringKeyOf<T>,
9
+ > = (...props: CallbackType<T, EventName>) => any
10
+
11
+ export class EventEmitter<T extends Record<string, any>> {
2
12
 
3
13
  private callbacks: { [key: string]: Function[] } = {}
4
14
 
5
- public on(event: string, fn: Function): this {
15
+ public on<EventName extends StringKeyOf<T>>(event: EventName, fn: CallbackFunction<T, EventName>): this {
6
16
  if (!this.callbacks[event]) {
7
17
  this.callbacks[event] = []
8
18
  }
@@ -12,7 +22,7 @@ export default class EventEmitter {
12
22
  return this
13
23
  }
14
24
 
15
- protected emit(event: string, ...args: any): this {
25
+ protected emit<EventName extends StringKeyOf<T>>(event: EventName, ...args: CallbackType<T, EventName>): this {
16
26
  const callbacks = this.callbacks[event]
17
27
 
18
28
  if (callbacks) {
@@ -22,7 +32,7 @@ export default class EventEmitter {
22
32
  return this
23
33
  }
24
34
 
25
- public off(event: string, fn?: Function): this {
35
+ public off<EventName extends StringKeyOf<T>>(event: EventName, fn?: CallbackFunction<T, EventName>): this {
26
36
  const callbacks = this.callbacks[event]
27
37
 
28
38
  if (callbacks) {
package/src/Extension.ts CHANGED
@@ -1,14 +1,24 @@
1
1
  import { Plugin, Transaction } from 'prosemirror-state'
2
- import { Command as ProseMirrorCommand } from 'prosemirror-commands'
3
- import { InputRule } from 'prosemirror-inputrules'
2
+ import { InputRule } from './InputRule'
3
+ import { PasteRule } from './PasteRule'
4
4
  import { Editor } from './Editor'
5
5
  import { Node } from './Node'
6
- import mergeDeep from './utilities/mergeDeep'
7
- import { GlobalAttributes, RawCommands } from './types'
6
+ import { Mark } from './Mark'
7
+ import { mergeDeep } from './utilities/mergeDeep'
8
+ import { callOrReturn } from './utilities/callOrReturn'
9
+ import { getExtensionField } from './helpers/getExtensionField'
10
+ import {
11
+ AnyConfig,
12
+ Extensions,
13
+ GlobalAttributes,
14
+ RawCommands,
15
+ ParentConfig,
16
+ KeyboardShortcutCommand,
17
+ } from './types'
8
18
  import { ExtensionConfig } from '.'
9
19
 
10
20
  declare module '@tiptap/core' {
11
- interface ExtensionConfig<Options = any> {
21
+ interface ExtensionConfig<Options = any, Storage = any> {
12
22
  [key: string]: any;
13
23
 
14
24
  /**
@@ -16,114 +26,178 @@ declare module '@tiptap/core' {
16
26
  */
17
27
  name: string,
18
28
 
29
+ /**
30
+ * Priority
31
+ */
32
+ priority?: number,
33
+
19
34
  /**
20
35
  * Default options
21
36
  */
22
37
  defaultOptions?: Options,
23
38
 
39
+ /**
40
+ * Default Options
41
+ */
42
+ addOptions?: (this: {
43
+ name: string,
44
+ parent: Exclude<ParentConfig<ExtensionConfig<Options, Storage>>['addOptions'], undefined>,
45
+ }) => Options,
46
+
47
+ /**
48
+ * Default Storage
49
+ */
50
+ addStorage?: (this: {
51
+ name: string,
52
+ options: Options,
53
+ parent: Exclude<ParentConfig<ExtensionConfig<Options, Storage>>['addStorage'], undefined>,
54
+ }) => Storage,
55
+
24
56
  /**
25
57
  * Global attributes
26
58
  */
27
59
  addGlobalAttributes?: (this: {
60
+ name: string,
28
61
  options: Options,
62
+ storage: Storage,
63
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addGlobalAttributes'],
29
64
  }) => GlobalAttributes | {},
30
65
 
31
66
  /**
32
67
  * Raw
33
68
  */
34
69
  addCommands?: (this: {
70
+ name: string,
35
71
  options: Options,
72
+ storage: Storage,
36
73
  editor: Editor,
74
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addCommands'],
37
75
  }) => Partial<RawCommands>,
38
76
 
39
77
  /**
40
78
  * Keyboard shortcuts
41
79
  */
42
80
  addKeyboardShortcuts?: (this: {
81
+ name: string,
43
82
  options: Options,
83
+ storage: Storage,
44
84
  editor: Editor,
85
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addKeyboardShortcuts'],
45
86
  }) => {
46
- [key: string]: ProseMirrorCommand,
87
+ [key: string]: KeyboardShortcutCommand,
47
88
  },
48
89
 
49
90
  /**
50
91
  * Input rules
51
92
  */
52
93
  addInputRules?: (this: {
94
+ name: string,
53
95
  options: Options,
96
+ storage: Storage,
54
97
  editor: Editor,
98
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addInputRules'],
55
99
  }) => InputRule[],
56
100
 
57
101
  /**
58
102
  * Paste rules
59
103
  */
60
104
  addPasteRules?: (this: {
105
+ name: string,
61
106
  options: Options,
107
+ storage: Storage,
62
108
  editor: Editor,
63
- }) => Plugin[],
109
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addPasteRules'],
110
+ }) => PasteRule[],
64
111
 
65
112
  /**
66
113
  * ProseMirror plugins
67
114
  */
68
115
  addProseMirrorPlugins?: (this: {
116
+ name: string,
69
117
  options: Options,
118
+ storage: Storage,
70
119
  editor: Editor,
120
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addProseMirrorPlugins'],
71
121
  }) => Plugin[],
72
122
 
123
+ /**
124
+ * Extensions
125
+ */
126
+ addExtensions?: (this: {
127
+ name: string,
128
+ options: Options,
129
+ storage: Storage,
130
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['addExtensions'],
131
+ }) => Extensions,
132
+
73
133
  /**
74
134
  * Extend Node Schema
75
135
  */
76
136
  extendNodeSchema?: ((
77
137
  this: {
138
+ name: string,
78
139
  options: Options,
140
+ storage: Storage,
141
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendNodeSchema'],
79
142
  },
80
143
  extension: Node,
81
- ) => {
82
- [key: string]: any,
83
- }) | null,
144
+ ) => Record<string, any>) | null,
84
145
 
85
146
  /**
86
147
  * Extend Mark Schema
87
148
  */
88
149
  extendMarkSchema?: ((
89
150
  this: {
151
+ name: string,
90
152
  options: Options,
153
+ storage: Storage,
154
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['extendMarkSchema'],
91
155
  },
92
- extension: Node,
93
- ) => {
94
- [key: string]: any,
95
- }) | null,
156
+ extension: Mark,
157
+ ) => Record<string, any>) | null,
96
158
 
97
159
  /**
98
- * The editor is ready.
160
+ * The editor is not ready yet.
99
161
  */
100
- onCreate?: ((this: {
162
+ onBeforeCreate?: ((this: {
163
+ name: string,
101
164
  options: Options,
165
+ storage: Storage,
102
166
  editor: Editor,
167
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBeforeCreate'],
103
168
  }) => void) | null,
104
169
 
105
170
  /**
106
- * The content has changed.
171
+ * The editor is ready.
107
172
  */
108
- onUpdate?: ((this: {
173
+ onCreate?: ((this: {
174
+ name: string,
109
175
  options: Options,
176
+ storage: Storage,
110
177
  editor: Editor,
178
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onCreate'],
111
179
  }) => void) | null,
112
180
 
113
181
  /**
114
- * The selection has changed.
182
+ * The content has changed.
115
183
  */
116
- onSelectionUpdate?: ((this: {
184
+ onUpdate?: ((this: {
185
+ name: string,
117
186
  options: Options,
187
+ storage: Storage,
118
188
  editor: Editor,
189
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onUpdate'],
119
190
  }) => void) | null,
120
191
 
121
192
  /**
122
- * The view has changed.
193
+ * The selection has changed.
123
194
  */
124
- onViewUpdate?: ((this: {
195
+ onSelectionUpdate?: ((this: {
196
+ name: string,
125
197
  options: Options,
198
+ storage: Storage,
126
199
  editor: Editor,
200
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onSelectionUpdate'],
127
201
  }) => void) | null,
128
202
 
129
203
  /**
@@ -131,8 +205,11 @@ declare module '@tiptap/core' {
131
205
  */
132
206
  onTransaction?: ((
133
207
  this: {
208
+ name: string,
134
209
  options: Options,
210
+ storage: Storage,
135
211
  editor: Editor,
212
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onTransaction'],
136
213
  },
137
214
  props: {
138
215
  transaction: Transaction,
@@ -144,8 +221,11 @@ declare module '@tiptap/core' {
144
221
  */
145
222
  onFocus?: ((
146
223
  this: {
224
+ name: string,
147
225
  options: Options,
226
+ storage: Storage,
148
227
  editor: Editor,
228
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onFocus'],
149
229
  },
150
230
  props: {
151
231
  event: FocusEvent,
@@ -157,8 +237,11 @@ declare module '@tiptap/core' {
157
237
  */
158
238
  onBlur?: ((
159
239
  this: {
240
+ name: string,
160
241
  options: Options,
242
+ storage: Storage,
161
243
  editor: Editor,
244
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onBlur'],
162
245
  },
163
246
  props: {
164
247
  event: FocusEvent,
@@ -169,51 +252,123 @@ declare module '@tiptap/core' {
169
252
  * The editor is destroyed.
170
253
  */
171
254
  onDestroy?: ((this: {
255
+ name: string,
172
256
  options: Options,
257
+ storage: Storage,
173
258
  editor: Editor,
259
+ parent: ParentConfig<ExtensionConfig<Options, Storage>>['onDestroy'],
174
260
  }) => void) | null,
175
261
  }
176
262
  }
177
263
 
178
- export class Extension<Options = any> {
264
+ export class Extension<Options = any, Storage = any> {
179
265
  type = 'extension'
180
266
 
267
+ name = 'extension'
268
+
269
+ parent: Extension | null = null
270
+
271
+ child: Extension | null = null
272
+
273
+ options: Options
274
+
275
+ storage: Storage
276
+
181
277
  config: ExtensionConfig = {
182
- name: 'extension',
278
+ name: this.name,
183
279
  defaultOptions: {},
184
280
  }
185
281
 
186
- options!: Options
187
-
188
- constructor(config: ExtensionConfig<Options>) {
282
+ constructor(config: Partial<ExtensionConfig<Options, Storage>> = {}) {
189
283
  this.config = {
190
284
  ...this.config,
191
285
  ...config,
192
286
  }
193
287
 
288
+ this.name = this.config.name
289
+
290
+ if (config.defaultOptions) {
291
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`)
292
+ }
293
+
294
+ // TODO: remove `addOptions` fallback
194
295
  this.options = this.config.defaultOptions
296
+
297
+ if (this.config.addOptions) {
298
+ this.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
299
+ this,
300
+ 'addOptions',
301
+ {
302
+ name: this.name,
303
+ },
304
+ ))
305
+ }
306
+
307
+ this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
308
+ this,
309
+ 'addStorage',
310
+ {
311
+ name: this.name,
312
+ options: this.options,
313
+ },
314
+ )) || {}
195
315
  }
196
316
 
197
- static create<O>(config: ExtensionConfig<O>) {
198
- return new Extension<O>(config)
317
+ static create<O = any, S = any>(config: Partial<ExtensionConfig<O, S>> = {}) {
318
+ return new Extension<O, S>(config)
199
319
  }
200
320
 
201
321
  configure(options: Partial<Options> = {}) {
202
- return Extension
203
- .create<Options>(this.config as ExtensionConfig<Options>)
204
- .#configure(options)
205
- }
322
+ // return a new instance so we can use the same extension
323
+ // with different calls of `configure`
324
+ const extension = this.extend()
206
325
 
207
- #configure = (options: Partial<Options>) => {
208
- this.options = mergeDeep(this.config.defaultOptions, options) as Options
326
+ extension.options = mergeDeep(this.options, options) as Options
209
327
 
210
- return this
328
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
329
+ extension,
330
+ 'addStorage',
331
+ {
332
+ name: extension.name,
333
+ options: extension.options,
334
+ },
335
+ ))
336
+
337
+ return extension
211
338
  }
212
339
 
213
- extend<ExtendedOptions = Options>(extendedConfig: Partial<ExtensionConfig<ExtendedOptions>>) {
214
- return new Extension<ExtendedOptions>({
215
- ...this.config,
216
- ...extendedConfig,
217
- } as ExtensionConfig<ExtendedOptions>)
340
+ extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<ExtensionConfig<ExtendedOptions, ExtendedStorage>> = {}) {
341
+ const extension = new Extension<ExtendedOptions, ExtendedStorage>(extendedConfig)
342
+
343
+ extension.parent = this
344
+
345
+ this.child = extension
346
+
347
+ extension.name = extendedConfig.name
348
+ ? extendedConfig.name
349
+ : extension.parent.name
350
+
351
+ if (extendedConfig.defaultOptions) {
352
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`)
353
+ }
354
+
355
+ extension.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
356
+ extension,
357
+ 'addOptions',
358
+ {
359
+ name: extension.name,
360
+ },
361
+ ))
362
+
363
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
364
+ extension,
365
+ 'addStorage',
366
+ {
367
+ name: extension.name,
368
+ options: extension.options,
369
+ },
370
+ ))
371
+
372
+ return extension
218
373
  }
219
374
  }