diff options
| author | adamdottv <[email protected]> | 2025-04-28 08:46:09 -0500 |
|---|---|---|
| committer | adamdottv <[email protected]> | 2025-04-30 07:46:34 -0500 |
| commit | 61b605e724eb4cc50ab831534fcdd18e031d68eb (patch) | |
| tree | b15b074a8fed1931e179a8d3df08d05b753c7aa3 /internal/tui/components/chat/list.go | |
| parent | 61d9dc95111d2645a49816f6d9d6cc1014be1a22 (diff) | |
| download | opencode-61b605e724eb4cc50ab831534fcdd18e031d68eb.tar.gz opencode-61b605e724eb4cc50ab831534fcdd18e031d68eb.zip | |
feat: themes
Diffstat (limited to 'internal/tui/components/chat/list.go')
| -rw-r--r-- | internal/tui/components/chat/list.go | 76 |
1 files changed, 47 insertions, 29 deletions
diff --git a/internal/tui/components/chat/list.go b/internal/tui/components/chat/list.go index fa7332d5f..12f1681fa 100644 --- a/internal/tui/components/chat/list.go +++ b/internal/tui/components/chat/list.go @@ -14,7 +14,9 @@ import ( "github.com/opencode-ai/opencode/internal/message" "github.com/opencode-ai/opencode/internal/pubsub" "github.com/opencode-ai/opencode/internal/session" + "github.com/opencode-ai/opencode/internal/tui/components/dialog" "github.com/opencode-ai/opencode/internal/tui/styles" + "github.com/opencode-ai/opencode/internal/tui/theme" "github.com/opencode-ai/opencode/internal/tui/util" ) @@ -69,7 +71,9 @@ func (m *messagesCmp) Init() tea.Cmd { func (m *messagesCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) { var cmds []tea.Cmd switch msg := msg.(type) { - + case dialog.ThemeChangedMsg: + m.rerender() + return m, nil case SessionSelectedMsg: if msg.ID != m.session.ID { cmd := m.SetSession(msg) @@ -174,6 +178,7 @@ func formatTimeDifference(unixTime1, unixTime2 int64) string { func (m *messagesCmp) renderView() { m.uiMessages = make([]uiMessage, 0) pos := 0 + baseStyle := styles.BaseStyle() if m.width == 0 { return @@ -225,15 +230,13 @@ func (m *messagesCmp) renderView() { messages := make([]string, 0) for _, v := range m.uiMessages { messages = append(messages, v.content, - styles.BaseStyle. + baseStyle. Width(m.width). - Render( - "", - ), + Render(""), ) } m.viewport.SetContent( - styles.BaseStyle. + baseStyle. Width(m.width). Render( lipgloss.JoinVertical( @@ -245,8 +248,10 @@ func (m *messagesCmp) renderView() { } func (m *messagesCmp) View() string { + baseStyle := styles.BaseStyle() + if m.rendering { - return styles.BaseStyle. + return baseStyle. Width(m.width). Render( lipgloss.JoinVertical( @@ -258,14 +263,14 @@ func (m *messagesCmp) View() string { ) } if len(m.messages) == 0 { - content := styles.BaseStyle. + content := baseStyle. Width(m.width). Height(m.height - 1). Render( m.initialScreen(), ) - return styles.BaseStyle. + return baseStyle. Width(m.width). Render( lipgloss.JoinVertical( @@ -277,7 +282,7 @@ func (m *messagesCmp) View() string { ) } - return styles.BaseStyle. + return baseStyle. Width(m.width). Render( lipgloss.JoinVertical( @@ -328,6 +333,9 @@ func hasUnfinishedToolCalls(messages []message.Message) bool { func (m *messagesCmp) working() string { text := "" if m.IsAgentWorking() && len(m.messages) > 0 { + t := theme.CurrentTheme() + baseStyle := styles.BaseStyle() + task := "Thinking..." lastMessage := m.messages[len(m.messages)-1] if hasToolsWithoutResponse(m.messages) { @@ -338,42 +346,49 @@ func (m *messagesCmp) working() string { task = "Generating..." } if task != "" { - text += styles.BaseStyle.Width(m.width).Foreground(styles.PrimaryColor).Bold(true).Render( - fmt.Sprintf("%s %s ", m.spinner.View(), task), - ) + text += baseStyle. + Width(m.width). + Foreground(t.Primary()). + Bold(true). + Render(fmt.Sprintf("%s %s ", m.spinner.View(), task)) } } return text } func (m *messagesCmp) help() string { + t := theme.CurrentTheme() + baseStyle := styles.BaseStyle() + text := "" if m.app.CoderAgent.IsBusy() { text += lipgloss.JoinHorizontal( lipgloss.Left, - styles.BaseStyle.Foreground(styles.ForgroundDim).Bold(true).Render("press "), - styles.BaseStyle.Foreground(styles.Forground).Bold(true).Render("esc"), - styles.BaseStyle.Foreground(styles.ForgroundDim).Bold(true).Render(" to exit cancel"), + baseStyle.Foreground(t.TextMuted()).Bold(true).Render("press "), + baseStyle.Foreground(t.Text()).Bold(true).Render("esc"), + baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to exit cancel"), ) } else { text += lipgloss.JoinHorizontal( lipgloss.Left, - styles.BaseStyle.Foreground(styles.ForgroundDim).Bold(true).Render("press "), - styles.BaseStyle.Foreground(styles.Forground).Bold(true).Render("enter"), - styles.BaseStyle.Foreground(styles.ForgroundDim).Bold(true).Render(" to send the message,"), - styles.BaseStyle.Foreground(styles.ForgroundDim).Bold(true).Render(" write"), - styles.BaseStyle.Foreground(styles.Forground).Bold(true).Render(" \\"), - styles.BaseStyle.Foreground(styles.ForgroundDim).Bold(true).Render(" and enter to add a new line"), + baseStyle.Foreground(t.TextMuted()).Bold(true).Render("press "), + baseStyle.Foreground(t.Text()).Bold(true).Render("enter"), + baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to send the message,"), + baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" write"), + baseStyle.Foreground(t.Text()).Bold(true).Render(" \\"), + baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" and enter to add a new line"), ) } - return styles.BaseStyle. + return baseStyle. Width(m.width). Render(text) } func (m *messagesCmp) initialScreen() string { - return styles.BaseStyle.Width(m.width).Render( + baseStyle := styles.BaseStyle() + + return baseStyle.Width(m.width).Render( lipgloss.JoinVertical( lipgloss.Top, header(m.width), @@ -383,6 +398,13 @@ func (m *messagesCmp) initialScreen() string { ) } +func (m *messagesCmp) rerender() { + for _, msg := range m.messages { + delete(m.cachedContent, msg.ID) + } + m.renderView() +} + func (m *messagesCmp) SetSize(width, height int) tea.Cmd { if m.width == width && m.height == height { return nil @@ -391,11 +413,7 @@ func (m *messagesCmp) SetSize(width, height int) tea.Cmd { m.height = height m.viewport.Width = width m.viewport.Height = height - 2 - for _, msg := range m.messages { - delete(m.cachedContent, msg.ID) - } - m.uiMessages = make([]uiMessage, 0) - m.renderView() + m.rerender() return nil } |
