Pular para o conteúdo

Select

Lista de seleção com gatilho personalizado, listbox flutuante e suporte a teclado.

Em cada stack

HTML e Astro
Classes itps-* do CSS Sinapse, com todas as variantes desta página.
React e Vue
Componentes padrão do shadcn (select) com o tema Sinapse: cores, fonte e raio vêm do tema, e as variantes itps-* desta página existem só no HTML.
  • SUS
  • Amil
  • Bradesco Saúde

Instalação

O comando instala o Select da sua stack com o tema Sinapse. Configure o registry uma vez por projeto em Comece por aqui.

terminal · React/Next

pnpm dlx shadcn@latest add @sinapse/select

terminal · Vue 3/Nuxt 4

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

Em React/Next com shadcn/ui e Vue 3/Nuxt 4 com shadcn-vue, use o Select composto da stack. O tema Sinapse vem dos tokens instalados pelo CLI do shadcn ou do shadcn-vue; o exemplo segue a API oficial de componentes compostos.

Use itps-select quando precisar do contrato copy-first em HTML ou wrappers finos. Este site usa src/scripts/forms.ts (não incluído no pacote) para inicializar os elementos com data-itps-select*; no produto, implemente o mesmo contrato ou use o componente da sua stack.

Exemplos

Opções

NecessidadeReact/Next e Vue 3/Nuxt 4HTML
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]

Tamanhos e estados

EstadoReact/Next e Vue 3/Nuxt 4HTML
Pequenoajuste no SelectTrigger instaladoitps-select--sm
Padrãopadrão 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__inputCampo oculto 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.