Component guideEditable source

Tooltip

A short supplementary description shown on hover or keyboard focus.

Original component docs
On this page4 sectionsBack to top

Use Tooltip for brief extra context, not essential instructions or interactive content. Keep TooltipProvider around the relevant controls. A tooltip is not a substitute for its trigger's accessible name.

Live preview
Loading preview...

#Installation

Complete the base setup. For manual installation:

npx shadcn@latest add https://neobrutal-ui.andongmin.com/r/tooltip.json

The trigger example additionally uses Button.

#Usage

import { Info } from "lucide-react";
import { Button } from "@/components/ui/button";
import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from "@/components/ui/tooltip";

export default function InformationHint() {
  return (
    <TooltipProvider>
      <Tooltip>
        <TooltipTrigger
          render={<Button size="icon" variant="outline" aria-label="Workspace information" />}
        >
          <Info aria-hidden="true" />
        </TooltipTrigger>
        <TooltipContent>Visible to workspace members only.</TooltipContent>
      </Tooltip>
    </TooltipProvider>
  );
}

#API reference

Prop / partPurposeDefault
TooltipProvider.delayOpening delay in milliseconds0 through this wrapper
Tooltip.open / onOpenChangeControlled visibilityUncontrolled
Tooltip.defaultOpenInitial visibilityfalse
TooltipTrigger.renderFocusable-control compositionPrimitive trigger
TooltipContent.side / alignPreferred placementtop / center
TooltipContent.sideOffsetTrigger gap4
TooltipProvider.timeoutTime to skip the opening delay between tooltips, in milliseconds300
TooltipContent.alignOffset / arrowPadding / collisionPaddingAlignment, arrow, and collision-boundary spacing, in pixels0
TooltipContent.positionMethodCSS positioning methodfixed

#Accessibility

Give icon-only controls their own aria-label and hide decorative icons. Keep tooltip text concise. Do not put buttons, links, or required form help inside a tooltip. Touch users may not encounter it, so controls must remain understandable without hover content.