Feito sobre o UI SDK 0.1.0-beta.2 da Vercel. A API pode mudar.
Segmented control
Um controle segmentado no UI SDK da Vercel com indicador deslizante, três tamanhos, itens só com ícone, largura total, layout vertical e teclado de grupo de rádio.
- Componentes de formulário
- 2 partes
- 10 exemplos
@ui-sdk/core@ui-sdk/react
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-segmented-control.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 @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 cnCopie e cole o código a seguir no seu projeto.
components/ui/ui-sdk-segmented-control.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
O UI SDK adiciona um pouco de CSS próprio em uma camada de cascata chamada ui-sdk. Declare essa camada no topo da sua folha de estilos global, acima do import do Tailwind, para que suas classes vençam.
Um controle segmentado alterna entre poucas visualizações ou configurações. Funciona como um grupo de rádio, com um valor e uma parada de tabulação, e o indicador atrás do item marcado desliza para a nova escolha. Nomeie-o com aria-label ou aria-labelledby. O UI SDK o marca como experimental na 0.1.0-beta.2.
O controle desenha seu próprio indicador, então você só adiciona itens.
size é sm, default ou lg. Os itens crescem em telas de toque.
Um item só com ícone fica quadrado. Nomeie-o com aria-label.
Dê w-full ao controle e os itens dividem sua largura.
orientation="vertical" empilha os itens. As setas dos dois eixos continuam movendo entre eles.
disabled no controle desativa tudo e não envia nada. Em um item, as setas o pulam.
Passe value e atualize-o em onValueChange. Um controlador de createSegmentedControlController() marca um item de qualquer lugar.
Cada item contém um rádio nativo oculto, então name envia o valor marcado, required espera uma escolha e redefinir volta ao padrão.
Um controle somente leitura mantém o valor e continua sendo enviado. As setas movem o foco sem marcar nada.
Os itens começam pela direita, e o indicador os acompanha.
| Tecla | Ação |
|---|---|
| Tab | Entra no controle, no item marcado ou no primeiro ativo. |
| ←→↑↓ | Vão para o item seguinte ou anterior e o marcam, pulando os desativados. Dão a volta, a menos que loop seja false. |
| Space | Marca o item focado. |
| Enter | Envia o formulário. |
O controle é um grupo de rádio e cada item um rádio, então leitores de tela anunciam a escolha e sua posição. O indicador é decorativo e leitores de tela o ignoram.
O indicador só desliza quando a página fica interativa, então nunca anima ao carregar, e não desliza com movimento reduzido. Em cores forçadas, o item marcado mantém uma borda visível.
Cada parte envolve a parte do UI SDK de mesmo nome e aceita todas as suas props, incluindo render e um className que pode ser uma função do estado da parte.
| Prop | Tipo | Padrão |
|---|---|---|
value | T | null | – |
defaultValue | T | null | – |
onValueChange | (value: T | null, details) => void | – |
size | "sm" | "default" | "lg" | "default" |
orientation | "horizontal" | "vertical" | "horizontal" |
loop | boolean | true |
disabled | boolean | false |
readOnly | boolean | false |
required | boolean | false |
name | string | – |
form | string | – |
controllerDe createSegmentedControlController(). | SegmentedControlController | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descrição |
|---|---|
data-slot="segmented-control" | Para mirar o controle segmentado no CSS. |
data-size | O tamanho: sm, default ou lg. |
data-orientation | horizontal ou vertical. |
data-disabled | Presente quando desabilitado. |
data-readonly | Presente quando somente leitura. |
data-required | Presente quando obrigatório. |
| Prop | Tipo | Padrão |
|---|---|---|
value | string | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descrição |
|---|---|
data-slot="segmented-control-item" | Para mirar um item no CSS. |
data-checked | Presente no item marcado. |
data-unchecked | Presente nos outros itens. |
data-icon-only | Presente quando o item tem só um ícone. |
data-disabled | Presente quando desabilitado. |
- 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.
- Date pickerUm botão que abre um calendário em um popover, ou em um bottom sheet no celular, para datas únicas e intervalos.
- FieldRótulos, descrições e erros ligados ao seu controle, com estados de validação e layouts para formulários.
- 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.