import { type ReactNode, useEffect, useState } from "react"; import { Box, Paper, MantineProvider } from "@mantine/core"; import FreightDashboardHeader from "./FreightDashboardHeader"; import FreightSidebar from "./FreightSidebar"; import { getPageMeta } from "./route-meta"; import type { SidebarSection } from "./types"; import { freightMantineTheme } from "@/theme/freight-brand"; type Theme = "light" | "dark"; const THEME_STORAGE_KEY = "edr-theme"; function getInitialTheme(): Theme { if (typeof window === "undefined") return "light"; const stored = window.localStorage.getItem(THEME_STORAGE_KEY); if (stored === "dark" || stored === "light") return stored; return window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light"; } export interface FreightDashboardLayoutProps { sidebarSections: SidebarSection[]; activeHref?: string; onNavigate?: (href: string) => void; headerRight?: ReactNode; enableThemeToggle?: boolean; userName?: string; userEmail?: string; userInitials?: string; onLogout?: () => void; children: ReactNode; } const FreightDashboardLayout = ({ sidebarSections, activeHref = "", onNavigate, headerRight, enableThemeToggle = false, userName, userEmail, userInitials, onLogout, children, }: FreightDashboardLayoutProps) => { const pageMeta = getPageMeta(activeHref); const [theme, setTheme] = useState(() => enableThemeToggle ? getInitialTheme() : "light", ); useEffect(() => { if (!enableThemeToggle) return; const root = document.documentElement; if (theme === "dark") { root.classList.add("dark"); } else { root.classList.remove("dark"); } window.localStorage.setItem(THEME_STORAGE_KEY, theme); }, [theme, enableThemeToggle]); const toggleTheme = () => setTheme((current) => (current === "dark" ? "light" : "dark")); return ( <> {children} ); }; export default FreightDashboardLayout;