Skip to main content
Version: Next

Toggle Group

A container that manages selection state across a set of toggle items. Supports single and multiple selection, keyboard navigation, and accessibility roles (radiogroup / group).

Import

// Subpath (recommended)
import { ToggleGroup } from '@editora/ui-react/ToggleGroup';

// Barrel
import { ToggleGroup } from '@editora/ui-react';

Composition

ComponentRendersPurpose
ToggleGroup<ui-toggle-group>Root — manages selection state
ToggleGroup.Item<ui-toggle>Individual toggle button

Basic Usage

import { ToggleGroup } from '@editora/ui-react/ToggleGroup';

function AlignmentPicker() {
const [value, setValue] = React.useState('left');

return (
<ToggleGroup
value={value}
variant="soft"
onValueChange={(detail) => {
if (typeof detail.value === 'string') setValue(detail.value);
}}
>
<ToggleGroup.Item value="left">Left</ToggleGroup.Item>
<ToggleGroup.Item value="center">Center</ToggleGroup.Item>
<ToggleGroup.Item value="right">Right</ToggleGroup.Item>
</ToggleGroup>
);
}

Multiple Selection

const [value, setValue] = React.useState<string[]>(['bold']);

<ToggleGroup
multiple
value={value}
onValueChange={(detail) => {
if (Array.isArray(detail.value)) setValue(detail.value);
}}
>
<ToggleGroup.Item value="bold">Bold</ToggleGroup.Item>
<ToggleGroup.Item value="italic">Italic</ToggleGroup.Item>
<ToggleGroup.Item value="underline">Underline</ToggleGroup.Item>
<ToggleGroup.Item value="strike">Strike</ToggleGroup.Item>
</ToggleGroup>

Vertical Contrast

<ToggleGroup orientation="vertical" variant="contrast" multiple value={['overview', 'alerts']}>
<ToggleGroup.Item value="overview">Overview</ToggleGroup.Item>
<ToggleGroup.Item value="analytics">Analytics</ToggleGroup.Item>
<ToggleGroup.Item value="alerts">Alerts</ToggleGroup.Item>
<ToggleGroup.Item value="settings">Settings</ToggleGroup.Item>
</ToggleGroup>

Disabled Items

<ToggleGroup value="a" variant="soft">
<ToggleGroup.Item value="a">Option A</ToggleGroup.Item>
<ToggleGroup.Item value="b" disabled>Option B</ToggleGroup.Item>
<ToggleGroup.Item value="c">Option C</ToggleGroup.Item>
</ToggleGroup>

ToggleGroup Props

PropTypeDefaultDescription
valuestring | string[]Controlled selected value(s)
multiplebooleanfalseAllow multiple items to be selected
disabledbooleanfalseDisable all items in the group
orientation'horizontal' | 'vertical''horizontal'Layout direction and arrow key axis
variant'default' | 'soft' | 'contrast' | 'minimal''default'Visual style
size'sm' | 'md' | 'lg''md'Size of the group container
density'compact' | 'default' | 'comfortable''default'Gap and padding density
shape'default' | 'square' | 'pill''default'Border radius style
elevation'default' | 'none''default'Box shadow
allowEmptybooleanfalseAllow deselecting the last item (single mode)
requiredbooleanfalseMarks group as required (aria-required)
headlessbooleanfalseHides the group wrapper, renders only the slot
activation'auto' | 'manual''auto'Whether arrow key focus also selects the item
onInput(detail: ToggleGroupDetail) => voidFires on every value change
onChange(detail: ToggleGroupDetail) => voidFires on committed value change
onValueChange(detail: ToggleGroupDetail) => voidFires on both input and change

ToggleGroup.Item Props

ToggleGroup.Item accepts all Toggle props:

PropTypeDefaultDescription
valuestringIdentifier used by the group for selection state
pressedbooleanControlled pressed state (managed by group)
disabledbooleanfalseDisable this item individually
loadingbooleanfalseShow loading indicator
size'sm' | 'md' | 'lg''md'Item size
variant'default' | 'soft' | 'outline' | 'contrast' | 'minimal''default'Item visual style
tone'brand' | 'success' | 'warning' | 'danger''brand'Color tone
shape'default' | 'square' | 'pill''default'Border radius
elevation'default' | 'none''default'Box shadow
namestringForm field name
requiredbooleanfalseMarks item as required
iconOnstringIcon shown when pressed
iconOffstringIcon shown when not pressed
onInput(detail: ToggleDetail) => voidFires on item input event
onChange(detail: ToggleDetail) => voidFires on item change event

ToggleGroupDetail Type

type ToggleGroupDetail = {
value: string | string[]; // current selected value(s)
values: string[]; // always an array
multiple: boolean;
};

Keyboard Navigation

KeyAction
ArrowRight / ArrowDownMove focus to next item
ArrowLeft / ArrowUpMove focus to previous item
HomeMove focus to first item
EndMove focus to last item
Space / EnterToggle focused item

Arrow keys wrap around. With activation="auto" (default), focus movement also selects the item. With activation="manual", press Space or Enter to select.