Button

Hierarquia, variantes e estados do botão no ME — o UButton do Nuxt UI, tematizado.

No Figma, use ButtonPrimary, ButtonNeutral ou ButtonError da Library Components — nunca recrie botões avulsos. No código é o UButton do Nuxt UI tematizado pelo ME (primary = me-brand-500 · #1052E0); não existe um Button próprio do EDS — diferente do ButtonBar, que é bloco EletroDS.

O botão dispara a ação de uma tela. O que importa não é qual cor existe, e sim a hierarquia: cada contexto tem uma ação principal, e o visual precisa deixar isso óbvio à primeira leitura.

Hierarquia

O Nuxt UI expõe 7 cores × 6 variantes (42 combinações). O ME usa só este subconjunto — escolha pela importância da ação, não pela estética:

NívelComoQuando — e por quê
Primáriacolor="primary" (solid)A ação que a tela quer que você faça (CTA). Uma só por contexto — dois primários competindo diluem o foco e o usuário hesita.
Secundáriacolor="neutral" variant="outline"Ação de apoio relevante. Presente e clicável, mas sem roubar a atenção do primário.
Terciáriacolor="neutral" variant="ghost"Ação frequente de baixo peso (toolbar, só-ícone). Peso visual mínimo para não poluir áreas densas.
Destrutivacolor="error"Excluir/remover. A cor sinaliza risco antes do clique; quando irreversível, exige confirmação (ver Excluir).
Confirmaçãocolor="success"Uso pontual, em confirmações positivas explícitas. Não é o CTA padrão — não substitui o primário.

Tamanhos & largura

Quero…UsePor quê
Densidade de tabelasize="sm"Cabe na altura da linha sem quebrar o ritmo.
Padrão das telassize="md" (default)Tamanho de referência do produto.
Destaque / telas amplassize="lg" · xlCTA que precisa de presença.
Largura totalblockSó em mobile e rodapé de modal — alvo de toque maior e ação única em foco em telas estreitas. Evite no desktop (botão esticado perde a leitura de hierarquia).

Estados

EstadoComportamento
DefaultAção disponível.
Hover / focusFoco sempre visível (o teclado depende disso); acionável por Enter/Espaço.
disabledBotão inerte — use quando a ação não se aplica ao contexto. Percebido além da cor (opacidade + aria-disabled).
loading / loading-autoSpinner no botão e bloqueia o reclique; mantém o rótulo (não vira só ícone) e marca aria-busy. loading-auto liga sozinho enquanto a promise do @click resolve.
square + iconBotão só-ícone — exige nome acessível (aria-label); o ícone não basta para leitor de tela.

Onde se aplica

No código

É o UButton do Nuxt UI, tematizado pelo ME (não há componente EDS próprio). Props, eventos e tipos completos — para quem for implementar — ficam no doc técnico: ui.nuxt.com/docs/components/button. Aqui o foco é o uso em Design.

Para fileiras de ações (várias ações num header/toolbar), não enfileire botões soltos — use o ButtonBar.

Acessibilidade

  • Botão só-ícone (square + icon) precisa de nome acessível (aria-label) — o ícone não basta para leitores de tela.
  • Foco visível sempre; ordem de foco coerente com a leitura. Acionável por Enter/Espaço.
  • Alvo de toque ≥ 44px; em densidade de tabela (size="sm"), garanta a área clicável.
  • disabled/loading percebidos além da cor (aria-disabled / aria-busy).
  • Hierarquia e risco nunca pela cor — a destrutiva (error) vem com rótulo claro e, quando crítica, confirmação.

Labeling

Rótulo de botão = verbo + entidade explícita ("Novo fornecedor", não só "Novo") — assim a ação se explica fora de contexto. A escolha do verbo (Novo / Adicionar / Gerar) segue Voz e conteúdo e o pattern Adicionar.