Accordion

Accordion display a list of high-level options that can expand/collapse to reveal more information.


Installation

The above command is for individual installation only. You may skip this step if @nextui-org/react is already installed globally.

Import

NextUI exports 2 accordion-related components:

  • Accordion: The main component to display a list of accordion items.
  • AccordionItem: The item component to display a single accordion item. This uses the Disclosure component internally.

Usage

With Subtitle

Expand multiple items

If you set allowsMultipleExpanded to true, then the Accordion will allow multiple items to be expanded at the same time.

Compact

If you set isCompact to true, the Accordion will be displayed in a compact style.

Variants

Accordion has 4 variants: light, shadow, bordered and splitted.

Light variant

Shadow variant

Bordered variant

Splitted variant

Default expanded keys

If you want to expand some items by default, you can set the defaultExpandedKeys property to an array of keys.

Disabled keys

If you want to disable some items, you can set the disabledKeys property to an array of keys.

Start content

If you want to display some content before the accordion items, you can set the startContent property.

Custom Indicator

Accordion items have a property called indicator. You can use it to customize the open/close indicator.

The indicator can be also a function, which receives the isExpanded, isDisabled and the default indicator as parameters.

Custom Motion

Accordion's animation can be changed by upadting the content style.

Controlled

Accordion is a controlled component, which means you need to control the selectedKeys property by yourself.

Accordion Item Slots

  • base: The accordion item wrapper.
  • heading: The accordion item heading. It contains the indicator and the title.
  • trigger: The button that open/close the accordion item.
  • titleWrapper: The wrapper of the title and subtitle.
  • title: The accordion item title.
  • subtitle: The accordion item subtitle.
  • startContent: The content before the accordion item.
  • indicator: The element that indicates the open/close state of the accordion item.
  • content: The accordion item content.

Custom Accordion Styles

You can customize the accordion and accordion items styles by using any of the following properties:

  • className: The class name of the accordion. Modify the accordion wrapper styles.(Accordion)
  • itemClasses: The class names of the accordion items. Modify all accordion items styles at once. (Accordion)
  • classNames: The class names of the accordion items. Modify each accordion item styles separately. (AccordionItem)

Here's an example of how to customize the accordion styles:

Data Attributes

Disclosure in the AccordionItem has the following attributes on the base element:

  • data-expanded: Whether the accordion item is open.
  • data-hover: When the accordion item is being hovered. Based on useHover.
  • data-focus: When the accordion item is being focused. Based on useFocusRing.
  • data-focus-visible: When the accordion item is being focused with the keyboard. Based on useFocusRing.
  • data-disabled: When the accordion item is disabled. Based on isDisabled prop.
  • data-pressed: When the accordion item is pressed. Based on usePress.

Accessibility

  • Keyboard event support for Space, Enter, Tab and Shift + Tab keys.
  • Keyboard focus management and cross browser normalization.
  • aria-expanded attribute for the accordion item.
  • aria-disabled attribute for the accordion item.
  • aria-controls attribute for the accordion item.

API

Accordion Props

PropTypeDefault
children
ReactNode | ReactNode[]
variant
light | shadow | bordered | splitted
"light"
allowsMultipleExpanded
boolean
isCompact
boolean
false
isDisabled
boolean
false
showDivider
boolean
true
dividerProps
DividerProps
hideIndicator
boolean
false
disableAnimation
boolean
false
disableIndicatorAnimation
boolean
false
keepContentMounted
boolean
false
fullWidth
boolean
true
motionProps
MotionProps
disabledKeys
React.Key[]
expandedKeys
all | React.Key[]
defaultExpandedKeys
all | React.Key[]

Accordion Events

PropTypeDefault
onExpandedChange
(keys: "all" | Set<React.Key>) => any

Accordion Item Props

PropTypeDefault
children
ReactNode | string
title
ReactNode | string
subtitle
ReactNode | string
indicator
IndicatorProps
startContent
ReactNode
isCompact
boolean
false
isDisabled
boolean
false
keepContentMounted
boolean
false
hideIndicator
boolean
false
disableAnimation
boolean
false
disableIndicatorAnimation
boolean
false
HeadingComponent
React.ElementType
"h2"
classNames
AccordionItemClassnames

Accordion Item Events

PropTypeDefault
onFocus
(e: FocusEvent) => void
onBlur
(e: FocusEvent) => void
onFocusChange
(isFocused: boolean) => void
onKeyDown
(e: KeyboardEvent) => void
onKeyUp
(e: KeyboardEvent) => void
onPress
(e: PressEvent) => void
onPressStart
(e: PressEvent) => void
onPressEnd
(e: PressEvent) => void
onPressChange
(isPressed: boolean) => void
onPressUp
(e: PressEvent) => void
onClick
MouseEventHandler

Types

Accordion Item Indicator Props

Accordion Item classNames

  • This classNames are propagated to the internal disclosure component.