ButtonGroup
Groups related Button immediate children into a visually joined cluster - adjacent borders
collapse and the group's borderRadius rounds only its outer corners (the first/last buttons keep
their leading/trailing corners; every inner corner is squared). Broadcasts variant / color /
size / disabled / fullWidth to children via ButtonGroupContext; explicit props on a child
always win.
<ButtonGroup variant="contained" aria-label="Basic button group">
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
Examples
Default
const args: Partial<ButtonGroupProps> = { 'aria-label': 'Basic button group' }
<ButtonGroup {...args}>{buttons}</ButtonGroup>
Variants
<Flex flexDirection="column" gap={3} alignItems="center">
{(['contained', 'outlined', 'text'] as const).map((variant) => (
<ButtonGroup key={variant} variant={variant} aria-label={`${variant} button group`}>
{buttons}
</ButtonGroup>
))}
</Flex>
Sizes And Colors
<Flex flexDirection="column" gap={3} alignItems="center">
<ButtonGroup size="sm" aria-label="Small button group">
{buttons}
</ButtonGroup>
<ButtonGroup color="secondary" aria-label="Medium-sized button group">
{buttons}
</ButtonGroup>
<ButtonGroup size="lg" aria-label="Large button group">
{buttons}
</ButtonGroup>
</Flex>
Radii
<Flex flexDirection="column" gap={3} alignItems="center">
{borderRadiiTokens.map((radius) => (
<ButtonGroup
key={radius}
borderRadius={radius}
aria-label={`${radius} radius button group`}
>
{buttons}
</ButtonGroup>
))}
</Flex>
Vertical
<ButtonGroup orientation="vertical" aria-label="Vertical button group">
{buttons}
</ButtonGroup>
Full Width
<ButtonGroup fullWidth aria-label="Full-width button group">
{buttons}
</ButtonGroup>