Início rápido da instalação Pro 🚀

A entrada dropdown permite que os usuários selecionem um valor de uma lista de opções. Diferentemente dos elementos select nativos, a entrada dropdown permite que você personalize tanto a aparência quanto o comportamento.

A propriedade options pode aceitar três formatos diferentes de valores:

  • Um array de objetos com as chaves value e label (veja o exemplo acima)
  • Um array de strings ['A', 'B', 'C']
  • Um objeto literal com pares chave-valor { a: 'A', b: 'B', c: 'C' }
  • Uma função que retorna qualquer um dos formatos acima
Opções vazias

Se você atribuir opções como um array vazio, a entrada será renderizada em um estado desabilitado.

Exemplos básicos

Seleção única

A entrada dropdown será renderizada no modo de seleção única por padrão.

Carregar exemplo ao vivo

Seleção múltipla

Entradas dropdown com a propriedade multiple definida serão renderizadas no modo de seleção múltipla.

Carregar exemplo ao vivo
Valor da entrada de seleção múltipla

Note no exemplo acima que, porque a propriedade multiple está definida, a propriedade value deve ser um array.

Opções dinâmicas

Em vez de passar uma lista estática para a propriedade options, as opções podem ser atribuídas dinamicamente.

Neste exemplo, a função, loadHorrorMovies, faz uma solicitação à API do TMDB para carregar uma lista de filmes de terror. Atribuir a função à propriedade options carregará as opções quando o usuário final abrir a caixa de listagem.

Carregar exemplo ao vivo

Sempre carregar ao abrir

Por padrão, o dropdown só carregará opções de forma assíncrona uma vez (quando a caixa de listagem for expandida). Definir a propriedade always-load-on-open fará com que o dropdown carregue opções todas as vezes que a caixa de listagem for expandida.

Carregar exemplo ao vivo

Carregar ao ser criado

A propriedade load-on-created fará com que o dropdown carregue opções assim que for criado.

Carregar exemplo ao vivo

Paginação

Uma função atribuída à propriedade options receberá dois argumentos: page e hasNextPage. O argumento page indica o número da página atual, e hasNextPage é uma função de retorno que indica se há mais páginas para carregar.

Carregar exemplo ao vivo

Carregar ao rolar

Se você preferir permitir que o usuário carregue mais opções sem ter que clicar na opção Carregar mais no final da lista de opções, você pode definir a propriedade load-on-scroll como verdadeira, e nossa função, loadCurrentlyPopularMovies, será chamada novamente:

Carregar exemplo ao vivo

Carregador de opções

O input de dropdown do FormKit também fornece uma propriedade optionLoader que permite reidratar valores que não estão na lista de opções. Neste exemplo, o dropdown é fornecido com um valor inicial (dois IDs de filmes). A função optionLoader é chamada para cada valor que não está na lista de opções.

Carregar exemplo ao vivo

Note no exemplo acima que a função optionLoader recebe dois argumentos: o value da opção selecionada (neste caso, o ID do filme) e o cachedOption. A propriedade cachedOption é usada para evitar buscas desnecessárias. Se o cachedOption não for null, significa que a opção selecionada já foi carregada, e você pode retornar o cachedOption diretamente.

Aparência da opção

Ao contrário dos elementos de seleção nativos, a entrada de dropdown pode ser personalizada via marcação.

Slot de opção

A entrada de dropdown permite que você personalize a aparência de cada opção usando o slot de opção. Neste exemplo, estamos usando o slot de opção para exibir o ativo de cada opção; logotipo e nome:

Carregar exemplo ao vivo

Aparência da seleção

A entrada de dropdown permite que você personalize a aparência da(s) opção(ões) selecionada(s).

Propriedade de aparência da seleção

Ao usar a entrada de dropdown como um multi-select, você pode personalizar a aparência das opções selecionadas definindo a propriedade selection-appearance para truncate (o padrão) ou tags.

Carregar exemplo ao vivo

Slot de seleção

Se você deseja personalizar apenas a exibição da opção selecionada, use o slot de seleção (em oposição ao slot de opção mencionado acima):

Carregar exemplo ao vivo
Apenas seleção única e tags

O slot de seleção não existe no dropdown de seleção múltipla com aparência de truncate.

Propriedades comportamentais

As seguintes propriedades permitem que você personalize o comportamento do campo de dropdown.

Mensagem de Vazio

Por padrão, o campo de dropdown será renderizado em um estado desabilitado se nenhuma opção for passada. Opcionalmente, você pode passar a propriedade empty-message com uma mensagem para exibir quando não houver opções disponíveis:

Carregar exemplo ao vivo

Seleção Removível

Se você deseja permitir que os usuários removam o valor selecionado, defina a propriedade selection-removable como verdadeira. Isso renderizará um ícone de fechar ao lado do valor selecionado:

Apenas seleção única

A propriedade selection-removable não pode ser usada para seleções múltiplas.

Carregar exemplo ao vivo

Abrir ao remover

Por padrão, quando a propriedade selection-removable está definida como true, o dropdown não abrirá após o valor selecionado ser removido. Você pode alterar esse comportamento definindo a propriedade open-on-remove como true:

Carregar exemplo ao vivo

Fechar ao selecionar

Por padrão, quando a propriedade multiple está definida, o dropdown não fechará após uma opção ser selecionada. Você pode alterar esse comportamento definindo a propriedade close-on-select como true:

Carregar exemplo ao vivo

Abrir ao focar

Se você deseja expandir a caixa de listagem assim que o campo de dropdown for focado, você pode usar a propriedade open-on-focus:

Carregar exemplo ao vivo

Overscroll

Ao usar o dropdown com opções estáticas, o dropdown do FormKit também vem com um recurso chamado overscroll. Definir a propriedade behavior para overscroll renderizará a caixa de listagem diretamente sobre o campo de entrada para maximizar o tamanho disponível para a lista:

Carregar exemplo ao vivo

Max

Se você deseja limitar o número de opções que podem ser selecionadas, você pode usar a propriedade max:

Carregar exemplo ao vivo

Props & Atributos

PropTypePadrãoDescrição
optionsany[]A lista de opções que o usuário pode selecionar.
load-on-scrollbooleanfalseQuando definido como `true`, o dropdown tentará carregar mais opções com base na posição de rolagem do usuário final
option-loaderfunctionnullUsado para hidratar o valor inicial ou realizar uma solicitação adicional para carregar mais informações de uma opção selecionada.
empty-messagestringundefinedExibe uma mensagem quando não há opções para mostrar.
selection-appearancestringtruncatePara dropdowns de seleção múltipla, esta propriedade permite personalizar a aparência das opções selecionadas. Os valores possíveis são `truncate` (o padrão) ou `tags`.
selection-removablebooleanfalsePara dropdowns de seleção única, esta propriedade permite remover o valor selecionado.
open-on-removebooleanfalseQuando a propriedade `selection-removable` está definida como `true`, o dropdown não se abrirá após o valor selecionado ser removido. Você pode alterar esse comportamento definindo a propriedade `open-on-remove` como `true`.
close-on-selectbooleanfalseQuando a propriedade `multiple` está definida, o dropdown não se fechará após uma opção ser selecionada. Você pode alterar esse comportamento definindo a propriedade `close-on-select` como `true`.
open-on-focusbooleanfalseSe você deseja expandir a lista assim que o campo de entrada do dropdown receber foco, você pode usar a propriedade `open-on-focus`.
options-appearancestringundefinedPara dropdowns de seleção múltipla, esta propriedade permite personalizar a aparência das opções selecionadas. Os valores possíveis são `default` (o padrão) ou `checkbox`.
multiplebooleanfalseQuando definido como `true`, o dropdown permitirá que o usuário selecione várias opções.
behaviorstringundefinedRenderiza a lista diretamente sobre o campo de entrada para maximizar o tamanho disponível para a lista.
always-load-on-openbooleanfalseDetermina se o dropdown deve sempre carregar suas opções quando aberto ou se deve referenciar as opções que foram encontradas anteriormente ao abrir.
load-on-createdbooleanfalseQuando definido como `true`, o dropdown carregará as opções quando o nó for criado.
maxnumber | stringundefinedSe você deseja limitar o número de opções que podem ser selecionadas, você pode usar a propriedade `max` (aplica-se apenas à seleção múltipla).
deselectbooleantrueQuando definido como `false`, o usuário final não pode desmarcar uma opção selecionada da lista.
popoverbooleanfalseRenderiza a lista do campo de entrada usando a API Popover do navegador.
Mostrar Universal props
configObject{}Opções de configuração a serem fornecidas para o nó do input e qualquer nó descendente deste input.
delayNumber20Número de milissegundos para debounce do valor do input antes de despachar o commit hook.
dirtyBehaviorstringtouchedDetermina como o indicador "dirty" deste input é definido. Pode ser configurado como touched ou compare - touched (o padrão) é mais performático, mas não detectará quando o formulário corresponder novamente ao seu estado inicial.
errorsArray[]Array de strings para exibir como mensagens de erro neste campo.
helpString''Texto para o texto de ajuda associado ao input.
idStringinput_{n}O ID único do input. Fornecer um ID também permite acesso global ao nó do input.
ignoreBooleanfalseImpede que um input seja incluído em qualquer pai (grupo, lista, formulário etc). Útil ao usar inputs para a interface do usuário em vez de valores reais.
indexNumberundefinedPermite que um input seja inserido no índice fornecido, se o pai for uma lista. Se o valor do input for indefinido, ele herda o valor dessa posição de índice. Se ele tiver um valor, ele o insere nos valores da lista no índice fornecido.
labelString''Texto para o elemento label associado ao input.
nameStringinput_{n}O nome do input como identificado no objeto de dados. Isso deve ser único dentro de um grupo de campos.
parentFormKitNodecontextualPor padrão, o pai é um grupo, lista ou formulário de envolvimento, mas essa prop permite a atribuição explícita do nó pai.
prefix-iconString''Especifica um ícone para colocar na seção prefixIcon.
preservebooleanfalsePreserva o valor do input em um grupo pai, lista ou formulário quando o input é desmontado.
preserve-errorsbooleanfalsePor padrão, os erros definidos em inputs usando setErrors são automaticamente limpos no input. Definir essa prop como true mantém o erro até que ele seja explicitamente limpo.
sections-schemaObject{}Um objeto de chaves de seção e valores parciais de esquema, em que cada esquema parcial é aplicado à seção respectiva.
suffix-iconString''Especifica um ícone para colocar na seção suffixIcon.
typeStringtextO tipo de input a ser renderizado pela biblioteca.
validationString, Array[]As regras de validação a serem aplicadas ao input.
validation-visibilityStringblurDetermina quando mostrar as regras de validação com falha de um input. Os valores válidos são blur, dirty e live.
validation-labelString{label prop}Determina qual rótulo usar nas mensagens de erro de validação, por padrão, usa a propriedade label, se disponível, caso contrário, usa a propriedade name.
validation-rulesObject{}Regras de validação personalizadas adicionais para disponibilizar na propriedade de validação.
valueAnyundefinedInicializa o valor do input e/ou de seus filhos. Não é reativo. Pode inicializar grupos inteiros (formulários) e listas..

Seções

Você pode direcionar uma seção específica de uma entrada usando a "key" dessa seção, permitindo que você modifique as classes, HTML (por meio de :sections-schema ou o conteúdo (por meio de slots) dessa seção). Saiba mais sobre as seções aqui.

Estrutura do seletor

View on a larger screen to see this section diagram.

Selecione a cor da camiseta
Selecione a cor da camiseta
×
Ative ou desative os efeitos sonoros.
Algo deu errado.

Estrutura do listbox

View on a larger screen to see this section diagram.

Estrutura de Seleção

View on a larger screen to see this section diagram.

Cinza

View on a larger screen to see this section diagram.

Cinza
Azul
+1

View on a larger screen to see this section diagram.

Cinza
×
Azul
×
Section-keyDescrição
selectorA seção do seletor é um elemento botão que abre a lista de opções do dropdown.
selectionContém a opção selecionada.
listitemUm elemento de item de lista que contém a seção de opção.
optionUma div que contém o conteúdo da opção.
listboxA seção listbox é um elemento ul que contém a lista de opções.
dropdownWrapperEnvolve a seção listbox. Uma div que lida com a rolagem do listbox.
optionLoadingUm elemento span que é renderizado condicionalmente dentro da opção selecionada quando o carregamento está ocorrendo.
loaderIconUm elemento para exibir um ícone no elemento seletor quando o carregamento está ocorrendo.
selectIconUm elemento para exibir um ícone no elemento seletor quando o dropdown está fechado.
selectedIconUm elemento para exibir um ícone ao lado da opção selecionada quando dentro do listbox.
loadMoreUm elemento de item de lista que é renderizado condicionalmente na parte inferior da lista de opções quando há mais páginas para carregar.
loadMoreInnerUm elemento span que atua como um invólucro para o loaderIcon dentro da seção loadMore.
emptyMessageUm elemento de item de lista que é renderizado condicionalmente quando não há opções para exibir.
emptyMessageInnerUm elemento span que atua como um invólucro para a seção emptyMessage.
tagsWrapperUm elemento div que envolve a seção de tags.
tagsUm elemento div que contém as tags.
tagWrapperUm elemento div que envolve a tag.
tagUm elemento div que contém o rótulo da tag e a seção removeSelection.
tagLabelUm elemento span que contém o rótulo da tag.
removeSelectionUm elemento span que contém o ícone de remoção da seleção.
selectorSelectionsWrapperUm elemento div que envolve a seção selectorSelections.
selectorSelectionsUm elemento div que contém as seções selectorSelectionsItem.
selectorSelectionsItemUm elemento div que contém o conteúdo do selectorSelectionsItem.
truncationCountUm elemento div que contém o conteúdo do truncationCount.
Mostrar Universal section keys
outerO elemento de envolvimento mais externo.
wrapperUm invólucro ao redor do rótulo e do input.
labelO rótulo do input.
prefixPor padrão, não gera saída, mas permite conteúdo diretamente antes de um elemento input.
prefixIconUm elemento para gerar um ícone antes da seção de prefixo.
innerUm invólucro ao redor do próprio elemento input.
suffixPor padrão, não gera saída, mas permite conteúdo diretamente após um elemento input.
suffixIconUm elemento para gerar um ícone após a seção de sufixo.
inputO próprio elemento input.
helpO elemento que contém o texto de ajuda.
messagesUm invólucro ao redor de todas as mensagens.
messageO elemento (ou muitos elementos) que contém uma mensagem - na maioria das vezes mensagens de validação e erros.

Acessibilidade

Todos os campos de entrada do FormKit são projetados com as seguintes considerações de acessibilidade em mente. Ajude-nos a melhorar continuamente a acessibilidade para todos, relatando problemas de acessibilidade aqui:

Marcação semânticaAtributos AriaAcessível por tecladoIndicadores de focoContraste de cores com o tema fornecidoEtiquetas acessíveis, texto de ajuda e erros
Chave de SeçãoAtributoPadrãoDescrição
selectortabindex0Prioriza a ordem de foco do teclado definindo-a como 0
aria-haspopuplistboxSinaliza a presença de uma caixa de listagem pop-up acionada pela interação.
aria-expandedIndica se o elemento suspenso está atualmente expandido ou recolhido.
aria-controlsVincula este elemento ao ID do elemento da caixa de listagem.
aria-describedByAssocia este elemento com texto descritivo de outro elemento.
placeholderaria-hiddentrueTorna este elemento não exposto à API de acessibilidade quando não existe um placeholder.
removeSelectiontabindex-1Prioriza a ordem de foco do teclado definindo-a como -1
aria-controlsVincula este elemento ao ID do elemento de entrada.
selectionsaria-livepoliteAnuncia aos leitores de tela que este elemento foi atualizado dinamicamente sem interromper a tarefa atual.
aria-hiddentrueTorna este elemento não exposto à API de acessibilidade.
selectionsItemaria-hiddentrueTorna este elemento não exposto à API de acessibilidade quando o último índice visível e o índice são maiores que o último índice visível.
tagWrappertabindex0Prioriza a ordem de foco do teclado definindo-a como 0
tagtabindex0Prioriza a ordem de foco do teclado definindo-a como 0
tagsWrapperaria-livepoliteAnuncia aos leitores de tela que este elemento foi atualizado dinamicamente sem interromper a tarefa atual.
Mostrar Universal chave de seção
labellabelforAssocia isso a um elemento de entrada, aprimorando acessibilidade e experiência do usuário
inputinputdisabledDesabilita um elemento HTML, impedindo a interação do usuário e sinalizando um estado não interativo
aria-describedbyAprimora a acessibilidade associando um elemento a uma descrição, auxiliando leitores de tela
aria-requiredAdiciona o estado necessário quando a validação é exigida.
iconiconforSempre que um ícone é definido como rótulo, ele o vincula a um elemento de entrada, aprimorando acessibilidade e experiência do usuário

Interações com o Teclado

Evento de TecladoDescrição
TabMove o foco para a próxima entrada focalizável na página.
Shift + TabMove o foco para a entrada focalizável anterior na página.