Backpack UI
Components
Collapsible

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


_10
import {
_10
Collapsible,
_10
CollapsibleContent,
_10
CollapsibleTrigger,
_10
} from '@ef-global/backpack/Collapsible';

Props

Collapsible

NameTypeDefaultDescription
childrenReactElement Array-The trigger and content elements for the component.
classNamestring-The CSS class name for the root element.
...restCollapsiblePrimitiveProps-Rest of the props are passed down to the Radix Collapsible component.

CollapsibleContent

NameTypeDefaultDescription
childrenReactNode-The content to be shown or hidden.
classNamestring-The CSS class name for the content element.
...restCollapsiblePrimitiveContentProps-Rest of the props are passed down to the Radix CollapsibleContent component.

CollapsibleTrigger

NameTypeDefaultDescription
childrenReactNode-The element used to trigger the visibility toggle.
classNamestring-The CSS class name for the trigger element.
...restCollapsiblePrimitiveTriggerProps-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



_16
const [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


_25
const [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>