- Accordion
- Avatar
- Badge
- Breadcrumb
- Button
- Calendar
- Checkbox
- Combobox
- Container
- CurrencyInput
- DistributionSlider
- Drawer
- Dropdown
- Grid
- Heading
- Image
- Input
- InputGroup
- Label
- Logo
- MapPin
- Modal
- NativeSelect
- NumberInput
- OtpInput
- PhoneInput
- Popover
- Progress
- PropertyCalendar
- RadioGroup
- RadioGroupCards
- ResponsiveModal
- ScrollArea
- SearchBar
- SearchBarFallback
- SearchInput
- Select
- Separator
- Spinner
- Switch
- Tabs
- Text
- Textarea
- Toast
- Toggle
- ToggleGroup
- Tooltip
Toggle
A two-state button that can be either on or off
pnpm add @wandercom/design-system-web
import { Toggle } from '@wandercom/design-system-web/ui/toggle';
import { IconBold } from '@central-icons-react/round-outlined-radius-2-stroke-1.5/IconBold';
export function Example() {
return (
<Toggle aria-label="Toggle bold">
<IconBold className="size-4" />
</Toggle>
);
}The toggle component supports icon-only and text variants across multiple sizes. The default variant transitions from ghost to filled background when pressed, while the filter variant uses bordered styling suitable for filter chips.
The default variant has a ghost background that becomes filled when pressed.
import { IconStar } from '@central-icons-react/round-outlined-radius-2-stroke-1.5/IconStar';
<Toggle variant="default" aria-label="Toggle option">
<IconStar className="size-4" />
</Toggle>The filter variant has a bordered appearance, useful for filter chips and selection UI.
import { IconFilter1 } from '@central-icons-react/round-outlined-radius-2-stroke-1.5/IconFilter1';
<Toggle variant="filter" size="md">
<IconFilter1 className="size-4" />
Filters
</Toggle>Icon-only toggles come in three sizes.
import { IconBold } from '@central-icons-react/round-outlined-radius-2-stroke-1.5/IconBold';
<Toggle size="icon-sm" aria-label="Small toggle">
<IconBold className="size-4" />
</Toggle>
<Toggle size="icon-md" aria-label="Medium toggle">
<IconBold className="size-4" />
</Toggle>
<Toggle size="icon-lg" aria-label="Large toggle">
<IconBold className="size-5" />
</Toggle>Toggles with text content also come in three sizes.
import { IconBold } from '@central-icons-react/round-outlined-radius-2-stroke-1.5/IconBold';
<Toggle size="sm">
<IconBold className="size-4" />
Small
</Toggle>
<Toggle size="md">
<IconBold className="size-4" />
Medium
</Toggle>
<Toggle size="lg">
<IconBold className="size-5" />
Large
</Toggle>Use pressed and onPressedChange for controlled state.
import { Toggle } from '@wandercom/design-system-web/ui/toggle';
import { IconStar } from '@central-icons-react/round-outlined-radius-2-stroke-1.5/IconStar';
import { useState } from 'react';
export function ControlledToggle() {
const [pressed, setPressed] = useState(false);
return (
<Toggle pressed={pressed} onPressedChange={setPressed}>
<IconStar className="size-4" />
</Toggle>
);
}variant?
size?
defaultPressed?
pressed?
onPressedChange?
disabled?
className?
The Toggle component is built on Radix UI Toggle primitive and follows WAI-ARIA button pattern.
Keyboard interaction:
Space- Toggles the pressed stateEnter- Toggles the pressed state
Always provide an aria-label when using icon-only toggles to ensure screen readers can announce the toggle's purpose.