@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,12 +1,12 @@
1
- import { Command, RawCommands } from '../types'
1
+ import { RawCommands } from '../types'
2
2
 
3
3
  declare module '@tiptap/core' {
4
- interface Commands {
4
+ interface Commands<ReturnType> {
5
5
  scrollIntoView: {
6
6
  /**
7
7
  * Scroll the selection into view.
8
8
  */
9
- scrollIntoView: () => Command,
9
+ scrollIntoView: () => ReturnType,
10
10
  }
11
11
  }
12
12
  }
@@ -1,17 +1,19 @@
1
- import { selectAll as originalSelectAll } from 'prosemirror-commands'
2
- import { Command, RawCommands } from '../types'
1
+ import { RawCommands } from '../types'
3
2
 
4
3
  declare module '@tiptap/core' {
5
- interface Commands {
4
+ interface Commands<ReturnType> {
6
5
  selectAll: {
7
6
  /**
8
7
  * Select the whole document.
9
8
  */
10
- selectAll: () => Command,
9
+ selectAll: () => ReturnType,
11
10
  }
12
11
  }
13
12
  }
14
13
 
15
- export const selectAll: RawCommands['selectAll'] = () => ({ state, dispatch }) => {
16
- return originalSelectAll(state, dispatch)
14
+ export const selectAll: RawCommands['selectAll'] = () => ({ tr, commands }) => {
15
+ return commands.setTextSelection({
16
+ from: 0,
17
+ to: tr.doc.content.size,
18
+ })
17
19
  }
@@ -1,13 +1,13 @@
1
1
  import { selectNodeBackward as originalSelectNodeBackward } from 'prosemirror-commands'
2
- import { Command, RawCommands } from '../types'
2
+ import { RawCommands } from '../types'
3
3
 
4
4
  declare module '@tiptap/core' {
5
- interface Commands {
5
+ interface Commands<ReturnType> {
6
6
  selectNodeBackward: {
7
7
  /**
8
8
  * Select a node backward.
9
9
  */
10
- selectNodeBackward: () => Command,
10
+ selectNodeBackward: () => ReturnType,
11
11
  }
12
12
  }
13
13
  }
@@ -1,13 +1,13 @@
1
1
  import { selectNodeForward as originalSelectNodeForward } from 'prosemirror-commands'
2
- import { Command, RawCommands } from '../types'
2
+ import { RawCommands } from '../types'
3
3
 
4
4
  declare module '@tiptap/core' {
5
- interface Commands {
5
+ interface Commands<ReturnType> {
6
6
  selectNodeForward: {
7
7
  /**
8
8
  * Select a node forward.
9
9
  */
10
- selectNodeForward: () => Command,
10
+ selectNodeForward: () => ReturnType,
11
11
  }
12
12
  }
13
13
  }
@@ -1,13 +1,13 @@
1
1
  import { selectParentNode as originalSelectParentNode } from 'prosemirror-commands'
2
- import { Command, RawCommands } from '../types'
2
+ import { RawCommands } from '../types'
3
3
 
4
4
  declare module '@tiptap/core' {
5
- interface Commands {
5
+ interface Commands<ReturnType> {
6
6
  selectParentNode: {
7
7
  /**
8
8
  * Select the parent node.
9
9
  */
10
- selectParentNode: () => Command,
10
+ selectParentNode: () => ReturnType,
11
11
  }
12
12
  }
13
13
  }
@@ -0,0 +1,19 @@
1
+ // @ts-ignore
2
+ // TODO: add types to @types/prosemirror-commands
3
+ import { selectTextblockEnd as originalSelectTextblockEnd } from 'prosemirror-commands'
4
+ import { RawCommands } from '../types'
5
+
6
+ declare module '@tiptap/core' {
7
+ interface Commands<ReturnType> {
8
+ selectTextblockEnd: {
9
+ /**
10
+ * Moves the cursor to the end of current text block.
11
+ */
12
+ selectTextblockEnd: () => ReturnType,
13
+ }
14
+ }
15
+ }
16
+
17
+ export const selectTextblockEnd: RawCommands['selectTextblockEnd'] = () => ({ state, dispatch }) => {
18
+ return originalSelectTextblockEnd(state, dispatch)
19
+ }
@@ -0,0 +1,19 @@
1
+ // @ts-ignore
2
+ // TODO: add types to @types/prosemirror-commands
3
+ import { selectTextblockStart as originalSelectTextblockStart } from 'prosemirror-commands'
4
+ import { RawCommands } from '../types'
5
+
6
+ declare module '@tiptap/core' {
7
+ interface Commands<ReturnType> {
8
+ selectTextblockStart: {
9
+ /**
10
+ * Moves the cursor to the start of current text block.
11
+ */
12
+ selectTextblockStart: () => ReturnType,
13
+ }
14
+ }
15
+ }
16
+
17
+ export const selectTextblockStart: RawCommands['selectTextblockStart'] = () => ({ state, dispatch }) => {
18
+ return originalSelectTextblockStart(state, dispatch)
19
+ }
@@ -1,23 +1,19 @@
1
1
  import { TextSelection } from 'prosemirror-state'
2
- import createDocument from '../helpers/createDocument'
3
- import {
4
- AnyObject,
5
- Command,
6
- RawCommands,
7
- Content,
8
- } from '../types'
2
+ import { ParseOptions } from 'prosemirror-model'
3
+ import { createDocument } from '../helpers/createDocument'
4
+ import { RawCommands, Content } from '../types'
9
5
 
10
6
  declare module '@tiptap/core' {
11
- interface Commands {
7
+ interface Commands<ReturnType> {
12
8
  setContent: {
13
9
  /**
14
10
  * Replace the whole document with new content.
15
11
  */
16
12
  setContent: (
17
13
  content: Content,
18
- emitUpdate?: Boolean,
19
- parseOptions?: AnyObject,
20
- ) => Command,
14
+ emitUpdate?: boolean,
15
+ parseOptions?: ParseOptions,
16
+ ) => ReturnType,
21
17
  }
22
18
  }
23
19
  }
@@ -1,15 +1,15 @@
1
1
  import { MarkType } from 'prosemirror-model'
2
- import { AnyObject, Command, RawCommands } from '../types'
3
- import getMarkType from '../helpers/getMarkType'
4
- import getMarkAttributes from '../helpers/getMarkAttributes'
2
+ import { RawCommands } from '../types'
3
+ import { getMarkType } from '../helpers/getMarkType'
4
+ import { getMarkAttributes } from '../helpers/getMarkAttributes'
5
5
 
6
6
  declare module '@tiptap/core' {
7
- interface Commands {
7
+ interface Commands<ReturnType> {
8
8
  setMark: {
9
9
  /**
10
10
  * Add a mark with new attributes.
11
11
  */
12
- setMark: (typeOrName: string | MarkType, attributes?: AnyObject) => Command,
12
+ setMark: (typeOrName: string | MarkType, attributes?: Record<string, any>) => ReturnType,
13
13
  }
14
14
  }
15
15
  }
@@ -18,18 +18,41 @@ export const setMark: RawCommands['setMark'] = (typeOrName, attributes = {}) =>
18
18
  const { selection } = tr
19
19
  const { empty, ranges } = selection
20
20
  const type = getMarkType(typeOrName, state.schema)
21
- const oldAttributes = getMarkAttributes(state, type)
22
- const newAttributes = {
23
- ...oldAttributes,
24
- ...attributes,
25
- }
26
21
 
27
22
  if (dispatch) {
28
23
  if (empty) {
29
- tr.addStoredMark(type.create(newAttributes))
24
+ const oldAttributes = getMarkAttributes(state, type)
25
+
26
+ tr.addStoredMark(type.create({
27
+ ...oldAttributes,
28
+ ...attributes,
29
+ }))
30
30
  } else {
31
31
  ranges.forEach(range => {
32
- tr.addMark(range.$from.pos, range.$to.pos, type.create(newAttributes))
32
+ const from = range.$from.pos
33
+ const to = range.$to.pos
34
+
35
+ state.doc.nodesBetween(from, to, (node, pos) => {
36
+ const trimmedFrom = Math.max(pos, from)
37
+ const trimmedTo = Math.min(pos + node.nodeSize, to)
38
+ const someHasMark = node.marks.find(mark => mark.type === type)
39
+
40
+ // if there is already a mark of this type
41
+ // we know that we have to merge its attributes
42
+ // otherwise we add a fresh new mark
43
+ if (someHasMark) {
44
+ node.marks.forEach(mark => {
45
+ if (type === mark.type) {
46
+ tr.addMark(trimmedFrom, trimmedTo, type.create({
47
+ ...mark.attrs,
48
+ ...attributes,
49
+ }))
50
+ }
51
+ })
52
+ } else {
53
+ tr.addMark(trimmedFrom, trimmedTo, type.create(attributes))
54
+ }
55
+ })
33
56
  })
34
57
  }
35
58
  }
@@ -0,0 +1,18 @@
1
+ import { RawCommands } from '../types'
2
+
3
+ declare module '@tiptap/core' {
4
+ interface Commands<ReturnType> {
5
+ setMeta: {
6
+ /**
7
+ * Store a metadata property in the current transaction.
8
+ */
9
+ setMeta: (key: string, value: any) => ReturnType,
10
+ }
11
+ }
12
+ }
13
+
14
+ export const setMeta: RawCommands['setMeta'] = (key, value) => ({ tr }) => {
15
+ tr.setMeta(key, value)
16
+
17
+ return true
18
+ }
@@ -1,21 +1,42 @@
1
1
  import { NodeType } from 'prosemirror-model'
2
2
  import { setBlockType } from 'prosemirror-commands'
3
- import { AnyObject, Command, RawCommands } from '../types'
4
- import getNodeType from '../helpers/getNodeType'
3
+ import { RawCommands } from '../types'
4
+ import { getNodeType } from '../helpers/getNodeType'
5
5
 
6
6
  declare module '@tiptap/core' {
7
- interface Commands {
7
+ interface Commands<ReturnType> {
8
8
  setNode: {
9
9
  /**
10
10
  * Replace a given range with a node.
11
11
  */
12
- setNode: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
12
+ setNode: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
13
13
  }
14
14
  }
15
15
  }
16
16
 
17
- export const setNode: RawCommands['setNode'] = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
17
+ export const setNode: RawCommands['setNode'] = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {
18
18
  const type = getNodeType(typeOrName, state.schema)
19
19
 
20
- return setBlockType(type, attributes)(state, dispatch)
20
+ // TODO: use a fallback like insertContent?
21
+ if (!type.isTextblock) {
22
+ console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.')
23
+
24
+ return false
25
+ }
26
+
27
+ return chain()
28
+ // try to convert node to default node if needed
29
+ .command(({ commands }) => {
30
+ const canSetBlock = setBlockType(type, attributes)(state)
31
+
32
+ if (canSetBlock) {
33
+ return true
34
+ }
35
+
36
+ return commands.clearNodes()
37
+ })
38
+ .command(({ state: updatedState }) => {
39
+ return setBlockType(type, attributes)(updatedState, dispatch)
40
+ })
41
+ .run()
21
42
  }
@@ -0,0 +1,28 @@
1
+ import { Selection, NodeSelection } from 'prosemirror-state'
2
+ import { minMax } from '../utilities/minMax'
3
+ import { RawCommands } from '../types'
4
+
5
+ declare module '@tiptap/core' {
6
+ interface Commands<ReturnType> {
7
+ setNodeSelection: {
8
+ /**
9
+ * Creates a NodeSelection.
10
+ */
11
+ setNodeSelection: (position: number) => ReturnType,
12
+ }
13
+ }
14
+ }
15
+
16
+ export const setNodeSelection: RawCommands['setNodeSelection'] = position => ({ tr, dispatch }) => {
17
+ if (dispatch) {
18
+ const { doc } = tr
19
+ const minPos = Selection.atStart(doc).from
20
+ const maxPos = Selection.atEnd(doc).to
21
+ const resolvedPos = minMax(position, minPos, maxPos)
22
+ const selection = NodeSelection.create(doc, resolvedPos)
23
+
24
+ tr.setSelection(selection)
25
+ }
26
+
27
+ return true
28
+ }
@@ -0,0 +1,32 @@
1
+ import { Selection, TextSelection } from 'prosemirror-state'
2
+ import { minMax } from '../utilities/minMax'
3
+ import { RawCommands, Range } from '../types'
4
+
5
+ declare module '@tiptap/core' {
6
+ interface Commands<ReturnType> {
7
+ setTextSelection: {
8
+ /**
9
+ * Creates a TextSelection.
10
+ */
11
+ setTextSelection: (position: number | Range) => ReturnType,
12
+ }
13
+ }
14
+ }
15
+
16
+ export const setTextSelection: RawCommands['setTextSelection'] = position => ({ tr, dispatch }) => {
17
+ if (dispatch) {
18
+ const { doc } = tr
19
+ const { from, to } = typeof position === 'number'
20
+ ? { from: position, to: position }
21
+ : position
22
+ const minPos = 0
23
+ const maxPos = tr.doc.content.size
24
+ const resolvedFrom = minMax(from, minPos, maxPos)
25
+ const resolvedEnd = minMax(to, minPos, maxPos)
26
+ const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
27
+
28
+ tr.setSelection(selection)
29
+ }
30
+
31
+ return true
32
+ }
@@ -1,15 +1,15 @@
1
1
  import { sinkListItem as originalSinkListItem } from 'prosemirror-schema-list'
2
2
  import { NodeType } from 'prosemirror-model'
3
- import { Command, RawCommands } from '../types'
4
- import getNodeType from '../helpers/getNodeType'
3
+ import { RawCommands } from '../types'
4
+ import { getNodeType } from '../helpers/getNodeType'
5
5
 
6
6
  declare module '@tiptap/core' {
7
- interface Commands {
7
+ interface Commands<ReturnType> {
8
8
  sinkListItem: {
9
9
  /**
10
10
  * Sink the list item down into an inner list.
11
11
  */
12
- sinkListItem: (typeOrName: string | NodeType) => Command,
12
+ sinkListItem: (typeOrName: string | NodeType) => ReturnType,
13
13
  }
14
14
  }
15
15
  }
@@ -1,11 +1,11 @@
1
1
  import { canSplit } from 'prosemirror-transform'
2
- import { ContentMatch, Fragment } from 'prosemirror-model'
2
+ import { ContentMatch } from 'prosemirror-model'
3
3
  import { EditorState, NodeSelection, TextSelection } from 'prosemirror-state'
4
- import { Command, RawCommands } from '../types'
5
- import getSplittedAttributes from '../helpers/getSplittedAttributes'
4
+ import { RawCommands } from '../types'
5
+ import { getSplittedAttributes } from '../helpers/getSplittedAttributes'
6
6
 
7
7
  function defaultBlockAt(match: ContentMatch) {
8
- for (let i = 0; i < match.edgeCount; i + 1) {
8
+ for (let i = 0; i < match.edgeCount; i += 1) {
9
9
  const { type } = match.edge(i)
10
10
 
11
11
  if (type.isTextblock && !type.hasRequiredAttrs()) {
@@ -27,12 +27,12 @@ function ensureMarks(state: EditorState, splittableMarks?: string[]) {
27
27
  }
28
28
 
29
29
  declare module '@tiptap/core' {
30
- interface Commands {
30
+ interface Commands<ReturnType> {
31
31
  splitBlock: {
32
32
  /**
33
33
  * Forks a new node from an existing node.
34
34
  */
35
- splitBlock: (options?: { keepMarks?: boolean }) => Command,
35
+ splitBlock: (options?: { keepMarks?: boolean }) => ReturnType,
36
36
  }
37
37
  }
38
38
  }
@@ -110,12 +110,17 @@ export const splitBlock: RawCommands['splitBlock'] = ({ keepMarks = true } = {})
110
110
  tr.split(tr.mapping.map($from.pos), 1, types)
111
111
 
112
112
  if (
113
- !atEnd
113
+ deflt
114
+ && !atEnd
114
115
  && !$from.parentOffset
115
116
  && $from.parent.type !== deflt
116
- && $from.node(-1).canReplace($from.index(-1), $from.indexAfter(-1), Fragment.from(deflt?.create()))
117
117
  ) {
118
- tr.setNodeMarkup(tr.mapping.map($from.before()), deflt || undefined)
118
+ const first = tr.mapping.map($from.before())
119
+ const $first = tr.doc.resolve(first)
120
+
121
+ if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {
122
+ tr.setNodeMarkup(tr.mapping.map($from.before()), deflt)
123
+ }
119
124
  }
120
125
  }
121
126
 
@@ -6,17 +6,17 @@ import {
6
6
  } from 'prosemirror-model'
7
7
  import { canSplit } from 'prosemirror-transform'
8
8
  import { TextSelection } from 'prosemirror-state'
9
- import { Command, RawCommands } from '../types'
10
- import getNodeType from '../helpers/getNodeType'
11
- import getSplittedAttributes from '../helpers/getSplittedAttributes'
9
+ import { RawCommands } from '../types'
10
+ import { getNodeType } from '../helpers/getNodeType'
11
+ import { getSplittedAttributes } from '../helpers/getSplittedAttributes'
12
12
 
13
13
  declare module '@tiptap/core' {
14
- interface Commands {
14
+ interface Commands<ReturnType> {
15
15
  splitListItem: {
16
16
  /**
17
17
  * Splits one list item into two list items.
18
18
  */
19
- splitListItem: (typeOrName: string | NodeType) => Command,
19
+ splitListItem: (typeOrName: string | NodeType) => ReturnType,
20
20
  }
21
21
  }
22
22
  }
@@ -57,14 +57,26 @@ export const splitListItem: RawCommands['splitListItem'] = typeOrName => ({
57
57
 
58
58
  if (dispatch) {
59
59
  let wrap = Fragment.empty
60
- const keepItem = $from.index(-1) > 0
60
+ // eslint-disable-next-line
61
+ const depthBefore = $from.index(-1)
62
+ ? 1
63
+ : $from.index(-2)
64
+ ? 2
65
+ : 3
61
66
 
62
67
  // Build a fragment containing empty versions of the structure
63
68
  // from the outer list item to the parent node of the cursor
64
- for (let d = $from.depth - (keepItem ? 1 : 2); d >= $from.depth - 3; d -= 1) {
69
+ for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {
65
70
  wrap = Fragment.from($from.node(d).copy(wrap))
66
71
  }
67
72
 
73
+ // eslint-disable-next-line
74
+ const depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount
75
+ ? 1
76
+ : $from.indexAfter(-2) < $from.node(-3).childCount
77
+ ? 2
78
+ : 3
79
+
68
80
  // Add a second list item with an empty default start node
69
81
  const newNextTypeAttributes = getSplittedAttributes(
70
82
  extensionAttributes,
@@ -72,16 +84,30 @@ export const splitListItem: RawCommands['splitListItem'] = typeOrName => ({
72
84
  $from.node().attrs,
73
85
  )
74
86
  const nextType = type.contentMatch.defaultType?.createAndFill(newNextTypeAttributes) || undefined
87
+
75
88
  wrap = wrap.append(Fragment.from(type.createAndFill(null, nextType) || undefined))
76
89
 
77
- tr
78
- .replace(
79
- $from.before(keepItem ? undefined : -1),
80
- $from.after(-3),
81
- new Slice(wrap, keepItem ? 3 : 2, 2),
82
- )
83
- .setSelection(TextSelection.near(tr.doc.resolve($from.pos + (keepItem ? 3 : 2))))
84
- .scrollIntoView()
90
+ const start = $from.before($from.depth - (depthBefore - 1))
91
+
92
+ tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0))
93
+
94
+ let sel = -1
95
+
96
+ tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {
97
+ if (sel > -1) {
98
+ return false
99
+ }
100
+
101
+ if (n.isTextblock && n.content.size === 0) {
102
+ sel = pos + 1
103
+ }
104
+ })
105
+
106
+ if (sel > -1) {
107
+ tr.setSelection(TextSelection.near(tr.doc.resolve(sel)))
108
+ }
109
+
110
+ tr.scrollIntoView()
85
111
  }
86
112
 
87
113
  return true
@@ -1,16 +1,70 @@
1
1
  import { NodeType } from 'prosemirror-model'
2
- import { Command, RawCommands } from '../types'
3
- import getNodeType from '../helpers/getNodeType'
4
- import findParentNode from '../helpers/findParentNode'
5
- import isList from '../helpers/isList'
2
+ import { Transaction } from 'prosemirror-state'
3
+ import { canJoin } from 'prosemirror-transform'
4
+ import { RawCommands } from '../types'
5
+ import { getNodeType } from '../helpers/getNodeType'
6
+ import { findParentNode } from '../helpers/findParentNode'
7
+ import { isList } from '../helpers/isList'
8
+
9
+ const joinListBackwards = (tr: Transaction, listType: NodeType): boolean => {
10
+ const list = findParentNode(node => node.type === listType)(tr.selection)
11
+
12
+ if (!list) {
13
+ return true
14
+ }
15
+
16
+ const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth)
17
+
18
+ if (before === undefined) {
19
+ return true
20
+ }
21
+
22
+ const nodeBefore = tr.doc.nodeAt(before)
23
+ const canJoinBackwards = list.node.type === nodeBefore?.type
24
+ && canJoin(tr.doc, list.pos)
25
+
26
+ if (!canJoinBackwards) {
27
+ return true
28
+ }
29
+
30
+ tr.join(list.pos)
31
+
32
+ return true
33
+ }
34
+
35
+ const joinListForwards = (tr: Transaction, listType: NodeType): boolean => {
36
+ const list = findParentNode(node => node.type === listType)(tr.selection)
37
+
38
+ if (!list) {
39
+ return true
40
+ }
41
+
42
+ const after = tr.doc.resolve(list.start).after(list.depth)
43
+
44
+ if (after === undefined) {
45
+ return true
46
+ }
47
+
48
+ const nodeAfter = tr.doc.nodeAt(after)
49
+ const canJoinForwards = list.node.type === nodeAfter?.type
50
+ && canJoin(tr.doc, after)
51
+
52
+ if (!canJoinForwards) {
53
+ return true
54
+ }
55
+
56
+ tr.join(after)
57
+
58
+ return true
59
+ }
6
60
 
7
61
  declare module '@tiptap/core' {
8
- interface Commands {
62
+ interface Commands<ReturnType> {
9
63
  toggleList: {
10
64
  /**
11
65
  * Toggle between different list types.
12
66
  */
13
- toggleList: (listTypeOrName: string | NodeType, itemTypeOrName: string | NodeType) => Command,
67
+ toggleList: (listTypeOrName: string | NodeType, itemTypeOrName: string | NodeType) => ReturnType,
14
68
  }
15
69
  }
16
70
  }
@@ -18,7 +72,7 @@ declare module '@tiptap/core' {
18
72
  export const toggleList: RawCommands['toggleList'] = (listTypeOrName, itemTypeOrName) => ({
19
73
  editor, tr, state, dispatch, chain, commands, can,
20
74
  }) => {
21
- const { extensions } = editor.options
75
+ const { extensions } = editor.extensionManager
22
76
  const listType = getNodeType(listTypeOrName, state.schema)
23
77
  const itemType = getNodeType(itemTypeOrName, state.schema)
24
78
  const { selection } = state
@@ -43,21 +97,31 @@ export const toggleList: RawCommands['toggleList'] = (listTypeOrName, itemTypeOr
43
97
  && listType.validContent(parentList.node.content)
44
98
  && dispatch
45
99
  ) {
46
- tr.setNodeMarkup(parentList.pos, listType)
100
+ return chain()
101
+ .command(() => {
102
+ tr.setNodeMarkup(parentList.pos, listType)
47
103
 
48
- return true
104
+ return true
105
+ })
106
+ .command(() => joinListBackwards(tr, listType))
107
+ .command(() => joinListForwards(tr, listType))
108
+ .run()
49
109
  }
50
110
  }
51
111
 
52
- const canWrapInList = can().wrapInList(listType)
112
+ return chain()
113
+ // try to convert node to default node if needed
114
+ .command(() => {
115
+ const canWrapInList = can().wrapInList(listType)
53
116
 
54
- // try to convert node to paragraph if needed
55
- if (!canWrapInList) {
56
- return chain()
57
- .clearNodes()
58
- .wrapInList(listType)
59
- .run()
60
- }
117
+ if (canWrapInList) {
118
+ return true
119
+ }
61
120
 
62
- return commands.wrapInList(listType)
121
+ return commands.clearNodes()
122
+ })
123
+ .wrapInList(listType)
124
+ .command(() => joinListBackwards(tr, listType))
125
+ .command(() => joinListForwards(tr, listType))
126
+ .run()
63
127
  }