Private
Public Access
1
0

kptui: Unread indicator, highlight vs selected state

This commit is contained in:
2026-02-12 13:06:01 -08:00
parent 1febd91c2c
commit 7c117eb52e

View File

@@ -179,21 +179,32 @@ fn ui(frame: &mut Frame, app: &AppState, requested_view: ViewMode) {
fn render_conversations(frame: &mut Frame, app: &AppState, area: Rect, in_split: bool) {
let title = if in_split {
"Conversations (↑/↓, Enter)"
"Conversations (↑/↓ move, ▸ cursor, ● unread)"
} else {
"Conversations (↑/↓, Enter to open)"
"Conversations (↑/↓ move, Enter open, ● unread)"
};
let items = app
.conversations
.iter()
.map(|c| {
let is_active = app.active_conversation_id.as_deref() == Some(c.id.as_str());
let unread = if c.unread_count > 0 {
format!(" ({})", c.unread_count)
} else {
String::new()
};
let header = Line::from(vec![
Span::styled(
if c.unread_count > 0 { "" } else { " " },
Style::default()
.fg(if c.unread_count > 0 {
Color::LightYellow
} else {
Color::DarkGray
})
.add_modifier(Modifier::BOLD),
),
Span::styled(
c.title.clone(),
Style::default().add_modifier(Modifier::BOLD),
@@ -202,9 +213,17 @@ fn render_conversations(frame: &mut Frame, app: &AppState, area: Rect, in_split:
]);
let preview = Line::from(Span::styled(
c.preview.clone(),
Style::default().fg(Color::DarkGray),
Style::default().fg(if is_active {
Color::Gray
} else {
Color::DarkGray
}),
));
ListItem::new(vec![header, preview])
ListItem::new(vec![header, preview]).style(if is_active {
Style::default().bg(Color::DarkGray)
} else {
Style::default()
})
})
.collect::<Vec<_>>();