@tiptap/core 2.0.0-beta.18 → 2.0.0-beta.182

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/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 +24 -19
  5. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  6. package/dist/packages/core/src/Extension.d.ts +99 -27
  7. package/dist/packages/core/src/ExtensionManager.d.ts +7 -13
  8. package/dist/packages/core/src/InputRule.d.ts +42 -0
  9. package/dist/packages/core/src/Mark.d.ts +131 -31
  10. package/dist/packages/core/src/Node.d.ts +157 -33
  11. package/dist/packages/core/src/NodeView.d.ts +8 -12
  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/index.d.ts +50 -0
  29. package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
  30. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  31. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  33. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  34. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  36. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  37. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  38. package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
  39. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  40. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  41. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  42. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  43. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  44. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  45. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  46. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  47. package/dist/packages/core/src/commands/setMark.d.ts +3 -3
  48. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  49. package/dist/packages/core/src/commands/setNode.d.ts +3 -3
  50. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  51. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  52. package/dist/packages/core/src/commands/sinkListItem.d.ts +3 -3
  53. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  54. package/dist/packages/core/src/commands/splitListItem.d.ts +3 -3
  55. package/dist/packages/core/src/commands/toggleList.d.ts +3 -3
  56. package/dist/packages/core/src/commands/toggleMark.d.ts +8 -3
  57. package/dist/packages/core/src/commands/toggleNode.d.ts +3 -3
  58. package/dist/packages/core/src/commands/toggleWrap.d.ts +3 -3
  59. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  60. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  61. package/dist/packages/core/src/commands/unsetMark.d.ts +8 -3
  62. package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
  63. package/dist/packages/core/src/commands/wrapIn.d.ts +3 -3
  64. package/dist/packages/core/src/commands/wrapInList.d.ts +3 -3
  65. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  66. package/dist/packages/core/src/extensions/commands.d.ts +2 -95
  67. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  69. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  70. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  71. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  72. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  73. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  74. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  75. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  76. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  77. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  78. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  79. package/dist/packages/core/src/helpers/findParentNode.d.ts +2 -3
  80. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +2 -2
  81. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  82. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  83. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  84. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  85. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
  86. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  87. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  88. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  89. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  90. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +2 -3
  91. package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
  92. package/dist/packages/core/src/helpers/getMarkType.d.ts +1 -1
  93. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  94. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +2 -3
  95. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  96. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
  97. package/dist/packages/core/src/helpers/getSchema.d.ts +1 -1
  98. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  99. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +1 -1
  100. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +1 -1
  101. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  102. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  103. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  104. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
  105. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  106. package/dist/packages/core/src/helpers/index.d.ts +33 -0
  107. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  108. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  109. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  110. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  111. package/dist/packages/core/src/helpers/isMarkActive.d.ts +2 -3
  112. package/dist/packages/core/src/helpers/isNodeActive.d.ts +2 -3
  113. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +1 -1
  114. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  115. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  116. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  117. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  118. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  119. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  120. package/dist/packages/core/src/index.d.ts +14 -21
  121. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  122. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  123. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  124. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  125. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  126. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  127. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  128. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  129. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  130. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  131. package/dist/packages/core/src/style.d.ts +1 -2
  132. package/dist/packages/core/src/types.d.ts +112 -56
  133. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  134. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  135. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  136. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  137. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  139. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  140. package/dist/packages/core/src/utilities/index.d.ts +3 -0
  141. package/dist/packages/core/src/utilities/isClass.d.ts +1 -1
  142. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  143. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  145. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  146. package/dist/packages/core/src/utilities/isObject.d.ts +1 -1
  147. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  148. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  149. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  150. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  151. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  152. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  153. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  154. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  155. package/dist/tiptap-core.cjs.js +2696 -1374
  156. package/dist/tiptap-core.cjs.js.map +1 -1
  157. package/dist/tiptap-core.esm.js +2630 -1342
  158. package/dist/tiptap-core.esm.js.map +1 -1
  159. package/dist/tiptap-core.umd.js +2648 -1325
  160. package/dist/tiptap-core.umd.js.map +1 -1
  161. package/package.json +17 -20
  162. package/src/CommandManager.ts +63 -64
  163. package/src/Editor.ts +115 -78
  164. package/src/EventEmitter.ts +14 -4
  165. package/src/Extension.ts +193 -43
  166. package/src/ExtensionManager.ts +232 -83
  167. package/src/InputRule.ts +265 -0
  168. package/src/Mark.ts +239 -49
  169. package/src/Node.ts +279 -57
  170. package/src/NodeView.ts +115 -47
  171. package/src/PasteRule.ts +247 -0
  172. package/src/Tracker.ts +42 -0
  173. package/src/commands/blur.ts +12 -6
  174. package/src/commands/clearContent.ts +3 -3
  175. package/src/commands/clearNodes.ts +30 -18
  176. package/src/commands/command.ts +2 -2
  177. package/src/commands/createParagraphNear.ts +4 -3
  178. package/src/commands/deleteNode.ts +37 -0
  179. package/src/commands/deleteRange.ts +3 -3
  180. package/src/commands/deleteSelection.ts +4 -3
  181. package/src/commands/enter.ts +3 -3
  182. package/src/commands/exitCode.ts +4 -3
  183. package/src/commands/extendMarkRange.ts +12 -11
  184. package/src/commands/first.ts +3 -3
  185. package/src/commands/focus.ts +47 -44
  186. package/src/commands/forEach.ts +24 -0
  187. package/src/commands/index.ts +50 -0
  188. package/src/commands/insertContent.ts +13 -24
  189. package/src/commands/insertContentAt.ts +108 -0
  190. package/src/commands/joinBackward.ts +4 -3
  191. package/src/commands/joinForward.ts +4 -3
  192. package/src/commands/keyboardShortcut.ts +6 -6
  193. package/src/commands/lift.ts +6 -5
  194. package/src/commands/liftEmptyBlock.ts +4 -3
  195. package/src/commands/liftListItem.ts +6 -5
  196. package/src/commands/newlineInCode.ts +4 -3
  197. package/src/commands/resetAttributes.ts +62 -0
  198. package/src/commands/scrollIntoView.ts +3 -3
  199. package/src/commands/selectAll.ts +8 -6
  200. package/src/commands/selectNodeBackward.ts +4 -3
  201. package/src/commands/selectNodeForward.ts +4 -3
  202. package/src/commands/selectParentNode.ts +4 -3
  203. package/src/commands/selectTextblockEnd.ts +20 -0
  204. package/src/commands/selectTextblockStart.ts +20 -0
  205. package/src/commands/setContent.ts +9 -15
  206. package/src/commands/setMark.ts +36 -12
  207. package/src/commands/setMeta.ts +18 -0
  208. package/src/commands/setNode.ts +29 -7
  209. package/src/commands/setNodeSelection.ts +29 -0
  210. package/src/commands/setTextSelection.ts +33 -0
  211. package/src/commands/sinkListItem.ts +6 -5
  212. package/src/commands/splitBlock.ts +16 -10
  213. package/src/commands/splitListItem.ts +45 -18
  214. package/src/commands/toggleList.ts +83 -18
  215. package/src/commands/toggleMark.ts +18 -7
  216. package/src/commands/toggleNode.ts +6 -5
  217. package/src/commands/toggleWrap.ts +9 -9
  218. package/src/commands/undoInputRule.ts +34 -5
  219. package/src/commands/unsetAllMarks.ts +7 -11
  220. package/src/commands/unsetMark.ts +35 -22
  221. package/src/commands/updateAttributes.ts +73 -0
  222. package/src/commands/wrapIn.ts +5 -10
  223. package/src/commands/wrapInList.ts +6 -5
  224. package/src/extensions/clipboardTextSerializer.ts +14 -35
  225. package/src/extensions/commands.ts +3 -141
  226. package/src/extensions/editable.ts +1 -0
  227. package/src/extensions/focusEvents.ts +3 -5
  228. package/src/extensions/index.ts +1 -0
  229. package/src/extensions/keymap.ts +110 -13
  230. package/src/extensions/tabindex.ts +18 -0
  231. package/src/helpers/combineTransactionSteps.ts +18 -0
  232. package/src/helpers/createChainableState.ts +38 -0
  233. package/src/helpers/createDocument.ts +5 -6
  234. package/src/helpers/createNodeFromContent.ts +17 -19
  235. package/src/helpers/defaultBlockAt.ts +13 -0
  236. package/src/helpers/findChildren.ts +18 -0
  237. package/src/helpers/findChildrenInRange.ts +32 -0
  238. package/src/helpers/findParentNode.ts +3 -2
  239. package/src/helpers/findParentNodeClosestToPos.ts +3 -2
  240. package/src/helpers/generateHTML.ts +6 -5
  241. package/src/helpers/generateJSON.ts +14 -0
  242. package/src/helpers/generateText.ts +30 -0
  243. package/src/helpers/getAttributes.ts +28 -0
  244. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  245. package/src/helpers/getChangedRanges.ts +83 -0
  246. package/src/helpers/getDebugJSON.ts +54 -0
  247. package/src/helpers/getExtensionField.ts +25 -0
  248. package/src/helpers/getHTMLFromFragment.ts +6 -5
  249. package/src/helpers/getMarkAttributes.ts +14 -10
  250. package/src/helpers/getMarkRange.ts +41 -8
  251. package/src/helpers/getMarkType.ts +5 -1
  252. package/src/helpers/getMarksBetween.ts +32 -10
  253. package/src/helpers/getNodeAttributes.ts +9 -9
  254. package/src/helpers/getNodeType.ts +5 -1
  255. package/src/helpers/getRenderedAttributes.ts +6 -7
  256. package/src/helpers/getSchema.ts +7 -133
  257. package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
  258. package/src/helpers/getSchemaTypeByName.ts +2 -10
  259. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  260. package/src/helpers/getSplittedAttributes.ts +4 -4
  261. package/src/helpers/getText.ts +19 -0
  262. package/src/helpers/getTextBetween.ts +49 -0
  263. package/src/helpers/getTextContentFromNodes.ts +17 -0
  264. package/src/helpers/getTextSerializersFromSchema.ts +10 -0
  265. package/src/helpers/index.ts +33 -0
  266. package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
  267. package/src/helpers/isActive.ts +5 -5
  268. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  269. package/src/helpers/isList.ts +14 -7
  270. package/src/helpers/isMarkActive.ts +45 -20
  271. package/src/helpers/isNodeActive.ts +28 -35
  272. package/src/helpers/isNodeEmpty.ts +1 -1
  273. package/src/helpers/isNodeSelection.ts +3 -2
  274. package/src/helpers/isTextSelection.ts +3 -2
  275. package/src/helpers/posToDOMRect.ts +35 -0
  276. package/src/helpers/resolveFocusPosition.ts +43 -0
  277. package/src/helpers/selectionToInsertionEnd.ts +2 -2
  278. package/src/helpers/splitExtensions.ts +3 -3
  279. package/src/index.ts +15 -24
  280. package/src/inputRules/index.ts +5 -0
  281. package/src/inputRules/markInputRule.ts +59 -39
  282. package/src/inputRules/nodeInputRule.ts +45 -11
  283. package/src/inputRules/textInputRule.ts +35 -0
  284. package/src/inputRules/textblockTypeInputRule.ts +38 -0
  285. package/src/inputRules/wrappingInputRule.ts +60 -0
  286. package/src/pasteRules/index.ts +3 -0
  287. package/src/pasteRules/markPasteRule.ts +62 -53
  288. package/src/pasteRules/nodePasteRule.ts +39 -0
  289. package/src/pasteRules/textPasteRule.ts +35 -0
  290. package/src/style.ts +16 -3
  291. package/src/types.ts +129 -43
  292. package/src/utilities/callOrReturn.ts +6 -3
  293. package/src/utilities/createStyleTag.ts +12 -1
  294. package/src/utilities/deleteProps.ts +2 -4
  295. package/src/utilities/elementFromString.ts +4 -5
  296. package/src/utilities/escapeForRegEx.ts +4 -0
  297. package/src/utilities/findDuplicates.ts +5 -0
  298. package/src/utilities/fromString.ts +2 -2
  299. package/src/utilities/index.ts +3 -0
  300. package/src/utilities/isClass.ts +2 -2
  301. package/src/utilities/isEmptyObject.ts +2 -2
  302. package/src/utilities/isFunction.ts +3 -0
  303. package/src/utilities/isMacOS.ts +5 -0
  304. package/src/utilities/isNumber.ts +3 -0
  305. package/src/utilities/isObject.ts +6 -6
  306. package/src/utilities/isPlainObject.ts +8 -5
  307. package/src/utilities/isRegExp.ts +3 -0
  308. package/src/utilities/isString.ts +3 -0
  309. package/src/utilities/isiOS.ts +12 -0
  310. package/src/utilities/mergeAttributes.ts +2 -3
  311. package/src/utilities/mergeDeep.ts +2 -3
  312. package/src/utilities/minMax.ts +1 -1
  313. package/src/utilities/objectIncludes.ts +17 -5
  314. package/src/utilities/removeDuplicates.ts +15 -0
  315. package/CHANGELOG.md +0 -335
  316. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  317. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  318. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  319. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  320. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  321. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  322. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  323. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  324. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  325. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  326. package/src/commands/insertHTML.ts +0 -30
  327. package/src/commands/insertNode.ts +0 -33
  328. package/src/commands/insertText.ts +0 -22
  329. package/src/commands/replace.ts +0 -20
  330. package/src/commands/replaceRange.ts +0 -36
  331. package/src/commands/resetNodeAttributes.ts +0 -31
  332. package/src/commands/updateNodeAttributes.ts +0 -33
  333. package/src/utilities/removeElement.ts +0 -5
@@ -1,13 +1,14 @@
1
1
  import { newlineInCode as originalNewlineInCode } from 'prosemirror-commands'
2
- import { Command, RawCommands } from '../types'
2
+
3
+ import { RawCommands } from '../types'
3
4
 
4
5
  declare module '@tiptap/core' {
5
- interface Commands {
6
+ interface Commands<ReturnType> {
6
7
  newlineInCode: {
7
8
  /**
8
9
  * Add a newline character in code.
9
10
  */
10
- newlineInCode: () => Command,
11
+ newlineInCode: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -0,0 +1,62 @@
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
+ import { deleteProps } from '../utilities/deleteProps'
8
+
9
+ declare module '@tiptap/core' {
10
+ interface Commands<ReturnType> {
11
+ resetAttributes: {
12
+ /**
13
+ * Resets some node attributes to the default value.
14
+ */
15
+ resetAttributes: (typeOrName: string | NodeType | MarkType, attributes: string | string[]) => ReturnType,
16
+ }
17
+ }
18
+ }
19
+
20
+ export const resetAttributes: RawCommands['resetAttributes'] = (typeOrName, attributes) => ({ tr, state, dispatch }) => {
21
+ let nodeType: NodeType | null = null
22
+ let markType: MarkType | null = null
23
+
24
+ const schemaType = getSchemaTypeNameByName(
25
+ typeof typeOrName === 'string'
26
+ ? typeOrName
27
+ : typeOrName.name,
28
+ state.schema,
29
+ )
30
+
31
+ if (!schemaType) {
32
+ return false
33
+ }
34
+
35
+ if (schemaType === 'node') {
36
+ nodeType = getNodeType(typeOrName as NodeType, state.schema)
37
+ }
38
+
39
+ if (schemaType === 'mark') {
40
+ markType = getMarkType(typeOrName as MarkType, state.schema)
41
+ }
42
+
43
+ if (dispatch) {
44
+ tr.selection.ranges.forEach(range => {
45
+ state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {
46
+ if (nodeType && nodeType === node.type) {
47
+ tr.setNodeMarkup(pos, undefined, deleteProps(node.attrs, attributes))
48
+ }
49
+
50
+ if (markType && node.marks.length) {
51
+ node.marks.forEach(mark => {
52
+ if (markType === mark.type) {
53
+ tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)))
54
+ }
55
+ })
56
+ }
57
+ })
58
+ })
59
+ }
60
+
61
+ return true
62
+ }
@@ -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,14 @@
1
1
  import { selectNodeBackward as originalSelectNodeBackward } from 'prosemirror-commands'
2
- import { Command, RawCommands } from '../types'
2
+
3
+ import { RawCommands } from '../types'
3
4
 
4
5
  declare module '@tiptap/core' {
5
- interface Commands {
6
+ interface Commands<ReturnType> {
6
7
  selectNodeBackward: {
7
8
  /**
8
9
  * Select a node backward.
9
10
  */
10
- selectNodeBackward: () => Command,
11
+ selectNodeBackward: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -1,13 +1,14 @@
1
1
  import { selectNodeForward as originalSelectNodeForward } from 'prosemirror-commands'
2
- import { Command, RawCommands } from '../types'
2
+
3
+ import { RawCommands } from '../types'
3
4
 
4
5
  declare module '@tiptap/core' {
5
- interface Commands {
6
+ interface Commands<ReturnType> {
6
7
  selectNodeForward: {
7
8
  /**
8
9
  * Select a node forward.
9
10
  */
10
- selectNodeForward: () => Command,
11
+ selectNodeForward: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -1,13 +1,14 @@
1
1
  import { selectParentNode as originalSelectParentNode } from 'prosemirror-commands'
2
- import { Command, RawCommands } from '../types'
2
+
3
+ import { RawCommands } from '../types'
3
4
 
4
5
  declare module '@tiptap/core' {
5
- interface Commands {
6
+ interface Commands<ReturnType> {
6
7
  selectParentNode: {
7
8
  /**
8
9
  * Select the parent node.
9
10
  */
10
- selectParentNode: () => Command,
11
+ selectParentNode: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -0,0 +1,20 @@
1
+ // @ts-ignore
2
+ // TODO: add types to @types/prosemirror-commands
3
+ import { selectTextblockEnd as originalSelectTextblockEnd } from 'prosemirror-commands'
4
+
5
+ import { RawCommands } from '../types'
6
+
7
+ declare module '@tiptap/core' {
8
+ interface Commands<ReturnType> {
9
+ selectTextblockEnd: {
10
+ /**
11
+ * Moves the cursor to the end of current text block.
12
+ */
13
+ selectTextblockEnd: () => ReturnType,
14
+ }
15
+ }
16
+ }
17
+
18
+ export const selectTextblockEnd: RawCommands['selectTextblockEnd'] = () => ({ state, dispatch }) => {
19
+ return originalSelectTextblockEnd(state, dispatch)
20
+ }
@@ -0,0 +1,20 @@
1
+ // @ts-ignore
2
+ // TODO: add types to @types/prosemirror-commands
3
+ import { selectTextblockStart as originalSelectTextblockStart } from 'prosemirror-commands'
4
+
5
+ import { RawCommands } from '../types'
6
+
7
+ declare module '@tiptap/core' {
8
+ interface Commands<ReturnType> {
9
+ selectTextblockStart: {
10
+ /**
11
+ * Moves the cursor to the start of current text block.
12
+ */
13
+ selectTextblockStart: () => ReturnType,
14
+ }
15
+ }
16
+ }
17
+
18
+ export const selectTextblockStart: RawCommands['selectTextblockStart'] = () => ({ state, dispatch }) => {
19
+ return originalSelectTextblockStart(state, dispatch)
20
+ }
@@ -1,23 +1,19 @@
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'
1
+ import { ParseOptions } from 'prosemirror-model'
2
+
3
+ import { createDocument } from '../helpers/createDocument'
4
+ import { Content, RawCommands } 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
  }
@@ -25,11 +21,9 @@ declare module '@tiptap/core' {
25
21
  export const setContent: RawCommands['setContent'] = (content, emitUpdate = false, parseOptions = {}) => ({ tr, editor, dispatch }) => {
26
22
  const { doc } = tr
27
23
  const document = createDocument(content, editor.schema, parseOptions)
28
- const selection = TextSelection.create(doc, 0, doc.content.size)
29
24
 
30
25
  if (dispatch) {
31
- tr.setSelection(selection)
32
- .replaceSelectionWith(document, false)
26
+ tr.replaceWith(0, doc.content.size, document)
33
27
  .setMeta('preventUpdate', !emitUpdate)
34
28
  }
35
29
 
@@ -1,15 +1,16 @@
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
+
3
+ import { getMarkAttributes } from '../helpers/getMarkAttributes'
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
  setMark: {
9
10
  /**
10
11
  * Add a mark with new attributes.
11
12
  */
12
- setMark: (typeOrName: string | MarkType, attributes?: AnyObject) => Command,
13
+ setMark: (typeOrName: string | MarkType, attributes?: Record<string, any>) => ReturnType,
13
14
  }
14
15
  }
15
16
  }
@@ -18,18 +19,41 @@ export const setMark: RawCommands['setMark'] = (typeOrName, attributes = {}) =>
18
19
  const { selection } = tr
19
20
  const { empty, ranges } = selection
20
21
  const type = getMarkType(typeOrName, state.schema)
21
- const oldAttributes = getMarkAttributes(state, type)
22
- const newAttributes = {
23
- ...oldAttributes,
24
- ...attributes,
25
- }
26
22
 
27
23
  if (dispatch) {
28
24
  if (empty) {
29
- tr.addStoredMark(type.create(newAttributes))
25
+ const oldAttributes = getMarkAttributes(state, type)
26
+
27
+ tr.addStoredMark(type.create({
28
+ ...oldAttributes,
29
+ ...attributes,
30
+ }))
30
31
  } else {
31
32
  ranges.forEach(range => {
32
- tr.addMark(range.$from.pos, range.$to.pos, type.create(newAttributes))
33
+ const from = range.$from.pos
34
+ const to = range.$to.pos
35
+
36
+ state.doc.nodesBetween(from, to, (node, pos) => {
37
+ const trimmedFrom = Math.max(pos, from)
38
+ const trimmedTo = Math.min(pos + node.nodeSize, to)
39
+ const someHasMark = node.marks.find(mark => mark.type === type)
40
+
41
+ // if there is already a mark of this type
42
+ // we know that we have to merge its attributes
43
+ // otherwise we add a fresh new mark
44
+ if (someHasMark) {
45
+ node.marks.forEach(mark => {
46
+ if (type === mark.type) {
47
+ tr.addMark(trimmedFrom, trimmedTo, type.create({
48
+ ...mark.attrs,
49
+ ...attributes,
50
+ }))
51
+ }
52
+ })
53
+ } else {
54
+ tr.addMark(trimmedFrom, trimmedTo, type.create(attributes))
55
+ }
56
+ })
33
57
  })
34
58
  }
35
59
  }
@@ -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,43 @@
1
- import { NodeType } from 'prosemirror-model'
2
1
  import { setBlockType } from 'prosemirror-commands'
3
- import { AnyObject, Command, RawCommands } from '../types'
4
- import getNodeType from '../helpers/getNodeType'
2
+ import { NodeType } from 'prosemirror-model'
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
  setNode: {
9
10
  /**
10
11
  * Replace a given range with a node.
11
12
  */
12
- setNode: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
13
+ setNode: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
13
14
  }
14
15
  }
15
16
  }
16
17
 
17
- export const setNode: RawCommands['setNode'] = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
18
+ export const setNode: RawCommands['setNode'] = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {
18
19
  const type = getNodeType(typeOrName, state.schema)
19
20
 
20
- return setBlockType(type, attributes)(state, dispatch)
21
+ // TODO: use a fallback like insertContent?
22
+ if (!type.isTextblock) {
23
+ console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.')
24
+
25
+ return false
26
+ }
27
+
28
+ return chain()
29
+ // try to convert node to default node if needed
30
+ .command(({ commands }) => {
31
+ const canSetBlock = setBlockType(type, attributes)(state)
32
+
33
+ if (canSetBlock) {
34
+ return true
35
+ }
36
+
37
+ return commands.clearNodes()
38
+ })
39
+ .command(({ state: updatedState }) => {
40
+ return setBlockType(type, attributes)(updatedState, dispatch)
41
+ })
42
+ .run()
21
43
  }
@@ -0,0 +1,29 @@
1
+ import { NodeSelection, Selection } from 'prosemirror-state'
2
+
3
+ import { RawCommands } from '../types'
4
+ import { minMax } from '../utilities/minMax'
5
+
6
+ declare module '@tiptap/core' {
7
+ interface Commands<ReturnType> {
8
+ setNodeSelection: {
9
+ /**
10
+ * Creates a NodeSelection.
11
+ */
12
+ setNodeSelection: (position: number) => ReturnType,
13
+ }
14
+ }
15
+ }
16
+
17
+ export const setNodeSelection: RawCommands['setNodeSelection'] = position => ({ tr, dispatch }) => {
18
+ if (dispatch) {
19
+ const { doc } = tr
20
+ const minPos = Selection.atStart(doc).from
21
+ const maxPos = Selection.atEnd(doc).to
22
+ const resolvedPos = minMax(position, minPos, maxPos)
23
+ const selection = NodeSelection.create(doc, resolvedPos)
24
+
25
+ tr.setSelection(selection)
26
+ }
27
+
28
+ return true
29
+ }
@@ -0,0 +1,33 @@
1
+ import { TextSelection } from 'prosemirror-state'
2
+
3
+ import { Range, RawCommands } from '../types'
4
+ import { minMax } from '../utilities/minMax'
5
+
6
+ declare module '@tiptap/core' {
7
+ interface Commands<ReturnType> {
8
+ setTextSelection: {
9
+ /**
10
+ * Creates a TextSelection.
11
+ */
12
+ setTextSelection: (position: number | Range) => ReturnType,
13
+ }
14
+ }
15
+ }
16
+
17
+ export const setTextSelection: RawCommands['setTextSelection'] = position => ({ tr, dispatch }) => {
18
+ if (dispatch) {
19
+ const { doc } = tr
20
+ const { from, to } = typeof position === 'number'
21
+ ? { from: position, to: position }
22
+ : position
23
+ const minPos = TextSelection.atStart(doc).from
24
+ const maxPos = TextSelection.atEnd(doc).to
25
+ const resolvedFrom = minMax(from, minPos, maxPos)
26
+ const resolvedEnd = minMax(to, minPos, maxPos)
27
+ const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
28
+
29
+ tr.setSelection(selection)
30
+ }
31
+
32
+ return true
33
+ }
@@ -1,15 +1,16 @@
1
- import { sinkListItem as originalSinkListItem } from 'prosemirror-schema-list'
2
1
  import { NodeType } from 'prosemirror-model'
3
- import { Command, RawCommands } from '../types'
4
- import getNodeType from '../helpers/getNodeType'
2
+ import { sinkListItem as originalSinkListItem } 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
  sinkListItem: {
9
10
  /**
10
11
  * Sink the list item down into an inner list.
11
12
  */
12
- sinkListItem: (typeOrName: string | NodeType) => Command,
13
+ sinkListItem: (typeOrName: string | NodeType) => ReturnType,
13
14
  }
14
15
  }
15
16
  }
@@ -1,11 +1,12 @@
1
- import { canSplit } from 'prosemirror-transform'
2
- import { ContentMatch, Fragment } from 'prosemirror-model'
1
+ import { ContentMatch } from 'prosemirror-model'
3
2
  import { EditorState, NodeSelection, TextSelection } from 'prosemirror-state'
4
- import { Command, RawCommands } from '../types'
5
- import getSplittedAttributes from '../helpers/getSplittedAttributes'
3
+ import { canSplit } from 'prosemirror-transform'
4
+
5
+ import { getSplittedAttributes } from '../helpers/getSplittedAttributes'
6
+ import { RawCommands } from '../types'
6
7
 
7
8
  function defaultBlockAt(match: ContentMatch) {
8
- for (let i = 0; i < match.edgeCount; i + 1) {
9
+ for (let i = 0; i < match.edgeCount; i += 1) {
9
10
  const { type } = match.edge(i)
10
11
 
11
12
  if (type.isTextblock && !type.hasRequiredAttrs()) {
@@ -27,12 +28,12 @@ function ensureMarks(state: EditorState, splittableMarks?: string[]) {
27
28
  }
28
29
 
29
30
  declare module '@tiptap/core' {
30
- interface Commands {
31
+ interface Commands<ReturnType> {
31
32
  splitBlock: {
32
33
  /**
33
34
  * Forks a new node from an existing node.
34
35
  */
35
- splitBlock: (options?: { keepMarks?: boolean }) => Command,
36
+ splitBlock: (options?: { keepMarks?: boolean }) => ReturnType,
36
37
  }
37
38
  }
38
39
  }
@@ -110,12 +111,17 @@ export const splitBlock: RawCommands['splitBlock'] = ({ keepMarks = true } = {})
110
111
  tr.split(tr.mapping.map($from.pos), 1, types)
111
112
 
112
113
  if (
113
- !atEnd
114
+ deflt
115
+ && !atEnd
114
116
  && !$from.parentOffset
115
117
  && $from.parent.type !== deflt
116
- && $from.node(-1).canReplace($from.index(-1), $from.indexAfter(-1), Fragment.from(deflt?.create()))
117
118
  ) {
118
- tr.setNodeMarkup(tr.mapping.map($from.before()), deflt || undefined)
119
+ const first = tr.mapping.map($from.before())
120
+ const $first = tr.doc.resolve(first)
121
+
122
+ if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {
123
+ tr.setNodeMarkup(tr.mapping.map($from.before()), deflt)
124
+ }
119
125
  }
120
126
  }
121
127
 
@@ -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