@tiptap/core 2.0.0-beta.18 → 2.0.0-beta.180

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/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 +24 -19
  5. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  6. package/dist/packages/core/src/Extension.d.ts +99 -27
  7. package/dist/packages/core/src/ExtensionManager.d.ts +7 -13
  8. package/dist/packages/core/src/InputRule.d.ts +42 -0
  9. package/dist/packages/core/src/Mark.d.ts +131 -31
  10. package/dist/packages/core/src/Node.d.ts +157 -33
  11. package/dist/packages/core/src/NodeView.d.ts +8 -12
  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/index.d.ts +50 -0
  29. package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
  30. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  31. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  33. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  34. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  36. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  37. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  38. package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
  39. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  40. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  41. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  42. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  43. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  44. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  45. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  46. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  47. package/dist/packages/core/src/commands/setMark.d.ts +3 -3
  48. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  49. package/dist/packages/core/src/commands/setNode.d.ts +3 -3
  50. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  51. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  52. package/dist/packages/core/src/commands/sinkListItem.d.ts +3 -3
  53. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  54. package/dist/packages/core/src/commands/splitListItem.d.ts +3 -3
  55. package/dist/packages/core/src/commands/toggleList.d.ts +3 -3
  56. package/dist/packages/core/src/commands/toggleMark.d.ts +8 -3
  57. package/dist/packages/core/src/commands/toggleNode.d.ts +3 -3
  58. package/dist/packages/core/src/commands/toggleWrap.d.ts +3 -3
  59. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  60. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  61. package/dist/packages/core/src/commands/unsetMark.d.ts +8 -3
  62. package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
  63. package/dist/packages/core/src/commands/wrapIn.d.ts +3 -3
  64. package/dist/packages/core/src/commands/wrapInList.d.ts +3 -3
  65. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  66. package/dist/packages/core/src/extensions/commands.d.ts +2 -95
  67. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  69. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  70. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  71. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  72. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  73. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  74. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  75. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  76. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  77. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  78. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  79. package/dist/packages/core/src/helpers/findParentNode.d.ts +2 -3
  80. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +2 -2
  81. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  82. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  83. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  84. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  85. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
  86. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  87. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  88. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  89. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  90. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +2 -3
  91. package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
  92. package/dist/packages/core/src/helpers/getMarkType.d.ts +1 -1
  93. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  94. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +2 -3
  95. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  96. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
  97. package/dist/packages/core/src/helpers/getSchema.d.ts +1 -1
  98. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  99. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +1 -1
  100. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +1 -1
  101. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  102. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  103. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  104. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
  105. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  106. package/dist/packages/core/src/helpers/index.d.ts +33 -0
  107. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  108. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  109. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  110. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  111. package/dist/packages/core/src/helpers/isMarkActive.d.ts +2 -3
  112. package/dist/packages/core/src/helpers/isNodeActive.d.ts +2 -3
  113. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +1 -1
  114. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  115. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  116. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  117. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  118. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  119. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  120. package/dist/packages/core/src/index.d.ts +14 -21
  121. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  122. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  123. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  124. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  125. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  126. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  127. package/dist/packages/core/src/pasteRules/index.d.ts +2 -0
  128. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  129. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  130. package/dist/packages/core/src/style.d.ts +1 -2
  131. package/dist/packages/core/src/types.d.ts +112 -56
  132. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  133. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  135. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  139. package/dist/packages/core/src/utilities/index.d.ts +3 -0
  140. package/dist/packages/core/src/utilities/isClass.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  142. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  145. package/dist/packages/core/src/utilities/isObject.d.ts +1 -1
  146. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  147. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  148. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  149. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  150. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  151. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  152. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  153. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  154. package/dist/tiptap-core.cjs.js +2675 -1378
  155. package/dist/tiptap-core.cjs.js.map +1 -1
  156. package/dist/tiptap-core.esm.js +2605 -1341
  157. package/dist/tiptap-core.esm.js.map +1 -1
  158. package/dist/tiptap-core.umd.js +2622 -1324
  159. package/dist/tiptap-core.umd.js.map +1 -1
  160. package/package.json +17 -20
  161. package/src/CommandManager.ts +63 -64
  162. package/src/Editor.ts +115 -78
  163. package/src/EventEmitter.ts +14 -4
  164. package/src/Extension.ts +193 -43
  165. package/src/ExtensionManager.ts +232 -83
  166. package/src/InputRule.ts +265 -0
  167. package/src/Mark.ts +239 -49
  168. package/src/Node.ts +279 -57
  169. package/src/NodeView.ts +115 -47
  170. package/src/PasteRule.ts +247 -0
  171. package/src/Tracker.ts +42 -0
  172. package/src/commands/blur.ts +12 -6
  173. package/src/commands/clearContent.ts +3 -3
  174. package/src/commands/clearNodes.ts +30 -18
  175. package/src/commands/command.ts +2 -2
  176. package/src/commands/createParagraphNear.ts +4 -3
  177. package/src/commands/deleteNode.ts +37 -0
  178. package/src/commands/deleteRange.ts +3 -3
  179. package/src/commands/deleteSelection.ts +4 -3
  180. package/src/commands/enter.ts +3 -3
  181. package/src/commands/exitCode.ts +4 -3
  182. package/src/commands/extendMarkRange.ts +12 -11
  183. package/src/commands/first.ts +3 -3
  184. package/src/commands/focus.ts +45 -44
  185. package/src/commands/forEach.ts +24 -0
  186. package/src/commands/index.ts +50 -0
  187. package/src/commands/insertContent.ts +13 -24
  188. package/src/commands/insertContentAt.ts +108 -0
  189. package/src/commands/joinBackward.ts +4 -3
  190. package/src/commands/joinForward.ts +4 -3
  191. package/src/commands/keyboardShortcut.ts +6 -6
  192. package/src/commands/lift.ts +6 -5
  193. package/src/commands/liftEmptyBlock.ts +4 -3
  194. package/src/commands/liftListItem.ts +6 -5
  195. package/src/commands/newlineInCode.ts +4 -3
  196. package/src/commands/resetAttributes.ts +62 -0
  197. package/src/commands/scrollIntoView.ts +3 -3
  198. package/src/commands/selectAll.ts +8 -6
  199. package/src/commands/selectNodeBackward.ts +4 -3
  200. package/src/commands/selectNodeForward.ts +4 -3
  201. package/src/commands/selectParentNode.ts +4 -3
  202. package/src/commands/selectTextblockEnd.ts +20 -0
  203. package/src/commands/selectTextblockStart.ts +20 -0
  204. package/src/commands/setContent.ts +8 -11
  205. package/src/commands/setMark.ts +36 -12
  206. package/src/commands/setMeta.ts +18 -0
  207. package/src/commands/setNode.ts +29 -7
  208. package/src/commands/setNodeSelection.ts +29 -0
  209. package/src/commands/setTextSelection.ts +33 -0
  210. package/src/commands/sinkListItem.ts +6 -5
  211. package/src/commands/splitBlock.ts +16 -10
  212. package/src/commands/splitListItem.ts +45 -18
  213. package/src/commands/toggleList.ts +83 -18
  214. package/src/commands/toggleMark.ts +18 -7
  215. package/src/commands/toggleNode.ts +6 -5
  216. package/src/commands/toggleWrap.ts +9 -9
  217. package/src/commands/undoInputRule.ts +34 -5
  218. package/src/commands/unsetAllMarks.ts +7 -11
  219. package/src/commands/unsetMark.ts +35 -22
  220. package/src/commands/updateAttributes.ts +73 -0
  221. package/src/commands/wrapIn.ts +5 -10
  222. package/src/commands/wrapInList.ts +6 -5
  223. package/src/extensions/clipboardTextSerializer.ts +14 -35
  224. package/src/extensions/commands.ts +3 -141
  225. package/src/extensions/editable.ts +1 -0
  226. package/src/extensions/focusEvents.ts +1 -3
  227. package/src/extensions/index.ts +1 -0
  228. package/src/extensions/keymap.ts +110 -13
  229. package/src/extensions/tabindex.ts +18 -0
  230. package/src/helpers/combineTransactionSteps.ts +18 -0
  231. package/src/helpers/createChainableState.ts +38 -0
  232. package/src/helpers/createDocument.ts +5 -6
  233. package/src/helpers/createNodeFromContent.ts +17 -19
  234. package/src/helpers/defaultBlockAt.ts +13 -0
  235. package/src/helpers/findChildren.ts +18 -0
  236. package/src/helpers/findChildrenInRange.ts +32 -0
  237. package/src/helpers/findParentNode.ts +3 -2
  238. package/src/helpers/findParentNodeClosestToPos.ts +3 -2
  239. package/src/helpers/generateHTML.ts +6 -5
  240. package/src/helpers/generateJSON.ts +14 -0
  241. package/src/helpers/generateText.ts +30 -0
  242. package/src/helpers/getAttributes.ts +28 -0
  243. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  244. package/src/helpers/getChangedRanges.ts +83 -0
  245. package/src/helpers/getDebugJSON.ts +54 -0
  246. package/src/helpers/getExtensionField.ts +25 -0
  247. package/src/helpers/getHTMLFromFragment.ts +6 -5
  248. package/src/helpers/getMarkAttributes.ts +14 -10
  249. package/src/helpers/getMarkRange.ts +41 -8
  250. package/src/helpers/getMarkType.ts +5 -1
  251. package/src/helpers/getMarksBetween.ts +32 -10
  252. package/src/helpers/getNodeAttributes.ts +9 -9
  253. package/src/helpers/getNodeType.ts +5 -1
  254. package/src/helpers/getRenderedAttributes.ts +6 -7
  255. package/src/helpers/getSchema.ts +7 -133
  256. package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
  257. package/src/helpers/getSchemaTypeByName.ts +2 -10
  258. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  259. package/src/helpers/getSplittedAttributes.ts +4 -4
  260. package/src/helpers/getText.ts +19 -0
  261. package/src/helpers/getTextBetween.ts +49 -0
  262. package/src/helpers/getTextContentFromNodes.ts +17 -0
  263. package/src/helpers/getTextSerializersFromSchema.ts +10 -0
  264. package/src/helpers/index.ts +33 -0
  265. package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
  266. package/src/helpers/isActive.ts +5 -5
  267. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  268. package/src/helpers/isList.ts +14 -7
  269. package/src/helpers/isMarkActive.ts +45 -20
  270. package/src/helpers/isNodeActive.ts +28 -35
  271. package/src/helpers/isNodeEmpty.ts +1 -1
  272. package/src/helpers/isNodeSelection.ts +3 -2
  273. package/src/helpers/isTextSelection.ts +3 -2
  274. package/src/helpers/posToDOMRect.ts +35 -0
  275. package/src/helpers/resolveFocusPosition.ts +43 -0
  276. package/src/helpers/selectionToInsertionEnd.ts +2 -2
  277. package/src/helpers/splitExtensions.ts +3 -3
  278. package/src/index.ts +15 -24
  279. package/src/inputRules/index.ts +5 -0
  280. package/src/inputRules/markInputRule.ts +59 -39
  281. package/src/inputRules/nodeInputRule.ts +45 -11
  282. package/src/inputRules/textInputRule.ts +35 -0
  283. package/src/inputRules/textblockTypeInputRule.ts +38 -0
  284. package/src/inputRules/wrappingInputRule.ts +60 -0
  285. package/src/pasteRules/index.ts +2 -0
  286. package/src/pasteRules/markPasteRule.ts +62 -53
  287. package/src/pasteRules/textPasteRule.ts +35 -0
  288. package/src/style.ts +16 -3
  289. package/src/types.ts +129 -43
  290. package/src/utilities/callOrReturn.ts +6 -3
  291. package/src/utilities/createStyleTag.ts +12 -1
  292. package/src/utilities/deleteProps.ts +2 -4
  293. package/src/utilities/elementFromString.ts +4 -5
  294. package/src/utilities/escapeForRegEx.ts +4 -0
  295. package/src/utilities/findDuplicates.ts +5 -0
  296. package/src/utilities/fromString.ts +2 -2
  297. package/src/utilities/index.ts +3 -0
  298. package/src/utilities/isClass.ts +2 -2
  299. package/src/utilities/isEmptyObject.ts +2 -2
  300. package/src/utilities/isFunction.ts +3 -0
  301. package/src/utilities/isMacOS.ts +5 -0
  302. package/src/utilities/isNumber.ts +3 -0
  303. package/src/utilities/isObject.ts +6 -6
  304. package/src/utilities/isPlainObject.ts +8 -5
  305. package/src/utilities/isRegExp.ts +3 -0
  306. package/src/utilities/isString.ts +3 -0
  307. package/src/utilities/isiOS.ts +12 -0
  308. package/src/utilities/mergeAttributes.ts +2 -3
  309. package/src/utilities/mergeDeep.ts +2 -3
  310. package/src/utilities/minMax.ts +1 -1
  311. package/src/utilities/objectIncludes.ts +17 -5
  312. package/src/utilities/removeDuplicates.ts +15 -0
  313. package/CHANGELOG.md +0 -335
  314. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  315. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  316. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  317. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  318. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  319. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  320. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  321. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  322. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  323. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  324. package/src/commands/insertHTML.ts +0 -30
  325. package/src/commands/insertNode.ts +0 -33
  326. package/src/commands/insertText.ts +0 -22
  327. package/src/commands/replace.ts +0 -20
  328. package/src/commands/replaceRange.ts +0 -36
  329. package/src/commands/resetNodeAttributes.ts +0 -31
  330. package/src/commands/updateNodeAttributes.ts +0 -33
  331. package/src/utilities/removeElement.ts +0 -5
@@ -1,152 +1,14 @@
1
+ import * as commands from '../commands'
1
2
  import { Extension } from '../Extension'
2
- import * as blur from '../commands/blur'
3
- import * as clearContent from '../commands/clearContent'
4
- import * as clearNodes from '../commands/clearNodes'
5
- import * as command from '../commands/command'
6
- import * as createParagraphNear from '../commands/createParagraphNear'
7
- import * as deleteRange from '../commands/deleteRange'
8
- import * as deleteSelection from '../commands/deleteSelection'
9
- import * as enter from '../commands/enter'
10
- import * as exitCode from '../commands/exitCode'
11
- import * as extendMarkRange from '../commands/extendMarkRange'
12
- import * as first from '../commands/first'
13
- import * as focus from '../commands/focus'
14
- 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'
18
- import * as joinBackward from '../commands/joinBackward'
19
- import * as joinForward from '../commands/joinForward'
20
- import * as keyboardShortcut from '../commands/keyboardShortcut'
21
- import * as lift from '../commands/lift'
22
- import * as liftEmptyBlock from '../commands/liftEmptyBlock'
23
- import * as liftListItem from '../commands/liftListItem'
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'
28
- import * as scrollIntoView from '../commands/scrollIntoView'
29
- import * as selectAll from '../commands/selectAll'
30
- import * as selectNodeBackward from '../commands/selectNodeBackward'
31
- import * as selectNodeForward from '../commands/selectNodeForward'
32
- import * as selectParentNode from '../commands/selectParentNode'
33
- import * as setContent from '../commands/setContent'
34
- import * as setMark from '../commands/setMark'
35
- import * as setNode from '../commands/setNode'
36
- import * as sinkListItem from '../commands/sinkListItem'
37
- import * as splitBlock from '../commands/splitBlock'
38
- import * as splitListItem from '../commands/splitListItem'
39
- import * as toggleList from '../commands/toggleList'
40
- import * as toggleMark from '../commands/toggleMark'
41
- import * as toggleNode from '../commands/toggleNode'
42
- import * as toggleWrap from '../commands/toggleWrap'
43
- import * as undoInputRule from '../commands/undoInputRule'
44
- import * as unsetAllMarks from '../commands/unsetAllMarks'
45
- import * as unsetMark from '../commands/unsetMark'
46
- import * as updateNodeAttributes from '../commands/updateNodeAttributes'
47
- import * as wrapIn from '../commands/wrapIn'
48
- import * as wrapInList from '../commands/wrapInList'
49
3
 
50
- export { blur }
51
- export { clearContent }
52
- export { clearNodes }
53
- export { command }
54
- export { createParagraphNear }
55
- export { deleteRange }
56
- export { deleteSelection }
57
- export { enter }
58
- export { exitCode }
59
- export { extendMarkRange }
60
- export { first }
61
- export { focus }
62
- export { insertContent }
63
- export { insertHTML }
64
- export { insertNode }
65
- export { insertText }
66
- export { joinBackward }
67
- export { joinForward }
68
- export { keyboardShortcut }
69
- export { lift }
70
- export { liftEmptyBlock }
71
- export { liftListItem }
72
- export { newlineInCode }
73
- export { replace }
74
- export { replaceRange }
75
- export { resetNodeAttributes }
76
- export { scrollIntoView }
77
- export { selectAll }
78
- export { selectNodeBackward }
79
- export { selectNodeForward }
80
- export { selectParentNode }
81
- export { setContent }
82
- export { setMark }
83
- export { setNode }
84
- export { sinkListItem }
85
- export { splitBlock }
86
- export { splitListItem }
87
- export { toggleList }
88
- export { toggleMark }
89
- export { toggleNode }
90
- export { toggleWrap }
91
- export { undoInputRule }
92
- export { unsetAllMarks }
93
- export { unsetMark }
94
- export { updateNodeAttributes }
95
- export { wrapIn }
96
- export { wrapInList }
4
+ export * from '../commands'
97
5
 
98
6
  export const Commands = Extension.create({
99
7
  name: 'commands',
100
8
 
101
9
  addCommands() {
102
10
  return {
103
- ...blur,
104
- ...clearContent,
105
- ...clearNodes,
106
- ...command,
107
- ...createParagraphNear,
108
- ...deleteRange,
109
- ...deleteSelection,
110
- ...enter,
111
- ...exitCode,
112
- ...extendMarkRange,
113
- ...first,
114
- ...focus,
115
- ...insertContent,
116
- ...insertHTML,
117
- ...insertNode,
118
- ...insertText,
119
- ...joinBackward,
120
- ...joinForward,
121
- ...keyboardShortcut,
122
- ...lift,
123
- ...liftEmptyBlock,
124
- ...liftListItem,
125
- ...newlineInCode,
126
- ...replace,
127
- ...replaceRange,
128
- ...resetNodeAttributes,
129
- ...scrollIntoView,
130
- ...selectAll,
131
- ...selectNodeBackward,
132
- ...selectNodeForward,
133
- ...selectParentNode,
134
- ...setContent,
135
- ...setMark,
136
- ...setNode,
137
- ...sinkListItem,
138
- ...splitBlock,
139
- ...splitListItem,
140
- ...toggleList,
141
- ...toggleMark,
142
- ...toggleNode,
143
- ...toggleWrap,
144
- ...undoInputRule,
145
- ...unsetAllMarks,
146
- ...unsetMark,
147
- ...updateNodeAttributes,
148
- ...wrapIn,
149
- ...wrapInList,
11
+ ...commands,
150
12
  }
151
13
  },
152
14
  })
@@ -1,4 +1,5 @@
1
1
  import { Plugin, PluginKey } from 'prosemirror-state'
2
+
2
3
  import { Extension } from '../Extension'
3
4
 
4
5
  export const Editable = Extension.create({
@@ -1,4 +1,5 @@
1
1
  import { Plugin, PluginKey } from 'prosemirror-state'
2
+
2
3
  import { Extension } from '../Extension'
3
4
 
4
5
  export const FocusEvents = Extension.create({
@@ -11,9 +12,6 @@ export const FocusEvents = Extension.create({
11
12
  new Plugin({
12
13
  key: new PluginKey('focusEvents'),
13
14
  props: {
14
- attributes: {
15
- tabindex: '0',
16
- },
17
15
  handleDOMEvents: {
18
16
  focus: (view, event) => {
19
17
  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'
@@ -1,4 +1,10 @@
1
+ import { Plugin, PluginKey, Selection } from 'prosemirror-state'
2
+
3
+ import { CommandManager } from '../CommandManager'
1
4
  import { Extension } from '../Extension'
5
+ import { createChainableState } from '../helpers/createChainableState'
6
+ import { isiOS } from '../utilities/isiOS'
7
+ import { isMacOS } from '../utilities/isMacOS'
2
8
 
3
9
  export const Keymap = Extension.create({
4
10
  name: 'keymap',
@@ -6,6 +12,24 @@ export const Keymap = Extension.create({
6
12
  addKeyboardShortcuts() {
7
13
  const handleBackspace = () => this.editor.commands.first(({ commands }) => [
8
14
  () => commands.undoInputRule(),
15
+ // maybe convert first text block node to default node
16
+ () => commands.command(({ tr }) => {
17
+ const { selection, doc } = tr
18
+ const { empty, $anchor } = selection
19
+ const { pos, parent } = $anchor
20
+ const isAtStart = Selection.atStart(doc).from === pos
21
+
22
+ if (
23
+ !empty
24
+ || !isAtStart
25
+ || !parent.type.isTextblock
26
+ || parent.textContent.length
27
+ ) {
28
+ return false
29
+ }
30
+
31
+ return commands.clearNodes()
32
+ }),
9
33
  () => commands.deleteSelection(),
10
34
  () => commands.joinBackward(),
11
35
  () => commands.selectNodeBackward(),
@@ -17,20 +41,93 @@ export const Keymap = Extension.create({
17
41
  () => commands.selectNodeForward(),
18
42
  ])
19
43
 
20
- return {
21
- Enter: () => this.editor.commands.first(({ commands }) => [
22
- () => commands.newlineInCode(),
23
- () => commands.createParagraphNear(),
24
- () => commands.liftEmptyBlock(),
25
- () => commands.splitBlock(),
26
- ]),
44
+ const handleEnter = () => this.editor.commands.first(({ commands }) => [
45
+ () => commands.newlineInCode(),
46
+ () => commands.createParagraphNear(),
47
+ () => commands.liftEmptyBlock(),
48
+ () => commands.splitBlock(),
49
+ ])
50
+
51
+ const baseKeymap = {
52
+ Enter: handleEnter,
27
53
  'Mod-Enter': () => this.editor.commands.exitCode(),
28
- Backspace: () => handleBackspace(),
29
- 'Mod-Backspace': () => handleBackspace(),
30
- Delete: () => handleDelete(),
31
- 'Mod-Delete': () => handleDelete(),
32
- // we don’t need a custom `selectAll` for now
33
- // 'Mod-a': () => this.editor.commands.selectAll(),
54
+ Backspace: handleBackspace,
55
+ 'Mod-Backspace': handleBackspace,
56
+ 'Shift-Backspace': handleBackspace,
57
+ Delete: handleDelete,
58
+ 'Mod-Delete': handleDelete,
59
+ 'Mod-a': () => this.editor.commands.selectAll(),
60
+ }
61
+
62
+ const pcKeymap = {
63
+ ...baseKeymap,
64
+ }
65
+
66
+ const macKeymap = {
67
+ ...baseKeymap,
68
+ 'Ctrl-h': handleBackspace,
69
+ 'Alt-Backspace': handleBackspace,
70
+ 'Ctrl-d': handleDelete,
71
+ 'Ctrl-Alt-Backspace': handleDelete,
72
+ 'Alt-Delete': handleDelete,
73
+ 'Alt-d': handleDelete,
74
+ 'Ctrl-a': () => this.editor.commands.selectTextblockStart(),
75
+ 'Ctrl-e': () => this.editor.commands.selectTextblockEnd(),
76
+ }
77
+
78
+ if (isiOS() || isMacOS()) {
79
+ return macKeymap
34
80
  }
81
+
82
+ return pcKeymap
83
+ },
84
+
85
+ addProseMirrorPlugins() {
86
+ return [
87
+ // With this plugin we check if the whole document was selected and deleted.
88
+ // In this case we will additionally call `clearNodes()` to convert e.g. a heading
89
+ // to a paragraph if necessary.
90
+ // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well
91
+ // with many other commands.
92
+ new Plugin({
93
+ key: new PluginKey('clearDocument'),
94
+ appendTransaction: (transactions, oldState, newState) => {
95
+ const docChanges = transactions.some(transaction => transaction.docChanged)
96
+ && !oldState.doc.eq(newState.doc)
97
+
98
+ if (!docChanges) {
99
+ return
100
+ }
101
+
102
+ const { empty, from, to } = oldState.selection
103
+ const allFrom = Selection.atStart(oldState.doc).from
104
+ const allEnd = Selection.atEnd(oldState.doc).to
105
+ const allWasSelected = from === allFrom && to === allEnd
106
+ const isEmpty = newState.doc.textBetween(0, newState.doc.content.size, ' ', ' ').length === 0
107
+
108
+ if (empty || !allWasSelected || !isEmpty) {
109
+ return
110
+ }
111
+
112
+ const tr = newState.tr
113
+ const state = createChainableState({
114
+ state: newState,
115
+ transaction: tr,
116
+ })
117
+ const { commands } = new CommandManager({
118
+ editor: this.editor,
119
+ state,
120
+ })
121
+
122
+ commands.clearNodes()
123
+
124
+ if (!tr.steps.length) {
125
+ return
126
+ }
127
+
128
+ return tr
129
+ },
130
+ }),
131
+ ]
35
132
  },
36
133
  })
@@ -0,0 +1,18 @@
1
+ import { Plugin, PluginKey } from 'prosemirror-state'
2
+
3
+ import { Extension } from '../Extension'
4
+
5
+ export const Tabindex = Extension.create({
6
+ name: 'tabindex',
7
+
8
+ addProseMirrorPlugins() {
9
+ return [
10
+ new Plugin({
11
+ key: new PluginKey('tabindex'),
12
+ props: {
13
+ attributes: this.editor.isEditable ? { tabindex: '0' } : {},
14
+ },
15
+ }),
16
+ ]
17
+ },
18
+ })
@@ -0,0 +1,18 @@
1
+ import { Node as ProseMirrorNode } from 'prosemirror-model'
2
+ import { Transaction } from 'prosemirror-state'
3
+ import { Transform } from 'prosemirror-transform'
4
+
5
+ /**
6
+ * Returns a new `Transform` based on all steps of the passed transactions.
7
+ */
8
+ export function combineTransactionSteps(oldDoc: ProseMirrorNode, transactions: Transaction[]): Transform {
9
+ const transform = new Transform(oldDoc)
10
+
11
+ transactions.forEach(transaction => {
12
+ transaction.steps.forEach(step => {
13
+ transform.step(step)
14
+ })
15
+ })
16
+
17
+ return transform
18
+ }
@@ -0,0 +1,38 @@
1
+ import { EditorState, Transaction } from 'prosemirror-state'
2
+
3
+ export function createChainableState(config: {
4
+ transaction: Transaction,
5
+ state: EditorState,
6
+ }): EditorState {
7
+ const { state, transaction } = config
8
+ let { selection } = transaction
9
+ let { doc } = transaction
10
+ let { storedMarks } = transaction
11
+
12
+ return {
13
+ ...state,
14
+ apply: state.apply.bind(state),
15
+ applyTransaction: state.applyTransaction.bind(state),
16
+ filterTransaction: state.filterTransaction,
17
+ plugins: state.plugins,
18
+ schema: state.schema,
19
+ reconfigure: state.reconfigure.bind(state),
20
+ toJSON: state.toJSON.bind(state),
21
+ get storedMarks() {
22
+ return storedMarks
23
+ },
24
+ get selection() {
25
+ return selection
26
+ },
27
+ get doc() {
28
+ return doc
29
+ },
30
+ get tr() {
31
+ selection = transaction.selection
32
+ doc = transaction.doc
33
+ storedMarks = transaction.storedMarks
34
+
35
+ return transaction
36
+ },
37
+ }
38
+ }
@@ -1,13 +1,12 @@
1
- import { Schema, Node as ProseMirrorNode } from 'prosemirror-model'
2
- import { AnyObject } from '../types'
3
- import createNodeFromContent from './createNodeFromContent'
1
+ import { Node as ProseMirrorNode, ParseOptions, Schema } from 'prosemirror-model'
4
2
 
5
- export type Content = string | JSON | null
3
+ import { Content } from '../types'
4
+ import { createNodeFromContent } from './createNodeFromContent'
6
5
 
7
- export default function createDocument(
6
+ export function createDocument(
8
7
  content: Content,
9
8
  schema: Schema,
10
- parseOptions: AnyObject = {},
9
+ parseOptions: ParseOptions = {},
11
10
  ): ProseMirrorNode {
12
11
  return createNodeFromContent(content, schema, { slice: false, parseOptions }) as ProseMirrorNode
13
12
  }
@@ -1,32 +1,36 @@
1
1
  import {
2
- Schema,
3
2
  DOMParser,
4
- Node as ProseMirrorNode,
5
3
  Fragment,
4
+ Node as ProseMirrorNode,
5
+ ParseOptions,
6
+ Schema,
6
7
  } from 'prosemirror-model'
7
- import elementFromString from '../utilities/elementFromString'
8
- import { AnyObject } from '../types'
9
8
 
10
- export type Content = string | JSON | null
9
+ import { Content } from '../types'
10
+ import { elementFromString } from '../utilities/elementFromString'
11
11
 
12
12
  export type CreateNodeFromContentOptions = {
13
13
  slice?: boolean,
14
- parseOptions?: AnyObject,
14
+ parseOptions?: ParseOptions,
15
15
  }
16
16
 
17
- export default function createNodeFromContent(
17
+ export function createNodeFromContent(
18
18
  content: Content,
19
19
  schema: Schema,
20
20
  options?: CreateNodeFromContentOptions,
21
- ): string | ProseMirrorNode | Fragment {
21
+ ): ProseMirrorNode | Fragment {
22
22
  options = {
23
23
  slice: true,
24
24
  parseOptions: {},
25
25
  ...options,
26
26
  }
27
27
 
28
- if (content && typeof content === 'object') {
28
+ if (typeof content === 'object' && content !== null) {
29
29
  try {
30
+ if (Array.isArray(content)) {
31
+ return Fragment.fromArray(content.map(item => schema.nodeFromJSON(item)))
32
+ }
33
+
30
34
  return schema.nodeFromJSON(content)
31
35
  } catch (error) {
32
36
  console.warn(
@@ -42,17 +46,11 @@ export default function createNodeFromContent(
42
46
  }
43
47
 
44
48
  if (typeof content === 'string') {
45
- const isHTML = content.trim().startsWith('<') && content.trim().endsWith('>')
46
-
47
- if (isHTML || !options.slice) {
48
- const parser = DOMParser.fromSchema(schema)
49
-
50
- return options.slice
51
- ? parser.parseSlice(elementFromString(content), options.parseOptions).content
52
- : parser.parse(elementFromString(content), options.parseOptions)
53
- }
49
+ const parser = DOMParser.fromSchema(schema)
54
50
 
55
- return content
51
+ return options.slice
52
+ ? parser.parseSlice(elementFromString(content), options.parseOptions).content
53
+ : parser.parse(elementFromString(content), options.parseOptions)
56
54
  }
57
55
 
58
56
  return createNodeFromContent('', schema, options)
@@ -0,0 +1,13 @@
1
+ import { ContentMatch, NodeType } from 'prosemirror-model'
2
+
3
+ export function defaultBlockAt(match: ContentMatch): NodeType | null {
4
+ for (let i = 0; i < match.edgeCount; i += 1) {
5
+ const { type } = match.edge(i)
6
+
7
+ if (type.isTextblock && !type.hasRequiredAttrs()) {
8
+ return type
9
+ }
10
+ }
11
+
12
+ return null
13
+ }
@@ -0,0 +1,18 @@
1
+ import { Node as ProseMirrorNode } from 'prosemirror-model'
2
+
3
+ import { NodeWithPos, Predicate } from '../types'
4
+
5
+ export function findChildren(node: ProseMirrorNode, predicate: Predicate): NodeWithPos[] {
6
+ const nodesWithPos: NodeWithPos[] = []
7
+
8
+ node.descendants((child, pos) => {
9
+ if (predicate(child)) {
10
+ nodesWithPos.push({
11
+ node: child,
12
+ pos,
13
+ })
14
+ }
15
+ })
16
+
17
+ return nodesWithPos
18
+ }
@@ -0,0 +1,32 @@
1
+ import { Node as ProseMirrorNode } from 'prosemirror-model'
2
+
3
+ import { NodeWithPos, Predicate, Range } from '../types'
4
+
5
+ /**
6
+ * Same as `findChildren` but searches only within a `range`.
7
+ */
8
+ export function findChildrenInRange(node: ProseMirrorNode, range: Range, predicate: Predicate): NodeWithPos[] {
9
+ const nodesWithPos: NodeWithPos[] = []
10
+
11
+ // if (range.from === range.to) {
12
+ // const nodeAt = node.nodeAt(range.from)
13
+
14
+ // if (nodeAt) {
15
+ // nodesWithPos.push({
16
+ // node: nodeAt,
17
+ // pos: range.from,
18
+ // })
19
+ // }
20
+ // }
21
+
22
+ node.nodesBetween(range.from, range.to, (child, pos) => {
23
+ if (predicate(child)) {
24
+ nodesWithPos.push({
25
+ node: child,
26
+ pos,
27
+ })
28
+ }
29
+ })
30
+
31
+ return nodesWithPos
32
+ }
@@ -1,7 +1,8 @@
1
1
  import { Selection } from 'prosemirror-state'
2
- import findParentNodeClosestToPos from './findParentNodeClosestToPos'
2
+
3
3
  import { Predicate } from '../types'
4
+ import { findParentNodeClosestToPos } from './findParentNodeClosestToPos'
4
5
 
5
- export default function findParentNode(predicate: Predicate) {
6
+ export function findParentNode(predicate: Predicate) {
6
7
  return (selection: Selection) => findParentNodeClosestToPos(selection.$from, predicate)
7
8
  }
@@ -1,7 +1,8 @@
1
- import { ResolvedPos, Node as ProseMirrorNode } from 'prosemirror-model'
1
+ import { Node as ProseMirrorNode, ResolvedPos } from 'prosemirror-model'
2
+
2
3
  import { Predicate } from '../types'
3
4
 
4
- export default function findParentNodeClosestToPos($pos: ResolvedPos, predicate: Predicate): ({
5
+ export function findParentNodeClosestToPos($pos: ResolvedPos, predicate: Predicate): ({
5
6
  pos: number,
6
7
  start: number,
7
8
  depth: number,
@@ -1,11 +1,12 @@
1
1
  import { Node } from 'prosemirror-model'
2
- import getSchema from './getSchema'
3
- import getHTMLFromFragment from './getHTMLFromFragment'
4
- import { Extensions } from '../types'
5
2
 
6
- export default function generateHTML(doc: object, extensions: Extensions): string {
3
+ import { Extensions, JSONContent } from '../types'
4
+ import { getHTMLFromFragment } from './getHTMLFromFragment'
5
+ import { getSchema } from './getSchema'
6
+
7
+ export function generateHTML(doc: JSONContent, extensions: Extensions): string {
7
8
  const schema = getSchema(extensions)
8
9
  const contentNode = Node.fromJSON(schema, doc)
9
10
 
10
- return getHTMLFromFragment(contentNode, schema)
11
+ return getHTMLFromFragment(contentNode.content, schema)
11
12
  }
@@ -0,0 +1,14 @@
1
+ import { DOMParser } from 'prosemirror-model'
2
+
3
+ import { Extensions } from '../types'
4
+ import { elementFromString } from '../utilities/elementFromString'
5
+ import { getSchema } from './getSchema'
6
+
7
+ export function generateJSON(html: string, extensions: Extensions): Record<string, any> {
8
+ const schema = getSchema(extensions)
9
+ const dom = elementFromString(html)
10
+
11
+ return DOMParser.fromSchema(schema)
12
+ .parse(dom)
13
+ .toJSON()
14
+ }
@@ -0,0 +1,30 @@
1
+ import { Node } from 'prosemirror-model'
2
+
3
+ import { Extensions, JSONContent, TextSerializer } from '../types'
4
+ import { getSchema } from './getSchema'
5
+ import { getText } from './getText'
6
+ import { getTextSerializersFromSchema } from './getTextSerializersFromSchema'
7
+
8
+ export function generateText(
9
+ doc: JSONContent,
10
+ extensions: Extensions,
11
+ options?: {
12
+ blockSeparator?: string,
13
+ textSerializers?: Record<string, TextSerializer>,
14
+ },
15
+ ): string {
16
+ const {
17
+ blockSeparator = '\n\n',
18
+ textSerializers = {},
19
+ } = options || {}
20
+ const schema = getSchema(extensions)
21
+ const contentNode = Node.fromJSON(schema, doc)
22
+
23
+ return getText(contentNode, {
24
+ blockSeparator,
25
+ textSerializers: {
26
+ ...textSerializers,
27
+ ...getTextSerializersFromSchema(schema),
28
+ },
29
+ })
30
+ }
@@ -0,0 +1,28 @@
1
+ import { MarkType, NodeType } from 'prosemirror-model'
2
+ import { EditorState } from 'prosemirror-state'
3
+
4
+ import { getMarkAttributes } from './getMarkAttributes'
5
+ import { getNodeAttributes } from './getNodeAttributes'
6
+ import { getSchemaTypeNameByName } from './getSchemaTypeNameByName'
7
+
8
+ export function getAttributes(
9
+ state: EditorState,
10
+ typeOrName: string | NodeType | MarkType,
11
+ ): Record<string, any> {
12
+ const schemaType = getSchemaTypeNameByName(
13
+ typeof typeOrName === 'string'
14
+ ? typeOrName
15
+ : typeOrName.name,
16
+ state.schema,
17
+ )
18
+
19
+ if (schemaType === 'node') {
20
+ return getNodeAttributes(state, typeOrName as NodeType)
21
+ }
22
+
23
+ if (schemaType === 'mark') {
24
+ return getMarkAttributes(state, typeOrName as MarkType)
25
+ }
26
+
27
+ return {}
28
+ }