"use client"; import { AnimatePresence, motion } from "motion/react"; import { nanoid } from "nanoid"; import { useEffect, useRef, useState } from "react"; import PortalToBody from "@/components/shared/utils/portal-to-body"; import { cn } from "@/utils/cn"; export default function Tooltip({ delay = 0.5, offset = 8, wrapperClassName, className, ...props }: { description?: string; children?: React.ReactNode; offset?: number; delay?: number; wrapperClassName?: string; className?: string; }) { const [hovering, setHovering] = useState(false); const ref = useRef(null); const [bounds, setBounds] = useState<{ x: number; y: number; width: number; height: number; } | null>(null); useEffect(() => { if (ref.current) { const element = ref.current; const parent = element.parentElement!; const onMouseEnter = () => { setBounds(parent.getBoundingClientRect()); setHovering(true); }; const onMouseLeave = () => setHovering(false); if (!parent) return; parent.addEventListener("mouseenter", onMouseEnter); parent.addEventListener("mouseleave", onMouseLeave); return () => { parent.removeEventListener("mouseenter", onMouseEnter); parent.removeEventListener("mouseleave", onMouseLeave); }; } }, []); if (!props.description) return props.children; return (
{hovering && (
)}
); }