ToroUI

Tooltip

A popup that displays informational text when hovering over or focusing an element.


A composable tooltip built on Base UI's Tooltip primitive. It renders in a portal with configurable placement, includes an arrow indicator, and supports a provider for controlling the shared delay across multiple tooltips.

import {
  Tooltip,
  TooltipContent,
  TooltipProvider,
  TooltipTrigger,
} from "@/components/ui/tooltip"
import { Button } from "@/components/ui/button"

export default function TooltipDemo() {
  return (
    <TooltipProvider>
      <Tooltip>
        <TooltipTrigger render={<Button variant="outline" />}>
          Hover me
        </TooltipTrigger>
        <TooltipContent>
          <p>This is a tooltip</p>
        </TooltipContent>
      </Tooltip>
    </TooltipProvider>
  )
}

Anatomy

import {
  Tooltip,
  TooltipTrigger,
  TooltipContent,
  TooltipProvider,
} from "@/components/ui/tooltip"
<TooltipProvider>
  <Tooltip>
    <TooltipTrigger>Hover me</TooltipTrigger>
    <TooltipContent>Tooltip text</TooltipContent>
  </Tooltip>
</TooltipProvider>

Examples

Basic tooltip

<TooltipProvider>
  <Tooltip>
    <TooltipTrigger asChild>
      <Button variant="outline">Hover</Button>
    </TooltipTrigger>
    <TooltipContent>This is a tooltip</TooltipContent>
  </Tooltip>
</TooltipProvider>

Placement

Use the side prop on TooltipContent to control where the tooltip appears.

<TooltipProvider>
  <Tooltip>
    <TooltipTrigger asChild>
      <Button variant="outline">Top</Button>
    </TooltipTrigger>
    <TooltipContent side="top">Top tooltip</TooltipContent>
  </Tooltip>

  <Tooltip>
    <TooltipTrigger asChild>
      <Button variant="outline">Right</Button>
    </TooltipTrigger>
    <TooltipContent side="right">Right tooltip</TooltipContent>
  </Tooltip>

  <Tooltip>
    <TooltipTrigger asChild>
      <Button variant="outline">Bottom</Button>
    </TooltipTrigger>
    <TooltipContent side="bottom">Bottom tooltip</TooltipContent>
  </Tooltip>
</TooltipProvider>

With delay

Set delay on TooltipProvider to control the hover delay for all tooltips in a group.

<TooltipProvider delay={500}>
  <Tooltip>
    <TooltipTrigger asChild>
      <Button variant="outline">Delayed</Button>
    </TooltipTrigger>
    <TooltipContent>Appears after 500ms</TooltipContent>
  </Tooltip>
</TooltipProvider>

API Reference

TooltipProvider

Wraps a group of tooltips to share configuration such as delay timing.

PropTypeDefaultDescription
delaynumber0The delay in milliseconds before a tooltip opens on hover.

Accepts all props from Base UI's Tooltip.Provider.

Tooltip

The root component for a single tooltip instance. Manages open state.

PropTypeDefaultDescription
openbooleanControlled open state.
onOpenChange(open: boolean) => voidCallback when the open state changes.

Accepts all props from Base UI's Tooltip.Root.

TooltipTrigger

The element that activates the tooltip on hover or focus.

PropTypeDefault
classNamestring
childrenReactNode

TooltipContent

The popup content with an arrow. Renders inside a portal with a positioner.

PropTypeDefaultDescription
side"top" | "bottom" | "left" | "right""top"The preferred side of the trigger.
sideOffsetnumber4Distance in pixels from the trigger.
align"start" | "center" | "end""center"Alignment along the trigger edge.
alignOffsetnumber0Offset from the alignment edge in pixels.
classNamestring
childrenReactNode