Pular para o conteúdo

Select

Escolhe uma ou várias opções de uma lista que abre sob demanda.

O Select é para escolher entre cinco ou mais opções conhecidas, como a Origem de um Template ou a UF de destino. Para duas ou três opções visíveis, prefira RadioButtonGroup; para filtrar por texto, use um campo de busca.

import { Label, ListBox, Select } from "@rastreio-x/ui";

Padrão

A composição leva Label, Select.Trigger (valor e indicador) e Select.Popover com um ListBox. Cada item tem id e textValue.

Playground

Alterne variante e estados do campo; abra a lista para conferir o resultado.

Variantes

primary tem sombra suave; secondary não tem, e é a variante para usar dentro de cartões e outras superfícies.

Com descrição

Description fica abaixo do gatilho e explica onde a escolha aparece.

Vários valores

selectionMode="multiple" no Select e no ListBox permite marcar mais de uma opção. O valor mostra a lista escolhida.

Controlado

Com value e onChange você guarda a escolha no estado.

Desabilitado

O campo todo (isDisabled) ou só algumas opções (disabledKeys). Diga no texto da opção por que ela não está disponível.

Com botão de limpar

Select.ClearButton limpa a escolha com o mouse. No teclado, Backspace ou Delete limpam o valor do gatilho.

Anatomia

  • Select.Trigger: o botão que abre a lista, com Select.Value e Select.Indicator.
  • Select.ClearButton: limpa a escolha (opcional).
  • Select.Popover: a camada flutuante que contém o ListBox.
  • ListBox.Item e ListBox.ItemIndicator: as opções e o sinal de selecionada.

Propriedades

Raiz (Select):

Gatilho (Select.Trigger):

Animações

A lista abre e fecha com opacity e transform em transição curta (150 ms), e o indicador gira. Com prefers-reduced-motion, a folha global da fachada reduz a transição a 0,01 ms.

Acessibilidade

  • O gatilho é um botão com aria-haspopup="listbox" e aria-expanded; a lista tem papel listbox.
  • Teclado: Enter, Espaço ou seta para baixo abrem; setas navegam; digitar a inicial salta para a opção; Enter escolhe; Esc fecha e devolve o foco ao gatilho.
  • O Label dá o nome acessível e deve estar sempre visível.
  • isRequired e isInvalid expõem aria-required e aria-invalid.

Boas práticas

Faça

Rótulo visível, opções em Title Case curto e uma opção padrão quando fizer sentido.

Evite

Placeholder no lugar do rótulo, ou um Select para duas opções que cabiam em botões de rádio.
  • Mantenha as opções em ordem previsível (alfabética ou por frequência).
  • Opção indisponível aparece bloqueada com o motivo, não desaparece.
  • Use secondary dentro de cartões e superfícies.
  • Para mais de 20 opções, ofereça busca.

Relacionados