fix(ui): apply the message style to each line of the message items

Ayman Bagabas created

Related: 46ebd20b63d8

Change summary

internal/ui/chat/messages.go |  7 ++++++-
internal/ui/chat/tools.go    | 19 +++++++++++--------
internal/ui/chat/user.go     | 12 +++++++++---
3 files changed, 26 insertions(+), 12 deletions(-)

Detailed changes

internal/ui/chat/messages.go 🔗

@@ -221,7 +221,12 @@ func (a *AssistantInfoItem) RawRender(width int) string {
 
 // Render implements MessageItem.
 func (a *AssistantInfoItem) Render(width int) string {
-	return a.sty.Chat.Message.SectionHeader.Render(a.RawRender(width))
+	prefix := a.sty.Chat.Message.SectionHeader.Render()
+	lines := strings.Split(a.RawRender(width), "\n")
+	for i, line := range lines {
+		lines[i] = prefix + line
+	}
+	return strings.Join(lines, "\n")
 }
 
 func (a *AssistantInfoItem) renderContent(width int) string {

internal/ui/chat/tools.go 🔗

@@ -321,16 +321,19 @@ func (t *baseToolMessageItem) RawRender(width int) string {
 
 // Render renders the tool message item at the given width.
 func (t *baseToolMessageItem) Render(width int) string {
-	style := t.sty.Chat.Message.ToolCallBlurred
-	if t.focused {
-		style = t.sty.Chat.Message.ToolCallFocused
-	}
-
+	var prefix string
 	if t.isCompact {
-		style = t.sty.Chat.Message.ToolCallCompact
+		prefix = t.sty.Chat.Message.ToolCallCompact.Render()
+	} else if t.focused {
+		prefix = t.sty.Chat.Message.ToolCallFocused.Render()
+	} else {
+		prefix = t.sty.Chat.Message.ToolCallBlurred.Render()
 	}
-
-	return style.Render(t.RawRender(width))
+	lines := strings.Split(t.RawRender(width), "\n")
+	for i, ln := range lines {
+		lines[i] = prefix + ln
+	}
+	return strings.Join(lines, "\n")
 }
 
 // ToolCall returns the tool call associated with this message item.

internal/ui/chat/user.go 🔗

@@ -70,11 +70,17 @@ func (m *UserMessageItem) RawRender(width int) string {
 
 // Render implements MessageItem.
 func (m *UserMessageItem) Render(width int) string {
-	style := m.sty.Chat.Message.UserBlurred
+	var prefix string
 	if m.focused {
-		style = m.sty.Chat.Message.UserFocused
+		prefix = m.sty.Chat.Message.UserFocused.Render()
+	} else {
+		prefix = m.sty.Chat.Message.UserBlurred.Render()
+	}
+	lines := strings.Split(m.RawRender(width), "\n")
+	for i, line := range lines {
+		lines[i] = prefix + line
 	}
-	return style.Render(m.RawRender(width))
+	return strings.Join(lines, "\n")
 }
 
 // ID implements MessageItem.