diff --git a/docs/src/demos/Extensions/BubbleMenu/React/index.jsx b/docs/src/demos/Extensions/BubbleMenu/React/index.jsx index 0fc08921..01787e1f 100644 --- a/docs/src/demos/Extensions/BubbleMenu/React/index.jsx +++ b/docs/src/demos/Extensions/BubbleMenu/React/index.jsx @@ -1,5 +1,5 @@ import React from 'react' -import { useEditor, EditorContent } from '@tiptap/react' +import { useEditor, EditorContent, BubbleMenu } from '@tiptap/react' import { defaultExtensions } from '@tiptap/starter-kit' import './styles.scss' @@ -16,7 +16,27 @@ export default () => { }) return ( -
+
+ {editor && + + + + }
) diff --git a/packages/react/package.json b/packages/react/package.json index 41f94b8a..0daa57ac 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -27,6 +27,7 @@ "react-dom": "^17.0.1" }, "dependencies": { + "@tiptap/extension-bubble-menu": "^2.0.0-beta.0", "prosemirror-view": "^1.18.2" }, "devDependencies": { diff --git a/packages/react/src/BubbleMenu.tsx b/packages/react/src/BubbleMenu.tsx new file mode 100644 index 00000000..cdaef6ad --- /dev/null +++ b/packages/react/src/BubbleMenu.tsx @@ -0,0 +1,28 @@ +import React, { useEffect, useRef } from 'react' +import { BubbleMenuPlugin, BubbleMenuPluginKey, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu' + +export type BubbleMenuProps = Omit + +export const BubbleMenu: React.FC = (props) => { + const element = useRef(null) + + useEffect(() => { + const { editor, keepInBounds } = props + + editor.registerPlugin(BubbleMenuPlugin({ + editor, + element: element.current as HTMLElement, + keepInBounds, + })) + + return () => { + editor.unregisterPlugin(BubbleMenuPluginKey) + } + }, []) + + return ( +
+ {props.children} +
+ ) +} diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 6ce42719..493cb331 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -1,4 +1,5 @@ export * from '@tiptap/core' +export * from './BubbleMenu' export { Editor } from './Editor' export * from './useEditor' export * from './ReactRenderer'