@tiptap/core 2.0.0-beta.20 → 2.0.0-beta.201

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 (333) 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 +24 -19
  4. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  5. package/dist/packages/core/src/Extension.d.ts +99 -27
  6. package/dist/packages/core/src/ExtensionManager.d.ts +7 -13
  7. package/dist/packages/core/src/InputRule.d.ts +42 -0
  8. package/dist/packages/core/src/Mark.d.ts +139 -31
  9. package/dist/packages/core/src/Node.d.ts +157 -33
  10. package/dist/packages/core/src/NodeView.d.ts +8 -12
  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 +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 +4 -4
  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 +4 -4
  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 -99
  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 +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 +1 -1
  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 +14 -21
  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 +112 -56
  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 +2732 -1465
  153. package/dist/tiptap-core.cjs.js.map +1 -1
  154. package/dist/tiptap-core.esm.js +2679 -1446
  155. package/dist/tiptap-core.esm.js.map +1 -1
  156. package/dist/tiptap-core.umd.js +2701 -1433
  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 +116 -78
  161. package/src/EventEmitter.ts +14 -4
  162. package/src/Extension.ts +193 -43
  163. package/src/ExtensionManager.ts +242 -84
  164. package/src/InputRule.ts +265 -0
  165. package/src/Mark.ts +277 -48
  166. package/src/Node.ts +279 -57
  167. package/src/NodeView.ts +115 -47
  168. package/src/PasteRule.ts +247 -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 +30 -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 +13 -24
  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 +9 -8
  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 +9 -15
  203. package/src/commands/setMark.ts +80 -14
  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 +14 -19
  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 +7 -11
  217. package/src/commands/unsetMark.ts +35 -22
  218. package/src/commands/updateAttributes.ts +16 -9
  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 -147
  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 +5 -6
  231. package/src/helpers/createNodeFromContent.ts +17 -19
  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 -133
  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 +1 -1
  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 +15 -24
  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 +129 -43
  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 -357
  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/insertNode.d.ts +0 -13
  314. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  315. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  316. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  317. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  318. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  319. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  320. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  321. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  322. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  323. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  324. package/src/commands/insertHTML.ts +0 -30
  325. package/src/commands/insertNode.ts +0 -33
  326. package/src/commands/insertText.ts +0 -22
  327. package/src/commands/replace.ts +0 -20
  328. package/src/commands/replaceRange.ts +0 -36
  329. package/src/commands/resetNodeAttributes.ts +0 -33
  330. package/src/commands/updateNodeAttributes.ts +0 -35
  331. package/src/utilities/isClass.ts +0 -7
  332. package/src/utilities/isObject.ts +0 -10
  333. package/src/utilities/removeElement.ts +0 -5
@@ -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,17 +1,17 @@
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
16
  const { empty, ranges } = selection
17
17
 
@@ -20,13 +20,9 @@ export const unsetAllMarks: RawCommands['unsetAllMarks'] = () => ({ tr, state, d
20
20
  }
21
21
 
22
22
  if (dispatch) {
23
- Object
24
- .entries(state.schema.marks)
25
- .forEach(([, mark]) => {
26
- ranges.forEach(range => {
27
- tr.removeMark(range.$from.pos, range.$to.pos, mark as any)
28
- })
29
- })
23
+ ranges.forEach(range => {
24
+ tr.removeMark(range.$from.pos, range.$to.pos)
25
+ })
30
26
  }
31
27
 
32
28
  return true
@@ -1,43 +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
30
  const { $from, empty, ranges } = selection
21
31
 
22
- if (dispatch) {
23
- if (empty) {
24
- let { from, to } = selection
25
- const range = getMarkRange($from, type)
26
-
27
- if (range) {
28
- from = range.from
29
- to = range.to
30
- }
31
-
32
- tr.removeMark(from, to, type)
33
- } else {
34
- ranges.forEach(range => {
35
- tr.removeMark(range.$from.pos, range.$to.pos, type)
36
- })
32
+ if (!dispatch) {
33
+ return true
34
+ }
35
+
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)
40
+
41
+ if (range) {
42
+ from = range.from
43
+ to = range.to
37
44
  }
38
45
 
39
- tr.removeStoredMark(type)
46
+ tr.removeMark(from, to, type)
47
+ } else {
48
+ ranges.forEach(range => {
49
+ tr.removeMark(range.$from.pos, range.$to.pos, type)
50
+ })
40
51
  }
41
52
 
53
+ tr.removeStoredMark(type)
54
+
42
55
  return true
43
56
  }
@@ -1,16 +1,17 @@
1
- import { NodeType, MarkType } from 'prosemirror-model'
2
- import getNodeType from '../helpers/getNodeType'
3
- import getMarkType from '../helpers/getMarkType'
4
- import getSchemaTypeNameByName from '../helpers/getSchemaTypeNameByName'
5
- import { AnyObject, Command, RawCommands } from '../types'
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'
6
7
 
7
8
  declare module '@tiptap/core' {
8
- interface Commands {
9
+ interface Commands<ReturnType> {
9
10
  updateAttributes: {
10
11
  /**
11
12
  * Update attributes of a node or mark.
12
13
  */
13
- updateAttributes: (typeOrName: string | NodeType | MarkType, attributes: AnyObject) => Command,
14
+ updateAttributes: (typeOrName: string | NodeType | MarkType, attributes: Record<string, any>) => ReturnType,
14
15
  }
15
16
  }
16
17
  }
@@ -40,7 +41,10 @@ export const updateAttributes: RawCommands['updateAttributes'] = (typeOrName, at
40
41
 
41
42
  if (dispatch) {
42
43
  tr.selection.ranges.forEach(range => {
43
- state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {
44
+ const from = range.$from.pos
45
+ const to = range.$to.pos
46
+
47
+ state.doc.nodesBetween(from, to, (node, pos) => {
44
48
  if (nodeType && nodeType === node.type) {
45
49
  tr.setNodeMarkup(pos, undefined, {
46
50
  ...node.attrs,
@@ -51,7 +55,10 @@ export const updateAttributes: RawCommands['updateAttributes'] = (typeOrName, at
51
55
  if (markType && node.marks.length) {
52
56
  node.marks.forEach(mark => {
53
57
  if (markType === mark.type) {
54
- tr.addMark(pos, pos + node.nodeSize, markType.create({
58
+ const trimmedFrom = Math.max(pos, from)
59
+ const trimmedTo = Math.min(pos + node.nodeSize, to)
60
+
61
+ tr.addMark(trimmedFrom, trimmedTo, markType.create({
55
62
  ...mark.attrs,
56
63
  ...attributes,
57
64
  }))
@@ -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
  }
@@ -1,40 +1,11 @@
1
- import { Editor } from '@tiptap/core'
2
1
  import { Plugin, PluginKey } from 'prosemirror-state'
3
- import { Extension } from '../Extension'
4
-
5
- const textBetween = (
6
- editor: Editor,
7
- from: number,
8
- to: number,
9
- blockSeparator?: string,
10
- leafText?: string,
11
- ): string => {
12
- let text = ''
13
- let separated = true
14
-
15
- editor.state.doc.nodesBetween(from, to, (node, pos) => {
16
- const textSerializer = editor.extensionManager.textSerializers[node.type.name]
17
2
 
18
- if (textSerializer) {
19
- text += textSerializer({ node })
20
- separated = !blockSeparator
21
- } else if (node.isText) {
22
- text += node?.text?.slice(Math.max(from, pos) - pos, to - pos)
23
- separated = !blockSeparator
24
- } else if (node.isLeaf && leafText) {
25
- text += leafText
26
- separated = !blockSeparator
27
- } else if (!separated && node.isBlock) {
28
- text += blockSeparator
29
- separated = true
30
- }
31
- }, 0)
32
-
33
- return text
34
- }
3
+ import { Extension } from '../Extension'
4
+ import { getTextBetween } from '../helpers/getTextBetween'
5
+ import { getTextSerializersFromSchema } from '../helpers/getTextSerializersFromSchema'
35
6
 
36
7
  export const ClipboardTextSerializer = Extension.create({
37
- name: 'editable',
8
+ name: 'clipboardTextSerializer',
38
9
 
39
10
  addProseMirrorPlugins() {
40
11
  return [
@@ -43,9 +14,17 @@ export const ClipboardTextSerializer = Extension.create({
43
14
  props: {
44
15
  clipboardTextSerializer: () => {
45
16
  const { editor } = this
46
- const { from, to } = editor.state.selection
17
+ const { state, schema } = editor
18
+ const { doc, selection } = state
19
+ const { ranges } = selection
20
+ const from = Math.min(...ranges.map(range => range.$from.pos))
21
+ const to = Math.max(...ranges.map(range => range.$to.pos))
22
+ const textSerializers = getTextSerializersFromSchema(schema)
23
+ const range = { from, to }
47
24
 
48
- return textBetween(editor, from, to, '\n')
25
+ return getTextBetween(doc, range, {
26
+ textSerializers,
27
+ })
49
28
  },
50
29
  },
51
30
  }),