diff --git a/frontend/src/lib/components/remote-browser/LiveSessionBadgeDropdown.svelte b/frontend/src/lib/components/remote-browser/LiveSessionBadgeDropdown.svelte index 9184206..8761a75 100644 --- a/frontend/src/lib/components/remote-browser/LiveSessionBadgeDropdown.svelte +++ b/frontend/src/lib/components/remote-browser/LiveSessionBadgeDropdown.svelte @@ -26,30 +26,32 @@ activeFormElement.set(dropdownId); const viewportHeight = window.innerHeight; + const viewportWidth = window.innerWidth; const buffer = 20; const minHeight = 64; const maxHeight = 400; + const gap = 8; - let clickViewportY, pageX, pageY; - - if (e.clientY !== undefined && e.pageX !== undefined) { - clickViewportY = e.clientY; - pageX = e.pageX; - pageY = e.pageY; + let x, y; + if (e.clientX !== undefined && e.clientY !== undefined) { + x = e.clientX; + y = e.clientY; } else { const rect = buttonRef.getBoundingClientRect(); - clickViewportY = rect.top; - pageX = rect.left + window.scrollX; - pageY = rect.top + window.scrollY; + x = rect.left + rect.width / 2; + y = rect.top; } - const spaceAbove = clickViewportY - buffer; - const spaceBelow = viewportHeight - clickViewportY - buffer; + const spaceAbove = y - buffer; + const spaceBelow = viewportHeight - y - buffer; const shouldShowAbove = spaceBelow < minHeight && spaceAbove > spaceBelow; const availableSpace = shouldShowAbove ? spaceAbove : spaceBelow; const optimalHeight = Math.min(Math.max(availableSpace, minHeight), maxHeight); - const gap = 8; - menuX = pageX - 256; + + const menuWidth = 256; + const spaceOnRight = viewportWidth - x - buffer; + menuX = spaceOnRight >= menuWidth ? x : x - menuWidth; + menuX = Math.max(buffer, Math.min(menuX, viewportWidth - menuWidth - buffer)); if (shouldShowAbove) { menuRef.style.visibility = 'hidden'; @@ -57,9 +59,9 @@ const actualMenuHeight = menuRef.scrollHeight; menuRef.style.display = ''; menuRef.style.visibility = ''; - menuY = pageY - actualMenuHeight - gap; + menuY = y - actualMenuHeight - gap; } else { - menuY = pageY + gap; + menuY = y + gap; } menuRef.style = `left: ${menuX}px; top: ${menuY}px; max-height: ${optimalHeight}px`; @@ -127,7 +129,7 @@