Ariadne

TooltipComponent

import Example from ‘../../src/@primer/gatsby-theme-doctocat/components/example’ import RequiresJSFlash from ‘../../src/@primer/gatsby-theme-doctocat/components/requires-js-flash’

Tooltip only appears on mouse hover or keyboard focus and contain a label or description text. Use tooltips sparingly and as a last resort.

When using a tooltip, follow the provided guidelines to avoid accessibility issues.

  • Tooltip text should be brief and to the point. The tooltip content must be a string.
  • Tooltips should contain only non-essential text. Tooltips can easily be missed and are not accessible on touch devices so never use tooltips to convey critical information.

Accessibility

  • Never set tooltips on static elements. Tooltips should only be used on interactive elements like buttons or links to avoid excluding keyboard-only users and screen reader users.
  • Place Tooltip adjacent after its trigger element in the DOM. This allows screen reader users to navigate to and copy the tooltip content.

    Which type should I set?

    Setting :description establishes an aria-describedby relationship, while :label establishes an aria-labelledby relationship between the trigger element and the tooltip,

The type drastically changes semantics and screen reader behavior so follow these guidelines carefully:

  • When there is already a visible label text on the trigger element, the tooltip is likely intended to supplement the existing text, so set type: :description. The majority of tooltips will fall under this category.
  • When there is no visible text on the trigger element and the tooltip content is appropriate as a label for the element, set type: :label. This type is usually only appropriate for an icon-only control.

Arguments

Name Type Default Description
tag Symbol, String :tooltip The rendered tag name
for_id String N/A The ID of the element that the tooltip should be attached to.
text String N/A The text content of the tooltip. This should be brief and no longer than a sentence.
type Symbol :description One of :description and :label.
direction Symbol :top One of :bottom, :left, :right, or :top.
classes String "" Classes and attributes
attributes Hash {} Classes and attributes

Examples

As a description for an icon-only button

If the tooltip content provides supplementary description, set type: :description to establish an aria-describedby relationship. The trigger element should also have a concise accessible label via aria-label.

<%= render(Ariadne::HeroiconComponent.new(icon: :moon, variant: HeroiconsHelper::Icon::VARIANT_OUTLINE, attributes: { id: "bold-button-0" })) %>
<%= render(Ariadne::TooltipComponent.new(for_id: "bold-button-0", type: :description, text: "Add bold text", direction: :top)) %>

As a label for an icon-only button

If the tooltip labels the icon-only button, set type: :label. This tooltip content becomes the accessible name for the button.

<%= render(Ariadne::ButtonComponent.new(attributes: { id: "like-button" })) { "👍" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "like-button", type: :label, text: "Like", direction: :top)) %>

As a description for a button with visible label

If the button already has visible label text, the tooltip content is likely supplementary so set type: :description.

<%= render(Ariadne::ButtonComponent.new(attributes: {id: "save-button"}, scheme: :success)) { "Save" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "save-button", type: :description, text: "This will immediately impact all organization members", direction: :right)) %>

With direction

Set direction of tooltip with direction. The tooltip is responsive and will automatically adjust direction to avoid cutting off.

<%= render(Ariadne::ButtonComponent.new(attributes: {id: "North", m: 2})) { "North" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "North", type: :description, text: "This is a North-facing tooltip, and is responsive.", direction: :top)) %>
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "South", m: 2})) { "South" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "South", type: :description, text: "This is a South-facing tooltip and is responsive.", direction: :bottom)) %>
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "East", m: 2})) { "East" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "East", type: :description, text: "This is a East-facing tooltip and is responsive.", direction: :right)) %>
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "West", m: 2})) { "West" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "West""", type: :description, text: "This is a West-facing tooltip and is responsive.", direction: :left)) %>

With relative parent

When the tooltip and trigger element have a parent container with relative: position, it should not affect width of the tooltip.

<span style="position: relative;">
  <%= render(Ariadne::ButtonComponent.new(attributes: {id: "test-button"}, scheme: :info)) { "Test" } %>
  <%= render(Ariadne::TooltipComponent.new(for_id: "test-button", type: :description, text: "This tooltip should take up the full width", direction: :bottom)) %>
</span>

Have questions?

Still have questions? Talk to support.