Pular para o conteúdo
// visualizar em
salvo em todas as páginas

TagsInput

Campo de etiquetas — vários valores curtos num só campo, mostrados como chips removíveis. Use para tópicos, etiquetas, competências ou destinatários de e-mail, com ou sem lista de sugestões.

Feito com Base UIPadrão WAI-ARIA ComboboxComponente clienteCódigo ↗
minimal · light · #3fa34d
design systems
acessibilidade
allowCustom
disabled

Instalação

Configure o Camaleo uma vez (Instalação) e importe. Coloque dentro de um Field para o rótulo dar nome ao input.

import { TagsInput, Field, FieldLabel, FieldDescription } from "@camaleo/react";

Anatomia

Os chips e um input de texto dividem a mesma caixa. Cada chip tem seu botão de remover, e as sugestões abrem num popup logo abaixo.

design systems ✕acessibilidade ✕Adicionar tópico
[data-slot="tags-input"][data-slot="tag"] · [data-slot="tag-remove"][data-slot="tags-input-input"]

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor escolhidos na barra acima.

minimal · light · #3fa34d
design systems
acessibilidade

Aperte Enter depois de cada tópico.

React

Escolher de uma lista

Digite "py". Sem allowCustom só entram as suggestions, então todo perfil usa os mesmos nomes e a busca encontra todos.

bug

Sugestões e tags novas

Digite uma etiqueta que não está na lista e aperte Enter. O emptyText avisa que o Enter cria a tag, então ninguém fica esperando aparecer uma opção.

Figma
React
TypeScript

3 / 5 competências

Limite e duplicadas

Adicione "React" de novo, ou uma sexta competência. Uma tag repetida fica no campo sem chamar o onValueChange, então pegue-a no onKeyDown; recuse o limite no onValueChange e explique no FieldError.

ana.souza@acme.com

Cole uma lista: vírgulas, ponto e vírgula e quebras de linha separam os itens.

Colar uma lista

Cole "joao@acme.com, lia@acme.com". Um onPaste separa por vírgulas e quebras de linha, então uma coluna copiada da planilha vira um chip por endereço.

financeiro
relatório 3º tri
reunião do conselho

Backspace remove o último tópico; ← vai até um tópico e Delete remove.

Remover pelo teclado

Foque o input e aperte Backspace, ou ← e Delete. Cada botão de remover leva o nome da tag pelo removeLabel, no idioma da página.

bug
checkout

Num formulário

Clique em salvar. Com name, cada tag vai como um valor separado, e formData.getAll("labels") devolve a lista.

compliance
auditoria 2026

Bloqueado durante a auditoria trimestral, até 15/11.

Desativado, com motivo

O disabled trava os chips e o input. Diga na descrição o motivo e até quando, senão parece defeito.

Em contexto

Tags ficam ao lado de outros campos. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Convidar pessoas para Acme Design

Elas recebem um e-mail com um link que vale por 7 dias.

ana.souza@acme.com
marcus.lee@acme.com
Convidar pessoas por e-mailCard · Field · TagsInput · NativeSelect · Button

Configurações do artigo

performance
produto

Até 5. Leitores podem seguir tags.

Tags de um artigoCard · Field · Input · TagsInput · Switch · Button
Filtrar vagas
React
TypeScript
Filtros de busca de vagasFieldset · Field · TagsInput · Checkbox · Button

Boas práticas

bug
cobrança
mobile
FaçaUma grafia por tag.

Sugira as tags que já existem, assim filtros e relatórios contam tudo junto.

Bug
bugs
BUG mobile
EviteTexto livre sem sugestões.

Cada pessoa escreve a mesma tag de um jeito, e o filtro por "bug" perde duas delas.

onboarding
preços
bug
FaçaUma ou duas palavras.

Tags curtas cabem numa linha e se leem de relance.

revisar antes de sexta
pediu desconto no anual
EviteFrases como tag.

Elas enchem a linha, ninguém filtra por elas, e o lugar delas é num comentário.

Props

PropriedadeTipoPadrãoDescrição
valuestring[]—As tags, de forma controlada.
defaultValuestring[][]As tags iniciais, sem controle.
onValueChange((value: string[]) => void)—Recebe a lista nova inteira quando uma tag entra ou sai.
suggestionsstring[][]Oferecidas num popup enquanto a pessoa digita; escolher uma adiciona a tag.
allowCustombooleanfalseO Enter adiciona o texto digitado como tag quando nenhuma sugestão está destacada. Uma tag repetida não entra de novo: o texto fica no campo e o onValueChange não é chamado.
removeLabel(tag: string) => string(tag) => `Remove ${tag}`Nome acessível do botão de remover de cada chip (traduza).
emptyTextReactNode—Aparece no popup quando nenhuma sugestão combina.
defaultOpenboolean—Abre o popup de sugestões na primeira renderização.
disabledbooleanfalseDesativa os chips e o input.

Outros atributos de <input>, como placeholder, type, onKeyDown e onPaste, vão para o input interno.

Styling hooks

Mude o visual sem copiar o componente: use os atributos ou defina os tokens num elemento pai, num estilo ou no próprio campo.

Atributos

data-slot"tags-input" · "tag" · "tag-remove" · "tags-input-input" · "combobox-popup" · "combobox-item"
data-highlightedno chip ou na sugestão sob o teclado
data-popup-openno input enquanto as sugestões estão abertas
data-disabledpresente quando desativado
data-invalidno input dentro de um Field inválido

Tokens que ele lê

Cor

--cml-border--cml-border-control--cml-danger--cml-fg--cml-fg-muted--cml-fg-secondary--cml-field-bg--cml-field-border-sides--cml-field-shadow--cml-focus-offset--cml-focus-ring--cml-focus-width--cml-item-highlight-fg--cml-item-highlight-shadow--cml-popover-bg--cml-popover-border--cml-shadow-popover--cml-surface-raised

Forma e tamanho

--cml-border-width--cml-field-border-width--cml-field-height--cml-field-padding--cml-font-size-field--cml-gap--cml-item-height--cml-item-padding--cml-popover-border-width--cml-popover-padding--cml-radius-control--cml-radius-field--cml-radius-item--cml-radius-popover

Tipografia e movimento

--cml-duration-fast--cml-ease-standard--cml-font-control--cml-font-field--cml-motion-scale

Só deste componente

--cml-corner-shape--cml-disabled-opacity--cml-item-divider--cml-item-highlight--cml-placeholder-style--cml-tag-border--cml-tag-fg--cml-tag-font-size--cml-tag-font-weight--cml-tag-height--cml-tag-letter-spacing--cml-tag-radius--cml-tag-text-transform

Acessibilidade

EnterAdiciona a sugestão destacada, ou o texto digitado com allowCustom. Uma tag que já está na lista fica no campo.
↓ / ↑Abre as sugestões e move o destaque.
BackspaceCom o input vazio, remove a última tag.
← / →Move o foco entre os chips e de volta ao input.
Delete / BackspaceNum chip focado, remove o chip.
EscFecha as sugestões.

Relacionados

Esta página foi útil? · Editar esta página no GitHub