Toggle group
Uma linha de toggles para uma ou várias escolhas, com um preenchimento que desliza até o item escolhido, itens unidos ou espaçados e foco por setas do teclado.
pnpm dlx shadcn@latest add https://hextaui.com/r/toggle-group.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 class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/toggle-group.tsx components/ui/toggle.tsx lib/motion.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Quando um item de cada vez pode estar ligado, um único preenchimento desliza até o item escolhido e assume sua forma, então o grupo se lê como um só controle. Com multiple, cada item se preenche por conta própria. O preenchimento é posicionado antes da primeira pintura, então nunca desliza ao carregar.
Outline
variant="outline" une os itens em um único controle com borda.
Múltiplo
multiple permite que qualquer número de itens esteja ligado, como na formatação de texto.
Tamanhos
size no grupo define todos os itens: sm, default ou lg.
Espaçamento
spacing coloca um espaço entre os itens na escala de espaçamento. Itens outline com espaço mantêm suas próprias bordas e preenchimentos.
Ícones e rótulos
Coloque um ícone antes do rótulo. Itens apenas com ícone precisam de um aria-label.
Vertical
orientation="vertical" empilha os itens e move o foco com ↑ e ↓.
Desabilitado
Desabilite um item, ou o grupo inteiro com disabled. Itens desabilitados são ignorados pelo teclado.
Controlado
Passe value e onValueChange. Ignorar o valor vazio mantém um item ligado, então pressionar o item escolhido de novo não faz nada.
Da direita para a esquerda
A ordem dos itens, os cantos unidos, o preenchimento deslizante e as setas seguem a direção de leitura.
| Tecla | Ação |
|---|---|
| Tab | Entra no grupo no último item com foco e depois sai dele. |
| ←→ | Move entre os itens, voltando ao início nas extremidades. ↑ e ↓ na vertical. |
| HomeEnd | Move para o primeiro ou o último item. |
| EnterSpace | Liga ou desliga o item com foco. |
- O grupo tem o role
group; dê a ele umaria-label. Cada item é um botão comaria-pressed. - Só um item está na ordem de tabulação, então o grupo é uma única parada de Tab e as setas se movem dentro dele.
- Sem
multiple, pressionar o item escolhido o desliga. Controle o valor para manter um item ligado. - Com movimento reduzido, o preenchimento aparece com fade em vez de deslizar.
| Prop | Tipo | Padrão |
|---|---|---|
value | string[] | – |
defaultValue | string[] | – |
onValueChange | (value: string[], details) => void | – |
multiple | boolean | false |
variantDefine a variante de todos os itens. | "default" | "outline" | "default" |
sizeDefine o tamanho de todos os itens. | "default" | "sm" | "lg" | "default" |
spacingEspaço entre os itens na escala de espaçamento. 0 une os itens outline. | 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 4 | 5 | 6 | 8 | 0 |
orientation | "horizontal" | "vertical" | "horizontal" |
loopFocus | boolean | true |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="toggle-group" | A raiz. |
data-slot="toggle-group-indicator" | O preenchimento deslizante, renderizado sem multiple. data-visible quando um item está ligado. |
data-variant / data-size / data-spacing | A variante, o tamanho e o espaçamento do grupo. |
data-orientation | "horizontal" ou "vertical". |
data-multiple | Presente quando vários itens podem estar ligados. |
data-disabled | Presente quando o grupo está desativado. |
| Prop | Tipo | Padrão |
|---|---|---|
valueIdentifica o item no valor do grupo. | string | – |
disabled | boolean | false |
variantUsado quando o grupo não define nenhum. | "default" | "outline" | – |
sizeUsado quando o grupo não define nenhum. | "default" | "sm" | "lg" | – |
nativeButton | boolean | true |
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descrição |
|---|---|
data-slot="toggle-group-item" | Cada item. |
data-pressed | O item está ligado. |
data-disabled | O item está desabilitado. |
data-variant / data-size | A variante e o tamanho resolvidos do item. |
- 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.
- ToggleUm botão que fica ligado ou desligado, com um preenchimento que se assenta ao ser pressionado, uma transição clara do hover para o estado ligado e ícones que podem se preencher conforme o estado.
- ButtonBotões em todas as variantes e tamanhos, com um fluxo integrado de carregamento, sucesso e erro que dispensa o spinner em requisições rápidas.
- Button groupBotões unidos em um único controle, com emendas compartilhadas, separadores, addons de texto, aninhamento e pilhas verticais.
Usado em blocos
Blocos que se baseiam em Toggle group.
- 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.
- API keysA página de chaves de API de um produto de IA, como nos consoles da OpenAI e da Anthropic. Crie chaves com permissões restritas e uma expiração, veja o segredo uma única vez com uma cópia que confirma, revogue com desfazer, renomeie no próprio lugar, faça a rotação com um período de tolerância e veja o uso por chave.
- Diff ReviewRevise as edições de um agente em vários arquivos antes que sejam aplicadas. Uma árvore de arquivos com contagens, aceite ou rejeite cada mudança, cada arquivo ou tudo de uma vez, comentários em qualquer linha ou intervalo que voltam para o agente, visões unificada e dividida, destaques por palavra, desfazer, edições em streaming e um resumo "4 arquivos editados" para o chat.
- MarkdownMarkdown feito para respostas de IA. Ele faz streaming com suavidade e nunca mostra sintaxe pela metade, com títulos para os quais você pode criar links, tabelas que você pode copiar como Markdown ou CSV, callouts do GitHub, listas de tarefas, notas de rodapé, imagens, citações inline e blocos de código completos.