Button group
Botões unidos em um único controle, com emendas compartilhadas, separadores, addons de texto, aninhamento e pilhas verticais.
pnpm dlx shadcn@latest add https://hextaui.com/r/button-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/button-group.tsx components/ui/separator.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
O Button group une os botões que você já usa. Instale <Button /> também.
Tamanhos
Defina size em cada botão. Os cantos unidos permanecem retos em todos os tamanhos, e os cantos externos mantêm o raio do botão.
Botão dividido
Botões preenchidos ficam colados, então adicione um <ButtonGroupSeparator /> entre eles. Um gatilho de dropdown pode ser qualquer segmento.
Separadores
Separadores entre botões de ícone, com um toggle que informa seu estado pressionado.
Feedback dentro de um grupo
Quando o rótulo de um botão muda de largura durante o carregamento, o sucesso ou o erro, os segmentos seguintes deslizam junto em vez de dar um salto.
Vertical
orientation="vertical" empilha os segmentos. Os separadores ficam horizontais automaticamente.
Grupos aninhados
Grupos dentro de um grupo se tornam clusters separados, com um espaço entre eles, cada um unido por conta própria.
Com texto e um input
<ButtonGroupText /> adiciona um rótulo ou prefixo. Renderize-o como um <label> para dar nome ao input. O input se estica para preencher a linha.
Desativado e inválido
Desative ou marque um único segmento com aria-invalid. Um segmento inválido sobe acima de seus vizinhos para que seu anel vermelho nunca fique coberto.
Largura total
Dê uma largura ao grupo e flex-1 a cada botão para dividir o espaço igualmente.
Como fieldset
Use render para gerar um <fieldset> dentro de formulários.
Da direita para a esquerda
Os cantos unidos, os separadores e os clusters aninhados são espelhados em layouts da direita para a esquerda.
| Tecla | Ação |
|---|---|
| Tab | Percorre os segmentos em ordem. O segmento em foco sobe para que seu anel e sua borda nunca fiquem cobertos. |
| EnterSpace | Ativa o botão em foco. |
- O grupo tem
role="group". Dê a ele umaria-labelque descreva o conjunto, como “Message actions”. - Segmentos só com ícone precisam do próprio
aria-label. - Os separadores são expostos como separators com a orientação correta. Adicione
decorativequando a linha for apenas visual.
Cada parte renderiza um <div> e aceita seus atributos.
| Prop | Tipo | Padrão |
|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="button-group" | Selecione grupos no CSS. |
data-orientation | A orientação atual. |
| Prop | Tipo | Padrão |
|---|---|---|
orientationO padrão é o oposto da orientação do grupo. | "horizontal" | "vertical" | – |
decorativeOculta a linha dos leitores de tela. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="button-group-separator" | Seleciona os separadores no CSS. |
data-orientation | A orientação resolvida. |
| Prop | Tipo | Padrão |
|---|---|---|
renderRenderize um <label> para dar nome a um input do grupo. | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="button-group-text" | Seleciona os segmentos de texto no CSS. |
- SeparatorUma linha fina que divide o conteúdo na horizontal ou na vertical, com rótulo opcional e um modo decorativo para linhas puramente visuais.
- 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.
- 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.
- Toggle groupUma 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.