import { ChevronUp, X } from "lucide-react"; import { useEffect, useState, type ReactNode } from "react"; import { useIsMobile } from "@/lib/useMediaQuery"; /** * DESIGN.md responsive breakpoints: below 768px metadata panels collapse into * a sliding bottom drawer. Render the panel content inline on wider screens * and pass it here instead on mobile. */ export function BottomSheet({ title, children, }: { title: string; children: ReactNode; }) { const [open, setOpen] = useState(false); useEffect(() => { if (!open) return; const previous = document.body.style.overflow; document.body.style.overflow = "hidden"; function handleKeyDown(event: KeyboardEvent) { if (event.key === "Escape") setOpen(false); } window.addEventListener("keydown", handleKeyDown); return () => { document.body.style.overflow = previous; window.removeEventListener("keydown", handleKeyDown); }; }, [open]); return ( <> {open ? (
setOpen(false)} aria-hidden="true" />
{title}
{children}
) : null} ); } /** * Desktop side panel, mobile bottom sheet. Use in place of an