Pular para o conteúdo

Componentes

ChoiceCard

Escolha que precisa mostrar o preço da decisão. É o Radio quando a opção não cabe numa linha: ícone, título, explicação e o total no pé. Marca no canto, luz azul quando ativo.

betaEntradadesde 0.2.0@hiboupay/react

Exemplos#

Forma de pagamento

Forma de pagamento · uma entre poucas, com a marca no canto

Parcelas em duas colunas · parcela e total no mesmo cartão

Adicional pago · multiple, sempre desmarcado por padrão

Mesa

Como pagar

Escolha uma forma para continuar.

Celular · 390

Como pagar

Escolha uma forma para continuar.

Etiqueta ao lado do título · grupo sem escolha avisa

Importar#

tsx
import { ChoiceCardGroup, ChoiceCard } from "@hiboupay/react";
import type { ChoiceCardGroupProps, ChoiceCardProps } from "@hiboupay/react";

Quando usar#

Use quando

  • Forma de pagamento no checkout.
  • Condição de parcelamento com valor e total.
  • Adicional opcional com preço (seguro, garantia).

Não use quando

  • Opção que cabe numa linha: Radio.
  • Aceitar um termo: Checkbox.
  • Lista longa: Select.
  • Filtrar uma tabela: FilterChip.

Variantes#

radio

Uma entre poucas. Padrão.

multiple

Vários adicionais ao mesmo tempo. A marca vira check.

Anatomia#

  1. 01fieldset com legend (hb-label)
  2. 02Cartão de papel, raio 16
  3. 03Ícone opcional em tile
  4. 04Título type.lead
  5. 05Etiqueta Badge opcional
  6. 06Descrição
  7. 07Rodapé separado por linha fina
  8. 08ChoiceMark no canto superior direito

Estados#

offon (papel azul + anel)hoverfocus-visibledisabledinvalid

API#

Props documentadas no registro. * indica obrigatória.

Propriedades
PropTipoPadrãoDescrição
ChoiceCardGroup.name*stringname nativo compartilhado.
ChoiceCardGroup.multiplebooleanfalseTroca radio por checkbox; value vira string[].
ChoiceCardGroup.valuestring | string[]Controlado. Array quando multiple.
ChoiceCardGroup.onValueChange(value: string | string[]) => voidNova escolha.
ChoiceCardGroup.columns1 | 2 | { base, md }1Uma ou duas colunas. Objeto troca no corte md do contêiner.
ChoiceCardGroup.invalidbooleanfalseGrupo obrigatório sem escolha. aria-invalid no fieldset.
ChoiceCardGroup.messagestringMensagem em danger-ink, ligada por aria-describedby.
ChoiceCard.value*stringValor desta opção.
ChoiceCard.title*ReactNodeA decisão, em uma linha.
ChoiceCard.badgeReactNodeEtiqueta "Mais barata" ou "Recomendada" com Badge. Nunca pílula.
ChoiceCard.descriptionReactNodeO que muda se escolher.
ChoiceCard.footerReactNodeTotal, prazo ou condição, separado por linha fina.
ChoiceCard.iconReactNodeMarca do meio de pagamento ou do adicional.

Acessibilidade#

Teclado

TabEntra no grupo.
↑ ↓Troca a opção (radio).
EspaçoMarca (radio e multiple) ou desmarca (multiple).

Leitor de tela

  1. —input radio ou checkbox nativo dentro de label. O cartão inteiro é o alvo.
  2. —Grupo inválido: aria-invalid e aria-describedby na mensagem.

Boas práticas#

Faça

  • Mostre o total junto da parcela — a pessoa decide com os dois números.
  • Ordene da condição mais barata para a mais longa.

Evite

  • Pré-selecionar a opção mais cara.
  • Esconder taxa no rodapé em corpo menor que 12.

Conteúdo#

  1. —Título com o número que decide: "12x R$ 223,04". Rodapé com o total: "Total R$ 2.676,48".

Tokens#

Os tokens que desenham este componente. Clique para ver valor, variável e classe.

Relacionados#