import * as React from 'react' import { motion } from 'framer-motion' import * as TooltipPrimitive from '@radix-ui/react-tooltip' import { cn } from '@/lib/utils' import { MOTION_SCALE_IN } from '@/lib/motion' import { getThemeFromDocument } from './theme-from-document' const TooltipProvider = TooltipPrimitive.Provider const TooltipRoot = TooltipPrimitive.Root const TooltipTrigger = TooltipPrimitive.Trigger const TooltipContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { /** When provided (e.g. from ThemeStyleProvider), used for portal wrapper instead of getThemeFromDocument */ dataStyle?: string dataTheme?: string } >(({ className, sideOffset = 8, children, dataStyle, dataTheme, ...props }, ref) => { const fromDoc = getThemeFromDocument() const dataProps = dataStyle !== undefined ? { 'data-style': dataStyle, 'data-theme': dataTheme ?? fromDoc['data-theme'] ?? '' } : fromDoc return (
{children}
) }) TooltipContent.displayName = TooltipPrimitive.Content.displayName export interface TooltipProps { content: React.ReactNode children: React.ReactNode side?: 'top' | 'right' | 'bottom' | 'left' contentClassName?: string /** When provided, portal content uses this data-style (e.g. from ThemeStyleProvider) */ dataStyle?: string /** When provided, portal content uses this data-theme */ dataTheme?: string } function Tooltip({ content, children, side = 'top', contentClassName, dataStyle, dataTheme }: TooltipProps) { return ( {children} {content} ) } Tooltip.displayName = 'Tooltip' export { TooltipProvider, TooltipRoot, TooltipTrigger, TooltipContent, Tooltip, }