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 @@