From 2020645f18063a9b93bcf612b314c6916a3beba6 Mon Sep 17 00:00:00 2001
From: Xubin Ren <52506698+Re-bin@users.noreply.github.com>
Date: Tue, 25 Aug 2026 14:48:59 +0800
Subject: [PATCH] fix(webui): soften composer scroll boundary
---
.../src/components/thread/ThreadViewport.tsx | 7 +++--
webui/src/globals.css | 28 +++++++++++++++++++
webui/src/tests/thread-viewport.test.tsx | 5 +++-
3 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/webui/src/components/thread/ThreadViewport.tsx b/webui/src/components/thread/ThreadViewport.tsx
index 90a85842e..0df7bf57a 100644
--- a/webui/src/components/thread/ThreadViewport.tsx
+++ b/webui/src/components/thread/ThreadViewport.tsx
@@ -744,8 +744,8 @@ export const ThreadViewport = forwardRef
+
) : (
@@ -808,7 +809,7 @@ export const ThreadViewport = forwardRef
{
const messageRegion = screen.getByTestId("thread-message-region");
expect(messageRegion).toHaveClass("justify-start");
expect(messageRegion).not.toHaveClass("justify-end");
- expect(messageRegion).toHaveClass("pb-4");
+ expect(messageRegion).toHaveClass("thread-message-viewport");
+ expect(messageRegion).toHaveClass("pb-0");
expect(messageRegion.className).not.toContain("5rem");
});
@@ -316,7 +317,9 @@ describe("ThreadViewport", () => {
expect(scroller).not.toContainElement(composerDock);
expect(scroller.parentElement).toContainElement(composerDock);
expect(composerDock).toHaveClass("relative");
+ expect(composerDock).toHaveClass("thread-composer-dock");
expect(composerDock).not.toHaveClass("sticky");
+ expect(scroller.querySelector(".thread-message-end-gap")).toBeInTheDocument();
expect(scroller.lastElementChild).toHaveClass("h-px", "shrink-0");
});