import { useState } from "react"; import "./Accordion.css"; interface AccordionItem { id: string; title: React.ReactNode; content: React.ReactNode; } interface AccordionProps { items: AccordionItem[]; allowMultiple?: boolean; defaultOpen?: string | string[]; onChange?: (openIds: string[]) => void; className?: string; } const Accordion = ({ items, allowMultiple = false, defaultOpen, onChange, className, }: AccordionProps) => { const initialOpen = defaultOpen ? new Set(Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen]) : new Set(); const [openItems, setOpenItems] = useState(initialOpen); const toggle = (id: string) => { const next = new Set(openItems); if (next.has(id)) { next.delete(id); } else { if (!allowMultiple) next.clear(); next.add(id); } setOpenItems(next); onChange?.([...next]); }; const wrapperClass = `accordion${className ? ` ${className}` : ""}`; return (
{items.map(({ id, title, content }) => { const isOpen = openItems.has(id); return (

{content}
); })}
); }; export default Accordion;