use crate::client::tui::app::App; use ratatui::{ layout::Rect, style::{Color, Modifier, Style}, text::{Line, Span}, widgets::{Block, Borders, List, ListItem}, Frame, }; pub fn render(f: &mut Frame, area: Rect, app: &App) { let filtered = app.get_filtered_commands(); if filtered.is_empty() { return; } let items: Vec = filtered .iter() .enumerate() .map(|(i, cmd)| { let is_selected = i == app.selected_command_idx as usize; let style = if is_selected { Style::default() .fg(Color::White) .bg(Color::Blue) .add_modifier(Modifier::BOLD) } else { Style::default().fg(Color::White) }; // Show first alias as the command let alias = cmd.aliases.first().map(|a| a.as_str()).unwrap_or(&cmd.name); ListItem::new(Line::from(vec![ Span::styled(alias, style), Span::styled(" - ", Style::default().fg(Color::Gray)), Span::styled(&cmd.description, style), ])) }) .collect(); let list = List::new(items) .block( Block::default() .title("Commands") .borders(Borders::ALL) .border_style(Style::default().fg(Color::Cyan)), ) .highlight_style(Style::default().add_modifier(Modifier::BOLD)); f.render_widget(list, area); }