Skip to content

Tooltip

Hover-triggered floating contextual text. Built on Aurora's Popper primitive. Aurora ships two ergonomic wrappers — TextTooltip for a title + body, and RichTextTooltip for a list of structured items — plus the lower-level primitives (Tooltip, TooltipTrigger, TooltipContent) when you need custom tooltip-body markup.

html
<TextTooltip content="Tooltip content rendered via aurora.">
  <Button>Hover me</Button>
</TextTooltip>

Prefer the wrappers. The primitives exist for the rare case where the body needs structure beyond what the wrappers provide.

When to reach for a tooltip

  • Icon-only buttons or controls where the label isn't always visible — toolbars, table-row actions
  • Form fields and inputs — brief field-level hints that don't deserve permanent helper text
  • Truncated text — reveal the full value on hover
  • Abbreviations and technical terms — define on first use
  • Data points in charts and dashboards — name the value the user is hovering

When not to use a tooltip

  • Critical information that the user needs to complete a task — make it visible (inline helper text or a callout)
  • Long explanations that need to be read carefully — use a popover or Modal instead
  • Interactive content (links, buttons, forms) — tooltips dismiss on hover-out, so anything inside them is hard to reach. Use a popover.
  • Replacing visible labels on important actions — the label should be visible, with the tooltip reinforcing
  • Mobile-first interactions — hover doesn't exist on touch devices; design a non-hover affordance for those flows

TextTooltip — With title

html
<TextTooltip title="Saved actions" content="Quick links to recent changes you've made.">
  <Button variant="secondary">With title</Button>
</TextTooltip>

TextTooltip — Placements

placement accepts the 12 variants documented in the props table.

html
<TextTooltip content="Top tooltip" placement="top">
  <Button>Top</Button>
</TextTooltip>
<TextTooltip content="Bottom-end" placement="bottom-end">
  <Button>Bottom-end</Button>
</TextTooltip>

TextTooltip — Connected (no offset)

Removes the gap between the trigger and tooltip — useful when the tooltip should feel part of the trigger surface.

html
<TextTooltip content="Connected directly to the trigger." placement="top-start" connected>
  <Button>Connected</Button>
</TextTooltip>

TextTooltip — Border variants

html
<TextTooltip content="Success border" border="success">…</TextTooltip>

RichTextTooltip

For tooltips that need to surface a list of items with optional titles. Use sparingly — if you reach for this often, consider a Popover.

html
<RichTextTooltip :items="items">
  <Button>Show details</Button>
</RichTextTooltip>

items is { title?: string; description: string }[].

Information-icon trigger

When TooltipTrigger's default slot is empty, it renders an inline help-icon (information-circle-outline). Useful for inline contextual help next to a form label or table header.

Annual revenue
html
<Tooltip placement="top">
  <TooltipTrigger />
  <TooltipContent compact>
    <p>Reported revenue from the last fiscal year.</p>
  </TooltipContent>
</Tooltip>

TextTooltip — Props

PropTypeDefaultDescription
contentstringrequiredBody text.
titlestringOptional bold title above the content.
placement'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'right' | 'right-start' | 'right-end' | 'left' | 'left-start' | 'left-end''top'Anchor side of the tooltip relative to the trigger.
border'default' | 'primary' | 'success' | 'warning' | 'error' | 'ai' | 'energy' | 'ghg' | 'waste' | 'water''default'Border accent color.
connectedbooleanfalseRemove the offset gap between trigger and tooltip.
disabledbooleanfalseDisable the tooltip; trigger renders without hover behavior.
closeDelaynumber0Milliseconds to wait before closing on mouse-out.
animatebooleanfalseEnable open/close animation.

RichTextTooltip — Props

RichTextTooltip accepts everything TextTooltip does plus:

PropTypeDefaultDescription
items{ title?: string, description: string }[]requiredList of items to render.
maxVisibleItemsnumberCap on how many items are shown before scroll.

Slots (both wrappers)

SlotDescription
defaultThe trigger element. Receives { disabled, isOpen, close, open } slot props for advanced flows.