import React, { useEffect, useState, } from 'react' import { BubbleMenuPlugin, BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu' type Optional = Pick, K> & Omit export type BubbleMenuProps = Omit, 'element'> & { className?: string, children: React.ReactNode } export const BubbleMenu = (props: BubbleMenuProps) => { const [element, setElement] = useState(null) useEffect(() => { if (!element) { return } if (props.editor.isDestroyed) { return } const { pluginKey = 'bubbleMenu', editor, tippyOptions = {}, shouldShow = null, } = props const plugin = BubbleMenuPlugin({ pluginKey, editor, element, tippyOptions, shouldShow, }) editor.registerPlugin(plugin) return () => editor.unregisterPlugin(pluginKey) }, [ props.editor, element, ]) return (
{props.children}
) }