Ir para o conteúdo principal
WBC - GovBR-DS
Copiar página como Markdown para IA

Select

Componente estável e recomendada para novos projetos.
Anatomia, uso, comportamento visual e recomendações conceituais são mantidos pelo Padrão Digital de Governo. Esta página documenta a implementação Web Components e sua API executável.

Visão Geral

Design System

Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o Design System do GovBR.

Exemplo

Desktop (100%)
Tablet - 768px
iPhone (iOS) - 390x844
Android - 360x800
Compartilhar URL
Mudar fundo
Abrir no StackBlitz
Tela cheia
HTML
Controles
JS
CSS
Console
Angular (Somente leitura)
React (Somente leitura)
Vue (Somente leitura)
Acessibilidade
Expandir controles e código

Busca remota

Desktop (100%)
Tablet - 768px
iPhone (iOS) - 390x844
Android - 360x800
Compartilhar URL
Mudar fundo
Abrir no StackBlitz
Tela cheia
HTML
Controles
JS
CSS
Console
Angular (Somente leitura)
React (Somente leitura)
Vue (Somente leitura)
Acessibilidade
Expandir controles e código

Propriedades

autocomplete

Atributoautocomplete
DescriçãoControla o autocomplete do campo de busca interno.
Tipo"off" | "on"
Valor padrão---

borderless

Atributoborderless
DescriçãoRemove a borda do input quando o componente não está em foco.
Tipoboolean
Valor padrãofalse

customId

Atributocustom-id
DescriçãoIdentificador público do controle.
Tipostring
Valor padrãobr-select-${selectId++}

disabled

Atributodisabled
DescriçãoDesativa toda a interação do select.
Tipoboolean
Valor padrãofalse

filterable

Atributofilterable
DescriçãoHabilita a filtragem textual das opções por rótulo ou valor.
Tipoboolean
Valor padrãotrue

inline

Atributoinline
DescriçãoExibe rótulo e controle em linha. Quando informada, tem precedência sobre isInline.
Tipoboolean
Valor padrão---

inputWidth

Atributoinput-width
DescriçãoControla a largura do campo de entrada.
Tipostring
Valor padrãoundefined

isInline Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

Atributois-inline
DepreciaçãoUse inline.
DescriçãoExibe label e campo na mesma linha.
Tipoboolean
Valor padrãofalse

isMultiple Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

Atributois-multiple
DepreciaçãoUse multiple.
DescriçãoHabilita o modo de seleção múltipla.
Tipoboolean
Valor padrãofalse

isOpen Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

Atributois-open
DepreciaçãoUse open.
DescriçãoControla o estado aberto/fechado da lista.
Tipoboolean
Valor padrãofalse

itemHeight

Atributoitem-height
DescriçãoInforma a altura base de cada opção para o cálculo de virtual scroll.
Tiponumber
Valor padrão40

keepOpenOnSelect Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

Atributokeep-open-on-select
Depreciação
DescriçãoMantém a lista aberta depois de uma seleção.
Tipoboolean
Valor padrãofalse
apenas para compatibilidade com integrações legadas.

label

Atributolabel
DescriçãoTexto exibido como rótulo do campo.
Tipostring
Valor padrão---

loading

Atributoloading
DescriçãoIndica que uma busca remota de opções está pendente.
Enquanto ativo, novas opções não podem ser selecionadas; a aplicação
continua responsável por debounce, cancelamento, erros e autenticação.
Tipoboolean
Valor padrãofalse

maxSelections

Atributomax-selections
DescriçãoQuantidade máxima de opções selecionadas no modo múltiplo.
Tiponumber
Valor padrão0

minSelections

Atributomin-selections
DescriçãoQuantidade mínima de opções selecionadas no modo múltiplo.
Tiponumber
Valor padrão0

multiple

Atributomultiple
DescriçãoHabilita seleção múltipla. Quando informada, tem precedência sobre isMultiple.
Tipoboolean
Valor padrão---

name

Atributoname
DescriçãoNome do campo para integração com formulários.
Tipostring
Valor padrão---

open

Atributoopen
DescriçãoControla o estado aberto. Quando informada, tem precedência sobre isOpen.
Tipoboolean
Valor padrão---

options Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

Atributooptions
DepreciaçãoO formato de opções tipado atual é preferível; o formato legado permanece aceito.
DescriçãoOpções fornecidas como array ou JSON, além das opções projetadas por slot.
TipoSelectOptionData[] | string | { label: string; value: string; selected?: boolean; }[]
Valor padrão[]

overscan

Atributooverscan
DescriçãoDefine quantas opções extras são renderizadas antes e depois da área visível no virtual scroll.
Tiponumber
Valor padrão1

placeholder

Atributoplaceholder
DescriçãoTexto exibido quando não há seleção.
Tipostring
Valor padrão''

required

Atributorequired
DescriçãoIndica que o preenchimento do select é obrigatório.
Tipoboolean
Valor padrãofalse

searchMode

Atributosearch-mode
DescriçãoDefine se as opções são filtradas localmente ou fornecidas por uma busca remota.
Em remote, o componente emite brSelectSearch; a aplicação deve buscar,
validar e aplicar as opções por setOptions().
Tipo"local" | "remote"
Valor padrão'local'

selectAllLabel

Atributoselect-all-label
DescriçãoRótulo apresentado para a opção de selecionar todos no modo múltiplo.
Tipostring
Valor padrãoSelect.SELECT_ALL_LABEL

showSearchIcon

Atributoshow-search-icon
DescriçãoExibe o ícone de busca no campo de entrada.
Tipoboolean
Valor padrãofalse

unselectAllLabel

Atributounselect-all-label
DescriçãoRótulo apresentado quando todas as opções já estão selecionadas no modo múltiplo.
Tipostring
Valor padrãoSelect.DESELECT_ALL_LABEL

validator

Atributovalidator
DescriçãoValidação síncrona ou assíncrona executada no método validate().
Tipo((value: string | string[]) => string | Promise<string>) | string
Valor padrão---

value

Atributovalue
DescriçãoValor público do select baseado nas opções atualmente selecionadas.
Tipostring | string[]
Valor padrão''

visibleItems

Atributovisible-items
DescriçãoDefine quantas opções ficam visíveis na janela da lista.
Tiponumber
Valor padrão6

Slots

NomeDescrição
"default"Opções declaradas com elementos br-select-option.
"feedback"Mensagem de validação, normalmente um br-message.
"loading"Indicador exibido durante a busca remota de opções.
"validation-loading"Indicador exibido durante validação assíncrona.

CSS Shadow Parts

NomeDescrição
"container"Contêiner visual principal do select.
"empty-option"Alias legado para a opção vazia da lista.
"feedback"Área de mensagem de validação.
"hidden-select"Select nativo invisível usado na integração com formulários.
"input-action-button"Botão interno da ação.
"input-action"Botão de abertura e fechamento.
"input-container"Contêiner visual do campo.
"input-field"Campo input nativo.
"input-group"Grupo visual do campo.
"input-icon"Ícone do campo.
"input-label"Rótulo do campo.
"input"Campo de seleção e busca.
"list"Lista de opções.
"option-checkbox"Alias legado para o checkbox da opção.
"option-radio"Alias legado para o radio da opção.
"option"Opção individual.
"select-all"Alias legado para a opção de selecionar todos.
"validation-loading"Área do indicador de validação assíncrona.

Eventos

EventoDescriçãoDepreciaçãoPropagação
brSelectSearchEmitido uma vez por edição do campo de busca, inclusive ao limpar a consulta. O detail contém { query }; o evento é informativo e não cancelável. A aplicação deve controlar debounce, transporte e ciclo de vida da busca.---true
brSelectStateChangeEvento emitido quando o estado público do select muda.---true
brSelectValidationChangeInforma o início e o resultado de uma validação síncrona ou assíncrona. O detail contém validating, valid e message.---true
closed Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Emitido quando a lista é fechada.Use brSelectStateChange.true
opened Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Emitido quando a lista é aberta.Use brSelectStateChange.true
optionHover Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Emite a opção que recebeu foco ou hover.Use a navegação e os eventos de estado atuais.true
valueChange Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Evento emitido quando o valor público do select é alterado.Use os eventos nativos input e change.true

Métodos

checkValidity

Descrição
AssinaturacheckValidity() => Promise<boolean>
Parâmetros---

clear Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

DescriçãoLimpa a seleção atual.
Assinaturaclear() => Promise<void>
DepreciaçãoUse setValue('') ou a API de formulário.
Parâmetros---

close

DescriçãoFecha a lista de opções quando o componente está habilitado.
Assinaturaclose() => Promise<void>
Parâmetros---

disable

DescriçãoDesabilita o select e impede novas interações.
Assinaturadisable() => Promise<void>
Parâmetros---

enable

DescriçãoHabilita o select para interação do usuário.
Assinaturaenable() => Promise<void>
Parâmetros---

getValidationState

Descrição
AssinaturagetValidationState() => Promise<FormValidationState>
Parâmetros---

getValue Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

DescriçãoRetorna o valor público atual.
AssinaturagetValue() => Promise<string | string[]>
DepreciaçãoLeia a propriedade value diretamente.
Parâmetros---

reportValidity

Descrição
AssinaturareportValidity() => Promise<boolean>
Parâmetros---

setCustomValidity

Descrição
AssinaturasetCustomValidity(message: string) => Promise<void>
Parâmetrosmessage:

setFocus Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

DescriçãoMove o foco para o campo interno.
AssinaturasetFocus() => Promise<void>
DepreciaçãoUse o foco nativo do componente quando possível.
Parâmetros---

setOption

DescriçãoAdiciona ou atualiza uma única opção na coleção interna.
AssinaturasetOption(option: SelectOptionData) => Promise<void>
Parâmetrosoption: Opção que deve ser inserida ou atualizada.

setOptions

DescriçãoSubstitui a coleção atual de opções por uma nova lista.
AssinaturasetOptions(options: SelectOptionData[]) => Promise<void>
Parâmetrosoptions: Opções que devem ser exibidas pela lista interna.
Em search-mode="remote", a seleção atual é preservada mesmo quando não
aparece na resposta recebida.

setValue Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.

DescriçãoDefine o valor público do select.
AssinaturasetValue(value: string | string[]) => Promise<void>
DepreciaçãoAtribua a propriedade value diretamente.
Parâmetrosvalue:

show

DescriçãoAbre a lista de opções quando o componente está habilitado.
Assinaturashow() => Promise<void>
Parâmetros---

toggleOpen

DescriçãoAlterna entre os estados aberto e fechado do select.
AssinaturatoggleOpen() => Promise<void>
Parâmetros---

validate

Descrição
Assinaturavalidate() => Promise<boolean>
Parâmetros---

Dependências

Subcomponentes

Usado por

Depende de

Gráfico

Migração: Vue 1.x → Stencil 2.x

Propriedades

🟦 Propriedades renomeadas

Propriedade VuePropriedade StencilDescriçãoTipoPadrão

🟥 Propriedades removidas

PropriedadeDescriçãoTipoPadrão

🟩 Novas propriedades

PropriedadeDescriçãoTipoPadrão

Eventos

🟦 Eventos renomeados

Evento VueEvento StencilDescrição

🟥 Eventos removidos

PropriedadeDescriçãoTipoPadrão

🟩 Novos eventos

EventoDescrição

Slots

🟦 Slots renomeados

Slot VueSlot StencilDescrição

🟥 Eventos removidos

PropriedadeDescriçãoTipoPadrão

🟩 Slots criados

SlotDescrição

Validação

Para o contrato geral e a matriz de componentes, consulte o guia de formulários. Esta seção documenta o contrato específico do br-select.

br-select suporta required e, para seleções múltiplas, min-selections e max-selections. Leia event.target.value nos eventos nativos e use getValidationState() para consultar a validade.

Para regras de domínio, passe validator como propriedade JavaScript. Ele recebe string no modo simples ou string[] no modo múltiplo e retorna uma mensagem, null para sucesso ou uma Promise:

const select = document.querySelector('br-select');
select.validator = (value) => Array.isArray(value) && value.length === 0
? 'Selecione ao menos uma opção.'
: null;

const valid = await select.validate();

Em React, Angular e Vue, use property binding (validator={fn}, [validator]="fn" ou :validator="fn"). A validação automática ocorre no change, nunca a cada tecla. Durante uma validação assíncrona, o campo expõe aria-busy="true", aceita validation-loading e emite brSelectValidationChange. O slot feedback ou o br-message padrão exibe a mensagem.

Regras de domínio podem ser aplicadas com setCustomValidity(). O reset restaura as opções iniciais sem emitir input ou change.

Acessibilidade

Forneça um label visível. O componente expõe a semântica de seleção/combobox apropriada ao modo usado, mantém o foco no controle interno e sincroniza aria-expanded, aria-selected e aria-invalid quando aplicável.

A navegação deve funcionar com Tab, setas e Escape conforme o modo. Não adicione role ou tabindex conflitante no host.

Eventos nativos

Elemento HTML de referência

br-select referencia <select>, mas combina campo de busca, listbox e um <select> oculto para sincronização. O host é o controle público.

Como ouvir os eventos

const select = document.querySelector('br-select');
select.addEventListener('change', () => console.log(select.value));

Eventos nativos suportados

EventoQuando ocorreBubblesComposedCancelableHostObservações
changeseleção é confirmadaSimSimNãoSimImediatamente após input.
inputseleção mudaSimSimNãoSimSintético após atualizar value.
teclado, click e foconavegação/interaçãoconforme o tipoSimconforme o tipoSimO navegador ajusta o alvo externo para o host.

Eventos não suportados ou ainda não caracterizados

Eventos de edição no campo de busca não representam mudança de seleção e não vazam como input do select; use brSelectSearch quando precisar iniciar uma consulta. Seleção múltipla e todos os caminhos de teclado ainda aguardam matriz nos três engines.

Eventos customizados

brSelectSearch é emitido uma vez por edição quando filterable está ativo. Seu detail é { query: string } e serve para iniciar consultas remotas; ele não é emitido por escrita programática ou reset.

valueChange é um alias depreciado. Use input e change para acompanhar alterações de seleção.

Valor, frameworks e acessibilidade

Leia event.target.value; no modo múltiplo o valor é uma lista. FormData, required e métodos de validade pertencem ao host. Wrappers usam o par padrão. O teclado segue o padrão combobox/listbox documentado pelo componente.

Evidência de teste

src/shared/platform-contract.e2e.tsx cobre seleção simples real, ordem, target e caminho em Chromium headless; _tests/select.e2e.tsx cobre navegação e seleção múltipla.

Documentações relacionadas

Consulte o guia geral de dados remotos para o fluxo completo de busca, loading, cancelamento, validação do payload e atualização de opções.

Também são relacionados:

  • Input e Textarea, para consultas e validações assíncronas de valores textuais;
  • Pagination, quando os resultados remotos são paginados;
  • Formulários, para validação da seleção.