@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,12 +1,12 @@
1
1
  import { Command, RawCommands } from '../types'
2
2
 
3
3
  declare module '@tiptap/core' {
4
- interface Commands {
4
+ interface Commands<ReturnType> {
5
5
  command: {
6
6
  /**
7
7
  * Define a command inline.
8
8
  */
9
- command: (fn: (props: Parameters<Command>[0]) => boolean) => Command,
9
+ command: (fn: (props: Parameters<Command>[0]) => boolean) => ReturnType,
10
10
  }
11
11
  }
12
12
  }
@@ -1,13 +1,14 @@
1
1
  import { createParagraphNear as originalCreateParagraphNear } 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
  createParagraphNear: {
7
8
  /**
8
9
  * Create a paragraph nearby.
9
10
  */
10
- createParagraphNear: () => Command,
11
+ createParagraphNear: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -0,0 +1,37 @@
1
+ import { NodeType } from 'prosemirror-model'
2
+
3
+ import { getNodeType } from '../helpers/getNodeType'
4
+ import { RawCommands } from '../types'
5
+
6
+ declare module '@tiptap/core' {
7
+ interface Commands<ReturnType> {
8
+ deleteNode: {
9
+ /**
10
+ * Delete a node.
11
+ */
12
+ deleteNode: (typeOrName: string | NodeType) => ReturnType,
13
+ }
14
+ }
15
+ }
16
+
17
+ export const deleteNode: RawCommands['deleteNode'] = typeOrName => ({ tr, state, dispatch }) => {
18
+ const type = getNodeType(typeOrName, state.schema)
19
+ const $pos = tr.selection.$anchor
20
+
21
+ for (let depth = $pos.depth; depth > 0; depth -= 1) {
22
+ const node = $pos.node(depth)
23
+
24
+ if (node.type === type) {
25
+ if (dispatch) {
26
+ const from = $pos.before(depth)
27
+ const to = $pos.after(depth)
28
+
29
+ tr.delete(from, to).scrollIntoView()
30
+ }
31
+
32
+ return true
33
+ }
34
+ }
35
+
36
+ return false
37
+ }
@@ -1,12 +1,12 @@
1
- import { Command, RawCommands, Range } from '../types'
1
+ import { Range, RawCommands } from '../types'
2
2
 
3
3
  declare module '@tiptap/core' {
4
- interface Commands {
4
+ interface Commands<ReturnType> {
5
5
  deleteRange: {
6
6
  /**
7
7
  * Delete a given range.
8
8
  */
9
- deleteRange: (range: Range) => Command,
9
+ deleteRange: (range: Range) => ReturnType,
10
10
  }
11
11
  }
12
12
  }
@@ -1,13 +1,14 @@
1
1
  import { deleteSelection as originalDeleteSelection } 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
  deleteSelection: {
7
8
  /**
8
9
  * Delete the selection, if there is one.
9
10
  */
10
- deleteSelection: () => Command,
11
+ deleteSelection: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -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
  enter: {
6
6
  /**
7
7
  * Trigger enter.
8
8
  */
9
- enter: () => Command,
9
+ enter: () => ReturnType,
10
10
  }
11
11
  }
12
12
  }
@@ -1,13 +1,14 @@
1
1
  import { exitCode as originalExitCode } 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
  exitCode: {
7
8
  /**
8
9
  * Exit from a code block.
9
10
  */
10
- exitCode: () => Command,
11
+ exitCode: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -1,29 +1,30 @@
1
- import { TextSelection } from 'prosemirror-state'
2
1
  import { MarkType } from 'prosemirror-model'
3
- import { Command, RawCommands } from '../types'
4
- import getMarkType from '../helpers/getMarkType'
5
- import getMarkRange from '../helpers/getMarkRange'
2
+ import { TextSelection } from 'prosemirror-state'
3
+
4
+ import { getMarkRange } from '../helpers/getMarkRange'
5
+ import { getMarkType } from '../helpers/getMarkType'
6
+ import { RawCommands } from '../types'
6
7
 
7
8
  declare module '@tiptap/core' {
8
- interface Commands {
9
+ interface Commands<ReturnType> {
9
10
  extendMarkRange: {
10
11
  /**
11
12
  * Extends the text selection to the current mark.
12
13
  */
13
- extendMarkRange: (typeOrName: string | MarkType) => Command,
14
+ extendMarkRange: (typeOrName: string | MarkType, attributes?: Record<string, any>) => ReturnType,
14
15
  }
15
16
  }
16
17
  }
17
18
 
18
- export const extendMarkRange: RawCommands['extendMarkRange'] = typeOrName => ({ tr, state, dispatch }) => {
19
+ export const extendMarkRange: RawCommands['extendMarkRange'] = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {
19
20
  const type = getMarkType(typeOrName, state.schema)
20
21
  const { doc, selection } = tr
21
- const { $from, empty } = selection
22
+ const { $from, from, to } = selection
22
23
 
23
- if (empty && dispatch) {
24
- const range = getMarkRange($from, type)
24
+ if (dispatch) {
25
+ const range = getMarkRange($from, type, attributes)
25
26
 
26
- if (range) {
27
+ if (range && range.from <= from && range.to >= to) {
27
28
  const newSelection = TextSelection.create(doc, range.from, range.to)
28
29
 
29
30
  tr.setSelection(newSelection)
@@ -1,12 +1,12 @@
1
- import { Command, RawCommands } from '../types'
1
+ import { Command, CommandProps, RawCommands } from '../types'
2
2
 
3
3
  declare module '@tiptap/core' {
4
- interface Commands {
4
+ interface Commands<ReturnType> {
5
5
  first: {
6
6
  /**
7
7
  * Runs one command after the other and stops at the first which returns true.
8
8
  */
9
- first: (commands: Command[] | ((props: Parameters<Command>[0]) => Command[])) => Command,
9
+ first: (commands: Command[] | ((props: CommandProps) => Command[])) => ReturnType,
10
10
  }
11
11
  }
12
12
  }
@@ -1,79 +1,82 @@
1
- import { EditorState, TextSelection } from 'prosemirror-state'
2
- import { Command, RawCommands, FocusPosition } from '../types'
3
- import minMax from '../utilities/minMax'
4
- import isTextSelection from '../helpers/isTextSelection'
5
-
6
- function resolveSelection(state: EditorState, position: FocusPosition = null) {
7
- if (!position) {
8
- return null
9
- }
10
-
11
- if (position === 'start' || position === true) {
12
- return {
13
- from: 0,
14
- to: 0,
15
- }
16
- }
17
-
18
- if (position === 'end') {
19
- const { size } = state.doc.content
20
-
21
- return {
22
- from: size,
23
- to: size,
24
- }
25
- }
26
-
27
- return {
28
- from: position,
29
- to: position,
30
- }
31
- }
1
+ import { isTextSelection } from '../helpers/isTextSelection'
2
+ import { resolveFocusPosition } from '../helpers/resolveFocusPosition'
3
+ import { FocusPosition, RawCommands } from '../types'
4
+ import { isiOS } from '../utilities/isiOS'
32
5
 
33
6
  declare module '@tiptap/core' {
34
- interface Commands {
7
+ interface Commands<ReturnType> {
35
8
  focus: {
36
9
  /**
37
10
  * Focus the editor at the given position.
38
11
  */
39
- focus: (position?: FocusPosition) => Command,
12
+ focus: (
13
+ position?: FocusPosition,
14
+ options?: {
15
+ scrollIntoView?: boolean,
16
+ },
17
+ ) => ReturnType,
40
18
  }
41
19
  }
42
20
  }
43
21
 
44
- export const focus: RawCommands['focus'] = (position = null) => ({
22
+ export const focus: RawCommands['focus'] = (position = null, options = {}) => ({
45
23
  editor,
46
24
  view,
47
25
  tr,
48
26
  dispatch,
49
27
  }) => {
28
+ options = {
29
+ scrollIntoView: true,
30
+ ...options,
31
+ }
32
+
33
+ const delayedFocus = () => {
34
+ // focus within `requestAnimationFrame` breaks focus on iOS
35
+ // so we have to call this
36
+ if (isiOS()) {
37
+ (view.dom as HTMLElement).focus()
38
+ }
39
+
40
+ // For React we have to focus asynchronously. Otherwise wild things happen.
41
+ // see: https://github.com/ueberdosis/tiptap/issues/1520
42
+ requestAnimationFrame(() => {
43
+ if (!editor.isDestroyed) {
44
+ view.focus()
45
+
46
+ if (options?.scrollIntoView) {
47
+ editor.commands.scrollIntoView()
48
+ }
49
+ }
50
+ })
51
+ }
52
+
50
53
  if ((view.hasFocus() && position === null) || position === false) {
51
54
  return true
52
55
  }
53
56
 
54
57
  // we don’t try to resolve a NodeSelection or CellSelection
55
58
  if (dispatch && position === null && !isTextSelection(editor.state.selection)) {
56
- view.focus()
59
+ delayedFocus()
57
60
  return true
58
61
  }
59
62
 
60
- const { from, to } = resolveSelection(editor.state, position) || editor.state.selection
61
- const { doc, storedMarks } = tr
62
- const resolvedFrom = minMax(from, 0, doc.content.size)
63
- const resolvedEnd = minMax(to, 0, doc.content.size)
64
- const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
63
+ // pass through tr.doc instead of editor.state.doc
64
+ // since transactions could change the editors state before this command has been run
65
+ const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection
65
66
  const isSameSelection = editor.state.selection.eq(selection)
66
67
 
67
68
  if (dispatch) {
68
- tr.setSelection(selection)
69
+ if (!isSameSelection) {
70
+ tr.setSelection(selection)
71
+ }
69
72
 
70
73
  // `tr.setSelection` resets the stored marks
71
74
  // so we’ll restore them if the selection is the same as before
72
- if (isSameSelection && storedMarks) {
73
- tr.setStoredMarks(storedMarks)
75
+ if (isSameSelection && tr.storedMarks) {
76
+ tr.setStoredMarks(tr.storedMarks)
74
77
  }
75
78
 
76
- view.focus()
79
+ delayedFocus()
77
80
  }
78
81
 
79
82
  return true
@@ -0,0 +1,24 @@
1
+ import { CommandProps, RawCommands } from '../types'
2
+
3
+ declare module '@tiptap/core' {
4
+ interface Commands<ReturnType> {
5
+ forEach: {
6
+ /**
7
+ * Loop through an array of items.
8
+ */
9
+ forEach: <T>(
10
+ items: T[],
11
+ fn: (
12
+ item: T,
13
+ props: CommandProps & {
14
+ index: number,
15
+ },
16
+ ) => boolean,
17
+ ) => ReturnType,
18
+ }
19
+ }
20
+ }
21
+
22
+ export const forEach: RawCommands['forEach'] = (items, fn) => props => {
23
+ return items.every((item, index) => fn(item, { ...props, index }))
24
+ }
@@ -0,0 +1,50 @@
1
+ export * from './blur'
2
+ export * from './clearContent'
3
+ export * from './clearNodes'
4
+ export * from './command'
5
+ export * from './createParagraphNear'
6
+ export * from './deleteNode'
7
+ export * from './deleteRange'
8
+ export * from './deleteSelection'
9
+ export * from './enter'
10
+ export * from './exitCode'
11
+ export * from './extendMarkRange'
12
+ export * from './first'
13
+ export * from './focus'
14
+ export * from './forEach'
15
+ export * from './insertContent'
16
+ export * from './insertContentAt'
17
+ export * from './joinBackward'
18
+ export * from './joinForward'
19
+ export * from './keyboardShortcut'
20
+ export * from './lift'
21
+ export * from './liftEmptyBlock'
22
+ export * from './liftListItem'
23
+ export * from './newlineInCode'
24
+ export * from './resetAttributes'
25
+ export * from './scrollIntoView'
26
+ export * from './selectAll'
27
+ export * from './selectNodeBackward'
28
+ export * from './selectNodeForward'
29
+ export * from './selectParentNode'
30
+ export * from './selectTextblockEnd'
31
+ export * from './selectTextblockStart'
32
+ export * from './setContent'
33
+ export * from './setMark'
34
+ export * from './setMeta'
35
+ export * from './setNode'
36
+ export * from './setNodeSelection'
37
+ export * from './setTextSelection'
38
+ export * from './sinkListItem'
39
+ export * from './splitBlock'
40
+ export * from './splitListItem'
41
+ export * from './toggleList'
42
+ export * from './toggleMark'
43
+ export * from './toggleNode'
44
+ export * from './toggleWrap'
45
+ export * from './undoInputRule'
46
+ export * from './unsetAllMarks'
47
+ export * from './unsetMark'
48
+ export * from './updateAttributes'
49
+ export * from './wrapIn'
50
+ export * from './wrapInList'
@@ -0,0 +1,24 @@
1
+ import { ParseOptions } from 'prosemirror-model'
2
+
3
+ import { Content, RawCommands } from '../types'
4
+
5
+ declare module '@tiptap/core' {
6
+ interface Commands<ReturnType> {
7
+ insertContent: {
8
+ /**
9
+ * Insert a node or string of HTML at the current position.
10
+ */
11
+ insertContent: (
12
+ value: Content,
13
+ options?: {
14
+ parseOptions?: ParseOptions,
15
+ updateSelection?: boolean,
16
+ },
17
+ ) => ReturnType,
18
+ }
19
+ }
20
+ }
21
+
22
+ export const insertContent: RawCommands['insertContent'] = (value, options) => ({ tr, commands }) => {
23
+ return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options)
24
+ }
@@ -0,0 +1,108 @@
1
+ import { Fragment, Node as ProseMirrorNode, ParseOptions } from 'prosemirror-model'
2
+
3
+ import { createNodeFromContent } from '../helpers/createNodeFromContent'
4
+ import { selectionToInsertionEnd } from '../helpers/selectionToInsertionEnd'
5
+ import {
6
+ Content,
7
+ Range,
8
+ RawCommands,
9
+ } from '../types'
10
+
11
+ declare module '@tiptap/core' {
12
+ interface Commands<ReturnType> {
13
+ insertContentAt: {
14
+ /**
15
+ * Insert a node or string of HTML at a specific position.
16
+ */
17
+ insertContentAt: (
18
+ position: number | Range,
19
+ value: Content,
20
+ options?: {
21
+ parseOptions?: ParseOptions,
22
+ updateSelection?: boolean,
23
+ },
24
+ ) => ReturnType,
25
+ }
26
+ }
27
+ }
28
+
29
+ const isFragment = (nodeOrFragment: ProseMirrorNode | Fragment): nodeOrFragment is Fragment => {
30
+ return nodeOrFragment.toString().startsWith('<')
31
+ }
32
+
33
+ export const insertContentAt: RawCommands['insertContentAt'] = (position, value, options) => ({ tr, dispatch, editor }) => {
34
+ if (dispatch) {
35
+ options = {
36
+ parseOptions: {},
37
+ updateSelection: true,
38
+ ...options,
39
+ }
40
+
41
+ const content = createNodeFromContent(value, editor.schema, {
42
+ parseOptions: {
43
+ preserveWhitespace: 'full',
44
+ ...options.parseOptions,
45
+ },
46
+ })
47
+
48
+ // don’t dispatch an empty fragment because this can lead to strange errors
49
+ if (content.toString() === '<>') {
50
+ return true
51
+ }
52
+
53
+ let { from, to } = typeof position === 'number'
54
+ ? { from: position, to: position }
55
+ : position
56
+
57
+ let isOnlyTextContent = true
58
+ let isOnlyBlockContent = true
59
+ const nodes = isFragment(content)
60
+ ? content
61
+ : [content]
62
+
63
+ nodes.forEach(node => {
64
+ // check if added node is valid
65
+ node.check()
66
+
67
+ isOnlyTextContent = isOnlyTextContent
68
+ ? node.isText && node.marks.length === 0
69
+ : false
70
+
71
+ isOnlyBlockContent = isOnlyBlockContent
72
+ ? node.isBlock
73
+ : false
74
+ })
75
+
76
+ // check if we can replace the wrapping node by
77
+ // the newly inserted content
78
+ // example:
79
+ // replace an empty paragraph by an inserted image
80
+ // instead of inserting the image below the paragraph
81
+ if (from === to && isOnlyBlockContent) {
82
+ const { parent } = tr.doc.resolve(from)
83
+ const isEmptyTextBlock = parent.isTextblock
84
+ && !parent.type.spec.code
85
+ && !parent.childCount
86
+
87
+ if (isEmptyTextBlock) {
88
+ from -= 1
89
+ to += 1
90
+ }
91
+ }
92
+
93
+ // if there is only plain text we have to use `insertText`
94
+ // because this will keep the current marks
95
+ if (isOnlyTextContent) {
96
+ tr.insertText(value as string, from, to)
97
+ } else {
98
+ tr.replaceWith(from, to, content)
99
+ }
100
+
101
+ // set cursor at end of inserted content
102
+ if (options.updateSelection) {
103
+ selectionToInsertionEnd(tr, tr.steps.length - 1, -1)
104
+ }
105
+ }
106
+
107
+ return true
108
+ }
@@ -1,13 +1,14 @@
1
1
  import { joinBackward as originalJoinBackward } 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
  joinBackward: {
7
8
  /**
8
9
  * Join two nodes backward.
9
10
  */
10
- joinBackward: () => Command,
11
+ joinBackward: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -1,13 +1,14 @@
1
1
  import { joinForward as originalJoinForward } 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
  joinForward: {
7
8
  /**
8
9
  * Join two nodes forward.
9
10
  */
10
- joinForward: () => Command,
11
+ joinForward: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -1,6 +1,6 @@
1
- import { Command, RawCommands } from '../types'
2
-
3
- const mac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false
1
+ import { RawCommands } from '../types'
2
+ import { isiOS } from '../utilities/isiOS'
3
+ import { isMacOS } from '../utilities/isMacOS'
4
4
 
5
5
  function normalizeKeyName(name: string) {
6
6
  const parts = name.split(/-(?!$)/)
@@ -27,7 +27,7 @@ function normalizeKeyName(name: string) {
27
27
  } else if (/^s(hift)?$/i.test(mod)) {
28
28
  shift = true
29
29
  } else if (/^mod$/i.test(mod)) {
30
- if (mac) {
30
+ if (isiOS() || isMacOS()) {
31
31
  meta = true
32
32
  } else {
33
33
  ctrl = true
@@ -57,12 +57,12 @@ function normalizeKeyName(name: string) {
57
57
  }
58
58
 
59
59
  declare module '@tiptap/core' {
60
- interface Commands {
60
+ interface Commands<ReturnType> {
61
61
  keyboardShortcut: {
62
62
  /**
63
63
  * Trigger a keyboard shortcut.
64
64
  */
65
- keyboardShortcut: (name: string) => Command,
65
+ keyboardShortcut: (name: string) => ReturnType,
66
66
  }
67
67
  }
68
68
  }
@@ -1,16 +1,17 @@
1
1
  import { lift as originalLift } from 'prosemirror-commands'
2
2
  import { NodeType } from 'prosemirror-model'
3
- import { Command, RawCommands, AnyObject } from '../types'
4
- import isNodeActive from '../helpers/isNodeActive'
5
- import getNodeType from '../helpers/getNodeType'
3
+
4
+ import { getNodeType } from '../helpers/getNodeType'
5
+ import { isNodeActive } from '../helpers/isNodeActive'
6
+ import { RawCommands } from '../types'
6
7
 
7
8
  declare module '@tiptap/core' {
8
- interface Commands {
9
+ interface Commands<ReturnType> {
9
10
  lift: {
10
11
  /**
11
12
  * Removes an existing wrap.
12
13
  */
13
- lift: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
14
+ lift: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
14
15
  }
15
16
  }
16
17
  }
@@ -1,13 +1,14 @@
1
1
  import { liftEmptyBlock as originalLiftEmptyBlock } 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
  liftEmptyBlock: {
7
8
  /**
8
9
  * Lift block if empty.
9
10
  */
10
- liftEmptyBlock: () => Command,
11
+ liftEmptyBlock: () => ReturnType,
11
12
  }
12
13
  }
13
14
  }
@@ -1,15 +1,16 @@
1
- import { liftListItem as originalLiftListItem } 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 { liftListItem as originalLiftListItem } 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
  liftListItem: {
9
10
  /**
10
11
  * Lift the list item into a wrapping list.
11
12
  */
12
- liftListItem: (typeOrName: string | NodeType) => Command,
13
+ liftListItem: (typeOrName: string | NodeType) => ReturnType,
13
14
  }
14
15
  }
15
16
  }