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

Select

Lista suspensa para escolher uma opção, ou algumas, de uma lista que fica fechada até ser necessária. O popup acompanha o estilo pelo portal e abre pelo teclado tanto quanto pelo mouse.

Feito com Base UIPadrão WAI-ARIA Listbox (select-only combobox)Componente clienteCódigo ↗

Instalação

Configure o Camaleo uma vez (Instalação) e importe as partes que precisar; para listas longas, some SelectGroup, SelectGroupLabel e SelectSeparator. O estilo carregado cuida do gatilho e do popup.

import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from "@camaleo/react";

Anatomia

O Select guarda o estado; o gatilho mostra o valor; o conteúdo é um popup renderizado num portal. Cada parte tem um data-slot que você pode usar no CSS.

Brasil⌄
[data-slot="select-trigger"][data-slot="select-value"] · seta[data-slot="select-popup"] › [data-slot="select-item"]

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

Com placeholder

Deixe o defaultValue de fora quando a escolha for da pessoa; o placeholder do SelectValue diz o que escolher sem fingir que já é um valor.

Grupos e separadores

Passando de umas oito opções, SelectGroup com SelectGroupLabel deixa a pessoa pular para a seção certa em vez de ler linha por linha.

Alinhado ao gatilho

O alignItemWithTrigger abre a lista sobre o gatilho com a opção atual no lugar, e listas curtas ficam com cara de menu nativo.

Chega entre 10/11 e 14/11 · R$ 19,90

Controlado

Escolha outra opção. Com value e onValueChange o resto do formulário reage, aqui o prazo e o preço abaixo do campo.

Vários valores

O multiple mantém a lista aberta e devolve um array; passe uma função ao SelectValue para o gatilho mostrar "Seg, Qua, Sex" em vez de um número.

O GG volta em 20/11.

Opções indisponíveis

Desative a opção em vez de removê-la, para a pessoa saber que ela existe, e diga quando volta.

Escolha um estado para calcular o frete.

Obrigatório, com erro

Dentro de um Field, o rótulo dá nome ao gatilho e o FieldError é lido junto; diga o que fazer, não só que está errado.

Em contexto

Um select quase nunca aparece sozinho. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Filtros

Painel de filtrosCard · Field · Select · Switch · Button
Endereço de entrega
País e estadoFieldset · Field · Select · Input

1–25 de 312

Linhas por páginaField · Select · IconButton · Text

Boas práticas

FaçaUm rótulo visível acima.

O rótulo continua lá depois da escolha, então a pessoa sempre sabe que campo é aquele.

EviteO placeholder como rótulo.

Escolhido um valor, "País" some e o campo fica sem nome na tela.

Cobrança
FaçaDuas ou três opções? Mostre todas.

Radio custa um clique e não esconde nada.

EviteEsconder duas opções num popup.

São dois cliques para ver uma escolha que caberia numa linha.

Props

PropriedadeTipoPadrãoDescrição
alignItemWithTriggerbooleanfalseAbre o popup sobre o gatilho, com o item escolhido alinhado (como no macOS). Desligado, abre abaixo do gatilho.
renderReactElement | (props, state) => ReactElement—Troca o elemento renderizado do popup, mantendo o comportamento.
finalFocusboolean | RefObject | (type) => …—Para onde o foco vai quando o popup fecha. Por padrão, volta ao gatilho.

Estas são as props do SelectContent. O Select recebe as props da raiz do Base UI: items (um objeto ou { label, value }[], para o gatilho mostrar o rótulo antes de o popup abrir), value, defaultValue, onValueChange, multiple, disabled, required, readOnly, name e open / onOpenChange. O SelectItem recebe value e disabled; o SelectValue recebe placeholder ou uma função do valor como children.

Styling hooks

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

Atributos

data-slot"select-trigger" · "select-value" · "select-positioner" · "select-popup" · "select-list" · "select-item" · "select-group" · "select-group-label" · "select-separator"
data-popup-openno gatilho enquanto o popup está aberto
data-placeholderno valor enquanto nada foi escolhido
data-highlightedno item sob o teclado ou o mouse
data-selectedno(s) item(ns) escolhido(s)
data-disabledno gatilho ou item desativado
data-invalidno gatilho 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-ring--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-font-label--cml-motion-scale

Só deste componente

--cml-corner-shape--cml-disabled-opacity--cml-item-divider--cml-item-highlight--cml-select-trigger-shadow

Acessibilidade

Enter / SpaceNo gatilho, abre a lista; na lista, escolhe a opção destacada.
↓ / ↑Abre a lista e depois anda entre as opções.
Home / EndVai para a primeira ou a última opção.
A–ZVai para a próxima opção que começa com a letra.
EscFecha a lista e devolve o foco ao gatilho.

Relacionados

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