Skip to main content

codetether_agent/tui/ui/webview/
status.rs

1use 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
35/// Fallback message shown when terminal is too small for webview.
36pub 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}