Switch
Um toggle de ligar/desligar que você pode tocar, pressionar ou arrastar, com um thumb que se estica sob o dedo e um estado pendente opcional para salvamentos.
pnpm dlx shadcn@latest add https://hextaui.com/r/switch.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/switch.tsx components/ui/spinner.tsx lib/motion.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Ao pressionar, o thumb se estica em direção ao outro lado antes de atravessar com efeito de mola, para você sentir o toque. Você também pode agarrar o thumb e arrastá-lo: passando do meio ele vira, antes disso ele volta.
iOS
variant="ios" usa uma trilha mais alta, um thumb em cápsula e verde quando ligado. Pressionar, arrastar e salvar funcionam do mesmo jeito.
Salvando
Retorne uma promise de onCheckedChange e o switch vira na hora, mesmo controlado. Um spinner aparece no thumb só se o salvamento levar mais de 400ms. Se for rejeitada, o switch volta e treme.
Marcas de ligado e desligado
icons adiciona um check e um anel à trilha, para o estado não depender da cor.
Tamanhos
sm, default e lg.
Em um field
Com Field, o rótulo e a descrição ficam vinculados ao switch.
Desabilitado e somente leitura
readOnly mantém o valor visível e focável, mas não o altera.
Controlado
Passe checked e onCheckedChange.
Da direita para a esquerda
O thumb começa à direita e desliza para a esquerda, e o arrasto acompanha.
| Tecla | Ação |
|---|---|
| SpaceEnter | Liga ou desliga o switch com foco. |
- O switch tem o role
switchnomeado por seu rótulo. Envolva-o em um<label>ou useField. - Ao salvar, fica
aria-busye ignora novos toques. - A área de toque é maior que o switch, e maior ainda em touch.
- Com movimento reduzido, o thumb se move instantaneamente e nada treme.
| Prop | Tipo | Padrão |
|---|---|---|
checked | boolean | – |
defaultChecked | boolean | false |
onCheckedChangeRetorne uma promise para mostrar o estado de salvamento. Em caso de rejeição, um switch não controlado volta. | (checked, details) => void | Promise | – |
variant | "default" | "ios" | "default" |
size | "sm" | "default" | "lg" | "default" |
iconsMostra marcas de ligado e desligado na trilha. | boolean | false |
name | string | – |
value | string | – |
disabled | boolean | false |
readOnly | boolean | false |
required | boolean | false |
render | ReactElement | (props, state) => ReactElement | <span> |
| Atributo | Descrição |
|---|---|
data-slot="switch" | A trilha, com data-size e data-variant. |
data-slot="switch-thumb" | O thumb. |
data-checked / data-unchecked | Se o switch está ligado. |
data-dragging | Presente enquanto o thumb está sendo arrastado. |
data-pending | Presente enquanto uma promise retornada está pendente. |
--switch-w / --switch-h / --switch-thumb / --switch-thumb-w | Tamanhos da trilha e do thumb, definidos por size. |
- MotionAs curvas de easing, as durações e a verificação de movimento reduzido com que todo componente anima, além de hooks para transformações de tamanho e destaques deslizantes.
- SpinnerUm indicador de carregamento com tracinhos no estilo Apple ou um anel que "respira", que pode esperar antes de aparecer e permanecer o suficiente para não piscar.
- 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.
Usado em blocos
Blocos que se baseiam em Switch.
- Prompt InputUm campo de conversa que começa como uma linha discreta, cresce até virar um card conforme você escreve e desce quando a conversa começa. Enter envia, de forma segura com entrada em japonês e chinês. Cole, solte ou escolha arquivos com prévias, progresso e nova tentativa. @ adiciona arquivos e / executa comandos a partir de um menu no cursor. Um seletor de modelo com teclas numéricas, um slider de esforço que ganha vida no Max, um anel de contexto, ditado com forma de onda ao vivo, chips de ferramentas, uma fila para mensagens digitadas enquanto uma resposta é transmitida e rascunhos que sobrevivem a um recarregamento.
- Agent TodosMostre o plano de um agente enquanto ele trabalha. Cada etapa passa de backlog para a fazer, em andamento e concluída, com tempos ao vivo, falhas e as chamadas de ferramenta por trás dela. Uma pílula de status para acima do composer, mudanças no plano que você consegue ver e uma etapa de revisão para editar o plano antes de executá-lo.
- AppearanceA seção Aparência das configurações de um produto de IA: tema, cor de destaque, tom do plano de fundo, densidade, fonte do chat, tamanhos de texto e opções de acessibilidade, tudo mantido como rascunho até que as pessoas salvem.
- BillingPlano e uso para um produto de IA, no estilo de Cursor, Claude e Vercel. Um medidor de uso dividido por modelo que projeta o fim do ciclo e avisa antes de os créditos acabarem, um gráfico diário que você pode percorrer, um limite de gastos com alertas que você pode pré-visualizar no medidor, mudanças de plano com proporcional exato, um formulário de cartão com validação real e faturas que baixam como PDF.