A group of toggle buttons where one or more can be active, supporting single-select and multi-select modes.
Basic Usage
import { useState } from "react"
import { ToggleGrp, ToggleGrpItem } from "@paramanu/buttons-react"
export default function App() {
const [value, setValue] = useState("center")
<ToggleGrp type="single" value={value} onChange={setValue}>
<ToggleGrpItem value="left">Left</ToggleGrpItem>
<ToggleGrpItem value="center">Center</ToggleGrpItem>
<ToggleGrpItem value="right">Right</ToggleGrpItem>
<div class="pm-toggle-grp pm-toggle-grp--horizontal pm-toggle-grp--md" role="group" aria-label="Alignment">
<button class="pm-toggle-grp__item pm-toggle-grp__item--default pm-toggle-grp__item--md" aria-pressed="false">Left</button>
<button class="pm-toggle-grp__item pm-toggle-grp__item--default pm-toggle-grp__item--md pm-toggle-grp__item--pressed" aria-pressed="true">Center</button>
<button class="pm-toggle-grp__item pm-toggle-grp__item--default pm-toggle-grp__item--md" aria-pressed="false">Right</button>
Multiple Selection
import { useState } from "react"
import { ToggleGrp, ToggleGrpItem } from "@paramanu/buttons-react"
export default function App() {
const [value, setValue] = useState(["bold"])
<ToggleGrp type="multiple" value={value} onChange={setValue}>
<ToggleGrpItem value="bold">B</ToggleGrpItem>
<ToggleGrpItem value="italic">I</ToggleGrpItem>
<ToggleGrpItem value="underline">U</ToggleGrpItem>
<div class="pm-toggle-grp pm-toggle-grp--horizontal pm-toggle-grp--md" role="group" aria-label="Formatting" data-type="multiple">
<button class="pm-toggle-grp__item pm-toggle-grp__item--default pm-toggle-grp__item--md pm-toggle-grp__item--pressed" aria-pressed="true">B</button>
<button class="pm-toggle-grp__item pm-toggle-grp__item--default pm-toggle-grp__item--md" aria-pressed="false">I</button>
<button class="pm-toggle-grp__item pm-toggle-grp__item--default pm-toggle-grp__item--md" aria-pressed="false">U</button>
Accessibility
- Uses
role="group" with aria-label
- Each item uses
aria-pressed for toggle state
- Keyboard accessible via tab + Enter/Space
Best Practices
- Use
type="single" for mutually exclusive options (e.g., text alignment)
- Use
type="multiple" for independent toggles (e.g., text formatting)
- Always provide an
aria-label for the group
ToggleGrp Props
| Prop | Type | Default | Description |
|---|
type | "single" | "multiple" | "single" | Selection mode |
orientation | "horizontal" | "vertical" | "horizontal" | Layout direction |
size | "xs" | "sm" | "md" | "lg" | "xl" | "md" | Shared size for items |
attached | boolean | false | Merge item borders |
fullWidth | boolean | false | Stretch to container |
value | string | string[] | — | Current selection |
onChange | (value) => void | — | Selection change callback |
ToggleGrpItem Props
| Prop | Type | Default | Description |
|---|
value | string | — | Item value for tracking |
variant | "default" | "outline" | "default" | Visual style |
size | ToggleGrpSize | Inherited | Size override |
pressed | boolean | Managed | Toggle state |
disabled | boolean | false | Disabled state |
CSS Classes
| Class | Purpose |
|---|
pm-toggle-grp | Container base |
pm-toggle-grp--horizontal/vertical | Layout direction |
pm-toggle-grp--attached | Merged borders |
pm-toggle-grp__item | Item base |
pm-toggle-grp__item--pressed | Active item |
pm-toggle-grp__item--disabled | Disabled item |