Root
Tools
Components
- Accordion
- Alert
- Alert Dialog
- Autocomplete
- Avatar
- Badge
- Breadcrumb
- Button
- Card
- Checkbox
- Checkbox Group
- Collapsible
- Combobox
- Command
- Dialog
- DropdownNew
- 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
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
bunx --bun shadcn@latest add @shaddercn/toggle-group
Usage
import { Toggle, ToggleGroup } from "@/components/ui/toggle-group"<ToggleGroup>
<Toggle>Bold</Toggle>
<Toggle>Italic</Toggle>
<Toggle>Underline</Toggle>
</ToggleGroup>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>
);
}