Vesyl UI

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.

oz

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.

PropTypeDefaultDescription
orientation"horizontal" | "vertical""horizontal"Lay children out in a row or a column; sets which corners collapse
classNamestringMerged onto the wrapper

ButtonGroupText

A non-interactive label / addon cell. Extends the native div props and accepts render to swap the element.

PropTypeDefaultDescription
renderReactElementRender as a different element (base-ui slot)
classNamestringMerged onto the cell

ButtonGroupSeparator

A divider between clusters. Extends Separator props.

PropTypeDefaultDescription
orientation"horizontal" | "vertical""vertical"Direction of the dividing rule
classNamestringMerged onto the separator