Lets users toggle between a group of limited options(Suggested range is 2-6 options).

Functionality based on the ToggleGroup radix component, which already allows for: single/multiple select, disabling or partly disabling options, adds keyboard navigation and orientation and more.

Extends visually by allowing for different sizing, vertical/horizontal display and gaps. When there is no gap, rounds the border for only the edge/outer corners.

Orientation

orientation="vertical | horizontal"

<ToggleGroup.Root type="multiple" orientation="vertical">
  <ToggleGroup.Button value="a">A</ToggleGroup.Button>
  <ToggleGroup.Button value="b">B</ToggleGroup.Button>
</ToggleGroup.Root>

Gap

gap={0 | 1 | 2 | 3}

<ToggleGroup.Root type="single" gap={3}>
  <ToggleGroup.Button value="a">A</ToggleGroup.Button>
  <ToggleGroup.Button value="b">B</ToggleGroup.Button>
</ToggleGroup.Root>

Size

size="sm | md | lg"

<ToggleGroup.Root type="single" gap={3}>
  <ToggleGroup.Button value="a" size="sm">
    <Icon is={Upload} /> A
  </ToggleGroup.Button>
  <ToggleGroup.Button value="b" size="sm">
    B
  </ToggleGroup.Button>
  <ToggleGroup.Button value="icon" size="sm">
    <Icon is={Upload} />
  </ToggleGroup.Button>
</ToggleGroup.Root>

Full width

isFullWidth={boolean}

<ToggleGroup.Root type="multiple" isFullWidth gap={3}>
  <ToggleGroup.Button value="a">A</ToggleGroup.Button>
  <ToggleGroup.Button value="b">B</ToggleGroup.Button>
  <ToggleGroup.Button value="c">C</ToggleGroup.Button>
</ToggleGroup.Root>

Disabled

Partly

<ToggleGroup.Root type="multiple" gap={3} defaultValue="a">
  <ToggleGroup.Button value="a">A</ToggleGroup.Button>
  <ToggleGroup.Button value="b">B</ToggleGroup.Button>
  <ToggleGroup.Button value="c" disabled>
    C
  </ToggleGroup.Button>
</ToggleGroup.Root>

Fully

<ToggleGroup.Root type="multiple" gap={3} defaultValue="a" disabled>
  <ToggleGroup.Button value="a">A</ToggleGroup.Button>
  <ToggleGroup.Button value="b">B</ToggleGroup.Button>
  <ToggleGroup.Button value="c">C</ToggleGroup.Button>
</ToggleGroup.Root>

Modern theme

<ToggleGroup.Root type="single" defaultValue="a" theme="modern">
  <ToggleGroup.Button value="a">A</ToggleGroup.Button>
  <ToggleGroup.Button value="b">B</ToggleGroup.Button>
  <ToggleGroup.Button value="c">C</ToggleGroup.Button>
</ToggleGroup.Root>

Disable Deselect

disableDeselect={boolean}

By default the ToggleGroup allows itself to be entirely deselected even after a value has been chosen. This property disables this deselect funcionality, always keeping a value selected after first selection. Similar to how radios work.

<ToggleGroup.Root type="multiple" disableDeselect>
  <ToggleGroup.Button value="a">A</ToggleGroup.Button>
  <ToggleGroup.Button value="b">B</ToggleGroup.Button>
  <ToggleGroup.Button value="c">C</ToggleGroup.Button>
</ToggleGroup.Root>