@bianic-ui/accordion
Version:
A simple and accessible accordion component for React & Bianic UI
124 lines (100 loc) • 2.9 kB
Markdown
# @bianic-ui/accordion
An accordion is a vertically stacked set of interactive headings that each
contain a title or content snippet representing a section of content.
The headings function as controls that enable users to reveal or hide their
associated sections of content.
## Installation
```sh
yarn add @bianic-ui/accordion
# or
npm i @bianic-ui/accordion
```
## Import Components
```jsx
import {
Accordion,
AccordionItem,
AccordionButton,
AccordionPanel,
} from "@bianic-ui/accordion"
```
## Component:
- `Accordion`: manages the global state of all opened accordionitems via
context.
- `AccordionItem`: manages the state for a single accordion item.
- `AccordionButton`: the trigger to open/close an accordion item.
- `AccordionPanel`: the main content area for the accordion item.
## Usage
By default, only one accordion can be visible at a time, and it can't be
toggled.
**Note 🚨**: Each accordion button must be wrapped in an heading tag, that is
appropriate for the information architecture of the page.
```jsx
<Accordion>
<AccordionItem>
<h2>
<AccordionButton>Section 1 title</AccordionButton>
</h2>
<AccordionPanel>Panel 1</AccordionPanel>
</AccordionItem>
<AccordionItem>
<h2>
<AccordionButton>Section 2 title</AccordionButton>
</h2>
<AccordionPanel>Panel 2</AccordionPanel>
</AccordionItem>
</Accordion>
```
To make each accordion toggle (expand/collapse) on click, pass the `allowToggle`
prop.
```jsx
<Accordion allowToggle>
<AccordionItem>
<AccordionButton>
<bianic.div flex="1" textAlign="left">
Section 1 title
</bianic.div>
<AccordionIcon />
</AccordionButton>
<AccordionPanel pb={4}>Panel 1</AccordionPanel>
</AccordionItem>
<AccordionItem>
<AccordionButton>
<bianic.div flex="1" textAlign="left">
Section 2 title
</bianic.div>
<AccordionIcon />
</AccordionButton>
<AccordionPanel pb={4}>Panel 2</AccordionPanel>
</AccordionItem>
</Accordion>
```
To allow multiple accordions to be visible at a time, pass the `allowMultiple`
prop.
```jsx
<Accordion allowMultiple>
<AccordionItem>
<AccordionButton>
<bianic.div flex="1" textAlign="left">
Section 1 title
</bianic.div>
<AccordionIcon />
</AccordionButton>
<AccordionPanel pb={4}>Panel 1</AccordionPanel>
</AccordionItem>
<AccordionItem>
<AccordionButton>
<bianic.div flex="1" textAlign="left">
Section 2 title
</bianic.div>
<AccordionIcon />
</AccordionButton>
<AccordionPanel pb={4}>Panel 2</AccordionPanel>
</AccordionItem>
</Accordion>
```
## References:
https://www.w3.org/TR/wai-aria-practices/examples/accordion/accordion.html
https://inclusive-components.design/collapsible-sections/
https://github.com/stereobooster/react-accessible-accordion
https://jqueryui.com/accordion/