vaiperui

componentes / select

Select

Combobox acessível com navegação por teclado, busca por digitação e um estilo detalhado com ícone/descrição por opção.

Como usar

Combobox acessível (`role="combobox"` + `listbox`) com navegação por teclado, typeahead e seleção controlada ou não. Ative `searchable` para filtrar por texto e `variant="detailed"` para opções com `leading` e `description`.

preview
Select.tsx
import { Select } from "vaiperui";
<Select
label="País"
placeholder="Escolha um país"
searchable
options={[
{ value: "br", label: "Brasil" },
{ value: "us", label: "Estados Unidos" },
{ value: "pt", label: "Portugal" },
]}
/>

Cores

preview
primary
success
warning
danger
cores.tsx
<Select variantColor="primary" label="País" options={options} />
<Select variantColor="success" label="País" options={options} />
<Select variantColor="warning" label="País" options={options} />
<Select variantColor="danger" label="País" options={options} />

Estilos

`detailed` amplia o gatilho e as opções, com slot `leading` e `description` por item.

preview
default
detailed
estilos.tsx
<Select variant="default" label="País" options={options} />
<Select variant="detailed" label="País" options={options} />

Tamanhos

preview
sm
md
lg
tamanhos.tsx
<Select size="sm" label="País" options={options} />
<Select size="md" label="País" options={options} />
<Select size="lg" label="País" options={options} />

Raio

preview
none
sm
md
lg
full
raio.tsx
<Select radius="none" label="País" options={options} />
<Select radius="sm" label="País" options={options} />
<Select radius="md" label="País" options={options} />
<Select radius="lg" label="País" options={options} />
<Select radius="full" label="País" options={options} />

Busca

`searchable` adiciona um campo para filtrar as opções por texto.

preview
searchable
searchStyle full
sem busca
busca.tsx
<Select searchable label="País" options={options} />
<Select searchable searchStyle="full" label="País" options={options} />
<Select label="País" options={options} />

Estados

`disabled` bloqueia o select inteiro. Uma opção com `disabled: true` aparece bloqueada e não pode ser escolhida.

preview
opção desabilitada
disabled
estados.tsx
<Select label="País" options={options} disabled />
const options = [
{ value: "br", label: "Brasil" },
{ value: "pt", label: "Portugal", disabled: true },
]

Cor personalizada

`customColor` sobrescreve `variantColor` e pinta foco, borda e destaque a partir de uma única cor.

preview
laranja
verde
violeta
custom-color.tsx
<Select customColor="#ff6600" label="País" options={options} />
<Select customColor="#22c55e" label="País" options={options} />
<Select customColor="#a78bfa" label="País" options={options} />

Props

PropValoresPadrãoDescrição
optionsSelectOption[]—Lista de opções ({ value, label, disabled?, description?, leading? })
value / defaultValuestring—Controlado / não controlado
onValueChange(value: string) => void—Disparado ao selecionar uma opção
placeholderstring"Select an option"Texto quando nada está selecionado
emptyMessagestring"No options found"Texto quando não há opções
noResultsMessage(query: string) => string(query) => `No results for "${query}"`Texto quando a busca não tem resultados; recebe o termo digitado
searchablebooleanfalseMostra um campo de busca dentro do menu para filtrar por texto
searchPlaceholderstring"Search..."Placeholder do campo de busca
clearSearchLabelstring"Clear search"Nome acessível do botão que limpa a busca
searchStyle"boxed" | "full""boxed"`boxed`: campo recuado e arredondado. `full`: campo ocupa toda a largura do topo do menu, com divisória
variantdefault | detaileddefaultdefault: dropdown compacto de uma linha. detailed: gatilho e opções maiores, com leading e description por opção e tinta na selecionada
variantColorprimary | success | warning | dangerprimaryCor de foco, borda aberta e destaque da opção
customColorcor CSS válida | { light, dark }—Sobrescreve variantColor: pinta foco, borda e destaque a partir de uma única cor, ou de um objeto { light, dark }
sizesm | md | lgmdAltura do gatilho e das opções
radiusnone | sm | md | lg | fullmdArredondamento do gatilho e do menu
animationnone | smooth | fast | bouncesmoothTransição do menu
disabledbooleanfalseDesabilita o select inteiro
namestring—Espelha o valor num <input type="hidden"> para envio em forms
label / aria-label / id / className / stylestring / string / string / string / CSSProperties—Rótulo acima do gatilho, nome acessível quando não há rótulo e props de layout
option.leading / option.descriptionReactNode / string—Slot visual (bandeira, ícone, avatar) antes do texto e segunda linha por opção. O slot funciona nas duas variantes; a description só renderiza com variant="detailed"