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

A entrada taglist permite que os usuários pesquisem em uma lista de opções e apliquem qualquer número de tags. Os usuários também podem arrastar e soltar tags para reordenar:

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 acima
Opções vazias

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

Exemplo básico

A entrada taglist permite que os usuários pesquisem em uma lista de opções e apliquem qualquer número de tags. Os usuários também podem arrastar e soltar tags para reordenar:

Carregar exemplo ao vivo

Filtragem

A entrada de lista de tags filtrará opções com sua própria função de busca interna. Você pode substituir essa função de busca fornecendo à propriedade filter uma função sua. Sua função receberá dois argumentos, a option que está sendo iterada e o valor atual de search:

Carregar exemplo ao vivo

Permitir novos valores

A entrada de lista de tags, ao contrário das entradas de dropdown ou autocomplete, permite que você insira um valor arbitrário (um valor que não está na lista de opções). Isso é útil para criar novas tags na hora. Para habilitar esse recurso, defina a propriedade allow-new-values como true.

Carregar exemplo ao vivo

Opções dinâmicas

Em vez de passar uma lista estática para a propriedade options, você pode atribuí-la a uma função. Fazer isso é útil quando você precisa carregar opções de uma API ou outra fonte.

Parâmetro de busca

Neste exemplo, vamos atribuir à propriedade options a função searchMovies. Ao fazer isso, searchMovies receberá o objeto context como argumento. Dentro deste objeto context está a propriedade search, que é o valor atual de busca. Para realizar nossa busca, usaremos o valor de search como o parâmetro de consulta para nossa solicitação de API:

Carregar exemplo ao vivo

Parâmetros de página e hasNextPage

Um cenário provável que você encontrará é a necessidade de pesquisar através de uma API paginada. Isso pode ser feito referenciando o mesmo objeto context de antes. Dentro deste objeto, podemos utilizar as propriedades page e hasNextPage. A propriedade page é o número da página atual, e a propriedade hasNextPage é uma função a ser chamada quando houver mais páginas para carregar:

Carregar exemplo ao vivo

Estilo de Carregamento

Em vez de exigir que seus usuários cliquem no botão Carregar mais para carregar opções adicionais, você pode definir a propriedade loadOnScroll como verdadeira, o que irá paginar as opções à medida que você rola até o final da lista de opções.

Carregador de Opções

Reidratando valores

O input de taglist do FormKit também fornece uma propriedade optionLoader que permite reidratar valores que não estão na lista de opções. Neste exemplo, forneceremos ao taglist um valor inicial (um ID de filme) e atribuiremos o optionLoader a uma função que fará uma solicitação à API para obter o filme:

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. O cachedOption é usado para evitar pesquisas 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.

Estilo de Carregamento

Em vez de exigir que seus usuários cliquem no botão Carregar mais para carregar opções adicionais, você pode definir a propriedade loadOnScroll como verdadeira, o que irá paginar as opções à medida que você rola até o final da lista de opções.

Carregar ao criar

Se você preferir carregar opções quando o taglist for criado, você pode definir a propriedade load-on-created como verdadeira, e nossa função, loadCurrentlyPopularMovies, será chamada sem a necessidade do usuário expandir a caixa de listagem:

Carregar exemplo ao vivo

Aparência da Tag

Assim como no input de taglist ou input de Autocomplete, o input de taglist permite que você utilize slots para personalizar a aparência da lista de opções e da opção selecionada, aproveitando o padrão de componente sem renderização.

Neste exemplo, vamos usar o slot tag para personalizar a aparência das tags:

Carregar exemplo ao vivo

Propriedades Comportamentais

Mensagem Vazia

O campo de entrada de lista de tags, por padrão, não expandirá a caixa de listagem quando nenhum resultado de pesquisa for encontrado durante o filtro. Você pode alterar esse comportamento atribuindo à propriedade empty-message uma mensagem para ser exibida quando nenhum resultado for encontrado:

Carregar exemplo ao vivo

Máximo

A propriedade max permite que você limite o número de opções que podem ser selecionadas. Quando o limite max é atingido, o campo de entrada de lista de tags desativará a caixa de listagem:

Carregar exemplo ao vivo

Fechar ao selecionar

Se você deseja que a caixa de listagem da lista de tags permaneça aberta entre as seleções, defina a propriedade close-on-select como false:

Carregar exemplo ao vivo

Recarregar ao confirmar

Se você deseja que as opções sejam recarregadas (com opções estáticas, isso filtraria as opções com o valor de string vazia, e com opções dinâmicas, isso faria uma solicitação ao carregador de opções com o valor de string vazia) quando o usuário confirmar uma seleção, use a propriedade reload-on-commit:

Carregar exemplo ao vivo

Abrir ao clicar

Para habilitar a abertura da caixa de listagem da lista de tags ao clicar em seu campo de pesquisa, defina a propriedade open-on-click como true:

Carregar exemplo ao vivo

Abrir ao focar

Se você deseja abrir a caixa de listagem da lista de tags sempre que seu campo de pesquisa for focado, defina a propriedade open-on-focus como true:

Carregar exemplo ao vivo
Abrir ao focar vs Abrir ao clicar

Abrir ao focar engloba abrir ao clicar.

Abrir ao remover

Se você deseja que a caixa de listagem se expanda quando uma seleção for removida, use a propriedade open-on-remove:

Carregar exemplo ao vivo

Exemplo completo

Agora vamos combinar o que aprendemos até agora, utilizando o slot tag para marcação personalizada e definindo a propriedade options como uma função que retornará páginas de filmes de uma API:

Carregar exemplo ao vivo

Props & Atributos

PropTypePadrãoDescrição
debouncenumber200Número de milissegundos para debater chamadas para uma função de opções.
optionsany[]A lista de opções que o usuário pode selecionar.
load-on-scrollbooleanfalseQuando definido como `true`, o taglist tentará carregar mais opções com base na posição de rolagem do usuário final
open-on-clickbooleanfalseO autocompletar é expandido ao focar na entrada, ao contrário de esperar para expandir até que um valor de pesquisa seja inserido.
filterfunctionnullUsado para aplicar sua própria função de filtro personalizada para opções estáticas.
option-loaderfunctionnullUsado para hidratar o valor inicial ou realizar uma solicitação adicional para carregar mais informações de uma opção selecionada.
allow-new-valuesbooleanfalsePermite que o usuário final insira um novo valor que não existe na lista de opções.
disable-drag-and-dropbooleantrueImpede que o usuário final ordene as tags arrastando e soltando.
empty-messagestringundefinedExibe uma mensagem quando não há opções para mostrar.
maxnumberundefinedLimita o número de opções que podem ser selecionadas.
close-on-selectbooleantrueFecha a caixa de listagem quando uma opção é selecionada.
open-on-removebooleanfalseQuando a propriedade `selection-removable` está definida como `true`, o taglist não abrirá após o valor selecionado ser removido. Você pode alterar esse comportamento definindo a propriedade `open-on-remove` como `true`.
open-on-focusbooleanfalse
options-appearancestringundefinedPara taglists 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`.
always-load-on-openbooleantrueDetermina se o taglist 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 taglist carregará as opções quando o nó for criado.
popoverbooleanfalseRenderiza a caixa de listagem 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..
Section-keyDescrição
selectorA seção do seletor é um elemento de botão que abre a lista de opções do taglist.
selectionsContém seções de seleção individuais.
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 da caixa de listagem é um elemento ul que contém a lista de opções.
taglistWrapperEnvolve a seção da caixa de listagem. Uma div que lida com a rolagem da caixa de listagem.
optionLoadingUm elemento span que é renderizado condicionalmente dentro da opção selecionada quando o carregamento está ocorrendo.
loaderIconUm elemento para exibir um ícone no elemento do seletor quando o carregamento está ocorrendo.
selectIconUm elemento para exibir um ícone no elemento do seletor quando o taglist está fechado.
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.
removeSelectionUm elemento de botão usado para remover uma seleção específica.
closeIconUm elemento para exibir um ícone dentro do botão de remover seleção.
listboxButtonUm elemento de botão que é usado para abrir o taglist.
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 de mensagem vazia.
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
inputtabindex0Prioriza a ordem de foco do teclado definindo-a como 0.
rolecomboboxIndica às tecnologias assistivas que este elemento funciona como uma caixa de combinação.
readonlyRestringe edições do usuário, garantindo a integridade dos dados e uma experiência de usuário controlada e informativa.
aria-autocompletelistOrienta sugestões de entrada, apresentando uma coleção de valores que poderiam completar a entrada do usuário.
aria-expandedTransmite o estado expansível quando o elemento está em foco.
aria-controlsAssocia o elemento da caixa de listagem, com este elemento.
aria-describedbyAssocia um elemento com uma descrição, auxiliando leitores de tela.
aria-activedescendantGerencia o foco para o elemento descendente ativo atual.
listboxButtontabindex-1Prioriza a ordem de foco do teclado definindo-a como -1.
aria-haspopuptrueSinaliza que um elemento dispara um pop-up ou menu
aria-expandedTransmite o estado expansível quando o elemento está em foco.
aria-controlsAssocia o elemento da caixa de listagem, com este elemento.
tagWrappertabindex-1Prioriza a ordem de foco do teclado definindo-a como -1.
tagrolebuttonIndica às tecnologias assistivas que este elemento funciona como um botão.
tagsaria-livepoliteComunica mudanças de conteúdo dinâmico quando seleções estão na tela.
removeSelectiontabindex-1Remove a priorização do foco do teclado neste elemento.
aria-controlsAssocia o elemento de entrada, com este elemento.
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.