Accordion
Usage
Custom control label
Change chevron
With icons
Change transition
To change transition duration, set transitionDuration prop:
To disable transitions, set transitionDuration to 0:
Default opened items
When multiple={false}, set defaultValue as string:
When multiple={true}, set defaultValue as an array of strings:
Control state
When multiple={false}, set value as string:
When multiple={true}, set value as an array of strings:
Compose controls
You can add any additional elements that will be displayed next to Accordion.Control,
for example, you can add ActionIcon or Menu:
Disabled items
Set disabled prop on Accordion.Control component to disable it.
Disabled items cannot be activated with mouse or keyboard, will be skipped when user navigates with arrow keys:
Unstyled Accordion
Set unstyled prop on Accordion component to remove all non-essential library styles.
It can be used to style component with Styles API without overriding any styles.
Styles API
Use Styles API to customize Accordion styles:
Data attributes
Accordion elements have data- attributes that can be used with Styles API:
data-activeattribute is added toAccordion.Itemroot element when associated panel is expandeddata-rotateattribute is added to chevron icon when icon should rotate (controlled bydisableChevronRotationand expanded state of associated panel)
TypeScript
AccordionProps type exported from @mantine/core is a generic, it accepts boolean type that
describes multiple state:
Accessibility
Accordion component follows WAI-ARIA recommendations on accessibility.
Notes
Set order on Accordion component to wrap accordion controls with h2-h6 heading.
The following example will wrap controls with h3 tag:
Keyboard interactions
| Key | Description |
|---|---|
| ArrowDown | Moves focus to next item |
| ArrowUp | Moves focus to previous item |
| Home | Moves focus to first item |
| End | Moves focus to last item |
| Space/Enter | Toggles focused item opened state |
Accordion component props
| Name | Type | Description |
|---|---|---|
| chevron | ReactNode | Replaces chevron on all items |
| chevronPosition | "left" | "right" | Determines position of the chevron |
| chevronSize | number | Chevron size in px |
| children * | ReactNode | Accordion content |
| defaultValue | string | string[] | Default value for uncontrolled component |
| disableChevronRotation | boolean | Determines whether chevron rotation should be disabled |
| id | string | Base id, used to generate ids that connect labels with controls, by default generated randomly |
| loop | boolean | Determines whether arrow key presses should loop though items (first to last and last to first) |
| multiple | boolean | Determines whether multiple items can be opened at a time |
| onChange | (value: AccordionValue<Multiple>) => void | Callback for controlled component |
| order | 2 | 3 | 4 | 5 | 6 | Heading order, has no effect on visuals |
| radius | number | "xs" | "sm" | "md" | "lg" | "xl" | border-radius from theme.radius or number to set value in px, will not be applied to default variant |
| transitionDuration | number | Transition duration in ms, set 0 to disable transitions |
| value | string | string[] | Value for controlled component |
| variant | "default" | "contained" | "filled" | "separated" | Controls visuals |
AccordionControl component props
| Name | Type | Description |
|---|---|---|
| chevron | ReactNode | Custom chevron icon |
| children | ReactNode | Control label |
| disabled | boolean | Disables control button |
| icon | ReactNode | Icon rendered next to label |
AccordionItem component props
| Name | Type | Description |
|---|---|---|
| value * | string | Value that is used to manage accordion state |
AccordionPanel component props
| Name | Type | Description |
|---|---|---|
| children | ReactNode | Panel content |
Accordion component Styles API
| Name | Static selector | Description |
|---|---|---|
| item | .mantine-Accordion-item | Accordion item wrapper |
| itemTitle | .mantine-Accordion-itemTitle | Optional heading element wrapping control |
| control | .mantine-Accordion-control | Control root |
| label | .mantine-Accordion-label | Control label |
| icon | .mantine-Accordion-icon | Control icon |
| chevron | .mantine-Accordion-chevron | Control chevron icon |
| panel | .mantine-Accordion-panel | Panel root |
| content | .mantine-Accordion-content | Panel content |