diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-03 01:58:17 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-03 01:58:17 +0300 |
| commit | 685862e276ef4911029e47bdffad79143b096d0a (patch) | |
| tree | 02e938bbb191e424a87acfce207f82ca19fe9779 /src/ui.rs | |
| parent | 1468436fe39b65c8052f1df42d545843061266a6 (diff) | |
polish sidebar agent cards
Diffstat (limited to 'src/ui.rs')
| -rw-r--r-- | src/ui.rs | 42 |
1 files changed, 26 insertions, 16 deletions
@@ -313,7 +313,11 @@ fn compute_sidebar_width(app: &AppState) -> u16 { .workspaces .iter() .flat_map(|ws| ws.pane_details().into_iter()) - .map(|detail| 3 + detail.label.len() + 1 + state_label(detail.state, detail.seen).len()) + .map(|detail| { + let name_line = 3 + detail.label.len(); // " icon name" + let state_line = 2 + state_label(detail.state, detail.seen).len(); // " state" + name_line.max(state_line) + }) .max() .unwrap_or(0); ((max_workspace_line.max(max_agent_line) as u16) + 2) @@ -642,7 +646,7 @@ fn render_agent_detail( // Per-pane agent entries, sorted by urgency let details = ws.pane_details(); for detail in &details { - if row_y >= area.y + area.height { + if row_y + 1 >= area.y + area.height { break; } @@ -650,32 +654,38 @@ fn render_agent_detail( let label_color = state_label_color(detail.state, detail.seen, p); let label = state_label(detail.state, detail.seen); - // Agent name in soft white, state label right-aligned in its color let name_style = Style::default().fg(p.subtext0).add_modifier(Modifier::BOLD); + let status_style = Style::default().fg(label_color).add_modifier(Modifier::DIM); - // Calculate padding to right-align state label - let used = 3 + detail.label.len() + 1; // " icon name " - let label_len = label.len(); - let avail = (area.width as usize).saturating_sub(used + label_len); - let padding = " ".repeat(avail); - - let line = Line::from(vec![ + let name_line = Line::from(vec![ Span::styled(" ", Style::default()), Span::styled(icon, icon_style), Span::styled(" ", Style::default()), Span::styled(&detail.label, name_style), - Span::styled(padding, Style::default()), - Span::styled( - label, - Style::default().fg(label_color).add_modifier(Modifier::DIM), - ), ]); + frame.render_widget( + Paragraph::new(name_line), + Rect::new(area.x, row_y, area.width, 1), + ); + row_y += 1; + + if row_y >= area.y + area.height { + break; + } + let status_line = Line::from(vec![ + Span::styled(" ", Style::default()), + Span::styled(label, status_style), + ]); frame.render_widget( - Paragraph::new(line), + Paragraph::new(status_line), Rect::new(area.x, row_y, area.width, 1), ); row_y += 1; + + if row_y < area.y + area.height { + row_y += 1; + } } } |
