@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
@@ -0,0 +1,46 @@
1
+ import React, { useEffect, useRef } from 'react'
2
+ import { FloatingMenuPlugin, FloatingMenuPluginProps } from '@tiptap/extension-floating-menu'
3
+
4
+ type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>
5
+
6
+ export type FloatingMenuProps = Omit<Optional<FloatingMenuPluginProps, 'pluginKey'>, 'element'> & {
7
+ className?: string,
8
+ }
9
+
10
+ export const FloatingMenu: React.FC<FloatingMenuProps> = props => {
11
+ const element = useRef<HTMLDivElement>(null)
12
+
13
+ useEffect(() => {
14
+ if (!element.current) {
15
+ return
16
+ }
17
+
18
+ const {
19
+ pluginKey = 'floatingMenu',
20
+ editor,
21
+ tippyOptions = {},
22
+ shouldShow = null,
23
+ } = props
24
+
25
+ editor.registerPlugin(FloatingMenuPlugin({
26
+ pluginKey,
27
+ editor,
28
+ element: element.current as HTMLElement,
29
+ tippyOptions,
30
+ shouldShow,
31
+ }))
32
+
33
+ return () => {
34
+ editor.unregisterPlugin(pluginKey)
35
+ }
36
+ }, [
37
+ props.editor,
38
+ element.current,
39
+ ])
40
+
41
+ return (
42
+ <div ref={element} className={props.className} style={{ visibility: 'hidden' }}>
43
+ {props.children}
44
+ </div>
45
+ )
46
+ }
@@ -2,20 +2,23 @@ import React from 'react'
2
2
  import { useReactNodeView } from './useReactNodeView'
3
3
 
4
4
  export interface NodeViewContentProps {
5
- className?: string,
6
- as: React.ElementType,
5
+ [key: string]: any,
6
+ as?: React.ElementType,
7
7
  }
8
8
 
9
9
  export const NodeViewContent: React.FC<NodeViewContentProps> = props => {
10
- const { isEditable } = useReactNodeView()
11
10
  const Tag = props.as || 'div'
11
+ const { nodeViewContentRef } = useReactNodeView()
12
12
 
13
13
  return (
14
14
  <Tag
15
- className={props.className}
15
+ {...props}
16
+ ref={nodeViewContentRef}
16
17
  data-node-view-content=""
17
- contentEditable={isEditable}
18
- style={{ whiteSpace: 'pre-wrap' }}
18
+ style={{
19
+ ...props.style,
20
+ whiteSpace: 'pre-wrap',
21
+ }}
19
22
  />
20
23
  )
21
24
  }
@@ -2,22 +2,24 @@ import React from 'react'
2
2
  import { useReactNodeView } from './useReactNodeView'
3
3
 
4
4
  export interface NodeViewWrapperProps {
5
- className?: string,
6
- as: React.ElementType,
5
+ [key: string]: any,
6
+ as?: React.ElementType,
7
7
  }
8
8
 
9
- export const NodeViewWrapper: React.FC<NodeViewWrapperProps> = props => {
9
+ export const NodeViewWrapper: React.FC<NodeViewWrapperProps> = React.forwardRef((props, ref) => {
10
10
  const { onDragStart } = useReactNodeView()
11
11
  const Tag = props.as || 'div'
12
12
 
13
13
  return (
14
14
  <Tag
15
- className={props.className}
15
+ {...props}
16
+ ref={ref}
16
17
  data-node-view-wrapper=""
17
18
  onDragStart={onDragStart}
18
- style={{ whiteSpace: 'normal' }}
19
- >
20
- {props.children}
21
- </Tag>
19
+ style={{
20
+ ...props.style,
21
+ whiteSpace: 'normal',
22
+ }}
23
+ />
22
24
  )
23
- }
25
+ })
@@ -1,25 +1,33 @@
1
- import React, { useState, useEffect } from 'react'
1
+ import React from 'react'
2
2
  import {
3
3
  NodeView,
4
4
  NodeViewProps,
5
5
  NodeViewRenderer,
6
6
  NodeViewRendererProps,
7
+ NodeViewRendererOptions,
7
8
  } from '@tiptap/core'
8
9
  import { Decoration, NodeView as ProseMirrorNodeView } from 'prosemirror-view'
9
10
  import { Node as ProseMirrorNode } from 'prosemirror-model'
10
11
  import { Editor } from './Editor'
11
12
  import { ReactRenderer } from './ReactRenderer'
12
- import { ReactNodeViewContext } from './useReactNodeView'
13
-
14
- interface ReactNodeViewRendererOptions {
15
- stopEvent: ((event: Event) => boolean) | null,
16
- update: ((node: ProseMirrorNode, decorations: Decoration[]) => boolean) | null,
13
+ import { ReactNodeViewContext, ReactNodeViewContextProps } from './useReactNodeView'
14
+
15
+ export interface ReactNodeViewRendererOptions extends NodeViewRendererOptions {
16
+ update: ((props: {
17
+ oldNode: ProseMirrorNode,
18
+ oldDecorations: Decoration[],
19
+ newNode: ProseMirrorNode,
20
+ newDecorations: Decoration[],
21
+ updateProps: () => void,
22
+ }) => boolean) | null,
17
23
  }
18
24
 
19
- class ReactNodeView extends NodeView<React.FunctionComponent, Editor> {
25
+ class ReactNodeView extends NodeView<React.FunctionComponent, Editor, ReactNodeViewRendererOptions> {
20
26
 
21
27
  renderer!: ReactRenderer
22
28
 
29
+ contentDOMElement!: HTMLElement | null
30
+
23
31
  mount() {
24
32
  const props: NodeViewProps = {
25
33
  editor: this.editor,
@@ -29,6 +37,7 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor> {
29
37
  extension: this.extension,
30
38
  getPos: () => this.getPos(),
31
39
  updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
40
+ deleteNode: () => this.deleteNode(),
32
41
  }
33
42
 
34
43
  if (!(this.component as any).displayName) {
@@ -36,26 +45,24 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor> {
36
45
  return string.charAt(0).toUpperCase() + string.substring(1)
37
46
  }
38
47
 
39
- // @ts-ignore
40
- this.component.displayName = capitalizeFirstChar(this.extension.config.name)
48
+ this.component.displayName = capitalizeFirstChar(this.extension.name)
41
49
  }
42
50
 
43
51
  const ReactNodeViewProvider: React.FunctionComponent = componentProps => {
44
- const [isEditable, setIsEditable] = useState(this.editor.isEditable)
45
- const onDragStart = this.onDragStart.bind(this)
46
- const onViewUpdate = () => setIsEditable(this.editor.isEditable)
47
52
  const Component = this.component
48
-
49
- useEffect(() => {
50
- this.editor.on('viewUpdate', onViewUpdate)
51
-
52
- return () => {
53
- this.editor.off('viewUpdate', onViewUpdate)
53
+ const onDragStart = this.onDragStart.bind(this)
54
+ const nodeViewContentRef: ReactNodeViewContextProps['nodeViewContentRef'] = element => {
55
+ if (
56
+ element
57
+ && this.contentDOMElement
58
+ && element.firstChild !== this.contentDOMElement
59
+ ) {
60
+ element.appendChild(this.contentDOMElement)
54
61
  }
55
- }, [])
62
+ }
56
63
 
57
64
  return (
58
- <ReactNodeViewContext.Provider value={{ onDragStart, isEditable }}>
65
+ <ReactNodeViewContext.Provider value={{ onDragStart, nodeViewContentRef }}>
59
66
  <Component {...componentProps} />
60
67
  </ReactNodeViewContext.Provider>
61
68
  )
@@ -63,15 +70,32 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor> {
63
70
 
64
71
  ReactNodeViewProvider.displayName = 'ReactNodeView'
65
72
 
73
+ this.contentDOMElement = this.node.isLeaf
74
+ ? null
75
+ : document.createElement(this.node.isInline ? 'span' : 'div')
76
+
77
+ if (this.contentDOMElement) {
78
+ // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari
79
+ // With this fix it seems to work fine
80
+ // See: https://github.com/ueberdosis/tiptap/issues/1197
81
+ this.contentDOMElement.style.whiteSpace = 'inherit'
82
+ }
83
+
66
84
  this.renderer = new ReactRenderer(ReactNodeViewProvider, {
67
85
  editor: this.editor,
68
86
  props,
87
+ as: this.node.isInline
88
+ ? 'span'
89
+ : 'div',
69
90
  })
70
91
  }
71
92
 
72
93
  get dom() {
73
- if (!this.renderer.element.firstElementChild?.hasAttribute('data-node-view-wrapper')) {
74
- throw Error('Please use the ReactViewWrapper component for your node view.')
94
+ if (
95
+ this.renderer.element.firstElementChild
96
+ && !this.renderer.element.firstElementChild?.hasAttribute('data-node-view-wrapper')
97
+ ) {
98
+ throw Error('Please use the NodeViewWrapper component for your node view.')
75
99
  }
76
100
 
77
101
  return this.renderer.element
@@ -82,14 +106,28 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor> {
82
106
  return null
83
107
  }
84
108
 
85
- const contentElement = this.dom.querySelector('[data-node-view-content]')
86
-
87
- return contentElement || this.dom
109
+ return this.contentDOMElement
88
110
  }
89
111
 
90
112
  update(node: ProseMirrorNode, decorations: Decoration[]) {
113
+ const updateProps = (props?: Record<string, any>) => {
114
+ this.renderer.updateProps(props)
115
+ }
116
+
91
117
  if (typeof this.options.update === 'function') {
92
- return this.options.update(node, decorations)
118
+ const oldNode = this.node
119
+ const oldDecorations = this.decorations
120
+
121
+ this.node = node
122
+ this.decorations = decorations
123
+
124
+ return this.options.update({
125
+ oldNode,
126
+ oldDecorations,
127
+ newNode: node,
128
+ newDecorations: decorations,
129
+ updateProps: () => updateProps({ node, decorations }),
130
+ })
93
131
  }
94
132
 
95
133
  if (node.type !== this.node.type) {
@@ -102,7 +140,8 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor> {
102
140
 
103
141
  this.node = node
104
142
  this.decorations = decorations
105
- this.renderer.updateProps({ node, decorations })
143
+
144
+ updateProps({ node, decorations })
106
145
 
107
146
  return true
108
147
  }
@@ -121,6 +160,7 @@ class ReactNodeView extends NodeView<React.FunctionComponent, Editor> {
121
160
 
122
161
  destroy() {
123
162
  this.renderer.destroy()
163
+ this.contentDOMElement = null
124
164
  }
125
165
  }
126
166
 
@@ -1,6 +1,6 @@
1
1
  import React from 'react'
2
- import { AnyObject } from '@tiptap/core'
3
- import { Editor } from './Editor'
2
+ import { Editor } from '@tiptap/core'
3
+ import { Editor as ExtendedEditor } from './Editor'
4
4
 
5
5
  function isClassComponent(Component: any) {
6
6
  return !!(
@@ -10,33 +10,45 @@ function isClassComponent(Component: any) {
10
10
  )
11
11
  }
12
12
 
13
+ function isForwardRefComponent(Component: any) {
14
+ return !!(
15
+ typeof Component === 'object'
16
+ && Component.$$typeof?.toString() === 'Symbol(react.forward_ref)'
17
+ )
18
+ }
19
+
13
20
  export interface ReactRendererOptions {
14
- as?: string,
15
21
  editor: Editor,
16
- props?: AnyObject,
22
+ props?: Record<string, any>,
23
+ as?: string,
17
24
  }
18
25
 
19
- export class ReactRenderer {
26
+ type ComponentType<R> =
27
+ | React.ComponentClass
28
+ | React.FunctionComponent
29
+ | React.ForwardRefExoticComponent<{ items: any[], command: any } & React.RefAttributes<R>>
30
+
31
+ export class ReactRenderer<R = unknown> {
20
32
  id: string
21
33
 
22
- editor: Editor
34
+ editor: ExtendedEditor
23
35
 
24
36
  component: any
25
37
 
26
38
  element: Element
27
39
 
28
- props: AnyObject
40
+ props: Record<string, any>
29
41
 
30
42
  reactElement: React.ReactNode
31
43
 
32
- ref: React.Component | null = null
44
+ ref: R | null = null
33
45
 
34
- constructor(component: React.Component | React.FunctionComponent, { props = {}, editor }: ReactRendererOptions) {
46
+ constructor(component: ComponentType<R>, { editor, props = {}, as = 'div' }: ReactRendererOptions) {
35
47
  this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString()
36
48
  this.component = component
37
- this.editor = editor
49
+ this.editor = editor as ExtendedEditor
38
50
  this.props = props
39
- this.element = document.createElement('div')
51
+ this.element = document.createElement(as)
40
52
  this.element.classList.add('react-renderer')
41
53
  this.render()
42
54
  }
@@ -45,8 +57,8 @@ export class ReactRenderer {
45
57
  const Component = this.component
46
58
  const props = this.props
47
59
 
48
- if (isClassComponent(Component)) {
49
- props.ref = (ref: React.Component) => {
60
+ if (isClassComponent(Component) || isForwardRefComponent(Component)) {
61
+ props.ref = (ref: R) => {
50
62
  this.ref = ref
51
63
  }
52
64
  }
@@ -63,7 +75,7 @@ export class ReactRenderer {
63
75
  }
64
76
  }
65
77
 
66
- updateProps(props: AnyObject = {}): void {
78
+ updateProps(props: Record<string, any> = {}): void {
67
79
  this.props = {
68
80
  ...this.props,
69
81
  ...props,
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from '@tiptap/core'
2
2
  export * from './BubbleMenu'
3
3
  export { Editor } from './Editor'
4
+ export * from './FloatingMenu'
4
5
  export * from './useEditor'
5
6
  export * from './ReactRenderer'
6
7
  export * from './ReactNodeViewRenderer'
package/src/useEditor.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { useState, useEffect } from 'react'
1
+ import { useState, useEffect, DependencyList } from 'react'
2
2
  import { EditorOptions } from '@tiptap/core'
3
3
  import { Editor } from './Editor'
4
4
 
@@ -8,7 +8,7 @@ function useForceUpdate() {
8
8
  return () => setValue(value => value + 1)
9
9
  }
10
10
 
11
- export const useEditor = (options: Partial<EditorOptions> = {}) => {
11
+ export const useEditor = (options: Partial<EditorOptions> = {}, deps: DependencyList = []) => {
12
12
  const [editor, setEditor] = useState<Editor | null>(null)
13
13
  const forceUpdate = useForceUpdate()
14
14
 
@@ -22,7 +22,7 @@ export const useEditor = (options: Partial<EditorOptions> = {}) => {
22
22
  return () => {
23
23
  instance.destroy()
24
24
  }
25
- }, [])
25
+ }, deps)
26
26
 
27
27
  return editor
28
28
  }
@@ -1,12 +1,11 @@
1
1
  import { createContext, useContext } from 'react'
2
2
 
3
3
  export interface ReactNodeViewContextProps {
4
- isEditable: boolean,
5
4
  onDragStart: (event: DragEvent) => void,
5
+ nodeViewContentRef: (element: HTMLElement | null) => void,
6
6
  }
7
7
 
8
8
  export const ReactNodeViewContext = createContext<Partial<ReactNodeViewContextProps>>({
9
- isEditable: undefined,
10
9
  onDragStart: undefined,
11
10
  })
12
11
 
package/CHANGELOG.md DELETED
@@ -1,72 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
- See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
-
6
- # [2.0.0-beta.8](https://github.com/ueberdosis/tiptap-next/compare/@tiptap/react@2.0.0-beta.7...@tiptap/react@2.0.0-beta.8) (2021-03-31)
7
-
8
- **Note:** Version bump only for package @tiptap/react
9
-
10
-
11
-
12
-
13
-
14
- # [2.0.0-beta.7](https://github.com/ueberdosis/tiptap-next/compare/@tiptap/react@2.0.0-beta.6...@tiptap/react@2.0.0-beta.7) (2021-03-31)
15
-
16
- **Note:** Version bump only for package @tiptap/react
17
-
18
-
19
-
20
-
21
-
22
- # [2.0.0-beta.6](https://github.com/ueberdosis/tiptap-next/compare/@tiptap/react@2.0.0-beta.5...@tiptap/react@2.0.0-beta.6) (2021-03-28)
23
-
24
- **Note:** Version bump only for package @tiptap/react
25
-
26
-
27
-
28
-
29
-
30
- # [2.0.0-beta.5](https://github.com/ueberdosis/tiptap-next/compare/@tiptap/react@2.0.0-beta.4...@tiptap/react@2.0.0-beta.5) (2021-03-24)
31
-
32
- **Note:** Version bump only for package @tiptap/react
33
-
34
-
35
-
36
-
37
-
38
- # [2.0.0-beta.4](https://github.com/ueberdosis/tiptap-next/compare/@tiptap/react@2.0.0-beta.3...@tiptap/react@2.0.0-beta.4) (2021-03-18)
39
-
40
- **Note:** Version bump only for package @tiptap/react
41
-
42
-
43
-
44
-
45
-
46
- # [2.0.0-beta.3](https://github.com/ueberdosis/tiptap-next/compare/@tiptap/react@2.0.0-beta.2...@tiptap/react@2.0.0-beta.3) (2021-03-16)
47
-
48
- **Note:** Version bump only for package @tiptap/react
49
-
50
-
51
-
52
-
53
-
54
- # [2.0.0-beta.2](https://github.com/ueberdosis/tiptap-next/compare/@tiptap/react@2.0.0-beta.1...@tiptap/react@2.0.0-beta.2) (2021-03-09)
55
-
56
- **Note:** Version bump only for package @tiptap/react
57
-
58
-
59
-
60
-
61
-
62
- # [2.0.0-beta.1](https://github.com/ueberdosis/tiptap-next/compare/@tiptap/react@2.0.0-alpha.2...@tiptap/react@2.0.0-beta.1) (2021-03-05)
63
-
64
- **Note:** Version bump only for package @tiptap/react
65
-
66
-
67
-
68
-
69
-
70
- # 2.0.0-alpha.2 (2021-02-26)
71
-
72
- **Note:** Version bump only for package @tiptap/react