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>

ButtonGroup API reference