Pular para o conteúdo

Button

Ação principal e ações de apoio com o contrato copy-first ou shadcn.

Em cada stack

HTML e Astro
Classes itps-* do CSS Sinapse, com todas as variantes desta página.
React e Vue
Componente Sinapse, com as variantes desta página (add @sinapse/button).

Instalação

O comando instala o Button Sinapse: as variantes do shadcn com o visual Sinapse em default e secondary, mais os aliases itps e itpsSecondary. Configure o registry uma vez por projeto em Comece por aqui.

terminal · React/Next

pnpm dlx shadcn@latest add @sinapse/button

terminal · Vue 3/Nuxt 4

pnpm dlx shadcn-vue@latest add https://dsystem.sinapse.org.br/r/vue/button.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

Use Button para ações que executam uma operação no contexto atual, como salvar, editar, revisar ou cancelar. Para navegação entre páginas, use Link; a página Link cobre âncoras, CTAs em linha e composição asChild/as-child.

Em React/Next e Vue 3/Nuxt 4, use variant="itps" para a ação principal e variant="itpsSecondary" para a ação de apoio. Para HTML ou wrappers finos, aplique itps-btn com o modificador visual correspondente.

Exemplos

Variantes

UsoReact/Next e Vue 3/Nuxt 4HTML
Ação principalvariant="itps"itps-btn itps-btn--primary
Ação de apoiovariant="itpsSecondary"itps-btn itps-btn--secondary
Ação contornadavariant="outline"itps-btn itps-btn--outline
Ação discretavariant="ghost"itps-btn itps-btn--ghost

Tamanhos

No Button gerado pelo shadcn, mantenha os tamanhos da stack. Nas classes copy-first, use itps-btn--sm, sem modificador para o padrão, ou itps-btn--lg.

Estados

Use disabled para bloquear interação. Para carregamento, combine disabled e aria-busy="true"; quando houver spinner, mantenha o ícone decorativo com aria-hidden="true".

Ícones

Use ícones Tabler em todas as stacks: @tabler/icons-react em React/Next, @tabler/icons-vue em Vue 3/Nuxt 4 e as classes ti ti-* em HTML. Dentro do botão, o ícone é apoio visual: use aria-hidden="true" quando o texto já descreve a ação.

API copy-first

Classe/atributoUso
itps-btnClasse base. Use sempre em botões copy-first.
itps-btn itps-btn--primaryAção principal da tela ou do fluxo.
itps-btn itps-btn--secondaryAção de apoio com menor peso visual.
itps-btn itps-btn--outlineAção contornada ou alternativa.
itps-btn itps-btn--ghostAção discreta, geralmente secundária ao conteúdo.
itps-btn--smBotão compacto. Combine com itps-btn e uma variante.
itps-btn--lgBotão de destaque. Combine com itps-btn e uma variante.
disabledBloqueia interação em <button>.
aria-disabled="true"Indica estado indisponível quando o elemento não pode usar disabled.
aria-busy="true"Comunica carregamento; use junto de disabled quando a ação está em andamento.
type="button"Evita submit acidental em formulários. Troque para submit apenas quando o botão envia o formulário.
aria-labelUse somente em botões sem texto visível ou quando o texto não descreve a ação.

Acessibilidade

  • Prefira texto visível que descreva a ação.
  • Em botões só com ícone, use aria-label.
  • Durante o carregamento, mantenha o botão desabilitado e anuncie o estado com aria-busy="true".