From bb4d8e41bdc240ba37e77825babebb1be7218688 Mon Sep 17 00:00:00 2001 From: Ronni Skansing Date: Thu, 27 Nov 2025 01:31:45 +0100 Subject: [PATCH] adjust position of unpin depending on scrollbar is visible Signed-off-by: Ronni Skansing --- .../lib/components/header/DesktopMenu.svelte | 94 ++++++++++++------- 1 file changed, 61 insertions(+), 33 deletions(-) diff --git a/frontend/src/lib/components/header/DesktopMenu.svelte b/frontend/src/lib/components/header/DesktopMenu.svelte index d5a85c5..51694d6 100644 --- a/frontend/src/lib/components/header/DesktopMenu.svelte +++ b/frontend/src/lib/components/header/DesktopMenu.svelte @@ -18,6 +18,8 @@ $: isExpanded = isPinned ? true : isExpanded; let menuElement; + let menuItemsElement; + let hasScrollbar = false; let instantCollapse = false; let context = { current: '', @@ -29,6 +31,17 @@ import ConditionalDisplay from '../ConditionalDisplay.svelte'; const dispatch = createEventDispatcher(); + // check if scrollbar is present + const checkScrollbar = () => { + if (menuItemsElement) { + hasScrollbar = menuItemsElement.scrollHeight > menuItemsElement.clientHeight; + } + }; + + $: if (isPinned && menuItemsElement) { + checkScrollbar(); + } + onMount(() => { const unsub = appState.subscribe((s) => { context = { @@ -44,10 +57,22 @@ } }; + // check scrollbar on resize + const resizeObserver = new ResizeObserver(() => { + if (isPinned) { + checkScrollbar(); + } + }); + + if (menuItemsElement) { + resizeObserver.observe(menuItemsElement); + } + document.addEventListener('click', handleClickOutside); return () => { unsub(); + resizeObserver.disconnect(); document.removeEventListener('click', handleClickOutside); }; }); @@ -166,19 +191,17 @@