T2 EducaçãoMidas

Combobox

Campo de seleção com busca. Passe options e ele cuida de filtrar, navegar pelo teclado e selecionar. Seleção única ou múltipla (chips), botão de limpar, grupos, itens com descrição e ícone, ícone à esquerda, modo popup (botão com busca), estados inválido e desabilitado.

Código-fonte

Exemplos

Interaja com o componente e copie o código de cada exemplo.

Básico

Digite para filtrar, use as setas e Enter para selecionar.

Múltipla escolha

Backspace com a busca vazia remove o último chip.

CPACPRO-R

Com botão de limpar

Grupos

Itens com descrição

Inválido e desabilitado

Popup com busca

Com trigger="button", a busca fica dentro da lista.

Com ícone

Destaque automático

O primeiro resultado já vem destacado: digite e aperte Enter.

import { Combobox, type ComboboxOption } from "@t2-educacao/midas";

Uso

const certificacoes: ComboboxOption[] = [
  { value: "cpa", label: "CPA" },
  { value: "cpro-r", label: "CPRO-R" },
  { value: "cpro-i", label: "CPRO-I" },
  { value: "cfp", label: "CFP®" },
];

<Combobox
  options={certificacoes}
  placeholder="Selecione a certificação"
  aria-label="Certificação"
/>

Props

PropTipoPadrãoDescrição
optionsComboboxOption[]obrigatórioLista de opções
multiplebooleanfalsePermite escolher várias (mostra chips)
value / defaultValuestring | null ou string[] (multiple)Valor controlado / inicial
onValueChange(value) => voidRecebe string | null, ou string[] com multiple
placeholderstring"Selecione"Texto quando vazio
emptyMessageReactNode"Nenhum resultado encontrado."Mostrado quando a busca não encontra nada
clearablebooleanfalseMostra o x para limpar quando há valor
trigger"input" | "button""input"input: digita no próprio campo. button: abre um popup com busca
searchPlaceholderstring"Buscar"Placeholder da busca no modo button
startAddonReactNodeÍcone à esquerda do campo
invalidbooleanfalseEstado de erro
disabledbooleanfalseDesabilita
open / onOpenChangeControle da lista aberta
idstringPara ligar com FieldLabel htmlFor
namestringCria um <input type="hidden"> para formulários (valores separados por vírgula)
className / contentClassNamestringClasses do campo / da lista

ComboboxOption

CampoTipoDescrição
valuestringIdentificador único
labelstringTexto exibido e usado na busca
descriptionstringSegunda linha em cinza
iconReactNodeÍcone antes do texto
groupstringNome do grupo (opções com o mesmo grupo ficam juntas, com título)
keywordsstring[]Termos extras para a busca
disabledbooleanOpção não selecionável

Exemplos

Destaque automático

O primeiro resultado da busca já vem destacado: digite parte do nome e aperte Enter para selecionar, sem usar as setas.

Com Field

<Field>
  <FieldLabel htmlFor="certificacao">Certificação</FieldLabel>
  <Combobox id="certificacao" options={certificacoes} placeholder="Selecione" />
</Field>

Múltipla escolha

<Combobox
  multiple
  options={certificacoes}
  defaultValue={["cpa"]}
  placeholder="Selecione as certificações"
  aria-label="Certificações"
/>

Backspace com a busca vazia remove o último chip.

Com botão de limpar

<Combobox clearable options={certificacoes} defaultValue="cpa" aria-label="Certificação" />

Grupos

const fusos: ComboboxOption[] = [
  { value: "sp", label: "(GMT-3) São Paulo", group: "Américas" },
  { value: "ny", label: "(GMT-5) Nova York", group: "Américas" },
  { value: "lisboa", label: "(GMT+0) Lisboa", group: "Europa" },
];

<Combobox options={fusos} placeholder="Selecione o fuso" aria-label="Fuso horário" />

Itens com descrição

const paises: ComboboxOption[] = [
  { value: "br", label: "Brasil", description: "América do Sul (br)" },
  { value: "pt", label: "Portugal", description: "Europa (pt)" },
];
<Combobox trigger="button" options={paises} placeholder="Selecione o país" aria-label="País" />

Com ícone

<Combobox startAddon={<Globe />} options={fusos} placeholder="Selecione o fuso" aria-label="Fuso" />

Controlado

const [certificacao, setCertificacao] = useState<string | null>(null);

<Combobox options={certificacoes} value={certificacao} onValueChange={setCertificacao} aria-label="Certificação" />

Inválido e desabilitado

<Combobox invalid options={certificacoes} aria-label="Certificação" />
<Combobox disabled options={certificacoes} aria-label="Certificação" />

Acessibilidade

  • Segue o padrão ARIA de combobox: role="combobox", aria-expanded, aria-controls e aria-activedescendant.
  • Teclado: setas navegam, Enter seleciona, Esc fecha.
  • Dê um nome ao campo (FieldLabel htmlFor + id, ou aria-label).

Não faça

  • Usar Combobox para menos de 5 opções fixas: um ToggleGroup ou radio é mais rápido.
  • Usar Combobox para ações (ex.: "Editar", "Excluir"): use DropdownMenu.

On this page