@tiptap/core 3.0.0 → 3.0.1

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 (340) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +5 -1
  3. package/dist/index.cjs +5169 -4654
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +3356 -0
  6. package/dist/index.d.ts +3356 -0
  7. package/dist/index.js +5051 -4561
  8. package/dist/index.js.map +1 -1
  9. package/dist/jsx-runtime/jsx-runtime.cjs +56 -0
  10. package/dist/jsx-runtime/jsx-runtime.cjs.map +1 -0
  11. package/dist/jsx-runtime/jsx-runtime.d.cts +22 -0
  12. package/dist/jsx-runtime/jsx-runtime.d.ts +22 -0
  13. package/dist/jsx-runtime/jsx-runtime.js +26 -0
  14. package/dist/jsx-runtime/jsx-runtime.js.map +1 -0
  15. package/jsx-dev-runtime/index.cjs +1 -0
  16. package/jsx-dev-runtime/index.d.cts +1 -0
  17. package/jsx-dev-runtime/index.d.ts +1 -0
  18. package/jsx-dev-runtime/index.js +1 -0
  19. package/jsx-runtime/index.cjs +1 -0
  20. package/jsx-runtime/index.d.cts +1 -0
  21. package/jsx-runtime/index.d.ts +1 -0
  22. package/jsx-runtime/index.js +1 -0
  23. package/package.json +30 -10
  24. package/src/CommandManager.ts +4 -11
  25. package/src/Editor.ts +273 -100
  26. package/src/EventEmitter.ts +16 -10
  27. package/src/Extendable.ts +484 -0
  28. package/src/Extension.ts +29 -493
  29. package/src/ExtensionManager.ts +100 -143
  30. package/src/InputRule.ts +28 -24
  31. package/src/Mark.ts +157 -624
  32. package/src/MarkView.ts +122 -0
  33. package/src/Node.ts +343 -807
  34. package/src/NodePos.ts +18 -9
  35. package/src/NodeView.ts +58 -35
  36. package/src/PasteRule.ts +68 -24
  37. package/src/Tracker.ts +8 -10
  38. package/src/commands/blur.ts +15 -13
  39. package/src/commands/clearContent.ts +13 -6
  40. package/src/commands/clearNodes.ts +33 -31
  41. package/src/commands/command.ts +2 -2
  42. package/src/commands/createParagraphNear.ts +6 -4
  43. package/src/commands/cut.ts +13 -11
  44. package/src/commands/deleteCurrentNode.ts +24 -22
  45. package/src/commands/deleteNode.ts +20 -18
  46. package/src/commands/deleteRange.ts +11 -9
  47. package/src/commands/deleteSelection.ts +6 -4
  48. package/src/commands/enter.ts +7 -5
  49. package/src/commands/exitCode.ts +6 -4
  50. package/src/commands/extendMarkRange.ts +16 -14
  51. package/src/commands/first.ts +3 -5
  52. package/src/commands/focus.ts +51 -53
  53. package/src/commands/forEach.ts +3 -3
  54. package/src/commands/insertContent.ts +8 -10
  55. package/src/commands/insertContentAt.ts +131 -76
  56. package/src/commands/join.ts +21 -13
  57. package/src/commands/joinItemBackward.ts +17 -19
  58. package/src/commands/joinItemForward.ts +17 -19
  59. package/src/commands/joinTextblockBackward.ts +6 -4
  60. package/src/commands/joinTextblockForward.ts +6 -4
  61. package/src/commands/keyboardShortcut.ts +30 -35
  62. package/src/commands/lift.ts +12 -10
  63. package/src/commands/liftEmptyBlock.ts +7 -5
  64. package/src/commands/liftListItem.ts +8 -6
  65. package/src/commands/newlineInCode.ts +6 -4
  66. package/src/commands/resetAttributes.ts +38 -43
  67. package/src/commands/scrollIntoView.ts +10 -8
  68. package/src/commands/selectAll.ts +15 -8
  69. package/src/commands/selectNodeBackward.ts +6 -4
  70. package/src/commands/selectNodeForward.ts +6 -4
  71. package/src/commands/selectParentNode.ts +6 -4
  72. package/src/commands/selectTextblockEnd.ts +6 -4
  73. package/src/commands/selectTextblockStart.ts +6 -4
  74. package/src/commands/setContent.ts +37 -40
  75. package/src/commands/setMark.ts +58 -60
  76. package/src/commands/setMeta.ts +10 -6
  77. package/src/commands/setNode.ts +36 -27
  78. package/src/commands/setNodeSelection.ts +12 -10
  79. package/src/commands/setTextSelection.ts +16 -14
  80. package/src/commands/sinkListItem.ts +8 -6
  81. package/src/commands/splitBlock.ts +60 -68
  82. package/src/commands/splitListItem.ts +99 -101
  83. package/src/commands/toggleList.ts +76 -74
  84. package/src/commands/toggleMark.ts +13 -11
  85. package/src/commands/toggleNode.ts +22 -11
  86. package/src/commands/toggleWrap.ts +12 -10
  87. package/src/commands/undoInputRule.ts +32 -30
  88. package/src/commands/unsetAllMarks.ts +17 -15
  89. package/src/commands/unsetMark.ts +29 -27
  90. package/src/commands/updateAttributes.ts +97 -45
  91. package/src/commands/wrapIn.ts +8 -6
  92. package/src/commands/wrapInList.ts +8 -6
  93. package/src/extensions/clipboardTextSerializer.ts +2 -4
  94. package/src/extensions/delete.ts +89 -0
  95. package/src/extensions/drop.ts +26 -0
  96. package/src/extensions/focusEvents.ts +5 -7
  97. package/src/extensions/index.ts +4 -1
  98. package/src/extensions/keymap.ts +63 -52
  99. package/src/extensions/paste.ts +25 -0
  100. package/src/extensions/tabindex.ts +1 -1
  101. package/src/helpers/combineTransactionSteps.ts +3 -6
  102. package/src/helpers/createChainableState.ts +2 -5
  103. package/src/helpers/createDocument.ts +3 -3
  104. package/src/helpers/createNodeFromContent.ts +37 -25
  105. package/src/helpers/defaultBlockAt.ts +1 -1
  106. package/src/helpers/findChildren.ts +2 -2
  107. package/src/helpers/findChildrenInRange.ts +3 -7
  108. package/src/helpers/findParentNode.ts +5 -3
  109. package/src/helpers/findParentNodeClosestToPos.ts +2 -2
  110. package/src/helpers/flattenExtensions.ts +30 -0
  111. package/src/helpers/generateHTML.ts +1 -1
  112. package/src/helpers/generateJSON.ts +1 -1
  113. package/src/helpers/generateText.ts +1 -1
  114. package/src/helpers/getAttributes.ts +3 -6
  115. package/src/helpers/getAttributesFromExtensions.ts +29 -38
  116. package/src/helpers/getChangedRanges.ts +15 -13
  117. package/src/helpers/getDebugJSON.ts +2 -2
  118. package/src/helpers/getExtensionField.ts +12 -12
  119. package/src/helpers/getHTMLFromFragment.ts +2 -1
  120. package/src/helpers/getMarkAttributes.ts +3 -6
  121. package/src/helpers/getMarkRange.ts +36 -19
  122. package/src/helpers/getMarkType.ts +2 -4
  123. package/src/helpers/getMarksBetween.ts +3 -3
  124. package/src/helpers/getNodeAtPosition.ts +2 -2
  125. package/src/helpers/getNodeAttributes.ts +3 -6
  126. package/src/helpers/getNodeType.ts +2 -4
  127. package/src/helpers/getRenderedAttributes.ts +3 -2
  128. package/src/helpers/getSchema.ts +5 -5
  129. package/src/helpers/getSchemaByResolvedExtensions.ts +49 -79
  130. package/src/helpers/getSchemaTypeByName.ts +1 -1
  131. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  132. package/src/helpers/getSplittedAttributes.ts +5 -5
  133. package/src/helpers/getText.ts +2 -2
  134. package/src/helpers/getTextBetween.ts +2 -2
  135. package/src/helpers/getTextContentFromNodes.ts +9 -12
  136. package/src/helpers/getTextSerializersFromSchema.ts +2 -2
  137. package/src/helpers/index.ts +4 -0
  138. package/src/helpers/injectExtensionAttributesToParseRule.ts +3 -3
  139. package/src/helpers/isActive.ts +2 -6
  140. package/src/helpers/isAtEndOfNode.ts +1 -1
  141. package/src/helpers/isAtStartOfNode.ts +1 -1
  142. package/src/helpers/isExtensionRulesEnabled.ts +2 -4
  143. package/src/helpers/isList.ts +2 -2
  144. package/src/helpers/isMarkActive.ts +3 -3
  145. package/src/helpers/isNodeActive.ts +3 -3
  146. package/src/helpers/isNodeEmpty.ts +56 -5
  147. package/src/helpers/posToDOMRect.ts +1 -1
  148. package/src/helpers/resolveExtensions.ts +25 -0
  149. package/src/helpers/resolveFocusPosition.ts +5 -16
  150. package/src/helpers/rewriteUnknownContent.ts +149 -0
  151. package/src/helpers/selectionToInsertionEnd.ts +2 -1
  152. package/src/helpers/sortExtensions.ts +26 -0
  153. package/src/helpers/splitExtensions.ts +4 -4
  154. package/src/index.ts +3 -7
  155. package/src/inputRules/markInputRule.ts +6 -9
  156. package/src/inputRules/nodeInputRule.ts +7 -13
  157. package/src/inputRules/textInputRule.ts +4 -6
  158. package/src/inputRules/textblockTypeInputRule.ts +7 -12
  159. package/src/inputRules/wrappingInputRule.ts +19 -24
  160. package/src/jsx-runtime.ts +64 -0
  161. package/src/pasteRules/markPasteRule.ts +6 -7
  162. package/src/pasteRules/nodePasteRule.ts +15 -11
  163. package/src/pasteRules/textPasteRule.ts +4 -6
  164. package/src/style.ts +2 -6
  165. package/src/types.ts +513 -58
  166. package/src/utilities/callOrReturn.ts +1 -1
  167. package/src/utilities/canInsertNode.ts +30 -0
  168. package/src/utilities/createStyleTag.ts +3 -1
  169. package/src/utilities/deleteProps.ts +7 -11
  170. package/src/utilities/elementFromString.ts +3 -0
  171. package/src/utilities/findDuplicates.ts +5 -2
  172. package/src/utilities/index.ts +2 -0
  173. package/src/utilities/isFunction.ts +1 -0
  174. package/src/utilities/isMacOS.ts +1 -3
  175. package/src/utilities/isiOS.ts +5 -10
  176. package/src/utilities/mergeAttributes.ts +32 -5
  177. package/src/utilities/removeDuplicates.ts +1 -3
  178. package/dist/index.umd.js +0 -5098
  179. package/dist/index.umd.js.map +0 -1
  180. package/dist/packages/core/src/CommandManager.d.ts +0 -20
  181. package/dist/packages/core/src/Editor.d.ts +0 -161
  182. package/dist/packages/core/src/EventEmitter.d.ts +0 -11
  183. package/dist/packages/core/src/Extension.d.ts +0 -343
  184. package/dist/packages/core/src/ExtensionManager.d.ts +0 -55
  185. package/dist/packages/core/src/InputRule.d.ts +0 -42
  186. package/dist/packages/core/src/Mark.d.ts +0 -451
  187. package/dist/packages/core/src/Node.d.ts +0 -611
  188. package/dist/packages/core/src/NodePos.d.ts +0 -44
  189. package/dist/packages/core/src/NodeView.d.ts +0 -31
  190. package/dist/packages/core/src/PasteRule.d.ts +0 -50
  191. package/dist/packages/core/src/Tracker.d.ts +0 -11
  192. package/dist/packages/core/src/commands/blur.d.ts +0 -13
  193. package/dist/packages/core/src/commands/clearContent.d.ts +0 -14
  194. package/dist/packages/core/src/commands/clearNodes.d.ts +0 -13
  195. package/dist/packages/core/src/commands/command.d.ts +0 -18
  196. package/dist/packages/core/src/commands/createParagraphNear.d.ts +0 -13
  197. package/dist/packages/core/src/commands/cut.d.ts +0 -20
  198. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +0 -13
  199. package/dist/packages/core/src/commands/deleteNode.d.ts +0 -15
  200. package/dist/packages/core/src/commands/deleteRange.d.ts +0 -14
  201. package/dist/packages/core/src/commands/deleteSelection.d.ts +0 -13
  202. package/dist/packages/core/src/commands/enter.d.ts +0 -13
  203. package/dist/packages/core/src/commands/exitCode.d.ts +0 -13
  204. package/dist/packages/core/src/commands/extendMarkRange.d.ts +0 -25
  205. package/dist/packages/core/src/commands/first.d.ts +0 -14
  206. package/dist/packages/core/src/commands/focus.d.ts +0 -27
  207. package/dist/packages/core/src/commands/forEach.d.ts +0 -14
  208. package/dist/packages/core/src/commands/index.d.ts +0 -55
  209. package/dist/packages/core/src/commands/insertContent.d.ts +0 -34
  210. package/dist/packages/core/src/commands/insertContentAt.d.ts +0 -47
  211. package/dist/packages/core/src/commands/join.d.ts +0 -41
  212. package/dist/packages/core/src/commands/joinItemBackward.d.ts +0 -13
  213. package/dist/packages/core/src/commands/joinItemForward.d.ts +0 -13
  214. package/dist/packages/core/src/commands/joinTextblockBackward.d.ts +0 -12
  215. package/dist/packages/core/src/commands/joinTextblockForward.d.ts +0 -12
  216. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +0 -14
  217. package/dist/packages/core/src/commands/lift.d.ts +0 -17
  218. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +0 -13
  219. package/dist/packages/core/src/commands/liftListItem.d.ts +0 -15
  220. package/dist/packages/core/src/commands/newlineInCode.d.ts +0 -13
  221. package/dist/packages/core/src/commands/resetAttributes.d.ts +0 -16
  222. package/dist/packages/core/src/commands/scrollIntoView.d.ts +0 -13
  223. package/dist/packages/core/src/commands/selectAll.d.ts +0 -13
  224. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +0 -13
  225. package/dist/packages/core/src/commands/selectNodeForward.d.ts +0 -13
  226. package/dist/packages/core/src/commands/selectParentNode.d.ts +0 -13
  227. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +0 -13
  228. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +0 -13
  229. package/dist/packages/core/src/commands/setContent.d.ts +0 -40
  230. package/dist/packages/core/src/commands/setMark.d.ts +0 -15
  231. package/dist/packages/core/src/commands/setMeta.d.ts +0 -15
  232. package/dist/packages/core/src/commands/setNode.d.ts +0 -16
  233. package/dist/packages/core/src/commands/setNodeSelection.d.ts +0 -14
  234. package/dist/packages/core/src/commands/setTextSelection.d.ts +0 -14
  235. package/dist/packages/core/src/commands/sinkListItem.d.ts +0 -15
  236. package/dist/packages/core/src/commands/splitBlock.d.ts +0 -17
  237. package/dist/packages/core/src/commands/splitListItem.d.ts +0 -15
  238. package/dist/packages/core/src/commands/toggleList.d.ts +0 -18
  239. package/dist/packages/core/src/commands/toggleMark.d.ts +0 -30
  240. package/dist/packages/core/src/commands/toggleNode.d.ts +0 -17
  241. package/dist/packages/core/src/commands/toggleWrap.d.ts +0 -16
  242. package/dist/packages/core/src/commands/undoInputRule.d.ts +0 -13
  243. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +0 -13
  244. package/dist/packages/core/src/commands/unsetMark.d.ts +0 -25
  245. package/dist/packages/core/src/commands/updateAttributes.d.ts +0 -24
  246. package/dist/packages/core/src/commands/wrapIn.d.ts +0 -16
  247. package/dist/packages/core/src/commands/wrapInList.d.ts +0 -16
  248. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +0 -5
  249. package/dist/packages/core/src/extensions/commands.d.ts +0 -3
  250. package/dist/packages/core/src/extensions/editable.d.ts +0 -2
  251. package/dist/packages/core/src/extensions/focusEvents.d.ts +0 -2
  252. package/dist/packages/core/src/extensions/index.d.ts +0 -6
  253. package/dist/packages/core/src/extensions/keymap.d.ts +0 -2
  254. package/dist/packages/core/src/extensions/tabindex.d.ts +0 -2
  255. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +0 -10
  256. package/dist/packages/core/src/helpers/createChainableState.d.ts +0 -10
  257. package/dist/packages/core/src/helpers/createDocument.d.ts +0 -12
  258. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +0 -15
  259. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +0 -7
  260. package/dist/packages/core/src/helpers/findChildren.d.ts +0 -9
  261. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +0 -10
  262. package/dist/packages/core/src/helpers/findParentNode.d.ts +0 -16
  263. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +0 -17
  264. package/dist/packages/core/src/helpers/generateHTML.d.ts +0 -8
  265. package/dist/packages/core/src/helpers/generateJSON.d.ts +0 -8
  266. package/dist/packages/core/src/helpers/generateText.d.ts +0 -12
  267. package/dist/packages/core/src/helpers/getAttributes.d.ts +0 -9
  268. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +0 -6
  269. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +0 -11
  270. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +0 -8
  271. package/dist/packages/core/src/helpers/getExtensionField.d.ts +0 -9
  272. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +0 -2
  273. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +0 -3
  274. package/dist/packages/core/src/helpers/getMarkRange.d.ts +0 -3
  275. package/dist/packages/core/src/helpers/getMarkType.d.ts +0 -2
  276. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +0 -3
  277. package/dist/packages/core/src/helpers/getNodeAtPosition.d.ts +0 -11
  278. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +0 -3
  279. package/dist/packages/core/src/helpers/getNodeType.d.ts +0 -2
  280. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +0 -3
  281. package/dist/packages/core/src/helpers/getSchema.d.ts +0 -4
  282. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +0 -10
  283. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +0 -8
  284. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +0 -8
  285. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +0 -9
  286. package/dist/packages/core/src/helpers/getText.d.ts +0 -15
  287. package/dist/packages/core/src/helpers/getTextBetween.d.ts +0 -14
  288. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +0 -8
  289. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +0 -8
  290. package/dist/packages/core/src/helpers/index.d.ts +0 -50
  291. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +0 -9
  292. package/dist/packages/core/src/helpers/isActive.d.ts +0 -2
  293. package/dist/packages/core/src/helpers/isAtEndOfNode.d.ts +0 -2
  294. package/dist/packages/core/src/helpers/isAtStartOfNode.d.ts +0 -2
  295. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +0 -2
  296. package/dist/packages/core/src/helpers/isList.d.ts +0 -2
  297. package/dist/packages/core/src/helpers/isMarkActive.d.ts +0 -3
  298. package/dist/packages/core/src/helpers/isNodeActive.d.ts +0 -3
  299. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +0 -2
  300. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +0 -2
  301. package/dist/packages/core/src/helpers/isTextSelection.d.ts +0 -2
  302. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +0 -2
  303. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +0 -4
  304. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +0 -2
  305. package/dist/packages/core/src/helpers/splitExtensions.d.ts +0 -9
  306. package/dist/packages/core/src/index.d.ts +0 -24
  307. package/dist/packages/core/src/inputRules/index.d.ts +0 -5
  308. package/dist/packages/core/src/inputRules/markInputRule.d.ts +0 -13
  309. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +0 -23
  310. package/dist/packages/core/src/inputRules/textInputRule.d.ts +0 -10
  311. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +0 -15
  312. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +0 -28
  313. package/dist/packages/core/src/pasteRules/index.d.ts +0 -3
  314. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +0 -13
  315. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +0 -13
  316. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +0 -10
  317. package/dist/packages/core/src/style.d.ts +0 -1
  318. package/dist/packages/core/src/types.d.ts +0 -255
  319. package/dist/packages/core/src/utilities/callOrReturn.d.ts +0 -9
  320. package/dist/packages/core/src/utilities/createStyleTag.d.ts +0 -1
  321. package/dist/packages/core/src/utilities/deleteProps.d.ts +0 -6
  322. package/dist/packages/core/src/utilities/elementFromString.d.ts +0 -1
  323. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +0 -1
  324. package/dist/packages/core/src/utilities/findDuplicates.d.ts +0 -1
  325. package/dist/packages/core/src/utilities/fromString.d.ts +0 -1
  326. package/dist/packages/core/src/utilities/index.d.ts +0 -20
  327. package/dist/packages/core/src/utilities/isAndroid.d.ts +0 -1
  328. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +0 -1
  329. package/dist/packages/core/src/utilities/isFunction.d.ts +0 -1
  330. package/dist/packages/core/src/utilities/isMacOS.d.ts +0 -1
  331. package/dist/packages/core/src/utilities/isNumber.d.ts +0 -1
  332. package/dist/packages/core/src/utilities/isPlainObject.d.ts +0 -1
  333. package/dist/packages/core/src/utilities/isRegExp.d.ts +0 -1
  334. package/dist/packages/core/src/utilities/isString.d.ts +0 -1
  335. package/dist/packages/core/src/utilities/isiOS.d.ts +0 -1
  336. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +0 -1
  337. package/dist/packages/core/src/utilities/mergeDeep.d.ts +0 -1
  338. package/dist/packages/core/src/utilities/minMax.d.ts +0 -1
  339. package/dist/packages/core/src/utilities/objectIncludes.d.ts +0 -8
  340. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +0 -8
@@ -1,6 +1,6 @@
1
1
  import { NodeSelection } from '@tiptap/pm/state'
2
2
 
3
- import { RawCommands } from '../types.js'
3
+ import type { RawCommands } from '../types.js'
4
4
  import { minMax } from '../utilities/minMax.js'
5
5
 
6
6
  declare module '@tiptap/core' {
@@ -16,14 +16,16 @@ declare module '@tiptap/core' {
16
16
  }
17
17
  }
18
18
 
19
- export const setNodeSelection: RawCommands['setNodeSelection'] = position => ({ tr, dispatch }) => {
20
- if (dispatch) {
21
- const { doc } = tr
22
- const from = minMax(position, 0, doc.content.size)
23
- const selection = NodeSelection.create(doc, from)
19
+ export const setNodeSelection: RawCommands['setNodeSelection'] =
20
+ position =>
21
+ ({ tr, dispatch }) => {
22
+ if (dispatch) {
23
+ const { doc } = tr
24
+ const from = minMax(position, 0, doc.content.size)
25
+ const selection = NodeSelection.create(doc, from)
24
26
 
25
- tr.setSelection(selection)
26
- }
27
+ tr.setSelection(selection)
28
+ }
27
29
 
28
- return true
29
- }
30
+ return true
31
+ }
@@ -1,6 +1,6 @@
1
1
  import { TextSelection } from '@tiptap/pm/state'
2
2
 
3
- import { Range, RawCommands } from '../types.js'
3
+ import type { Range, RawCommands } from '../types.js'
4
4
  import { minMax } from '../utilities/minMax.js'
5
5
 
6
6
  declare module '@tiptap/core' {
@@ -16,18 +16,20 @@ declare module '@tiptap/core' {
16
16
  }
17
17
  }
18
18
 
19
- export const setTextSelection: RawCommands['setTextSelection'] = position => ({ tr, dispatch }) => {
20
- if (dispatch) {
21
- const { doc } = tr
22
- const { from, to } = typeof position === 'number' ? { from: position, to: position } : 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)
19
+ export const setTextSelection: RawCommands['setTextSelection'] =
20
+ position =>
21
+ ({ tr, dispatch }) => {
22
+ if (dispatch) {
23
+ const { doc } = tr
24
+ const { from, to } = typeof position === 'number' ? { from: position, to: position } : position
25
+ const minPos = TextSelection.atStart(doc).from
26
+ const maxPos = TextSelection.atEnd(doc).to
27
+ const resolvedFrom = minMax(from, minPos, maxPos)
28
+ const resolvedEnd = minMax(to, minPos, maxPos)
29
+ const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)
28
30
 
29
- tr.setSelection(selection)
30
- }
31
+ tr.setSelection(selection)
32
+ }
31
33
 
32
- return true
33
- }
34
+ return true
35
+ }
@@ -1,8 +1,8 @@
1
- import { NodeType } from '@tiptap/pm/model'
1
+ import type { NodeType } from '@tiptap/pm/model'
2
2
  import { sinkListItem as originalSinkListItem } from '@tiptap/pm/schema-list'
3
3
 
4
4
  import { getNodeType } from '../helpers/getNodeType.js'
5
- import { RawCommands } from '../types.js'
5
+ import type { RawCommands } from '../types.js'
6
6
 
7
7
  declare module '@tiptap/core' {
8
8
  interface Commands<ReturnType> {
@@ -17,8 +17,10 @@ declare module '@tiptap/core' {
17
17
  }
18
18
  }
19
19
 
20
- export const sinkListItem: RawCommands['sinkListItem'] = typeOrName => ({ state, dispatch }) => {
21
- const type = getNodeType(typeOrName, state.schema)
20
+ export const sinkListItem: RawCommands['sinkListItem'] =
21
+ typeOrName =>
22
+ ({ state, dispatch }) => {
23
+ const type = getNodeType(typeOrName, state.schema)
22
24
 
23
- return originalSinkListItem(type)(state, dispatch)
24
- }
25
+ return originalSinkListItem(type)(state, dispatch)
26
+ }
@@ -1,9 +1,10 @@
1
- import { EditorState, NodeSelection, TextSelection } from '@tiptap/pm/state'
1
+ import type { EditorState } from '@tiptap/pm/state'
2
+ import { NodeSelection, TextSelection } from '@tiptap/pm/state'
2
3
  import { canSplit } from '@tiptap/pm/transform'
3
4
 
4
5
  import { defaultBlockAt } from '../helpers/defaultBlockAt.js'
5
6
  import { getSplittedAttributes } from '../helpers/getSplittedAttributes.js'
6
- import { RawCommands } from '../types.js'
7
+ import type { RawCommands } from '../types.js'
7
8
 
8
9
  function ensureMarks(state: EditorState, splittableMarks?: string[]) {
9
10
  const marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks())
@@ -29,95 +30,86 @@ declare module '@tiptap/core' {
29
30
  }
30
31
  }
31
32
 
32
- export const splitBlock: RawCommands['splitBlock'] = ({ keepMarks = true } = {}) => ({
33
- tr, state, dispatch, editor,
34
- }) => {
35
- const { selection, doc } = tr
36
- const { $from, $to } = selection
37
- const extensionAttributes = editor.extensionManager.attributes
38
- const newAttributes = getSplittedAttributes(
39
- extensionAttributes,
40
- $from.node().type.name,
41
- $from.node().attrs,
42
- )
43
-
44
- if (selection instanceof NodeSelection && selection.node.isBlock) {
45
- if (!$from.parentOffset || !canSplit(doc, $from.pos)) {
46
- return false
47
- }
33
+ export const splitBlock: RawCommands['splitBlock'] =
34
+ ({ keepMarks = true } = {}) =>
35
+ ({ tr, state, dispatch, editor }) => {
36
+ const { selection, doc } = tr
37
+ const { $from, $to } = selection
38
+ const extensionAttributes = editor.extensionManager.attributes
39
+ const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs)
40
+
41
+ if (selection instanceof NodeSelection && selection.node.isBlock) {
42
+ if (!$from.parentOffset || !canSplit(doc, $from.pos)) {
43
+ return false
44
+ }
48
45
 
49
- if (dispatch) {
50
- if (keepMarks) {
51
- ensureMarks(state, editor.extensionManager.splittableMarks)
46
+ if (dispatch) {
47
+ if (keepMarks) {
48
+ ensureMarks(state, editor.extensionManager.splittableMarks)
49
+ }
50
+
51
+ tr.split($from.pos).scrollIntoView()
52
52
  }
53
53
 
54
- tr.split($from.pos).scrollIntoView()
54
+ return true
55
55
  }
56
56
 
57
- return true
58
- }
59
-
60
- if (!$from.parent.isBlock) {
61
- return false
62
- }
57
+ if (!$from.parent.isBlock) {
58
+ return false
59
+ }
63
60
 
64
- if (dispatch) {
65
61
  const atEnd = $to.parentOffset === $to.parent.content.size
66
62
 
67
- if (selection instanceof TextSelection) {
68
- tr.deleteSelection()
69
- }
63
+ const deflt = $from.depth === 0 ? undefined : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)))
70
64
 
71
- const deflt = $from.depth === 0
72
- ? undefined
73
- : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)))
74
-
75
- let types = atEnd && deflt
76
- ? [
77
- {
78
- type: deflt,
79
- attrs: newAttributes,
80
- },
81
- ]
82
- : undefined
65
+ let types =
66
+ atEnd && deflt
67
+ ? [
68
+ {
69
+ type: deflt,
70
+ attrs: newAttributes,
71
+ },
72
+ ]
73
+ : undefined
83
74
 
84
75
  let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types)
85
76
 
86
- if (
87
- !types
88
- && !can
89
- && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)
90
- ) {
77
+ if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)) {
91
78
  can = true
92
79
  types = deflt
93
80
  ? [
94
- {
95
- type: deflt,
96
- attrs: newAttributes,
97
- },
98
- ]
81
+ {
82
+ type: deflt,
83
+ attrs: newAttributes,
84
+ },
85
+ ]
99
86
  : undefined
100
87
  }
101
88
 
102
- if (can) {
103
- tr.split(tr.mapping.map($from.pos), 1, types)
89
+ if (dispatch) {
90
+ if (can) {
91
+ if (selection instanceof TextSelection) {
92
+ tr.deleteSelection()
93
+ }
94
+
95
+ tr.split(tr.mapping.map($from.pos), 1, types)
104
96
 
105
- if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {
106
- const first = tr.mapping.map($from.before())
107
- const $first = tr.doc.resolve(first)
97
+ if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {
98
+ const first = tr.mapping.map($from.before())
99
+ const $first = tr.doc.resolve(first)
108
100
 
109
- if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {
110
- tr.setNodeMarkup(tr.mapping.map($from.before()), deflt)
101
+ if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {
102
+ tr.setNodeMarkup(tr.mapping.map($from.before()), deflt)
103
+ }
111
104
  }
112
105
  }
113
- }
114
106
 
115
- if (keepMarks) {
116
- ensureMarks(state, editor.extensionManager.splittableMarks)
107
+ if (keepMarks) {
108
+ ensureMarks(state, editor.extensionManager.splittableMarks)
109
+ }
110
+
111
+ tr.scrollIntoView()
117
112
  }
118
113
 
119
- tr.scrollIntoView()
114
+ return can
120
115
  }
121
-
122
- return true
123
- }
@@ -1,12 +1,11 @@
1
- import {
2
- Fragment, Node as ProseMirrorNode, NodeType, Slice,
3
- } from '@tiptap/pm/model'
1
+ import type { Node as ProseMirrorNode, NodeType } from '@tiptap/pm/model'
2
+ import { Fragment, Slice } from '@tiptap/pm/model'
4
3
  import { TextSelection } from '@tiptap/pm/state'
5
4
  import { canSplit } from '@tiptap/pm/transform'
6
5
 
7
6
  import { getNodeType } from '../helpers/getNodeType.js'
8
7
  import { getSplittedAttributes } from '../helpers/getSplittedAttributes.js'
9
- import { RawCommands } from '../types.js'
8
+ import type { RawCommands } from '../types.js'
10
9
 
11
10
  declare module '@tiptap/core' {
12
11
  interface Commands<ReturnType> {
@@ -14,138 +13,137 @@ declare module '@tiptap/core' {
14
13
  /**
15
14
  * Splits one list item into two list items.
16
15
  * @param typeOrName The type or name of the node.
16
+ * @param overrideAttrs The attributes to ensure on the new node.
17
17
  * @example editor.commands.splitListItem('listItem')
18
18
  */
19
- splitListItem: (typeOrName: string | NodeType) => ReturnType
19
+ splitListItem: (typeOrName: string | NodeType, overrideAttrs?: Record<string, any>) => ReturnType
20
20
  }
21
21
  }
22
22
  }
23
23
 
24
- export const splitListItem: RawCommands['splitListItem'] = typeOrName => ({
25
- tr, state, dispatch, editor,
26
- }) => {
27
- const type = getNodeType(typeOrName, state.schema)
28
- const { $from, $to } = state.selection
24
+ export const splitListItem: RawCommands['splitListItem'] =
25
+ (typeOrName, overrideAttrs = {}) =>
26
+ ({ tr, state, dispatch, editor }) => {
27
+ const type = getNodeType(typeOrName, state.schema)
28
+ const { $from, $to } = state.selection
29
29
 
30
- // @ts-ignore
31
- // eslint-disable-next-line
30
+ // @ts-ignore
31
+ // eslint-disable-next-line
32
32
  const node: ProseMirrorNode = state.selection.node
33
33
 
34
- if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to)) {
35
- return false
36
- }
37
-
38
- const grandParent = $from.node(-1)
34
+ if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to)) {
35
+ return false
36
+ }
39
37
 
40
- if (grandParent.type !== type) {
41
- return false
42
- }
38
+ const grandParent = $from.node(-1)
43
39
 
44
- const extensionAttributes = editor.extensionManager.attributes
45
-
46
- if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {
47
- // In an empty block. If this is a nested list, the wrapping
48
- // list item should be split. Otherwise, bail out and let next
49
- // command handle lifting.
50
- if (
51
- $from.depth === 2
52
- || $from.node(-3).type !== type
53
- || $from.index(-2) !== $from.node(-2).childCount - 1
54
- ) {
40
+ if (grandParent.type !== type) {
55
41
  return false
56
42
  }
57
43
 
58
- if (dispatch) {
59
- let wrap = Fragment.empty
60
- // eslint-disable-next-line
61
- const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3
44
+ const extensionAttributes = editor.extensionManager.attributes
62
45
 
63
- // Build a fragment containing empty versions of the structure
64
- // from the outer list item to the parent node of the cursor
65
- for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {
66
- wrap = Fragment.from($from.node(d).copy(wrap))
46
+ if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {
47
+ // In an empty block. If this is a nested list, the wrapping
48
+ // list item should be split. Otherwise, bail out and let next
49
+ // command handle lifting.
50
+ if ($from.depth === 2 || $from.node(-3).type !== type || $from.index(-2) !== $from.node(-2).childCount - 1) {
51
+ return false
67
52
  }
68
53
 
69
- // eslint-disable-next-line
70
- const depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3
54
+ if (dispatch) {
55
+ let wrap = Fragment.empty
56
+ // eslint-disable-next-line
57
+ const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3
71
58
 
72
- // Add a second list item with an empty default start node
73
- const newNextTypeAttributes = getSplittedAttributes(
74
- extensionAttributes,
75
- $from.node().type.name,
76
- $from.node().attrs,
77
- )
78
- const nextType = type.contentMatch.defaultType?.createAndFill(newNextTypeAttributes) || undefined
59
+ // Build a fragment containing empty versions of the structure
60
+ // from the outer list item to the parent node of the cursor
61
+ for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {
62
+ wrap = Fragment.from($from.node(d).copy(wrap))
63
+ }
79
64
 
80
- wrap = wrap.append(Fragment.from(type.createAndFill(null, nextType) || undefined))
65
+ const depthAfter =
66
+ // eslint-disable-next-line no-nested-ternary
67
+ $from.indexAfter(-1) < $from.node(-2).childCount
68
+ ? 1
69
+ : $from.indexAfter(-2) < $from.node(-3).childCount
70
+ ? 2
71
+ : 3
72
+
73
+ // Add a second list item with an empty default start node
74
+ const newNextTypeAttributes = {
75
+ ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),
76
+ ...overrideAttrs,
77
+ }
78
+ const nextType = type.contentMatch.defaultType?.createAndFill(newNextTypeAttributes) || undefined
81
79
 
82
- const start = $from.before($from.depth - (depthBefore - 1))
80
+ wrap = wrap.append(Fragment.from(type.createAndFill(null, nextType) || undefined))
83
81
 
84
- tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0))
82
+ const start = $from.before($from.depth - (depthBefore - 1))
85
83
 
86
- let sel = -1
84
+ tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0))
87
85
 
88
- tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {
89
- if (sel > -1) {
90
- return false
91
- }
86
+ let sel = -1
87
+
88
+ tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {
89
+ if (sel > -1) {
90
+ return false
91
+ }
92
92
 
93
- if (n.isTextblock && n.content.size === 0) {
94
- sel = pos + 1
93
+ if (n.isTextblock && n.content.size === 0) {
94
+ sel = pos + 1
95
+ }
96
+ })
97
+
98
+ if (sel > -1) {
99
+ tr.setSelection(TextSelection.near(tr.doc.resolve(sel)))
95
100
  }
96
- })
97
101
 
98
- if (sel > -1) {
99
- tr.setSelection(TextSelection.near(tr.doc.resolve(sel)))
102
+ tr.scrollIntoView()
100
103
  }
101
104
 
102
- tr.scrollIntoView()
105
+ return true
103
106
  }
104
107
 
105
- return true
106
- }
108
+ const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null
107
109
 
108
- const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null
109
-
110
- const newTypeAttributes = getSplittedAttributes(
111
- extensionAttributes,
112
- grandParent.type.name,
113
- grandParent.attrs,
114
- )
115
- const newNextTypeAttributes = getSplittedAttributes(
116
- extensionAttributes,
117
- $from.node().type.name,
118
- $from.node().attrs,
119
- )
120
-
121
- tr.delete($from.pos, $to.pos)
122
-
123
- const types = nextType
124
- ? [
125
- { type, attrs: newTypeAttributes },
126
- { type: nextType, attrs: newNextTypeAttributes },
127
- ]
128
- : [{ type, attrs: newTypeAttributes }]
129
-
130
- if (!canSplit(tr.doc, $from.pos, 2)) {
131
- return false
132
- }
110
+ const newTypeAttributes = {
111
+ ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),
112
+ ...overrideAttrs,
113
+ }
114
+ const newNextTypeAttributes = {
115
+ ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),
116
+ ...overrideAttrs,
117
+ }
133
118
 
134
- if (dispatch) {
135
- const { selection, storedMarks } = state
136
- const { splittableMarks } = editor.extensionManager
137
- const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks())
119
+ tr.delete($from.pos, $to.pos)
138
120
 
139
- tr.split($from.pos, 2, types).scrollIntoView()
121
+ const types = nextType
122
+ ? [
123
+ { type, attrs: newTypeAttributes },
124
+ { type: nextType, attrs: newNextTypeAttributes },
125
+ ]
126
+ : [{ type, attrs: newTypeAttributes }]
140
127
 
141
- if (!marks || !dispatch) {
142
- return true
128
+ if (!canSplit(tr.doc, $from.pos, 2)) {
129
+ return false
143
130
  }
144
131
 
145
- const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name))
132
+ if (dispatch) {
133
+ const { selection, storedMarks } = state
134
+ const { splittableMarks } = editor.extensionManager
135
+ const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks())
146
136
 
147
- tr.ensureMarks(filteredMarks)
148
- }
137
+ tr.split($from.pos, 2, types).scrollIntoView()
149
138
 
150
- return true
151
- }
139
+ if (!marks || !dispatch) {
140
+ return true
141
+ }
142
+
143
+ const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name))
144
+
145
+ tr.ensureMarks(filteredMarks)
146
+ }
147
+
148
+ return true
149
+ }