Kairo-Jinkendo/frontend/src/components/CollapsibleSection.jsx

30 lines
838 B
React
Raw Normal View History

import { useState } from 'react'
export function CollapsibleSection({
title,
summary,
defaultOpen = false,
children,
className = '',
}) {
const [open, setOpen] = useState(defaultOpen)
return (
<section className={`collapsible-section card ${className}`.trim()}>
<button
type="button"
className="collapsible-section-trigger"
onClick={() => setOpen((v) => !v)}
aria-expanded={open}
>
<span className="collapsible-section-title">{title}</span>
{summary && <span className="collapsible-section-summary muted">{summary}</span>}
<span className="collapsible-section-chevron" aria-hidden="true">
{open ? '▾' : '▸'}
</span>
</button>
{open && <div className="collapsible-section-body">{children}</div>}
</section>
)
}