import * as React from "react" import * as TooltipPrimitive from "@radix-ui/react-tooltip" import { cn } from "../libs/utils" import { ReactNode } from "react" import { usePortalContainer } from "../../hooks/PortalContainerProvider" const TooltipProvider: typeof TooltipPrimitive.Provider = TooltipPrimitive.Provider const Tooltip: typeof TooltipPrimitive.Root = TooltipPrimitive.Root const TooltipTrigger: typeof TooltipPrimitive.Trigger = TooltipPrimitive.Trigger type TooltipContentProps = React.ComponentPropsWithoutRef & { side?: "top" | "right" | "bottom" | "left" }; const TooltipContent: React.ForwardRefExoticComponent>> = React.forwardRef< React.ComponentRef, React.ComponentPropsWithoutRef & { side?: "top" | "right" | "bottom" | "left" } >(({ className, sideOffset = 4, side = "top", ...props }, ref) => { const container = usePortalContainer(); return ( ); }) TooltipContent.displayName = TooltipPrimitive.Content.displayName interface TooltipPopoverProps { description?: ReactNode; children: ReactNode; size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; placement?: 'top' | 'right' | 'bottom' | 'left'; className?: string; asChild?: boolean; } export function VTooltip({ description, children, size = 'sm', placement = 'top', className, asChild }: TooltipPopoverProps) { const [open, setOpen] = React.useState(false); const suppressRef = React.useRef(false); React.useEffect(() => { const suppress = () => { setOpen(false); suppressRef.current = true; requestAnimationFrame(() => { suppressRef.current = false; }); }; window.addEventListener('blur', suppress); document.addEventListener('visibilitychange', suppress); return () => { window.removeEventListener('blur', suppress); document.removeEventListener('visibilitychange', suppress); }; }, []); return ( { if (!suppressRef.current) setOpen(v); }}> {children} {description} ); } export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }