summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/tui/internal/components/chat/messages.go12
1 files changed, 11 insertions, 1 deletions
diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go
index 46036b75f..22cb97fb5 100644
--- a/packages/tui/internal/components/chat/messages.go
+++ b/packages/tui/internal/components/chat/messages.go
@@ -210,7 +210,18 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.clipboard = msg.clipboard
m.loading = false
m.tail = m.viewport.AtBottom()
+
+ // Preserve scroll across reflow
+ // if the user was at bottom, keep following; otherwise restore the previous offset.
+ wasAtBottom := m.viewport.AtBottom()
+ prevYOffset := m.viewport.YOffset
m.viewport = msg.viewport
+ if wasAtBottom {
+ m.viewport.GotoBottom()
+ } else {
+ m.viewport.YOffset = prevYOffset
+ }
+
m.header = msg.header
if m.dirty {
cmds = append(cmds, m.renderView())
@@ -218,7 +229,6 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
m.tail = m.viewport.AtBottom()
-
viewport, cmd := m.viewport.Update(msg)
m.viewport = viewport
cmds = append(cmds, cmd)