Select
Escolha única em uma lista dentro de um popover
Select é um dropdown compacto construído sobre @radix-ui/react-select. Use quando há mais de cinco opções e você quer economizar espaço vertical — caso contrário, prefira RadioGroup.
'use client';
import {
Label,
Select,
SelectContent,
SelectGroup,
SelectItem,
SelectLabel,
SelectSeparator,
SelectTrigger,
SelectValue,
} from '@uranus-workspace/design-system';
export default function SelectDefault() {
return (
<div className="grid w-full max-w-xs gap-2">
<Label htmlFor="timezone">Fuso horário</Label>
<Select>
<SelectTrigger id="timezone">
<SelectValue placeholder="Selecione um fuso" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectLabel>Américas</SelectLabel>
<SelectItem value="sao_paulo">São Paulo (GMT-3)</SelectItem>
<SelectItem value="new_york">Nova York (GMT-5)</SelectItem>
<SelectItem value="los_angeles">Los Angeles (GMT-8)</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Europa</SelectLabel>
<SelectItem value="lisbon">Lisboa (GMT+0)</SelectItem>
<SelectItem value="berlin">Berlim (GMT+1)</SelectItem>
</SelectGroup>
</SelectContent>
</Select>
</div>
);
}
Anatomia
- Select — a raiz que gerencia o estado aberto/fechado e o valor.
- SelectTrigger — o botão que o usuário clica. Recebe um
idpara emparelhar com oLabel. - SelectValue — renderiza o valor selecionado ou o
placeholder. - SelectContent — o popover com a lista. Renderizado num portal.
- SelectGroup + SelectLabel — agrupamentos opcionais para listas grandes.
- SelectItem — cada opção, identificada por
value. - SelectSeparator — uma linha divisória entre grupos.
Uso
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@uranus-workspace/design-system';
<Select>
<SelectTrigger>
<SelectValue placeholder="Selecione" />
</SelectTrigger>
<SelectContent>
<SelectItem value="sp">São Paulo</SelectItem>
<SelectItem value="rj">Rio de Janeiro</SelectItem>
</SelectContent>
</Select>Este componente precisa rodar no cliente — coloque 'use client' no topo do arquivo que o consome.
Faça
- Forneça sempre um
placeholdernoSelectValuequando não há valor padrão. - Associe um
LabelaoSelectTriggerviahtmlFor+id. - Agrupe opções relacionadas com
SelectGroup+SelectLabelquando a lista passar de oito itens.
Não faça
- Não use
Selectpara escolhas binárias — prefiraSwitchouCheckbox. - Não recrie um
SelectcomDropdownMenu; o menu não expõe a semântica de listbox. - Não deixe o
SelectTriggersem rótulo visível.
Acessibilidade
- Teclado:
Espaço/Enterabre, setas navegam,Escfecha, letras iniciam busca incremental. - O componente expõe
role="combobox"no trigger erole="listbox"no conteúdo, comaria-expandedearia-activedescendantgerenciados automaticamente. - Rotule sempre o trigger — sem rótulo acessível, o campo é inutilizável com leitores de tela.