import { useState, memo, useRef } from 'react'; import { useFloating, flip, offset, shift } from '@floating-ui/react-dom'; import { motion, AnimatePresence } from 'framer-motion'; import './tooltip.scss'; function Tooltip({ children, title, style, placement, subtitle }) { const [showTooltip, setShowTooltip] = useState(false); const [reference, setReference] = useState(null); const tooltipId = useRef(`tooltip-${Math.random()}`); const { x, y, refs, strategy } = useFloating({ placement: placement || 'bottom', middleware: [flip(), offset(15), shift()], elements: { reference, }, }); return ( <> setShowTooltip(true)} onMouseLeave={() => setShowTooltip(false)} onFocus={() => setShowTooltip(true)} onBlur={() => setShowTooltip(false)} ref={setReference} aria-describedby={tooltipId.current} initial={{ opacity: 0, scale: 0.95 }} animate={{ opacity: 1, scale: 1 }} transition={{ duration: 0.2 }} > {children} {showTooltip && ( {title} {subtitle} )} ); } const MemoizedTooltip = memo(Tooltip); export { MemoizedTooltip as default, MemoizedTooltip as Tooltip };