@@ -268,16 +268,24 @@ func (m *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
268 switch m.state {
268 switch m.state {
269 case uiChat:
269 case uiChat:
270 if msg.Y <= 0 {
270 if msg.Y <= 0 {
271− m.chat.ScrollBy(-1)
271+ if cmd := m.chat.ScrollBy(-1); cmd != nil {
272+ cmds = append(cmds, cmd)
272 if !m.chat.SelectedItemInView() {
274 if !m.chat.SelectedItemInView() {
273 m.chat.SelectPrev()
275 m.chat.SelectPrev()
274− m.chat.ScrollToSelected()
276+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
277+ cmds = append(cmds, cmd)
276 } else if msg.Y >= m.chat.Height()-1 {
280 } else if msg.Y >= m.chat.Height()-1 {
277− m.chat.ScrollBy(1)
281+ if cmd := m.chat.ScrollBy(1); cmd != nil {
282+ cmds = append(cmds, cmd)
278 if !m.chat.SelectedItemInView() {
284 if !m.chat.SelectedItemInView() {
279 m.chat.SelectNext()
285 m.chat.SelectNext()
280− m.chat.ScrollToSelected()
286+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
287+ cmds = append(cmds, cmd)
@@ -302,16 +310,24 @@ func (m *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
302 case uiChat:
310 case uiChat:
303 switch msg.Button {
311 switch msg.Button {
304 case tea.MouseWheelUp:
312 case tea.MouseWheelUp:
305− m.chat.ScrollBy(-5)
313+ if cmd := m.chat.ScrollBy(-5); cmd != nil {
314+ cmds = append(cmds, cmd)
306 if !m.chat.SelectedItemInView() {
316 if !m.chat.SelectedItemInView() {
307 m.chat.SelectPrev()
317 m.chat.SelectPrev()
308− m.chat.ScrollToSelected()
318+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
319+ cmds = append(cmds, cmd)
310 case tea.MouseWheelDown:
322 case tea.MouseWheelDown:
311− m.chat.ScrollBy(5)
323+ if cmd := m.chat.ScrollBy(5); cmd != nil {
324+ cmds = append(cmds, cmd)
312 if !m.chat.SelectedItemInView() {
326 if !m.chat.SelectedItemInView() {
313 m.chat.SelectNext()
327 m.chat.SelectNext()
314− m.chat.ScrollToSelected()
328+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
329+ cmds = append(cmds, cmd)
@@ -379,7 +395,9 @@ func (m *UI) setSessionMessages(msgs []message.Message) tea.Cmd {
381 m.chat.SetMessages(items...)
397 m.chat.SetMessages(items...)
382− m.chat.ScrollToBottom()
398+ if cmd := m.chat.ScrollToBottom(); cmd != nil {
399+ cmds = append(cmds, cmd)
383 m.chat.SelectLast()
401 m.chat.SelectLast()
384 return tea.Batch(cmds...)
402 return tea.Batch(cmds...)
@@ -396,7 +414,9 @@ func (m *UI) appendSessionMessage(msg message.Message) tea.Cmd {
398 m.chat.AppendMessages(items...)
416 m.chat.AppendMessages(items...)
399− m.chat.ScrollToBottom()
417+ if cmd := m.chat.ScrollToBottom(); cmd != nil {
418+ cmds = append(cmds, cmd)
400 return tea.Batch(cmds...)
420 return tea.Batch(cmds...)
@@ -558,40 +578,64 @@ func (m *UI) handleKeyPressMsg(msg tea.KeyPressMsg) tea.Cmd {
558 cmds = append(cmds, m.textarea.Focus())
578 cmds = append(cmds, m.textarea.Focus())
559 m.chat.Blur()
579 m.chat.Blur()
560 case key.Matches(msg, m.keyMap.Chat.Up):
580 case key.Matches(msg, m.keyMap.Chat.Up):
561− m.chat.ScrollBy(-1)
581+ if cmd := m.chat.ScrollBy(-1); cmd != nil {
582+ cmds = append(cmds, cmd)
562 if !m.chat.SelectedItemInView() {
584 if !m.chat.SelectedItemInView() {
563 m.chat.SelectPrev()
585 m.chat.SelectPrev()
564− m.chat.ScrollToSelected()
586+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
587+ cmds = append(cmds, cmd)
566 case key.Matches(msg, m.keyMap.Chat.Down):
590 case key.Matches(msg, m.keyMap.Chat.Down):
567− m.chat.ScrollBy(1)
591+ if cmd := m.chat.ScrollBy(1); cmd != nil {
592+ cmds = append(cmds, cmd)
568 if !m.chat.SelectedItemInView() {
594 if !m.chat.SelectedItemInView() {
569 m.chat.SelectNext()
595 m.chat.SelectNext()
570− m.chat.ScrollToSelected()
596+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
597+ cmds = append(cmds, cmd)
572 case key.Matches(msg, m.keyMap.Chat.UpOneItem):
600 case key.Matches(msg, m.keyMap.Chat.UpOneItem):
573 m.chat.SelectPrev()
601 m.chat.SelectPrev()
574− m.chat.ScrollToSelected()
602+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
603+ cmds = append(cmds, cmd)
575 case key.Matches(msg, m.keyMap.Chat.DownOneItem):
605 case key.Matches(msg, m.keyMap.Chat.DownOneItem):
576 m.chat.SelectNext()
606 m.chat.SelectNext()
577− m.chat.ScrollToSelected()
607+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
608+ cmds = append(cmds, cmd)
578 case key.Matches(msg, m.keyMap.Chat.HalfPageUp):
610 case key.Matches(msg, m.keyMap.Chat.HalfPageUp):
579− m.chat.ScrollBy(-m.chat.Height() / 2)
611+ if cmd := m.chat.ScrollBy(-m.chat.Height() / 2); cmd != nil {
612+ cmds = append(cmds, cmd)
580 m.chat.SelectFirstInView()
614 m.chat.SelectFirstInView()
581 case key.Matches(msg, m.keyMap.Chat.HalfPageDown):
615 case key.Matches(msg, m.keyMap.Chat.HalfPageDown):
582− m.chat.ScrollBy(m.chat.Height() / 2)
616+ if cmd := m.chat.ScrollBy(m.chat.Height() / 2); cmd != nil {
617+ cmds = append(cmds, cmd)
583 m.chat.SelectLastInView()
619 m.chat.SelectLastInView()
584 case key.Matches(msg, m.keyMap.Chat.PageUp):
620 case key.Matches(msg, m.keyMap.Chat.PageUp):
585− m.chat.ScrollBy(-m.chat.Height())
621+ if cmd := m.chat.ScrollBy(-m.chat.Height()); cmd != nil {
622+ cmds = append(cmds, cmd)
586 m.chat.SelectFirstInView()
624 m.chat.SelectFirstInView()
587 case key.Matches(msg, m.keyMap.Chat.PageDown):
625 case key.Matches(msg, m.keyMap.Chat.PageDown):
588− m.chat.ScrollBy(m.chat.Height())
626+ if cmd := m.chat.ScrollBy(m.chat.Height()); cmd != nil {
627+ cmds = append(cmds, cmd)
589 m.chat.SelectLastInView()
629 m.chat.SelectLastInView()
590 case key.Matches(msg, m.keyMap.Chat.Home):
630 case key.Matches(msg, m.keyMap.Chat.Home):
591− m.chat.ScrollToTop()
631+ if cmd := m.chat.ScrollToTop(); cmd != nil {
632+ cmds = append(cmds, cmd)
592 m.chat.SelectFirst()
634 m.chat.SelectFirst()
593 case key.Matches(msg, m.keyMap.Chat.End):
635 case key.Matches(msg, m.keyMap.Chat.End):
594− m.chat.ScrollToBottom()
636+ if cmd := m.chat.ScrollToBottom(); cmd != nil {
637+ cmds = append(cmds, cmd)
595 m.chat.SelectLast()
639 m.chat.SelectLast()
597 handleGlobalKeys(msg)
641 handleGlobalKeys(msg)