@tiptap/react 2.0.0-beta.8 → 2.0.0-beta.83

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 (291) 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 +140 -0
  5. package/dist/packages/core/src/EventEmitter.d.ts +11 -0
  6. package/dist/packages/core/src/Extension.d.ts +194 -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 +278 -0
  10. package/dist/packages/core/src/Node.d.ts +340 -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 +207 -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/fromString.d.ts +1 -0
  125. package/dist/packages/core/src/utilities/isClass.d.ts +1 -0
  126. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -0
  127. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  128. package/dist/packages/core/src/utilities/isObject.d.ts +1 -0
  129. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -0
  130. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  131. package/dist/packages/core/src/utilities/isString.d.ts +1 -0
  132. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  133. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -0
  134. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -0
  135. package/dist/packages/core/src/utilities/minMax.d.ts +1 -0
  136. package/dist/packages/core/src/utilities/objectIncludes.d.ts +8 -0
  137. package/dist/packages/core/src/utilities/removeElement.d.ts +1 -0
  138. package/dist/packages/extension-blockquote/src/blockquote.d.ts +24 -0
  139. package/dist/packages/extension-blockquote/src/index.d.ts +3 -0
  140. package/dist/packages/extension-bold/src/bold.d.ts +27 -0
  141. package/dist/packages/extension-bold/src/index.d.ts +3 -0
  142. package/dist/packages/extension-bubble-menu/src/bubble-menu-plugin.d.ts +43 -0
  143. package/dist/packages/extension-bubble-menu/src/bubble-menu.d.ts +6 -0
  144. package/dist/packages/extension-bubble-menu/src/index.d.ts +4 -0
  145. package/dist/packages/extension-bullet-list/src/bullet-list.d.ts +16 -0
  146. package/dist/packages/extension-bullet-list/src/index.d.ts +3 -0
  147. package/dist/packages/extension-character-count/src/character-count.d.ts +7 -0
  148. package/dist/packages/extension-character-count/src/index.d.ts +3 -0
  149. package/dist/packages/extension-code/src/code.d.ts +25 -0
  150. package/dist/packages/extension-code/src/index.d.ts +3 -0
  151. package/dist/packages/extension-code-block/src/code-block.d.ts +26 -0
  152. package/dist/packages/extension-code-block/src/index.d.ts +3 -0
  153. package/dist/packages/extension-code-block-lowlight/src/code-block-lowlight.d.ts +5 -0
  154. package/dist/packages/extension-code-block-lowlight/src/index.d.ts +3 -0
  155. package/dist/packages/extension-code-block-lowlight/src/lowlight-plugin.d.ts +5 -0
  156. package/dist/packages/extension-collaboration/src/collaboration.d.ts +30 -0
  157. package/dist/packages/extension-collaboration/src/helpers/isChangeOrigin.d.ts +2 -0
  158. package/dist/packages/extension-collaboration/src/index.d.ts +4 -0
  159. package/dist/packages/extension-collaboration-cursor/src/collaboration-cursor.d.ts +21 -0
  160. package/dist/packages/extension-collaboration-cursor/src/index.d.ts +3 -0
  161. package/dist/packages/extension-color/src/color.d.ts +21 -0
  162. package/dist/packages/extension-color/src/index.d.ts +3 -0
  163. package/dist/packages/extension-document/src/document.d.ts +2 -0
  164. package/dist/packages/extension-document/src/index.d.ts +3 -0
  165. package/dist/packages/extension-dropcursor/src/dropcursor.d.ts +7 -0
  166. package/dist/packages/extension-dropcursor/src/index.d.ts +3 -0
  167. package/dist/packages/extension-floating-menu/src/floating-menu-plugin.d.ts +40 -0
  168. package/dist/packages/extension-floating-menu/src/floating-menu.d.ts +6 -0
  169. package/dist/packages/extension-floating-menu/src/index.d.ts +4 -0
  170. package/dist/packages/extension-focus/src/focus.d.ts +6 -0
  171. package/dist/packages/extension-focus/src/index.d.ts +3 -0
  172. package/dist/packages/extension-font-family/src/font-family.d.ts +21 -0
  173. package/dist/packages/extension-font-family/src/index.d.ts +3 -0
  174. package/dist/packages/extension-gapcursor/src/gapcursor.d.ts +14 -0
  175. package/dist/packages/extension-gapcursor/src/index.d.ts +3 -0
  176. package/dist/packages/extension-hard-break/src/hard-break.d.ts +16 -0
  177. package/dist/packages/extension-hard-break/src/index.d.ts +3 -0
  178. package/dist/packages/extension-heading/src/heading.d.ts +26 -0
  179. package/dist/packages/extension-heading/src/index.d.ts +3 -0
  180. package/dist/packages/extension-highlight/src/highlight.d.ts +30 -0
  181. package/dist/packages/extension-highlight/src/index.d.ts +3 -0
  182. package/dist/packages/extension-history/src/history.d.ts +20 -0
  183. package/dist/packages/extension-history/src/index.d.ts +3 -0
  184. package/dist/packages/extension-horizontal-rule/src/horizontal-rule.d.ts +15 -0
  185. package/dist/packages/extension-horizontal-rule/src/index.d.ts +3 -0
  186. package/dist/packages/extension-image/src/image.d.ts +21 -0
  187. package/dist/packages/extension-image/src/index.d.ts +3 -0
  188. package/dist/packages/extension-italic/src/index.d.ts +3 -0
  189. package/dist/packages/extension-italic/src/italic.d.ts +27 -0
  190. package/dist/packages/extension-link/src/index.d.ts +3 -0
  191. package/dist/packages/extension-link/src/link.d.ts +40 -0
  192. package/dist/packages/extension-list-item/src/index.d.ts +3 -0
  193. package/dist/packages/extension-list-item/src/list-item.d.ts +5 -0
  194. package/dist/packages/extension-mention/src/index.d.ts +3 -0
  195. package/dist/packages/extension-mention/src/mention.d.ts +14 -0
  196. package/dist/packages/extension-ordered-list/src/index.d.ts +3 -0
  197. package/dist/packages/extension-ordered-list/src/ordered-list.d.ts +16 -0
  198. package/dist/packages/extension-paragraph/src/index.d.ts +3 -0
  199. package/dist/packages/extension-paragraph/src/paragraph.d.ts +15 -0
  200. package/dist/packages/extension-placeholder/src/index.d.ts +3 -0
  201. package/dist/packages/extension-placeholder/src/placeholder.d.ts +15 -0
  202. package/dist/packages/extension-strike/src/index.d.ts +3 -0
  203. package/dist/packages/extension-strike/src/strike.d.ts +25 -0
  204. package/dist/packages/extension-subscript/src/index.d.ts +3 -0
  205. package/dist/packages/extension-subscript/src/subscript.d.ts +23 -0
  206. package/dist/packages/extension-superscript/src/index.d.ts +3 -0
  207. package/dist/packages/extension-superscript/src/superscript.d.ts +23 -0
  208. package/dist/packages/extension-table/src/TableView.d.ts +17 -0
  209. package/dist/packages/extension-table/src/index.d.ts +4 -0
  210. package/dist/packages/extension-table/src/table.d.ts +54 -0
  211. package/dist/packages/extension-table/src/utilities/createCell.d.ts +2 -0
  212. package/dist/packages/extension-table/src/utilities/createTable.d.ts +2 -0
  213. package/dist/packages/extension-table/src/utilities/deleteTableWhenAllCellsSelected.d.ts +2 -0
  214. package/dist/packages/extension-table/src/utilities/getTableNodeTypes.d.ts +4 -0
  215. package/dist/packages/extension-table/src/utilities/isCellSelection.d.ts +2 -0
  216. package/dist/packages/extension-table-cell/src/index.d.ts +3 -0
  217. package/dist/packages/extension-table-cell/src/table-cell.d.ts +5 -0
  218. package/dist/packages/extension-table-header/src/index.d.ts +3 -0
  219. package/dist/packages/extension-table-header/src/table-header.d.ts +5 -0
  220. package/dist/packages/extension-table-row/src/index.d.ts +3 -0
  221. package/dist/packages/extension-table-row/src/table-row.d.ts +5 -0
  222. package/dist/packages/extension-task-item/src/index.d.ts +3 -0
  223. package/dist/packages/extension-task-item/src/task-item.d.ts +7 -0
  224. package/dist/packages/extension-task-list/src/index.d.ts +3 -0
  225. package/dist/packages/extension-task-list/src/task-list.d.ts +15 -0
  226. package/dist/packages/extension-text/src/index.d.ts +3 -0
  227. package/dist/packages/extension-text/src/text.d.ts +2 -0
  228. package/dist/packages/extension-text-align/src/index.d.ts +3 -0
  229. package/dist/packages/extension-text-align/src/text-align.d.ts +21 -0
  230. package/dist/packages/extension-text-style/src/index.d.ts +3 -0
  231. package/dist/packages/extension-text-style/src/text-style.d.ts +15 -0
  232. package/dist/packages/extension-typography/src/index.d.ts +3 -0
  233. package/dist/packages/extension-typography/src/typography.d.ts +23 -0
  234. package/dist/packages/extension-underline/src/index.d.ts +3 -0
  235. package/dist/packages/extension-underline/src/underline.d.ts +23 -0
  236. package/dist/packages/html/src/generateHTML.d.ts +2 -0
  237. package/dist/packages/html/src/generateJSON.d.ts +2 -0
  238. package/dist/packages/html/src/getHTMLFromFragment.d.ts +2 -0
  239. package/dist/packages/html/src/index.d.ts +2 -0
  240. package/dist/packages/react/src/BubbleMenu.d.ts +3 -1
  241. package/dist/packages/react/src/EditorContent.d.ts +2 -2
  242. package/dist/packages/react/src/FloatingMenu.d.ts +8 -0
  243. package/dist/packages/react/src/NodeViewContent.d.ts +2 -2
  244. package/dist/packages/react/src/NodeViewWrapper.d.ts +2 -2
  245. package/dist/packages/react/src/ReactNodeViewRenderer.d.ts +9 -5
  246. package/dist/packages/react/src/ReactRenderer.d.ts +15 -10
  247. package/dist/packages/react/src/index.d.ts +1 -0
  248. package/dist/packages/react/src/useEditor.d.ts +2 -1
  249. package/dist/packages/react/src/useReactNodeView.d.ts +1 -1
  250. package/dist/packages/starter-kit/src/index.d.ts +3 -0
  251. package/dist/packages/starter-kit/src/starter-kit.d.ts +37 -0
  252. package/dist/packages/suggestion/src/findSuggestionMatch.d.ts +15 -0
  253. package/dist/packages/suggestion/src/index.d.ts +4 -0
  254. package/dist/packages/suggestion/src/suggestion.d.ts +46 -0
  255. package/dist/tests/cypress/integration/core/can.spec.d.ts +1 -0
  256. package/dist/tests/cypress/integration/core/editorProps.spec.d.ts +1 -0
  257. package/dist/tests/cypress/integration/core/extendExtensions.spec.d.ts +1 -0
  258. package/dist/tests/cypress/integration/core/extendMarkRange.spec.d.ts +1 -0
  259. package/dist/tests/cypress/integration/core/extensionOptions.spec.d.ts +1 -0
  260. package/dist/tests/cypress/integration/core/fromString.spec.d.ts +1 -0
  261. package/dist/tests/cypress/integration/core/generateHTML.spec.d.ts +1 -0
  262. package/dist/tests/cypress/integration/core/generateJSON.spec.d.ts +1 -0
  263. package/dist/tests/cypress/integration/core/isActive.spec.d.ts +1 -0
  264. package/dist/tests/cypress/integration/core/isClass.spec.d.ts +1 -0
  265. package/dist/tests/cypress/integration/core/mergeAttributes.spec.d.ts +1 -0
  266. package/dist/tests/cypress/integration/core/mergeDeep.spec.d.ts +1 -0
  267. package/dist/tests/cypress/integration/core/pluginOrder.spec.d.ts +1 -0
  268. package/dist/tests/cypress/integration/extensions/bold.spec.d.ts +1 -0
  269. package/dist/tests/cypress/integration/extensions/codeBlockLowlight.spec.d.ts +1 -0
  270. package/dist/tests/cypress/integration/html/generateHTML.spec.d.ts +1 -0
  271. package/dist/tests/cypress/integration/html/generateJSON.spec.d.ts +1 -0
  272. package/dist/tiptap-react.cjs.js +118 -51
  273. package/dist/tiptap-react.cjs.js.map +1 -1
  274. package/dist/tiptap-react.esm.js +111 -43
  275. package/dist/tiptap-react.esm.js.map +1 -1
  276. package/dist/tiptap-react.umd.js +122 -56
  277. package/dist/tiptap-react.umd.js.map +1 -1
  278. package/package.json +17 -9
  279. package/src/BubbleMenu.tsx +23 -7
  280. package/src/EditorContent.tsx +8 -7
  281. package/src/FloatingMenu.tsx +46 -0
  282. package/src/NodeViewContent.tsx +9 -6
  283. package/src/NodeViewWrapper.tsx +11 -9
  284. package/src/ReactNodeViewRenderer.tsx +67 -27
  285. package/src/ReactRenderer.tsx +26 -14
  286. package/src/index.ts +1 -0
  287. package/src/useEditor.ts +3 -3
  288. package/src/useReactNodeView.ts +1 -2
  289. package/CHANGELOG.md +0 -72
  290. package/dist/tiptap-react.bundle.umd.min.js +0 -54
  291. 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,11 +40,35 @@
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(() => {
@@ -46,7 +78,7 @@
46
78
  return () => {
47
79
  instance.destroy();
48
80
  };
49
- }, []);
81
+ }, deps);
50
82
  return editor;
51
83
  };
52
84
 
@@ -55,14 +87,19 @@
55
87
  && Component.prototype
56
88
  && Component.prototype.isReactComponent);
57
89
  }
90
+ function isForwardRefComponent(Component) {
91
+ var _a;
92
+ return !!(typeof Component === 'object'
93
+ && ((_a = Component.$$typeof) === null || _a === void 0 ? void 0 : _a.toString()) === 'Symbol(react.forward_ref)');
94
+ }
58
95
  class ReactRenderer {
59
- constructor(component, { props = {}, editor }) {
96
+ constructor(component, { editor, props = {}, as = 'div' }) {
60
97
  this.ref = null;
61
98
  this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString();
62
99
  this.component = component;
63
100
  this.editor = editor;
64
101
  this.props = props;
65
- this.element = document.createElement('div');
102
+ this.element = document.createElement(as);
66
103
  this.element.classList.add('react-renderer');
67
104
  this.render();
68
105
  }
@@ -70,12 +107,12 @@
70
107
  var _a;
71
108
  const Component = this.component;
72
109
  const props = this.props;
73
- if (isClassComponent(Component)) {
110
+ if (isClassComponent(Component) || isForwardRefComponent(Component)) {
74
111
  props.ref = (ref) => {
75
112
  this.ref = ref;
76
113
  };
77
114
  }
78
- this.reactElement = React__default['default'].createElement(Component, Object.assign({}, props));
115
+ this.reactElement = React__default["default"].createElement(Component, { ...props });
79
116
  if ((_a = this.editor) === null || _a === void 0 ? void 0 : _a.contentComponent) {
80
117
  this.editor.contentComponent.setState({
81
118
  renderers: this.editor.contentComponent.state.renderers.set(this.id, this),
@@ -102,7 +139,6 @@
102
139
  }
103
140
 
104
141
  const ReactNodeViewContext = React.createContext({
105
- isEditable: undefined,
106
142
  onDragStart: undefined,
107
143
  });
108
144
  const useReactNodeView = () => React.useContext(ReactNodeViewContext);
@@ -117,38 +153,50 @@
117
153
  extension: this.extension,
118
154
  getPos: () => this.getPos(),
119
155
  updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
156
+ deleteNode: () => this.deleteNode(),
120
157
  };
121
158
  if (!this.component.displayName) {
122
159
  const capitalizeFirstChar = (string) => {
123
160
  return string.charAt(0).toUpperCase() + string.substring(1);
124
161
  };
125
- // @ts-ignore
126
- this.component.displayName = capitalizeFirstChar(this.extension.config.name);
162
+ this.component.displayName = capitalizeFirstChar(this.extension.name);
127
163
  }
128
164
  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
165
  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))));
166
+ const onDragStart = this.onDragStart.bind(this);
167
+ const nodeViewContentRef = element => {
168
+ if (element
169
+ && this.contentDOMElement
170
+ && element.firstChild !== this.contentDOMElement) {
171
+ element.appendChild(this.contentDOMElement);
172
+ }
173
+ };
174
+ return (React__default["default"].createElement(ReactNodeViewContext.Provider, { value: { onDragStart, nodeViewContentRef } },
175
+ React__default["default"].createElement(Component, { ...componentProps })));
141
176
  };
142
177
  ReactNodeViewProvider.displayName = 'ReactNodeView';
178
+ this.contentDOMElement = this.node.isLeaf
179
+ ? null
180
+ : document.createElement(this.node.isInline ? 'span' : 'div');
181
+ if (this.contentDOMElement) {
182
+ // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari
183
+ // With this fix it seems to work fine
184
+ // See: https://github.com/ueberdosis/tiptap/issues/1197
185
+ this.contentDOMElement.style.whiteSpace = 'inherit';
186
+ }
143
187
  this.renderer = new ReactRenderer(ReactNodeViewProvider, {
144
188
  editor: this.editor,
145
189
  props,
190
+ as: this.node.isInline
191
+ ? 'span'
192
+ : 'div',
146
193
  });
147
194
  }
148
195
  get dom() {
149
196
  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.');
197
+ if (this.renderer.element.firstElementChild
198
+ && !((_a = this.renderer.element.firstElementChild) === null || _a === void 0 ? void 0 : _a.hasAttribute('data-node-view-wrapper'))) {
199
+ throw Error('Please use the NodeViewWrapper component for your node view.');
152
200
  }
153
201
  return this.renderer.element;
154
202
  }
@@ -156,12 +204,24 @@
156
204
  if (this.node.isLeaf) {
157
205
  return null;
158
206
  }
159
- const contentElement = this.dom.querySelector('[data-node-view-content]');
160
- return contentElement || this.dom;
207
+ return this.contentDOMElement;
161
208
  }
162
209
  update(node, decorations) {
210
+ const updateProps = (props) => {
211
+ this.renderer.updateProps(props);
212
+ };
163
213
  if (typeof this.options.update === 'function') {
164
- return this.options.update(node, decorations);
214
+ const oldNode = this.node;
215
+ const oldDecorations = this.decorations;
216
+ this.node = node;
217
+ this.decorations = decorations;
218
+ return this.options.update({
219
+ oldNode,
220
+ oldDecorations,
221
+ newNode: node,
222
+ newDecorations: decorations,
223
+ updateProps: () => updateProps({ node, decorations }),
224
+ });
165
225
  }
166
226
  if (node.type !== this.node.type) {
167
227
  return false;
@@ -171,7 +231,7 @@
171
231
  }
172
232
  this.node = node;
173
233
  this.decorations = decorations;
174
- this.renderer.updateProps({ node, decorations });
234
+ updateProps({ node, decorations });
175
235
  return true;
176
236
  }
177
237
  selectNode() {
@@ -186,6 +246,7 @@
186
246
  }
187
247
  destroy() {
188
248
  this.renderer.destroy();
249
+ this.contentDOMElement = null;
189
250
  }
190
251
  }
191
252
  function ReactNodeViewRenderer(component, options) {
@@ -201,14 +262,14 @@
201
262
  }
202
263
 
203
264
  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);
265
+ return (React__default["default"].createElement(React__default["default"].Fragment, null, Array.from(renderers).map(([key, renderer]) => {
266
+ return ReactDOM__default["default"].createPortal(renderer.reactElement, renderer.element, key);
206
267
  })));
207
268
  };
208
- class PureEditorContent extends React__default['default'].Component {
269
+ class PureEditorContent extends React__default["default"].Component {
209
270
  constructor(props) {
210
271
  super(props);
211
- this.editorContentRef = React__default['default'].createRef();
272
+ this.editorContentRef = React__default["default"].createRef();
212
273
  this.state = {
213
274
  renderers: new Map(),
214
275
  };
@@ -226,13 +287,12 @@
226
287
  return;
227
288
  }
228
289
  const element = this.editorContentRef.current;
229
- element.appendChild(editor.options.element.firstChild);
290
+ element.append(...editor.options.element.childNodes);
230
291
  editor.setOptions({
231
292
  element,
232
293
  });
233
294
  editor.contentComponent = this;
234
- // TODO: alternative to setTimeout?
235
- setTimeout(() => editor.createNodeViews(), 0);
295
+ editor.createNodeViews();
236
296
  }
237
297
  }
238
298
  componentWillUnmount() {
@@ -250,34 +310,42 @@
250
310
  return;
251
311
  }
252
312
  const newElement = document.createElement('div');
253
- newElement.appendChild(editor.options.element.firstChild);
313
+ newElement.append(...editor.options.element.childNodes);
254
314
  editor.setOptions({
255
315
  element: newElement,
256
316
  });
257
317
  }
258
318
  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 })));
319
+ const { editor, ...rest } = this.props;
320
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
321
+ React__default["default"].createElement("div", { ref: this.editorContentRef, ...rest }),
322
+ React__default["default"].createElement(Portals, { renderers: this.state.renderers })));
262
323
  }
263
324
  }
264
- const EditorContent = React__default['default'].memo(PureEditorContent);
325
+ const EditorContent = React__default["default"].memo(PureEditorContent);
265
326
 
266
- const NodeViewWrapper = props => {
327
+ const NodeViewWrapper = React__default["default"].forwardRef((props, ref) => {
267
328
  const { onDragStart } = useReactNodeView();
268
329
  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
- };
330
+ return (React__default["default"].createElement(Tag, { ...props, ref: ref, "data-node-view-wrapper": "", onDragStart: onDragStart, style: {
331
+ ...props.style,
332
+ whiteSpace: 'normal',
333
+ } }));
334
+ });
271
335
 
272
336
  const NodeViewContent = props => {
273
- const { isEditable } = useReactNodeView();
274
337
  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' } }));
338
+ const { nodeViewContentRef } = useReactNodeView();
339
+ return (React__default["default"].createElement(Tag, { ...props, ref: nodeViewContentRef, "data-node-view-content": "", style: {
340
+ ...props.style,
341
+ whiteSpace: 'pre-wrap',
342
+ } }));
276
343
  };
277
344
 
278
345
  exports.BubbleMenu = BubbleMenu;
279
346
  exports.Editor = Editor;
280
347
  exports.EditorContent = EditorContent;
348
+ exports.FloatingMenu = FloatingMenu;
281
349
  exports.NodeViewContent = NodeViewContent;
282
350
  exports.NodeViewWrapper = NodeViewWrapper;
283
351
  exports.PureEditorContent = PureEditorContent;
@@ -287,13 +355,11 @@
287
355
  Object.keys(core).forEach(function (k) {
288
356
  if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
289
357
  enumerable: true,
290
- get: function () {
291
- return core[k];
292
- }
358
+ get: function () { return core[k]; }
293
359
  });
294
360
  });
295
361
 
296
362
  Object.defineProperty(exports, '__esModule', { value: true });
297
363
 
298
- })));
364
+ }));
299
365
  //# 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', forceUpdate)\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 (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.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\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":";;;;;;;;;;;QASa,UAAU,GAA8B,KAAK;MACxD,MAAM,OAAO,GAAGA,YAAM,CAAiB,IAAI,CAAC,CAAA;MAE5CC,eAAS,CAAC;UACR,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;cACpB,OAAM;WACP;UAED,MAAM,EACJ,SAAS,GAAG,YAAY,EACxB,MAAM,EACN,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,IAAI,GAClB,GAAG,KAAK,CAAA;UAET,MAAM,CAAC,cAAc,CAACC,oCAAgB,CAAC;cACrC,SAAS;cACT,MAAM;cACN,OAAO,EAAE,OAAO,CAAC,OAAsB;cACvC,YAAY;cACZ,UAAU;WACX,CAAC,CAAC,CAAA;UAEH,OAAO;cACL,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;WACnC,CAAA;OACF,EAAE;UACD,KAAK,CAAC,MAAM;UACZ,OAAO,CAAC,OAAO;OAChB,CAAC,CAAA;MAEF,QACEC,iDAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAC3E,KAAK,CAAC,QAAQ,CACX,EACP;EACH;;QCzCa,MAAO,SAAQC,WAAU;MAAtC;;UACS,qBAAgB,GAAmE,IAAI,CAAA;OAC/F;;;QCGY,YAAY,GAAgC,KAAK;MAC5D,MAAM,OAAO,GAAGJ,YAAM,CAAiB,IAAI,CAAC,CAAA;MAE5CC,eAAS,CAAC;UACR,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;cACpB,OAAM;WACP;UAED,MAAM,EACJ,SAAS,GAAG,cAAc,EAC1B,MAAM,EACN,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,IAAI,GAClB,GAAG,KAAK,CAAA;UAET,MAAM,CAAC,cAAc,CAACI,wCAAkB,CAAC;cACvC,SAAS;cACT,MAAM;cACN,OAAO,EAAE,OAAO,CAAC,OAAsB;cACvC,YAAY;cACZ,UAAU;WACX,CAAC,CAAC,CAAA;UAEH,OAAO;cACL,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;WACnC,CAAA;OACF,EAAE;UACD,KAAK,CAAC,MAAM;UACZ,OAAO,CAAC,OAAO;OAChB,CAAC,CAAA;MAEF,QACEF,iDAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAC3E,KAAK,CAAC,QAAQ,CACX,EACP;EACH;;ECzCA,SAAS,cAAc;MACrB,MAAM,GAAG,QAAQ,CAAC,GAAGG,cAAQ,CAAC,CAAC,CAAC,CAAA;MAEhC,OAAO,MAAM,QAAQ,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;EAC3C,CAAC;QAEY,SAAS,GAAG,CAAC,UAAkC,EAAE,EAAE,OAAuB,EAAE;MACvF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAAgB,IAAI,CAAC,CAAA;MACzD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;MAEpCL,eAAS,CAAC;UACR,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;UAEpC,SAAS,CAAC,QAAQ,CAAC,CAAA;UAEnB,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;UAEvC,OAAO;cACL,QAAQ,CAAC,OAAO,EAAE,CAAA;WACnB,CAAA;OACF,EAAE,IAAI,CAAC,CAAA;MAER,OAAO,MAAM,CAAA;EACf;;ECvBA,SAAS,gBAAgB,CAAC,SAAc;MACtC,OAAO,CAAC,EACN,OAAO,SAAS,KAAK,UAAU;aAC5B,SAAS,CAAC,SAAS;aACnB,SAAS,CAAC,SAAS,CAAC,gBAAgB,CACxC,CAAA;EACH,CAAC;EAED,SAAS,qBAAqB,CAAC,SAAc;;MAC3C,OAAO,CAAC,EACN,OAAO,SAAS,KAAK,QAAQ;aAC1B,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,QAAQ,EAAE,MAAK,2BAA2B,CAClE,CAAA;EACH,CAAC;QAaY,aAAa;MAexB,YAAY,SAA2B,EAAE,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAwB;UAFjG,QAAG,GAAa,IAAI,CAAA;UAGlB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAA;UAC3D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;UAC1B,IAAI,CAAC,MAAM,GAAG,MAAwB,CAAA;UACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;UAClB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;UACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;UAC5C,IAAI,CAAC,MAAM,EAAE,CAAA;OACd;MAED,MAAM;;UACJ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;UAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;UAExB,IAAI,gBAAgB,CAAC,SAAS,CAAC,IAAI,qBAAqB,CAAC,SAAS,CAAC,EAAE;cACnE,KAAK,CAAC,GAAG,GAAG,CAAC,GAAM;kBACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;eACf,CAAA;WACF;UAED,IAAI,CAAC,YAAY,GAAGE,wCAAC,SAAS,OAAK,KAAK,GAAK,CAAA;UAE7C,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,gBAAgB,EAAE;cACjC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;kBACpC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CACzD,IAAI,CAAC,EAAE,EACP,IAAI,CACL;eACF,CAAC,CAAA;WACH;OACF;MAED,WAAW,CAAC,QAA6B,EAAE;UACzC,IAAI,CAAC,KAAK,GAAG;cACX,GAAG,IAAI,CAAC,KAAK;cACb,GAAG,KAAK;WACT,CAAA;UAED,IAAI,CAAC,MAAM,EAAE,CAAA;OACd;MAED,OAAO;;UACL,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,gBAAgB,EAAE;cACjC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAA;cAExD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;cAEzB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;kBACpC,SAAS;eACV,CAAC,CAAA;WACH;OACF;;;ECzFI,MAAM,oBAAoB,GAAGI,mBAAa,CAAqC;MACpF,WAAW,EAAE,SAAS;GACvB,CAAC,CAAA;EAEK,MAAM,gBAAgB,GAAG,MAAMC,gBAAU,CAAC,oBAAoB,CAAC;;ECatE,MAAM,aAAc,SAAQC,aAAuE;MAMjG,KAAK;UACH,MAAM,KAAK,GAAkB;cAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;cACnB,IAAI,EAAE,IAAI,CAAC,IAAI;cACf,WAAW,EAAE,IAAI,CAAC,WAAW;cAC7B,QAAQ,EAAE,KAAK;cACf,SAAS,EAAE,IAAI,CAAC,SAAS;cACzB,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;cAC3B,gBAAgB,EAAE,CAAC,UAAU,GAAG,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;cACxE,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;WACpC,CAAA;UAED,IAAI,CAAE,IAAI,CAAC,SAAiB,CAAC,WAAW,EAAE;cACxC,MAAM,mBAAmB,GAAG,CAAC,MAAc;kBACzC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;eAC5D,CAAA;cAED,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;WACtE;UAED,MAAM,qBAAqB,GAA4B,cAAc;cACnE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;cAChC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;cAC/C,MAAM,kBAAkB,GAAoD,OAAO;kBACjF,IACE,OAAO;yBACJ,IAAI,CAAC,iBAAiB;yBACtB,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,iBAAiB,EAChD;sBACA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;mBAC5C;eACF,CAAA;cAED,QACEN,wCAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE;kBACvEA,wCAAC,SAAS,OAAK,cAAc,GAAI,CACH,EACjC;WACF,CAAA;UAED,qBAAqB,CAAC,WAAW,GAAG,eAAe,CAAA;UAEnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;gBACrC,IAAI;gBACJ,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,CAAA;UAE/D,IAAI,IAAI,CAAC,iBAAiB,EAAE;;;;cAI1B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAA;WACpD;UAED,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,qBAAqB,EAAE;cACvD,MAAM,EAAE,IAAI,CAAC,MAAM;cACnB,KAAK;cACL,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAClB,MAAM;oBACN,KAAK;WACV,CAAC,CAAA;OACH;MAED,IAAI,GAAG;;UACL,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB;iBACpC,EAAC,MAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,0CAAE,YAAY,CAAC,wBAAwB,CAAC,CAAA,EACnF;cACA,MAAM,KAAK,CAAC,8DAA8D,CAAC,CAAA;WAC5E;UAED,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;OAC7B;MAED,IAAI,UAAU;UACZ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;cACpB,OAAO,IAAI,CAAA;WACZ;UAED,OAAO,IAAI,CAAC,iBAAiB,CAAA;OAC9B;MAED,MAAM,CAAC,IAAqB,EAAE,WAAyB;UACrD,MAAM,WAAW,GAAG,CAAC,KAA2B;cAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;WACjC,CAAA;UAED,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE;cAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;cACzB,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAA;cAEvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;cAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;cAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;kBACzB,OAAO;kBACP,cAAc;kBACd,OAAO,EAAE,IAAI;kBACb,cAAc,EAAE,WAAW;kBAC3B,WAAW,EAAE,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;eACtD,CAAC,CAAA;WACH;UAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;cAChC,OAAO,KAAK,CAAA;WACb;UAED,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;cAC1D,OAAO,IAAI,CAAA;WACZ;UAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;UAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;UAE9B,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;UAElC,OAAO,IAAI,CAAA;OACZ;MAED,UAAU;UACR,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;cACxB,QAAQ,EAAE,IAAI;WACf,CAAC,CAAA;OACH;MAED,YAAY;UACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;cACxB,QAAQ,EAAE,KAAK;WAChB,CAAC,CAAA;OACH;MAED,OAAO;UACL,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;UACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;OAC9B;GACF;WAEe,qBAAqB,CAAC,SAAc,EAAE,OAA+C;MACnG,OAAO,CAAC,KAA4B;;;;UAIlC,IAAI,CAAE,KAAK,CAAC,MAAiB,CAAC,gBAAgB,EAAE;cAC9C,OAAO,EAAE,CAAA;WACV;UAED,OAAO,IAAI,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAwB,CAAA;OAC3E,CAAA;EACH;;EC5KA,MAAM,OAAO,GAAwD,CAAC,EAAE,SAAS,EAAE;MACjF,QACEA,kFACG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC;UACzC,OAAOO,4BAAQ,CAAC,YAAY,CAC1B,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,OAAO,EAChB,GAAG,CACJ,CAAA;OACF,CAAC,CACD,EACJ;EACH,CAAC,CAAA;QAUY,iBAAkB,SAAQP,yBAAK,CAAC,SAAiD;MAG5F,YAAY,KAAyB;UACnC,KAAK,CAAC,KAAK,CAAC,CAAA;UACZ,IAAI,CAAC,gBAAgB,GAAGA,yBAAK,CAAC,SAAS,EAAE,CAAA;UAEzC,IAAI,CAAC,KAAK,GAAG;cACX,SAAS,EAAE,IAAI,GAAG,EAAE;WACrB,CAAA;OACF;MAED,iBAAiB;UACf,IAAI,CAAC,IAAI,EAAE,CAAA;OACZ;MAED,kBAAkB;UAChB,IAAI,CAAC,IAAI,EAAE,CAAA;OACZ;MAED,IAAI;UACF,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;UAE7B,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;cACpC,IAAI,MAAM,CAAC,gBAAgB,EAAE;kBAC3B,OAAM;eACP;cAED,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAA;cAE7C,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;cAEpD,MAAM,CAAC,UAAU,CAAC;kBAChB,OAAO;eACR,CAAC,CAAA;cAEF,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAA;cAE9B,MAAM,CAAC,eAAe,EAAE,CAAA;WACzB;OACF;MAED,oBAAoB;UAClB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;UAE7B,IAAI,CAAC,MAAM,EAAE;cACX,OAAM;WACP;UAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;cACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;kBACnB,SAAS,EAAE,EAAE;eACd,CAAC,CAAA;WACH;UAED,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAA;UAE9B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE;cACtC,OAAM;WACP;UAED,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;UAEhD,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;UAEvD,MAAM,CAAC,UAAU,CAAC;cAChB,OAAO,EAAE,UAAU;WACpB,CAAC,CAAA;OACH;MAED,MAAM;UACJ,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;UAEtC,QACEA;cACEA,iDAAK,GAAG,EAAE,IAAI,CAAC,gBAAgB,KAAM,IAAI,GAAI;cAC7CA,wCAAC,OAAO,IAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAI,CAC3C,EACJ;OACF;GACF;QAEY,aAAa,GAAGA,yBAAK,CAAC,IAAI,CAAC,iBAAiB;;QCrG5C,eAAe,GAAmCA,yBAAK,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG;MACzF,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAA;MAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAA;MAE7B,QACEA,wCAAC,GAAG,OACE,KAAK,EACT,GAAG,EAAE,GAAG,4BACe,EAAE,EACzB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE;cACL,GAAG,KAAK,CAAC,KAAK;cACd,UAAU,EAAE,QAAQ;WACrB,GACD,EACH;EACH,CAAC;;QChBY,eAAe,GAAmC,KAAK;MAClE,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAA;MAC7B,MAAM,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,EAAE,CAAA;MAEjD,QACEA,wCAAC,GAAG,OACE,KAAK,EACT,GAAG,EAAE,kBAAkB,4BACA,EAAE,EACzB,KAAK,EAAE;cACL,GAAG,KAAK,CAAC,KAAK;cACd,UAAU,EAAE,UAAU;WACvB,GACD,EACH;EACH;;;;;;;;;;;;;;;;;;;;;;;;;"}
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.8",
4
+ "version": "2.0.0-beta.83",
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.29",
25
+ "@types/react-dom": "^17.0.7",
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.2",
31
- "prosemirror-view": "^1.18.2"
35
+ "@tiptap/extension-bubble-menu": "^2.0.0-beta.42",
36
+ "@tiptap/extension-floating-menu": "^2.0.0-beta.36",
37
+ "prosemirror-view": "^1.20.3"
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": "62b46ab15a3c1f5b29a11ca0d9c59ce9e4e99e58"
44
+ "gitHead": "9948e2499a3aa6ca72b677ef2ca96de1db1cb6b5"
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
  )