@tiptap/react 2.0.0-beta.9 → 2.0.0-beta.94

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 (292) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +2 -2
  3. package/dist/packages/core/src/CommandManager.d.ts +20 -0
  4. package/dist/packages/core/src/Editor.d.ts +145 -0
  5. package/dist/packages/core/src/EventEmitter.d.ts +11 -0
  6. package/dist/packages/core/src/Extension.d.ts +227 -0
  7. package/dist/packages/core/src/ExtensionManager.d.ts +18 -0
  8. package/dist/packages/core/src/InputRule.d.ts +42 -0
  9. package/dist/packages/core/src/Mark.d.ts +319 -0
  10. package/dist/packages/core/src/Node.d.ts +388 -0
  11. package/dist/packages/core/src/NodeView.d.ts +27 -0
  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 +12 -0
  15. package/dist/packages/core/src/commands/clearContent.d.ts +12 -0
  16. package/dist/packages/core/src/commands/clearNodes.d.ts +12 -0
  17. package/dist/packages/core/src/commands/command.d.ts +12 -0
  18. package/dist/packages/core/src/commands/createParagraphNear.d.ts +12 -0
  19. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  20. package/dist/packages/core/src/commands/deleteRange.d.ts +12 -0
  21. package/dist/packages/core/src/commands/deleteSelection.d.ts +12 -0
  22. package/dist/packages/core/src/commands/enter.d.ts +12 -0
  23. package/dist/packages/core/src/commands/exitCode.d.ts +12 -0
  24. package/dist/packages/core/src/commands/extendMarkRange.d.ts +13 -0
  25. package/dist/packages/core/src/commands/first.d.ts +12 -0
  26. package/dist/packages/core/src/commands/focus.d.ts +12 -0
  27. package/dist/packages/core/src/commands/forEach.d.ts +14 -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 +12 -0
  31. package/dist/packages/core/src/commands/joinForward.d.ts +12 -0
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +12 -0
  33. package/dist/packages/core/src/commands/lift.d.ts +13 -0
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +12 -0
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +13 -0
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +12 -0
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
  38. package/dist/packages/core/src/commands/scrollIntoView.d.ts +12 -0
  39. package/dist/packages/core/src/commands/selectAll.d.ts +12 -0
  40. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +12 -0
  41. package/dist/packages/core/src/commands/selectNodeForward.d.ts +12 -0
  42. package/dist/packages/core/src/commands/selectParentNode.d.ts +12 -0
  43. package/dist/packages/core/src/commands/setContent.d.ts +13 -0
  44. package/dist/packages/core/src/commands/setMark.d.ts +13 -0
  45. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  46. package/dist/packages/core/src/commands/setNode.d.ts +13 -0
  47. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  48. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  49. package/dist/packages/core/src/commands/sinkListItem.d.ts +13 -0
  50. package/dist/packages/core/src/commands/splitBlock.d.ts +14 -0
  51. package/dist/packages/core/src/commands/splitListItem.d.ts +13 -0
  52. package/dist/packages/core/src/commands/toggleList.d.ts +13 -0
  53. package/dist/packages/core/src/commands/toggleMark.d.ts +18 -0
  54. package/dist/packages/core/src/commands/toggleNode.d.ts +13 -0
  55. package/dist/packages/core/src/commands/toggleWrap.d.ts +13 -0
  56. package/dist/packages/core/src/commands/undoInputRule.d.ts +12 -0
  57. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +12 -0
  58. package/dist/packages/core/src/commands/unsetMark.d.ts +18 -0
  59. package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
  60. package/dist/packages/core/src/commands/wrapIn.d.ts +13 -0
  61. package/dist/packages/core/src/commands/wrapInList.d.ts +13 -0
  62. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +2 -0
  63. package/dist/packages/core/src/extensions/commands.d.ts +98 -0
  64. package/dist/packages/core/src/extensions/editable.d.ts +2 -0
  65. package/dist/packages/core/src/extensions/focusEvents.d.ts +2 -0
  66. package/dist/packages/core/src/extensions/index.d.ts +6 -0
  67. package/dist/packages/core/src/extensions/keymap.d.ts +2 -0
  68. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  69. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  70. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -0
  71. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  73. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  74. package/dist/packages/core/src/helpers/findParentNode.d.ts +9 -0
  75. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +8 -0
  76. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -0
  77. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  78. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  79. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  80. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +6 -0
  81. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  82. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  83. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -0
  84. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +3 -0
  85. package/dist/packages/core/src/helpers/getMarkRange.d.ts +3 -0
  86. package/dist/packages/core/src/helpers/getMarkType.d.ts +2 -0
  87. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +3 -0
  88. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +3 -0
  89. package/dist/packages/core/src/helpers/getNodeType.d.ts +2 -0
  90. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -0
  91. package/dist/packages/core/src/helpers/getSchema.d.ts +3 -0
  92. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  93. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +2 -0
  94. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +2 -0
  95. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -0
  96. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  97. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  98. package/dist/packages/core/src/helpers/getTextSeralizersFromSchema.d.ts +3 -0
  99. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +9 -0
  100. package/dist/packages/core/src/helpers/isActive.d.ts +2 -0
  101. package/dist/packages/core/src/helpers/isList.d.ts +2 -0
  102. package/dist/packages/core/src/helpers/isMarkActive.d.ts +3 -0
  103. package/dist/packages/core/src/helpers/isNodeActive.d.ts +3 -0
  104. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -0
  105. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +2 -0
  106. package/dist/packages/core/src/helpers/isTextSelection.d.ts +2 -0
  107. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  108. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +2 -0
  109. package/dist/packages/core/src/helpers/splitExtensions.d.ts +9 -0
  110. package/dist/packages/core/src/index.d.ts +57 -0
  111. package/dist/packages/core/src/inputRules/markInputRule.d.ts +12 -0
  112. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +12 -0
  113. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  114. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  115. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  116. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +12 -0
  117. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  118. package/dist/packages/core/src/style.d.ts +2 -0
  119. package/dist/packages/core/src/types.d.ts +209 -0
  120. package/dist/packages/core/src/utilities/callOrReturn.d.ts +9 -0
  121. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -0
  122. package/dist/packages/core/src/utilities/deleteProps.d.ts +6 -0
  123. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -0
  124. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  125. package/dist/packages/core/src/utilities/fromString.d.ts +1 -0
  126. package/dist/packages/core/src/utilities/isClass.d.ts +1 -0
  127. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -0
  128. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  129. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  130. package/dist/packages/core/src/utilities/isObject.d.ts +1 -0
  131. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -0
  132. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  133. package/dist/packages/core/src/utilities/isString.d.ts +1 -0
  134. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  135. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -0
  136. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/minMax.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/objectIncludes.d.ts +8 -0
  139. package/dist/packages/extension-blockquote/src/blockquote.d.ts +24 -0
  140. package/dist/packages/extension-blockquote/src/index.d.ts +3 -0
  141. package/dist/packages/extension-bold/src/bold.d.ts +27 -0
  142. package/dist/packages/extension-bold/src/index.d.ts +3 -0
  143. package/dist/packages/extension-bubble-menu/src/bubble-menu-plugin.d.ts +43 -0
  144. package/dist/packages/extension-bubble-menu/src/bubble-menu.d.ts +6 -0
  145. package/dist/packages/extension-bubble-menu/src/index.d.ts +4 -0
  146. package/dist/packages/extension-bullet-list/src/bullet-list.d.ts +16 -0
  147. package/dist/packages/extension-bullet-list/src/index.d.ts +3 -0
  148. package/dist/packages/extension-character-count/src/character-count.d.ts +7 -0
  149. package/dist/packages/extension-character-count/src/index.d.ts +3 -0
  150. package/dist/packages/extension-code/src/code.d.ts +25 -0
  151. package/dist/packages/extension-code/src/index.d.ts +3 -0
  152. package/dist/packages/extension-code-block/src/code-block.d.ts +26 -0
  153. package/dist/packages/extension-code-block/src/index.d.ts +3 -0
  154. package/dist/packages/extension-code-block-lowlight/src/code-block-lowlight.d.ts +6 -0
  155. package/dist/packages/extension-code-block-lowlight/src/index.d.ts +3 -0
  156. package/dist/packages/extension-code-block-lowlight/src/lowlight-plugin.d.ts +6 -0
  157. package/dist/packages/extension-collaboration/src/collaboration.d.ts +30 -0
  158. package/dist/packages/extension-collaboration/src/helpers/isChangeOrigin.d.ts +2 -0
  159. package/dist/packages/extension-collaboration/src/index.d.ts +4 -0
  160. package/dist/packages/extension-collaboration-cursor/src/collaboration-cursor.d.ts +37 -0
  161. package/dist/packages/extension-collaboration-cursor/src/index.d.ts +3 -0
  162. package/dist/packages/extension-color/src/color.d.ts +21 -0
  163. package/dist/packages/extension-color/src/index.d.ts +3 -0
  164. package/dist/packages/extension-document/src/document.d.ts +2 -0
  165. package/dist/packages/extension-document/src/index.d.ts +3 -0
  166. package/dist/packages/extension-dropcursor/src/dropcursor.d.ts +7 -0
  167. package/dist/packages/extension-dropcursor/src/index.d.ts +3 -0
  168. package/dist/packages/extension-floating-menu/src/floating-menu-plugin.d.ts +40 -0
  169. package/dist/packages/extension-floating-menu/src/floating-menu.d.ts +6 -0
  170. package/dist/packages/extension-floating-menu/src/index.d.ts +4 -0
  171. package/dist/packages/extension-focus/src/focus.d.ts +6 -0
  172. package/dist/packages/extension-focus/src/index.d.ts +3 -0
  173. package/dist/packages/extension-font-family/src/font-family.d.ts +21 -0
  174. package/dist/packages/extension-font-family/src/index.d.ts +3 -0
  175. package/dist/packages/extension-gapcursor/src/gapcursor.d.ts +15 -0
  176. package/dist/packages/extension-gapcursor/src/index.d.ts +3 -0
  177. package/dist/packages/extension-hard-break/src/hard-break.d.ts +16 -0
  178. package/dist/packages/extension-hard-break/src/index.d.ts +3 -0
  179. package/dist/packages/extension-heading/src/heading.d.ts +26 -0
  180. package/dist/packages/extension-heading/src/index.d.ts +3 -0
  181. package/dist/packages/extension-highlight/src/highlight.d.ts +30 -0
  182. package/dist/packages/extension-highlight/src/index.d.ts +3 -0
  183. package/dist/packages/extension-history/src/history.d.ts +20 -0
  184. package/dist/packages/extension-history/src/index.d.ts +3 -0
  185. package/dist/packages/extension-horizontal-rule/src/horizontal-rule.d.ts +15 -0
  186. package/dist/packages/extension-horizontal-rule/src/index.d.ts +3 -0
  187. package/dist/packages/extension-image/src/image.d.ts +21 -0
  188. package/dist/packages/extension-image/src/index.d.ts +3 -0
  189. package/dist/packages/extension-italic/src/index.d.ts +3 -0
  190. package/dist/packages/extension-italic/src/italic.d.ts +27 -0
  191. package/dist/packages/extension-link/src/index.d.ts +3 -0
  192. package/dist/packages/extension-link/src/link.d.ts +40 -0
  193. package/dist/packages/extension-list-item/src/index.d.ts +3 -0
  194. package/dist/packages/extension-list-item/src/list-item.d.ts +5 -0
  195. package/dist/packages/extension-mention/src/index.d.ts +3 -0
  196. package/dist/packages/extension-mention/src/mention.d.ts +14 -0
  197. package/dist/packages/extension-ordered-list/src/index.d.ts +3 -0
  198. package/dist/packages/extension-ordered-list/src/ordered-list.d.ts +16 -0
  199. package/dist/packages/extension-paragraph/src/index.d.ts +3 -0
  200. package/dist/packages/extension-paragraph/src/paragraph.d.ts +15 -0
  201. package/dist/packages/extension-placeholder/src/index.d.ts +3 -0
  202. package/dist/packages/extension-placeholder/src/placeholder.d.ts +15 -0
  203. package/dist/packages/extension-strike/src/index.d.ts +3 -0
  204. package/dist/packages/extension-strike/src/strike.d.ts +25 -0
  205. package/dist/packages/extension-subscript/src/index.d.ts +3 -0
  206. package/dist/packages/extension-subscript/src/subscript.d.ts +23 -0
  207. package/dist/packages/extension-superscript/src/index.d.ts +3 -0
  208. package/dist/packages/extension-superscript/src/superscript.d.ts +23 -0
  209. package/dist/packages/extension-table/src/TableView.d.ts +17 -0
  210. package/dist/packages/extension-table/src/index.d.ts +4 -0
  211. package/dist/packages/extension-table/src/table.d.ts +55 -0
  212. package/dist/packages/extension-table/src/utilities/createCell.d.ts +2 -0
  213. package/dist/packages/extension-table/src/utilities/createTable.d.ts +2 -0
  214. package/dist/packages/extension-table/src/utilities/deleteTableWhenAllCellsSelected.d.ts +2 -0
  215. package/dist/packages/extension-table/src/utilities/getTableNodeTypes.d.ts +4 -0
  216. package/dist/packages/extension-table/src/utilities/isCellSelection.d.ts +2 -0
  217. package/dist/packages/extension-table-cell/src/index.d.ts +3 -0
  218. package/dist/packages/extension-table-cell/src/table-cell.d.ts +5 -0
  219. package/dist/packages/extension-table-header/src/index.d.ts +3 -0
  220. package/dist/packages/extension-table-header/src/table-header.d.ts +5 -0
  221. package/dist/packages/extension-table-row/src/index.d.ts +3 -0
  222. package/dist/packages/extension-table-row/src/table-row.d.ts +5 -0
  223. package/dist/packages/extension-task-item/src/index.d.ts +3 -0
  224. package/dist/packages/extension-task-item/src/task-item.d.ts +7 -0
  225. package/dist/packages/extension-task-list/src/index.d.ts +3 -0
  226. package/dist/packages/extension-task-list/src/task-list.d.ts +15 -0
  227. package/dist/packages/extension-text/src/index.d.ts +3 -0
  228. package/dist/packages/extension-text/src/text.d.ts +2 -0
  229. package/dist/packages/extension-text-align/src/index.d.ts +3 -0
  230. package/dist/packages/extension-text-align/src/text-align.d.ts +21 -0
  231. package/dist/packages/extension-text-style/src/index.d.ts +3 -0
  232. package/dist/packages/extension-text-style/src/text-style.d.ts +15 -0
  233. package/dist/packages/extension-typography/src/index.d.ts +3 -0
  234. package/dist/packages/extension-typography/src/typography.d.ts +23 -0
  235. package/dist/packages/extension-underline/src/index.d.ts +3 -0
  236. package/dist/packages/extension-underline/src/underline.d.ts +23 -0
  237. package/dist/packages/html/src/generateHTML.d.ts +2 -0
  238. package/dist/packages/html/src/generateJSON.d.ts +2 -0
  239. package/dist/packages/html/src/getHTMLFromFragment.d.ts +2 -0
  240. package/dist/packages/html/src/index.d.ts +2 -0
  241. package/dist/packages/react/src/BubbleMenu.d.ts +3 -1
  242. package/dist/packages/react/src/EditorContent.d.ts +2 -2
  243. package/dist/packages/react/src/FloatingMenu.d.ts +8 -0
  244. package/dist/packages/react/src/NodeViewContent.d.ts +2 -2
  245. package/dist/packages/react/src/NodeViewWrapper.d.ts +2 -2
  246. package/dist/packages/react/src/ReactNodeViewRenderer.d.ts +9 -5
  247. package/dist/packages/react/src/ReactRenderer.d.ts +15 -10
  248. package/dist/packages/react/src/index.d.ts +1 -0
  249. package/dist/packages/react/src/useEditor.d.ts +2 -1
  250. package/dist/packages/react/src/useReactNodeView.d.ts +1 -1
  251. package/dist/packages/starter-kit/src/index.d.ts +3 -0
  252. package/dist/packages/starter-kit/src/starter-kit.d.ts +37 -0
  253. package/dist/packages/suggestion/src/findSuggestionMatch.d.ts +15 -0
  254. package/dist/packages/suggestion/src/index.d.ts +4 -0
  255. package/dist/packages/suggestion/src/suggestion.d.ts +49 -0
  256. package/dist/tests/cypress/integration/core/can.spec.d.ts +1 -0
  257. package/dist/tests/cypress/integration/core/editorProps.spec.d.ts +1 -0
  258. package/dist/tests/cypress/integration/core/extendExtensions.spec.d.ts +1 -0
  259. package/dist/tests/cypress/integration/core/extendMarkRange.spec.d.ts +1 -0
  260. package/dist/tests/cypress/integration/core/extensionOptions.spec.d.ts +1 -0
  261. package/dist/tests/cypress/integration/core/fromString.spec.d.ts +1 -0
  262. package/dist/tests/cypress/integration/core/generateHTML.spec.d.ts +1 -0
  263. package/dist/tests/cypress/integration/core/generateJSON.spec.d.ts +1 -0
  264. package/dist/tests/cypress/integration/core/isActive.spec.d.ts +1 -0
  265. package/dist/tests/cypress/integration/core/isClass.spec.d.ts +1 -0
  266. package/dist/tests/cypress/integration/core/mergeAttributes.spec.d.ts +1 -0
  267. package/dist/tests/cypress/integration/core/mergeDeep.spec.d.ts +1 -0
  268. package/dist/tests/cypress/integration/core/pluginOrder.spec.d.ts +1 -0
  269. package/dist/tests/cypress/integration/extensions/bold.spec.d.ts +1 -0
  270. package/dist/tests/cypress/integration/extensions/codeBlockLowlight.spec.d.ts +1 -0
  271. package/dist/tests/cypress/integration/html/generateHTML.spec.d.ts +1 -0
  272. package/dist/tests/cypress/integration/html/generateJSON.spec.d.ts +1 -0
  273. package/dist/tiptap-react.cjs.js +127 -54
  274. package/dist/tiptap-react.cjs.js.map +1 -1
  275. package/dist/tiptap-react.esm.js +120 -46
  276. package/dist/tiptap-react.esm.js.map +1 -1
  277. package/dist/tiptap-react.umd.js +131 -59
  278. package/dist/tiptap-react.umd.js.map +1 -1
  279. package/package.json +17 -9
  280. package/src/BubbleMenu.tsx +23 -7
  281. package/src/EditorContent.tsx +8 -7
  282. package/src/FloatingMenu.tsx +46 -0
  283. package/src/NodeViewContent.tsx +9 -6
  284. package/src/NodeViewWrapper.tsx +11 -9
  285. package/src/ReactNodeViewRenderer.tsx +68 -28
  286. package/src/ReactRenderer.tsx +26 -14
  287. package/src/index.ts +1 -0
  288. package/src/useEditor.ts +10 -4
  289. package/src/useReactNodeView.ts +1 -2
  290. package/CHANGELOG.md +0 -80
  291. package/dist/tiptap-react.bundle.umd.min.js +0 -54
  292. package/dist/tiptap-react.bundle.umd.min.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@tiptap/core'), require('react'), require('@tiptap/extension-bubble-menu'), require('react-dom')) :
3
- typeof define === 'function' && define.amd ? define(['exports', '@tiptap/core', 'react', '@tiptap/extension-bubble-menu', 'react-dom'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['@tiptap/react'] = {}, global.core, global.React, global.extensionBubbleMenu, global.ReactDOM));
5
- }(this, (function (exports, core, React, extensionBubbleMenu, ReactDOM) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@tiptap/core'), require('react'), require('@tiptap/extension-bubble-menu'), require('@tiptap/extension-floating-menu'), require('react-dom')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@tiptap/core', 'react', '@tiptap/extension-bubble-menu', '@tiptap/extension-floating-menu', 'react-dom'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@tiptap/react"] = {}, global.core, global.React, global.extensionBubbleMenu, global.extensionFloatingMenu, global.ReactDOM));
5
+ })(this, (function (exports, core, React, extensionBubbleMenu, extensionFloatingMenu, ReactDOM) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -12,17 +12,25 @@
12
12
  const BubbleMenu = props => {
13
13
  const element = React.useRef(null);
14
14
  React.useEffect(() => {
15
- const { editor, keepInBounds = true } = props;
15
+ if (!element.current) {
16
+ return;
17
+ }
18
+ const { pluginKey = 'bubbleMenu', editor, tippyOptions = {}, shouldShow = null, } = props;
16
19
  editor.registerPlugin(extensionBubbleMenu.BubbleMenuPlugin({
20
+ pluginKey,
17
21
  editor,
18
22
  element: element.current,
19
- keepInBounds,
23
+ tippyOptions,
24
+ shouldShow,
20
25
  }));
21
26
  return () => {
22
- editor.unregisterPlugin(extensionBubbleMenu.BubbleMenuPluginKey);
27
+ editor.unregisterPlugin(pluginKey);
23
28
  };
24
- }, []);
25
- return (React__default['default'].createElement("div", { ref: element, className: props.className }, props.children));
29
+ }, [
30
+ props.editor,
31
+ element.current,
32
+ ]);
33
+ return (React__default["default"].createElement("div", { ref: element, className: props.className, style: { visibility: 'hidden' } }, props.children));
26
34
  };
27
35
 
28
36
  class Editor extends core.Editor {
@@ -32,21 +40,51 @@
32
40
  }
33
41
  }
34
42
 
43
+ const FloatingMenu = props => {
44
+ const element = React.useRef(null);
45
+ React.useEffect(() => {
46
+ if (!element.current) {
47
+ return;
48
+ }
49
+ const { pluginKey = 'floatingMenu', editor, tippyOptions = {}, shouldShow = null, } = props;
50
+ editor.registerPlugin(extensionFloatingMenu.FloatingMenuPlugin({
51
+ pluginKey,
52
+ editor,
53
+ element: element.current,
54
+ tippyOptions,
55
+ shouldShow,
56
+ }));
57
+ return () => {
58
+ editor.unregisterPlugin(pluginKey);
59
+ };
60
+ }, [
61
+ props.editor,
62
+ element.current,
63
+ ]);
64
+ return (React__default["default"].createElement("div", { ref: element, className: props.className, style: { visibility: 'hidden' } }, props.children));
65
+ };
66
+
35
67
  function useForceUpdate() {
36
68
  const [, setValue] = React.useState(0);
37
69
  return () => setValue(value => value + 1);
38
70
  }
39
- const useEditor = (options = {}) => {
71
+ const useEditor = (options = {}, deps = []) => {
40
72
  const [editor, setEditor] = React.useState(null);
41
73
  const forceUpdate = useForceUpdate();
42
74
  React.useEffect(() => {
43
75
  const instance = new Editor(options);
44
76
  setEditor(instance);
45
- instance.on('transaction', forceUpdate);
77
+ instance.on('transaction', () => {
78
+ requestAnimationFrame(() => {
79
+ requestAnimationFrame(() => {
80
+ forceUpdate();
81
+ });
82
+ });
83
+ });
46
84
  return () => {
47
85
  instance.destroy();
48
86
  };
49
- }, []);
87
+ }, deps);
50
88
  return editor;
51
89
  };
52
90
 
@@ -55,14 +93,19 @@
55
93
  && Component.prototype
56
94
  && Component.prototype.isReactComponent);
57
95
  }
96
+ function isForwardRefComponent(Component) {
97
+ var _a;
98
+ return !!(typeof Component === 'object'
99
+ && ((_a = Component.$$typeof) === null || _a === void 0 ? void 0 : _a.toString()) === 'Symbol(react.forward_ref)');
100
+ }
58
101
  class ReactRenderer {
59
- constructor(component, { props = {}, editor }) {
102
+ constructor(component, { editor, props = {}, as = 'div' }) {
60
103
  this.ref = null;
61
104
  this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString();
62
105
  this.component = component;
63
106
  this.editor = editor;
64
107
  this.props = props;
65
- this.element = document.createElement('div');
108
+ this.element = document.createElement(as);
66
109
  this.element.classList.add('react-renderer');
67
110
  this.render();
68
111
  }
@@ -70,12 +113,12 @@
70
113
  var _a;
71
114
  const Component = this.component;
72
115
  const props = this.props;
73
- if (isClassComponent(Component)) {
116
+ if (isClassComponent(Component) || isForwardRefComponent(Component)) {
74
117
  props.ref = (ref) => {
75
118
  this.ref = ref;
76
119
  };
77
120
  }
78
- this.reactElement = React__default['default'].createElement(Component, Object.assign({}, props));
121
+ this.reactElement = React__default["default"].createElement(Component, { ...props });
79
122
  if ((_a = this.editor) === null || _a === void 0 ? void 0 : _a.contentComponent) {
80
123
  this.editor.contentComponent.setState({
81
124
  renderers: this.editor.contentComponent.state.renderers.set(this.id, this),
@@ -102,7 +145,6 @@
102
145
  }
103
146
 
104
147
  const ReactNodeViewContext = React.createContext({
105
- isEditable: undefined,
106
148
  onDragStart: undefined,
107
149
  });
108
150
  const useReactNodeView = () => React.useContext(ReactNodeViewContext);
@@ -117,38 +159,50 @@
117
159
  extension: this.extension,
118
160
  getPos: () => this.getPos(),
119
161
  updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
162
+ deleteNode: () => this.deleteNode(),
120
163
  };
121
164
  if (!this.component.displayName) {
122
165
  const capitalizeFirstChar = (string) => {
123
166
  return string.charAt(0).toUpperCase() + string.substring(1);
124
167
  };
125
- // @ts-ignore
126
- this.component.displayName = capitalizeFirstChar(this.extension.config.name);
168
+ this.component.displayName = capitalizeFirstChar(this.extension.name);
127
169
  }
128
170
  const ReactNodeViewProvider = componentProps => {
129
- const [isEditable, setIsEditable] = React.useState(this.editor.isEditable);
130
- const onDragStart = this.onDragStart.bind(this);
131
- const onViewUpdate = () => setIsEditable(this.editor.isEditable);
132
171
  const Component = this.component;
133
- React.useEffect(() => {
134
- this.editor.on('viewUpdate', onViewUpdate);
135
- return () => {
136
- this.editor.off('viewUpdate', onViewUpdate);
137
- };
138
- }, []);
139
- return (React__default['default'].createElement(ReactNodeViewContext.Provider, { value: { onDragStart, isEditable } },
140
- React__default['default'].createElement(Component, Object.assign({}, componentProps))));
172
+ const onDragStart = this.onDragStart.bind(this);
173
+ const nodeViewContentRef = element => {
174
+ if (element
175
+ && this.contentDOMElement
176
+ && element.firstChild !== this.contentDOMElement) {
177
+ element.appendChild(this.contentDOMElement);
178
+ }
179
+ };
180
+ return (React__default["default"].createElement(ReactNodeViewContext.Provider, { value: { onDragStart, nodeViewContentRef } },
181
+ React__default["default"].createElement(Component, { ...componentProps })));
141
182
  };
142
183
  ReactNodeViewProvider.displayName = 'ReactNodeView';
184
+ this.contentDOMElement = this.node.isLeaf
185
+ ? null
186
+ : document.createElement(this.node.isInline ? 'span' : 'div');
187
+ if (this.contentDOMElement) {
188
+ // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari
189
+ // With this fix it seems to work fine
190
+ // See: https://github.com/ueberdosis/tiptap/issues/1197
191
+ this.contentDOMElement.style.whiteSpace = 'inherit';
192
+ }
143
193
  this.renderer = new ReactRenderer(ReactNodeViewProvider, {
144
194
  editor: this.editor,
145
195
  props,
196
+ as: this.node.isInline
197
+ ? 'span'
198
+ : 'div',
146
199
  });
147
200
  }
148
201
  get dom() {
149
202
  var _a;
150
- if (!((_a = this.renderer.element.firstElementChild) === null || _a === void 0 ? void 0 : _a.hasAttribute('data-node-view-wrapper'))) {
151
- throw Error('Please use the ReactViewWrapper component for your node view.');
203
+ if (this.renderer.element.firstElementChild
204
+ && !((_a = this.renderer.element.firstElementChild) === null || _a === void 0 ? void 0 : _a.hasAttribute('data-node-view-wrapper'))) {
205
+ throw Error('Please use the NodeViewWrapper component for your node view.');
152
206
  }
153
207
  return this.renderer.element;
154
208
  }
@@ -156,22 +210,34 @@
156
210
  if (this.node.isLeaf) {
157
211
  return null;
158
212
  }
159
- const contentElement = this.dom.querySelector('[data-node-view-content]');
160
- return contentElement || this.dom;
213
+ return this.contentDOMElement;
161
214
  }
162
215
  update(node, decorations) {
163
- if (typeof this.options.update === 'function') {
164
- return this.options.update(node, decorations);
165
- }
216
+ const updateProps = (props) => {
217
+ this.renderer.updateProps(props);
218
+ };
166
219
  if (node.type !== this.node.type) {
167
220
  return false;
168
221
  }
222
+ if (typeof this.options.update === 'function') {
223
+ const oldNode = this.node;
224
+ const oldDecorations = this.decorations;
225
+ this.node = node;
226
+ this.decorations = decorations;
227
+ return this.options.update({
228
+ oldNode,
229
+ oldDecorations,
230
+ newNode: node,
231
+ newDecorations: decorations,
232
+ updateProps: () => updateProps({ node, decorations }),
233
+ });
234
+ }
169
235
  if (node === this.node && this.decorations === decorations) {
170
236
  return true;
171
237
  }
172
238
  this.node = node;
173
239
  this.decorations = decorations;
174
- this.renderer.updateProps({ node, decorations });
240
+ updateProps({ node, decorations });
175
241
  return true;
176
242
  }
177
243
  selectNode() {
@@ -186,6 +252,7 @@
186
252
  }
187
253
  destroy() {
188
254
  this.renderer.destroy();
255
+ this.contentDOMElement = null;
189
256
  }
190
257
  }
191
258
  function ReactNodeViewRenderer(component, options) {
@@ -201,14 +268,14 @@
201
268
  }
202
269
 
203
270
  const Portals = ({ renderers }) => {
204
- return (React__default['default'].createElement(React__default['default'].Fragment, null, Array.from(renderers).map(([key, renderer]) => {
205
- return ReactDOM__default['default'].createPortal(renderer.reactElement, renderer.element, key);
271
+ return (React__default["default"].createElement(React__default["default"].Fragment, null, Array.from(renderers).map(([key, renderer]) => {
272
+ return ReactDOM__default["default"].createPortal(renderer.reactElement, renderer.element, key);
206
273
  })));
207
274
  };
208
- class PureEditorContent extends React__default['default'].Component {
275
+ class PureEditorContent extends React__default["default"].Component {
209
276
  constructor(props) {
210
277
  super(props);
211
- this.editorContentRef = React__default['default'].createRef();
278
+ this.editorContentRef = React__default["default"].createRef();
212
279
  this.state = {
213
280
  renderers: new Map(),
214
281
  };
@@ -226,13 +293,12 @@
226
293
  return;
227
294
  }
228
295
  const element = this.editorContentRef.current;
229
- element.appendChild(editor.options.element.firstChild);
296
+ element.append(...editor.options.element.childNodes);
230
297
  editor.setOptions({
231
298
  element,
232
299
  });
233
300
  editor.contentComponent = this;
234
- // TODO: alternative to setTimeout?
235
- setTimeout(() => editor.createNodeViews(), 0);
301
+ editor.createNodeViews();
236
302
  }
237
303
  }
238
304
  componentWillUnmount() {
@@ -250,34 +316,42 @@
250
316
  return;
251
317
  }
252
318
  const newElement = document.createElement('div');
253
- newElement.appendChild(editor.options.element.firstChild);
319
+ newElement.append(...editor.options.element.childNodes);
254
320
  editor.setOptions({
255
321
  element: newElement,
256
322
  });
257
323
  }
258
324
  render() {
259
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
260
- React__default['default'].createElement("div", { ref: this.editorContentRef }),
261
- React__default['default'].createElement(Portals, { renderers: this.state.renderers })));
325
+ const { editor, ...rest } = this.props;
326
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
327
+ React__default["default"].createElement("div", { ref: this.editorContentRef, ...rest }),
328
+ React__default["default"].createElement(Portals, { renderers: this.state.renderers })));
262
329
  }
263
330
  }
264
- const EditorContent = React__default['default'].memo(PureEditorContent);
331
+ const EditorContent = React__default["default"].memo(PureEditorContent);
265
332
 
266
- const NodeViewWrapper = props => {
333
+ const NodeViewWrapper = React__default["default"].forwardRef((props, ref) => {
267
334
  const { onDragStart } = useReactNodeView();
268
335
  const Tag = props.as || 'div';
269
- return (React__default['default'].createElement(Tag, { className: props.className, "data-node-view-wrapper": "", onDragStart: onDragStart, style: { whiteSpace: 'normal' } }, props.children));
270
- };
336
+ return (React__default["default"].createElement(Tag, { ...props, ref: ref, "data-node-view-wrapper": "", onDragStart: onDragStart, style: {
337
+ ...props.style,
338
+ whiteSpace: 'normal',
339
+ } }));
340
+ });
271
341
 
272
342
  const NodeViewContent = props => {
273
- const { isEditable } = useReactNodeView();
274
343
  const Tag = props.as || 'div';
275
- return (React__default['default'].createElement(Tag, { className: props.className, "data-node-view-content": "", contentEditable: isEditable, style: { whiteSpace: 'pre-wrap' } }));
344
+ const { nodeViewContentRef } = useReactNodeView();
345
+ return (React__default["default"].createElement(Tag, { ...props, ref: nodeViewContentRef, "data-node-view-content": "", style: {
346
+ ...props.style,
347
+ whiteSpace: 'pre-wrap',
348
+ } }));
276
349
  };
277
350
 
278
351
  exports.BubbleMenu = BubbleMenu;
279
352
  exports.Editor = Editor;
280
353
  exports.EditorContent = EditorContent;
354
+ exports.FloatingMenu = FloatingMenu;
281
355
  exports.NodeViewContent = NodeViewContent;
282
356
  exports.NodeViewWrapper = NodeViewWrapper;
283
357
  exports.PureEditorContent = PureEditorContent;
@@ -287,13 +361,11 @@
287
361
  Object.keys(core).forEach(function (k) {
288
362
  if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
289
363
  enumerable: true,
290
- get: function () {
291
- return core[k];
292
- }
364
+ get: function () { return core[k]; }
293
365
  });
294
366
  });
295
367
 
296
368
  Object.defineProperty(exports, '__esModule', { value: true });
297
369
 
298
- })));
370
+ }));
299
371
  //# sourceMappingURL=tiptap-react.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiptap-react.umd.js","sources":["../src/BubbleMenu.tsx","../src/Editor.ts","../src/useEditor.ts","../src/ReactRenderer.tsx","../src/useReactNodeView.ts","../src/ReactNodeViewRenderer.tsx","../src/EditorContent.tsx","../src/NodeViewWrapper.tsx","../src/NodeViewContent.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react'\nimport { BubbleMenuPlugin, BubbleMenuPluginKey, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'\n\nexport type BubbleMenuProps = Omit<BubbleMenuPluginProps, 'element'> & {\n className?: string,\n}\n\nexport const BubbleMenu: React.FC<BubbleMenuProps> = props => {\n const element = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const { editor, keepInBounds = true } = props\n\n editor.registerPlugin(BubbleMenuPlugin({\n editor,\n element: element.current as HTMLElement,\n keepInBounds,\n }))\n\n return () => {\n editor.unregisterPlugin(BubbleMenuPluginKey)\n }\n }, [])\n\n return (\n <div ref={element} className={props.className}>\n {props.children}\n </div>\n )\n}\n","import React from 'react'\nimport { Editor as CoreEditor } from '@tiptap/core'\nimport { EditorContentProps, EditorContentState } from './EditorContent'\n\nexport class Editor extends CoreEditor {\n public contentComponent: React.Component<EditorContentProps, EditorContentState> | null = null\n}\n","import { useState, useEffect } from 'react'\nimport { EditorOptions } from '@tiptap/core'\nimport { Editor } from './Editor'\n\nfunction useForceUpdate() {\n const [, setValue] = useState(0)\n\n return () => setValue(value => value + 1)\n}\n\nexport const useEditor = (options: Partial<EditorOptions> = {}) => {\n const [editor, setEditor] = useState<Editor | null>(null)\n const forceUpdate = useForceUpdate()\n\n useEffect(() => {\n const instance = new Editor(options)\n\n setEditor(instance)\n\n instance.on('transaction', forceUpdate)\n\n return () => {\n instance.destroy()\n }\n }, [])\n\n return editor\n}\n","import React from 'react'\nimport { AnyObject } from '@tiptap/core'\nimport { Editor } from './Editor'\n\nfunction isClassComponent(Component: any) {\n return !!(\n typeof Component === 'function'\n && Component.prototype\n && Component.prototype.isReactComponent\n )\n}\n\nexport interface ReactRendererOptions {\n as?: string,\n editor: Editor,\n props?: AnyObject,\n}\n\nexport class ReactRenderer {\n id: string\n\n editor: Editor\n\n component: any\n\n element: Element\n\n props: AnyObject\n\n reactElement: React.ReactNode\n\n ref: React.Component | null = null\n\n constructor(component: React.Component | React.FunctionComponent, { props = {}, editor }: ReactRendererOptions) {\n this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString()\n this.component = component\n this.editor = editor\n this.props = props\n this.element = document.createElement('div')\n this.element.classList.add('react-renderer')\n this.render()\n }\n\n render(): void {\n const Component = this.component\n const props = this.props\n\n if (isClassComponent(Component)) {\n props.ref = (ref: React.Component) => {\n this.ref = ref\n }\n }\n\n this.reactElement = <Component {...props } />\n\n if (this.editor?.contentComponent) {\n this.editor.contentComponent.setState({\n renderers: this.editor.contentComponent.state.renderers.set(\n this.id,\n this,\n ),\n })\n }\n }\n\n updateProps(props: AnyObject = {}): void {\n this.props = {\n ...this.props,\n ...props,\n }\n\n this.render()\n }\n\n destroy(): void {\n if (this.editor?.contentComponent) {\n const { renderers } = this.editor.contentComponent.state\n\n renderers.delete(this.id)\n\n this.editor.contentComponent.setState({\n renderers,\n })\n }\n }\n}\n","import { createContext, useContext } from 'react'\n\nexport interface ReactNodeViewContextProps {\n isEditable: boolean,\n onDragStart: (event: DragEvent) => void,\n}\n\nexport const ReactNodeViewContext = createContext<Partial<ReactNodeViewContextProps>>({\n isEditable: undefined,\n onDragStart: undefined,\n})\n\nexport const useReactNodeView = () => useContext(ReactNodeViewContext)\n","import React, { useState, useEffect } from 'react'\nimport {\n NodeView,\n NodeViewProps,\n NodeViewRenderer,\n NodeViewRendererProps,\n} from '@tiptap/core'\nimport { Decoration, NodeView as ProseMirrorNodeView } from 'prosemirror-view'\nimport { Node as ProseMirrorNode } from 'prosemirror-model'\nimport { Editor } from './Editor'\nimport { ReactRenderer } from './ReactRenderer'\nimport { ReactNodeViewContext } from './useReactNodeView'\n\ninterface ReactNodeViewRendererOptions {\n stopEvent: ((event: Event) => boolean) | null,\n update: ((node: ProseMirrorNode, decorations: Decoration[]) => boolean) | null,\n}\n\nclass ReactNodeView extends NodeView<React.FunctionComponent, Editor> {\n\n renderer!: ReactRenderer\n\n mount() {\n const props: NodeViewProps = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations,\n selected: false,\n extension: this.extension,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n }\n\n if (!(this.component as any).displayName) {\n const capitalizeFirstChar = (string: string): string => {\n return string.charAt(0).toUpperCase() + string.substring(1)\n }\n\n // @ts-ignore\n this.component.displayName = capitalizeFirstChar(this.extension.config.name)\n }\n\n const ReactNodeViewProvider: React.FunctionComponent = componentProps => {\n const [isEditable, setIsEditable] = useState(this.editor.isEditable)\n const onDragStart = this.onDragStart.bind(this)\n const onViewUpdate = () => setIsEditable(this.editor.isEditable)\n const Component = this.component\n\n useEffect(() => {\n this.editor.on('viewUpdate', onViewUpdate)\n\n return () => {\n this.editor.off('viewUpdate', onViewUpdate)\n }\n }, [])\n\n return (\n <ReactNodeViewContext.Provider value={{ onDragStart, isEditable }}>\n <Component {...componentProps} />\n </ReactNodeViewContext.Provider>\n )\n }\n\n ReactNodeViewProvider.displayName = 'ReactNodeView'\n\n this.renderer = new ReactRenderer(ReactNodeViewProvider, {\n editor: this.editor,\n props,\n })\n }\n\n get dom() {\n if (!this.renderer.element.firstElementChild?.hasAttribute('data-node-view-wrapper')) {\n throw Error('Please use the ReactViewWrapper component for your node view.')\n }\n\n return this.renderer.element\n }\n\n get contentDOM() {\n if (this.node.isLeaf) {\n return null\n }\n\n const contentElement = this.dom.querySelector('[data-node-view-content]')\n\n return contentElement || this.dom\n }\n\n update(node: ProseMirrorNode, decorations: Decoration[]) {\n if (typeof this.options.update === 'function') {\n return this.options.update(node, decorations)\n }\n\n if (node.type !== this.node.type) {\n return false\n }\n\n if (node === this.node && this.decorations === decorations) {\n return true\n }\n\n this.node = node\n this.decorations = decorations\n this.renderer.updateProps({ node, decorations })\n\n return true\n }\n\n selectNode() {\n this.renderer.updateProps({\n selected: true,\n })\n }\n\n deselectNode() {\n this.renderer.updateProps({\n selected: false,\n })\n }\n\n destroy() {\n this.renderer.destroy()\n }\n}\n\nexport function ReactNodeViewRenderer(component: any, options?: Partial<ReactNodeViewRendererOptions>): NodeViewRenderer {\n return (props: NodeViewRendererProps) => {\n // try to get the parent component\n // this is important for vue devtools to show the component hierarchy correctly\n // maybe it’s `undefined` because <editor-content> isn’t rendered yet\n if (!(props.editor as Editor).contentComponent) {\n return {}\n }\n\n return new ReactNodeView(component, props, options) as ProseMirrorNodeView\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Editor } from './Editor'\nimport { ReactRenderer } from './ReactRenderer'\n\nconst Portals: React.FC<{ renderers: Map<string, ReactRenderer> }> = ({ renderers }) => {\n return (\n <>\n {Array.from(renderers).map(([key, renderer]) => {\n return ReactDOM.createPortal(\n renderer.reactElement,\n renderer.element,\n key,\n )\n })}\n </>\n )\n}\n\nexport interface EditorContentProps {\n editor: Editor | null,\n}\n\nexport interface EditorContentState {\n renderers: Map<string, ReactRenderer>\n}\n\nexport class PureEditorContent extends React.Component<EditorContentProps, EditorContentState> {\n editorContentRef: React.RefObject<any>\n\n constructor(props: EditorContentProps) {\n super(props)\n this.editorContentRef = React.createRef()\n\n this.state = {\n renderers: new Map(),\n }\n }\n\n componentDidMount() {\n this.init()\n }\n\n componentDidUpdate() {\n this.init()\n }\n\n init() {\n const { editor } = this.props\n\n if (editor && editor.options.element) {\n if (editor.contentComponent) {\n return\n }\n\n const element = this.editorContentRef.current\n\n element.appendChild(editor.options.element.firstChild)\n\n editor.setOptions({\n element,\n })\n\n editor.contentComponent = this\n\n // TODO: alternative to setTimeout?\n setTimeout(() => editor.createNodeViews(), 0)\n }\n }\n\n componentWillUnmount() {\n const { editor } = this.props\n\n if (!editor) {\n return\n }\n\n if (!editor.isDestroyed) {\n editor.view.setProps({\n nodeViews: {},\n })\n }\n\n editor.contentComponent = null\n\n if (!editor.options.element.firstChild) {\n return\n }\n\n const newElement = document.createElement('div')\n\n newElement.appendChild(editor.options.element.firstChild)\n\n editor.setOptions({\n element: newElement,\n })\n }\n\n render() {\n return (\n <>\n <div ref={this.editorContentRef} />\n <Portals renderers={this.state.renderers} />\n </>\n )\n }\n}\n\nexport const EditorContent = React.memo(PureEditorContent)\n","import React from 'react'\nimport { useReactNodeView } from './useReactNodeView'\n\nexport interface NodeViewWrapperProps {\n className?: string,\n as: React.ElementType,\n}\n\nexport const NodeViewWrapper: React.FC<NodeViewWrapperProps> = props => {\n const { onDragStart } = useReactNodeView()\n const Tag = props.as || 'div'\n\n return (\n <Tag\n className={props.className}\n data-node-view-wrapper=\"\"\n onDragStart={onDragStart}\n style={{ whiteSpace: 'normal' }}\n >\n {props.children}\n </Tag>\n )\n}\n","import React from 'react'\nimport { useReactNodeView } from './useReactNodeView'\n\nexport interface NodeViewContentProps {\n className?: string,\n as: React.ElementType,\n}\n\nexport const NodeViewContent: React.FC<NodeViewContentProps> = props => {\n const { isEditable } = useReactNodeView()\n const Tag = props.as || 'div'\n\n return (\n <Tag\n className={props.className}\n data-node-view-content=\"\"\n contentEditable={isEditable}\n style={{ whiteSpace: 'pre-wrap' }}\n />\n )\n}\n"],"names":["useRef","useEffect","BubbleMenuPlugin","BubbleMenuPluginKey","React","CoreEditor","useState","createContext","useContext","NodeView","ReactDOM"],"mappings":"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"}
1
+ {"version":3,"file":"tiptap-react.umd.js","sources":["../src/BubbleMenu.tsx","../src/Editor.ts","../src/FloatingMenu.tsx","../src/useEditor.ts","../src/ReactRenderer.tsx","../src/useReactNodeView.ts","../src/ReactNodeViewRenderer.tsx","../src/EditorContent.tsx","../src/NodeViewWrapper.tsx","../src/NodeViewContent.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react'\nimport { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'\n\ntype Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>\n\nexport type BubbleMenuProps = Omit<Optional<BubbleMenuPluginProps, 'pluginKey'>, 'element'> & {\n className?: string,\n}\n\nexport const BubbleMenu: React.FC<BubbleMenuProps> = props => {\n const element = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!element.current) {\n return\n }\n\n const {\n pluginKey = 'bubbleMenu',\n editor,\n tippyOptions = {},\n shouldShow = null,\n } = props\n\n editor.registerPlugin(BubbleMenuPlugin({\n pluginKey,\n editor,\n element: element.current as HTMLElement,\n tippyOptions,\n shouldShow,\n }))\n\n return () => {\n editor.unregisterPlugin(pluginKey)\n }\n }, [\n props.editor,\n element.current,\n ])\n\n return (\n <div ref={element} className={props.className} style={{ visibility: 'hidden' }}>\n {props.children}\n </div>\n )\n}\n","import React from 'react'\nimport { Editor as CoreEditor } from '@tiptap/core'\nimport { EditorContentProps, EditorContentState } from './EditorContent'\n\nexport class Editor extends CoreEditor {\n public contentComponent: React.Component<EditorContentProps, EditorContentState> | null = null\n}\n","import React, { useEffect, useRef } from 'react'\nimport { FloatingMenuPlugin, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu'\n\ntype Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>\n\nexport type FloatingMenuProps = Omit<Optional<FloatingMenuPluginProps, 'pluginKey'>, 'element'> & {\n className?: string,\n}\n\nexport const FloatingMenu: React.FC<FloatingMenuProps> = props => {\n const element = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!element.current) {\n return\n }\n\n const {\n pluginKey = 'floatingMenu',\n editor,\n tippyOptions = {},\n shouldShow = null,\n } = props\n\n editor.registerPlugin(FloatingMenuPlugin({\n pluginKey,\n editor,\n element: element.current as HTMLElement,\n tippyOptions,\n shouldShow,\n }))\n\n return () => {\n editor.unregisterPlugin(pluginKey)\n }\n }, [\n props.editor,\n element.current,\n ])\n\n return (\n <div ref={element} className={props.className} style={{ visibility: 'hidden' }}>\n {props.children}\n </div>\n )\n}\n","import { useState, useEffect, DependencyList } from 'react'\nimport { EditorOptions } from '@tiptap/core'\nimport { Editor } from './Editor'\n\nfunction useForceUpdate() {\n const [, setValue] = useState(0)\n\n return () => setValue(value => value + 1)\n}\n\nexport const useEditor = (options: Partial<EditorOptions> = {}, deps: DependencyList = []) => {\n const [editor, setEditor] = useState<Editor | null>(null)\n const forceUpdate = useForceUpdate()\n\n useEffect(() => {\n const instance = new Editor(options)\n\n setEditor(instance)\n\n instance.on('transaction', () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n forceUpdate()\n })\n })\n })\n\n return () => {\n instance.destroy()\n }\n }, deps)\n\n return editor\n}\n","import React from 'react'\nimport { Editor } from '@tiptap/core'\nimport { Editor as ExtendedEditor } from './Editor'\n\nfunction isClassComponent(Component: any) {\n return !!(\n typeof Component === 'function'\n && Component.prototype\n && Component.prototype.isReactComponent\n )\n}\n\nfunction isForwardRefComponent(Component: any) {\n return !!(\n typeof Component === 'object'\n && Component.$$typeof?.toString() === 'Symbol(react.forward_ref)'\n )\n}\n\nexport interface ReactRendererOptions {\n editor: Editor,\n props?: Record<string, any>,\n as?: string,\n}\n\ntype ComponentType<R> =\n | React.ComponentClass\n | React.FunctionComponent\n | React.ForwardRefExoticComponent<{ items: any[], command: any } & React.RefAttributes<R>>\n\nexport class ReactRenderer<R = unknown> {\n id: string\n\n editor: ExtendedEditor\n\n component: any\n\n element: Element\n\n props: Record<string, any>\n\n reactElement: React.ReactNode\n\n ref: R | null = null\n\n constructor(component: ComponentType<R>, { editor, props = {}, as = 'div' }: ReactRendererOptions) {\n this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString()\n this.component = component\n this.editor = editor as ExtendedEditor\n this.props = props\n this.element = document.createElement(as)\n this.element.classList.add('react-renderer')\n this.render()\n }\n\n render(): void {\n const Component = this.component\n const props = this.props\n\n if (isClassComponent(Component) || isForwardRefComponent(Component)) {\n props.ref = (ref: R) => {\n this.ref = ref\n }\n }\n\n this.reactElement = <Component {...props } />\n\n if (this.editor?.contentComponent) {\n this.editor.contentComponent.setState({\n renderers: this.editor.contentComponent.state.renderers.set(\n this.id,\n this,\n ),\n })\n }\n }\n\n updateProps(props: Record<string, any> = {}): void {\n this.props = {\n ...this.props,\n ...props,\n }\n\n this.render()\n }\n\n destroy(): void {\n if (this.editor?.contentComponent) {\n const { renderers } = this.editor.contentComponent.state\n\n renderers.delete(this.id)\n\n this.editor.contentComponent.setState({\n renderers,\n })\n }\n }\n}\n","import { createContext, useContext } from 'react'\n\nexport interface ReactNodeViewContextProps {\n onDragStart: (event: DragEvent) => void,\n nodeViewContentRef: (element: HTMLElement | null) => void,\n}\n\nexport const ReactNodeViewContext = createContext<Partial<ReactNodeViewContextProps>>({\n onDragStart: undefined,\n})\n\nexport const useReactNodeView = () => useContext(ReactNodeViewContext)\n","import React from 'react'\nimport {\n NodeView,\n NodeViewProps,\n NodeViewRenderer,\n NodeViewRendererProps,\n NodeViewRendererOptions,\n} from '@tiptap/core'\nimport { Decoration, NodeView as ProseMirrorNodeView } from 'prosemirror-view'\nimport { Node as ProseMirrorNode } from 'prosemirror-model'\nimport { Editor } from './Editor'\nimport { ReactRenderer } from './ReactRenderer'\nimport { ReactNodeViewContext, ReactNodeViewContextProps } from './useReactNodeView'\n\nexport interface ReactNodeViewRendererOptions extends NodeViewRendererOptions {\n update: ((props: {\n oldNode: ProseMirrorNode,\n oldDecorations: Decoration[],\n newNode: ProseMirrorNode,\n newDecorations: Decoration[],\n updateProps: () => void,\n }) => boolean) | null,\n}\n\nclass ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeViewRendererOptions> {\n\n renderer!: ReactRenderer\n\n contentDOMElement!: HTMLElement | null\n\n mount() {\n const props: NodeViewProps = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations,\n selected: false,\n extension: this.extension,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n deleteNode: () => this.deleteNode(),\n }\n\n if (!(this.component as any).displayName) {\n const capitalizeFirstChar = (string: string): string => {\n return string.charAt(0).toUpperCase() + string.substring(1)\n }\n\n this.component.displayName = capitalizeFirstChar(this.extension.name)\n }\n\n const ReactNodeViewProvider: React.FunctionComponent = componentProps => {\n const Component = this.component\n const onDragStart = this.onDragStart.bind(this)\n const nodeViewContentRef: ReactNodeViewContextProps['nodeViewContentRef'] = element => {\n if (\n element\n && this.contentDOMElement\n && element.firstChild !== this.contentDOMElement\n ) {\n element.appendChild(this.contentDOMElement)\n }\n }\n\n return (\n <ReactNodeViewContext.Provider value={{ onDragStart, nodeViewContentRef }}>\n <Component {...componentProps} />\n </ReactNodeViewContext.Provider>\n )\n }\n\n ReactNodeViewProvider.displayName = 'ReactNodeView'\n\n this.contentDOMElement = this.node.isLeaf\n ? null\n : document.createElement(this.node.isInline ? 'span' : 'div')\n\n if (this.contentDOMElement) {\n // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari\n // With this fix it seems to work fine\n // See: https://github.com/ueberdosis/tiptap/issues/1197\n this.contentDOMElement.style.whiteSpace = 'inherit'\n }\n\n this.renderer = new ReactRenderer(ReactNodeViewProvider, {\n editor: this.editor,\n props,\n as: this.node.isInline\n ? 'span'\n : 'div',\n })\n }\n\n get dom() {\n if (\n this.renderer.element.firstElementChild\n && !this.renderer.element.firstElementChild?.hasAttribute('data-node-view-wrapper')\n ) {\n throw Error('Please use the NodeViewWrapper component for your node view.')\n }\n\n return this.renderer.element\n }\n\n get contentDOM() {\n if (this.node.isLeaf) {\n return null\n }\n\n return this.contentDOMElement\n }\n\n update(node: ProseMirrorNode, decorations: Decoration[]) {\n const updateProps = (props?: Record<string, any>) => {\n this.renderer.updateProps(props)\n }\n\n if (node.type !== this.node.type) {\n return false\n }\n\n if (typeof this.options.update === 'function') {\n const oldNode = this.node\n const oldDecorations = this.decorations\n\n this.node = node\n this.decorations = decorations\n\n return this.options.update({\n oldNode,\n oldDecorations,\n newNode: node,\n newDecorations: decorations,\n updateProps: () => updateProps({ node, decorations }),\n })\n }\n\n if (node === this.node && this.decorations === decorations) {\n return true\n }\n\n this.node = node\n this.decorations = decorations\n\n updateProps({ node, decorations })\n\n return true\n }\n\n selectNode() {\n this.renderer.updateProps({\n selected: true,\n })\n }\n\n deselectNode() {\n this.renderer.updateProps({\n selected: false,\n })\n }\n\n destroy() {\n this.renderer.destroy()\n this.contentDOMElement = null\n }\n}\n\nexport function ReactNodeViewRenderer(component: any, options?: Partial<ReactNodeViewRendererOptions>): NodeViewRenderer {\n return (props: NodeViewRendererProps) => {\n // try to get the parent component\n // this is important for vue devtools to show the component hierarchy correctly\n // maybe it’s `undefined` because <editor-content> isn’t rendered yet\n if (!(props.editor as Editor).contentComponent) {\n return {}\n }\n\n return new ReactNodeView(component, props, options) as ProseMirrorNodeView\n }\n}\n","import React, { HTMLProps } from 'react'\nimport ReactDOM from 'react-dom'\nimport { Editor } from './Editor'\nimport { ReactRenderer } from './ReactRenderer'\n\nconst Portals: React.FC<{ renderers: Map<string, ReactRenderer> }> = ({ renderers }) => {\n return (\n <>\n {Array.from(renderers).map(([key, renderer]) => {\n return ReactDOM.createPortal(\n renderer.reactElement,\n renderer.element,\n key,\n )\n })}\n </>\n )\n}\n\nexport interface EditorContentProps extends HTMLProps<HTMLDivElement> {\n editor: Editor | null,\n}\n\nexport interface EditorContentState {\n renderers: Map<string, ReactRenderer>\n}\n\nexport class PureEditorContent extends React.Component<EditorContentProps, EditorContentState> {\n editorContentRef: React.RefObject<any>\n\n constructor(props: EditorContentProps) {\n super(props)\n this.editorContentRef = React.createRef()\n\n this.state = {\n renderers: new Map(),\n }\n }\n\n componentDidMount() {\n this.init()\n }\n\n componentDidUpdate() {\n this.init()\n }\n\n init() {\n const { editor } = this.props\n\n if (editor && editor.options.element) {\n if (editor.contentComponent) {\n return\n }\n\n const element = this.editorContentRef.current\n\n element.append(...editor.options.element.childNodes)\n\n editor.setOptions({\n element,\n })\n\n editor.contentComponent = this\n\n editor.createNodeViews()\n }\n }\n\n componentWillUnmount() {\n const { editor } = this.props\n\n if (!editor) {\n return\n }\n\n if (!editor.isDestroyed) {\n editor.view.setProps({\n nodeViews: {},\n })\n }\n\n editor.contentComponent = null\n\n if (!editor.options.element.firstChild) {\n return\n }\n\n const newElement = document.createElement('div')\n\n newElement.append(...editor.options.element.childNodes)\n\n editor.setOptions({\n element: newElement,\n })\n }\n\n render() {\n const { editor, ...rest } = this.props\n\n return (\n <>\n <div ref={this.editorContentRef} {...rest} />\n <Portals renderers={this.state.renderers} />\n </>\n )\n }\n}\n\nexport const EditorContent = React.memo(PureEditorContent)\n","import React from 'react'\nimport { useReactNodeView } from './useReactNodeView'\n\nexport interface NodeViewWrapperProps {\n [key: string]: any,\n as?: React.ElementType,\n}\n\nexport const NodeViewWrapper: React.FC<NodeViewWrapperProps> = React.forwardRef((props, ref) => {\n const { onDragStart } = useReactNodeView()\n const Tag = props.as || 'div'\n\n return (\n <Tag\n {...props}\n ref={ref}\n data-node-view-wrapper=\"\"\n onDragStart={onDragStart}\n style={{\n ...props.style,\n whiteSpace: 'normal',\n }}\n />\n )\n})\n","import React from 'react'\nimport { useReactNodeView } from './useReactNodeView'\n\nexport interface NodeViewContentProps {\n [key: string]: any,\n as?: React.ElementType,\n}\n\nexport const NodeViewContent: React.FC<NodeViewContentProps> = props => {\n const Tag = props.as || 'div'\n const { nodeViewContentRef } = useReactNodeView()\n\n return (\n <Tag\n {...props}\n ref={nodeViewContentRef}\n data-node-view-content=\"\"\n style={{\n ...props.style,\n whiteSpace: 'pre-wrap',\n }}\n />\n )\n}\n"],"names":["useRef","useEffect","BubbleMenuPlugin","React","CoreEditor","FloatingMenuPlugin","useState","createContext","useContext","NodeView","ReactDOM"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiptap/react",
3
3
  "description": "React components for tiptap",
4
- "version": "2.0.0-beta.9",
4
+ "version": "2.0.0-beta.94",
5
5
  "homepage": "https://tiptap.dev",
6
6
  "keywords": [
7
7
  "tiptap",
@@ -15,23 +15,31 @@
15
15
  "main": "dist/tiptap-react.cjs.js",
16
16
  "umd": "dist/tiptap-react.umd.js",
17
17
  "module": "dist/tiptap-react.esm.js",
18
- "unpkg": "dist/tiptap-react.bundle.umd.min.js",
19
18
  "types": "dist/packages/react/src/index.d.ts",
20
19
  "files": [
21
20
  "src",
22
21
  "dist"
23
22
  ],
23
+ "devDependencies": {
24
+ "@types/react": "^17.0.35",
25
+ "@types/react-dom": "^17.0.11",
26
+ "react": "^17.0.0",
27
+ "react-dom": "^17.0.0"
28
+ },
24
29
  "peerDependencies": {
25
30
  "@tiptap/core": "^2.0.0-beta.1",
26
- "react": "^17.0.1",
27
- "react-dom": "^17.0.1"
31
+ "react": "^17.0.0",
32
+ "react-dom": "^17.0.0"
28
33
  },
29
34
  "dependencies": {
30
- "@tiptap/extension-bubble-menu": "^2.0.0-beta.3",
31
- "prosemirror-view": "^1.18.2"
35
+ "@tiptap/extension-bubble-menu": "^2.0.0-beta.50",
36
+ "@tiptap/extension-floating-menu": "^2.0.0-beta.45",
37
+ "prosemirror-view": "^1.23.1"
32
38
  },
33
- "devDependencies": {
34
- "@types/react-dom": "^17.0.3"
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/ueberdosis/tiptap",
42
+ "directory": "packages/react"
35
43
  },
36
- "gitHead": "3cf22b02c6cfba27b13f21422546f9076d5653e7"
44
+ "gitHead": "abe932384ce5fe14d3c0acb984978bbf2cf1f594"
37
45
  }
@@ -1,7 +1,9 @@
1
1
  import React, { useEffect, useRef } from 'react'
2
- import { BubbleMenuPlugin, BubbleMenuPluginKey, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'
2
+ import { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu'
3
3
 
4
- export type BubbleMenuProps = Omit<BubbleMenuPluginProps, 'element'> & {
4
+ type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>
5
+
6
+ export type BubbleMenuProps = Omit<Optional<BubbleMenuPluginProps, 'pluginKey'>, 'element'> & {
5
7
  className?: string,
6
8
  }
7
9
 
@@ -9,21 +11,35 @@ export const BubbleMenu: React.FC<BubbleMenuProps> = props => {
9
11
  const element = useRef<HTMLDivElement>(null)
10
12
 
11
13
  useEffect(() => {
12
- const { editor, keepInBounds = true } = props
14
+ if (!element.current) {
15
+ return
16
+ }
17
+
18
+ const {
19
+ pluginKey = 'bubbleMenu',
20
+ editor,
21
+ tippyOptions = {},
22
+ shouldShow = null,
23
+ } = props
13
24
 
14
25
  editor.registerPlugin(BubbleMenuPlugin({
26
+ pluginKey,
15
27
  editor,
16
28
  element: element.current as HTMLElement,
17
- keepInBounds,
29
+ tippyOptions,
30
+ shouldShow,
18
31
  }))
19
32
 
20
33
  return () => {
21
- editor.unregisterPlugin(BubbleMenuPluginKey)
34
+ editor.unregisterPlugin(pluginKey)
22
35
  }
23
- }, [])
36
+ }, [
37
+ props.editor,
38
+ element.current,
39
+ ])
24
40
 
25
41
  return (
26
- <div ref={element} className={props.className}>
42
+ <div ref={element} className={props.className} style={{ visibility: 'hidden' }}>
27
43
  {props.children}
28
44
  </div>
29
45
  )
@@ -1,4 +1,4 @@
1
- import React from 'react'
1
+ import React, { HTMLProps } from 'react'
2
2
  import ReactDOM from 'react-dom'
3
3
  import { Editor } from './Editor'
4
4
  import { ReactRenderer } from './ReactRenderer'
@@ -17,7 +17,7 @@ const Portals: React.FC<{ renderers: Map<string, ReactRenderer> }> = ({ renderer
17
17
  )
18
18
  }
19
19
 
20
- export interface EditorContentProps {
20
+ export interface EditorContentProps extends HTMLProps<HTMLDivElement> {
21
21
  editor: Editor | null,
22
22
  }
23
23
 
@@ -55,7 +55,7 @@ export class PureEditorContent extends React.Component<EditorContentProps, Edito
55
55
 
56
56
  const element = this.editorContentRef.current
57
57
 
58
- element.appendChild(editor.options.element.firstChild)
58
+ element.append(...editor.options.element.childNodes)
59
59
 
60
60
  editor.setOptions({
61
61
  element,
@@ -63,8 +63,7 @@ export class PureEditorContent extends React.Component<EditorContentProps, Edito
63
63
 
64
64
  editor.contentComponent = this
65
65
 
66
- // TODO: alternative to setTimeout?
67
- setTimeout(() => editor.createNodeViews(), 0)
66
+ editor.createNodeViews()
68
67
  }
69
68
  }
70
69
 
@@ -89,7 +88,7 @@ export class PureEditorContent extends React.Component<EditorContentProps, Edito
89
88
 
90
89
  const newElement = document.createElement('div')
91
90
 
92
- newElement.appendChild(editor.options.element.firstChild)
91
+ newElement.append(...editor.options.element.childNodes)
93
92
 
94
93
  editor.setOptions({
95
94
  element: newElement,
@@ -97,9 +96,11 @@ export class PureEditorContent extends React.Component<EditorContentProps, Edito
97
96
  }
98
97
 
99
98
  render() {
99
+ const { editor, ...rest } = this.props
100
+
100
101
  return (
101
102
  <>
102
- <div ref={this.editorContentRef} />
103
+ <div ref={this.editorContentRef} {...rest} />
103
104
  <Portals renderers={this.state.renderers} />
104
105
  </>
105
106
  )