ButtonGroup
Attach related buttons and controls into a single connected bar. ButtonGroup is a layout wrapper — it doesn’t style its children, it collapses the inner corners and shared borders so that buttons, dropdown triggers, selects, and inputs read as one unit.
Drop any focusable children inside. The group flattens the radii between adjacent items and rounds only the outer edges, so an outline Button row, a split action, or a labeled input all snap together without per-child class wrangling.
Default
A row of outline buttons becomes one connected control. The first button keeps its left corners, the last keeps its right corners, and every shared border between them collapses to a single hairline.
With icons
Icon-only buttons (size="icon-sm") pack into a compact toolbar — the row-action pattern for an order or shipment table. Give each button an aria-label since there’s no visible text.
Vertical orientation
Set orientation="vertical" to stack the children. The group switches to a column, collapses the top/bottom corners between items, and rounds only the top of the first and bottom of the last — handy for a stepped status menu.
Split button
Pair a primary Button with a DropdownMenu trigger to make a split action — the common label is the default, the chevron exposes the variants. The group keeps the two seams flush.
With text label
ButtonGroupText is a non-interactive cell — a muted, bordered label you can attach to an Input or Button for a unit, prefix, or addon. Here it tags a weight field with its unit.
With separator
ButtonGroupSeparator drops a thin divider between children to split the group into logical clusters without breaking it into two bars. It defaults to a vertical rule (a horizontal one for vertical groups).
Reference
ButtonGroup
The wrapper. Renders a <div role="group"> and extends the native div props.
| Prop | Type | Default | Description |
|---|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" | Lay children out in a row or a column; sets which corners collapse |
className | string | — | Merged onto the wrapper |
ButtonGroupText
A non-interactive label / addon cell. Extends the native div props and accepts render to swap the element.
| Prop | Type | Default | Description |
|---|---|---|---|
render | ReactElement | — | Render as a different element (base-ui slot) |
className | string | — | Merged onto the cell |
ButtonGroupSeparator
A divider between clusters. Extends Separator props.
| Prop | Type | Default | Description |
|---|---|---|---|
orientation | "horizontal" | "vertical" | "vertical" | Direction of the dividing rule |
className | string | — | Merged onto the separator |