From 9baa78b03577059d284d7e7ea4fc015956caaf97 Mon Sep 17 00:00:00 2001 From: DaPrince2106 Date: Fri, 15 May 2026 22:06:19 +0100 Subject: [PATCH] feat(tui): add visible white scrollbar to session chat --- .../src/cli/cmd/tui/routes/session/index.tsx | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 376fed0d7dd7..1486e4b851ff 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -22,7 +22,7 @@ import { useEvent } from "@tui/context/event" import { SplitBorder } from "@tui/component/border" import { Spinner } from "@tui/component/spinner" import { selectedForeground, useTheme } from "@tui/context/theme" -import { BoxRenderable, ScrollBoxRenderable, addDefaultParsers, TextAttributes, RGBA } from "@opentui/core" +import { BoxRenderable, ScrollBoxRenderable, addDefaultParsers, TextAttributes, RGBA, MacOSScrollAccel } from "@opentui/core" import { Prompt, type PromptRef } from "@tui/component/prompt" import type { AssistantMessage, @@ -222,7 +222,7 @@ export function Session() { const [timestamps, setTimestamps] = kv.signal<"hide" | "show">("timestamps", "hide") const [showDetails, setShowDetails] = kv.signal("tool_details_visibility", true) const [showAssistantMetadata, _setShowAssistantMetadata] = kv.signal("assistant_metadata_visibility", true) - const [showScrollbar, setShowScrollbar] = kv.signal("scrollbar_visible", false) + const [showScrollbar, setShowScrollbar] = kv.signal("scrollbar_visible", true) const [diffWrapMode] = kv.signal<"word" | "none">("diff_wrap_mode", "word") const [_animationsEnabled, _setAnimationsEnabled] = kv.signal("animations_enabled", true) const [showGenericToolOutput, setShowGenericToolOutput] = kv.signal("generic_tool_output_visibility", false) @@ -238,7 +238,7 @@ export function Session() { const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4) const providers = createMemo(() => Model.index(sync.data.provider)) - const scrollAcceleration = createMemo(() => getScrollAcceleration(tuiConfig)) + const scrollAcceleration = createMemo(() => new MacOSScrollAccel()) const toast = useToast() const sdk = useSDK() const editor = useEditorContext() @@ -1120,7 +1120,14 @@ export function Session() { (scroll = r)} + ref={(r) => { + scroll = r + if (r) { + const slider = r.verticalScrollBar.slider + const orig = slider.getVirtualThumbSize.bind(slider) + slider.getVirtualThumbSize = () => orig() * 2 + } + }} viewportOptions={{ paddingRight: showScrollbar() ? 1 : 0, }} @@ -1129,7 +1136,7 @@ export function Session() { visible: showScrollbar(), trackOptions: { backgroundColor: theme.backgroundElement, - foregroundColor: theme.border, + foregroundColor: theme.text, }, }} stickyScroll={true}