71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
import * as React from "react";
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
function TooltipProvider({
|
|
delayDuration = 200,
|
|
...props
|
|
}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
|
|
return (
|
|
<TooltipPrimitive.Provider
|
|
data-slot="tooltip-provider"
|
|
delayDuration={delayDuration}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function TooltipRoot({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {
|
|
return <TooltipPrimitive.Root data-slot="tooltip" {...props} />;
|
|
}
|
|
|
|
function TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
|
|
return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />;
|
|
}
|
|
|
|
function TooltipContent({
|
|
className,
|
|
sideOffset = 6,
|
|
...props
|
|
}: React.ComponentProps<typeof TooltipPrimitive.Content>) {
|
|
return (
|
|
<TooltipPrimitive.Portal>
|
|
<TooltipPrimitive.Content
|
|
data-slot="tooltip-content"
|
|
sideOffset={sideOffset}
|
|
className={cn(
|
|
"px-2 py-1 text-[11px] leading-none text-white/90 bg-black/85 border border-white/10 rounded-md z-50",
|
|
"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",
|
|
className,
|
|
)}
|
|
{...props}
|
|
/>
|
|
</TooltipPrimitive.Portal>
|
|
);
|
|
}
|
|
|
|
function Tooltip({
|
|
children,
|
|
content,
|
|
side,
|
|
className,
|
|
}: {
|
|
children: React.ReactNode;
|
|
content: React.ReactNode;
|
|
side?: "top" | "right" | "bottom" | "left";
|
|
className?: string;
|
|
}) {
|
|
return (
|
|
<TooltipRoot>
|
|
<TooltipTrigger asChild>{children}</TooltipTrigger>
|
|
<TooltipContent side={side} className={className}>
|
|
{content}
|
|
</TooltipContent>
|
|
</TooltipRoot>
|
|
);
|
|
}
|
|
|
|
export { TooltipProvider, TooltipRoot, TooltipTrigger, TooltipContent, Tooltip };
|