Native select
O select do próprio navegador, estilizado para combinar com o Input, com um placeholder discreto, suporte a Field e o seletor do sistema operacional em todos os dispositivos.
pnpm dlx shadcn@latest add https://hextaui.com/r/native-select.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/native-select.tsx components/ui/input.tsx components/ui/number-flow.tsx lib/motion.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Uma opção com value vazio funciona como placeholder: aparece em texto atenuado até algo ser escolhido. Coloque className no select para dimensionar o wrapper, por exemplo w-full.
Grupos
<NativeSelectOptGroup /> organiza as opções sob títulos no seletor do SO.
Tamanhos
Tamanhos, bordas, anéis de foco e estilos de inválido coincidem exatamente com o Input, então os dois se alinham em uma linha.
Field
Dentro de um <Field />, o rótulo e a descrição se conectam sozinhos e os erros aparecem conforme o valor muda. Envie sem escolher um plano e o select fica vermelho, treme uma vez, e o navegador aponta para ele.
Inválido
Defina aria-invalid e vincule a mensagem com aria-describedby.
Desabilitado
Desabilite o select inteiro, ou opções individuais que não estão disponíveis.
Controlado
Passe value e onChange como em um select comum.
Conteúdo longo
Rótulos selecionados longos terminam com reticências em vez de passar por baixo do chevron.
Da direita para a esquerda
O chevron e o padding vão para o outro lado.
- Use Native select para listas simples, especialmente em celulares, onde o seletor do SO é a forma mais rápida e familiar de escolher.
- Use Combobox quando as pessoas precisarem pesquisar, ou quando as opções precisarem de ícones, descrições ou layouts personalizados.
| Tecla | Ação |
|---|---|
| Tab | Foca o select. |
| SpaceEnter | Abre o seletor do SO. |
| ↑↓ | Altera a seleção, ou move dentro do seletor aberto. |
| A–Z | Salta para a opção que começa com o texto digitado. |
<NativeSelect /> aceita todos os atributos de select. As partes de opção aceitam os atributos do seu elemento.
| Prop | Tipo | Padrão |
|---|---|---|
size | "sm" | "default" | "lg" | "default" |
htmlSizeO atributo nativo size, renomeado porque size é a variant. | number | – |
shakeTreme uma vez quando o envio do formulário o considera inválido. | boolean | true |
classNameAplicado ao wrapper, então dimensiona o controle inteiro. | string | – |
value | string | – |
defaultValue | string | – |
disabled | boolean | false |
required | boolean | false |
| Atributo | Descrição |
|---|---|
data-slot="native-select-wrapper" | O wrapper, com data-size. |
data-slot="native-select" | O elemento select. |
data-slot="native-select-icon" | O chevron. Escurece em hover e foco. |
data-invalid | Presente quando um Field ao redor é inválido. |
| Atributo | Descrição |
|---|---|
data-slot="native-select-option" | Uma opção. |
data-slot="native-select-optgroup" | Um grupo rotulado de opções. |
- InputUm campo de texto com três tamanhos, estados inválido e somente leitura, estilo de validação nativa e fonte de 16px no toque para que os celulares nunca façam zoom.
- useComposedRefMantém uma ref para o seu próprio elemento e, ao mesmo tempo, a encaminha para qualquer ref que o pai tenha passado.
- useInvalidShakeSacode um controle de formulário quando uma tentativa de envio o encontra inválido, e nunca enquanto alguém ainda está digitando.
- CalendarUma grade de datas para seleção única, de intervalo e múltipla, com meses deslizantes, prévias de intervalo e dias com tamanho adequado ao toque.
- CheckboxUma caixa de seleção cujo check é desenhado na tela, com pais indeterminados, grupos e rótulos que compartilham seu hover.
- ComboboxUm select filtrável com chips, grupos e resultados assíncronos, em um popup que se redimensiona conforme você digita.
Usado em blocos
Blocos que se baseiam em Native select.