Accordian
Basiclly just collapsible component but we only allow one to be open at a time. Want to have multiple open at the same time? Just use the Collapsible only component instead.
Requirements
You will need the Collapsible component to use this component. You can find it here.
Examples
Simple Accordian Example
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Code
import { Collapsible } from '@/components/Collapsible'
import cn from '@/utils/cn'
import { applyPropsToChildrenOfType } from '@/utils/manipulateReactComponents'
import React, { useId } from 'react'
type AccordianProps = {
children: React.ReactNode
className?: string
}
const Accordian = ({ children, className }: AccordianProps) => {
const accordionId = useId()
const accordianChildren = applyPropsToChildrenOfType(children, { accordionId }, [Collapsible])
return <div className={cn('block', className)}>{accordianChildren}</div>
}
Accordian.displayName = 'Accordian'
export default Accordian
Usage
<Accordian>
<Collapsible openByDefault={true}>
<CollapsibleTrigger className="p-3">
Accordian 1
</CollapsibleTrigger>
<CollapsibleContent className="p-3 pt-0">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</CollapsibleContent>
</Collapsible>
<Collapsible>
<CollapsibleTrigger className="p-3">
Accordian 2
</CollapsibleTrigger>
<CollapsibleContent className="p-3 pt-0">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</CollapsibleContent>
</Collapsible>
<Collapsible>
<CollapsibleTrigger className="p-3">
Accordian 3
</CollapsibleTrigger>
<CollapsibleContent className="p-3 pt-0">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</CollapsibleContent>
</Collapsible>
</Accordian>