Capítulo 47 de 51
A sighted mouse/keyboard-only visual label — disabled entirely on touch devices (no reliable touch-reveal gesture exists, and it would conflict with long-press context menus), never a substitute for labeling the trigger itself, and the wrong choice whenever the trigger's own purpose is "open this popup" rather than something else.
aria-label closely matching the tooltip content, since screen-reader users never see the tooltip at all.openOnHover); if the trigger does something else and the popup is incidental clarification, it's a Tooltip. "Infotip" info-icon patterns are Popover, not Tooltip, specifically so touch/AT users can still reach the content.Provider → Root → Trigger, Portal → Positioner → Popup → Arrow, Viewport.Provider: sets shared delay/closeDelay/timeout for every tooltip beneath it — the same "consistent hover timing app-wide" pattern as Navigation Menu's Root-level delay.trackCursorAxis (on Root): makes the tooltip follow the cursor along one axis instead of staying anchored to the trigger element — useful for tooltips on wide elements (e.g. a chart) where position should reflect pointer location.disableHoverablePopup: prevents the tooltip itself from being hoverable (normally you can move the pointer from trigger into the tooltip content without it closing) — disable when the tooltip is purely informational and shouldn't be interactive.| Part | Notable props | Notable data attributes |
|---|---|---|
Provider | delay, closeDelay, timeout | — |
Root | open/onOpenChange, trackCursorAxis, disableHoverablePopup, handle | — |
Trigger | closeOnClick, delay/closeDelay (override), disabled | data-popup-open, data-trigger-disabled |
Positioner | full anchored-positioning family (side/align/collisionBoundary/...) | data-anchor-hidden, data-align, data-side |
aria-label on the trigger to mirror the tooltip text — this is not optional, since AT users have zero other way to get that information.Provider once per app (or per logical UI region) to set consistent delay/closeDelay, rather than tuning timing per tooltip.openOnHover, not Tooltip.