Tooltip
Uma dica curta no hover ou no foco do teclado que abre após uma breve pausa, alterna instantaneamente entre vizinhos e exibe atalhos.
pnpm dlx shadcn@latest add https://hextaui.com/r/tooltip.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react cnCopie e cole o código a seguir no seu projeto.
components/ui/tooltip.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Um tooltip abre após uma breve pausa sobre o gatilho, ou na hora quando o gatilho recebe foco do teclado. Com um aberto, os vizinhos abrem instantaneamente e sem animação, então percorrer uma toolbar parece ler rótulos em vez de esperar por cada um.
Essa troca instantânea funciona entre tooltips que compartilham um TooltipProvider. Envolva seu app (ou uma toolbar) em um para compartilhar o delay. Um tooltip sem provider ainda funciona sozinho com os mesmos padrões.
Lados
Defina side em TooltipContent. Os lados lógicos seguem a direção de leitura, e o tooltip inverte quando não há espaço.
Com seta
arrow adiciona um ponteiro que permanece no gatilho mesmo quando o tooltip se desloca para caber na tela.
Atalho de teclado
Coloque um Kbd ou KbdGroup depois do rótulo. Ele assume as cores do tooltip e fica no final, mostrando ⌘ em dispositivos Apple e Ctrl nos demais.
Toolbar
Pare em um botão e depois deslize pelo grupo. Tooltips sob um mesmo TooltipProvider trocam instantaneamente enquanto você passa de um para outro.
Desabilitado
Um botão desabilitado ainda pode explicar o motivo com focusableWhenDisabled, que o mantém com hover e na ordem de tabulação. disabled em Tooltip desliga o tooltip.
Conteúdo longo
O texto quebra em uma largura confortável e nunca passa da borda da tela, nem mesmo URLs longas.
Controlado
Passe open e onOpenChange para controlar o tooltip você mesmo. O motivo diz o que o abriu ou fechou.
Um tooltip, vários gatilhos
Crie um handle com createTooltipHandle e passe um payload de cada gatilho para compartilhar um único tooltip.
Da direita para a esquerda
Dentro de dir="rtl", inline-end abre à esquerda e o atalho vai para a outra ponta.
| Tecla | Ação |
|---|---|
| Tab | Focar o gatilho pelo teclado abre seu tooltip na hora. |
| Esc | Fecha o tooltip e mantém o foco no gatilho. |
| EnterSpace | Ativa o gatilho e fecha o tooltip, para não cobrir o que acontece em seguida. |
- Um tooltip é uma dica visual, não um rótulo. Dê aos gatilhos apenas com ícone um
aria-labelque corresponda ao texto do tooltip. - Nada abre em toque, e um toque só faz o que o gatilho faz. Não coloque em um tooltip nada de que as pessoas precisem; use um popover para isso.
- Usuários de ponteiro podem mover o mouse sobre o tooltip para lê-lo ou selecioná-lo sem que ele feche.
- Com movimento reduzido, o tooltip aparece com fade sem escala.
Construído sobre o tooltip do Base UI. Cada parte aceita as props da primitiva que envolve.
| Prop | Tipo | Padrão |
|---|---|---|
delayMilissegundos de pausa sobre um gatilho antes de abrir. | number | 300 |
closeDelayMilissegundos antes de fechar após sair. | number | 0 |
timeoutQuanto tempo depois de um fechar o próximo abre instantaneamente. | number | 400 |
| Prop | Tipo | Padrão |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open, details) => void | – |
onOpenChangeCompleteChamado após a animação de abertura ou fechamento. | (open) => void | – |
disabledDesliga o tooltip. | boolean | false |
disableHoverablePopupFecha assim que o ponteiro sai do gatilho. | boolean | false |
trackCursorAxis | "none" | "x" | "y" | "both" | "none" |
handleDe createTooltipHandle. | TooltipHandle<Payload> | – |
children | ReactNode | ({ payload }) => ReactNode | – |
| Prop | Tipo | Padrão |
|---|---|---|
delaySubstitui o delay do provider para este gatilho. | number | – |
closeDelay | number | – |
closeOnClick | boolean | true |
disabledImpede que este gatilho abra o tooltip. O elemento continua habilitado. | boolean | false |
handle | TooltipHandle<Payload> | – |
payload | Payload | – |
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descrição |
|---|---|
data-slot="tooltip-trigger" | O gatilho. |
data-popup-open | Presente enquanto seu tooltip está aberto. |
data-trigger-disabled | Presente quando o gatilho não pode abrir o tooltip. |
| Prop | Tipo | Padrão |
|---|---|---|
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 |
portalPropsComo container ou keepMounted. | TooltipPortal props | – |
| Atributo | Descrição |
|---|---|
data-slot="tooltip-content" | O popup. |
data-slot="tooltip-positioner" | O wrapper de posicionamento em volta do popup. |
data-side | O lado em que abriu depois de inverter. |
data-align | O alinhamento. |
data-instant | "delay", "focus" ou "dismiss" quando abre ou fecha sem animação. |
data-starting-style | Presente enquanto a animação de entrada ocorre. |
data-ending-style | Presente enquanto a animação de saída ocorre. |
--available-width | Espaço entre o gatilho e a borda da tela. |
--transform-origin | O ponto a partir do qual o tooltip escala. |
Renderizado para você por arrow. Use diretamente só ao compor sua própria parte de conteúdo.
| Atributo | Descrição |
|---|---|
data-slot="tooltip-arrow" | A seta. |
data-uncentered | Presente quando não consegue apontar para o centro do gatilho. |
- Alert dialogUm diálogo de confirmação para ações destrutivas ou importantes que aguarda trabalho assíncrono e vira um bottom sheet no celular.
- CommandUma lista pesquisável de ações, inline ou como paleta ⌘K, com páginas, atalhos e correspondências destacadas.
- Context menuUm menu de ações ao clicar com o botão direito ou pressionar e segurar, com submenus, itens de checkbox e de rádio e feedback de pressão no toque.
- DialogUma janela sobre a página para formulários e tarefas focadas, com cabeçalho e rodapé fixos, aninhamento e um bottom sheet com deslize no celular.
- DrawerUm painel que desliza a partir de qualquer borda e acompanha o seu dedo, com pontos de ancoragem, uma alça funcional e drawers aninhados que se empilham.
- Dropdown menuUm menu de ações e opções atrás de um botão, com grupos, submenus, itens de checkbox e de rádio e atalhos.
Usado em blocos
Blocos que se baseiam em Tooltip.
- Prompt InputUm campo de conversa que começa como uma linha discreta, cresce até virar um card conforme você escreve e desce quando a conversa começa. Enter envia, de forma segura com entrada em japonês e chinês. Cole, solte ou escolha arquivos com prévias, progresso e nova tentativa. @ adiciona arquivos e / executa comandos a partir de um menu no cursor. Um seletor de modelo com teclas numéricas, um slider de esforço que ganha vida no Max, um anel de contexto, ditado com forma de onda ao vivo, chips de ferramentas, uma fila para mensagens digitadas enquanto uma resposta é transmitida e rascunhos que sobrevivem a um recarregamento.
- Agent TodosMostre o plano de um agente enquanto ele trabalha. Cada etapa passa de backlog para a fazer, em andamento e concluída, com tempos ao vivo, falhas e as chamadas de ferramenta por trás dela. Uma pílula de status para acima do composer, mudanças no plano que você consegue ver e uma etapa de revisão para editar o plano antes de executá-lo.
- API keysA página de chaves de API de um produto de IA, como nos consoles da OpenAI e da Anthropic. Crie chaves com permissões restritas e uma expiração, veja o segredo uma única vez com uma cópia que confirma, revogue com desfazer, renomeie no próprio lugar, faça a rotação com um período de tolerância e veja o uso por chave.
- ArtifactO painel ao lado de um chat de IA que mostra o que o modelo criou. Páginas web, SVGs, documentos e código chegam em streaming ao vivo e depois passam para uma prévia isolada em sandbox, com versões que você pode comparar e restaurar, uma divisão redimensionável e um bottom sheet no celular.