Backpack UI
Components
Accordion

Accordion

The Accordion component is used to show and hide blocks of secondary content which might otherwise clutter the UI.

Usage


_10
import {
_10
Accordion,
_10
AccordionItem,
_10
AccordionItemContent,
_10
AccordionItemTitle,
_10
AccordionItemTitleToggle
_10
} from "@ef-global/backpack/Accordion";

Anatomy

The accordion consists of 5 components. 4 are required, and one (titleToggle) is optional. It is a thin wrapper around the Radix UI Accordion (opens in a new tab), which makes it fully accessible and very easy to use with the keyboard.


_10
<Accordion>
_10
<AccordionItem>
_10
<AccordionItemTitle />
_10
<AccordionItemContent />
_10
</AccordionItem>
_10
</Accordion>

Regular Accordion

To set up the accordion, each item must have a unique value, and a unique key for react.

In the example below we are using h5 tags as the accordion's item trigger. You should pass whichever level heading is appropriate to the accordion item title's as prop. The default element is an h4.


_19
<Accordion>
_19
{
_19
['a', 'b', 'c'].map((v, i) => (
_19
<AccordionItem key={i} value={v}>
_19
<AccordionItemTitle icon>
_19
<Text variant="header5" as="h5">Item {v}</Text>
_19
</AccordionItemTitle>
_19
<AccordionItemContent>
_19
<Text as="p" variant="body">Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
_19
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
_19
laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,
_19
totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt
_19
explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
_19
magni dolores eos qui.</Text>
_19
</AccordionItemContent>
_19
</AccordionItem>
_19
))
_19
}
_19
</Accordion>

Inline Accordion

The accordion also works with an inline link as the trigger. In this case it may be useful to use the AccordionItemTitleToggle child component to toggle title text when the content is expanded, as in the following example.


_14
<Accordion class="u-mb-xl">
_14
<AccordionItem>
_14
<AccordionItemTitle inline>
_14
<Text variant="header5" as="h5">
_14
<AccordionItemTitleToggle text={'Show less'}>
_14
Show more
_14
</AccordionItemTitleToggle>
_14
</Text>
_14
</AccordionItemTitle>
_14
<AccordionItemContent>
_14
content
_14
</AccordionItemContent>
_14
</AccordionItem>
_14
</Accordion>

Opening items by default

You can set initially open items with the defaultValue prop. To do so, pass an array of the the values of the items you would like to begin in the open state.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui.


_19
<Accordion defaultValue={['b', 'c']}>
_19
{
_19
['a', 'b', 'c'].map((v, i) => (
_19
<AccordionItem key={i} value={v}>
_19
<AccordionItemTitle icon>
_19
<Text variant="header5" as="h5">Item {v}</Text>
_19
</AccordionItemTitle>
_19
<AccordionItemContent>
_19
<Text as="p" variant="body">Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
_19
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
_19
laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,
_19
totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt
_19
explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
_19
magni dolores eos qui.</Text>
_19
</AccordionItemContent>
_19
</AccordionItem>
_19
))
_19
}
_19
</Accordion>

Disabling items

You can also disable entire accordions or accordion items by adding a disabled prop to the <Accordion> or <AccordionItem />


_19
<Accordion>
_19
{
_19
['a', 'b', 'c'].map((v, i) => (
_19
<AccordionItem key={i} value={v} disabled={i < 2}>
_19
<AccordionItemTitle icon>
_19
<Text variant="header5" as="h5">Item {v}</Text>
_19
</AccordionItemTitle>
_19
<AccordionItemContent>
_19
<Text as="p" variant="body">Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
_19
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
_19
laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,
_19
totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt
_19
explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
_19
magni dolores eos qui.</Text>
_19
</AccordionItemContent>
_19
</AccordionItem>
_19
))
_19
}
_19
</Accordion>