ProductBrand
Join us
Foundations
  • Introduction
  • Colors
  • Typography
  • Icons
  • Illustrations
  • Logos
  • Shadows
Components
  • Accordion
  • Alert Dialog
  • Avatar
  • Badge
  • Button
  • Calendar
  • Card
  • Chart
  • Checkbox
  • Collapsible
  • Combobox
  • Context Menu
  • Date Picker
  • Dialog
  • Drawer
  • Dropdown Menu
  • Fluid Avatar
  • Hover Scroll Text
  • Input
  • Kbd
  • Popover
  • Progress Bar
  • Radio Group
  • Scroll Area
  • Select
  • Selectors
  • Separator
  • Separator Dot
  • Shimmer Text
  • Skeleton
  • Slider
  • Switch
  • Tabs
  • Textarea
  • Toast
  • Tooltip
Compositions
  • Empty State
  • File Attachment
  • Floating Bar
  • Input Banner
  • Markdown Editor
  • Media Controls
  • Product Feature Banner
  • Panels
  • Sidebar
  • Reasoning Trace
  • Pagination
  • Data Table
  • Breadcrumb
  • Thread Outline
Inline
  • Overview
  • Stat Tile
  • Metric Row
  • Comparison Table
  • Chart Card
  • Trend Tile
  • Cite
  • Custom
  • Agent skill

Tooltip

Tooltips display brief, informative text when a user hovers over or focuses on an element.

Examples

Wrapping other components

Delay

Rich content

Overview

Tooltip provides contextual information for UI elements. Built on Base UI for full accessibility and composability, with a styled dark appearance that works across all backgrounds.

tsx
import { Tooltip, TooltipTrigger, TooltipContent } from "@rogo-technologies/ui/tooltip";

<Tooltip>
  <TooltipTrigger>Hover me</TooltipTrigger>
  <TooltipContent>Helpful information</TooltipContent>
</Tooltip>;

Usage

Sides

Use the side prop on TooltipContent to position the tooltip. It automatically flips to the opposite side if there isn't enough space.

tsx
<Tooltip>
  <TooltipTrigger>Bottom</TooltipTrigger>
  <TooltipContent side="bottom">Appears below</TooltipContent>
</Tooltip>

Wrapping other components

Use asChild on TooltipTrigger to merge tooltip behavior into an existing interactive element.

tsx
<Tooltip>
  <TooltipTrigger asChild>
    <Button variant="outline" iconOnly aria-label="Copy">
      <IconSquareBehindSquare1 />
    </Button>
  </TooltipTrigger>
  <TooltipContent>Copy to clipboard</TooltipContent>
</Tooltip>

Delay

tsx
<TooltipTrigger delay={400}>Hover me</TooltipTrigger>

<TooltipProvider delay={200}>
  {/* All tooltips inherit 200ms delay */}
</TooltipProvider>

Tooltips under a TooltipProvider form a group: the first one waits for its delay, and while one is open the next opens instantly however long its own delay is. timeout is how long after the last one closes that the group keeps opening instantly. Delay the first tooltip in a group and let peers follow instantly — a row of icons should cost one wait, not one per icon, and delay={0} is not that: it fires a tooltip at every icon a passing cursor crosses.

Rich content

Tooltips accept any React content. Use className for custom sizing and layout.

tsx
<TooltipContent className="flex max-w-xs flex-col gap-1 px-3 py-2">
  <span className="font-semibold">Keyboard shortcuts</span>
  <span className="text-secondary-inverted text-[11px]">Press ⌘K to open the command palette.</span>
</TooltipContent>

Composition

For advanced cases, compose the lower-level primitives directly instead of using TooltipContent.

tsx
import {
  Tooltip,
  TooltipTrigger,
  TooltipPortal,
  TooltipPositioner,
  TooltipPopup,
} from "@rogo-technologies/ui/tooltip";

<Tooltip>
  <TooltipTrigger>Hover me</TooltipTrigger>
  <TooltipPortal>
    <TooltipPositioner side="top" sideOffset={8}>
      <TooltipPopup>Custom tooltip</TooltipPopup>
    </TooltipPositioner>
  </TooltipPortal>
</Tooltip>;

API

Tooltip (Root)

PropTypeDefaultDescription
openboolean-Controlled open state.
defaultOpenbooleanfalseInitial open state (uncontrolled).
onOpenChange(open: boolean) => void-Callback when open state changes.
delayDurationnumber-Radix compat: forwarded as delay to trigger.

TooltipTrigger

PropTypeDefaultDescription
delaynumber600Milliseconds before tooltip appears.
closeDelaynumber0Milliseconds before tooltip hides.
asChildbooleanfalseMerges props onto child element instead of wrapping.
disabledbooleanfalsePrevents the tooltip from appearing.

TooltipContent

TooltipContent composes TooltipPortal, TooltipPositioner, and TooltipPopup into a single component.

PropTypeDefaultDescription
side"top" | "right" | "bottom" | "left""top"Which side of the trigger to position on.
sideOffsetnumber4Distance from the trigger in pixels.
align"start" | "center" | "end""center"Alignment along the cross axis.
alignOffsetnumber0Offset along the alignment axis.
hiddenbooleanfalseWhen true, content is not rendered.
classNamestring-Additional CSS classes for the popup.

TooltipProvider

PropTypeDefaultDescription
delaynumber600Default delay for all nested tooltips.
closeDelaynumber0Default close delay.
timeoutnumber400How long after a tooltip closes that the next still opens instantly.
delayDurationnumber-Radix compat: alias for delay.

All components accept standard HTML attributes for their underlying elements.

Guidelines

Do

  • Use tooltips for supplementary information that isn't essential to the task
  • Keep tooltip text concise: ideally under 80 characters
  • Add tooltips to icon-only buttons to clarify their purpose
  • Use TooltipProvider at the app root for consistent delay behavior
  • Use asChild when wrapping interactive elements like buttons

Don't

  • Don't put essential information only in a tooltip, since users may never see it
  • Don't use tooltips for complex interactive content (use a popover instead)
  • Don't add tooltips to elements that already have clear labels
  • Don't set delay to 0 globally, since it creates a noisy experience
  • Don't use tooltips on touch-only interfaces, since hover isn't available
PreviousToast
NextEmpty State
Made in NYC© 2026 Rogo Technologies Inc.

Design at Rogo

We’re redesigning an entire industry. Come design it with us.

See open roles

Design at Rogo

  • How we workThe mission of design at Rogo, and the open roles
  • About RogoThe company and the product