Button
import { Button } from '@rivocode/ui'Quando usar
Ação. Sai como <button> nativo, e vira <a> com render={<a href="..." />}.
Quando usar cada variante. primary para a ação principal da tela, uma só por
área. secondary para a alternativa. outline para chamada secundária de página
de marketing. ghost para ação discreta em tabela ou cabeçalho. destructive
para o que apaga, e só para isso.
Tamanho. sm, md e lg leem a altura do token de densidade, então encolhem
sozinhos no modo compacto. icon e iconSm sao quadrados, para botão sem texto,
que sempre precisa de aria-label. cta e de marketing: maior, em negrito, com
medida própria.
Forma. O padrão do produto e o canto de 8px. shape="pill" e assinatura de
marketing, não de formulário.
loading desabilita e anuncia ocupado.
No React Native
Traduz: o @rivocode/ui-native exporta Button - contrato controlado; hitSlop no sm, porque 32px de alvo não se toca sem ajuda. Afunda de leve no toque, e não afunda quando o sistema pede para reduzir movimento. A API não é a mesma do web (no nativo tudo é controlado), e a tabela de paridade diz o que muda peça a peça.
API
| Prop | Tipo |
|---|---|
loading0.4.0Desabilita e anuncia ocupado enquanto uma acao esta em andamento. | boolean |
ref0.4.0 | Ref<HTMLButtonElement> |
render0.4.0Troca o elemento renderizado mantendo a aparencia. | ReactElement<unknown, string | JSXElementConstructor<any>> |
shape0.4.0 | "default""pill"null |
size0.4.0 | "cta""icon""iconSm""lg""md""sm"null |
variant0.4.0 | "destructive""ghost""outline""primary""secondary"null |
Além destas, a peça aceita className, style, id e children, repassados ao elemento de baixo.