ToggleButtonGroup
Groups multiple ToggleButtons into a unified control, allowing users to select one or multiple options.
Import
import { ToggleButtonGroup, ToggleButton } from "@thenamespace/uikit";Usage
import { ToggleButton, ToggleButtonGroup } from "@thenamespace/uikit";
import {
TextBoldIcon,
TextItalicIcon,
TextStrikethroughIcon,Anatomy
Import the ToggleButtonGroup component and access all parts using dot notation.
import { ToggleButtonGroup, ToggleButton } from "@thenamespace/uikit";
export default () => (
<ToggleButtonGroup selectionMode="multiple">
<ToggleButton id="first">First</ToggleButton>
<ToggleButton id="second">
<ToggleButtonGroup.Separator />
Second
</ToggleButton>
<ToggleButton id="third">
<ToggleButtonGroup.Separator />
Third
</ToggleButton>
</ToggleButtonGroup>
);Sizes
import { ToggleButton, ToggleButtonGroup } from "@thenamespace/uikit";
import {
TextBoldIcon,
TextItalicIcon,
TextStrikethroughIcon,Orientation
import { ToggleButton, ToggleButtonGroup } from "@thenamespace/uikit";
import {
TextBoldIcon,
TextItalicIcon,
TextUnderlineIcon,Detached
Use isDetached to separate buttons with gaps instead of connecting them.
import { ToggleButton, ToggleButtonGroup } from "@thenamespace/uikit";
import {
TextBoldIcon,
TextItalicIcon,
TextStrikethroughIcon,Full Width
import { ToggleButton, ToggleButtonGroup } from "@thenamespace/uikit";
import {
TextBoldIcon,
TextItalicIcon,
TextStrikethroughIcon,Selection Mode
Use selectionMode="single" for mutually exclusive choices or selectionMode="multiple" for independent toggles.
import { ToggleButton, ToggleButtonGroup } from "@thenamespace/uikit";
import {
TextBoldIcon,
TextItalicIcon,
TextStrikethroughIcon,Controlled
Selected: bold
"use client";
import type { Key } from "@thenamespace/uikit";
import { useState } from "react";Disabled
import { ToggleButton, ToggleButtonGroup } from "@thenamespace/uikit";
import {
TextBoldIcon,
TextItalicIcon,
TextUnderlineIcon,Without Separator
Simply omit the <ToggleButtonGroup.Separator /> component from your buttons.
import { ToggleButton, ToggleButtonGroup } from "@thenamespace/uikit";
import {
TextBoldIcon,
TextItalicIcon,
TextStrikethroughIcon,Styling
Passing Tailwind CSS classes
import { ToggleButtonGroup, ToggleButton } from "@thenamespace/uikit";
function CustomToggleButtonGroup() {
return (
<ToggleButtonGroup className="bg-purple-100" selectionMode="single">
<ToggleButton id="a">Option A</ToggleButton>
<ToggleButton id="b">
<ToggleButtonGroup.Separator />
Option B
</ToggleButton>
</ToggleButtonGroup>
);
}Customizing the component classes
To customize the ToggleButtonGroup component classes, you can use the @layer components directive.
@layer components {
.toggle-button-group {
@apply rounded-lg;
}
.toggle-button-group__separator {
@apply opacity-25;
}
.toggle-button-group--full-width {
@apply w-full;
}
}Namespace UIKit follows the BEM methodology to ensure component variants and states are reusable and easy to customize.
CSS Classes
The ToggleButtonGroup component uses these CSS classes:
Base & Layout Classes
.toggle-button-group- Base container styles.toggle-button-group--horizontal- Horizontal orientation.toggle-button-group--vertical- Vertical orientation.toggle-button-group--full-width- Full width modifier.toggle-button-group__separator- Separator element between buttons
Modifier Classes
.toggle-button-group--detached- Detached mode (separated buttons with gaps)
API Reference
ToggleButtonGroup Props
Inherits from React Aria ToggleButtonGroup.
| Prop | Type | Default | Description |
|---|---|---|---|
selectionMode | "single" | "multiple" | "single" | Whether one or multiple buttons can be selected |
selectedKeys | Iterable<Key> | - | Controlled selection state |
defaultSelectedKeys | Iterable<Key> | - | Default selected keys (uncontrolled) |
onSelectionChange | (keys: Set<Key>) => void | - | Called when selection changes |
disallowEmptySelection | boolean | false | Prevents clearing all selections |
orientation | "horizontal" | "vertical" | "horizontal" | Layout direction |
size | "sm" | "md" | "lg" | "md" | Size propagated to child ToggleButtons |
isDetached | boolean | false | Whether buttons are visually separated with gaps |
fullWidth | boolean | false | Whether the group fills available width |
isDisabled | boolean | false | Disables all buttons in the group |
className | string | - | Additional CSS classes |
ToggleButtonGroup.Separator Props
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes |
Notes
- ToggleButtonGroup uses React Context to pass
sizeto all child ToggleButton components - Each ToggleButton must have a unique
idprop that corresponds to the keys used inselectedKeys/defaultSelectedKeys - The
isDisabledprop is handled natively by React Aria and disables all child ToggleButtons — individual buttons can override this by settingisDisabled={false} - The component automatically handles border radius between buttons
- Add
<ToggleButtonGroup.Separator />inside each ToggleButton (except the first) to show dividers between buttons - Use
disallowEmptySelectionwithselectionMode="single"to ensure one option is always selected