"use client"; import { ChevronDownIcon, ChevronRightIcon } from "lucide-react"; import { ReactNode, useEffect, useState } from "react"; import { v4 } from "uuid"; type PageSectionProps = { children: ReactNode; title?: string; options?: ReactNode[]; open?: boolean; small?: boolean; onToggle?: (isOpen: boolean) => void; }; export function PageSection({ children, title, options, open, small, onToggle }: PageSectionProps) { const [isOpen, setIsOpen] = useState(open ?? true); const [shouldRender, setShouldRender] = useState(open ?? true); useEffect(() => { if (onToggle) { onToggle(isOpen); } }, [isOpen]); const toggleOpen = () => setIsOpen(!isOpen); useEffect(() => { if (isOpen) { setShouldRender(true); } else { const timer = setTimeout(() => setShouldRender(false), 300); return () => clearTimeout(timer); } }, [isOpen]); return (
{title && (
{isOpen ? ( ) : ( )}

{title}

{options &&
{options}
}
)}
{shouldRender && children}
); }