@@ -3,31 +3,41 @@ import * as TooltipPrimitive from '@radix-ui/react-tooltip'
33
44import { cn } from '../../lib/utils'
55
6- function TooltipProvider ( {
6+ const TooltipProvider = ( {
77 delayDuration = 0 ,
88 ...props
9- } : React . ComponentProps < typeof TooltipPrimitive . Provider > ) {
9+ } : React . ComponentPropsWithoutRef < typeof TooltipPrimitive . Provider > ) => {
1010 return < TooltipPrimitive . Provider data-slot = "tooltip-provider" delayDuration = { delayDuration } { ...props } />
1111}
1212
13- function Tooltip ( { ...props } : React . ComponentProps < typeof TooltipPrimitive . Root > ) {
13+ type TooltipProps = React . ComponentPropsWithoutRef < typeof TooltipPrimitive . Root > & {
14+ title : React . ReactNode
15+ side ?: 'top' | 'right' | 'bottom' | 'left'
16+ children : React . ReactNode
17+ }
18+
19+ const Tooltip : React . FC < TooltipProps > = ( { title, side = 'top' , children, ...props } ) => {
1420 return (
1521 < TooltipProvider >
16- < TooltipPrimitive . Root data-slot = "tooltip" { ...props } />
22+ < TooltipPrimitive . Root data-slot = "tooltip" { ...props } >
23+ < TooltipTrigger asChild > { children } </ TooltipTrigger >
24+ < TooltipContent side = { side } > { title } </ TooltipContent >
25+ </ TooltipPrimitive . Root >
1726 </ TooltipProvider >
1827 )
1928}
2029
21- function TooltipTrigger ( { ...props } : React . ComponentProps < typeof TooltipPrimitive . Trigger > ) {
22- return < TooltipPrimitive . Trigger data-slot = "tooltip-trigger" { ...props } />
23- }
30+ const TooltipTrigger = React . forwardRef <
31+ React . ElementRef < typeof TooltipPrimitive . Trigger > ,
32+ React . ComponentPropsWithoutRef < typeof TooltipPrimitive . Trigger >
33+ > ( ( { asChild = true , ...props } , ref ) => {
34+ return < TooltipPrimitive . Trigger data-slot = "tooltip-trigger" asChild = { asChild } { ...props } ref = { ref } />
35+ } )
2436
25- function TooltipContent ( {
26- className,
27- sideOffset = 0 ,
28- children,
29- ...props
30- } : React . ComponentProps < typeof TooltipPrimitive . Content > ) {
37+ const TooltipContent = React . forwardRef <
38+ React . ElementRef < typeof TooltipPrimitive . Content > ,
39+ React . ComponentPropsWithoutRef < typeof TooltipPrimitive . Content >
40+ > ( ( { className, sideOffset = 0 , children, ...props } , ref ) => {
3141 return (
3242 < TooltipPrimitive . Portal >
3343 < TooltipPrimitive . Content
@@ -37,13 +47,14 @@ function TooltipContent({
3747 'bg-primary 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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance' ,
3848 className
3949 ) }
50+ ref = { ref }
4051 { ...props }
4152 >
4253 { children }
4354 < TooltipPrimitive . Arrow className = "bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" />
4455 </ TooltipPrimitive . Content >
4556 </ TooltipPrimitive . Portal >
4657 )
47- }
58+ } )
4859
49- export { Tooltip , TooltipTrigger , TooltipContent , TooltipProvider }
60+ export { Tooltip }
0 commit comments