Toggle button group
Groups toggle buttons for one or more choices.
toggle-button-group-demo.tsx
"use client";import { ToggleButton } from "@/components/vip-ui/toggle-button";import { ToggleButtonGroup } from "@/components/vip-ui/toggle-button-group";export function ToggleButtonGroupDemo() { return ( <ToggleButtonGroup aria-label="Calendar view" selectionMode="single" defaultSelectedKeys={["week"]} disallowEmptySelection > <ToggleButton id="day" variant="segmented"> Day </ToggleButton> <ToggleButton id="week" variant="segmented"> Week </ToggleButton> <ToggleButton id="month" variant="segmented"> Month </ToggleButton> </ToggleButtonGroup> );}Show more
Installation
CLI
Manual
The CLI adds the files, packages, theme variables, and Tailwind plugin that this component uses. Before you run it, set up your project.
npm
yarn
pnpm
bun
pnpm dlx shadcn@latest add https://vip-ui.dev/r/vip-toggle-button-group.jsonMultiple text styles
Selection preview
The quick brown fox jumps over the lazy dog.
toggle-button-group-editor-demo.tsx
"use client";import { TextBIcon, TextItalicIcon, TextUnderlineIcon,} from "@phosphor-icons/react";import { useState } from "react";import type { Key } from "react-aria-components";import { ToggleButton } from "@/components/vip-ui/toggle-button";import { ToggleButtonGroup } from "@/components/vip-ui/toggle-button-group";export function ToggleButtonGroupEditorDemo() { const [selected, setSelected] = useState(new Set<Key>(["bold"])); return ( <div className="grid w-full max-w-md gap-4"> <ToggleButtonGroup aria-label="Text styles" selectionMode="multiple" selectedKeys={selected} onSelectionChange={setSelected} > <ToggleButton id="bold" variant="segmented" iconOnly aria-label="Bold"> <TextBIcon aria-hidden="true" /> </ToggleButton> <ToggleButton id="italic" variant="segmented" iconOnly aria-label="Italic" > <TextItalicIcon aria-hidden="true" /> </ToggleButton> <ToggleButton id="underline" variant="segmented" iconOnly aria-label="Underline" > <TextUnderlineIcon aria-hidden="true" /> </ToggleButton> </ToggleButtonGroup> <div className="rounded-lg border border-border p-3 text-sm"> <p className="text-xs text-muted-foreground">Selection preview</p> <p className={`mt-2 ${selected.has("bold") ? "font-bold" : ""} ${selected.has("italic") ? "italic" : ""} ${selected.has("underline") ? "underline" : ""}`} > The quick brown fox jumps over the lazy dog. </p> </div> </div> );}Show more
Sizes
toggle-button-group-sizes-demo.tsx
"use client";import { ToggleButton } from "@/components/vip-ui/toggle-button";import { ToggleButtonGroup } from "@/components/vip-ui/toggle-button-group";export function ToggleButtonGroupSizesDemo() { return ( <div className="flex flex-col items-start gap-3"> <ToggleButtonGroup size="xs" aria-label="Chart range" selectionMode="single" defaultSelectedKeys={["week"]} disallowEmptySelection > <ToggleButton id="day" variant="segmented"> Day </ToggleButton> <ToggleButton id="week" variant="segmented"> Week </ToggleButton> <ToggleButton id="month" variant="segmented"> Month </ToggleButton> </ToggleButtonGroup> <ToggleButtonGroup size="sm" aria-label="Chart range" selectionMode="single" defaultSelectedKeys={["week"]} disallowEmptySelection > <ToggleButton id="day" variant="segmented"> Day </ToggleButton> <ToggleButton id="week" variant="segmented"> Week </ToggleButton> <ToggleButton id="month" variant="segmented"> Month </ToggleButton> </ToggleButtonGroup> <ToggleButtonGroup size="md" aria-label="Chart range" selectionMode="single" defaultSelectedKeys={["week"]} disallowEmptySelection > <ToggleButton id="day" variant="segmented"> Day </ToggleButton> <ToggleButton id="week" variant="segmented"> Week </ToggleButton> <ToggleButton id="month" variant="segmented"> Month </ToggleButton> </ToggleButtonGroup> </div> );}Show more
API reference
vip/ui adds or changes the props below. For all other props, see React Aria ToggleButtonGroup (opens in a new tab).
- size: "xs" | "sm" | "md" | "lg" | "xl"
- Sets the size of each toggle in the group. A size on a toggle overrides it.