@tiptap/core 2.0.0-beta.2 → 2.0.0-beta.200

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/README.md +2 -2
  2. package/dist/packages/core/src/CommandManager.d.ts +13 -6
  3. package/dist/packages/core/src/Editor.d.ts +27 -25
  4. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  5. package/dist/packages/core/src/Extension.d.ts +103 -26
  6. package/dist/packages/core/src/ExtensionManager.d.ts +8 -12
  7. package/dist/packages/core/src/InputRule.d.ts +42 -0
  8. package/dist/packages/core/src/Mark.d.ts +148 -31
  9. package/dist/packages/core/src/Node.d.ts +162 -33
  10. package/dist/packages/core/src/NodeView.d.ts +27 -0
  11. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  12. package/dist/packages/core/src/Tracker.d.ts +11 -0
  13. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  14. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  15. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  16. package/dist/packages/core/src/commands/command.d.ts +2 -2
  17. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  18. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  19. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  20. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  21. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  22. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  23. package/dist/packages/core/src/commands/extendMarkRange.d.ts +3 -3
  24. package/dist/packages/core/src/commands/first.d.ts +3 -3
  25. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  26. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  27. package/dist/packages/core/src/commands/index.d.ts +50 -0
  28. package/dist/packages/core/src/commands/insertContent.d.ts +16 -0
  29. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  30. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  31. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  33. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
  38. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  39. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  40. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  41. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  42. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  43. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  44. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  45. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  46. package/dist/packages/core/src/commands/setMark.d.ts +3 -3
  47. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  48. package/dist/packages/core/src/commands/setNode.d.ts +3 -3
  49. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  50. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  51. package/dist/packages/core/src/commands/sinkListItem.d.ts +3 -3
  52. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  53. package/dist/packages/core/src/commands/splitListItem.d.ts +3 -3
  54. package/dist/packages/core/src/commands/toggleList.d.ts +3 -3
  55. package/dist/packages/core/src/commands/toggleMark.d.ts +8 -3
  56. package/dist/packages/core/src/commands/toggleNode.d.ts +3 -3
  57. package/dist/packages/core/src/commands/toggleWrap.d.ts +3 -3
  58. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  59. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  60. package/dist/packages/core/src/commands/unsetMark.d.ts +8 -3
  61. package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
  62. package/dist/packages/core/src/commands/wrapIn.d.ts +3 -3
  63. package/dist/packages/core/src/commands/wrapInList.d.ts +3 -3
  64. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  65. package/dist/packages/core/src/extensions/commands.d.ts +2 -91
  66. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  67. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  69. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  70. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  71. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  73. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -0
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +7 -0
  75. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  76. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  77. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  78. package/dist/packages/core/src/helpers/findParentNode.d.ts +2 -3
  79. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +2 -2
  80. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  81. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  82. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  83. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  84. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
  85. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  86. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  87. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  88. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  89. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +2 -3
  90. package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
  91. package/dist/packages/core/src/helpers/getMarkType.d.ts +1 -1
  92. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  93. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +2 -3
  94. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
  96. package/dist/packages/core/src/helpers/getSchema.d.ts +1 -1
  97. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  98. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +1 -1
  99. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +1 -1
  100. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  101. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  102. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  103. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
  104. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  105. package/dist/packages/core/src/helpers/index.d.ts +33 -0
  106. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  107. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  108. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  109. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  110. package/dist/packages/core/src/helpers/isMarkActive.d.ts +2 -3
  111. package/dist/packages/core/src/helpers/isNodeActive.d.ts +2 -3
  112. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -0
  113. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  114. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  115. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  116. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  117. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  118. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  119. package/dist/packages/core/src/index.d.ts +15 -20
  120. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  121. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  122. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  123. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  124. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  125. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  126. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  127. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  128. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  129. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  130. package/dist/packages/core/src/style.d.ts +1 -2
  131. package/dist/packages/core/src/types.d.ts +120 -53
  132. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  133. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  135. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  139. package/dist/packages/core/src/utilities/index.d.ts +3 -0
  140. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  142. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  145. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  146. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  147. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  148. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  149. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  150. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  151. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  152. package/dist/tiptap-core.cjs.js +2896 -1261
  153. package/dist/tiptap-core.cjs.js.map +1 -1
  154. package/dist/tiptap-core.esm.js +2889 -1290
  155. package/dist/tiptap-core.esm.js.map +1 -1
  156. package/dist/tiptap-core.umd.js +2899 -1263
  157. package/dist/tiptap-core.umd.js.map +1 -1
  158. package/package.json +16 -20
  159. package/src/CommandManager.ts +64 -65
  160. package/src/Editor.ts +133 -98
  161. package/src/EventEmitter.ts +14 -4
  162. package/src/Extension.ts +198 -41
  163. package/src/ExtensionManager.ts +263 -78
  164. package/src/InputRule.ts +265 -0
  165. package/src/Mark.ts +285 -49
  166. package/src/Node.ts +284 -56
  167. package/src/NodeView.ts +261 -0
  168. package/src/PasteRule.ts +280 -0
  169. package/src/Tracker.ts +42 -0
  170. package/src/commands/blur.ts +12 -6
  171. package/src/commands/clearContent.ts +3 -3
  172. package/src/commands/clearNodes.ts +32 -18
  173. package/src/commands/command.ts +2 -2
  174. package/src/commands/createParagraphNear.ts +4 -3
  175. package/src/commands/deleteNode.ts +37 -0
  176. package/src/commands/deleteRange.ts +3 -3
  177. package/src/commands/deleteSelection.ts +4 -3
  178. package/src/commands/enter.ts +3 -3
  179. package/src/commands/exitCode.ts +4 -3
  180. package/src/commands/extendMarkRange.ts +12 -11
  181. package/src/commands/first.ts +3 -3
  182. package/src/commands/focus.ts +47 -44
  183. package/src/commands/forEach.ts +24 -0
  184. package/src/commands/index.ts +50 -0
  185. package/src/commands/insertContent.ts +24 -0
  186. package/src/commands/insertContentAt.ts +108 -0
  187. package/src/commands/joinBackward.ts +4 -3
  188. package/src/commands/joinForward.ts +4 -3
  189. package/src/commands/keyboardShortcut.ts +6 -6
  190. package/src/commands/lift.ts +6 -5
  191. package/src/commands/liftEmptyBlock.ts +4 -3
  192. package/src/commands/liftListItem.ts +6 -5
  193. package/src/commands/newlineInCode.ts +4 -3
  194. package/src/commands/resetAttributes.ts +62 -0
  195. package/src/commands/scrollIntoView.ts +3 -3
  196. package/src/commands/selectAll.ts +8 -6
  197. package/src/commands/selectNodeBackward.ts +4 -3
  198. package/src/commands/selectNodeForward.ts +4 -3
  199. package/src/commands/selectParentNode.ts +4 -3
  200. package/src/commands/selectTextblockEnd.ts +20 -0
  201. package/src/commands/selectTextblockStart.ts +20 -0
  202. package/src/commands/setContent.ts +12 -9
  203. package/src/commands/setMark.ts +83 -15
  204. package/src/commands/setMeta.ts +18 -0
  205. package/src/commands/setNode.ts +29 -7
  206. package/src/commands/setNodeSelection.ts +27 -0
  207. package/src/commands/setTextSelection.ts +33 -0
  208. package/src/commands/sinkListItem.ts +6 -5
  209. package/src/commands/splitBlock.ts +20 -23
  210. package/src/commands/splitListItem.ts +45 -18
  211. package/src/commands/toggleList.ts +83 -18
  212. package/src/commands/toggleMark.ts +18 -7
  213. package/src/commands/toggleNode.ts +6 -5
  214. package/src/commands/toggleWrap.ts +9 -9
  215. package/src/commands/undoInputRule.ts +34 -5
  216. package/src/commands/unsetAllMarks.ts +8 -10
  217. package/src/commands/unsetMark.ts +31 -13
  218. package/src/commands/updateAttributes.ts +73 -0
  219. package/src/commands/wrapIn.ts +5 -10
  220. package/src/commands/wrapInList.ts +6 -5
  221. package/src/extensions/clipboardTextSerializer.ts +14 -35
  222. package/src/extensions/commands.ts +3 -135
  223. package/src/extensions/editable.ts +1 -0
  224. package/src/extensions/focusEvents.ts +3 -5
  225. package/src/extensions/index.ts +1 -0
  226. package/src/extensions/keymap.ts +110 -13
  227. package/src/extensions/tabindex.ts +18 -0
  228. package/src/helpers/combineTransactionSteps.ts +18 -0
  229. package/src/helpers/createChainableState.ts +38 -0
  230. package/src/helpers/createDocument.ts +12 -0
  231. package/src/helpers/createNodeFromContent.ts +57 -0
  232. package/src/helpers/defaultBlockAt.ts +13 -0
  233. package/src/helpers/findChildren.ts +18 -0
  234. package/src/helpers/findChildrenInRange.ts +32 -0
  235. package/src/helpers/findParentNode.ts +3 -2
  236. package/src/helpers/findParentNodeClosestToPos.ts +3 -2
  237. package/src/helpers/generateHTML.ts +6 -5
  238. package/src/helpers/generateJSON.ts +14 -0
  239. package/src/helpers/generateText.ts +30 -0
  240. package/src/helpers/getAttributes.ts +28 -0
  241. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  242. package/src/helpers/getChangedRanges.ts +83 -0
  243. package/src/helpers/getDebugJSON.ts +54 -0
  244. package/src/helpers/getExtensionField.ts +25 -0
  245. package/src/helpers/getHTMLFromFragment.ts +6 -5
  246. package/src/helpers/getMarkAttributes.ts +14 -10
  247. package/src/helpers/getMarkRange.ts +41 -8
  248. package/src/helpers/getMarkType.ts +5 -1
  249. package/src/helpers/getMarksBetween.ts +32 -10
  250. package/src/helpers/getNodeAttributes.ts +9 -9
  251. package/src/helpers/getNodeType.ts +5 -1
  252. package/src/helpers/getRenderedAttributes.ts +6 -7
  253. package/src/helpers/getSchema.ts +7 -137
  254. package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
  255. package/src/helpers/getSchemaTypeByName.ts +2 -10
  256. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  257. package/src/helpers/getSplittedAttributes.ts +4 -4
  258. package/src/helpers/getText.ts +19 -0
  259. package/src/helpers/getTextBetween.ts +49 -0
  260. package/src/helpers/getTextContentFromNodes.ts +21 -0
  261. package/src/helpers/getTextSerializersFromSchema.ts +10 -0
  262. package/src/helpers/index.ts +33 -0
  263. package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
  264. package/src/helpers/isActive.ts +5 -5
  265. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  266. package/src/helpers/isList.ts +14 -7
  267. package/src/helpers/isMarkActive.ts +45 -20
  268. package/src/helpers/isNodeActive.ts +28 -35
  269. package/src/helpers/isNodeEmpty.ts +8 -0
  270. package/src/helpers/isNodeSelection.ts +2 -3
  271. package/src/helpers/isTextSelection.ts +2 -3
  272. package/src/helpers/posToDOMRect.ts +35 -0
  273. package/src/helpers/resolveFocusPosition.ts +43 -0
  274. package/src/helpers/selectionToInsertionEnd.ts +2 -2
  275. package/src/helpers/splitExtensions.ts +3 -3
  276. package/src/index.ts +16 -22
  277. package/src/inputRules/index.ts +5 -0
  278. package/src/inputRules/markInputRule.ts +59 -39
  279. package/src/inputRules/nodeInputRule.ts +45 -11
  280. package/src/inputRules/textInputRule.ts +35 -0
  281. package/src/inputRules/textblockTypeInputRule.ts +38 -0
  282. package/src/inputRules/wrappingInputRule.ts +60 -0
  283. package/src/pasteRules/index.ts +3 -0
  284. package/src/pasteRules/markPasteRule.ts +62 -53
  285. package/src/pasteRules/nodePasteRule.ts +39 -0
  286. package/src/pasteRules/textPasteRule.ts +35 -0
  287. package/src/style.ts +16 -3
  288. package/src/types.ts +132 -47
  289. package/src/utilities/callOrReturn.ts +6 -3
  290. package/src/utilities/createStyleTag.ts +12 -1
  291. package/src/utilities/deleteProps.ts +2 -4
  292. package/src/utilities/elementFromString.ts +4 -5
  293. package/src/utilities/escapeForRegEx.ts +4 -0
  294. package/src/utilities/findDuplicates.ts +5 -0
  295. package/src/utilities/fromString.ts +2 -2
  296. package/src/utilities/index.ts +3 -0
  297. package/src/utilities/isEmptyObject.ts +2 -2
  298. package/src/utilities/isFunction.ts +3 -0
  299. package/src/utilities/isMacOS.ts +5 -0
  300. package/src/utilities/isNumber.ts +3 -0
  301. package/src/utilities/isPlainObject.ts +8 -5
  302. package/src/utilities/isRegExp.ts +3 -0
  303. package/src/utilities/isString.ts +3 -0
  304. package/src/utilities/isiOS.ts +12 -0
  305. package/src/utilities/mergeAttributes.ts +2 -3
  306. package/src/utilities/mergeDeep.ts +2 -3
  307. package/src/utilities/minMax.ts +1 -1
  308. package/src/utilities/objectIncludes.ts +17 -5
  309. package/src/utilities/removeDuplicates.ts +15 -0
  310. package/CHANGELOG.md +0 -198
  311. package/LICENSE.md +0 -21
  312. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  313. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  314. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  315. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  316. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  317. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  318. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  319. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  320. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  321. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  322. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  323. package/src/commands/insertHTML.ts +0 -28
  324. package/src/commands/insertText.ts +0 -20
  325. package/src/commands/replace.ts +0 -20
  326. package/src/commands/replaceRange.ts +0 -36
  327. package/src/commands/resetNodeAttributes.ts +0 -29
  328. package/src/commands/updateNodeAttributes.ts +0 -31
  329. package/src/utilities/isClass.ts +0 -7
  330. package/src/utilities/isObject.ts +0 -10
  331. package/src/utilities/removeElement.ts +0 -5
@@ -1,22 +1,23 @@
1
1
  import {
2
- NodeType,
3
- Node as ProseMirrorNode,
4
2
  Fragment,
3
+ Node as ProseMirrorNode,
4
+ NodeType,
5
5
  Slice,
6
6
  } from 'prosemirror-model'
7
- import { canSplit } from 'prosemirror-transform'
8
7
  import { TextSelection } from 'prosemirror-state'
9
- import { Command, RawCommands } from '../types'
10
- import getNodeType from '../helpers/getNodeType'
11
- import getSplittedAttributes from '../helpers/getSplittedAttributes'
8
+ import { canSplit } from 'prosemirror-transform'
9
+
10
+ import { getNodeType } from '../helpers/getNodeType'
11
+ import { getSplittedAttributes } from '../helpers/getSplittedAttributes'
12
+ import { RawCommands } from '../types'
12
13
 
13
14
  declare module '@tiptap/core' {
14
- interface Commands {
15
+ interface Commands<ReturnType> {
15
16
  splitListItem: {
16
17
  /**
17
18
  * Splits one list item into two list items.
18
19
  */
19
- splitListItem: (typeOrName: string | NodeType) => Command,
20
+ splitListItem: (typeOrName: string | NodeType) => ReturnType,
20
21
  }
21
22
  }
22
23
  }
@@ -57,14 +58,26 @@ export const splitListItem: RawCommands['splitListItem'] = typeOrName => ({
57
58
 
58
59
  if (dispatch) {
59
60
  let wrap = Fragment.empty
60
- const keepItem = $from.index(-1) > 0
61
+ // eslint-disable-next-line
62
+ const depthBefore = $from.index(-1)
63
+ ? 1
64
+ : $from.index(-2)
65
+ ? 2
66
+ : 3
61
67
 
62
68
  // Build a fragment containing empty versions of the structure
63
69
  // 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) {
70
+ for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {
65
71
  wrap = Fragment.from($from.node(d).copy(wrap))
66
72
  }
67
73
 
74
+ // eslint-disable-next-line
75
+ const depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount
76
+ ? 1
77
+ : $from.indexAfter(-2) < $from.node(-3).childCount
78
+ ? 2
79
+ : 3
80
+
68
81
  // Add a second list item with an empty default start node
69
82
  const newNextTypeAttributes = getSplittedAttributes(
70
83
  extensionAttributes,
@@ -72,16 +85,30 @@ export const splitListItem: RawCommands['splitListItem'] = typeOrName => ({
72
85
  $from.node().attrs,
73
86
  )
74
87
  const nextType = type.contentMatch.defaultType?.createAndFill(newNextTypeAttributes) || undefined
88
+
75
89
  wrap = wrap.append(Fragment.from(type.createAndFill(null, nextType) || undefined))
76
90
 
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()
91
+ const start = $from.before($from.depth - (depthBefore - 1))
92
+
93
+ tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0))
94
+
95
+ let sel = -1
96
+
97
+ tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {
98
+ if (sel > -1) {
99
+ return false
100
+ }
101
+
102
+ if (n.isTextblock && n.content.size === 0) {
103
+ sel = pos + 1
104
+ }
105
+ })
106
+
107
+ if (sel > -1) {
108
+ tr.setSelection(TextSelection.near(tr.doc.resolve(sel)))
109
+ }
110
+
111
+ tr.scrollIntoView()
85
112
  }
86
113
 
87
114
  return true
@@ -1,16 +1,71 @@
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
+
5
+ import { findParentNode } from '../helpers/findParentNode'
6
+ import { getNodeType } from '../helpers/getNodeType'
7
+ import { isList } from '../helpers/isList'
8
+ import { RawCommands } from '../types'
9
+
10
+ const joinListBackwards = (tr: Transaction, listType: NodeType): boolean => {
11
+ const list = findParentNode(node => node.type === listType)(tr.selection)
12
+
13
+ if (!list) {
14
+ return true
15
+ }
16
+
17
+ const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth)
18
+
19
+ if (before === undefined) {
20
+ return true
21
+ }
22
+
23
+ const nodeBefore = tr.doc.nodeAt(before)
24
+ const canJoinBackwards = list.node.type === nodeBefore?.type
25
+ && canJoin(tr.doc, list.pos)
26
+
27
+ if (!canJoinBackwards) {
28
+ return true
29
+ }
30
+
31
+ tr.join(list.pos)
32
+
33
+ return true
34
+ }
35
+
36
+ const joinListForwards = (tr: Transaction, listType: NodeType): boolean => {
37
+ const list = findParentNode(node => node.type === listType)(tr.selection)
38
+
39
+ if (!list) {
40
+ return true
41
+ }
42
+
43
+ const after = tr.doc.resolve(list.start).after(list.depth)
44
+
45
+ if (after === undefined) {
46
+ return true
47
+ }
48
+
49
+ const nodeAfter = tr.doc.nodeAt(after)
50
+ const canJoinForwards = list.node.type === nodeAfter?.type
51
+ && canJoin(tr.doc, after)
52
+
53
+ if (!canJoinForwards) {
54
+ return true
55
+ }
56
+
57
+ tr.join(after)
58
+
59
+ return true
60
+ }
6
61
 
7
62
  declare module '@tiptap/core' {
8
- interface Commands {
63
+ interface Commands<ReturnType> {
9
64
  toggleList: {
10
65
  /**
11
66
  * Toggle between different list types.
12
67
  */
13
- toggleList: (listTypeOrName: string | NodeType, itemTypeOrName: string | NodeType) => Command,
68
+ toggleList: (listTypeOrName: string | NodeType, itemTypeOrName: string | NodeType) => ReturnType,
14
69
  }
15
70
  }
16
71
  }
@@ -18,7 +73,7 @@ declare module '@tiptap/core' {
18
73
  export const toggleList: RawCommands['toggleList'] = (listTypeOrName, itemTypeOrName) => ({
19
74
  editor, tr, state, dispatch, chain, commands, can,
20
75
  }) => {
21
- const { extensions } = editor.options
76
+ const { extensions } = editor.extensionManager
22
77
  const listType = getNodeType(listTypeOrName, state.schema)
23
78
  const itemType = getNodeType(itemTypeOrName, state.schema)
24
79
  const { selection } = state
@@ -43,21 +98,31 @@ export const toggleList: RawCommands['toggleList'] = (listTypeOrName, itemTypeOr
43
98
  && listType.validContent(parentList.node.content)
44
99
  && dispatch
45
100
  ) {
46
- tr.setNodeMarkup(parentList.pos, listType)
101
+ return chain()
102
+ .command(() => {
103
+ tr.setNodeMarkup(parentList.pos, listType)
47
104
 
48
- return true
105
+ return true
106
+ })
107
+ .command(() => joinListBackwards(tr, listType))
108
+ .command(() => joinListForwards(tr, listType))
109
+ .run()
49
110
  }
50
111
  }
51
112
 
52
- const canWrapInList = can().wrapInList(listType)
113
+ return chain()
114
+ // try to convert node to default node if needed
115
+ .command(() => {
116
+ const canWrapInList = can().wrapInList(listType)
53
117
 
54
- // try to convert node to paragraph if needed
55
- if (!canWrapInList) {
56
- return chain()
57
- .clearNodes()
58
- .wrapInList(listType)
59
- .run()
60
- }
118
+ if (canWrapInList) {
119
+ return true
120
+ }
61
121
 
62
- return commands.wrapInList(listType)
122
+ return commands.clearNodes()
123
+ })
124
+ .wrapInList(listType)
125
+ .command(() => joinListBackwards(tr, listType))
126
+ .command(() => joinListForwards(tr, listType))
127
+ .run()
63
128
  }
@@ -1,25 +1,36 @@
1
1
  import { MarkType } from 'prosemirror-model'
2
- import { AnyObject, Command, RawCommands } from '../types'
3
- import getMarkType from '../helpers/getMarkType'
4
- import isMarkActive from '../helpers/isMarkActive'
2
+
3
+ import { getMarkType } from '../helpers/getMarkType'
4
+ import { isMarkActive } from '../helpers/isMarkActive'
5
+ import { RawCommands } from '../types'
5
6
 
6
7
  declare module '@tiptap/core' {
7
- interface Commands {
8
+ interface Commands<ReturnType> {
8
9
  toggleMark: {
9
10
  /**
10
11
  * Toggle a mark on and off.
11
12
  */
12
- toggleMark: (typeOrName: string | MarkType, attributes?: AnyObject) => Command,
13
+ toggleMark: (
14
+ typeOrName: string | MarkType,
15
+ attributes?: Record<string, any>,
16
+ options?: {
17
+ /**
18
+ * Removes the mark even across the current selection. Defaults to `false`.
19
+ */
20
+ extendEmptyMarkRange?: boolean,
21
+ },
22
+ ) => ReturnType,
13
23
  }
14
24
  }
15
25
  }
16
26
 
17
- export const toggleMark: RawCommands['toggleMark'] = (typeOrName, attributes = {}) => ({ state, commands }) => {
27
+ export const toggleMark: RawCommands['toggleMark'] = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {
28
+ const { extendEmptyMarkRange = false } = options
18
29
  const type = getMarkType(typeOrName, state.schema)
19
30
  const isActive = isMarkActive(state, type, attributes)
20
31
 
21
32
  if (isActive) {
22
- return commands.unsetMark(type)
33
+ return commands.unsetMark(type, { extendEmptyMarkRange })
23
34
  }
24
35
 
25
36
  return commands.setMark(type, attributes)
@@ -1,15 +1,16 @@
1
1
  import { NodeType } from 'prosemirror-model'
2
- import { AnyObject, Command, RawCommands } from '../types'
3
- import isNodeActive from '../helpers/isNodeActive'
4
- import getNodeType from '../helpers/getNodeType'
2
+
3
+ import { getNodeType } from '../helpers/getNodeType'
4
+ import { isNodeActive } from '../helpers/isNodeActive'
5
+ import { RawCommands } from '../types'
5
6
 
6
7
  declare module '@tiptap/core' {
7
- interface Commands {
8
+ interface Commands<ReturnType> {
8
9
  toggleNode: {
9
10
  /**
10
11
  * Toggle a node with another node.
11
12
  */
12
- toggleNode: (typeOrName: string | NodeType, toggleTypeOrName: string | NodeType, attributes?: AnyObject) => Command,
13
+ toggleNode: (typeOrName: string | NodeType, toggleTypeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
13
14
  }
14
15
  }
15
16
  }
@@ -1,27 +1,27 @@
1
- import { wrapIn, lift } from 'prosemirror-commands'
2
1
  import { NodeType } from 'prosemirror-model'
3
- import { AnyObject, Command, RawCommands } from '../types'
4
- import isNodeActive from '../helpers/isNodeActive'
5
- import getNodeType from '../helpers/getNodeType'
2
+
3
+ import { getNodeType } from '../helpers/getNodeType'
4
+ import { isNodeActive } from '../helpers/isNodeActive'
5
+ import { RawCommands } from '../types'
6
6
 
7
7
  declare module '@tiptap/core' {
8
- interface Commands {
8
+ interface Commands<ReturnType> {
9
9
  toggleWrap: {
10
10
  /**
11
11
  * Wraps nodes in another node, or removes an existing wrap.
12
12
  */
13
- toggleWrap: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
13
+ toggleWrap: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
14
14
  }
15
15
  }
16
16
  }
17
17
 
18
- export const toggleWrap: RawCommands['toggleWrap'] = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
18
+ export const toggleWrap: RawCommands['toggleWrap'] = (typeOrName, attributes = {}) => ({ state, commands }) => {
19
19
  const type = getNodeType(typeOrName, state.schema)
20
20
  const isActive = isNodeActive(state, type, attributes)
21
21
 
22
22
  if (isActive) {
23
- return lift(state, dispatch)
23
+ return commands.lift(type)
24
24
  }
25
25
 
26
- return wrapIn(type, attributes)(state, dispatch)
26
+ return commands.wrapIn(type, attributes)
27
27
  }
@@ -1,17 +1,46 @@
1
- import { undoInputRule as originalUndoInputRule } from 'prosemirror-inputrules'
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
  undoInputRule: {
7
6
  /**
8
7
  * Undo an input rule.
9
8
  */
10
- undoInputRule: () => Command,
9
+ undoInputRule: () => ReturnType,
11
10
  }
12
11
  }
13
12
  }
14
13
 
15
14
  export const undoInputRule: RawCommands['undoInputRule'] = () => ({ state, dispatch }) => {
16
- return originalUndoInputRule(state, dispatch)
15
+ const plugins = state.plugins
16
+
17
+ for (let i = 0; i < plugins.length; i += 1) {
18
+ const plugin = plugins[i]
19
+ let undoable
20
+
21
+ // @ts-ignore
22
+ // eslint-disable-next-line
23
+ if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {
24
+ if (dispatch) {
25
+ const tr = state.tr
26
+ const toUndo = undoable.transform
27
+
28
+ for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {
29
+ tr.step(toUndo.steps[j].invert(toUndo.docs[j]))
30
+ }
31
+
32
+ if (undoable.text) {
33
+ const marks = tr.doc.resolve(undoable.from).marks()
34
+
35
+ tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks))
36
+ } else {
37
+ tr.delete(undoable.from, undoable.to)
38
+ }
39
+ }
40
+
41
+ return true
42
+ }
43
+ }
44
+
45
+ return false
17
46
  }
@@ -1,30 +1,28 @@
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
  unsetAllMarks: {
6
6
  /**
7
7
  * Remove all marks in the current selection.
8
8
  */
9
- unsetAllMarks: () => Command,
9
+ unsetAllMarks: () => ReturnType,
10
10
  }
11
11
  }
12
12
  }
13
13
 
14
- export const unsetAllMarks: RawCommands['unsetAllMarks'] = () => ({ tr, state, dispatch }) => {
14
+ export const unsetAllMarks: RawCommands['unsetAllMarks'] = () => ({ tr, dispatch }) => {
15
15
  const { selection } = tr
16
- const { from, to, empty } = selection
16
+ const { empty, ranges } = selection
17
17
 
18
18
  if (empty) {
19
19
  return true
20
20
  }
21
21
 
22
22
  if (dispatch) {
23
- Object
24
- .entries(state.schema.marks)
25
- .forEach(([, mark]) => {
26
- tr.removeMark(from, to, mark as any)
27
- })
23
+ ranges.forEach(range => {
24
+ tr.removeMark(range.$from.pos, range.$to.pos)
25
+ })
28
26
  }
29
27
 
30
28
  return true
@@ -1,38 +1,56 @@
1
1
  import { MarkType } from 'prosemirror-model'
2
- import { Command, RawCommands } from '../types'
3
- import getMarkType from '../helpers/getMarkType'
4
- import getMarkRange from '../helpers/getMarkRange'
2
+
3
+ import { getMarkRange } from '../helpers/getMarkRange'
4
+ import { getMarkType } from '../helpers/getMarkType'
5
+ import { RawCommands } from '../types'
5
6
 
6
7
  declare module '@tiptap/core' {
7
- interface Commands {
8
+ interface Commands<ReturnType> {
8
9
  unsetMark: {
9
10
  /**
10
11
  * Remove all marks in the current selection.
11
12
  */
12
- unsetMark: (typeOrName: string | MarkType) => Command,
13
+ unsetMark: (
14
+ typeOrName: string | MarkType,
15
+ options?: {
16
+ /**
17
+ * Removes the mark even across the current selection. Defaults to `false`.
18
+ */
19
+ extendEmptyMarkRange?: boolean,
20
+ },
21
+ ) => ReturnType,
13
22
  }
14
23
  }
15
24
  }
16
25
 
17
- export const unsetMark: RawCommands['unsetMark'] = typeOrName => ({ tr, state, dispatch }) => {
26
+ export const unsetMark: RawCommands['unsetMark'] = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {
27
+ const { extendEmptyMarkRange = false } = options
18
28
  const { selection } = tr
19
29
  const type = getMarkType(typeOrName, state.schema)
20
- let { from, to } = selection
21
- const { $from, empty } = selection
30
+ const { $from, empty, ranges } = selection
31
+
32
+ if (!dispatch) {
33
+ return true
34
+ }
22
35
 
23
- if (empty) {
24
- const range = getMarkRange($from, type)
36
+ if (empty && extendEmptyMarkRange) {
37
+ let { from, to } = selection
38
+ const attrs = $from.marks().find(mark => mark.type === type)?.attrs
39
+ const range = getMarkRange($from, type, attrs)
25
40
 
26
41
  if (range) {
27
42
  from = range.from
28
43
  to = range.to
29
44
  }
30
- }
31
45
 
32
- if (dispatch) {
33
46
  tr.removeMark(from, to, type)
34
- tr.removeStoredMark(type)
47
+ } else {
48
+ ranges.forEach(range => {
49
+ tr.removeMark(range.$from.pos, range.$to.pos, type)
50
+ })
35
51
  }
36
52
 
53
+ tr.removeStoredMark(type)
54
+
37
55
  return true
38
56
  }
@@ -0,0 +1,73 @@
1
+ import { MarkType, NodeType } from 'prosemirror-model'
2
+
3
+ import { getMarkType } from '../helpers/getMarkType'
4
+ import { getNodeType } from '../helpers/getNodeType'
5
+ import { getSchemaTypeNameByName } from '../helpers/getSchemaTypeNameByName'
6
+ import { RawCommands } from '../types'
7
+
8
+ declare module '@tiptap/core' {
9
+ interface Commands<ReturnType> {
10
+ updateAttributes: {
11
+ /**
12
+ * Update attributes of a node or mark.
13
+ */
14
+ updateAttributes: (typeOrName: string | NodeType | MarkType, attributes: Record<string, any>) => ReturnType,
15
+ }
16
+ }
17
+ }
18
+
19
+ export const updateAttributes: RawCommands['updateAttributes'] = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {
20
+ let nodeType: NodeType | null = null
21
+ let markType: MarkType | null = null
22
+
23
+ const schemaType = getSchemaTypeNameByName(
24
+ typeof typeOrName === 'string'
25
+ ? typeOrName
26
+ : typeOrName.name,
27
+ state.schema,
28
+ )
29
+
30
+ if (!schemaType) {
31
+ return false
32
+ }
33
+
34
+ if (schemaType === 'node') {
35
+ nodeType = getNodeType(typeOrName as NodeType, state.schema)
36
+ }
37
+
38
+ if (schemaType === 'mark') {
39
+ markType = getMarkType(typeOrName as MarkType, state.schema)
40
+ }
41
+
42
+ if (dispatch) {
43
+ tr.selection.ranges.forEach(range => {
44
+ const from = range.$from.pos
45
+ const to = range.$to.pos
46
+
47
+ state.doc.nodesBetween(from, to, (node, pos) => {
48
+ if (nodeType && nodeType === node.type) {
49
+ tr.setNodeMarkup(pos, undefined, {
50
+ ...node.attrs,
51
+ ...attributes,
52
+ })
53
+ }
54
+
55
+ if (markType && node.marks.length) {
56
+ node.marks.forEach(mark => {
57
+ if (markType === mark.type) {
58
+ const trimmedFrom = Math.max(pos, from)
59
+ const trimmedTo = Math.min(pos + node.nodeSize, to)
60
+
61
+ tr.addMark(trimmedFrom, trimmedTo, markType.create({
62
+ ...mark.attrs,
63
+ ...attributes,
64
+ }))
65
+ }
66
+ })
67
+ }
68
+ })
69
+ })
70
+ }
71
+
72
+ return true
73
+ }
@@ -1,27 +1,22 @@
1
1
  import { wrapIn as originalWrapIn } from 'prosemirror-commands'
2
2
  import { NodeType } from 'prosemirror-model'
3
- import { AnyObject, Command, RawCommands } from '../types'
4
- import isNodeActive from '../helpers/isNodeActive'
5
- import getNodeType from '../helpers/getNodeType'
3
+
4
+ import { getNodeType } from '../helpers/getNodeType'
5
+ import { RawCommands } from '../types'
6
6
 
7
7
  declare module '@tiptap/core' {
8
- interface Commands {
8
+ interface Commands<ReturnType> {
9
9
  wrapIn: {
10
10
  /**
11
11
  * Wraps nodes in another node.
12
12
  */
13
- wrapIn: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
13
+ wrapIn: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
14
14
  }
15
15
  }
16
16
  }
17
17
 
18
18
  export const wrapIn: RawCommands['wrapIn'] = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
19
19
  const type = getNodeType(typeOrName, state.schema)
20
- const isActive = isNodeActive(state, type, attributes)
21
-
22
- if (isActive) {
23
- return false
24
- }
25
20
 
26
21
  return originalWrapIn(type, attributes)(state, dispatch)
27
22
  }
@@ -1,15 +1,16 @@
1
- import { wrapInList as originalWrapInList } from 'prosemirror-schema-list'
2
1
  import { NodeType } from 'prosemirror-model'
3
- import { AnyObject, Command, RawCommands } from '../types'
4
- import getNodeType from '../helpers/getNodeType'
2
+ import { wrapInList as originalWrapInList } from 'prosemirror-schema-list'
3
+
4
+ import { getNodeType } from '../helpers/getNodeType'
5
+ import { RawCommands } from '../types'
5
6
 
6
7
  declare module '@tiptap/core' {
7
- interface Commands {
8
+ interface Commands<ReturnType> {
8
9
  wrapInList: {
9
10
  /**
10
11
  * Wrap a node in a list.
11
12
  */
12
- wrapInList: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
13
+ wrapInList: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
13
14
  }
14
15
  }
15
16
  }