Command Palette

Search for a command to run...

Tooltip

Tooltips are small overlays that display information about an element when the user hovers over or interacts with it.

Installation

Follow these simple steps to add the Tooltip component to your project:

Install Dependencies

pnpm add @radix-ui/react-tooltip

Create a new file components/ui/tooltip.tsx and copy the code below:

"use client";
 
import * as React from "react";
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
 
import { cn } from "@/lib/utils";
 
function TooltipProvider({
    delayDuration = 0,
    ...props
}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
    return (
        <TooltipPrimitive.Provider
            data-slot="tooltip-provider"
            delayDuration={delayDuration}
            {...props}
        />
    );
}
 
function Tooltip({
    ...props
}: React.ComponentProps<typeof TooltipPrimitive.Root>) {
    return (
        <TooltipProvider>
            <TooltipPrimitive.Root data-slot="tooltip" {...props} />
        </TooltipProvider>
    );
}
 
function TooltipTrigger({
    ...props
}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
    return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />;
}
 
function TooltipContent({
    className,
    sideOffset = 4,
    showArrow = false,
    children,
    ...props
}: React.ComponentProps<typeof TooltipPrimitive.Content> & {
    showArrow?: boolean;
}) {
    return (
        <TooltipPrimitive.Portal>
            <TooltipPrimitive.Content
                data-slot="tooltip-content"
                sideOffset={sideOffset}
                className={cn(
                    "bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 relative z-50 max-w-70 rounded-md border px-3 py-1.5 text-sm dark:border-neutral-800",
                    className,
                )}
                {...props}
            >
                {children}
                {showArrow && (
                    <TooltipPrimitive.Arrow className="fill-popover -my-px drop-shadow-[0_1px_0_hsl(var(--border))]" />
                )}
            </TooltipPrimitive.Content>
        </TooltipPrimitive.Portal>
    );
}
 
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };

Adjust the import paths in both files according to your project's structure.

Examples

W/ Arrow

W/ Dark Theme

W/ Image

All directions