import { AnimatePresence, motion } from "framer-motion"; import React, { useCallback, useState } from "react"; import { ToggleArrowIcon } from "~/assets/icons/ToggleArrowIcon"; type Props = { title: string; initialCollapsed?: boolean; onCollapseToggle?: (isCollapsed: boolean) => void; children: React.ReactNode; /** When true, hides the section header and shows only children */ isSideMenuCollapsed?: boolean; itemSpacingClassName?: string; /** Optional action element (e.g., + button) to render on the right side of the header */ headerAction?: React.ReactNode; }; /** A collapsible section for the side menu * The collapsed state is passed in as a prop, and there's a callback when it's toggled so we can save the state. */ export function SideMenuSection({ title, initialCollapsed = false, onCollapseToggle, children, isSideMenuCollapsed = false, itemSpacingClassName = "space-y-px", headerAction, }: Props) { const [isCollapsed, setIsCollapsed] = useState(initialCollapsed); const handleToggle = useCallback(() => { const newIsCollapsed = !isCollapsed; setIsCollapsed(newIsCollapsed); onCollapseToggle?.(newIsCollapsed); }, [isCollapsed, onCollapseToggle]); return (