Toggle Group

A group of toggle buttons with shared variant and size context. Supports single-select and multi-select modes. Built on Radix UI ToggleGroup.

Built on Radix UI.

  • type='single' enforces at most one item active at a time
  • type='multiple' allows any number of items to be active
  • variant and size propagate from ToggleGroup to all child ToggleGroupItems
  • Individual items can override variant and size from context
  • Controlled via value/onValueChange or uncontrolled via defaultValue
  • Full keyboard navigation — arrow keys move between items

import { Toggle Group }from "@aetherstack/ui"

toggle group.tsx
import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"
import { AlignLeft, AlignCenter, AlignRight } from "lucide-react"

export function ToggleGroupDemo() {
  return (
    <ToggleGroup type="single" defaultValue="center">
      <ToggleGroupItem value="left" aria-label="Align left">
        <AlignLeft />
      </ToggleGroupItem>
      <ToggleGroupItem value="center" aria-label="Align center">
        <AlignCenter />
      </ToggleGroupItem>
      <ToggleGroupItem value="right" aria-label="Align right">
        <AlignRight />
      </ToggleGroupItem>
    </ToggleGroup>
  )
}

Usage

Single select

type='single' — only one item can be active at a time. Ideal for exclusive options like text alignment.

Multiple select

type='multiple' — any number of items can be active simultaneously. Ideal for text formatting options.

Outline variant

Set variant='outline' on ToggleGroup to apply it to all items at once.

Props

PropTypeDefaultDescription

ToggleGroup

PropTypeDefaultDescription
type"single" | "multiple"Selection mode. Required. single allows one active item; multiple allows any number.
valuestring | string[]Controlled active value(s). String for single, string[] for multiple.
defaultValuestring | string[]Uncontrolled initial active value(s).
onValueChange(value: string | string[]) => voidCallback when the active value(s) change.
variant"default" | "outline""default"Visual style applied to all child ToggleGroupItems.
size"default" | "sm" | "lg""default"Size applied to all child ToggleGroupItems.

ToggleGroupItem

PropTypeDefaultDescription
valuestringUnique identifier for this item within the group. Required.
variant"default" | "outline"Overrides the variant from ToggleGroup context for this item only.
size"default" | "sm" | "lg"Overrides the size from ToggleGroup context for this item only.
disabledbooleanfalseDisables this item independently of the group.

* Required props

Accessibility

  • Has role='group' — screen readers announce it as a toolbar group.
  • Each item has role='radio' (single) or role='checkbox' (multiple) with aria-checked.
  • Always provide aria-label on icon-only ToggleGroupItems.
  • Arrow keys move focus between items; Space or Enter toggles the focused item.
  • Disabled items are skipped during keyboard navigation.