summaryrefslogtreecommitdiffhomepage
path: root/internal/tui/components/chat/list.go
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-04-28 08:46:09 -0500
committeradamdottv <[email protected]>2025-04-30 07:46:34 -0500
commit61b605e724eb4cc50ab831534fcdd18e031d68eb (patch)
treeb15b074a8fed1931e179a8d3df08d05b753c7aa3 /internal/tui/components/chat/list.go
parent61d9dc95111d2645a49816f6d9d6cc1014be1a22 (diff)
downloadopencode-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.go76
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
}