diff --git a/src/app/folder/layout.tsx b/src/app/folder/layout.tsx index 86c8e5c..96cc0b8 100644 --- a/src/app/folder/layout.tsx +++ b/src/app/folder/layout.tsx @@ -280,14 +280,22 @@ function MobileFolderWorkspaceShell({ }: { children: React.ReactNode }) { - const { isOpen: sidebarOpen, toggle: toggleSidebar } = useSidebarContext() - const { isOpen: auxOpen, toggle: toggleAux } = useAuxPanelContext() + const { + isOpen: sidebarOpen, + restored: sidebarRestored, + toggle: toggleSidebar, + } = useSidebarContext() + const { + isOpen: auxOpen, + restored: auxRestored, + toggle: toggleAux, + } = useAuxPanelContext() const { isOpen: terminalOpen, toggle: toggleTerminal } = useTerminalContext() return (
{/* Sidebar Sheet (left) */} - + {/* Aux panel Sheet (right) */} - + { const stored = loadPersistedPanelState(storageKey) + const isMobileViewport = window.innerWidth < 768 + const defaultOpen = isMobileViewport ? false : DEFAULT_IS_OPEN // Hydrate from localStorage after mount to keep SSR/CSR markup consistent. // eslint-disable-next-line react-hooks/set-state-in-effect - setIsOpen(stored?.isOpen ?? DEFAULT_IS_OPEN) + setIsOpen(isMobileViewport ? false : (stored?.isOpen ?? defaultOpen)) setWidthState(clampWidth(stored?.width ?? DEFAULT_WIDTH)) setRestored(true) }, [storageKey]) @@ -109,6 +112,7 @@ export function AuxPanelProvider({ const value = useMemo( () => ({ isOpen, + restored, width, minWidth: MIN_WIDTH, maxWidth: MAX_WIDTH, @@ -123,6 +127,7 @@ export function AuxPanelProvider({ }), [ isOpen, + restored, width, activeTab, toggle, diff --git a/src/contexts/sidebar-context.tsx b/src/contexts/sidebar-context.tsx index 2d76bfc..a75233b 100644 --- a/src/contexts/sidebar-context.tsx +++ b/src/contexts/sidebar-context.tsx @@ -21,6 +21,7 @@ const DEFAULT_IS_OPEN = true interface SidebarContextValue { isOpen: boolean + restored: boolean width: number minWidth: number maxWidth: number @@ -82,13 +83,14 @@ export function SidebarProvider({ children, folderId }: SidebarProviderProps) { const value = useMemo( () => ({ isOpen, + restored, width, minWidth: MIN_WIDTH, maxWidth: MAX_WIDTH, toggle, setWidth, }), - [isOpen, width, toggle, setWidth] + [isOpen, restored, width, toggle, setWidth] ) return (