From d9179334dee9cf3d01868342eb0efc599cb3808f Mon Sep 17 00:00:00 2001 From: Henri Date: Thu, 12 Feb 2026 02:12:07 +0200 Subject: [PATCH] mobile navbar fix --- src/layout/Navbar.svelte | 167 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 166 insertions(+), 1 deletion(-) diff --git a/src/layout/Navbar.svelte b/src/layout/Navbar.svelte index 78481dc..62b354e 100644 --- a/src/layout/Navbar.svelte +++ b/src/layout/Navbar.svelte @@ -6,6 +6,7 @@ Section, } from "$components"; import { navigate, getPath, currentLang, text, switchLang } from "$lib"; + import { onDestroy } from "svelte"; // Icon imports (Lucide) import Coffee from "lucide-svelte/icons/coffee"; @@ -16,11 +17,54 @@ import Bot from "lucide-svelte/icons/bot"; import HandHeart from "lucide-svelte/icons/hand-heart"; import Trophy from "lucide-svelte/icons/trophy"; + import Menu from "lucide-svelte/icons/menu"; + import X from "lucide-svelte/icons/x"; + + let mobileMenuOpen = false; + + // Reactively control body scroll + $: if (typeof document !== 'undefined') { + if (mobileMenuOpen) { + document.body.style.overflow = 'hidden'; + document.body.style.position = 'fixed'; + document.body.style.width = '100%'; + document.documentElement.style.overflow = 'hidden'; + } else { + document.body.style.overflow = ''; + document.body.style.position = ''; + document.body.style.width = ''; + document.documentElement.style.overflow = ''; + } + } + + // Cleanup on component destroy + onDestroy(() => { + if (typeof document !== 'undefined') { + document.body.style.overflow = ''; + document.body.style.position = ''; + document.body.style.width = ''; + document.documentElement.style.overflow = ''; + } + }); + + function toggleMobileMenu() { + mobileMenuOpen = !mobileMenuOpen; + } + + function closeMobileMenu() { + mobileMenuOpen = false; + } + + function handleNavigation(path, options = {}) { + navigate(path, options); + closeMobileMenu(); + }
-
+ + +{#if mobileMenuOpen} +
+ +
+ +
+ + + +
+{/if}