import { InformationCircleIcon } from "@heroicons/react/20/solid"; import * as TooltipPrimitive from "@radix-ui/react-tooltip"; import * as React from "react"; import { cn } from "~/utils/cn"; const variantClasses = { basic: "bg-background-bright border border-grid-bright rounded px-3 py-2 text-sm text-text-bright shadow-md fade-in-50", dark: "bg-background-dimmed border border-grid-bright rounded px-3 py-2 text-sm text-text-bright shadow-md fade-in-50", }; type Variant = keyof typeof variantClasses; const TooltipProvider = TooltipPrimitive.Provider; const TooltipArrow = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ ...props }, ref) => ); TooltipArrow.displayName = TooltipPrimitive.Arrow.displayName; const Tooltip = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ delayDuration = 0, ...props }, ref) => ( )); Tooltip.displayName = TooltipPrimitive.Root.displayName; const TooltipTrigger = TooltipPrimitive.Trigger; type TooltipContentProps = { variant?: Variant; } & React.ComponentPropsWithoutRef; const TooltipContent = React.forwardRef< React.ElementRef, TooltipContentProps >(({ className, sideOffset = 4, variant = "basic", ...props }, ref) => ( )); TooltipContent.displayName = TooltipPrimitive.Content.displayName; function SimpleTooltip({ button, content, side, hidden, variant, disableHoverableContent = false, className, buttonClassName, buttonStyle, asChild = false, sideOffset, open, onOpenChange, delayDuration, }: { button: React.ReactNode; content: React.ReactNode; side?: React.ComponentProps["side"]; hidden?: boolean; variant?: Variant; disableHoverableContent?: boolean; className?: string; buttonClassName?: string; buttonStyle?: React.CSSProperties; asChild?: boolean; sideOffset?: number; open?: boolean; onOpenChange?: (open: boolean) => void; delayDuration?: number; }) { return ( {button} ); } export function InfoIconTooltip({ content, buttonClassName, contentClassName, variant = "basic", disableHoverableContent = false, enabled = true, }: { content: React.ReactNode; buttonClassName?: string; contentClassName?: string; variant?: Variant; disableHoverableContent?: boolean; enabled?: boolean; }) { const icon = ( ); if (!enabled) return icon; return ( ); } export { SimpleTooltip, Tooltip, TooltipArrow, TooltipContent, TooltipProvider, TooltipTrigger };