@tiptap/core 2.0.0-beta.21 → 2.0.0-beta.210

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 (289) hide show
  1. package/README.md +2 -2
  2. package/dist/index.cjs +4311 -0
  3. package/dist/index.d.ts +2330 -0
  4. package/dist/index.js +4311 -0
  5. package/package.json +39 -25
  6. package/src/CommandManager.ts +76 -86
  7. package/src/Editor.ts +120 -81
  8. package/src/EventEmitter.ts +14 -4
  9. package/src/Extension.ts +280 -108
  10. package/src/ExtensionManager.ts +254 -108
  11. package/src/InputRule.ts +260 -0
  12. package/src/Mark.ts +398 -147
  13. package/src/Node.ts +437 -171
  14. package/src/NodeView.ts +132 -63
  15. package/src/PasteRule.ts +240 -0
  16. package/src/Tracker.ts +38 -0
  17. package/src/commands/blur.ts +12 -6
  18. package/src/commands/clearContent.ts +3 -3
  19. package/src/commands/clearNodes.ts +31 -19
  20. package/src/commands/command.ts +2 -2
  21. package/src/commands/createParagraphNear.ts +5 -4
  22. package/src/commands/deleteCurrentNode.ts +41 -0
  23. package/src/commands/deleteNode.ts +37 -0
  24. package/src/commands/deleteRange.ts +3 -3
  25. package/src/commands/deleteSelection.ts +5 -4
  26. package/src/commands/enter.ts +3 -3
  27. package/src/commands/exitCode.ts +5 -4
  28. package/src/commands/extendMarkRange.ts +16 -12
  29. package/src/commands/first.ts +3 -3
  30. package/src/commands/focus.ts +47 -44
  31. package/src/commands/forEach.ts +24 -0
  32. package/src/commands/index.ts +50 -0
  33. package/src/commands/insertContent.ts +17 -24
  34. package/src/commands/insertContentAt.ts +94 -0
  35. package/src/commands/join.ts +53 -0
  36. package/src/commands/keyboardShortcut.ts +6 -6
  37. package/src/commands/lift.ts +8 -7
  38. package/src/commands/liftEmptyBlock.ts +5 -4
  39. package/src/commands/liftListItem.ts +7 -6
  40. package/src/commands/newlineInCode.ts +5 -4
  41. package/src/commands/resetAttributes.ts +18 -12
  42. package/src/commands/scrollIntoView.ts +3 -3
  43. package/src/commands/selectAll.ts +8 -6
  44. package/src/commands/selectNodeBackward.ts +5 -4
  45. package/src/commands/selectNodeForward.ts +5 -4
  46. package/src/commands/selectParentNode.ts +5 -4
  47. package/src/commands/selectTextblockEnd.ts +20 -0
  48. package/src/commands/selectTextblockStart.ts +20 -0
  49. package/src/commands/setContent.ts +9 -16
  50. package/src/commands/setMark.ts +90 -14
  51. package/src/commands/setMeta.ts +18 -0
  52. package/src/commands/setNode.ts +32 -8
  53. package/src/commands/setNodeSelection.ts +27 -0
  54. package/src/commands/setTextSelection.ts +31 -0
  55. package/src/commands/sinkListItem.ts +7 -6
  56. package/src/commands/splitBlock.ts +31 -41
  57. package/src/commands/splitListItem.ts +46 -29
  58. package/src/commands/toggleList.ts +88 -20
  59. package/src/commands/toggleMark.ts +19 -8
  60. package/src/commands/toggleNode.ts +11 -6
  61. package/src/commands/toggleWrap.ts +10 -10
  62. package/src/commands/undoInputRule.ts +34 -5
  63. package/src/commands/unsetAllMarks.ts +7 -11
  64. package/src/commands/unsetMark.ts +36 -23
  65. package/src/commands/updateAttributes.ts +27 -15
  66. package/src/commands/wrapIn.ts +7 -12
  67. package/src/commands/wrapInList.ts +7 -6
  68. package/src/extensions/clipboardTextSerializer.ts +15 -36
  69. package/src/extensions/commands.ts +3 -147
  70. package/src/extensions/editable.ts +2 -1
  71. package/src/extensions/focusEvents.ts +4 -6
  72. package/src/extensions/index.ts +1 -0
  73. package/src/extensions/keymap.ts +106 -13
  74. package/src/extensions/tabindex.ts +18 -0
  75. package/src/helpers/combineTransactionSteps.ts +21 -0
  76. package/src/helpers/createChainableState.ts +38 -0
  77. package/src/helpers/createDocument.ts +5 -6
  78. package/src/helpers/createNodeFromContent.ts +20 -28
  79. package/src/helpers/defaultBlockAt.ts +13 -0
  80. package/src/helpers/findChildren.ts +18 -0
  81. package/src/helpers/findChildrenInRange.ts +36 -0
  82. package/src/helpers/findParentNode.ts +4 -3
  83. package/src/helpers/findParentNodeClosestToPos.ts +13 -7
  84. package/src/helpers/generateHTML.ts +7 -6
  85. package/src/helpers/generateJSON.ts +12 -0
  86. package/src/helpers/generateText.ts +27 -0
  87. package/src/helpers/getAttributes.ts +26 -0
  88. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  89. package/src/helpers/getChangedRanges.ts +83 -0
  90. package/src/helpers/getDebugJSON.ts +54 -0
  91. package/src/helpers/getExtensionField.ts +25 -0
  92. package/src/helpers/getHTMLFromFragment.ts +5 -6
  93. package/src/helpers/getMarkAttributes.ts +18 -11
  94. package/src/helpers/getMarkRange.ts +41 -8
  95. package/src/helpers/getMarkType.ts +8 -2
  96. package/src/helpers/getMarksBetween.ts +34 -10
  97. package/src/helpers/getNodeAttributes.ts +14 -13
  98. package/src/helpers/getNodeType.ts +8 -2
  99. package/src/helpers/getRenderedAttributes.ts +9 -7
  100. package/src/helpers/getSchema.ts +7 -133
  101. package/src/helpers/getSchemaByResolvedExtensions.ts +192 -0
  102. package/src/helpers/getSchemaTypeByName.ts +3 -11
  103. package/src/helpers/getSchemaTypeNameByName.ts +2 -2
  104. package/src/helpers/getSplittedAttributes.ts +4 -4
  105. package/src/helpers/getText.ts +19 -0
  106. package/src/helpers/getTextBetween.ts +46 -0
  107. package/src/helpers/getTextContentFromNodes.ts +26 -0
  108. package/src/helpers/getTextSerializersFromSchema.ts +11 -0
  109. package/src/helpers/index.ts +33 -0
  110. package/src/helpers/injectExtensionAttributesToParseRule.ts +22 -23
  111. package/src/helpers/isActive.ts +10 -6
  112. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  113. package/src/helpers/isList.ts +14 -7
  114. package/src/helpers/isMarkActive.ts +49 -27
  115. package/src/helpers/isNodeActive.ts +29 -39
  116. package/src/helpers/isNodeEmpty.ts +2 -2
  117. package/src/helpers/isNodeSelection.ts +3 -4
  118. package/src/helpers/isTextSelection.ts +3 -4
  119. package/src/helpers/posToDOMRect.ts +35 -0
  120. package/src/helpers/resolveFocusPosition.ts +42 -0
  121. package/src/helpers/selectionToInsertionEnd.ts +3 -3
  122. package/src/helpers/splitExtensions.ts +3 -3
  123. package/src/index.ts +15 -24
  124. package/src/inputRules/index.ts +5 -0
  125. package/src/inputRules/markInputRule.ts +59 -40
  126. package/src/inputRules/nodeInputRule.ts +45 -12
  127. package/src/inputRules/textInputRule.ts +35 -0
  128. package/src/inputRules/textblockTypeInputRule.ts +37 -0
  129. package/src/inputRules/wrappingInputRule.ts +59 -0
  130. package/src/pasteRules/index.ts +3 -0
  131. package/src/pasteRules/markPasteRule.ts +61 -53
  132. package/src/pasteRules/nodePasteRule.ts +37 -0
  133. package/src/pasteRules/textPasteRule.ts +35 -0
  134. package/src/style.ts +16 -3
  135. package/src/types.ts +170 -97
  136. package/src/utilities/callOrReturn.ts +6 -3
  137. package/src/utilities/createStyleTag.ts +12 -1
  138. package/src/utilities/deleteProps.ts +2 -4
  139. package/src/utilities/elementFromString.ts +4 -5
  140. package/src/utilities/escapeForRegEx.ts +4 -0
  141. package/src/utilities/findDuplicates.ts +5 -0
  142. package/src/utilities/fromString.ts +2 -2
  143. package/src/utilities/index.ts +20 -0
  144. package/src/utilities/isEmptyObject.ts +2 -2
  145. package/src/utilities/isFunction.ts +3 -0
  146. package/src/utilities/isMacOS.ts +5 -0
  147. package/src/utilities/isNumber.ts +3 -0
  148. package/src/utilities/isPlainObject.ts +8 -5
  149. package/src/utilities/isRegExp.ts +3 -0
  150. package/src/utilities/isString.ts +3 -0
  151. package/src/utilities/isiOS.ts +12 -0
  152. package/src/utilities/mergeAttributes.ts +2 -3
  153. package/src/utilities/mergeDeep.ts +2 -3
  154. package/src/utilities/minMax.ts +1 -1
  155. package/src/utilities/objectIncludes.ts +17 -5
  156. package/src/utilities/removeDuplicates.ts +15 -0
  157. package/CHANGELOG.md +0 -365
  158. package/LICENSE.md +0 -21
  159. package/dist/packages/core/src/CommandManager.d.ts +0 -13
  160. package/dist/packages/core/src/Editor.d.ts +0 -142
  161. package/dist/packages/core/src/EventEmitter.d.ts +0 -7
  162. package/dist/packages/core/src/Extension.d.ts +0 -148
  163. package/dist/packages/core/src/ExtensionManager.d.ts +0 -24
  164. package/dist/packages/core/src/Mark.d.ts +0 -211
  165. package/dist/packages/core/src/Node.d.ts +0 -265
  166. package/dist/packages/core/src/NodeView.d.ts +0 -31
  167. package/dist/packages/core/src/commands/blur.d.ts +0 -12
  168. package/dist/packages/core/src/commands/clearContent.d.ts +0 -12
  169. package/dist/packages/core/src/commands/clearNodes.d.ts +0 -12
  170. package/dist/packages/core/src/commands/command.d.ts +0 -12
  171. package/dist/packages/core/src/commands/createParagraphNear.d.ts +0 -12
  172. package/dist/packages/core/src/commands/deleteRange.d.ts +0 -12
  173. package/dist/packages/core/src/commands/deleteSelection.d.ts +0 -12
  174. package/dist/packages/core/src/commands/enter.d.ts +0 -12
  175. package/dist/packages/core/src/commands/exitCode.d.ts +0 -12
  176. package/dist/packages/core/src/commands/extendMarkRange.d.ts +0 -13
  177. package/dist/packages/core/src/commands/first.d.ts +0 -12
  178. package/dist/packages/core/src/commands/focus.d.ts +0 -12
  179. package/dist/packages/core/src/commands/insertContent.d.ts +0 -12
  180. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  181. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  182. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  183. package/dist/packages/core/src/commands/joinBackward.d.ts +0 -12
  184. package/dist/packages/core/src/commands/joinForward.d.ts +0 -12
  185. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +0 -12
  186. package/dist/packages/core/src/commands/lift.d.ts +0 -13
  187. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +0 -12
  188. package/dist/packages/core/src/commands/liftListItem.d.ts +0 -13
  189. package/dist/packages/core/src/commands/newlineInCode.d.ts +0 -12
  190. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  191. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  192. package/dist/packages/core/src/commands/resetAttributes.d.ts +0 -13
  193. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  194. package/dist/packages/core/src/commands/scrollIntoView.d.ts +0 -12
  195. package/dist/packages/core/src/commands/selectAll.d.ts +0 -12
  196. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +0 -12
  197. package/dist/packages/core/src/commands/selectNodeForward.d.ts +0 -12
  198. package/dist/packages/core/src/commands/selectParentNode.d.ts +0 -12
  199. package/dist/packages/core/src/commands/setContent.d.ts +0 -12
  200. package/dist/packages/core/src/commands/setMark.d.ts +0 -13
  201. package/dist/packages/core/src/commands/setNode.d.ts +0 -13
  202. package/dist/packages/core/src/commands/sinkListItem.d.ts +0 -13
  203. package/dist/packages/core/src/commands/splitBlock.d.ts +0 -14
  204. package/dist/packages/core/src/commands/splitListItem.d.ts +0 -13
  205. package/dist/packages/core/src/commands/toggleList.d.ts +0 -13
  206. package/dist/packages/core/src/commands/toggleMark.d.ts +0 -13
  207. package/dist/packages/core/src/commands/toggleNode.d.ts +0 -13
  208. package/dist/packages/core/src/commands/toggleWrap.d.ts +0 -13
  209. package/dist/packages/core/src/commands/undoInputRule.d.ts +0 -12
  210. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +0 -12
  211. package/dist/packages/core/src/commands/unsetMark.d.ts +0 -13
  212. package/dist/packages/core/src/commands/updateAttributes.d.ts +0 -13
  213. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  214. package/dist/packages/core/src/commands/wrapIn.d.ts +0 -13
  215. package/dist/packages/core/src/commands/wrapInList.d.ts +0 -13
  216. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +0 -2
  217. package/dist/packages/core/src/extensions/commands.d.ts +0 -100
  218. package/dist/packages/core/src/extensions/editable.d.ts +0 -2
  219. package/dist/packages/core/src/extensions/focusEvents.d.ts +0 -2
  220. package/dist/packages/core/src/extensions/index.d.ts +0 -5
  221. package/dist/packages/core/src/extensions/keymap.d.ts +0 -2
  222. package/dist/packages/core/src/helpers/createDocument.d.ts +0 -4
  223. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +0 -8
  224. package/dist/packages/core/src/helpers/findParentNode.d.ts +0 -9
  225. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +0 -8
  226. package/dist/packages/core/src/helpers/generateHTML.d.ts +0 -2
  227. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +0 -6
  228. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +0 -2
  229. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +0 -4
  230. package/dist/packages/core/src/helpers/getMarkRange.d.ts +0 -3
  231. package/dist/packages/core/src/helpers/getMarkType.d.ts +0 -2
  232. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +0 -3
  233. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +0 -4
  234. package/dist/packages/core/src/helpers/getNodeType.d.ts +0 -2
  235. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +0 -3
  236. package/dist/packages/core/src/helpers/getSchema.d.ts +0 -3
  237. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +0 -2
  238. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +0 -2
  239. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +0 -2
  240. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +0 -9
  241. package/dist/packages/core/src/helpers/isActive.d.ts +0 -3
  242. package/dist/packages/core/src/helpers/isList.d.ts +0 -2
  243. package/dist/packages/core/src/helpers/isMarkActive.d.ts +0 -4
  244. package/dist/packages/core/src/helpers/isNodeActive.d.ts +0 -4
  245. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +0 -2
  246. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +0 -2
  247. package/dist/packages/core/src/helpers/isTextSelection.d.ts +0 -2
  248. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +0 -2
  249. package/dist/packages/core/src/helpers/splitExtensions.d.ts +0 -9
  250. package/dist/packages/core/src/index.d.ts +0 -30
  251. package/dist/packages/core/src/inputRules/markInputRule.d.ts +0 -3
  252. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +0 -3
  253. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +0 -3
  254. package/dist/packages/core/src/style.d.ts +0 -2
  255. package/dist/packages/core/src/types.d.ts +0 -154
  256. package/dist/packages/core/src/utilities/callOrReturn.d.ts +0 -8
  257. package/dist/packages/core/src/utilities/createStyleTag.d.ts +0 -1
  258. package/dist/packages/core/src/utilities/deleteProps.d.ts +0 -7
  259. package/dist/packages/core/src/utilities/elementFromString.d.ts +0 -1
  260. package/dist/packages/core/src/utilities/fromString.d.ts +0 -1
  261. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  262. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +0 -1
  263. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  264. package/dist/packages/core/src/utilities/isPlainObject.d.ts +0 -1
  265. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +0 -2
  266. package/dist/packages/core/src/utilities/mergeDeep.d.ts +0 -2
  267. package/dist/packages/core/src/utilities/minMax.d.ts +0 -1
  268. package/dist/packages/core/src/utilities/objectIncludes.d.ts +0 -7
  269. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  270. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  271. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  272. package/dist/tiptap-core.cjs.js +0 -3027
  273. package/dist/tiptap-core.cjs.js.map +0 -1
  274. package/dist/tiptap-core.esm.js +0 -3002
  275. package/dist/tiptap-core.esm.js.map +0 -1
  276. package/dist/tiptap-core.umd.js +0 -3024
  277. package/dist/tiptap-core.umd.js.map +0 -1
  278. package/src/commands/insertHTML.ts +0 -30
  279. package/src/commands/insertNode.ts +0 -33
  280. package/src/commands/insertText.ts +0 -22
  281. package/src/commands/joinBackward.ts +0 -17
  282. package/src/commands/joinForward.ts +0 -17
  283. package/src/commands/replace.ts +0 -20
  284. package/src/commands/replaceRange.ts +0 -36
  285. package/src/commands/resetNodeAttributes.ts +0 -33
  286. package/src/commands/updateNodeAttributes.ts +0 -35
  287. package/src/utilities/isClass.ts +0 -7
  288. package/src/utilities/isObject.ts +0 -10
  289. package/src/utilities/removeElement.ts +0 -5
package/package.json CHANGED
@@ -1,45 +1,59 @@
1
1
  {
2
2
  "name": "@tiptap/core",
3
3
  "description": "headless rich text editor",
4
- "version": "2.0.0-beta.21",
4
+ "version": "2.0.0-beta.210",
5
5
  "homepage": "https://tiptap.dev",
6
6
  "keywords": [
7
7
  "tiptap",
8
8
  "headless",
9
9
  "wysiwyg",
10
- "text editor"
10
+ "text editor",
11
+ "prosemirror"
11
12
  ],
12
13
  "license": "MIT",
13
14
  "funding": {
14
15
  "type": "github",
15
16
  "url": "https://github.com/sponsors/ueberdosis"
16
17
  },
17
- "main": "dist/tiptap-core.cjs.js",
18
- "umd": "dist/tiptap-core.umd.js",
19
- "module": "dist/tiptap-core.esm.js",
20
- "unpkg": "dist/tiptap-core.bundle.umd.min.js",
21
- "types": "dist/packages/core/src/index.d.ts",
18
+ "type": "module",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js",
23
+ "require": "./dist/index.cjs"
24
+ }
25
+ },
26
+ "main": "dist/index.cjs",
27
+ "module": "dist/index.js",
28
+ "types": "dist/index.d.ts",
22
29
  "files": [
23
30
  "src",
24
31
  "dist"
25
32
  ],
26
- "dependencies": {
27
- "@types/prosemirror-commands": "^1.0.4",
28
- "@types/prosemirror-inputrules": "^1.0.4",
29
- "@types/prosemirror-keymap": "^1.0.4",
30
- "@types/prosemirror-model": "^1.13.0",
31
- "@types/prosemirror-schema-list": "^1.0.3",
32
- "@types/prosemirror-state": "^1.2.6",
33
- "@types/prosemirror-transform": "^1.1.2",
34
- "@types/prosemirror-view": "^1.17.1",
35
- "prosemirror-commands": "^1.1.7",
36
- "prosemirror-inputrules": "^1.1.3",
37
- "prosemirror-keymap": "^1.1.3",
38
- "prosemirror-model": "^1.14.0",
39
- "prosemirror-schema-list": "^1.1.4",
40
- "prosemirror-state": "^1.3.4",
41
- "prosemirror-transform": "^1.3.2",
42
- "prosemirror-view": "^1.18.2"
33
+ "peerDependencies": {
34
+ "@tiptap/pm": "^2.0.0-beta.209"
35
+ },
36
+ "devDependencies": {
37
+ "@tiptap/pm": "^2.0.0-beta.210"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/ueberdosis/tiptap",
42
+ "directory": "packages/core"
43
+ },
44
+ "sideEffects": false,
45
+ "scripts": {
46
+ "build": "tsup"
43
47
  },
44
- "gitHead": "113d50b814c8860465c8bb16ae2bee3097689016"
48
+ "tsup": {
49
+ "entry": [
50
+ "src/index.ts"
51
+ ],
52
+ "dts": true,
53
+ "splitting": true,
54
+ "format": [
55
+ "esm",
56
+ "cjs"
57
+ ]
58
+ }
45
59
  }
@@ -1,37 +1,44 @@
1
- import { EditorState, Transaction } from 'prosemirror-state'
1
+ import { EditorState, Transaction } from '@tiptap/pm/state'
2
+
2
3
  import { Editor } from './Editor'
4
+ import { createChainableState } from './helpers/createChainableState'
3
5
  import {
4
- SingleCommands,
5
- ChainedCommands,
6
- CanCommands,
7
- RawCommands,
8
- CommandProps,
6
+ AnyCommands, CanCommands, ChainedCommands, CommandProps, SingleCommands,
9
7
  } from './types'
10
8
 
11
- export default class CommandManager {
12
-
9
+ export class CommandManager {
13
10
  editor: Editor
14
11
 
15
- commands: RawCommands
12
+ rawCommands: AnyCommands
13
+
14
+ customState?: EditorState
15
+
16
+ constructor(props: { editor: Editor; state?: EditorState }) {
17
+ this.editor = props.editor
18
+ this.rawCommands = this.editor.extensionManager.commands
19
+ this.customState = props.state
20
+ }
21
+
22
+ get hasCustomState(): boolean {
23
+ return !!this.customState
24
+ }
16
25
 
17
- constructor(editor: Editor, commands: RawCommands) {
18
- this.editor = editor
19
- this.commands = commands
26
+ get state(): EditorState {
27
+ return this.customState || this.editor.state
20
28
  }
21
29
 
22
- public createCommands(): SingleCommands {
23
- const { commands, editor } = this
24
- const { state, view } = editor
30
+ get commands(): SingleCommands {
31
+ const { rawCommands, editor, state } = this
32
+ const { view } = editor
25
33
  const { tr } = state
26
34
  const props = this.buildProps(tr)
27
35
 
28
- return Object.fromEntries(Object
29
- .entries(commands)
30
- .map(([name, command]) => {
31
- const method = (...args: any) => {
36
+ return Object.fromEntries(
37
+ Object.entries(rawCommands).map(([name, command]) => {
38
+ const method = (...args: any[]) => {
32
39
  const callback = command(...args)(props)
33
40
 
34
- if (!tr.getMeta('preventDispatch')) {
41
+ if (!tr.getMeta('preventDispatch') && !this.hasCustomState) {
35
42
  view.dispatch(tr)
36
43
  }
37
44
 
@@ -39,37 +46,53 @@ export default class CommandManager {
39
46
  }
40
47
 
41
48
  return [name, method]
42
- })) as SingleCommands
49
+ }),
50
+ ) as unknown as SingleCommands
51
+ }
52
+
53
+ get chain(): () => ChainedCommands {
54
+ return () => this.createChain()
55
+ }
56
+
57
+ get can(): () => CanCommands {
58
+ return () => this.createCan()
43
59
  }
44
60
 
45
61
  public createChain(startTr?: Transaction, shouldDispatch = true): ChainedCommands {
46
- const { commands, editor } = this
47
- const { state, view } = editor
62
+ const { rawCommands, editor, state } = this
63
+ const { view } = editor
48
64
  const callbacks: boolean[] = []
49
65
  const hasStartTransaction = !!startTr
50
66
  const tr = startTr || state.tr
51
67
 
52
68
  const run = () => {
53
- if (!hasStartTransaction && shouldDispatch && !tr.getMeta('preventDispatch')) {
69
+ if (
70
+ !hasStartTransaction
71
+ && shouldDispatch
72
+ && !tr.getMeta('preventDispatch')
73
+ && !this.hasCustomState
74
+ ) {
54
75
  view.dispatch(tr)
55
76
  }
56
77
 
57
- return () => callbacks.every(callback => callback === true)
78
+ return callbacks.every(callback => callback === true)
58
79
  }
59
80
 
60
81
  const chain = {
61
- ...Object.fromEntries(Object.entries(commands).map(([name, command]) => {
62
- const chainedCommand = (...args: any[]) => {
63
- const props = this.buildProps(tr, shouldDispatch)
64
- const callback = command(...args)(props)
82
+ ...Object.fromEntries(
83
+ Object.entries(rawCommands).map(([name, command]) => {
84
+ const chainedCommand = (...args: never[]) => {
85
+ const props = this.buildProps(tr, shouldDispatch)
86
+ const callback = command(...args)(props)
65
87
 
66
- callbacks.push(callback)
88
+ callbacks.push(callback)
67
89
 
68
- return chain
69
- }
90
+ return chain
91
+ }
70
92
 
71
- return [name, chainedCommand]
72
- })),
93
+ return [name, chainedCommand]
94
+ }),
95
+ ),
73
96
  run,
74
97
  } as unknown as ChainedCommands
75
98
 
@@ -77,16 +100,15 @@ export default class CommandManager {
77
100
  }
78
101
 
79
102
  public createCan(startTr?: Transaction): CanCommands {
80
- const { commands, editor } = this
81
- const { state } = editor
82
- const dispatch = undefined
103
+ const { rawCommands, state } = this
104
+ const dispatch = false
83
105
  const tr = startTr || state.tr
84
106
  const props = this.buildProps(tr, dispatch)
85
- const formattedCommands = Object.fromEntries(Object
86
- .entries(commands)
87
- .map(([name, command]) => {
88
- return [name, (...args: any[]) => command(...args)({ ...props, dispatch })]
89
- })) as SingleCommands
107
+ const formattedCommands = Object.fromEntries(
108
+ Object.entries(rawCommands).map(([name, command]) => {
109
+ return [name, (...args: never[]) => command(...args)({ ...props, dispatch: undefined })]
110
+ }),
111
+ ) as unknown as SingleCommands
90
112
 
91
113
  return {
92
114
  ...formattedCommands,
@@ -95,8 +117,8 @@ export default class CommandManager {
95
117
  }
96
118
 
97
119
  public buildProps(tr: Transaction, shouldDispatch = true): CommandProps {
98
- const { editor, commands } = this
99
- const { state, view } = editor
120
+ const { rawCommands, editor, state } = this
121
+ const { view } = editor
100
122
 
101
123
  if (state.storedMarks) {
102
124
  tr.setStoredMarks(state.storedMarks)
@@ -106,54 +128,22 @@ export default class CommandManager {
106
128
  tr,
107
129
  editor,
108
130
  view,
109
- state: this.chainableState(tr, state),
110
- dispatch: shouldDispatch
111
- ? () => undefined
112
- : undefined,
131
+ state: createChainableState({
132
+ state,
133
+ transaction: tr,
134
+ }),
135
+ dispatch: shouldDispatch ? () => undefined : undefined,
113
136
  chain: () => this.createChain(tr),
114
137
  can: () => this.createCan(tr),
115
138
  get commands() {
116
- return Object.fromEntries(Object
117
- .entries(commands)
118
- .map(([name, command]) => {
119
- return [name, (...args: any[]) => command(...args)(props)]
120
- })) as SingleCommands
139
+ return Object.fromEntries(
140
+ Object.entries(rawCommands).map(([name, command]) => {
141
+ return [name, (...args: never[]) => command(...args)(props)]
142
+ }),
143
+ ) as unknown as SingleCommands
121
144
  },
122
145
  }
123
146
 
124
147
  return props
125
148
  }
126
-
127
- public chainableState(tr: Transaction, state: EditorState): EditorState {
128
- let { selection } = tr
129
- let { doc } = tr
130
- let { storedMarks } = tr
131
-
132
- return {
133
- ...state,
134
- schema: state.schema,
135
- plugins: state.plugins,
136
- apply: state.apply.bind(state),
137
- applyTransaction: state.applyTransaction.bind(state),
138
- reconfigure: state.reconfigure.bind(state),
139
- toJSON: state.toJSON.bind(state),
140
- get storedMarks() {
141
- return storedMarks
142
- },
143
- get selection() {
144
- return selection
145
- },
146
- get doc() {
147
- return doc
148
- },
149
- get tr() {
150
- selection = tr.selection
151
- doc = tr.doc
152
- storedMarks = tr.storedMarks
153
-
154
- return tr
155
- },
156
- }
157
- }
158
-
159
149
  }