|
1 | | -import { ComponentProps } from "react" |
| 1 | +import { PropsWithChildren, ReactNode } from "react" |
2 | 2 |
|
3 | 3 | import * as TooltipPrimitive from "@radix-ui/react-tooltip" |
4 | 4 |
|
| 5 | +import { ClassNameProp } from "types/base-props" |
5 | 6 | import { cn } from "utils/cn" |
6 | | -import { surface } from "utils/styles" |
7 | | -import { zIndex } from "utils/z-index" |
8 | 7 |
|
9 | | -const Content = ({ |
10 | | - ref, |
11 | | - className, |
12 | | - sideOffset = 4, |
13 | | - ...props |
14 | | -}: ComponentProps<typeof TooltipPrimitive.Content>) => ( |
15 | | - <TooltipPrimitive.Content |
16 | | - ref={ref} |
17 | | - sideOffset={sideOffset} |
18 | | - className={cn( |
19 | | - surface({ look: "overlay", size: "md" }), |
20 | | - "animate-in fade-in-0 zoom-in-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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", |
21 | | - "overflow-hidden px-3 py-1.5 text-sm", |
22 | | - zIndex.tooltip, |
23 | | - className |
24 | | - )} |
25 | | - {...props} |
26 | | - /> |
27 | | -) |
| 8 | +import { tooltipStyles } from "./tooltip-styles" |
28 | 9 |
|
29 | | -const { Root, Trigger, Portal, Provider } = TooltipPrimitive |
| 10 | +export const TooltipProvider = TooltipPrimitive.Provider |
30 | 11 |
|
31 | | -export const Tooltip = { |
32 | | - Root, |
33 | | - Trigger, |
34 | | - Content, |
35 | | - Portal, |
36 | | - Provider, |
| 12 | +interface TooltipProps extends ClassNameProp { |
| 13 | + content: ReactNode |
| 14 | + side?: TooltipPrimitive.TooltipContentProps["side"] |
| 15 | + align?: TooltipPrimitive.TooltipContentProps["align"] |
37 | 16 | } |
| 17 | +export const Tooltip = ({ |
| 18 | + content, |
| 19 | + side, |
| 20 | + align, |
| 21 | + children, |
| 22 | + className, |
| 23 | +}: PropsWithChildren<TooltipProps>) => ( |
| 24 | + <TooltipPrimitive.Root> |
| 25 | + <TooltipPrimitive.Trigger asChild className={className}> |
| 26 | + {children} |
| 27 | + </TooltipPrimitive.Trigger> |
| 28 | + |
| 29 | + <TooltipPrimitive.Portal> |
| 30 | + <TooltipPrimitive.Content |
| 31 | + side={side} |
| 32 | + align={align} |
| 33 | + sideOffset={4} |
| 34 | + className={cn( |
| 35 | + tooltipStyles, |
| 36 | + "animate-in fade-in-0 zoom-in-75 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-75", |
| 37 | + className |
| 38 | + )} |
| 39 | + > |
| 40 | + {content} |
| 41 | + </TooltipPrimitive.Content> |
| 42 | + </TooltipPrimitive.Portal> |
| 43 | + </TooltipPrimitive.Root> |
| 44 | +) |
0 commit comments