Components
- Accordion
- Alert
- Alert Dialog
- Autocomplete
- Avatar
- Badge
- Breadcrumb
- Button
- Card
- Checkbox
- Checkbox Group
- Collapsible
- Combobox
- CommandNew
- Dialog
- Empty
- Field
- Fieldset
- Form
- Frame
- Group
- Input
- Input Group
- Kbd
- Label
- Menu
- Meter
- Number Field
- Pagination
- Popover
- Preview Card
- Progress
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Skeleton
- Slider
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Toolbar
- Tooltip
Resources
Toggle Group
Provides a shared state to a series of toggle buttons.
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group";
export default function Particle() {
return (
<ToggleGroup defaultValue={["bold"]}>
<Toggle aria-label="Toggle bold" value="bold">
<BoldIcon />
</Toggle>
<Toggle aria-label="Toggle italic" value="italic">
<ItalicIcon />
</Toggle>
<Toggle aria-label="Toggle underline" value="underline">
<UnderlineIcon />
</Toggle>
</ToggleGroup>
);
}
Installation
pnpm dlx shadcn@latest add @coss/toggle-group
Usage
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group"<ToggleGroup>
<Toggle>Bold</Toggle>
<Toggle>Italic</Toggle>
<Toggle>Underline</Toggle>
</ToggleGroup>API Reference
ToggleGroup
Root component. Styled wrapper for ToggleGroup.Root from Base UI. Provides shared variant and size to child toggles via context.
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "outline" | "default" | Controls the styling of all child toggles |
size | "default" | "sm" | "lg" | "default" | Controls the size of all child toggles |
Toggle
Individual toggle button within the group. Styled wrapper for ToggleGroup.Item from Base UI. Inherits variant and size from parent ToggleGroup context. Also exported as ToggleGroupItem.
ToggleGroupSeparator
Visual separator between toggle buttons.
Examples
Small Toggles
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group";
export default function Particle() {
return (
<ToggleGroup defaultValue={["bold"]} size="sm">
<Toggle aria-label="Toggle bold" value="bold">
<BoldIcon />
</Toggle>
<Toggle aria-label="Toggle italic" value="italic">
<ItalicIcon />
</Toggle>
<Toggle aria-label="Toggle underline" value="underline">
<UnderlineIcon />
</Toggle>
</ToggleGroup>
);
}
Large Toggles
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group";
export default function Particle() {
return (
<ToggleGroup defaultValue={["bold"]} size="lg">
<Toggle aria-label="Toggle bold" value="bold">
<BoldIcon />
</Toggle>
<Toggle aria-label="Toggle italic" value="italic">
<ItalicIcon />
</Toggle>
<Toggle aria-label="Toggle underline" value="underline">
<UnderlineIcon />
</Toggle>
</ToggleGroup>
);
}
With Outline Toggles
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import {
Toggle,
ToggleGroup,
ToggleGroupSeparator,
} from "@/components/ui/toggle-group";
export default function Particle() {
return (
<ToggleGroup defaultValue={["bold"]} variant="outline">
<Toggle aria-label="Toggle bold" value="bold">
<BoldIcon />
</Toggle>
<ToggleGroupSeparator />
<Toggle aria-label="Toggle italic" value="italic">
<ItalicIcon />
</Toggle>
<ToggleGroupSeparator />
<Toggle aria-label="Toggle underline" value="underline">
<UnderlineIcon />
</Toggle>
</ToggleGroup>
);
}
Vertical
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import {
Toggle,
ToggleGroup,
ToggleGroupSeparator,
} from "@/components/ui/toggle-group";
export default function Particle() {
return (
<ToggleGroup
defaultValue={["bold"]}
orientation="vertical"
variant="outline"
>
<Toggle aria-label="Toggle bold" value="bold">
<BoldIcon />
</Toggle>
<ToggleGroupSeparator orientation="horizontal" />
<Toggle aria-label="Toggle italic" value="italic">
<ItalicIcon />
</Toggle>
<ToggleGroupSeparator orientation="horizontal" />
<Toggle aria-label="Toggle underline" value="underline">
<UnderlineIcon />
</Toggle>
</ToggleGroup>
);
}
Disabled
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group";
export default function Particle() {
return (
<ToggleGroup defaultValue={["bold"]} disabled>
<Toggle aria-label="Toggle bold" value="bold">
<BoldIcon />
</Toggle>
<Toggle aria-label="Toggle italic" value="italic">
<ItalicIcon />
</Toggle>
<Toggle aria-label="Toggle underline" value="underline">
<UnderlineIcon />
</Toggle>
</ToggleGroup>
);
}
With Disabled Toggle
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group";
export default function ParticleItem() {
return (
<ToggleGroup defaultValue={["bold"]}>
<Toggle aria-label="Toggle bold" value="bold">
<BoldIcon />
</Toggle>
<Toggle aria-label="Toggle italic" disabled value="italic">
<ItalicIcon />
</Toggle>
<Toggle aria-label="Toggle underline" value="underline">
<UnderlineIcon />
</Toggle>
</ToggleGroup>
);
}
Multiple selection
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group";
export default function Particle() {
return (
<ToggleGroup defaultValue={["bold"]} multiple>
<Toggle aria-label="Toggle bold" value="bold">
<BoldIcon />
</Toggle>
<Toggle aria-label="Toggle italic" value="italic">
<ItalicIcon />
</Toggle>
<Toggle aria-label="Toggle underline" value="underline">
<UnderlineIcon />
</Toggle>
</ToggleGroup>
);
}
With Tooltips
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group";
import {
Tooltip,
TooltipPopup,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
export default function Particle() {
return (
<TooltipProvider>
<ToggleGroup defaultValue={["bold"]} multiple>
<Tooltip>
<TooltipTrigger
render={<Toggle aria-label="Toggle bold" value="bold" />}
>
<BoldIcon />
</TooltipTrigger>
<TooltipPopup>Bold</TooltipPopup>
</Tooltip>
<Tooltip>
<TooltipTrigger
render={<Toggle aria-label="Toggle italic" value="italic" />}
>
<ItalicIcon />
</TooltipTrigger>
<TooltipPopup>Italic</TooltipPopup>
</Tooltip>
<Tooltip>
<TooltipTrigger
render={<Toggle aria-label="Toggle underline" value="underline" />}
>
<UnderlineIcon />
</TooltipTrigger>
<TooltipPopup>Underline</TooltipPopup>
</Tooltip>
</ToggleGroup>
</TooltipProvider>
);
}