@tiptap/core 2.0.0-beta.2 → 2.0.0-beta.200

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/README.md +2 -2
  2. package/dist/packages/core/src/CommandManager.d.ts +13 -6
  3. package/dist/packages/core/src/Editor.d.ts +27 -25
  4. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  5. package/dist/packages/core/src/Extension.d.ts +103 -26
  6. package/dist/packages/core/src/ExtensionManager.d.ts +8 -12
  7. package/dist/packages/core/src/InputRule.d.ts +42 -0
  8. package/dist/packages/core/src/Mark.d.ts +148 -31
  9. package/dist/packages/core/src/Node.d.ts +162 -33
  10. package/dist/packages/core/src/NodeView.d.ts +27 -0
  11. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  12. package/dist/packages/core/src/Tracker.d.ts +11 -0
  13. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  14. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  15. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  16. package/dist/packages/core/src/commands/command.d.ts +2 -2
  17. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  18. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  19. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  20. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  21. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  22. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  23. package/dist/packages/core/src/commands/extendMarkRange.d.ts +3 -3
  24. package/dist/packages/core/src/commands/first.d.ts +3 -3
  25. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  26. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  27. package/dist/packages/core/src/commands/index.d.ts +50 -0
  28. package/dist/packages/core/src/commands/insertContent.d.ts +16 -0
  29. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  30. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  31. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  33. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
  38. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  39. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  40. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  41. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  42. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  43. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  44. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  45. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  46. package/dist/packages/core/src/commands/setMark.d.ts +3 -3
  47. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  48. package/dist/packages/core/src/commands/setNode.d.ts +3 -3
  49. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  50. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  51. package/dist/packages/core/src/commands/sinkListItem.d.ts +3 -3
  52. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  53. package/dist/packages/core/src/commands/splitListItem.d.ts +3 -3
  54. package/dist/packages/core/src/commands/toggleList.d.ts +3 -3
  55. package/dist/packages/core/src/commands/toggleMark.d.ts +8 -3
  56. package/dist/packages/core/src/commands/toggleNode.d.ts +3 -3
  57. package/dist/packages/core/src/commands/toggleWrap.d.ts +3 -3
  58. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  59. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  60. package/dist/packages/core/src/commands/unsetMark.d.ts +8 -3
  61. package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
  62. package/dist/packages/core/src/commands/wrapIn.d.ts +3 -3
  63. package/dist/packages/core/src/commands/wrapInList.d.ts +3 -3
  64. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  65. package/dist/packages/core/src/extensions/commands.d.ts +2 -91
  66. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  67. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  69. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  70. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  71. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  73. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -0
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +7 -0
  75. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  76. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  77. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  78. package/dist/packages/core/src/helpers/findParentNode.d.ts +2 -3
  79. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +2 -2
  80. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  81. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  82. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  83. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  84. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
  85. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  86. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  87. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  88. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  89. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +2 -3
  90. package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
  91. package/dist/packages/core/src/helpers/getMarkType.d.ts +1 -1
  92. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  93. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +2 -3
  94. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
  96. package/dist/packages/core/src/helpers/getSchema.d.ts +1 -1
  97. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  98. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +1 -1
  99. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +1 -1
  100. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  101. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  102. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  103. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
  104. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  105. package/dist/packages/core/src/helpers/index.d.ts +33 -0
  106. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  107. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  108. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  109. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  110. package/dist/packages/core/src/helpers/isMarkActive.d.ts +2 -3
  111. package/dist/packages/core/src/helpers/isNodeActive.d.ts +2 -3
  112. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -0
  113. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  114. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  115. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  116. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  117. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  118. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  119. package/dist/packages/core/src/index.d.ts +15 -20
  120. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  121. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  122. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  123. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  124. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  125. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  126. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  127. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  128. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  129. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  130. package/dist/packages/core/src/style.d.ts +1 -2
  131. package/dist/packages/core/src/types.d.ts +120 -53
  132. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  133. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  135. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  139. package/dist/packages/core/src/utilities/index.d.ts +3 -0
  140. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  142. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  145. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  146. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  147. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  148. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  149. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  150. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  151. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  152. package/dist/tiptap-core.cjs.js +2896 -1261
  153. package/dist/tiptap-core.cjs.js.map +1 -1
  154. package/dist/tiptap-core.esm.js +2889 -1290
  155. package/dist/tiptap-core.esm.js.map +1 -1
  156. package/dist/tiptap-core.umd.js +2899 -1263
  157. package/dist/tiptap-core.umd.js.map +1 -1
  158. package/package.json +16 -20
  159. package/src/CommandManager.ts +64 -65
  160. package/src/Editor.ts +133 -98
  161. package/src/EventEmitter.ts +14 -4
  162. package/src/Extension.ts +198 -41
  163. package/src/ExtensionManager.ts +263 -78
  164. package/src/InputRule.ts +265 -0
  165. package/src/Mark.ts +285 -49
  166. package/src/Node.ts +284 -56
  167. package/src/NodeView.ts +261 -0
  168. package/src/PasteRule.ts +280 -0
  169. package/src/Tracker.ts +42 -0
  170. package/src/commands/blur.ts +12 -6
  171. package/src/commands/clearContent.ts +3 -3
  172. package/src/commands/clearNodes.ts +32 -18
  173. package/src/commands/command.ts +2 -2
  174. package/src/commands/createParagraphNear.ts +4 -3
  175. package/src/commands/deleteNode.ts +37 -0
  176. package/src/commands/deleteRange.ts +3 -3
  177. package/src/commands/deleteSelection.ts +4 -3
  178. package/src/commands/enter.ts +3 -3
  179. package/src/commands/exitCode.ts +4 -3
  180. package/src/commands/extendMarkRange.ts +12 -11
  181. package/src/commands/first.ts +3 -3
  182. package/src/commands/focus.ts +47 -44
  183. package/src/commands/forEach.ts +24 -0
  184. package/src/commands/index.ts +50 -0
  185. package/src/commands/insertContent.ts +24 -0
  186. package/src/commands/insertContentAt.ts +108 -0
  187. package/src/commands/joinBackward.ts +4 -3
  188. package/src/commands/joinForward.ts +4 -3
  189. package/src/commands/keyboardShortcut.ts +6 -6
  190. package/src/commands/lift.ts +6 -5
  191. package/src/commands/liftEmptyBlock.ts +4 -3
  192. package/src/commands/liftListItem.ts +6 -5
  193. package/src/commands/newlineInCode.ts +4 -3
  194. package/src/commands/resetAttributes.ts +62 -0
  195. package/src/commands/scrollIntoView.ts +3 -3
  196. package/src/commands/selectAll.ts +8 -6
  197. package/src/commands/selectNodeBackward.ts +4 -3
  198. package/src/commands/selectNodeForward.ts +4 -3
  199. package/src/commands/selectParentNode.ts +4 -3
  200. package/src/commands/selectTextblockEnd.ts +20 -0
  201. package/src/commands/selectTextblockStart.ts +20 -0
  202. package/src/commands/setContent.ts +12 -9
  203. package/src/commands/setMark.ts +83 -15
  204. package/src/commands/setMeta.ts +18 -0
  205. package/src/commands/setNode.ts +29 -7
  206. package/src/commands/setNodeSelection.ts +27 -0
  207. package/src/commands/setTextSelection.ts +33 -0
  208. package/src/commands/sinkListItem.ts +6 -5
  209. package/src/commands/splitBlock.ts +20 -23
  210. package/src/commands/splitListItem.ts +45 -18
  211. package/src/commands/toggleList.ts +83 -18
  212. package/src/commands/toggleMark.ts +18 -7
  213. package/src/commands/toggleNode.ts +6 -5
  214. package/src/commands/toggleWrap.ts +9 -9
  215. package/src/commands/undoInputRule.ts +34 -5
  216. package/src/commands/unsetAllMarks.ts +8 -10
  217. package/src/commands/unsetMark.ts +31 -13
  218. package/src/commands/updateAttributes.ts +73 -0
  219. package/src/commands/wrapIn.ts +5 -10
  220. package/src/commands/wrapInList.ts +6 -5
  221. package/src/extensions/clipboardTextSerializer.ts +14 -35
  222. package/src/extensions/commands.ts +3 -135
  223. package/src/extensions/editable.ts +1 -0
  224. package/src/extensions/focusEvents.ts +3 -5
  225. package/src/extensions/index.ts +1 -0
  226. package/src/extensions/keymap.ts +110 -13
  227. package/src/extensions/tabindex.ts +18 -0
  228. package/src/helpers/combineTransactionSteps.ts +18 -0
  229. package/src/helpers/createChainableState.ts +38 -0
  230. package/src/helpers/createDocument.ts +12 -0
  231. package/src/helpers/createNodeFromContent.ts +57 -0
  232. package/src/helpers/defaultBlockAt.ts +13 -0
  233. package/src/helpers/findChildren.ts +18 -0
  234. package/src/helpers/findChildrenInRange.ts +32 -0
  235. package/src/helpers/findParentNode.ts +3 -2
  236. package/src/helpers/findParentNodeClosestToPos.ts +3 -2
  237. package/src/helpers/generateHTML.ts +6 -5
  238. package/src/helpers/generateJSON.ts +14 -0
  239. package/src/helpers/generateText.ts +30 -0
  240. package/src/helpers/getAttributes.ts +28 -0
  241. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  242. package/src/helpers/getChangedRanges.ts +83 -0
  243. package/src/helpers/getDebugJSON.ts +54 -0
  244. package/src/helpers/getExtensionField.ts +25 -0
  245. package/src/helpers/getHTMLFromFragment.ts +6 -5
  246. package/src/helpers/getMarkAttributes.ts +14 -10
  247. package/src/helpers/getMarkRange.ts +41 -8
  248. package/src/helpers/getMarkType.ts +5 -1
  249. package/src/helpers/getMarksBetween.ts +32 -10
  250. package/src/helpers/getNodeAttributes.ts +9 -9
  251. package/src/helpers/getNodeType.ts +5 -1
  252. package/src/helpers/getRenderedAttributes.ts +6 -7
  253. package/src/helpers/getSchema.ts +7 -137
  254. package/src/helpers/getSchemaByResolvedExtensions.ts +148 -0
  255. package/src/helpers/getSchemaTypeByName.ts +2 -10
  256. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  257. package/src/helpers/getSplittedAttributes.ts +4 -4
  258. package/src/helpers/getText.ts +19 -0
  259. package/src/helpers/getTextBetween.ts +49 -0
  260. package/src/helpers/getTextContentFromNodes.ts +21 -0
  261. package/src/helpers/getTextSerializersFromSchema.ts +10 -0
  262. package/src/helpers/index.ts +33 -0
  263. package/src/helpers/injectExtensionAttributesToParseRule.ts +17 -19
  264. package/src/helpers/isActive.ts +5 -5
  265. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  266. package/src/helpers/isList.ts +14 -7
  267. package/src/helpers/isMarkActive.ts +45 -20
  268. package/src/helpers/isNodeActive.ts +28 -35
  269. package/src/helpers/isNodeEmpty.ts +8 -0
  270. package/src/helpers/isNodeSelection.ts +2 -3
  271. package/src/helpers/isTextSelection.ts +2 -3
  272. package/src/helpers/posToDOMRect.ts +35 -0
  273. package/src/helpers/resolveFocusPosition.ts +43 -0
  274. package/src/helpers/selectionToInsertionEnd.ts +2 -2
  275. package/src/helpers/splitExtensions.ts +3 -3
  276. package/src/index.ts +16 -22
  277. package/src/inputRules/index.ts +5 -0
  278. package/src/inputRules/markInputRule.ts +59 -39
  279. package/src/inputRules/nodeInputRule.ts +45 -11
  280. package/src/inputRules/textInputRule.ts +35 -0
  281. package/src/inputRules/textblockTypeInputRule.ts +38 -0
  282. package/src/inputRules/wrappingInputRule.ts +60 -0
  283. package/src/pasteRules/index.ts +3 -0
  284. package/src/pasteRules/markPasteRule.ts +62 -53
  285. package/src/pasteRules/nodePasteRule.ts +39 -0
  286. package/src/pasteRules/textPasteRule.ts +35 -0
  287. package/src/style.ts +16 -3
  288. package/src/types.ts +132 -47
  289. package/src/utilities/callOrReturn.ts +6 -3
  290. package/src/utilities/createStyleTag.ts +12 -1
  291. package/src/utilities/deleteProps.ts +2 -4
  292. package/src/utilities/elementFromString.ts +4 -5
  293. package/src/utilities/escapeForRegEx.ts +4 -0
  294. package/src/utilities/findDuplicates.ts +5 -0
  295. package/src/utilities/fromString.ts +2 -2
  296. package/src/utilities/index.ts +3 -0
  297. package/src/utilities/isEmptyObject.ts +2 -2
  298. package/src/utilities/isFunction.ts +3 -0
  299. package/src/utilities/isMacOS.ts +5 -0
  300. package/src/utilities/isNumber.ts +3 -0
  301. package/src/utilities/isPlainObject.ts +8 -5
  302. package/src/utilities/isRegExp.ts +3 -0
  303. package/src/utilities/isString.ts +3 -0
  304. package/src/utilities/isiOS.ts +12 -0
  305. package/src/utilities/mergeAttributes.ts +2 -3
  306. package/src/utilities/mergeDeep.ts +2 -3
  307. package/src/utilities/minMax.ts +1 -1
  308. package/src/utilities/objectIncludes.ts +17 -5
  309. package/src/utilities/removeDuplicates.ts +15 -0
  310. package/CHANGELOG.md +0 -198
  311. package/LICENSE.md +0 -21
  312. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  313. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  314. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  315. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  316. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  317. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  318. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  319. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  320. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  321. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  322. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  323. package/src/commands/insertHTML.ts +0 -28
  324. package/src/commands/insertText.ts +0 -20
  325. package/src/commands/replace.ts +0 -20
  326. package/src/commands/replaceRange.ts +0 -36
  327. package/src/commands/resetNodeAttributes.ts +0 -29
  328. package/src/commands/updateNodeAttributes.ts +0 -31
  329. package/src/utilities/isClass.ts +0 -7
  330. package/src/utilities/isObject.ts +0 -10
  331. package/src/utilities/removeElement.ts +0 -5
@@ -1,40 +1,11 @@
1
- import { Editor } from '@tiptap/core'
2
1
  import { Plugin, PluginKey } from 'prosemirror-state'
3
- 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
2
 
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 { Extension } from '../Extension'
4
+ import { getTextBetween } from '../helpers/getTextBetween'
5
+ import { getTextSerializersFromSchema } from '../helpers/getTextSerializersFromSchema'
35
6
 
36
7
  export const ClipboardTextSerializer = Extension.create({
37
- name: 'editable',
8
+ name: 'clipboardTextSerializer',
38
9
 
39
10
  addProseMirrorPlugins() {
40
11
  return [
@@ -43,9 +14,17 @@ export const ClipboardTextSerializer = Extension.create({
43
14
  props: {
44
15
  clipboardTextSerializer: () => {
45
16
  const { editor } = this
46
- const { from, to } = editor.state.selection
17
+ const { state, schema } = editor
18
+ const { doc, selection } = state
19
+ const { ranges } = selection
20
+ const from = Math.min(...ranges.map(range => range.$from.pos))
21
+ const to = Math.max(...ranges.map(range => range.$to.pos))
22
+ const textSerializers = getTextSerializersFromSchema(schema)
23
+ const range = { from, to }
47
24
 
48
- return textBetween(editor, from, to, '\n')
25
+ return getTextBetween(doc, range, {
26
+ textSerializers,
27
+ })
49
28
  },
50
29
  },
51
30
  }),
@@ -1,146 +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 insertHTML from '../commands/insertHTML'
15
- import * as insertText from '../commands/insertText'
16
- import * as joinBackward from '../commands/joinBackward'
17
- import * as joinForward from '../commands/joinForward'
18
- import * as keyboardShortcut from '../commands/keyboardShortcut'
19
- import * as lift from '../commands/lift'
20
- import * as liftEmptyBlock from '../commands/liftEmptyBlock'
21
- import * as liftListItem from '../commands/liftListItem'
22
- import * as newlineInCode from '../commands/newlineInCode'
23
- import * as replace from '../commands/replace'
24
- import * as replaceRange from '../commands/replaceRange'
25
- import * as resetNodeAttributes from '../commands/resetNodeAttributes'
26
- import * as scrollIntoView from '../commands/scrollIntoView'
27
- import * as selectAll from '../commands/selectAll'
28
- import * as selectNodeBackward from '../commands/selectNodeBackward'
29
- import * as selectNodeForward from '../commands/selectNodeForward'
30
- import * as selectParentNode from '../commands/selectParentNode'
31
- import * as setContent from '../commands/setContent'
32
- import * as setMark from '../commands/setMark'
33
- import * as setNode from '../commands/setNode'
34
- import * as sinkListItem from '../commands/sinkListItem'
35
- import * as splitBlock from '../commands/splitBlock'
36
- import * as splitListItem from '../commands/splitListItem'
37
- import * as toggleList from '../commands/toggleList'
38
- import * as toggleMark from '../commands/toggleMark'
39
- import * as toggleNode from '../commands/toggleNode'
40
- import * as toggleWrap from '../commands/toggleWrap'
41
- import * as undoInputRule from '../commands/undoInputRule'
42
- import * as unsetAllMarks from '../commands/unsetAllMarks'
43
- import * as unsetMark from '../commands/unsetMark'
44
- import * as updateNodeAttributes from '../commands/updateNodeAttributes'
45
- import * as wrapIn from '../commands/wrapIn'
46
- import * as wrapInList from '../commands/wrapInList'
47
3
 
48
- export { blur }
49
- export { clearContent }
50
- export { clearNodes }
51
- export { command }
52
- export { createParagraphNear }
53
- export { deleteRange }
54
- export { deleteSelection }
55
- export { enter }
56
- export { exitCode }
57
- export { extendMarkRange }
58
- export { first }
59
- export { focus }
60
- export { insertHTML }
61
- export { insertText }
62
- export { joinBackward }
63
- export { joinForward }
64
- export { keyboardShortcut }
65
- export { lift }
66
- export { liftEmptyBlock }
67
- export { liftListItem }
68
- export { newlineInCode }
69
- export { replace }
70
- export { replaceRange }
71
- export { resetNodeAttributes }
72
- export { scrollIntoView }
73
- export { selectAll }
74
- export { selectNodeBackward }
75
- export { selectNodeForward }
76
- export { selectParentNode }
77
- export { setContent }
78
- export { setMark }
79
- export { setNode }
80
- export { sinkListItem }
81
- export { splitBlock }
82
- export { splitListItem }
83
- export { toggleList }
84
- export { toggleMark }
85
- export { toggleNode }
86
- export { toggleWrap }
87
- export { undoInputRule }
88
- export { unsetAllMarks }
89
- export { unsetMark }
90
- export { updateNodeAttributes }
91
- export { wrapIn }
92
- export { wrapInList }
4
+ export * from '../commands'
93
5
 
94
6
  export const Commands = Extension.create({
95
7
  name: 'commands',
96
8
 
97
9
  addCommands() {
98
10
  return {
99
- ...blur,
100
- ...clearContent,
101
- ...clearNodes,
102
- ...command,
103
- ...createParagraphNear,
104
- ...deleteRange,
105
- ...deleteSelection,
106
- ...enter,
107
- ...exitCode,
108
- ...extendMarkRange,
109
- ...first,
110
- ...focus,
111
- ...insertHTML,
112
- ...insertText,
113
- ...joinBackward,
114
- ...joinForward,
115
- ...keyboardShortcut,
116
- ...lift,
117
- ...liftEmptyBlock,
118
- ...liftListItem,
119
- ...newlineInCode,
120
- ...replace,
121
- ...replaceRange,
122
- ...resetNodeAttributes,
123
- ...scrollIntoView,
124
- ...selectAll,
125
- ...selectNodeBackward,
126
- ...selectNodeForward,
127
- ...selectParentNode,
128
- ...setContent,
129
- ...setMark,
130
- ...setNode,
131
- ...sinkListItem,
132
- ...splitBlock,
133
- ...splitListItem,
134
- ...toggleList,
135
- ...toggleMark,
136
- ...toggleNode,
137
- ...toggleWrap,
138
- ...undoInputRule,
139
- ...unsetAllMarks,
140
- ...unsetMark,
141
- ...updateNodeAttributes,
142
- ...wrapIn,
143
- ...wrapInList,
11
+ ...commands,
144
12
  }
145
13
  },
146
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,11 +12,8 @@ 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
- focus: (view, event) => {
16
+ focus: (view, event: Event) => {
19
17
  editor.isFocused = true
20
18
 
21
19
  const transaction = editor.state.tr
@@ -26,7 +24,7 @@ export const FocusEvents = Extension.create({
26
24
 
27
25
  return false
28
26
  },
29
- blur: (view, event) => {
27
+ blur: (view, event: Event) => {
30
28
  editor.isFocused = false
31
29
 
32
30
  const transaction = editor.state.tr
@@ -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
+ }
@@ -0,0 +1,12 @@
1
+ import { Node as ProseMirrorNode, ParseOptions, Schema } from 'prosemirror-model'
2
+
3
+ import { Content } from '../types'
4
+ import { createNodeFromContent } from './createNodeFromContent'
5
+
6
+ export function createDocument(
7
+ content: Content,
8
+ schema: Schema,
9
+ parseOptions: ParseOptions = {},
10
+ ): ProseMirrorNode {
11
+ return createNodeFromContent(content, schema, { slice: false, parseOptions }) as ProseMirrorNode
12
+ }
@@ -0,0 +1,57 @@
1
+ import {
2
+ DOMParser,
3
+ Fragment,
4
+ Node as ProseMirrorNode,
5
+ ParseOptions,
6
+ Schema,
7
+ } from 'prosemirror-model'
8
+
9
+ import { Content } from '../types'
10
+ import { elementFromString } from '../utilities/elementFromString'
11
+
12
+ export type CreateNodeFromContentOptions = {
13
+ slice?: boolean,
14
+ parseOptions?: ParseOptions,
15
+ }
16
+
17
+ export function createNodeFromContent(
18
+ content: Content,
19
+ schema: Schema,
20
+ options?: CreateNodeFromContentOptions,
21
+ ): ProseMirrorNode | Fragment {
22
+ options = {
23
+ slice: true,
24
+ parseOptions: {},
25
+ ...options,
26
+ }
27
+
28
+ if (typeof content === 'object' && content !== null) {
29
+ try {
30
+ if (Array.isArray(content)) {
31
+ return Fragment.fromArray(content.map(item => schema.nodeFromJSON(item)))
32
+ }
33
+
34
+ return schema.nodeFromJSON(content)
35
+ } catch (error) {
36
+ console.warn(
37
+ '[tiptap warn]: Invalid content.',
38
+ 'Passed value:',
39
+ content,
40
+ 'Error:',
41
+ error,
42
+ )
43
+
44
+ return createNodeFromContent('', schema, options)
45
+ }
46
+ }
47
+
48
+ if (typeof content === 'string') {
49
+ const parser = DOMParser.fromSchema(schema)
50
+
51
+ return options.slice
52
+ ? parser.parseSlice(elementFromString(content), options.parseOptions).content
53
+ : parser.parse(elementFromString(content), options.parseOptions)
54
+ }
55
+
56
+ return createNodeFromContent('', schema, options)
57
+ }
@@ -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
+ }