Pular para o conteúdo

Tooltip

Ajuda curta exibida ao passar o mouse ou focar um gatilho.

Em cada stack

HTML e Astro
Classes itps-* do CSS Sinapse, com todas as variantes desta página.
React e Vue
Componentes padrão do shadcn (tooltip) com o tema Sinapse: cores, fonte e raio vêm do tema, e as variantes itps-* desta página existem só no HTML. O Button é o Sinapse.
Esse campo é calculado com base nos últimos 12 meses.

Instalação

O comando instala o Tooltip da sua stack e o Button Sinapse com o tema Sinapse. Configure o registry uma vez por projeto em Comece por aqui.

terminal · React/Next

pnpm dlx shadcn@latest add @sinapse/tooltip

terminal · Vue 3/Nuxt 4

pnpm dlx shadcn-vue@latest add https://dsystem.sinapse.org.br/r/vue/tooltip.json

Sem shadcn, não há instalação por componente: use o CSS Sinapse e as classes da API copy-first desta página.

Uso

Em React/Next com shadcn/ui e Vue 3/Nuxt 4 com shadcn-vue, use Tooltip, TooltipTrigger e TooltipContent dentro de TooltipProvider. A stack controla atraso, posicionamento, foco e hover.

Para HTML ou wrappers finos, use itps-tooltip com trigger focável, aria-describedby e conteúdo com role="tooltip". Tooltip é ajuda curta e não interativa; para mensagem persistente use Callout.

Exemplos

Estrutura

PeçaReact/Next e Vue 3/Nuxt 4HTML
EscopoTooltipProvidersem equivalente obrigatório
RaizTooltipitps-tooltip
TriggerTooltipTriggeritps-tooltip__trigger + aria-describedby
ConteúdoTooltipContentitps-tooltip__content[role="tooltip"]

Ícone e posição

Use ícone quando o contexto já sugere ajuda. Em copy-first, itps-tooltip--top é o padrão; itps-tooltip--bottom ajuda quando não há espaço acima.

Atestado Atestado emitido pelo médico responsável.

API copy-first

Classe/atributoUso
itps-tooltipWrapper da relação trigger/conteúdo.
itps-tooltip--smTamanho compacto. Sem modificador, usa o tamanho padrão.
itps-tooltip--top, itps-tooltip--bottomPosição visual.
itps-tooltip__triggerBotão ou controle focável.
itps-tooltip__contentConteúdo curto com role="tooltip".
role="tooltip"Identifica o conteúdo como tooltip.
aria-describedbyLiga trigger ao conteúdo.
data-dismissedEsconde o conteúdo depois do Esc, até o mouse ou o foco sair.
aria-labelNomeia triggers apenas com ícone.
aria-hidden="true"Esconde ícones decorativos de tecnologias assistivas.

Acessibilidade

O trigger precisa ser focável e ter nome acessível. Use aria-label quando o trigger for só ícone. Não coloque links, botões, inputs ou conteúdo essencial dentro de tooltip; o conteúdo deve complementar, não substituir label, validação ou texto de ajuda persistente.

Teclado e ponteiro:

SituaçãoComportamento esperado
Foco pelo teclado no triggerO conteúdo aparece, como no hover.
Mouse sobre o conteúdoO conteúdo continua visível, para ser lido ou ampliado (WCAG 1.4.13).
EscEsconde o conteúdo sem tirar o foco do trigger.
Sair com o mouse ou o focoO conteúdo some.

No shadcn, o Tooltip já segue essas regras. Na API copy-first, o CSS cuida do foco e do hover; o Esc precisa deste script, que não vem no pacote:

tooltip.js

document.addEventListener('keydown', (event) => {
  if (event.key !== 'Escape') return;
  document.querySelectorAll('.itps-tooltip').forEach((tooltip) => {
    if (tooltip.matches(':hover, :focus-within')) tooltip.setAttribute('data-dismissed', '');
  });
});

document.querySelectorAll('.itps-tooltip').forEach((tooltip) => {
  const reset = () => tooltip.removeAttribute('data-dismissed');
  tooltip.addEventListener('mouseleave', reset);
  tooltip.addEventListener('focusout', reset);
});