@tiptap/core 2.0.0-beta.22 → 2.0.0-beta.220

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 (344) hide show
  1. package/README.md +2 -2
  2. package/dist/index.cjs +4354 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.js +4264 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.umd.js +4352 -0
  7. package/dist/index.umd.js.map +1 -0
  8. package/dist/packages/core/src/CommandManager.d.ts +14 -7
  9. package/dist/packages/core/src/Editor.d.ts +27 -22
  10. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  11. package/dist/packages/core/src/Extension.d.ts +93 -21
  12. package/dist/packages/core/src/ExtensionManager.d.ts +8 -14
  13. package/dist/packages/core/src/InputRule.d.ts +42 -0
  14. package/dist/packages/core/src/Mark.d.ts +132 -24
  15. package/dist/packages/core/src/Node.d.ts +150 -26
  16. package/dist/packages/core/src/NodeView.d.ts +11 -15
  17. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  18. package/dist/packages/core/src/Tracker.d.ts +11 -0
  19. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  20. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  21. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  22. package/dist/packages/core/src/commands/command.d.ts +2 -2
  23. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  24. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +12 -0
  25. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  26. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  27. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  28. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  29. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  30. package/dist/packages/core/src/commands/extendMarkRange.d.ts +4 -4
  31. package/dist/packages/core/src/commands/first.d.ts +3 -3
  32. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  33. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  34. package/dist/packages/core/src/commands/index.d.ts +50 -0
  35. package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
  36. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  37. package/dist/packages/core/src/commands/join.d.ts +33 -0
  38. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  39. package/dist/packages/core/src/commands/lift.d.ts +4 -4
  40. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  41. package/dist/packages/core/src/commands/liftListItem.d.ts +4 -4
  42. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  43. package/dist/packages/core/src/commands/resetAttributes.d.ts +4 -4
  44. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  45. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  46. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  47. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  48. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  49. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  50. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  51. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  52. package/dist/packages/core/src/commands/setMark.d.ts +4 -4
  53. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  54. package/dist/packages/core/src/commands/setNode.d.ts +4 -4
  55. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  56. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  57. package/dist/packages/core/src/commands/sinkListItem.d.ts +4 -4
  58. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  59. package/dist/packages/core/src/commands/splitListItem.d.ts +4 -4
  60. package/dist/packages/core/src/commands/toggleList.d.ts +4 -4
  61. package/dist/packages/core/src/commands/toggleMark.d.ts +9 -4
  62. package/dist/packages/core/src/commands/toggleNode.d.ts +4 -4
  63. package/dist/packages/core/src/commands/toggleWrap.d.ts +4 -4
  64. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  65. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  66. package/dist/packages/core/src/commands/unsetMark.d.ts +9 -4
  67. package/dist/packages/core/src/commands/updateAttributes.d.ts +4 -4
  68. package/dist/packages/core/src/commands/wrapIn.d.ts +4 -4
  69. package/dist/packages/core/src/commands/wrapInList.d.ts +4 -4
  70. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  71. package/dist/packages/core/src/extensions/commands.d.ts +2 -99
  72. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  73. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  74. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  75. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  76. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  77. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  78. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  79. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  80. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  81. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  82. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -8
  83. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  84. package/dist/packages/core/src/helpers/findParentNode.d.ts +3 -4
  85. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +3 -3
  86. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  87. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  88. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  89. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  90. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
  91. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  92. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  93. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  94. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  95. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +3 -4
  96. package/dist/packages/core/src/helpers/getMarkRange.d.ts +2 -2
  97. package/dist/packages/core/src/helpers/getMarkType.d.ts +2 -2
  98. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  99. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +3 -4
  100. package/dist/packages/core/src/helpers/getNodeType.d.ts +2 -2
  101. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
  102. package/dist/packages/core/src/helpers/getSchema.d.ts +2 -2
  103. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  104. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +2 -2
  105. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +2 -2
  106. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  107. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  108. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  109. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
  110. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  111. package/dist/packages/core/src/helpers/index.d.ts +47 -0
  112. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +2 -2
  113. package/dist/packages/core/src/helpers/isActive.d.ts +2 -3
  114. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  115. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  116. package/dist/packages/core/src/helpers/isMarkActive.d.ts +3 -4
  117. package/dist/packages/core/src/helpers/isNodeActive.d.ts +3 -4
  118. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -2
  119. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +2 -2
  120. package/dist/packages/core/src/helpers/isTextSelection.d.ts +2 -2
  121. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  122. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  123. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +2 -2
  124. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  125. package/dist/packages/core/src/index.d.ts +14 -23
  126. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  127. package/dist/packages/core/src/inputRules/markInputRule.d.ts +12 -3
  128. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +12 -3
  129. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  130. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  131. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +27 -0
  132. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  133. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +12 -3
  134. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  135. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  136. package/dist/packages/core/src/style.d.ts +1 -2
  137. package/dist/packages/core/src/types.d.ts +122 -62
  138. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  139. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  140. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  141. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  142. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  145. package/dist/packages/core/src/utilities/index.d.ts +20 -0
  146. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  147. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  148. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  149. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  150. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  151. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  152. package/dist/packages/core/src/utilities/isString.d.ts +1 -0
  153. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  154. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  155. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  156. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  157. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  158. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  159. package/package.json +29 -24
  160. package/src/CommandManager.ts +76 -86
  161. package/src/Editor.ts +121 -79
  162. package/src/EventEmitter.ts +14 -4
  163. package/src/Extension.ts +276 -112
  164. package/src/ExtensionManager.ts +252 -110
  165. package/src/InputRule.ts +260 -0
  166. package/src/Mark.ts +394 -152
  167. package/src/Node.ts +433 -176
  168. package/src/NodeView.ts +144 -67
  169. package/src/PasteRule.ts +240 -0
  170. package/src/Tracker.ts +38 -0
  171. package/src/commands/blur.ts +12 -6
  172. package/src/commands/clearContent.ts +3 -3
  173. package/src/commands/clearNodes.ts +31 -19
  174. package/src/commands/command.ts +2 -2
  175. package/src/commands/createParagraphNear.ts +5 -4
  176. package/src/commands/deleteCurrentNode.ts +41 -0
  177. package/src/commands/deleteNode.ts +37 -0
  178. package/src/commands/deleteRange.ts +3 -3
  179. package/src/commands/deleteSelection.ts +5 -4
  180. package/src/commands/enter.ts +3 -3
  181. package/src/commands/exitCode.ts +5 -4
  182. package/src/commands/extendMarkRange.ts +16 -12
  183. package/src/commands/first.ts +3 -3
  184. package/src/commands/focus.ts +47 -44
  185. package/src/commands/forEach.ts +24 -0
  186. package/src/commands/index.ts +50 -0
  187. package/src/commands/insertContent.ts +17 -24
  188. package/src/commands/insertContentAt.ts +102 -0
  189. package/src/commands/join.ts +53 -0
  190. package/src/commands/keyboardShortcut.ts +6 -6
  191. package/src/commands/lift.ts +8 -7
  192. package/src/commands/liftEmptyBlock.ts +5 -4
  193. package/src/commands/liftListItem.ts +7 -6
  194. package/src/commands/newlineInCode.ts +5 -4
  195. package/src/commands/resetAttributes.ts +18 -12
  196. package/src/commands/scrollIntoView.ts +3 -3
  197. package/src/commands/selectAll.ts +8 -6
  198. package/src/commands/selectNodeBackward.ts +5 -4
  199. package/src/commands/selectNodeForward.ts +5 -4
  200. package/src/commands/selectParentNode.ts +5 -4
  201. package/src/commands/selectTextblockEnd.ts +20 -0
  202. package/src/commands/selectTextblockStart.ts +20 -0
  203. package/src/commands/setContent.ts +9 -16
  204. package/src/commands/setMark.ts +90 -14
  205. package/src/commands/setMeta.ts +18 -0
  206. package/src/commands/setNode.ts +32 -8
  207. package/src/commands/setNodeSelection.ts +27 -0
  208. package/src/commands/setTextSelection.ts +31 -0
  209. package/src/commands/sinkListItem.ts +7 -6
  210. package/src/commands/splitBlock.ts +31 -41
  211. package/src/commands/splitListItem.ts +58 -29
  212. package/src/commands/toggleList.ts +109 -20
  213. package/src/commands/toggleMark.ts +19 -8
  214. package/src/commands/toggleNode.ts +11 -6
  215. package/src/commands/toggleWrap.ts +10 -10
  216. package/src/commands/undoInputRule.ts +34 -5
  217. package/src/commands/unsetAllMarks.ts +7 -11
  218. package/src/commands/unsetMark.ts +36 -23
  219. package/src/commands/updateAttributes.ts +27 -15
  220. package/src/commands/wrapIn.ts +7 -12
  221. package/src/commands/wrapInList.ts +7 -6
  222. package/src/extensions/clipboardTextSerializer.ts +15 -36
  223. package/src/extensions/commands.ts +3 -147
  224. package/src/extensions/editable.ts +2 -1
  225. package/src/extensions/focusEvents.ts +4 -6
  226. package/src/extensions/index.ts +1 -0
  227. package/src/extensions/keymap.ts +106 -13
  228. package/src/extensions/tabindex.ts +18 -0
  229. package/src/helpers/combineTransactionSteps.ts +21 -0
  230. package/src/helpers/createChainableState.ts +38 -0
  231. package/src/helpers/createDocument.ts +5 -6
  232. package/src/helpers/createNodeFromContent.ts +20 -28
  233. package/src/helpers/defaultBlockAt.ts +13 -0
  234. package/src/helpers/findChildren.ts +3 -7
  235. package/src/helpers/findChildrenInRange.ts +36 -0
  236. package/src/helpers/findParentNode.ts +4 -3
  237. package/src/helpers/findParentNodeClosestToPos.ts +13 -7
  238. package/src/helpers/generateHTML.ts +7 -6
  239. package/src/helpers/generateJSON.ts +12 -0
  240. package/src/helpers/generateText.ts +27 -0
  241. package/src/helpers/getAttributes.ts +26 -0
  242. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  243. package/src/helpers/getChangedRanges.ts +83 -0
  244. package/src/helpers/getDebugJSON.ts +54 -0
  245. package/src/helpers/getExtensionField.ts +25 -0
  246. package/src/helpers/getHTMLFromFragment.ts +5 -6
  247. package/src/helpers/getMarkAttributes.ts +18 -11
  248. package/src/helpers/getMarkRange.ts +41 -8
  249. package/src/helpers/getMarkType.ts +8 -2
  250. package/src/helpers/getMarksBetween.ts +34 -10
  251. package/src/helpers/getNodeAttributes.ts +14 -13
  252. package/src/helpers/getNodeType.ts +8 -2
  253. package/src/helpers/getRenderedAttributes.ts +9 -7
  254. package/src/helpers/getSchema.ts +7 -133
  255. package/src/helpers/getSchemaByResolvedExtensions.ts +192 -0
  256. package/src/helpers/getSchemaTypeByName.ts +3 -11
  257. package/src/helpers/getSchemaTypeNameByName.ts +2 -2
  258. package/src/helpers/getSplittedAttributes.ts +4 -4
  259. package/src/helpers/getText.ts +19 -0
  260. package/src/helpers/getTextBetween.ts +46 -0
  261. package/src/helpers/getTextContentFromNodes.ts +26 -0
  262. package/src/helpers/getTextSerializersFromSchema.ts +11 -0
  263. package/src/helpers/index.ts +47 -0
  264. package/src/helpers/injectExtensionAttributesToParseRule.ts +22 -23
  265. package/src/helpers/isActive.ts +10 -6
  266. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  267. package/src/helpers/isList.ts +14 -7
  268. package/src/helpers/isMarkActive.ts +49 -27
  269. package/src/helpers/isNodeActive.ts +29 -39
  270. package/src/helpers/isNodeEmpty.ts +2 -2
  271. package/src/helpers/isNodeSelection.ts +3 -4
  272. package/src/helpers/isTextSelection.ts +3 -4
  273. package/src/helpers/posToDOMRect.ts +35 -0
  274. package/src/helpers/resolveFocusPosition.ts +42 -0
  275. package/src/helpers/selectionToInsertionEnd.ts +3 -3
  276. package/src/helpers/splitExtensions.ts +3 -3
  277. package/src/index.ts +15 -26
  278. package/src/inputRules/index.ts +5 -0
  279. package/src/inputRules/markInputRule.ts +59 -40
  280. package/src/inputRules/nodeInputRule.ts +45 -12
  281. package/src/inputRules/textInputRule.ts +35 -0
  282. package/src/inputRules/textblockTypeInputRule.ts +37 -0
  283. package/src/inputRules/wrappingInputRule.ts +84 -0
  284. package/src/pasteRules/index.ts +3 -0
  285. package/src/pasteRules/markPasteRule.ts +61 -53
  286. package/src/pasteRules/nodePasteRule.ts +37 -0
  287. package/src/pasteRules/textPasteRule.ts +35 -0
  288. package/src/style.ts +16 -3
  289. package/src/types.ts +175 -97
  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 +20 -0
  298. package/src/utilities/isEmptyObject.ts +2 -2
  299. package/src/utilities/isFunction.ts +3 -0
  300. package/src/utilities/isMacOS.ts +5 -0
  301. package/src/utilities/isNumber.ts +3 -0
  302. package/src/utilities/isPlainObject.ts +8 -5
  303. package/src/utilities/isRegExp.ts +3 -0
  304. package/src/utilities/isString.ts +3 -0
  305. package/src/utilities/isiOS.ts +12 -0
  306. package/src/utilities/mergeAttributes.ts +2 -3
  307. package/src/utilities/mergeDeep.ts +2 -3
  308. package/src/utilities/minMax.ts +1 -1
  309. package/src/utilities/objectIncludes.ts +17 -5
  310. package/src/utilities/removeDuplicates.ts +15 -0
  311. package/CHANGELOG.md +0 -373
  312. package/LICENSE.md +0 -21
  313. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  314. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  315. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  316. package/dist/packages/core/src/commands/joinBackward.d.ts +0 -12
  317. package/dist/packages/core/src/commands/joinForward.d.ts +0 -12
  318. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  319. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  320. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  321. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  322. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  323. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  324. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  325. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  326. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  327. package/dist/tiptap-core.cjs.js +0 -3048
  328. package/dist/tiptap-core.cjs.js.map +0 -1
  329. package/dist/tiptap-core.esm.js +0 -3021
  330. package/dist/tiptap-core.esm.js.map +0 -1
  331. package/dist/tiptap-core.umd.js +0 -3045
  332. package/dist/tiptap-core.umd.js.map +0 -1
  333. package/src/commands/insertHTML.ts +0 -30
  334. package/src/commands/insertNode.ts +0 -33
  335. package/src/commands/insertText.ts +0 -22
  336. package/src/commands/joinBackward.ts +0 -17
  337. package/src/commands/joinForward.ts +0 -17
  338. package/src/commands/replace.ts +0 -20
  339. package/src/commands/replaceRange.ts +0 -36
  340. package/src/commands/resetNodeAttributes.ts +0 -33
  341. package/src/commands/updateNodeAttributes.ts +0 -35
  342. package/src/utilities/isClass.ts +0 -7
  343. package/src/utilities/isObject.ts +0 -10
  344. package/src/utilities/removeElement.ts +0 -5
package/src/Editor.ts CHANGED
@@ -1,28 +1,33 @@
1
+ import { MarkType, NodeType, Schema } from '@tiptap/pm/model'
1
2
  import {
2
3
  EditorState, Plugin, PluginKey, Transaction,
3
- } from 'prosemirror-state'
4
- import { EditorView } from 'prosemirror-view'
5
- import { Schema } from 'prosemirror-model'
6
- import getNodeAttributes from './helpers/getNodeAttributes'
7
- import getMarkAttributes from './helpers/getMarkAttributes'
8
- import isActive from './helpers/isActive'
9
- import removeElement from './utilities/removeElement'
10
- import createDocument from './helpers/createDocument'
11
- import getHTMLFromFragment from './helpers/getHTMLFromFragment'
12
- import isNodeEmpty from './helpers/isNodeEmpty'
13
- import createStyleTag from './utilities/createStyleTag'
14
- import CommandManager from './CommandManager'
15
- import ExtensionManager from './ExtensionManager'
16
- import EventEmitter from './EventEmitter'
4
+ } from '@tiptap/pm/state'
5
+ import { EditorView } from '@tiptap/pm/view'
6
+
7
+ import { CommandManager } from './CommandManager'
8
+ import { EventEmitter } from './EventEmitter'
9
+ import { ExtensionManager } from './ExtensionManager'
10
+ import * as extensions from './extensions'
11
+ import { createDocument } from './helpers/createDocument'
12
+ import { getAttributes } from './helpers/getAttributes'
13
+ import { getHTMLFromFragment } from './helpers/getHTMLFromFragment'
14
+ import { getText } from './helpers/getText'
15
+ import { getTextSerializersFromSchema } from './helpers/getTextSerializersFromSchema'
16
+ import { isActive } from './helpers/isActive'
17
+ import { isNodeEmpty } from './helpers/isNodeEmpty'
18
+ import { resolveFocusPosition } from './helpers/resolveFocusPosition'
19
+ import { style } from './style'
17
20
  import {
18
- EditorOptions,
19
21
  CanCommands,
20
22
  ChainedCommands,
23
+ EditorEvents,
24
+ EditorOptions,
25
+ JSONContent,
21
26
  SingleCommands,
22
- AnyObject,
27
+ TextSerializer,
23
28
  } from './types'
24
- import * as extensions from './extensions'
25
- import style from './style'
29
+ import { createStyleTag } from './utilities/createStyleTag'
30
+ import { isFunction } from './utilities/isFunction'
26
31
 
27
32
  export { extensions }
28
33
 
@@ -30,8 +35,7 @@ export interface HTMLElement {
30
35
  editor?: Editor
31
36
  }
32
37
 
33
- export class Editor extends EventEmitter {
34
-
38
+ export class Editor extends EventEmitter<EditorEvents> {
35
39
  private commandManager!: CommandManager
36
40
 
37
41
  public extensionManager!: ExtensionManager
@@ -44,12 +48,13 @@ export class Editor extends EventEmitter {
44
48
 
45
49
  public isFocused = false
46
50
 
47
- private resizeObserver!: ResizeObserver
51
+ public extensionStorage: Record<string, any> = {}
48
52
 
49
53
  public options: EditorOptions = {
50
54
  element: document.createElement('div'),
51
55
  content: '',
52
56
  injectCSS: true,
57
+ injectNonce: undefined,
53
58
  extensions: [],
54
59
  autofocus: false,
55
60
  editable: true,
@@ -57,6 +62,7 @@ export class Editor extends EventEmitter {
57
62
  parseOptions: {},
58
63
  enableInputRules: true,
59
64
  enablePasteRules: true,
65
+ enableCoreExtensions: true,
60
66
  onBeforeCreate: () => null,
61
67
  onCreate: () => null,
62
68
  onUpdate: () => null,
@@ -64,7 +70,6 @@ export class Editor extends EventEmitter {
64
70
  onTransaction: () => null,
65
71
  onFocus: () => null,
66
72
  onBlur: () => null,
67
- onResize: () => null,
68
73
  onDestroy: () => null,
69
74
  }
70
75
 
@@ -74,7 +79,7 @@ export class Editor extends EventEmitter {
74
79
  this.createExtensionManager()
75
80
  this.createCommandManager()
76
81
  this.createSchema()
77
- this.on('beforeCreate', this.options.onCreate)
82
+ this.on('beforeCreate', this.options.onBeforeCreate)
78
83
  this.emit('beforeCreate', { editor: this })
79
84
  this.createView()
80
85
  this.injectCSS()
@@ -87,38 +92,41 @@ export class Editor extends EventEmitter {
87
92
  this.on('destroy', this.options.onDestroy)
88
93
 
89
94
  window.setTimeout(() => {
95
+ if (this.isDestroyed) {
96
+ return
97
+ }
98
+
90
99
  this.commands.focus(this.options.autofocus)
91
100
  this.emit('create', { editor: this })
92
-
93
- if (window.ResizeObserver) {
94
- this.resizeObserver = new ResizeObserver(() => {
95
- this.emit('resize', { editor: this })
96
- })
97
- this.resizeObserver.observe(this.view.dom)
98
- }
99
101
  }, 0)
102
+ }
100
103
 
104
+ /**
105
+ * Returns the editor storage.
106
+ */
107
+ public get storage(): Record<string, any> {
108
+ return this.extensionStorage
101
109
  }
102
110
 
103
111
  /**
104
112
  * An object of all registered commands.
105
113
  */
106
114
  public get commands(): SingleCommands {
107
- return this.commandManager.createCommands()
115
+ return this.commandManager.commands
108
116
  }
109
117
 
110
118
  /**
111
119
  * Create a command chain to call multiple commands at once.
112
120
  */
113
121
  public chain(): ChainedCommands {
114
- return this.commandManager.createChain()
122
+ return this.commandManager.chain()
115
123
  }
116
124
 
117
125
  /**
118
126
  * Check if a command or a command chain can be executed. Without executing it.
119
127
  */
120
128
  public can(): CanCommands {
121
- return this.commandManager.createCan()
129
+ return this.commandManager.can()
122
130
  }
123
131
 
124
132
  /**
@@ -126,7 +134,7 @@ export class Editor extends EventEmitter {
126
134
  */
127
135
  private injectCSS(): void {
128
136
  if (this.options.injectCSS && document) {
129
- this.css = createStyleTag(style)
137
+ this.css = createStyleTag(style, this.options.injectNonce)
130
138
  }
131
139
  }
132
140
 
@@ -136,17 +144,30 @@ export class Editor extends EventEmitter {
136
144
  * @param options A list of options
137
145
  */
138
146
  public setOptions(options: Partial<EditorOptions> = {}): void {
139
- this.options = { ...this.options, ...options }
147
+ this.options = {
148
+ ...this.options,
149
+ ...options,
150
+ }
151
+
152
+ if (!this.view || !this.state || this.isDestroyed) {
153
+ return
154
+ }
155
+
156
+ if (this.options.editorProps) {
157
+ this.view.setProps(this.options.editorProps)
158
+ }
159
+
160
+ this.view.updateState(this.state)
140
161
  }
141
162
 
142
163
  /**
143
164
  * Update editable state of the editor.
144
165
  */
145
- public setEditable(editable: boolean): void {
166
+ public setEditable(editable: boolean, emitUpdate = true): void {
146
167
  this.setOptions({ editable })
147
168
 
148
- if (this.view && this.state && !this.isDestroyed) {
149
- this.view.updateState(this.state)
169
+ if (emitUpdate) {
170
+ this.emit('update', { editor: this, transaction: this.state.tr })
150
171
  }
151
172
  }
152
173
 
@@ -154,7 +175,10 @@ export class Editor extends EventEmitter {
154
175
  * Returns whether the editor is editable.
155
176
  */
156
177
  public get isEditable(): boolean {
157
- return this.view && this.view.editable
178
+ // since plugins are applied after creating the view
179
+ // `editable` is always `true` for one tick.
180
+ // that’s why we also have to check for `options.editable`
181
+ return this.options.editable && this.view && this.view.editable
158
182
  }
159
183
 
160
184
  /**
@@ -170,9 +194,12 @@ export class Editor extends EventEmitter {
170
194
  * @param plugin A ProseMirror plugin
171
195
  * @param handlePlugins Control how to merge the plugin into the existing plugins.
172
196
  */
173
- public registerPlugin(plugin: Plugin, handlePlugins?: (newPlugin: Plugin, plugins: Plugin[]) => Plugin[]): void {
174
- const plugins = typeof handlePlugins === 'function'
175
- ? handlePlugins(plugin, this.state.plugins)
197
+ public registerPlugin(
198
+ plugin: Plugin,
199
+ handlePlugins?: (newPlugin: Plugin, plugins: Plugin[]) => Plugin[],
200
+ ): void {
201
+ const plugins = isFunction(handlePlugins)
202
+ ? handlePlugins(plugin, [...this.state.plugins])
176
203
  : [...this.state.plugins, plugin]
177
204
 
178
205
  const state = this.state.reconfigure({ plugins })
@@ -183,17 +210,15 @@ export class Editor extends EventEmitter {
183
210
  /**
184
211
  * Unregister a ProseMirror plugin.
185
212
  *
186
- * @param name The plugins name
213
+ * @param nameOrPluginKey The plugins name
187
214
  */
188
215
  public unregisterPlugin(nameOrPluginKey: string | PluginKey): void {
189
216
  if (this.isDestroyed) {
190
217
  return
191
218
  }
192
219
 
193
- const name = typeof nameOrPluginKey === 'string'
194
- ? `${nameOrPluginKey}$`
195
- // @ts-ignore
196
- : nameOrPluginKey.key
220
+ // @ts-ignore
221
+ const name = typeof nameOrPluginKey === 'string' ? `${nameOrPluginKey}$` : nameOrPluginKey.key
197
222
 
198
223
  const state = this.state.reconfigure({
199
224
  // @ts-ignore
@@ -207,7 +232,7 @@ export class Editor extends EventEmitter {
207
232
  * Creates an extension manager.
208
233
  */
209
234
  private createExtensionManager(): void {
210
- const coreExtensions = Object.entries(extensions).map(([, extension]) => extension)
235
+ const coreExtensions = this.options.enableCoreExtensions ? Object.values(extensions) : []
211
236
  const allExtensions = [...coreExtensions, ...this.options.extensions].filter(extension => {
212
237
  return ['extension', 'node', 'mark'].includes(extension?.type)
213
238
  })
@@ -219,7 +244,9 @@ export class Editor extends EventEmitter {
219
244
  * Creates an command manager.
220
245
  */
221
246
  private createCommandManager(): void {
222
- this.commandManager = new CommandManager(this, this.extensionManager.commands)
247
+ this.commandManager = new CommandManager({
248
+ editor: this,
249
+ })
223
250
  }
224
251
 
225
252
  /**
@@ -233,11 +260,15 @@ export class Editor extends EventEmitter {
233
260
  * Creates a ProseMirror view.
234
261
  */
235
262
  private createView(): void {
263
+ const doc = createDocument(this.options.content, this.schema, this.options.parseOptions)
264
+ const selection = resolveFocusPosition(doc, this.options.autofocus)
265
+
236
266
  this.view = new EditorView(this.options.element, {
237
267
  ...this.options.editorProps,
238
268
  dispatchTransaction: this.dispatchTransaction.bind(this),
239
269
  state: EditorState.create({
240
- doc: createDocument(this.options.content, this.schema, this.options.parseOptions),
270
+ doc,
271
+ selection: selection || undefined,
241
272
  }),
242
273
  })
243
274
 
@@ -254,6 +285,7 @@ export class Editor extends EventEmitter {
254
285
  // Let’s store the editor instance in the DOM element.
255
286
  // So we’ll have access to it for tests.
256
287
  const dom = this.view.dom as HTMLElement
288
+
257
289
  dom.editor = this
258
290
  }
259
291
 
@@ -288,7 +320,9 @@ export class Editor extends EventEmitter {
288
320
  * @param transaction An editor state transaction
289
321
  */
290
322
  private dispatchTransaction(transaction: Transaction): void {
291
- if (transaction.docChanged && !this.isEditable) {
323
+ // if the editor / the view of the editor was destroyed
324
+ // the transaction should not be dispatched as there is no view anymore.
325
+ if (this.view.isDestroyed) {
292
326
  return
293
327
  }
294
328
 
@@ -316,6 +350,7 @@ export class Editor extends EventEmitter {
316
350
  if (selectionHasChanged) {
317
351
  this.emit('selectionUpdate', {
318
352
  editor: this,
353
+ transaction,
319
354
  })
320
355
  }
321
356
 
@@ -326,6 +361,7 @@ export class Editor extends EventEmitter {
326
361
  this.emit('focus', {
327
362
  editor: this,
328
363
  event: focus.event,
364
+ transaction,
329
365
  })
330
366
  }
331
367
 
@@ -333,6 +369,7 @@ export class Editor extends EventEmitter {
333
369
  this.emit('blur', {
334
370
  editor: this,
335
371
  event: blur.event,
372
+ transaction,
336
373
  })
337
374
  }
338
375
 
@@ -347,21 +384,10 @@ export class Editor extends EventEmitter {
347
384
  }
348
385
 
349
386
  /**
350
- * Get attributes of the currently selected node.
351
- *
352
- * @param name Name of the node
387
+ * Get attributes of the currently selected node or mark.
353
388
  */
354
- public getNodeAttributes(name: string): AnyObject {
355
- return getNodeAttributes(this.state, name)
356
- }
357
-
358
- /**
359
- * Get attributes of the currently selected mark.
360
- *
361
- * @param name Name of the mark
362
- */
363
- public getMarkAttributes(name: string): AnyObject {
364
- return getMarkAttributes(this.state, name)
389
+ public getAttributes(nameOrType: string | NodeType | MarkType): Record<string, any> {
390
+ return getAttributes(this.state, nameOrType)
365
391
  }
366
392
 
367
393
  /**
@@ -370,16 +396,12 @@ export class Editor extends EventEmitter {
370
396
  * @param name Name of the node or mark
371
397
  * @param attributes Attributes of the node or mark
372
398
  */
373
- public isActive(name: string, attributes?: {}): boolean;
374
- public isActive(attributes: {}): boolean;
399
+ public isActive(name: string, attributes?: {}): boolean
400
+ public isActive(attributes: {}): boolean
375
401
  public isActive(nameOrAttributes: string, attributesOrUndefined?: {}): boolean {
376
- const name = typeof nameOrAttributes === 'string'
377
- ? nameOrAttributes
378
- : null
402
+ const name = typeof nameOrAttributes === 'string' ? nameOrAttributes : null
379
403
 
380
- const attributes = typeof nameOrAttributes === 'string'
381
- ? attributesOrUndefined
382
- : nameOrAttributes
404
+ const attributes = typeof nameOrAttributes === 'string' ? attributesOrUndefined : nameOrAttributes
383
405
 
384
406
  return isActive(this.state, name, attributes)
385
407
  }
@@ -387,7 +409,7 @@ export class Editor extends EventEmitter {
387
409
  /**
388
410
  * Get the document as JSON.
389
411
  */
390
- public getJSON(): AnyObject {
412
+ public getJSON(): JSONContent {
391
413
  return this.state.doc.toJSON()
392
414
  }
393
415
 
@@ -395,7 +417,25 @@ export class Editor extends EventEmitter {
395
417
  * Get the document as HTML.
396
418
  */
397
419
  public getHTML(): string {
398
- return getHTMLFromFragment(this.state.doc, this.schema)
420
+ return getHTMLFromFragment(this.state.doc.content, this.schema)
421
+ }
422
+
423
+ /**
424
+ * Get the document as text.
425
+ */
426
+ public getText(options?: {
427
+ blockSeparator?: string
428
+ textSerializers?: Record<string, TextSerializer>
429
+ }): string {
430
+ const { blockSeparator = '\n\n', textSerializers = {} } = options || {}
431
+
432
+ return getText(this.state.doc, {
433
+ blockSeparator,
434
+ textSerializers: {
435
+ ...getTextSerializersFromSchema(this.schema),
436
+ ...textSerializers,
437
+ },
438
+ })
399
439
  }
400
440
 
401
441
  /**
@@ -407,8 +447,14 @@ export class Editor extends EventEmitter {
407
447
 
408
448
  /**
409
449
  * Get the number of characters for the current document.
450
+ *
451
+ * @deprecated
410
452
  */
411
453
  public getCharacterCount(): number {
454
+ console.warn(
455
+ '[tiptap warn]: "editor.getCharacterCount()" is deprecated. Please use "editor.storage.characterCount.characters()" instead.',
456
+ )
457
+
412
458
  return this.state.doc.content.size - 2
413
459
  }
414
460
 
@@ -416,8 +462,6 @@ export class Editor extends EventEmitter {
416
462
  * Destroy the editor.
417
463
  */
418
464
  public destroy(): void {
419
- this.resizeObserver?.unobserve(this.view.dom)
420
-
421
465
  this.emit('destroy')
422
466
 
423
467
  if (this.view) {
@@ -425,7 +469,6 @@ export class Editor extends EventEmitter {
425
469
  }
426
470
 
427
471
  this.removeAllListeners()
428
- removeElement(this.css)
429
472
  }
430
473
 
431
474
  /**
@@ -435,5 +478,4 @@ export class Editor extends EventEmitter {
435
478
  // @ts-ignore
436
479
  return !this.view?.docView
437
480
  }
438
-
439
481
  }
@@ -1,8 +1,18 @@
1
- export default class EventEmitter {
1
+ type StringKeyOf<T> = Extract<keyof T, string>
2
+ type CallbackType<
3
+ T extends Record<string, any>,
4
+ EventName extends StringKeyOf<T>,
5
+ > = T[EventName] extends any[] ? T[EventName] : [T[EventName]]
6
+ type CallbackFunction<
7
+ T extends Record<string, any>,
8
+ EventName extends StringKeyOf<T>,
9
+ > = (...props: CallbackType<T, EventName>) => any
10
+
11
+ export class EventEmitter<T extends Record<string, any>> {
2
12
 
3
13
  private callbacks: { [key: string]: Function[] } = {}
4
14
 
5
- public on(event: string, fn: Function): this {
15
+ public on<EventName extends StringKeyOf<T>>(event: EventName, fn: CallbackFunction<T, EventName>): this {
6
16
  if (!this.callbacks[event]) {
7
17
  this.callbacks[event] = []
8
18
  }
@@ -12,7 +22,7 @@ export default class EventEmitter {
12
22
  return this
13
23
  }
14
24
 
15
- protected emit(event: string, ...args: any): this {
25
+ protected emit<EventName extends StringKeyOf<T>>(event: EventName, ...args: CallbackType<T, EventName>): this {
16
26
  const callbacks = this.callbacks[event]
17
27
 
18
28
  if (callbacks) {
@@ -22,7 +32,7 @@ export default class EventEmitter {
22
32
  return this
23
33
  }
24
34
 
25
- public off(event: string, fn?: Function): this {
35
+ public off<EventName extends StringKeyOf<T>>(event: EventName, fn?: CallbackFunction<T, EventName>): this {
26
36
  const callbacks = this.callbacks[event]
27
37
 
28
38
  if (callbacks) {