|
import * as React from 'react'; |
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip'; |
|
import { cn } from '~/utils'; |
|
|
|
const Tooltip = TooltipPrimitive.Root; |
|
|
|
const TooltipTrigger = React.forwardRef< |
|
React.ElementRef<typeof TooltipPrimitive.Trigger>, |
|
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Trigger> |
|
>((props, ref) => <TooltipPrimitive.Trigger ref={ref} {...props} />); |
|
TooltipTrigger.displayName = TooltipPrimitive.Trigger.displayName; |
|
|
|
const TooltipPortal = TooltipPrimitive.Portal; |
|
|
|
const TooltipArrow = React.forwardRef< |
|
React.ElementRef<typeof TooltipPrimitive.Arrow>, |
|
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow> |
|
>((props, ref) => <TooltipPrimitive.Arrow ref={ref} {...props} />); |
|
TooltipArrow.displayName = TooltipPrimitive.Arrow.displayName; |
|
|
|
const TooltipContent = React.forwardRef< |
|
React.ElementRef<typeof TooltipPrimitive.Content>, |
|
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> |
|
>(({ className = '', forceMount, children, ...props }, ref) => ( |
|
<TooltipPortal forceMount={forceMount}> |
|
<TooltipPrimitive.Content |
|
className={cn( |
|
'shadow-xs relative max-w-xs rounded-lg border border-black/10 bg-black p-1 transition-opacity', |
|
className, |
|
)} |
|
ref={ref} |
|
{...props} |
|
> |
|
<span className="flex items-center whitespace-pre-wrap px-2 py-1 text-center text-sm font-medium normal-case text-white"> |
|
{children} |
|
<TooltipArrow className="TooltipArrow" /> |
|
</span> |
|
</TooltipPrimitive.Content> |
|
</TooltipPortal> |
|
)); |
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName; |
|
|
|
const TooltipProvider = TooltipPrimitive.Provider; |
|
|
|
export { Tooltip, TooltipTrigger, TooltipPortal, TooltipContent, TooltipArrow, TooltipProvider }; |
|
|