← back to Letsbegin
components/CollapsibleSection.tsx
40 lines
'use client'
interface Props {
title: string
icon: string
isExpanded: boolean
onToggle: () => void
children: React.ReactNode
}
export default function CollapsibleSection({ title, icon, isExpanded, onToggle, children }: Props) {
return (
<div className="card overflow-hidden">
<div
className="flex items-center justify-between p-4 cursor-pointer hover:bg-[var(--surface-alt)] transition-colors"
onClick={onToggle}
>
<div className="flex items-center gap-3">
<span className="text-xl">{icon}</span>
<h3 className="font-medium">{title}</h3>
</div>
<svg
className={`w-5 h-5 text-[var(--foreground-secondary)] transition-transform ${isExpanded ? 'rotate-180' : ''}`}
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</div>
{isExpanded && (
<div className="px-4 pb-4 pt-2 border-t border-[var(--border)]">
{children}
</div>
)}
</div>
)
}