kwaak 0.3.3

Run a team of autonomous agents on your code, right from your terminal
Documentation
use ratatui::prelude::*;
use ratatui::widgets::{Block, Borders, Padding};

use crate::chat::{Chat, ChatState};
use crate::frontend::App;

pub struct InputBarWidget;

impl InputBarWidget {
    pub fn render(f: &mut ratatui::Frame, app: &mut App, area: Rect) {
        let border_set = symbols::border::Set {
            top_left: symbols::line::NORMAL.vertical_right,
            top_right: symbols::line::NORMAL.vertical_left,
            bottom_right: symbols::line::NORMAL.horizontal_up,
            ..symbols::border::PLAIN
        };

        let block = Block::default()
            .border_set(border_set)
            .padding(Padding::horizontal(1))
            .borders(Borders::ALL);

        if app.current_chat().is_some_and(Chat::is_loading) {
            let loading_msg = match &app.current_chat().expect("infallible").state {
                ChatState::Loading => "Kwaaking ...".to_string(),
                ChatState::LoadingWithMessage(msg) => format!("Kwaaking ({msg}) ..."),
                ChatState::Ready => unreachable!(),
            };
            let throbber = throbber_widgets_tui::Throbber::default().label(&loading_msg);

            f.render_widget(throbber, block.inner(area));
            block.render(area, f.buffer_mut());
        } else {
            app.text_input.set_block(block);
            f.render_widget(&app.text_input, area);
        }
    }
}