import * as React from 'react';
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
import { cn } from '@/lib/utils';
const TooltipProvider = TooltipPrimitive.Provider;
const TooltipRoot = TooltipPrimitive.Root;
const TooltipTrigger = TooltipPrimitive.Trigger;
const TooltipPortal = TooltipPrimitive.Portal;
const TooltipArrow = TooltipPrimitive.Arrow;
const TooltipContent = React.forwardRef<
React.ElementRef<typeof TooltipPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
>(({ className, sideOffset = 4, ...props }, ref) => (
<TooltipPrimitive.Content
ref={ref}
sideOffset={sideOffset}
className={cn(
'z-50 overflow-hidden rounded-md bg-muted-foreground px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
className,
)}
{...props}
/>
));
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
interface Props {
children: React.ReactNode;
title: string;
side?: 'top' | 'right' | 'bottom' | 'left';
sideOffset?: number;
showArrow?: boolean;
asChild?: boolean;
}
const Tooltip = ({
children,
title,
side = 'bottom',
sideOffset,
showArrow = false,
asChild = false,
}: Props) => (
<TooltipProvider delayDuration={400}>
<TooltipRoot>
<TooltipTrigger asChild={asChild}>{children}</TooltipTrigger>
<TooltipPortal>
<TooltipContent side={side} sideOffset={sideOffset}>
{title}
{showArrow && <TooltipArrow />}
</TooltipContent>
</TooltipPortal>
</TooltipRoot>
</TooltipProvider>
);
export default Tooltip;
export {
TooltipRoot,
TooltipTrigger,
TooltipContent,
TooltipProvider,
TooltipPortal,
TooltipArrow,
};