All files / src/ahuora-design-system/ui tooltip.tsx

100% Statements 9/9
83.33% Branches 5/6
100% Functions 2/2
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75          33x   33x   33x 33x             97130x             97130x                           33x   33x                             97130x                                      
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
import * as React from "react";
 
import { cn } from "@/lib/utils";
 
const TooltipProvider = TooltipPrimitive.Provider;
 
const Tooltip = TooltipPrimitive.Root;
 
const TooltipTrigger = TooltipPrimitive.Trigger;
const TooltipContent = React.forwardRef<
  React.ElementRef<typeof TooltipPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {
    variant?: "default" | "error" | "success" | "warning";
  } // Add the variant type here
>(({ className, sideOffset = 4, variant = "default", ...props }, ref) => {
  // Define variant styles
  const variantClasses = {
    default: "bg-muted",
    error: "bg-destructive",
    success: "bg-primary",
    // warning: "bg-warning",
  };
 
  return (
    <TooltipPrimitive.Content
      ref={ref}
      sideOffset={sideOffset}
      className={cn(
        "z-50 overflow-hidden rounded-md px-3 py-1.5 text-xs 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",
        variantClasses[variant],
        variantClasses[variant] !== "bg-muted" && "text-muted-foreground",
        className,
      )}
      {...props}
    />
  );
});
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
 
const ToolTipCover = ({
  children,
  content,
  variant = "default",
  asChild = false,
  side,
  delay,
}: {
  children: React.ReactNode;
  content: string;
  variant?: "default" | "error" | "success" | "warning";
  asChild?: boolean;
  side?: "top" | "right" | "bottom" | "left";
  delay?: number;
}) => {
  return (
    <TooltipProvider delayDuration={delay} disableHoverableContent>
      <Tooltip>
        <TooltipTrigger asChild={asChild}>{children}</TooltipTrigger>
        <TooltipContent variant={variant} side={side}>
          <p className="whitespace-pre-line">{content}</p>
        </TooltipContent>
      </Tooltip>
    </TooltipProvider>
  );
};
 
export {
  Tooltip,
  TooltipContent,
  ToolTipCover,
  TooltipProvider,
  TooltipTrigger,
};