Collapsible
The Collapsible component is a highly customizable and versatile component used for hiding and showing content based on user interaction. It consists of a trigger and content, where the trigger is used to toggle the visibility of the content. This component is built on top of the @radix-ui/react-collapsible primitive, providing additional styling and functionality.
Importing
_10import {_10 Collapsible,_10 CollapsibleContent,_10 CollapsibleTrigger,_10} from '@ef-global/backpack/Collapsible';
Props
Collapsible
| Name | Type | Default | Description |
| children | ReactElement Array | - | The trigger and content elements for the component. |
| className | string | - | The CSS class name for the root element. |
| ...rest | CollapsiblePrimitiveProps | - | Rest of the props are passed down to the Radix Collapsible component. |
CollapsibleContent
| Name | Type | Default | Description |
| children | ReactNode | - | The content to be shown or hidden. |
| className | string | - | The CSS class name for the content element. |
| ...rest | CollapsiblePrimitiveContentProps | - | Rest of the props are passed down to the Radix CollapsibleContent component. |
CollapsibleTrigger
| Name | Type | Default | Description |
| children | ReactNode | - | The element used to trigger the visibility toggle. |
| className | string | - | The CSS class name for the trigger element. |
| ...rest | CollapsiblePrimitiveTriggerProps | - | Rest of the props are passed down to the Radix CollapsibleTrigger component. |
Usage
Default Usage
_10<Collapsible>_10 <CollapsibleTrigger>Trigger</CollapsibleTrigger>_10 <CollapsibleContent>_10 Cras mattis consectetur purus sit amet fermentum. Etiam porta sem_10 malesuada magna mollis euismod. Lorem ipsum dolor sit amet, consectetur_10 adipiscing elit_10 </CollapsibleContent>_10</Collapsible>
As Child
_10<Collapsible>_10 <CollapsibleTrigger asChild={true}>_10 <Button as={'button'}>Trigger</Button>_10 </CollapsibleTrigger>_10 <CollapsibleContent>_10 Cras mattis consectetur purus sit amet fermentum. Etiam porta sem_10 malesuada magna mollis euismod. Lorem ipsum dolor sit amet, consectetur_10 adipiscing elit_10 </CollapsibleContent>_10</Collapsible>
Controlled
_16const [open, setOpen] = useState(false);_16_16<Collapsible open={open} onClick={() => setOpen(!open)}>_16 <CollapsibleTrigger_16 className={styles.collapsibleTextIcon}_16 aria-label={open ? 'Collapse' : 'Expand'}_16 >_16 <Text variant={'uiLabelBold'}>Trigger</Text>_16 <AnimatedChevron active={open} />_16 </CollapsibleTrigger>_16 <CollapsibleContent>_16 Cras mattis consectetur purus sit amet fermentum. Etiam porta sem_16 malesuada magna mollis euismod. Lorem ipsum dolor sit amet, consectetur_16 adipiscing elit_16 </CollapsibleContent>_16</Collapsible>
Inside Surface
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy...
_28 const [open, setOpen] = useState(false);_28_28 <TestWrapper>_28 <Surface variant={'shadow-m'} className={styles.surface}>_28 <Text as={'p'} align={'start'} variant={'body'}>_28 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam_28 nonumy..._28 </Text>_28 <Collapsible_28 open={open}_28 onClick={() => setOpen(!open)}_28 className={styles.collapsibleBottom}_28 >_28 <CollapsibleContent>_28 <Text as={'p'} align={'start'} variant={'body'}>_28 Cras mattis consectetur purus sit amet fermentum. Etiam porta sem_28 malesuada magna mollis euismod. Lorem ipsum dolor sit amet,_28 consectetur adipiscing elit_28 </Text>_28 </CollapsibleContent>_28 <CollapsibleTrigger_28 className={styles.trigger}_28 aria-label={open ? 'Collapse' : 'Expand'}_28 >_28 <AnimatedChevron active={open} />_28 </CollapsibleTrigger>_28 </Collapsible>_28</Surface>
With List
This is title 1
This is item 1
This is title 2
This is item 2
This is title 3
This is item 3
_25const [open, setOpen] = useState(false);_25_25 <div>_25 <List variant={'border'}>_25 // list items here..._25 </List>_25 <Collapsible_25 open={open}_25 onClick={() => setOpen(!open)}_25 className={styles.collapsibleBottom}_25 >_25 <CollapsibleContent>_25 <List variant={'border'}>_25 // more list items here..._25 </List>_25 </CollapsibleContent>_25 <CollapsibleTrigger_25 className={clsx(styles.collapsibleTextIcon, styles.listTrigger)}_25 aria-label={open ? 'See less' : 'See more'}_25 >_25 <Text variant={'uiLabel'}>{open ? 'See less' : 'See more'}</Text>_25 <AnimatedChevron active={open} />_25 </CollapsibleTrigger>_25 </Collapsible>_25 </div>