import { useNavigation } from "@remix-run/react"; import { useEffect, useState } from "react"; import { motion } from "framer-motion"; import { Popover, PopoverContent, PopoverCustomTrigger } from "../primitives/Popover"; import { EllipsisHorizontalIcon } from "@heroicons/react/20/solid"; export function SideMenuHeader({ title, children, isCollapsed = false, collapsedTitle, }: { title: string; children?: React.ReactNode; isCollapsed?: boolean; /** When provided, this text stays visible when collapsed and the rest fades out */ collapsedTitle?: string; }) { const [isHeaderMenuOpen, setHeaderMenuOpen] = useState(false); const navigation = useNavigation(); useEffect(() => { setHeaderMenuOpen(false); }, [navigation.location?.pathname]); // If collapsedTitle is provided and title starts with it, split the title const hasCollapsedTitle = collapsedTitle && title.startsWith(collapsedTitle); const visiblePart = hasCollapsedTitle ? collapsedTitle : title; const fadingPart = hasCollapsedTitle ? title.slice(collapsedTitle.length) : ""; return (

{visiblePart} {fadingPart && ( {fadingPart} )}

{children !== undefined ? ( setHeaderMenuOpen(open)} open={isHeaderMenuOpen}>
{children}
) : null}
); }