codetether_agent/tui/ui/webview/
status.rs1use ratatui::{
2 Frame,
3 layout::Rect,
4 style::{Color, Style, Stylize},
5 text::{Line, Span},
6 widgets::Paragraph,
7};
8
9use crate::tui::app::state::App;
10use crate::tui::theme::Theme;
11use crate::tui::theme_utils::validate_theme;
12use crate::tui::token_display::TokenDisplay;
13
14pub fn render_webview_status(f: &mut Frame, app: &App, area: Rect) {
15 let token_display = TokenDisplay::new();
16 let validated_theme = validate_theme(&Theme::default());
17 let mut status_line = token_display.create_status_bar(&validated_theme);
18 let model_status = app
19 .state
20 .last_completion_model
21 .as_deref()
22 .map(|m| format!(" {m} "))
23 .unwrap_or_else(|| " auto ".to_string());
24 status_line.spans.insert(
25 0,
26 Span::styled(model_status, Style::default().fg(Color::Cyan)),
27 );
28 status_line
29 .spans
30 .insert(0, Span::styled("│ ", Style::default().fg(Color::DarkGray)));
31 let para = Paragraph::new(status_line);
32 f.render_widget(para, area);
33}
34
35pub fn render_too_small(f: &mut Frame, area: Rect) {
37 let msg = format!(
38 "Terminal too small for Webview (need {}×{}). Try resizing or /classic.",
39 90, 18
40 );
41 let line = Line::from(msg.red());
42 let para = Paragraph::new(line);
43 f.render_widget(para, area);
44}