Tooltip
Une courte infobulle au survol ou au focus clavier, qui s’ouvre après un bref arrêt, passe instantanément d’un voisin à l’autre et affiche les raccourcis.
pnpm dlx shadcn@latest add https://hextaui.com/r/tooltip.jsonAjoute le composant, les tokens de thème HextaUI et les composants HextaUI dont il dépend.
Ajoutez les tokens de thème à votre CSS global, si ce n’est pas déjà fait.
Installez les dépendances.
pnpm add @base-ui/react cnCopiez et collez le code suivant dans votre projet.
components/ui/tooltip.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
Un tooltip s'ouvre après un court arrêt sur le déclencheur, ou aussitôt que le déclencheur reçoit le focus clavier. Une fois l'un affiché, ses voisins s'ouvrent instantanément et sans animation, si bien que parcourir une barre d'outils revient à lire des labels plutôt qu'à attendre chacun.
Ce changement instantané fonctionne entre les tooltips qui partagent un TooltipProvider. Enveloppez votre application (ou une barre d'outils) dans un provider pour partager le délai. Un tooltip sans provider fonctionne seul avec les mêmes valeurs par défaut.
Côtés
Définissez side sur TooltipContent. Les côtés logiques suivent le sens de lecture, et le tooltip se retourne quand la place manque.
Avec une flèche
arrow ajoute un pointeur qui reste sur le déclencheur même quand le tooltip se décale pour tenir à l'écran.
Raccourci clavier
Placez un Kbd ou un KbdGroup après le label. Il reprend les couleurs du tooltip et se place à la fin, en affichant ⌘ sur les appareils Apple et Ctrl ailleurs.
Barre d'outils
Arrêtez-vous sur un bouton, puis glissez le long du groupe. Les tooltips sous un même TooltipProvider s'échangent instantanément pendant que vous passez de l'un à l'autre.
Désactivé
Un bouton désactivé peut quand même expliquer pourquoi avec focusableWhenDisabled, qui le garde survolable et dans l'ordre de tabulation. disabled sur Tooltip désactive le tooltip.
Contenu long
Le texte passe à la ligne à une largeur confortable et ne dépasse jamais le bord de l'écran, même pour de longues URL.
Contrôlé
Passez open et onOpenChange pour piloter vous-même le tooltip. La raison indique ce qui l'a ouvert ou fermé.
Un tooltip, plusieurs déclencheurs
Créez un handle avec createTooltipHandle et passez un payload depuis chaque déclencheur pour partager un seul tooltip.
De droite à gauche
Dans dir="rtl", inline-end s'ouvre à gauche et le raccourci passe à l'autre extrémité.
| Touche | Action |
|---|---|
| Tab | Donner le focus clavier au déclencheur ouvre aussitôt son tooltip. |
| Esc | Ferme le tooltip et garde le focus sur le déclencheur. |
| EnterSpace | Active le déclencheur et ferme le tooltip, pour qu'il ne cache pas ce qui se passe ensuite. |
- Un tooltip est un indice visuel, pas un label. Donnez aux déclencheurs réduits à une icône un
aria-labelidentique au texte du tooltip. - Rien ne s'ouvre au toucher, et un tap ne fait que ce que fait le déclencheur. Ne mettez rien d'indispensable dans un tooltip ; utilisez un popover pour cela.
- Les utilisateurs de pointeur peuvent se déplacer sur le tooltip pour le lire ou le sélectionner sans qu'il se ferme.
- Avec la réduction des animations, le tooltip apparaît en fondu sans changement d'échelle.
Construit sur le tooltip de Base UI. Chaque partie accepte les props de la primitive qu'elle enveloppe.
| Prop | Type | Par défaut |
|---|---|---|
delayMillisecondes d'arrêt sur un déclencheur avant l'ouverture. | number | 300 |
closeDelayMillisecondes avant la fermeture après le départ. | number | 0 |
timeoutDurée après la fermeture d'un tooltip pendant laquelle le suivant s'ouvre instantanément. | number | 400 |
| Prop | Type | Par défaut |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open, details) => void | – |
onOpenChangeCompleteAppelé après l’animation d’ouverture ou de fermeture. | (open) => void | – |
disabledDésactive le tooltip. | boolean | false |
disableHoverablePopupSe ferme dès que le pointeur quitte le déclencheur. | boolean | false |
trackCursorAxis | "none" | "x" | "y" | "both" | "none" |
handleIssu de createTooltipHandle. | TooltipHandle<Payload> | – |
children | ReactNode | ({ payload }) => ReactNode | – |
| Prop | Type | Par défaut |
|---|---|---|
delayRemplace le délai du provider pour ce déclencheur. | number | – |
closeDelay | number | – |
closeOnClick | boolean | true |
disabledEmpêche ce déclencheur d'ouvrir le tooltip. L'élément reste activé. | boolean | false |
handle | TooltipHandle<Payload> | – |
payload | Payload | – |
render | ReactElement | (props, state) => ReactElement | <button> |
| Attribut | Description |
|---|---|
data-slot="tooltip-trigger" | Le déclencheur. |
data-popup-open | Présent tant que son tooltip est ouvert. |
data-trigger-disabled | Présent quand le déclencheur ne peut pas ouvrir le tooltip. |
| Prop | Type | Par défaut |
|---|---|---|
side | "top" | "bottom" | "left" | "right" | "inline-start" | "inline-end" | "top" |
align | "start" | "center" | "end" | "center" |
sideOffset | number | (data) => number | 6, or 8 with arrow |
alignOffset | number | 0 |
arrow | boolean | false |
collisionPadding | number | 8 |
arrowPadding | number | 8 |
portalPropsComme container ou keepMounted. | TooltipPortal props | – |
| Attribut | Description |
|---|---|
data-slot="tooltip-content" | Le popup. |
data-slot="tooltip-positioner" | Le wrapper de positionnement autour de la popup. |
data-side | Le côté sur lequel il s'est ouvert après retournement. |
data-align | L'alignement. |
data-instant | "delay", "focus" ou "dismiss" quand il s'ouvre ou se ferme sans animation. |
data-starting-style | Présent pendant l’animation d’entrée. |
data-ending-style | Présent pendant l’animation de sortie. |
--available-width | Marge entre le déclencheur et le bord de l'écran. |
--transform-origin | Le point à partir duquel le tooltip change d'échelle. |
Rendu pour vous par arrow. Ne l'utilisez directement que pour composer votre propre partie de contenu.
| Attribut | Description |
|---|---|
data-slot="tooltip-arrow" | La flèche. |
data-uncentered | Présent quand il ne peut pas pointer vers le centre du déclencheur. |
- Alert dialogUne boîte de dialogue de confirmation pour les actions destructrices ou importantes, qui attend le travail asynchrone et devient une bottom sheet sur mobile.
- CommandUne liste d’actions recherchable, intégrée ou en palette ⌘K, avec pages, raccourcis et correspondances surlignées.
- Context menuUn menu d’actions au clic droit ou à l’appui long, avec sous-menus, éléments case à cocher et radio, et retour visuel de maintien au toucher.
- DialogUne fenêtre au-dessus de la page pour les formulaires et les tâches ciblées, avec en-tête et pied de page épinglés, imbrication, et une bottom sheet balayable sur mobile.
- DrawerUn panneau qui glisse depuis n’importe quel bord et suit votre doigt, avec des points d’accroche, une poignée fonctionnelle et des drawers imbriqués qui s’empilent.
- Dropdown menuUn menu d’actions et d’options derrière un bouton, avec groupes, sous-menus, éléments case à cocher et radio, et raccourcis.
Utilisé dans les blocks
Des blocks qui s’appuient sur Tooltip.
- Prompt InputUn champ de discussion qui démarre sur une seule ligne sobre, grandit en carte à mesure que vous écrivez et descend une fois la conversation lancée. Entrée envoie, sans risque avec la saisie japonaise et chinoise. Collez, déposez ou choisissez des fichiers avec aperçus, progression et nouvel essai. @ ajoute des fichiers et / lance des commandes depuis un menu au niveau du curseur. Un sélecteur de modèle avec touches numériques, un curseur d’effort qui s’anime à Max, un anneau de contexte, la dictée avec forme d’onde en direct, des chips d’outils, une file pour les messages saisis pendant qu’une réponse arrive en streaming, et des brouillons qui survivent à un rechargement.
- Agent TodosAffichez le plan d’un agent pendant son travail. Chaque étape passe de backlog à à faire, en cours puis terminé, avec des durées en direct, les échecs et les appels d’outils qui les sous-tendent. Une pastille de statut à placer au-dessus du champ de saisie, des changements de plan visibles et une étape de relecture pour modifier le plan avant son exécution.
- API keysLa page des clés d’API d’un produit d’IA, comme les consoles d’OpenAI et d’Anthropic. Créez des clés avec des permissions limitées et une expiration, voyez le secret une seule fois avec une copie qui confirme, révoquez avec annulation, renommez sur place, effectuez une rotation avec période de grâce et consultez l’utilisation par clé.
- ArtifactLe panneau à côté d’un chat IA qui montre ce que le modèle a produit. Pages web, SVG, documents et code arrivent en direct, puis passent à un aperçu isolé en sandbox, avec des versions à comparer et à restaurer, une séparation redimensionnable et une bottom sheet sur mobile.