Button Group
A container that groups related buttons together with consistent styling.
StatsHub stories
Button Group
shadcn previews
"use client";import * as React from "react";Installation
Usage
import {
ButtonGroup,
ButtonGroupSeparator,
ButtonGroupText,
} from "@/components/ui/button-group"<ButtonGroup>
<Button>Button 1</Button>
<Button>Button 2</Button>
</ButtonGroup>Composition
Use the following composition to build a ButtonGroup:
ButtonGroup
├── Button or Input
├── ButtonGroupSeparator
└── ButtonGroupTextAccessibility
- The
ButtonGroupcomponent has theroleattribute set togroup. - Use Tab to navigate between the buttons in the group.
- Use
aria-labeloraria-labelledbyto label the button group.
<ButtonGroup aria-label="Button group">
<Button>Button 1</Button>
<Button>Button 2</Button>
</ButtonGroup>ButtonGroup vs ToggleGroup
- Use the
ButtonGroupcomponent when you want to group buttons that perform an action. - Use the
ToggleGroupcomponent when you want to group buttons that toggle a state.
Orientation
Set the orientation prop to change the button group layout.
import { MinusIcon, PlusIcon } from "lucide-react";import { Button } from "@statshub/ui-web/components/button";Size
Control the size of buttons using the size prop on individual buttons.
import { PlusIcon } from "lucide-react";import { Button } from "@statshub/ui-web/components/button";Nested
Nest <ButtonGroup> components to create button groups with spacing.
import { AudioLinesIcon, PlusIcon } from "lucide-react";import { Button } from "@statshub/ui-web/components/button";Separator
The ButtonGroupSeparator component visually divides buttons within a group.
Buttons with variant outline do not need a separator since they have a border. For other variants, a separator is recommended to improve the visual hierarchy.
import { Button } from "@statshub/ui-web/components/button";import { ButtonGroup,Split
Create a split button group by adding two buttons separated by a ButtonGroupSeparator.
import { IconPlus } from "@tabler/icons-react";import { Button } from "@statshub/ui-web/components/button";Input
Wrap an Input component with buttons.
import { SearchIcon } from "lucide-react";import { Button } from "@statshub/ui-web/components/button";Input Group
Wrap an InputGroup component to create complex input layouts.
"use client";import * as React from "react";Dropdown Menu
Create a split button group with a DropdownMenu component.
"use client";import {Select
Pair with a Select component.
"use client";import * as React from "react";Popover
Use with a Popover component.
import { BotIcon, ChevronDownIcon } from "lucide-react";import { Button } from "@statshub/ui-web/components/button";RTL
To enable RTL support in shadcn/ui, see the RTL configuration guide.
"use client";import * as React from "react";API Reference
ButtonGroup
The ButtonGroup component is a container that groups related buttons together with consistent styling.
| Prop | Type | Default |
|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" |
<ButtonGroup>
<Button>Button 1</Button>
<Button>Button 2</Button>
</ButtonGroup>Nest multiple button groups to create complex layouts with spacing. See the nested example for more details.
<ButtonGroup>
<ButtonGroup />
<ButtonGroup />
</ButtonGroup>ButtonGroupSeparator
The ButtonGroupSeparator component visually divides buttons within a group.
| Prop | Type | Default |
|---|---|---|
orientation | "horizontal" | "vertical" | "vertical" |
<ButtonGroup>
<Button>Button 1</Button>
<ButtonGroupSeparator />
<Button>Button 2</Button>
</ButtonGroup>ButtonGroupText
Use this component to display text within a button group.
| Prop | Type | Default |
|---|---|---|
render | React.ReactElement |
<ButtonGroup>
<ButtonGroupText>Text</ButtonGroupText>
<Button>Button</Button>
</ButtonGroup>Use the render prop to render a custom component as the text, for example a label.
import { ButtonGroupText } from "@/components/ui/button-group"
import { Label } from "@/components/ui/label"
export function ButtonGroupTextDemo() {
return (
<ButtonGroup>
<ButtonGroupText render={<Label htmlFor="name" />}>Text</ButtonGroupText>
<Input placeholder="Type something here..." id="name" />
</ButtonGroup>
)
}