Pular para o conteúdo

Select

Lista de seleção com trigger custom, listbox flutuante e suporte a teclado.

  • SUS
  • Amil
  • Bradesco Saúde

Instalação

Instale o Select da sua stack e rode o comando individual ITpS em seguida. O comando itps add select é theme-only: ele valida o slug e confirma que o contrato visual vem do tema ITpS, das classes copy-first e dos snippets desta página.

terminal · React/Next

pnpm dlx shadcn@latest add select
pnpm dlx github:ITPS/sinapse-ui-cli add select

terminal · Vue3/Nuxt4

pnpm dlx shadcn-vue@latest add select
pnpm dlx github:ITPS/sinapse-ui-cli add select

O comando individual adapta só este componente; não instala o catálogo inteiro.

Uso

Em React/Next com shadcn/ui e Vue3/Nuxt4 com shadcn-vue, use o Select composto da stack. O tema ITpS vem dos tokens aplicados pela CLI, então o exemplo deve seguir a API oficial de compound components.

Use itps-select quando precisar do contrato copy-first em HTML ou wrappers finos. No site, src/scripts/forms.ts inicializa os elementos com data-itps-select*; em produto, mantenha o mesmo contrato ou use o componente da sua stack.

Exemplos

Opções

NecessidadeReact/Next e Vue3/Nuxt4HTML
PlaceholderSelectValue placeholder="..."itps-select__value[data-placeholder="true"]
Opção simplesSelectItem value="sus"li[role="option"][data-value="sus"]
Opção com descriçãocomponha conteúdo dentro de SelectItem quando a stack permitiritps-select__option-description
Valor enviadoestado controlado ou formulário da stackinput[type="hidden"][data-itps-select-input]

Sizes e estados

EstadoReact/Next e Vue3/Nuxt4HTML
Pequenoajuste no SelectTrigger instaladoitps-select--sm
Padrãodefault do componentesem modificador
Grandeajuste no SelectTrigger instaladoitps-select--lg
Desabilitadodisableddisabled no trigger
Inválidoaria-invalid="true"aria-invalid="true" no trigger

Conecte textos de apoio ou erro com aria-describedby. Para valor controlado em React/Vue, siga o estado da stack em vez de copiar o JS do exemplo.

Com Field

Quando houver label, obrigatório, apoio ou erro, componha com Field e conecte o texto auxiliar ao trigger.

  • SUS Atendimento público
  • Particular Pagamento direto

Obrigatório para confirmar o cadastro.

API copy-first

Classe/atributoUso
itps-selectWrapper visual e raiz de estado.
data-itps-selectMarca a raiz inicializável pelo script.
itps-select__triggerBotão com role="combobox".
data-itps-select-triggerElemento que abre e fecha o painel.
itps-select__valueTexto visível ou placeholder.
data-itps-select-valueElemento atualizado ao selecionar opção.
itps-select__inputInput hidden que envia o valor no formulário.
data-itps-select-inputInput sincronizado pelo script.
itps-select__panelPainel com role="listbox".
data-itps-select-panelLista usada para navegação por teclado.
itps-select__optionItem com role="option".
data-itps-select-optionOpção selecionável pelo script.
data-stateExpõe estado visual aberto ou fechado.
aria-expandedComunica se o painel está aberto.
aria-selectedComunica a opção selecionada.
aria-describedbyLiga o trigger ao texto de apoio ou erro.

Acessibilidade

Use role="combobox" no trigger, role="listbox" no painel e role="option" em cada item. Atualize aria-expanded no trigger e aria-selected na opção selecionada. O teclado esperado é: Enter, Space ou ArrowDown abre; ArrowUp/ArrowDown navegam; Home/End vão aos extremos; Enter/Space seleciona; Escape fecha; Tab segue o fluxo.