Components
Accordion
A set of collapsible panels that expand one at a time or independently.
Usage
import { Accordion } from "monochrome/react"
<Accordion.Root>
<Accordion.Item>
<Accordion.Header>
<Accordion.Trigger>What is monochrome?</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel>A minimal component library...</Accordion.Panel>
</Accordion.Item>
<Accordion.Item>
<Accordion.Header>
<Accordion.Trigger>How does it work?</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel>Components are server-rendered...</Accordion.Panel>
</Accordion.Item>
</Accordion.Root>Examples
Default Open
Set an item as expanded by default.
This content is visible by default because the AccordionItem has the open prop.
<Accordion.Root>
<Accordion.Item open>
<Accordion.Header>
<Accordion.Trigger>This item starts open</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel>This content is visible by default.</Accordion.Panel>
</Accordion.Item>
</Accordion.Root>Disabled Items
Disabled items cannot be toggled and are skipped during keyboard navigation.
<Accordion.Root>
<Accordion.Item>
<Accordion.Header>
<Accordion.Trigger>General Settings</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel>Configure language and display preferences.</Accordion.Panel>
</Accordion.Item>
<Accordion.Item disabled>
<Accordion.Header>
<Accordion.Trigger>Advanced Settings</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel>This panel cannot be opened.</Accordion.Panel>
</Accordion.Item>
</Accordion.Root>Multiple Open Items
Use type="multiple" to allow multiple items open simultaneously.
Multiple items can be open at the same time.
This item is also open by default.
<Accordion.Root type="multiple">
<Accordion.Item open>
<Accordion.Header>
<Accordion.Trigger>First Section</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel>Content...</Accordion.Panel>
</Accordion.Item>
<Accordion.Item open>
<Accordion.Header>
<Accordion.Trigger>Second Section</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel>Content...</Accordion.Panel>
</Accordion.Item>
</Accordion.Root>Accessibility
Follows the WAI-ARIA Accordion Pattern.
Keyboard
| Key | Action |
|---|---|
Enter / Space | Toggle the focused item |
Arrow Down | Move focus to the next trigger |
Arrow Up | Move focus to the previous trigger |
Home | Move focus to the first trigger |
End | Move focus to the last trigger |
Disabled items are skipped during keyboard navigation. Hidden content uses hidden="until-found" so it remains searchable via browser find-in-page (Ctrl+F).
API Reference
HTML
| Element | Attributes | Description |
|---|---|---|
| Root | id="mcr:accordion:*" | Root ID (required) |
data-mode="single" | Only one item open at a time | |
data-mode="multiple" | Multiple items can be open | |
| Item | — | Wrapper <div> around each heading + content pair |
| Trigger | id="mct:accordion:*" | Trigger ID (required) |
aria-expanded | "true" or "false" | |
aria-controls | Content element ID | |
aria-disabled="true" | For disabled items | |
| Content | id="mcc:accordion:*" | Content ID (required) |
role="region" | ARIA landmark role | |
aria-labelledby | Trigger element ID | |
aria-hidden | "true" or "false" | |
hidden="until-found" | Set when closed, removed when open |
React
All components accept className for styling.
Accordion.Root
| Prop | Type | Default | Description |
|---|---|---|---|
type | "single" | "multiple" | "single" | Whether one or multiple items can be open |
Accordion.Item
| Prop | Type | Default | Description |
|---|---|---|---|
open | boolean | false | Whether expanded by default |
disabled | boolean | false | Whether the item is disabled (cannot be toggled) |
Accordion.Header
Wraps the trigger in a heading element. Defaults to <h3>.
| Prop | Type | Default | Description |
|---|---|---|---|
as | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "h3" | Heading level |
Accordion.Trigger
The button that toggles the item.
Accordion.Panel
The content revealed when expanded. Uses hidden="until-found" for find-in-page support.