| name | groww-accordion |
| description | Accordion component with collapsible sections. Use for FAQs, nested content, or expandable details sections. |
Groww Accordion Component
Import Patterns
import Accordion from '@groww-tech/ui-toolkit/dist/esm/components/atoms/Accordion';
import { Accordion } from '@groww-tech/ui-toolkit';
Key APIs
Props
interface AccordionProps {
isOpen: boolean;
children: React.ReactNode;
header: React.ReactNode;
onChange?: (isOpen: boolean) => void;
className?: string;
duration?: number;
}
AnimateHeight (Sub-component)
interface AnimateHeightProps {
height?: number | 'auto';
duration?: number;
easing?: string;
animateOpacity?: boolean;
id?: string;
className?: string;
}
Usage Examples
Basic Accordion
<Accordion
isOpen={isOpen}
onChange={(open) => setIsOpen(open)}
header={
<div className="accordion-header">
<span>What is Groww?</span>
<Icon name={isOpen ? 'chevron-up' : 'chevron-down'} />
</div>
}
>
<div className="accordion-content">
Groww is an investment platform...
</div>
</Accordion>
Multiple Accordions
{faqs.map((faq, index) => (
<Accordion
key={index}
isOpen={openIndex === index}
onChange={(isOpen) => setOpenIndex(isOpen ? index : -1)}
header={faq.question}
>
{faq.answer}
</Accordion>
))}
Anti-Patterns
- Don't nest accordions: Creates UX issues
- Don't forget header: Content needs click target
- Don't forget onChange: Always handle state changes
- Don't use for single section: Consider simple show/hide
- Don't forget animation: Improves user experience
Accessibility
- Keyboard navigation (Enter, Space to toggle)
- Focus indicators
- ARIA expanded attribute
- Proper heading hierarchy