{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "radix-tooltip", "type": "registry:ui", "title": "Radix Tooltip", "description": "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.", "dependencies": [ "motion", "radix-ui" ], "files": [ { "path": "registry/radix/tooltip/index.tsx", "content": "'use client';\n\nimport * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport { AnimatePresence, motion, type Transition } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\n\ntype TooltipContextType = {\n isOpen: boolean;\n};\n\nconst TooltipContext = React.createContext(\n undefined,\n);\n\nconst useTooltip = (): TooltipContextType => {\n const context = React.useContext(TooltipContext);\n if (!context) {\n throw new Error('useTooltip must be used within a Tooltip');\n }\n return context;\n};\n\ntype Side = 'top' | 'bottom' | 'left' | 'right';\n\nconst getInitialPosition = (side: Side) => {\n switch (side) {\n case 'top':\n return { y: 15 };\n case 'bottom':\n return { y: -15 };\n case 'left':\n return { x: 15 };\n case 'right':\n return { x: -15 };\n }\n};\n\ntype TooltipProviderProps = React.ComponentProps<\n typeof TooltipPrimitive.Provider\n>;\n\nfunction TooltipProvider(props: TooltipProviderProps) {\n return ;\n}\n\ntype TooltipProps = React.ComponentProps;\n\nfunction Tooltip(props: TooltipProps) {\n const [isOpen, setIsOpen] = React.useState(\n props?.open ?? props?.defaultOpen ?? false,\n );\n\n React.useEffect(() => {\n if (props?.open !== undefined) setIsOpen(props.open);\n }, [props?.open]);\n\n const handleOpenChange = React.useCallback(\n (open: boolean) => {\n setIsOpen(open);\n props.onOpenChange?.(open);\n },\n [props],\n );\n\n return (\n \n \n \n );\n}\n\ntype TooltipTriggerProps = React.ComponentProps<\n typeof TooltipPrimitive.Trigger\n>;\n\nfunction TooltipTrigger(props: TooltipTriggerProps) {\n return ;\n}\n\ntype TooltipContentProps = React.ComponentProps<\n typeof TooltipPrimitive.Content\n> & {\n transition?: Transition;\n arrow?: boolean;\n};\n\nfunction TooltipContent({\n className,\n side = 'top',\n sideOffset = 4,\n transition = { type: 'spring', stiffness: 300, damping: 25 },\n arrow = true,\n children,\n ...props\n}: TooltipContentProps) {\n const { isOpen } = useTooltip();\n const initialPosition = getInitialPosition(side);\n\n return (\n \n {isOpen && (\n \n \n \n {children}\n\n {arrow && (\n \n )}\n \n \n \n )}\n \n );\n}\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n useTooltip,\n type TooltipContextType,\n type TooltipProps,\n type TooltipTriggerProps,\n type TooltipContentProps,\n type TooltipProviderProps,\n};\n", "type": "registry:ui", "target": "components/animate-ui/radix/tooltip.tsx" } ] }