import { createContext, useContext, useState, useCallback, type ReactNode, type ComponentProps } from 'react' import { NodeToolbar, type NodeToolbarProps } from '@xyflow/react' import { cn } from '@/lib/utils' interface NodeTooltipContextValue { visible: boolean show: () => void hide: () => void } const NodeTooltipContext = createContext({ visible: false, show: () => {}, hide: () => {}, }) export function NodeTooltip({ children, ...props }: ComponentProps<'div'>) { const [visible, setVisible] = useState(false) const show = useCallback(() => setVisible(true), []) const hide = useCallback(() => setVisible(false), []) return (
{children}
) } export function NodeTooltipTrigger({ children, onMouseEnter, onMouseLeave, ...props }: ComponentProps<'div'>) { const { show, hide } = useContext(NodeTooltipContext) return (
{ show() onMouseEnter?.(e) }} onMouseLeave={(e) => { hide() onMouseLeave?.(e) }} {...props} > {children}
) } export function NodeTooltipContent({ className, position, children, ...props }: Omit & { children: ReactNode }) { const { visible } = useContext(NodeTooltipContext) if (!visible) return null return ( {children} ) }