import { useState, ReactNode } from 'react'; import { useFloating, autoUpdate, offset, shift, useHover, useFocus, useDismiss, useRole, useInteractions, FloatingPortal } from '@floating-ui/react'; import styles from './tooltip.module.css'; interface TooltipProps { content: string; children: ReactNode; showTooltip?: boolean; } const Tooltip = ({ content, children, showTooltip = true }: TooltipProps) => { const [isOpen, setIsOpen] = useState(false); const { refs, floatingStyles, context } = useFloating({ open: isOpen, onOpenChange: setIsOpen, placement: 'top', whileElementsMounted: autoUpdate, middleware: [offset(5), shift()], }); const hover = useHover(context, { move: false, delay: { open: 500, close: 0 } }); const focus = useFocus(context); const dismiss = useDismiss(context); const role = useRole(context, { role: 'tooltip' }); const { getReferenceProps, getFloatingProps } = useInteractions([hover, focus, dismiss, role]); return ( <> {children} {showTooltip && ( {isOpen && (
{content}
)}
)} ); }; export default Tooltip;