Toggle Group
Toggles in a row: one of several, or any number with multiple.
import { AlignCenterIcon, AlignJustifyIcon, AlignLeftIcon, AlignRightIcon, BoldIcon, ItalicIcon, StrikethroughIcon } from "lucide-react"
import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"
// Text alignment is one of four; styles can be combined (multiple).
export default function ToggleGroupDemo() {
return (
<div className="flex flex-col items-center gap-4">
<ToggleGroup variant="outline" spacing={0} defaultValue={["left"]} aria-label="Alignment">
<ToggleGroupItem value="left" aria-label="Align left">
<AlignLeftIcon />
</ToggleGroupItem>
<ToggleGroupItem value="center" aria-label="Center">
<AlignCenterIcon />
</ToggleGroupItem>
<ToggleGroupItem value="right" aria-label="Align right">
<AlignRightIcon />
</ToggleGroupItem>
<ToggleGroupItem value="justify" aria-label="Justify">
<AlignJustifyIcon />
</ToggleGroupItem>
</ToggleGroup>
<ToggleGroup multiple defaultValue={["bold"]} aria-label="Style">
<ToggleGroupItem value="bold" aria-label="Bold">
<BoldIcon strokeWidth={2.5} />
</ToggleGroupItem>
<ToggleGroupItem value="italic" aria-label="Italic">
<ItalicIcon />
</ToggleGroupItem>
<ToggleGroupItem value="strike" aria-label="Strikethrough">
<StrikethroughIcon />
</ToggleGroupItem>
</ToggleGroup>
</div>
)
}Installation
pnpm dlx shadcn@latest add @cupertinoui/toggle-groupThe first install also adds the macOS theme. See Installation to set up the registry.
Usage
import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"
<ToggleGroup variant="outline" spacing={0} defaultValue={["left"]}>
<ToggleGroupItem value="left"><AlignLeftIcon /></ToggleGroupItem>
<ToggleGroupItem value="center"><AlignCenterIcon /></ToggleGroupItem>
</ToggleGroup>API Reference
Every part forwards the props of the underlying Base UI Toggle Group part. The props below are the ones CupertinoUI adds or changes.
ToggleGroup
| Prop | Type | Description |
|---|---|---|
value / defaultValue | string[] | The values of the pressed items. |
multiple | booleanDefault: false | Lets several items be pressed. |
spacing | numberDefault: 1 | The gap between items; 0 joins them into one control. |
variant / size | | Passed on to every item, as on Toggle. |
className | string | Extra classes, merged with the component's own. |