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

Combobox

Caixa de combinação — um campo de texto que filtra uma lista enquanto você digita. Use quando houver opções demais para rolar, ou quando a pessoa já sabe o nome do que procura.

Feito com Base UIPadrão WAI-ARIA ComboboxComponente clienteCódigo ↗

Instalação

Configure o Camaleo uma vez (Instalação) e importe as partes que precisar, mais o ComboboxEmpty para a mensagem sem resultados. O estilo carregado cuida do campo e do popup.

import { Combobox, ComboboxInput, ComboboxContent, ComboboxList, ComboboxItem } from "@camaleo/react";

Anatomia

O Combobox guarda os itens e o valor; o ComboboxInput é o campo de texto com os botões de limpar e abrir; o conteúdo é um popup renderizado num portal. Cada parte tem um data-slot que você pode usar no CSS.

Curitiba✕⌄
[data-slot="combobox-input-group"][data-slot="combobox-clear"] · [data-slot="combobox-trigger"][data-slot="combobox-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

Sem resultados

Digite um nome que não existe. O ComboboxEmpty só aparece quando nada combina, então use para dizer o que fazer, não só "Nenhum resultado".

Objetos como itens

Guarde o código, mostre o nome: itemToStringLabel preenche o campo, itemToStringValue vai para o formulário, isItemEqualToValue compara os dois.

Atribuído a: Camila Rocha

Controlado

Escolha alguém. Com value e onValueChange o resto da tela acompanha a escolha na hora.

Filtro próprio

Digite "gru" ou "galeao". Uma função filter pode buscar por código, apelido ou texto sem acento, do jeito que as pessoas digitam.

Enter escolhe o primeiro

O autoHighlight destaca o primeiro resultado enquanto você digita, então uma busca curta e Enter bastam para etiquetas.

Botões com nome

Os botões de limpar e abrir são ícones. Traduza os nomes com clearLabel e triggerLabel, e deixe-os específicos do campo.

Escolha uma cidade da lista para ver as datas de entrega.

Obrigatório, com erro

Dentro de um Field, o rótulo dá nome ao campo e o FieldError é lido junto; peça para escolher da lista, já que texto livre não vale.

Em contexto

O combobox costuma ser um campo entre vários. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Checkout expira no 3G lento

#482 · aberto em 03/11 por Rafael

Atribuir uma issueCard · Field · Combobox · Select · Button
Prazo de entrega
Prazo de entregaFieldset · Field · Combobox · Input · Button

Data e hora

Configuração de fusoCard · Switch · Field · Combobox

Boas práticas

FaçaListas longas que a pessoa sabe nomear.

Ninguém quer rolar 27 capitais; digitar "flo" é mais rápido.

EviteBusca para três opções.

Digitar é trabalho extra quando tudo cabe na tela; use um Select ou radios.

Digite uma cidade do Brasil; entregamos em 4.812 delas.

FaçaDiga o que digitar.

Um rótulo, um exemplo no placeholder e uma dica do que está coberto.

EviteSó “Buscar…”.

Buscar o quê? Sem rótulo visível, a pessoa adivinha o escopo e o formato.

Props

PropriedadeTipoPadrãoDescrição
clearLabelstring"Clear"Nome acessível do botão de limpar (traduzível).
triggerLabelstring"Show options"Nome acessível do botão que abre a lista (traduzível).
renderReactElement | (props, state) => ReactElement—Troca o elemento renderizado do campo, mantendo o comportamento.
disabledbooleanfalseDesativa o campo e os botões.

Estas são as props do ComboboxInput; outros atributos de input, como placeholder, passam direto. O Combobox recebe as props da raiz do Base UI: items, value, defaultValue, onValueChange, inputValue / onInputValueChange, filter, itemToStringLabel, itemToStringValue, isItemEqualToValue, autoHighlight, limit, multiple, disabled, required e name. O ComboboxList recebe uma função de cada item; o ComboboxItem recebe value e disabled.

Styling hooks

Mude o visual sem fazer fork: use os atributos ou defina os tokens num elemento pai, num estilo ou no próprio combobox.

Atributos

data-slot"combobox-input-group" · "combobox-input" · "combobox-clear" · "combobox-trigger" · "combobox-positioner" · "combobox-popup" · "combobox-list" · "combobox-item" · "combobox-empty"
data-popup-openno campo e no botão enquanto a lista está aberta
data-highlightedno item sob o teclado ou o mouse
data-selectedno item escolhido
data-disabledno campo ou item desativado
data-invalidno campo dentro de um Field inválido

Tokens que ele lê

Cor

--cml-border--cml-border-control--cml-danger--cml-fg--cml-fg-muted--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-field--cml-motion-scale

Só deste componente

--cml-corner-shape--cml-disabled-opacity--cml-item-divider--cml-item-highlight--cml-placeholder-style

Acessibilidade

DigitarFiltra a lista e a abre.
↓ / ↑Abre a lista e move o destaque; o foco continua no campo.
EnterEscolhe o item destacado e fecha a lista.
EscFecha a lista e mantém o que você digitou.
TabSai do campo e fecha a lista.

Relacionados

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