Tooltip
Dica visual breve que explica um controle ao passar o mouse ou focar.
Tooltip mostra um pedaço de texto curto quando o usuário passa o cursor ou dá foco a um elemento. É uma dica, não conteúdo essencial — se a informação é necessária para decidir a ação, coloque no rótulo, não em um tooltip.
'use client';
import {
Button,
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from '@uranus-workspace/design-system';
import { Info } from 'lucide-react';
export default function TooltipDefault() {
return (
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="icon" aria-label="Mais informações">
<Info />
</Button>
</TooltipTrigger>
<TooltipContent>Publicado a 3 horas atrás por Gustavo</TooltipContent>
</Tooltip>
</TooltipProvider>
);
}
Anatomia
- TooltipProvider — envelopa a árvore (geralmente na raiz do app) e define delay padrão.
- Tooltip — o container local que mantém o estado.
- TooltipTrigger — o elemento que dispara o tooltip. Use
asChildpara herdar um botão existente. - TooltipContent — o balão em si, portal para o body.
Uso
import {
Button,
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from '@uranus-workspace/design-system';
import { Info } from 'lucide-react';
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button variant="ghost" size="icon" aria-label="Mais informações">
<Info />
</Button>
</TooltipTrigger>
<TooltipContent>Publicado a 3 horas atrás</TooltipContent>
</Tooltip>
</TooltipProvider>Faça
- Use tooltips em botões apenas de ícone para revelar o nome acessível visível.
- Mantenha o texto curto — uma frase, idealmente uma linha.
- Aparecem com delay (~500ms) para não atrapalhar o usuário em trânsito.
Não faça
- Não coloque conteúdo interativo dentro de um tooltip (link, input). Use
Popoverpara isso. - Não use tooltip para informação que decide a ação — rótulos precisam ser visíveis.
- Não substitua
aria-labelpor tooltip — eles resolvem necessidades diferentes.
Acessibilidade
- Radix Tooltip garante foco por teclado: dar
focusao trigger também abre o tooltip. - O texto do tooltip é associado via
aria-describedby, nãoaria-labelledby— ele descreve, não nomeia. - Botões apenas de ícone precisam de
aria-labelno trigger. O tooltip é dica visual, não substitui o nome acessível. - Usuários com
prefers-reduced-motionrecebem uma entrada instantânea em vez de animação.