docs / core / tooltip

Tooltip

a short label that surfaces on hover or focus and says what a thing is: the name of an icon button, a keyboard shortcut, a word too clipped to read. never more than you can take in at a glance.

intensity · recedesrsc · client

provenance

authored in usva

layer

core / primitives

intensity

recedes · safe anywhere, including dense surfaces

composition

icon-only buttons, truncated text, terse toolbar actionsthe trigger's render prop puts it on an existing element instead of nesting a second buttonno interactive content inside. that is a Popovernever the only place information lives. it is a hint, not the label

a11y

opens on focus as well as hover · content is portalled with role="tooltip" and wired to the trigger via aria-describedby · escape dismisses · exit animation honors motion-reducejest-axe

dependencies

@base-ui/react
live demo · try it out
customize
contentthe label on hover and focus
sideOffsetgap from the trigger, in pixels
6
usagecopy
import { Tooltip, TooltipContent, TooltipTrigger } from "@usva-ui/react/primitives/tooltip";

<Tooltip>
  <TooltipTrigger render={<Button variant="outline">Hover me</Button>} />
  <TooltipContent>Deploys the current branch</TooltipContent>
</Tooltip>

props

proptypedefaultnotes
delaynumberhover delay in ms before opening. set on TooltipProvider, shared by every tooltip under it.
defaultOpenbooleanopen on mount, uncontrolled.
openbooleancontrolled open state.
onOpenChange(open: boolean) => voidfires when the open state changes.
sideOffsetnumber6distance in px between trigger and content, on TooltipContent.

get it

bun add @usva-ui/reactcopy
usagecopy
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@usva-ui/react/primitives/tooltip";

<TooltipProvider>
  <Tooltip>
    <TooltipTrigger render={<button>Hover me</button>} />
    <TooltipContent>Helpful hint</TooltipContent>
  </Tooltip>
</TooltipProvider>