@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
package/src/Mark.ts CHANGED
@@ -5,15 +5,26 @@ import {
5
5
  MarkType,
6
6
  } from 'prosemirror-model'
7
7
  import { Plugin, Transaction } from 'prosemirror-state'
8
- import { Command as ProseMirrorCommand } from 'prosemirror-commands'
9
- import { InputRule } from 'prosemirror-inputrules'
10
- import mergeDeep from './utilities/mergeDeep'
11
- import { Attributes, RawCommands, GlobalAttributes } from './types'
8
+ import { InputRule } from './InputRule'
9
+ import { PasteRule } from './PasteRule'
10
+ import { mergeDeep } from './utilities/mergeDeep'
11
+ import { callOrReturn } from './utilities/callOrReturn'
12
+ import { getExtensionField } from './helpers/getExtensionField'
13
+ import {
14
+ AnyConfig,
15
+ Extensions,
16
+ Attributes,
17
+ RawCommands,
18
+ GlobalAttributes,
19
+ ParentConfig,
20
+ KeyboardShortcutCommand,
21
+ } from './types'
22
+ import { Node } from './Node'
12
23
  import { MarkConfig } from '.'
13
24
  import { Editor } from './Editor'
14
25
 
15
26
  declare module '@tiptap/core' {
16
- export interface MarkConfig<Options = any> {
27
+ export interface MarkConfig<Options = any, Storage = any> {
17
28
  [key: string]: any;
18
29
 
19
30
  /**
@@ -21,123 +32,187 @@ declare module '@tiptap/core' {
21
32
  */
22
33
  name: string,
23
34
 
35
+ /**
36
+ * Priority
37
+ */
38
+ priority?: number,
39
+
24
40
  /**
25
41
  * Default options
26
42
  */
27
43
  defaultOptions?: Options,
28
44
 
45
+ /**
46
+ * Default Options
47
+ */
48
+ addOptions?: (this: {
49
+ name: string,
50
+ parent: Exclude<ParentConfig<MarkConfig<Options, Storage>>['addOptions'], undefined>,
51
+ }) => Options,
52
+
53
+ /**
54
+ * Default Storage
55
+ */
56
+ addStorage?: (this: {
57
+ name: string,
58
+ options: Options,
59
+ parent: Exclude<ParentConfig<MarkConfig<Options, Storage>>['addStorage'], undefined>,
60
+ }) => Storage,
61
+
29
62
  /**
30
63
  * Global attributes
31
64
  */
32
65
  addGlobalAttributes?: (this: {
66
+ name: string,
33
67
  options: Options,
68
+ storage: Storage,
69
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addGlobalAttributes'],
34
70
  }) => GlobalAttributes | {},
35
71
 
36
72
  /**
37
73
  * Raw
38
74
  */
39
75
  addCommands?: (this: {
76
+ name: string,
40
77
  options: Options,
78
+ storage: Storage,
41
79
  editor: Editor,
42
80
  type: MarkType,
81
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addCommands'],
43
82
  }) => Partial<RawCommands>,
44
83
 
45
84
  /**
46
85
  * Keyboard shortcuts
47
86
  */
48
87
  addKeyboardShortcuts?: (this: {
88
+ name: string,
49
89
  options: Options,
90
+ storage: Storage,
50
91
  editor: Editor,
51
92
  type: MarkType,
93
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addKeyboardShortcuts'],
52
94
  }) => {
53
- [key: string]: ProseMirrorCommand,
95
+ [key: string]: KeyboardShortcutCommand,
54
96
  },
55
97
 
56
98
  /**
57
99
  * Input rules
58
100
  */
59
101
  addInputRules?: (this: {
102
+ name: string,
60
103
  options: Options,
104
+ storage: Storage,
61
105
  editor: Editor,
62
106
  type: MarkType,
107
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addInputRules'],
63
108
  }) => InputRule[],
64
109
 
65
110
  /**
66
111
  * Paste rules
67
112
  */
68
113
  addPasteRules?: (this: {
114
+ name: string,
69
115
  options: Options,
116
+ storage: Storage,
70
117
  editor: Editor,
71
118
  type: MarkType,
72
- }) => Plugin[],
119
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addPasteRules'],
120
+ }) => PasteRule[],
73
121
 
74
122
  /**
75
123
  * ProseMirror plugins
76
124
  */
77
125
  addProseMirrorPlugins?: (this: {
126
+ name: string,
78
127
  options: Options,
128
+ storage: Storage,
79
129
  editor: Editor,
80
130
  type: MarkType,
131
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addProseMirrorPlugins'],
81
132
  }) => Plugin[],
82
133
 
134
+ /**
135
+ * Extensions
136
+ */
137
+ addExtensions?: (this: {
138
+ name: string,
139
+ options: Options,
140
+ storage: Storage,
141
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addExtensions'],
142
+ }) => Extensions,
143
+
83
144
  /**
84
145
  * Extend Node Schema
85
146
  */
86
147
  extendNodeSchema?: ((
87
148
  this: {
149
+ name: string,
88
150
  options: Options,
151
+ storage: Storage,
152
+ parent: ParentConfig<MarkConfig<Options, Storage>>['extendNodeSchema'],
89
153
  },
90
154
  extension: Node,
91
- ) => {
92
- [key: string]: any,
93
- }) | null,
155
+ ) => Record<string, any>) | null,
94
156
 
95
157
  /**
96
158
  * Extend Mark Schema
97
159
  */
98
160
  extendMarkSchema?: ((
99
161
  this: {
162
+ name: string,
100
163
  options: Options,
164
+ storage: Storage,
165
+ parent: ParentConfig<MarkConfig<Options, Storage>>['extendMarkSchema'],
101
166
  },
102
- extension: Node,
103
- ) => {
104
- [key: string]: any,
105
- }) | null,
167
+ extension: Mark,
168
+ ) => Record<string, any>) | null,
106
169
 
107
170
  /**
108
- * The editor is ready.
171
+ * The editor is not ready yet.
109
172
  */
110
- onCreate?: ((this: {
173
+ onBeforeCreate?: ((this: {
174
+ name: string,
111
175
  options: Options,
176
+ storage: Storage,
112
177
  editor: Editor,
113
178
  type: MarkType,
179
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onBeforeCreate'],
114
180
  }) => void) | null,
115
181
 
116
182
  /**
117
- * The content has changed.
183
+ * The editor is ready.
118
184
  */
119
- onUpdate?: ((this: {
185
+ onCreate?: ((this: {
186
+ name: string,
120
187
  options: Options,
188
+ storage: Storage,
121
189
  editor: Editor,
122
190
  type: MarkType,
191
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onCreate'],
123
192
  }) => void) | null,
124
193
 
125
194
  /**
126
- * The selection has changed.
195
+ * The content has changed.
127
196
  */
128
- onSelectionUpdate?: ((this: {
197
+ onUpdate?: ((this: {
198
+ name: string,
129
199
  options: Options,
200
+ storage: Storage,
130
201
  editor: Editor,
131
202
  type: MarkType,
203
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onUpdate'],
132
204
  }) => void) | null,
133
205
 
134
206
  /**
135
- * The view has changed.
207
+ * The selection has changed.
136
208
  */
137
- onViewUpdate?: ((this: {
209
+ onSelectionUpdate?: ((this: {
210
+ name: string,
138
211
  options: Options,
212
+ storage: Storage,
139
213
  editor: Editor,
140
214
  type: MarkType,
215
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onSelectionUpdate'],
141
216
  }) => void) | null,
142
217
 
143
218
  /**
@@ -145,9 +220,12 @@ declare module '@tiptap/core' {
145
220
  */
146
221
  onTransaction?: ((
147
222
  this: {
223
+ name: string,
148
224
  options: Options,
225
+ storage: Storage,
149
226
  editor: Editor,
150
227
  type: MarkType,
228
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onTransaction'],
151
229
  },
152
230
  props: {
153
231
  transaction: Transaction,
@@ -159,9 +237,12 @@ declare module '@tiptap/core' {
159
237
  */
160
238
  onFocus?: ((
161
239
  this: {
240
+ name: string,
162
241
  options: Options,
242
+ storage: Storage,
163
243
  editor: Editor,
164
244
  type: MarkType,
245
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onFocus'],
165
246
  },
166
247
  props: {
167
248
  event: FocusEvent,
@@ -173,9 +254,12 @@ declare module '@tiptap/core' {
173
254
  */
174
255
  onBlur?: ((
175
256
  this: {
257
+ name: string,
176
258
  options: Options,
259
+ storage: Storage,
177
260
  editor: Editor,
178
261
  type: MarkType,
262
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onBlur'],
179
263
  },
180
264
  props: {
181
265
  event: FocusEvent,
@@ -186,9 +270,12 @@ declare module '@tiptap/core' {
186
270
  * The editor is destroyed.
187
271
  */
188
272
  onDestroy?: ((this: {
273
+ name: string,
189
274
  options: Options,
275
+ storage: Storage,
190
276
  editor: Editor,
191
277
  type: MarkType,
278
+ parent: ParentConfig<MarkConfig<Options, Storage>>['onDestroy'],
192
279
  }) => void) | null,
193
280
 
194
281
  /**
@@ -199,29 +286,62 @@ declare module '@tiptap/core' {
199
286
  /**
200
287
  * Inclusive
201
288
  */
202
- inclusive?: MarkSpec['inclusive'] | ((this: { options: Options }) => MarkSpec['inclusive']),
289
+ inclusive?: MarkSpec['inclusive'] | ((this: {
290
+ name: string,
291
+ options: Options,
292
+ storage: Storage,
293
+ parent: ParentConfig<MarkConfig<Options, Storage>>['inclusive'],
294
+ }) => MarkSpec['inclusive']),
203
295
 
204
296
  /**
205
297
  * Excludes
206
298
  */
207
- excludes?: MarkSpec['excludes'] | ((this: { options: Options }) => MarkSpec['excludes']),
299
+ excludes?: MarkSpec['excludes'] | ((this: {
300
+ name: string,
301
+ options: Options,
302
+ storage: Storage,
303
+ parent: ParentConfig<MarkConfig<Options, Storage>>['excludes'],
304
+ }) => MarkSpec['excludes']),
208
305
 
209
306
  /**
210
307
  * Group
211
308
  */
212
- group?: MarkSpec['group'] | ((this: { options: Options }) => MarkSpec['group']),
309
+ group?: MarkSpec['group'] | ((this: {
310
+ name: string,
311
+ options: Options,
312
+ storage: Storage,
313
+ parent: ParentConfig<MarkConfig<Options, Storage>>['group'],
314
+ }) => MarkSpec['group']),
213
315
 
214
316
  /**
215
317
  * Spanning
216
318
  */
217
- spanning?: MarkSpec['spanning'] | ((this: { options: Options }) => MarkSpec['spanning']),
319
+ spanning?: MarkSpec['spanning'] | ((this: {
320
+ name: string,
321
+ options: Options,
322
+ storage: Storage,
323
+ parent: ParentConfig<MarkConfig<Options, Storage>>['spanning'],
324
+ }) => MarkSpec['spanning']),
325
+
326
+ /**
327
+ * Code
328
+ */
329
+ code?: boolean | ((this: {
330
+ name: string,
331
+ options: Options,
332
+ storage: Storage,
333
+ parent: ParentConfig<MarkConfig<Options, Storage>>['code'],
334
+ }) => boolean),
218
335
 
219
336
  /**
220
337
  * Parse HTML
221
338
  */
222
339
  parseHTML?: (
223
340
  this: {
341
+ name: string,
224
342
  options: Options,
343
+ storage: Storage,
344
+ parent: ParentConfig<MarkConfig<Options, Storage>>['parseHTML'],
225
345
  },
226
346
  ) => MarkSpec['parseDOM'],
227
347
 
@@ -230,12 +350,15 @@ declare module '@tiptap/core' {
230
350
  */
231
351
  renderHTML?: ((
232
352
  this: {
353
+ name: string,
233
354
  options: Options,
355
+ storage: Storage,
356
+ parent: ParentConfig<MarkConfig<Options, Storage>>['renderHTML'],
234
357
  },
235
358
  props: {
236
359
  mark: ProseMirrorMark,
237
- HTMLAttributes: { [key: string]: any },
238
- }
360
+ HTMLAttributes: Record<string, any>,
361
+ },
239
362
  ) => DOMOutputSpec) | null,
240
363
 
241
364
  /**
@@ -243,51 +366,123 @@ declare module '@tiptap/core' {
243
366
  */
244
367
  addAttributes?: (
245
368
  this: {
369
+ name: string,
246
370
  options: Options,
371
+ storage: Storage,
372
+ parent: ParentConfig<MarkConfig<Options, Storage>>['addAttributes'],
247
373
  },
248
374
  ) => Attributes | {},
249
375
  }
250
376
  }
251
377
 
252
- export class Mark<Options = any> {
378
+ export class Mark<Options = any, Storage = any> {
253
379
  type = 'mark'
254
380
 
381
+ name = 'mark'
382
+
383
+ parent: Mark | null = null
384
+
385
+ child: Mark | null = null
386
+
387
+ options: Options
388
+
389
+ storage: Storage
390
+
255
391
  config: MarkConfig = {
256
- name: 'mark',
392
+ name: this.name,
257
393
  defaultOptions: {},
258
394
  }
259
395
 
260
- options!: Options
261
-
262
- constructor(config: MarkConfig<Options>) {
396
+ constructor(config: Partial<MarkConfig<Options, Storage>> = {}) {
263
397
  this.config = {
264
398
  ...this.config,
265
399
  ...config,
266
400
  }
267
401
 
402
+ this.name = this.config.name
403
+
404
+ if (config.defaultOptions) {
405
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`)
406
+ }
407
+
408
+ // TODO: remove `addOptions` fallback
268
409
  this.options = this.config.defaultOptions
410
+
411
+ if (this.config.addOptions) {
412
+ this.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
413
+ this,
414
+ 'addOptions',
415
+ {
416
+ name: this.name,
417
+ },
418
+ ))
419
+ }
420
+
421
+ this.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
422
+ this,
423
+ 'addStorage',
424
+ {
425
+ name: this.name,
426
+ options: this.options,
427
+ },
428
+ )) || {}
269
429
  }
270
430
 
271
- static create<O>(config: MarkConfig<O>) {
272
- return new Mark<O>(config)
431
+ static create<O = any, S = any>(config: Partial<MarkConfig<O, S>> = {}) {
432
+ return new Mark<O, S>(config)
273
433
  }
274
434
 
275
435
  configure(options: Partial<Options> = {}) {
276
- return Mark
277
- .create<Options>(this.config as MarkConfig<Options>)
278
- .#configure(options)
436
+ // return a new instance so we can use the same extension
437
+ // with different calls of `configure`
438
+ const extension = this.extend()
439
+
440
+ extension.options = mergeDeep(this.options, options) as Options
441
+
442
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
443
+ extension,
444
+ 'addStorage',
445
+ {
446
+ name: extension.name,
447
+ options: extension.options,
448
+ },
449
+ ))
450
+
451
+ return extension
279
452
  }
280
453
 
281
- #configure = (options: Partial<Options>) => {
282
- this.options = mergeDeep(this.config.defaultOptions, options) as Options
454
+ extend<ExtendedOptions = Options, ExtendedStorage = Storage>(extendedConfig: Partial<MarkConfig<ExtendedOptions, ExtendedStorage>> = {}) {
455
+ const extension = new Mark<ExtendedOptions, ExtendedStorage>(extendedConfig)
283
456
 
284
- return this
285
- }
457
+ extension.parent = this
286
458
 
287
- extend<ExtendedOptions = Options>(extendedConfig: Partial<MarkConfig<ExtendedOptions>>) {
288
- return new Mark<ExtendedOptions>({
289
- ...this.config,
290
- ...extendedConfig,
291
- } as MarkConfig<ExtendedOptions>)
459
+ this.child = extension
460
+
461
+ extension.name = extendedConfig.name
462
+ ? extendedConfig.name
463
+ : extension.parent.name
464
+
465
+ if (extendedConfig.defaultOptions) {
466
+ console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${extension.name}".`)
467
+ }
468
+
469
+ extension.options = callOrReturn(getExtensionField<AnyConfig['addOptions']>(
470
+ extension,
471
+ 'addOptions',
472
+ {
473
+ name: extension.name,
474
+ },
475
+ ))
476
+
477
+ extension.storage = callOrReturn(getExtensionField<AnyConfig['addStorage']>(
478
+ extension,
479
+ 'addStorage',
480
+ {
481
+ name: extension.name,
482
+ options: extension.options,
483
+ },
484
+ ))
485
+
486
+ return extension
292
487
  }
293
488
  }