Accordion
The Accordion component is used to show and hide blocks of secondary content which might otherwise clutter the UI.
Usage
_10import {_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>