"use client"; import { Menu, X } from "lucide-react"; import { useTranslations } from "next-intl"; import { createContext, type ReactNode, useCallback, useContext, useEffect, useMemo, useState, } from "react"; const AdminMobileContext = createContext<{ close: () => void }>({ close: () => {}, }); export function useAdminMobile() { return useContext(AdminMobileContext); } export function AdminMobileWrapper({ sidebar, children, }: { sidebar: ReactNode; children: ReactNode; }) { const t = useTranslations("pages.admin.nav"); const [open, setOpen] = useState(false); const close = useCallback(() => setOpen(false), []); const mobile = useMemo(() => ({ close }), [close]); useEffect(() => { if (!open) return; const handler = (e: KeyboardEvent) => { if (e.key === "Escape") setOpen(false); }; document.addEventListener("keydown", handler); return () => document.removeEventListener("keydown", handler); }, [open]); return ( {/* Wider than public max-w-7xl (80rem), capped so it never goes full-bleed. */}
{/* Mobile header */}
{t("housekeeping")}
{/* Backdrop */} {open && (
); }