Animate UI
uicomponents-animate-tooltipsource: ok · hit
Tooltip
A tooltip is a small box that appears when hovering over an element.
npx shadcn add "https://animate-ui.com/r/components-animate-tooltip.json"free
Interaction
scroll-revealtooltip
Tags auto-generated by rules on 9/24/2026 — empty means no evidence, not lack of support.
Dependencies
Bundle weight · mediumanimationmotion
Registry dependencies
@animate-ui/primitives-animate-tooltip
Files1 · source cached 10/9/2026, 3:26:29 AM
registry/components/animate/tooltip/index.tsx
import * as React from 'react';
import * as motion from 'motion/react-client';
import {
TooltipProvider as TooltipProviderPrimitive,
Tooltip as TooltipPrimitive,
TooltipTrigger as TooltipTriggerPrimitive,
TooltipContent as TooltipContentPrimitive,
TooltipArrow as TooltipArrowPrimitive,
type TooltipProviderProps as TooltipProviderPrimitiveProps,
type TooltipProps as TooltipPrimitiveProps,
type TooltipTriggerProps as TooltipTriggerPrimitiveProps,
type TooltipContentProps as TooltipContentPrimitiveProps,
} from '@/components/animate-ui/primitives/animate/tooltip';
import { cn } from '@/lib/utils';
type TooltipProviderProps = TooltipProviderPrimitiveProps;
function TooltipProvider({ openDelay = 0, ...props }: TooltipProviderProps) {
return <TooltipProviderPrimitive openDelay={openDelay} {...props} />;
}
type TooltipProps = TooltipPrimitiveProps;
function Tooltip({ sideOffset = 10, ...props }: TooltipProps) {
return <TooltipPrimitive sideOffset={sideOffset} {...props} />;
}
type TooltipTriggerProps = TooltipTriggerPrimitiveProps;
function TooltipTrigger({ ...props }: TooltipTriggerProps) {
return <TooltipTriggerPrimitive {...props} />;
}
type TooltipContentProps = Omit<TooltipContentPrimitiveProps, 'asChild'> & {
children: React.ReactNode;
layout?: boolean | 'position' | 'size' | 'preserve-aspect';
};
function TooltipContent({
className,
children,
layout = 'preserve-aspect',
...props
}: TooltipContentProps) {
return (
<TooltipContentPrimitive
className={cn(
'z-50 w-fit bg-primary text-primary-foreground rounded-md',
className,
)}
{...props}
>
<motion.div className="overflow-hidden px-3 py-1.5 text-xs text-balance">
<motion.div layout={layout}>{children}</motion.div>
</motion.div>
<TooltipArrowPrimitive
className="fill-primary size-3 data-[side='bottom']:translate-y-[1px] data-[side='right']:translate-x-[1px] data-[side='left']:translate-x-[-1px] data-[side='top']:translate-y-[-1px]"
tipRadius={2}
/>
</TooltipContentPrimitive>
);
}
export {
TooltipProvider,
Tooltip,
TooltipTrigger,
TooltipContent,
type TooltipProviderProps,
type TooltipProps,
type TooltipTriggerProps,
type TooltipContentProps,
};