diff --git a/src/routes/lessons/subject/[subject]/module/[module]/+layout.svelte b/src/routes/lessons/subject/[subject]/module/[module]/+layout.svelte index af69045..27a199e 100644 --- a/src/routes/lessons/subject/[subject]/module/[module]/+layout.svelte +++ b/src/routes/lessons/subject/[subject]/module/[module]/+layout.svelte @@ -12,30 +12,38 @@ let modules = $derived(data?.allModules || []); // Track if module panel is open - let isModulesPanelOpen = $state(window.innerWidth >= 768); - + let isModulesPanelOpen = $state(false); + // On mobile, the sidebar is fixed position and overlays the content - let isMobile = $state(window.innerWidth < 768); - - // Update mobile status on resize - function handleResize() { - const newIsMobile = window.innerWidth < 768; - if (newIsMobile !== isMobile) { - isMobile = newIsMobile; - } - - // Automatically close sidebar on mobile when resizing down - if (isMobile && isModulesPanelOpen && window.innerWidth < 480) { - isModulesPanelOpen = false; - } - - // Automatically open sidebar on desktop - if (!isMobile && !isModulesPanelOpen) { - isModulesPanelOpen = true; + let isMobile = $state(false); + let windowWidth = $state(0); + + // Use a derived value instead of an event listener + $effect(() => { + if (windowWidth > 0) { + // Only run this when windowWidth has been set (client-side) + isMobile = windowWidth < 768; + + // Auto close on very small screens + if (isMobile && isModulesPanelOpen && windowWidth < 480) { + isModulesPanelOpen = false; + } + + // Auto open on desktop + if (!isMobile && !isModulesPanelOpen) { + isModulesPanelOpen = true; + } } - } - + }); + onMount(() => { + windowWidth = window.innerWidth; + isModulesPanelOpen = window.innerWidth >= 768; + + const handleResize = () => { + windowWidth = window.innerWidth; + }; + window.addEventListener('resize', handleResize); return () => { window.removeEventListener('resize', handleResize); @@ -48,18 +56,17 @@ } -
Modify the code below and see the result in real time!