@tiptap/core 2.0.0-beta.17 → 2.0.0-beta.170

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 (318) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +2 -2
  3. package/dist/packages/core/src/CommandManager.d.ts +13 -6
  4. package/dist/packages/core/src/Editor.d.ts +23 -18
  5. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  6. package/dist/packages/core/src/Extension.d.ts +102 -26
  7. package/dist/packages/core/src/ExtensionManager.d.ts +7 -12
  8. package/dist/packages/core/src/InputRule.d.ts +42 -0
  9. package/dist/packages/core/src/Mark.d.ts +134 -30
  10. package/dist/packages/core/src/Node.d.ts +160 -32
  11. package/dist/packages/core/src/NodeView.d.ts +5 -9
  12. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  13. package/dist/packages/core/src/Tracker.d.ts +11 -0
  14. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  15. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  16. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  17. package/dist/packages/core/src/commands/command.d.ts +2 -2
  18. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  19. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  20. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  21. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  22. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  23. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  24. package/dist/packages/core/src/commands/extendMarkRange.d.ts +3 -3
  25. package/dist/packages/core/src/commands/first.d.ts +3 -3
  26. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  27. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  28. package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
  29. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  30. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  31. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  33. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +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 +21 -15
  66. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  67. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  69. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  70. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  71. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  73. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  75. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  76. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  77. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  78. package/dist/packages/core/src/helpers/findParentNode.d.ts +1 -1
  79. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +1 -1
  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 +1 -1
  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 +1 -2
  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 +1 -2
  94. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +2 -2
  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/getTextSeralizersFromSchema.d.ts +3 -0
  104. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  105. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  106. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  107. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  108. package/dist/packages/core/src/helpers/isMarkActive.d.ts +1 -2
  109. package/dist/packages/core/src/helpers/isNodeActive.d.ts +1 -2
  110. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +1 -1
  111. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  112. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  113. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  114. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  115. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  116. package/dist/packages/core/src/helpers/splitExtensions.d.ts +4 -4
  117. package/dist/packages/core/src/index.d.ts +51 -20
  118. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  119. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  120. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  121. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  122. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  123. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  124. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  125. package/dist/packages/core/src/style.d.ts +1 -2
  126. package/dist/packages/core/src/types.d.ts +105 -52
  127. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  128. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  129. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  130. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  131. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  132. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  133. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/isClass.d.ts +1 -1
  135. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  139. package/dist/packages/core/src/utilities/isObject.d.ts +1 -1
  140. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  142. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  144. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  145. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  146. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  147. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  148. package/dist/tiptap-core.cjs.js +3572 -2041
  149. package/dist/tiptap-core.cjs.js.map +1 -1
  150. package/dist/tiptap-core.esm.js +3544 -2044
  151. package/dist/tiptap-core.esm.js.map +1 -1
  152. package/dist/tiptap-core.umd.js +3430 -1898
  153. package/dist/tiptap-core.umd.js.map +1 -1
  154. package/package.json +20 -16
  155. package/src/CommandManager.ts +60 -62
  156. package/src/Editor.ts +109 -74
  157. package/src/EventEmitter.ts +14 -4
  158. package/src/Extension.ts +196 -41
  159. package/src/ExtensionManager.ts +242 -78
  160. package/src/InputRule.ts +268 -0
  161. package/src/Mark.ts +242 -47
  162. package/src/Node.ts +279 -52
  163. package/src/NodeView.ts +105 -42
  164. package/src/PasteRule.ts +246 -0
  165. package/src/Tracker.ts +42 -0
  166. package/src/commands/blur.ts +12 -6
  167. package/src/commands/clearContent.ts +3 -3
  168. package/src/commands/clearNodes.ts +29 -18
  169. package/src/commands/command.ts +2 -2
  170. package/src/commands/createParagraphNear.ts +3 -3
  171. package/src/commands/deleteNode.ts +36 -0
  172. package/src/commands/deleteRange.ts +3 -3
  173. package/src/commands/deleteSelection.ts +3 -3
  174. package/src/commands/enter.ts +3 -3
  175. package/src/commands/exitCode.ts +3 -3
  176. package/src/commands/extendMarkRange.ts +10 -10
  177. package/src/commands/first.ts +3 -3
  178. package/src/commands/focus.ts +45 -44
  179. package/src/commands/forEach.ts +24 -0
  180. package/src/commands/insertContent.ts +12 -24
  181. package/src/commands/insertContentAt.ts +107 -0
  182. package/src/commands/joinBackward.ts +3 -3
  183. package/src/commands/joinForward.ts +3 -3
  184. package/src/commands/keyboardShortcut.ts +6 -6
  185. package/src/commands/lift.ts +5 -5
  186. package/src/commands/liftEmptyBlock.ts +3 -3
  187. package/src/commands/liftListItem.ts +4 -4
  188. package/src/commands/newlineInCode.ts +3 -3
  189. package/src/commands/resetAttributes.ts +61 -0
  190. package/src/commands/scrollIntoView.ts +3 -3
  191. package/src/commands/selectAll.ts +8 -6
  192. package/src/commands/selectNodeBackward.ts +3 -3
  193. package/src/commands/selectNodeForward.ts +3 -3
  194. package/src/commands/selectParentNode.ts +3 -3
  195. package/src/commands/selectTextblockEnd.ts +19 -0
  196. package/src/commands/selectTextblockStart.ts +19 -0
  197. package/src/commands/setContent.ts +7 -11
  198. package/src/commands/setMark.ts +35 -12
  199. package/src/commands/setMeta.ts +18 -0
  200. package/src/commands/setNode.ts +27 -6
  201. package/src/commands/setNodeSelection.ts +28 -0
  202. package/src/commands/setTextSelection.ts +32 -0
  203. package/src/commands/sinkListItem.ts +4 -4
  204. package/src/commands/splitBlock.ts +14 -9
  205. package/src/commands/splitListItem.ts +41 -15
  206. package/src/commands/toggleList.ts +82 -18
  207. package/src/commands/toggleMark.ts +17 -7
  208. package/src/commands/toggleNode.ts +5 -5
  209. package/src/commands/toggleWrap.ts +8 -9
  210. package/src/commands/undoInputRule.ts +34 -5
  211. package/src/commands/unsetAllMarks.ts +7 -11
  212. package/src/commands/unsetMark.ts +34 -22
  213. package/src/commands/updateAttributes.ts +72 -0
  214. package/src/commands/wrapIn.ts +4 -10
  215. package/src/commands/wrapInList.ts +4 -4
  216. package/src/extensions/clipboardTextSerializer.ts +13 -35
  217. package/src/extensions/commands.ts +30 -21
  218. package/src/extensions/focusEvents.ts +0 -3
  219. package/src/extensions/index.ts +1 -0
  220. package/src/extensions/keymap.ts +111 -13
  221. package/src/extensions/tabindex.ts +19 -0
  222. package/src/helpers/combineTransactionSteps.ts +18 -0
  223. package/src/helpers/createChainableState.ts +37 -0
  224. package/src/helpers/createDocument.ts +5 -7
  225. package/src/helpers/createNodeFromContent.ts +15 -18
  226. package/src/helpers/defaultBlockAt.ts +13 -0
  227. package/src/helpers/findChildren.ts +17 -0
  228. package/src/helpers/findChildrenInRange.ts +31 -0
  229. package/src/helpers/findParentNode.ts +2 -2
  230. package/src/helpers/findParentNodeClosestToPos.ts +1 -1
  231. package/src/helpers/generateHTML.ts +5 -5
  232. package/src/helpers/generateJSON.ts +13 -0
  233. package/src/helpers/generateText.ts +29 -0
  234. package/src/helpers/getAttributes.ts +27 -0
  235. package/src/helpers/getAttributesFromExtensions.ts +28 -7
  236. package/src/helpers/getChangedRanges.ts +82 -0
  237. package/src/helpers/getDebugJSON.ts +53 -0
  238. package/src/helpers/getExtensionField.ts +25 -0
  239. package/src/helpers/getHTMLFromFragment.ts +6 -5
  240. package/src/helpers/getMarkAttributes.ts +12 -9
  241. package/src/helpers/getMarkRange.ts +34 -6
  242. package/src/helpers/getMarkType.ts +5 -1
  243. package/src/helpers/getMarksBetween.ts +31 -10
  244. package/src/helpers/getNodeAttributes.ts +7 -8
  245. package/src/helpers/getNodeType.ts +5 -1
  246. package/src/helpers/getRenderedAttributes.ts +4 -6
  247. package/src/helpers/getSchema.ts +6 -133
  248. package/src/helpers/getSchemaByResolvedExtensions.ts +147 -0
  249. package/src/helpers/getSchemaTypeByName.ts +2 -10
  250. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  251. package/src/helpers/getSplittedAttributes.ts +4 -4
  252. package/src/helpers/getText.ts +18 -0
  253. package/src/helpers/getTextBetween.ts +45 -0
  254. package/src/helpers/getTextSeralizersFromSchema.ts +9 -0
  255. package/src/helpers/injectExtensionAttributesToParseRule.ts +15 -17
  256. package/src/helpers/isActive.ts +4 -5
  257. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  258. package/src/helpers/isList.ts +14 -7
  259. package/src/helpers/isMarkActive.ts +43 -19
  260. package/src/helpers/isNodeActive.ts +26 -34
  261. package/src/helpers/isNodeEmpty.ts +1 -1
  262. package/src/helpers/isNodeSelection.ts +2 -2
  263. package/src/helpers/isTextSelection.ts +2 -2
  264. package/src/helpers/posToDOMRect.ts +34 -0
  265. package/src/helpers/resolveFocusPosition.ts +34 -0
  266. package/src/helpers/selectionToInsertionEnd.ts +1 -1
  267. package/src/helpers/splitExtensions.ts +1 -1
  268. package/src/index.ts +53 -20
  269. package/src/inputRules/markInputRule.ts +58 -39
  270. package/src/inputRules/nodeInputRule.ts +44 -11
  271. package/src/inputRules/textInputRule.ts +35 -0
  272. package/src/inputRules/textblockTypeInputRule.ts +37 -0
  273. package/src/inputRules/wrappingInputRule.ts +59 -0
  274. package/src/pasteRules/markPasteRule.ts +61 -53
  275. package/src/pasteRules/textPasteRule.ts +35 -0
  276. package/src/style.ts +16 -3
  277. package/src/types.ts +119 -37
  278. package/src/utilities/callOrReturn.ts +6 -3
  279. package/src/utilities/createStyleTag.ts +8 -1
  280. package/src/utilities/deleteProps.ts +2 -4
  281. package/src/utilities/elementFromString.ts +4 -5
  282. package/src/utilities/escapeForRegEx.ts +4 -0
  283. package/src/utilities/findDuplicates.ts +5 -0
  284. package/src/utilities/fromString.ts +2 -2
  285. package/src/utilities/isClass.ts +2 -2
  286. package/src/utilities/isEmptyObject.ts +2 -2
  287. package/src/utilities/isFunction.ts +3 -0
  288. package/src/utilities/isMacOS.ts +5 -0
  289. package/src/utilities/isNumber.ts +3 -0
  290. package/src/utilities/isObject.ts +6 -6
  291. package/src/utilities/isPlainObject.ts +8 -5
  292. package/src/utilities/isRegExp.ts +3 -0
  293. package/src/utilities/isString.ts +3 -0
  294. package/src/utilities/isiOS.ts +12 -0
  295. package/src/utilities/mergeAttributes.ts +2 -3
  296. package/src/utilities/mergeDeep.ts +2 -3
  297. package/src/utilities/minMax.ts +1 -1
  298. package/src/utilities/objectIncludes.ts +17 -5
  299. package/src/utilities/removeDuplicates.ts +15 -0
  300. package/CHANGELOG.md +0 -324
  301. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  302. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  303. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  304. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  305. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  306. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  307. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  308. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  309. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  310. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  311. package/src/commands/insertHTML.ts +0 -30
  312. package/src/commands/insertNode.ts +0 -33
  313. package/src/commands/insertText.ts +0 -22
  314. package/src/commands/replace.ts +0 -20
  315. package/src/commands/replaceRange.ts +0 -36
  316. package/src/commands/resetNodeAttributes.ts +0 -31
  317. package/src/commands/updateNodeAttributes.ts +0 -33
  318. package/src/utilities/removeElement.ts +0 -5
@@ -1,25 +1,35 @@
1
1
  import { MarkType } from 'prosemirror-model'
2
- import { AnyObject, Command, RawCommands } from '../types'
3
- import getMarkType from '../helpers/getMarkType'
4
- import isMarkActive from '../helpers/isMarkActive'
2
+ import { RawCommands } from '../types'
3
+ import { getMarkType } from '../helpers/getMarkType'
4
+ import { isMarkActive } from '../helpers/isMarkActive'
5
5
 
6
6
  declare module '@tiptap/core' {
7
- interface Commands {
7
+ interface Commands<ReturnType> {
8
8
  toggleMark: {
9
9
  /**
10
10
  * Toggle a mark on and off.
11
11
  */
12
- toggleMark: (typeOrName: string | MarkType, attributes?: AnyObject) => Command,
12
+ toggleMark: (
13
+ typeOrName: string | MarkType,
14
+ attributes?: Record<string, any>,
15
+ options?: {
16
+ /**
17
+ * Removes the mark even across the current selection. Defaults to `false`.
18
+ */
19
+ extendEmptyMarkRange?: boolean,
20
+ },
21
+ ) => ReturnType,
13
22
  }
14
23
  }
15
24
  }
16
25
 
17
- export const toggleMark: RawCommands['toggleMark'] = (typeOrName, attributes = {}) => ({ state, commands }) => {
26
+ export const toggleMark: RawCommands['toggleMark'] = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {
27
+ const { extendEmptyMarkRange = false } = options
18
28
  const type = getMarkType(typeOrName, state.schema)
19
29
  const isActive = isMarkActive(state, type, attributes)
20
30
 
21
31
  if (isActive) {
22
- return commands.unsetMark(type)
32
+ return commands.unsetMark(type, { extendEmptyMarkRange })
23
33
  }
24
34
 
25
35
  return commands.setMark(type, attributes)
@@ -1,15 +1,15 @@
1
1
  import { NodeType } from 'prosemirror-model'
2
- import { AnyObject, Command, RawCommands } from '../types'
3
- import isNodeActive from '../helpers/isNodeActive'
4
- import getNodeType from '../helpers/getNodeType'
2
+ import { RawCommands } from '../types'
3
+ import { isNodeActive } from '../helpers/isNodeActive'
4
+ import { getNodeType } from '../helpers/getNodeType'
5
5
 
6
6
  declare module '@tiptap/core' {
7
- interface Commands {
7
+ interface Commands<ReturnType> {
8
8
  toggleNode: {
9
9
  /**
10
10
  * Toggle a node with another node.
11
11
  */
12
- toggleNode: (typeOrName: string | NodeType, toggleTypeOrName: string | NodeType, attributes?: AnyObject) => Command,
12
+ toggleNode: (typeOrName: string | NodeType, toggleTypeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
13
13
  }
14
14
  }
15
15
  }
@@ -1,27 +1,26 @@
1
- import { wrapIn, lift } from 'prosemirror-commands'
2
1
  import { NodeType } from 'prosemirror-model'
3
- import { AnyObject, Command, RawCommands } from '../types'
4
- import isNodeActive from '../helpers/isNodeActive'
5
- import getNodeType from '../helpers/getNodeType'
2
+ import { RawCommands } from '../types'
3
+ import { isNodeActive } from '../helpers/isNodeActive'
4
+ import { getNodeType } from '../helpers/getNodeType'
6
5
 
7
6
  declare module '@tiptap/core' {
8
- interface Commands {
7
+ interface Commands<ReturnType> {
9
8
  toggleWrap: {
10
9
  /**
11
10
  * Wraps nodes in another node, or removes an existing wrap.
12
11
  */
13
- toggleWrap: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
12
+ toggleWrap: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
14
13
  }
15
14
  }
16
15
  }
17
16
 
18
- export const toggleWrap: RawCommands['toggleWrap'] = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
17
+ export const toggleWrap: RawCommands['toggleWrap'] = (typeOrName, attributes = {}) => ({ state, commands }) => {
19
18
  const type = getNodeType(typeOrName, state.schema)
20
19
  const isActive = isNodeActive(state, type, attributes)
21
20
 
22
21
  if (isActive) {
23
- return lift(state, dispatch)
22
+ return commands.lift(type)
24
23
  }
25
24
 
26
- return wrapIn(type, attributes)(state, dispatch)
25
+ return commands.wrapIn(type, attributes)
27
26
  }
@@ -1,17 +1,46 @@
1
- import { undoInputRule as originalUndoInputRule } from 'prosemirror-inputrules'
2
- import { Command, RawCommands } from '../types'
1
+ import { RawCommands } from '../types'
3
2
 
4
3
  declare module '@tiptap/core' {
5
- interface Commands {
4
+ interface Commands<ReturnType> {
6
5
  undoInputRule: {
7
6
  /**
8
7
  * Undo an input rule.
9
8
  */
10
- undoInputRule: () => Command,
9
+ undoInputRule: () => ReturnType,
11
10
  }
12
11
  }
13
12
  }
14
13
 
15
14
  export const undoInputRule: RawCommands['undoInputRule'] = () => ({ state, dispatch }) => {
16
- return originalUndoInputRule(state, dispatch)
15
+ const plugins = state.plugins
16
+
17
+ for (let i = 0; i < plugins.length; i += 1) {
18
+ const plugin = plugins[i]
19
+ let undoable
20
+
21
+ // @ts-ignore
22
+ // eslint-disable-next-line
23
+ if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {
24
+ if (dispatch) {
25
+ const tr = state.tr
26
+ const toUndo = undoable.transform
27
+
28
+ for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {
29
+ tr.step(toUndo.steps[j].invert(toUndo.docs[j]))
30
+ }
31
+
32
+ if (undoable.text) {
33
+ const marks = tr.doc.resolve(undoable.from).marks()
34
+
35
+ tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks))
36
+ } else {
37
+ tr.delete(undoable.from, undoable.to)
38
+ }
39
+ }
40
+
41
+ return true
42
+ }
43
+ }
44
+
45
+ return false
17
46
  }
@@ -1,17 +1,17 @@
1
- import { Command, RawCommands } from '../types'
1
+ import { RawCommands } from '../types'
2
2
 
3
3
  declare module '@tiptap/core' {
4
- interface Commands {
4
+ interface Commands<ReturnType> {
5
5
  unsetAllMarks: {
6
6
  /**
7
7
  * Remove all marks in the current selection.
8
8
  */
9
- unsetAllMarks: () => Command,
9
+ unsetAllMarks: () => ReturnType,
10
10
  }
11
11
  }
12
12
  }
13
13
 
14
- export const unsetAllMarks: RawCommands['unsetAllMarks'] = () => ({ tr, state, dispatch }) => {
14
+ export const unsetAllMarks: RawCommands['unsetAllMarks'] = () => ({ tr, dispatch }) => {
15
15
  const { selection } = tr
16
16
  const { empty, ranges } = selection
17
17
 
@@ -20,13 +20,9 @@ export const unsetAllMarks: RawCommands['unsetAllMarks'] = () => ({ tr, state, d
20
20
  }
21
21
 
22
22
  if (dispatch) {
23
- Object
24
- .entries(state.schema.marks)
25
- .forEach(([, mark]) => {
26
- ranges.forEach(range => {
27
- tr.removeMark(range.$from.pos, range.$to.pos, mark as any)
28
- })
29
- })
23
+ ranges.forEach(range => {
24
+ tr.removeMark(range.$from.pos, range.$to.pos)
25
+ })
30
26
  }
31
27
 
32
28
  return true
@@ -1,43 +1,55 @@
1
1
  import { MarkType } from 'prosemirror-model'
2
- import { Command, RawCommands } from '../types'
3
- import getMarkType from '../helpers/getMarkType'
4
- import getMarkRange from '../helpers/getMarkRange'
2
+ import { RawCommands } from '../types'
3
+ import { getMarkType } from '../helpers/getMarkType'
4
+ import { getMarkRange } from '../helpers/getMarkRange'
5
5
 
6
6
  declare module '@tiptap/core' {
7
- interface Commands {
7
+ interface Commands<ReturnType> {
8
8
  unsetMark: {
9
9
  /**
10
10
  * Remove all marks in the current selection.
11
11
  */
12
- unsetMark: (typeOrName: string | MarkType) => Command,
12
+ unsetMark: (
13
+ typeOrName: string | MarkType,
14
+ options?: {
15
+ /**
16
+ * Removes the mark even across the current selection. Defaults to `false`.
17
+ */
18
+ extendEmptyMarkRange?: boolean,
19
+ },
20
+ ) => ReturnType,
13
21
  }
14
22
  }
15
23
  }
16
24
 
17
- export const unsetMark: RawCommands['unsetMark'] = typeOrName => ({ tr, state, dispatch }) => {
25
+ export const unsetMark: RawCommands['unsetMark'] = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {
26
+ const { extendEmptyMarkRange = false } = options
18
27
  const { selection } = tr
19
28
  const type = getMarkType(typeOrName, state.schema)
20
29
  const { $from, empty, ranges } = selection
21
30
 
22
- if (dispatch) {
23
- if (empty) {
24
- let { from, to } = selection
25
- const range = getMarkRange($from, type)
26
-
27
- if (range) {
28
- from = range.from
29
- to = range.to
30
- }
31
-
32
- tr.removeMark(from, to, type)
33
- } else {
34
- ranges.forEach(range => {
35
- tr.removeMark(range.$from.pos, range.$to.pos, type)
36
- })
31
+ if (!dispatch) {
32
+ return true
33
+ }
34
+
35
+ if (empty && extendEmptyMarkRange) {
36
+ let { from, to } = selection
37
+ const attrs = $from.marks().find(mark => mark.type === type)?.attrs
38
+ const range = getMarkRange($from, type, attrs)
39
+
40
+ if (range) {
41
+ from = range.from
42
+ to = range.to
37
43
  }
38
44
 
39
- tr.removeStoredMark(type)
45
+ tr.removeMark(from, to, type)
46
+ } else {
47
+ ranges.forEach(range => {
48
+ tr.removeMark(range.$from.pos, range.$to.pos, type)
49
+ })
40
50
  }
41
51
 
52
+ tr.removeStoredMark(type)
53
+
42
54
  return true
43
55
  }
@@ -0,0 +1,72 @@
1
+ import { NodeType, MarkType } from 'prosemirror-model'
2
+ import { getNodeType } from '../helpers/getNodeType'
3
+ import { getMarkType } from '../helpers/getMarkType'
4
+ import { getSchemaTypeNameByName } from '../helpers/getSchemaTypeNameByName'
5
+ import { RawCommands } from '../types'
6
+
7
+ declare module '@tiptap/core' {
8
+ interface Commands<ReturnType> {
9
+ updateAttributes: {
10
+ /**
11
+ * Update attributes of a node or mark.
12
+ */
13
+ updateAttributes: (typeOrName: string | NodeType | MarkType, attributes: Record<string, any>) => ReturnType,
14
+ }
15
+ }
16
+ }
17
+
18
+ export const updateAttributes: RawCommands['updateAttributes'] = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {
19
+ let nodeType: NodeType | null = null
20
+ let markType: MarkType | null = null
21
+
22
+ const schemaType = getSchemaTypeNameByName(
23
+ typeof typeOrName === 'string'
24
+ ? typeOrName
25
+ : typeOrName.name,
26
+ state.schema,
27
+ )
28
+
29
+ if (!schemaType) {
30
+ return false
31
+ }
32
+
33
+ if (schemaType === 'node') {
34
+ nodeType = getNodeType(typeOrName as NodeType, state.schema)
35
+ }
36
+
37
+ if (schemaType === 'mark') {
38
+ markType = getMarkType(typeOrName as MarkType, state.schema)
39
+ }
40
+
41
+ if (dispatch) {
42
+ tr.selection.ranges.forEach(range => {
43
+ const from = range.$from.pos
44
+ const to = range.$to.pos
45
+
46
+ state.doc.nodesBetween(from, to, (node, pos) => {
47
+ if (nodeType && nodeType === node.type) {
48
+ tr.setNodeMarkup(pos, undefined, {
49
+ ...node.attrs,
50
+ ...attributes,
51
+ })
52
+ }
53
+
54
+ if (markType && node.marks.length) {
55
+ node.marks.forEach(mark => {
56
+ if (markType === mark.type) {
57
+ const trimmedFrom = Math.max(pos, from)
58
+ const trimmedTo = Math.min(pos + node.nodeSize, to)
59
+
60
+ tr.addMark(trimmedFrom, trimmedTo, markType.create({
61
+ ...mark.attrs,
62
+ ...attributes,
63
+ }))
64
+ }
65
+ })
66
+ }
67
+ })
68
+ })
69
+ }
70
+
71
+ return true
72
+ }
@@ -1,27 +1,21 @@
1
1
  import { wrapIn as originalWrapIn } from 'prosemirror-commands'
2
2
  import { NodeType } from 'prosemirror-model'
3
- import { AnyObject, Command, RawCommands } from '../types'
4
- import isNodeActive from '../helpers/isNodeActive'
5
- import getNodeType from '../helpers/getNodeType'
3
+ import { RawCommands } from '../types'
4
+ import { getNodeType } from '../helpers/getNodeType'
6
5
 
7
6
  declare module '@tiptap/core' {
8
- interface Commands {
7
+ interface Commands<ReturnType> {
9
8
  wrapIn: {
10
9
  /**
11
10
  * Wraps nodes in another node.
12
11
  */
13
- wrapIn: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
12
+ wrapIn: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
14
13
  }
15
14
  }
16
15
  }
17
16
 
18
17
  export const wrapIn: RawCommands['wrapIn'] = (typeOrName, attributes = {}) => ({ state, dispatch }) => {
19
18
  const type = getNodeType(typeOrName, state.schema)
20
- const isActive = isNodeActive(state, type, attributes)
21
-
22
- if (isActive) {
23
- return false
24
- }
25
19
 
26
20
  return originalWrapIn(type, attributes)(state, dispatch)
27
21
  }
@@ -1,15 +1,15 @@
1
1
  import { wrapInList as originalWrapInList } from 'prosemirror-schema-list'
2
2
  import { NodeType } from 'prosemirror-model'
3
- import { AnyObject, Command, RawCommands } from '../types'
4
- import getNodeType from '../helpers/getNodeType'
3
+ import { RawCommands } from '../types'
4
+ import { getNodeType } from '../helpers/getNodeType'
5
5
 
6
6
  declare module '@tiptap/core' {
7
- interface Commands {
7
+ interface Commands<ReturnType> {
8
8
  wrapInList: {
9
9
  /**
10
10
  * Wrap a node in a list.
11
11
  */
12
- wrapInList: (typeOrName: string | NodeType, attributes?: AnyObject) => Command,
12
+ wrapInList: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType,
13
13
  }
14
14
  }
15
15
  }
@@ -1,40 +1,10 @@
1
- import { Editor } from '@tiptap/core'
2
1
  import { Plugin, PluginKey } from 'prosemirror-state'
3
2
  import { Extension } from '../Extension'
4
-
5
- const textBetween = (
6
- editor: Editor,
7
- from: number,
8
- to: number,
9
- blockSeparator?: string,
10
- leafText?: string,
11
- ): string => {
12
- let text = ''
13
- let separated = true
14
-
15
- editor.state.doc.nodesBetween(from, to, (node, pos) => {
16
- const textSerializer = editor.extensionManager.textSerializers[node.type.name]
17
-
18
- if (textSerializer) {
19
- text += textSerializer({ node })
20
- separated = !blockSeparator
21
- } else if (node.isText) {
22
- text += node?.text?.slice(Math.max(from, pos) - pos, to - pos)
23
- separated = !blockSeparator
24
- } else if (node.isLeaf && leafText) {
25
- text += leafText
26
- separated = !blockSeparator
27
- } else if (!separated && node.isBlock) {
28
- text += blockSeparator
29
- separated = true
30
- }
31
- }, 0)
32
-
33
- return text
34
- }
3
+ import { getTextBetween } from '../helpers/getTextBetween'
4
+ import { getTextSeralizersFromSchema } from '../helpers/getTextSeralizersFromSchema'
35
5
 
36
6
  export const ClipboardTextSerializer = Extension.create({
37
- name: 'editable',
7
+ name: 'clipboardTextSerializer',
38
8
 
39
9
  addProseMirrorPlugins() {
40
10
  return [
@@ -43,9 +13,17 @@ export const ClipboardTextSerializer = Extension.create({
43
13
  props: {
44
14
  clipboardTextSerializer: () => {
45
15
  const { editor } = this
46
- const { from, to } = editor.state.selection
16
+ const { state, schema } = editor
17
+ const { doc, selection } = state
18
+ const { ranges } = selection
19
+ const from = Math.min(...ranges.map(range => range.$from.pos))
20
+ const to = Math.max(...ranges.map(range => range.$to.pos))
21
+ const textSerializers = getTextSeralizersFromSchema(schema)
22
+ const range = { from, to }
47
23
 
48
- return textBetween(editor, from, to, '\n')
24
+ return getTextBetween(doc, range, {
25
+ textSerializers,
26
+ })
49
27
  },
50
28
  },
51
29
  }),
@@ -4,6 +4,7 @@ import * as clearContent from '../commands/clearContent'
4
4
  import * as clearNodes from '../commands/clearNodes'
5
5
  import * as command from '../commands/command'
6
6
  import * as createParagraphNear from '../commands/createParagraphNear'
7
+ import * as deleteNode from '../commands/deleteNode'
7
8
  import * as deleteRange from '../commands/deleteRange'
8
9
  import * as deleteSelection from '../commands/deleteSelection'
9
10
  import * as enter from '../commands/enter'
@@ -11,10 +12,9 @@ import * as exitCode from '../commands/exitCode'
11
12
  import * as extendMarkRange from '../commands/extendMarkRange'
12
13
  import * as first from '../commands/first'
13
14
  import * as focus from '../commands/focus'
15
+ import * as forEach from '../commands/forEach'
14
16
  import * as insertContent from '../commands/insertContent'
15
- import * as insertHTML from '../commands/insertHTML'
16
- import * as insertNode from '../commands/insertNode'
17
- import * as insertText from '../commands/insertText'
17
+ import * as insertContentAt from '../commands/insertContentAt'
18
18
  import * as joinBackward from '../commands/joinBackward'
19
19
  import * as joinForward from '../commands/joinForward'
20
20
  import * as keyboardShortcut from '../commands/keyboardShortcut'
@@ -22,17 +22,20 @@ import * as lift from '../commands/lift'
22
22
  import * as liftEmptyBlock from '../commands/liftEmptyBlock'
23
23
  import * as liftListItem from '../commands/liftListItem'
24
24
  import * as newlineInCode from '../commands/newlineInCode'
25
- import * as replace from '../commands/replace'
26
- import * as replaceRange from '../commands/replaceRange'
27
- import * as resetNodeAttributes from '../commands/resetNodeAttributes'
25
+ import * as resetAttributes from '../commands/resetAttributes'
28
26
  import * as scrollIntoView from '../commands/scrollIntoView'
29
27
  import * as selectAll from '../commands/selectAll'
30
28
  import * as selectNodeBackward from '../commands/selectNodeBackward'
31
29
  import * as selectNodeForward from '../commands/selectNodeForward'
32
30
  import * as selectParentNode from '../commands/selectParentNode'
31
+ import * as selectTextblockEnd from '../commands/selectTextblockEnd'
32
+ import * as selectTextblockStart from '../commands/selectTextblockStart'
33
33
  import * as setContent from '../commands/setContent'
34
34
  import * as setMark from '../commands/setMark'
35
+ import * as setMeta from '../commands/setMeta'
35
36
  import * as setNode from '../commands/setNode'
37
+ import * as setNodeSelection from '../commands/setNodeSelection'
38
+ import * as setTextSelection from '../commands/setTextSelection'
36
39
  import * as sinkListItem from '../commands/sinkListItem'
37
40
  import * as splitBlock from '../commands/splitBlock'
38
41
  import * as splitListItem from '../commands/splitListItem'
@@ -43,7 +46,7 @@ import * as toggleWrap from '../commands/toggleWrap'
43
46
  import * as undoInputRule from '../commands/undoInputRule'
44
47
  import * as unsetAllMarks from '../commands/unsetAllMarks'
45
48
  import * as unsetMark from '../commands/unsetMark'
46
- import * as updateNodeAttributes from '../commands/updateNodeAttributes'
49
+ import * as updateAttributes from '../commands/updateAttributes'
47
50
  import * as wrapIn from '../commands/wrapIn'
48
51
  import * as wrapInList from '../commands/wrapInList'
49
52
 
@@ -52,6 +55,7 @@ export { clearContent }
52
55
  export { clearNodes }
53
56
  export { command }
54
57
  export { createParagraphNear }
58
+ export { deleteNode }
55
59
  export { deleteRange }
56
60
  export { deleteSelection }
57
61
  export { enter }
@@ -59,10 +63,9 @@ export { exitCode }
59
63
  export { extendMarkRange }
60
64
  export { first }
61
65
  export { focus }
66
+ export { forEach }
62
67
  export { insertContent }
63
- export { insertHTML }
64
- export { insertNode }
65
- export { insertText }
68
+ export { insertContentAt }
66
69
  export { joinBackward }
67
70
  export { joinForward }
68
71
  export { keyboardShortcut }
@@ -70,17 +73,20 @@ export { lift }
70
73
  export { liftEmptyBlock }
71
74
  export { liftListItem }
72
75
  export { newlineInCode }
73
- export { replace }
74
- export { replaceRange }
75
- export { resetNodeAttributes }
76
+ export { resetAttributes }
76
77
  export { scrollIntoView }
77
78
  export { selectAll }
78
79
  export { selectNodeBackward }
79
80
  export { selectNodeForward }
80
81
  export { selectParentNode }
82
+ export { selectTextblockEnd }
83
+ export { selectTextblockStart }
81
84
  export { setContent }
82
85
  export { setMark }
86
+ export { setMeta }
83
87
  export { setNode }
88
+ export { setNodeSelection }
89
+ export { setTextSelection }
84
90
  export { sinkListItem }
85
91
  export { splitBlock }
86
92
  export { splitListItem }
@@ -91,7 +97,7 @@ export { toggleWrap }
91
97
  export { undoInputRule }
92
98
  export { unsetAllMarks }
93
99
  export { unsetMark }
94
- export { updateNodeAttributes }
100
+ export { updateAttributes }
95
101
  export { wrapIn }
96
102
  export { wrapInList }
97
103
 
@@ -105,6 +111,7 @@ export const Commands = Extension.create({
105
111
  ...clearNodes,
106
112
  ...command,
107
113
  ...createParagraphNear,
114
+ ...deleteNode,
108
115
  ...deleteRange,
109
116
  ...deleteSelection,
110
117
  ...enter,
@@ -112,10 +119,9 @@ export const Commands = Extension.create({
112
119
  ...extendMarkRange,
113
120
  ...first,
114
121
  ...focus,
122
+ ...forEach,
115
123
  ...insertContent,
116
- ...insertHTML,
117
- ...insertNode,
118
- ...insertText,
124
+ ...insertContentAt,
119
125
  ...joinBackward,
120
126
  ...joinForward,
121
127
  ...keyboardShortcut,
@@ -123,17 +129,20 @@ export const Commands = Extension.create({
123
129
  ...liftEmptyBlock,
124
130
  ...liftListItem,
125
131
  ...newlineInCode,
126
- ...replace,
127
- ...replaceRange,
128
- ...resetNodeAttributes,
132
+ ...resetAttributes,
129
133
  ...scrollIntoView,
130
134
  ...selectAll,
131
135
  ...selectNodeBackward,
132
136
  ...selectNodeForward,
133
137
  ...selectParentNode,
138
+ ...selectTextblockEnd,
139
+ ...selectTextblockStart,
134
140
  ...setContent,
135
141
  ...setMark,
142
+ ...setMeta,
136
143
  ...setNode,
144
+ ...setNodeSelection,
145
+ ...setTextSelection,
137
146
  ...sinkListItem,
138
147
  ...splitBlock,
139
148
  ...splitListItem,
@@ -144,7 +153,7 @@ export const Commands = Extension.create({
144
153
  ...undoInputRule,
145
154
  ...unsetAllMarks,
146
155
  ...unsetMark,
147
- ...updateNodeAttributes,
156
+ ...updateAttributes,
148
157
  ...wrapIn,
149
158
  ...wrapInList,
150
159
  }
@@ -11,9 +11,6 @@ export const FocusEvents = Extension.create({
11
11
  new Plugin({
12
12
  key: new PluginKey('focusEvents'),
13
13
  props: {
14
- attributes: {
15
- tabindex: '0',
16
- },
17
14
  handleDOMEvents: {
18
15
  focus: (view, event) => {
19
16
  editor.isFocused = true
@@ -3,3 +3,4 @@ export { Commands } from './commands'
3
3
  export { Editable } from './editable'
4
4
  export { FocusEvents } from './focusEvents'
5
5
  export { Keymap } from './keymap'
6
+ export { Tabindex } from './tabindex'