import * as Ariakit from '@ariakit/react'; import { AnimatePresence, motion } from 'framer-motion'; import { forwardRef, useMemo } from 'react'; import { cn } from '~/utils'; interface TooltipAnchorProps extends Ariakit.TooltipAnchorProps { description: string; side?: 'top' | 'bottom' | 'left' | 'right'; className?: string; focusable?: boolean; role?: string; } export const TooltipAnchor = forwardRef(function TooltipAnchor( { description, side = 'top', className, role, ...props }, ref, ) { const tooltip = Ariakit.useTooltipStore({ placement: side }); const mounted = Ariakit.useStoreState(tooltip, (state) => state.mounted); const placement = Ariakit.useStoreState(tooltip, (state) => state.placement); const { x, y } = useMemo(() => { const dir = placement.split('-')[0]; switch (dir) { case 'top': return { x: 0, y: -8 }; case 'bottom': return { x: 0, y: 8 }; case 'left': return { x: -8, y: 0 }; case 'right': return { x: 8, y: 0 }; default: return { x: 0, y: 0 }; } }, [placement]); const handleKeyDown = (event: React.KeyboardEvent) => { if (role === 'button' && event.key === 'Enter') { event.preventDefault(); (event.target as HTMLDivElement).click(); } }; return ( {mounted === true && ( } > {description} )} ); });