From b45102bde80d747a9f065e75c14a4229ea2b007a Mon Sep 17 00:00:00 2001 From: Benson Wong Date: Wed, 18 Feb 2026 19:47:37 -0800 Subject: [PATCH] ui: smart auto-scroll in LogPanel (#530) Pause auto-scroll when the user scrolls up to review logs, and resume when they scroll back to the bottom. - add `userScrolledUp` state variable - add `handleScroll` to detect scroll position with 40px threshold - guard the auto-scroll effect with `!userScrolledUp` closes #529 --- ui-svelte/src/components/LogPanel.svelte | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ui-svelte/src/components/LogPanel.svelte b/ui-svelte/src/components/LogPanel.svelte index 573950ff..815bd55f 100644 --- a/ui-svelte/src/components/LogPanel.svelte +++ b/ui-svelte/src/components/LogPanel.svelte @@ -65,10 +65,17 @@ }); let preElement: HTMLPreElement; + let userScrolledUp = $state(false); - // Auto scroll to bottom when logs change + function handleScroll() { + if (!preElement) return; + const { scrollTop, scrollHeight, clientHeight } = preElement; + userScrolledUp = scrollHeight - scrollTop - clientHeight > 40; + } + + // Auto scroll to bottom when logs change, unless user has scrolled up $effect(() => { - if (preElement && filteredLogs) { + if (preElement && filteredLogs && !userScrolledUp) { preElement.scrollTop = preElement.scrollHeight; } }); @@ -127,6 +134,6 @@ {/if}
-
{filteredLogs}
+
{filteredLogs}