'use client'; import * as TooltipPrimitive from '@radix-ui/react-tooltip'; import * as React from 'react'; import { cn } from '@/lib/utils'; import { Info } from 'lucide-react'; const TooltipProvider = TooltipPrimitive.Provider; const Tooltip = TooltipPrimitive.Root; const TooltipTrigger = TooltipPrimitive.Trigger; const TooltipContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, sideOffset = 4, ...props }, ref) => ( )); TooltipContent.displayName = TooltipPrimitive.Content.displayName; export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }; export const FormTooltip = ({ tooltip }: { tooltip: React.ReactNode }) => { return ( { e.preventDefault(); // Prevent clicking the tooltip from triggering form save }} >

{tooltip}

); }; export interface AntToolTipProps { title: React.ReactNode; children: React.ReactNode; placement?: 'top' | 'bottom' | 'left' | 'right'; trigger?: 'hover' | 'click' | 'focus'; className?: string; } export const AntToolTip: React.FC = ({ title, children, placement = 'top', trigger = 'hover', className, }) => { const [visible, setVisible] = React.useState(false); const showTooltip = () => { if (trigger === 'hover' || trigger === 'focus') { setVisible(true); } }; const hideTooltip = () => { if (trigger === 'hover' || trigger === 'focus') { setVisible(false); } }; const toggleTooltip = () => { if (trigger === 'click') { setVisible(!visible); } }; const getPlacementClasses = () => { switch (placement) { case 'top': return 'bottom-full left-1/2 transform -translate-x-1/2 mb-2'; case 'bottom': return 'top-full left-1/2 transform -translate-x-1/2 mt-2'; case 'left': return 'right-full top-1/2 transform -translate-y-1/2 mr-2'; case 'right': return 'left-full top-1/2 transform -translate-y-1/2 ml-2'; default: return 'bottom-full left-1/2 transform -translate-x-1/2 mb-2'; } }; return (
{children}
{visible && title && (
{title}
)}
); };