import React, { useState } from 'react'; import { clsx } from 'clsx'; import { ChevronDown } from 'lucide-react'; export interface AccordionItem { id: string; title: string; content: React.ReactNode; defaultOpen?: boolean; disabled?: boolean; } export interface AccordionProps { items: AccordionItem[]; allowMultiple?: boolean; className?: string; itemClassName?: string; } /** * Accordion/Collapsible component */ export const Accordion = ({ items, allowMultiple = false, className, itemClassName, }: AccordionProps) => { const [openItems, setOpenItems] = useState>( new Set(items.filter((item) => item.defaultOpen).map((item) => item.id)) ); const toggleItem = (id: string) => { setOpenItems((prev) => { const newSet = new Set(prev); if (newSet.has(id)) { newSet.delete(id); } else { if (!allowMultiple) { newSet.clear(); } newSet.add(id); } return newSet; }); }; return (
{items.map((item) => { const isOpen = openItems.has(item.id); return (
{item.content}
); })}
); };