fix(ui): suppress double scrollbar in log + timeline panels
All checks were successful
CI / cleanup-branch (push) Has been skipped
CI / build (push) Successful in 1m27s
CI / docker (push) Successful in 1m17s
CI / deploy-feature (push) Has been skipped
CI / deploy (push) Successful in 40s

LogViewer and EventFeed each apply overflow-y:auto to their root
container, which produced a nested scrollbar inside the
InfiniteScrollArea that also scrolls. A flatScroll override class
flattens the DS component so the outer InfiniteScrollArea owns the
single scrollbar — matching the IntersectionObserver sentinels that
drive infinite-load.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-17 14:38:15 +02:00
parent 89c9b53edd
commit 806a817c07
3 changed files with 14 additions and 4 deletions

View File

@@ -966,7 +966,7 @@ export default function AgentHealth() {
maxHeight={360}
>
{filteredLogs.length > 0 ? (
<LogViewer entries={filteredLogs} />
<LogViewer entries={filteredLogs} className={logStyles.flatScroll} />
) : (
<div className={logStyles.logEmpty}>
{logSearch || logLevels.size > 0 || logSources.size > 0
@@ -1004,7 +1004,7 @@ export default function AgentHealth() {
maxHeight={360}
>
{feedEvents.length > 0 ? (
<EventFeed events={feedEvents} />
<EventFeed events={feedEvents} className={logStyles.flatScroll} />
) : (
<div className={logStyles.logEmpty}>
{eventStream.isLoading ? 'Loading events\u2026' : 'No events in the selected time range.'}

View File

@@ -472,7 +472,7 @@ export default function AgentInstance() {
maxHeight={360}
>
{filteredLogs.length > 0 ? (
<LogViewer entries={filteredLogs} />
<LogViewer entries={filteredLogs} className={logStyles.flatScroll} />
) : (
<div className={logStyles.logEmpty}>
{logSearch || logLevels.size > 0 || logSources.size > 0
@@ -510,7 +510,7 @@ export default function AgentInstance() {
maxHeight={360}
>
{feedEvents.length > 0 ? (
<EventFeed events={feedEvents} />
<EventFeed events={feedEvents} className={logStyles.flatScroll} />
) : (
<div className={logStyles.logEmpty}>
{eventStream.isLoading ? 'Loading events…' : 'No events in the selected time range.'}

View File

@@ -9,6 +9,16 @@
max-height: 420px;
}
/*
* Flatten the internal scroll of @cameleer/design-system's LogViewer and
* EventFeed so their containing InfiniteScrollArea owns the scroll — one
* scrollbar per panel, IntersectionObserver sentinels stay meaningful.
*/
.flatScroll {
overflow: visible !important;
max-height: none !important;
}
.logHeader {
display: flex;
align-items: center;