"use client"; import { ReactNode, useEffect, useState } from "react"; import { useDefaultLayout } from "react-resizable-panels"; import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "../../shadcnui"; import { cn, useIsMobile } from "../../utils"; type PageContentContainerProps = { header?: ReactNode; details?: ReactNode; footer?: ReactNode; content?: ReactNode; fullBleed?: boolean; }; export function PageContentContainer({ header, details, footer, content, fullBleed }: PageContentContainerProps) { const [mounted, setMounted] = useState(false); const isMobile = useIsMobile(); useEffect(() => { setMounted(true); }, []); const isReady = mounted; // Create layout ID based on device type for separate persistence const layoutId = `page-content-container-${isMobile ? "mobile" : "desktop"}`; // v4 useDefaultLayout hook for localStorage persistence // Returns saved layout and callback to save changes const { defaultLayout, onLayoutChanged } = useDefaultLayout({ id: layoutId, panelIds: ["left-panel", "right-panel"], storage: typeof window !== "undefined" ? localStorage : undefined, }); if (!isReady) { return
; } // v4 CRITICAL: Use STRING percentages for Panel defaultSize, not numbers! // Numbers are interpreted as PIXELS in v4 const leftPanelDefaultSize = isMobile ? "10%" : "32%"; const leftPanelMinSize = isMobile ? "10%" : "20%"; const leftPanelMaxSize = isMobile ? "90%" : "40%"; const rightPanelDefaultSize = isMobile ? "90%" : "68%"; return (