@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,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,26 +1,29 @@
1
- import { TextSelection } from 'prosemirror-state'
2
- import { AnyObject, Command, RawCommands } from '../types'
1
+ import { ParseOptions } from 'prosemirror-model'
2
+
3
+ import { createDocument } from '../helpers/createDocument'
4
+ import { Content, RawCommands } from '../types'
3
5
 
4
6
  declare module '@tiptap/core' {
5
- interface Commands {
7
+ interface Commands<ReturnType> {
6
8
  setContent: {
7
9
  /**
8
10
  * Replace the whole document with new content.
9
11
  */
10
- setContent: (content: string, emitUpdate?: Boolean, parseOptions?: AnyObject) => Command,
12
+ setContent: (
13
+ content: Content,
14
+ emitUpdate?: boolean,
15
+ parseOptions?: ParseOptions,
16
+ ) => ReturnType,
11
17
  }
12
18
  }
13
19
  }
14
20
 
15
21
  export const setContent: RawCommands['setContent'] = (content, emitUpdate = false, parseOptions = {}) => ({ tr, editor, dispatch }) => {
16
- const { createDocument } = editor
17
22
  const { doc } = tr
18
- const document = createDocument(content, parseOptions)
19
- const selection = TextSelection.create(doc, 0, doc.content.size)
23
+ const document = createDocument(content, editor.schema, parseOptions)
20
24
 
21
25
  if (dispatch) {
22
- tr.setSelection(selection)
23
- .replaceSelectionWith(document, false)
26
+ tr.replaceWith(0, doc.content.size, document)
24
27
  .setMeta('preventUpdate', !emitUpdate)
25
28
  }
26
29
 
@@ -1,36 +1,104 @@
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'
1
+ import { MarkType, ResolvedPos } from 'prosemirror-model'
2
+ import { EditorState, Transaction } from 'prosemirror-state'
3
+
4
+ import { isTextSelection } from '../helpers'
5
+ import { getMarkAttributes } from '../helpers/getMarkAttributes'
6
+ import { getMarkType } from '../helpers/getMarkType'
7
+ import { RawCommands } from '../types'
5
8
 
6
9
  declare module '@tiptap/core' {
7
- interface Commands {
10
+ interface Commands<ReturnType> {
8
11
  setMark: {
9
12
  /**
10
13
  * Add a mark with new attributes.
11
14
  */
12
- setMark: (typeOrName: string | MarkType, attributes?: AnyObject) => Command,
15
+ setMark: (typeOrName: string | MarkType, attributes?: Record<string, any>) => ReturnType,
13
16
  }
14
17
  }
15
18
  }
16
19
 
20
+ function canSetMark(state: EditorState, tr: Transaction, newMarkType: MarkType) {
21
+ const { selection } = tr
22
+ let cursor: ResolvedPos | null = null
23
+
24
+ if (isTextSelection(selection)) {
25
+ cursor = selection.$cursor
26
+ }
27
+
28
+ if (cursor) {
29
+ const currentMarks = state.storedMarks ?? cursor.marks()
30
+
31
+ // There can be no current marks that exclude the new mark
32
+ return !!newMarkType.isInSet(currentMarks) || !currentMarks.some(mark => mark.type.excludes(newMarkType))
33
+ }
34
+
35
+ const { ranges } = selection
36
+
37
+ return ranges.some(({ $from, $to }) => {
38
+ let someNodeSupportsMark = $from.depth === 0 ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType) : false
39
+
40
+ state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {
41
+ // If we already found a mark that we can enable, return false to bypass the remaining search
42
+ if (someNodeSupportsMark) {
43
+ return false
44
+ }
45
+
46
+ if (node.isInline) {
47
+ const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType)
48
+ const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks) || !node.marks.some(otherMark => otherMark.type.excludes(newMarkType))
49
+
50
+ someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType
51
+ }
52
+ return !someNodeSupportsMark
53
+ })
54
+
55
+ return someNodeSupportsMark
56
+ })
57
+
58
+ }
17
59
  export const setMark: RawCommands['setMark'] = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {
18
60
  const { selection } = tr
19
- const { from, to, empty } = selection
61
+ const { empty, ranges } = selection
20
62
  const type = getMarkType(typeOrName, state.schema)
21
- const oldAttributes = getMarkAttributes(state, type)
22
- const newAttributes = {
23
- ...oldAttributes,
24
- ...attributes,
25
- }
26
63
 
27
64
  if (dispatch) {
28
65
  if (empty) {
29
- tr.addStoredMark(type.create(newAttributes))
66
+ const oldAttributes = getMarkAttributes(state, type)
67
+
68
+ tr.addStoredMark(type.create({
69
+ ...oldAttributes,
70
+ ...attributes,
71
+ }))
30
72
  } else {
31
- tr.addMark(from, to, type.create(newAttributes))
73
+ ranges.forEach(range => {
74
+ const from = range.$from.pos
75
+ const to = range.$to.pos
76
+
77
+ state.doc.nodesBetween(from, to, (node, pos) => {
78
+ const trimmedFrom = Math.max(pos, from)
79
+ const trimmedTo = Math.min(pos + node.nodeSize, to)
80
+ const someHasMark = node.marks.find(mark => mark.type === type)
81
+
82
+ // if there is already a mark of this type
83
+ // we know that we have to merge its attributes
84
+ // otherwise we add a fresh new mark
85
+ if (someHasMark) {
86
+
87
+ node.marks.forEach(mark => {
88
+ if (type === mark.type) {
89
+ tr.addMark(trimmedFrom, trimmedTo, type.create({
90
+ ...mark.attrs,
91
+ ...attributes,
92
+ }))
93
+ }
94
+ })
95
+ } else {
96
+ tr.addMark(trimmedFrom, trimmedTo, type.create(attributes))
97
+ }
98
+ })
99
+ })
32
100
  }
33
101
  }
34
102
 
35
- return true
103
+ return canSetMark(state, tr, type)
36
104
  }
@@ -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,27 @@
1
+ import { NodeSelection } 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 from = minMax(position, 0, doc.content.size)
21
+ const selection = NodeSelection.create(doc, from)
22
+
23
+ tr.setSelection(selection)
24
+ }
25
+
26
+ return true
27
+ }
@@ -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,36 +1,28 @@
1
- import { canSplit } from 'prosemirror-transform'
2
- import { ContentMatch, Fragment } from 'prosemirror-model'
3
1
  import { EditorState, NodeSelection, TextSelection } from 'prosemirror-state'
4
- import { Command, RawCommands } from '../types'
5
- import getSplittedAttributes from '../helpers/getSplittedAttributes'
6
-
7
- function defaultBlockAt(match: ContentMatch) {
8
- for (let i = 0; i < match.edgeCount; i + 1) {
9
- const { type } = match.edge(i)
2
+ import { canSplit } from 'prosemirror-transform'
10
3
 
11
- if (type.isTextblock && !type.hasRequiredAttrs()) {
12
- return type
13
- }
14
- }
15
- return null
16
- }
4
+ import { defaultBlockAt } from '../helpers/defaultBlockAt'
5
+ import { getSplittedAttributes } from '../helpers/getSplittedAttributes'
6
+ import { RawCommands } from '../types'
17
7
 
18
- function ensureMarks(state: EditorState) {
8
+ function ensureMarks(state: EditorState, splittableMarks?: string[]) {
19
9
  const marks = state.storedMarks
20
10
  || (state.selection.$to.parentOffset && state.selection.$from.marks())
21
11
 
22
12
  if (marks) {
23
- state.tr.ensureMarks(marks)
13
+ const filteredMarks = marks.filter(mark => splittableMarks?.includes(mark.type.name))
14
+
15
+ state.tr.ensureMarks(filteredMarks)
24
16
  }
25
17
  }
26
18
 
27
19
  declare module '@tiptap/core' {
28
- interface Commands {
20
+ interface Commands<ReturnType> {
29
21
  splitBlock: {
30
22
  /**
31
23
  * Forks a new node from an existing node.
32
24
  */
33
- splitBlock: (options?: { keepMarks?: boolean }) => Command,
25
+ splitBlock: (options?: { keepMarks?: boolean }) => ReturnType,
34
26
  }
35
27
  }
36
28
  }
@@ -57,7 +49,7 @@ export const splitBlock: RawCommands['splitBlock'] = ({ keepMarks = true } = {})
57
49
 
58
50
  if (dispatch) {
59
51
  if (keepMarks) {
60
- ensureMarks(state)
52
+ ensureMarks(state, editor.extensionManager.splittableMarks)
61
53
  }
62
54
 
63
55
  tr.split($from.pos).scrollIntoView()
@@ -108,17 +100,22 @@ export const splitBlock: RawCommands['splitBlock'] = ({ keepMarks = true } = {})
108
100
  tr.split(tr.mapping.map($from.pos), 1, types)
109
101
 
110
102
  if (
111
- !atEnd
103
+ deflt
104
+ && !atEnd
112
105
  && !$from.parentOffset
113
106
  && $from.parent.type !== deflt
114
- && $from.node(-1).canReplace($from.index(-1), $from.indexAfter(-1), Fragment.from(deflt?.create()))
115
107
  ) {
116
- tr.setNodeMarkup(tr.mapping.map($from.before()), deflt || undefined)
108
+ const first = tr.mapping.map($from.before())
109
+ const $first = tr.doc.resolve(first)
110
+
111
+ if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {
112
+ tr.setNodeMarkup(tr.mapping.map($from.before()), deflt)
113
+ }
117
114
  }
118
115
  }
119
116
 
120
117
  if (keepMarks) {
121
- ensureMarks(state)
118
+ ensureMarks(state, editor.extensionManager.splittableMarks)
122
119
  }
123
120
 
124
121
  tr.scrollIntoView()