cargo-tuwui 0.1.2

A TUI for editing cargo manifest (Cargo.toml) files
pub mod help;
pub mod icons;
pub mod main;
pub mod modals;
pub mod sidebar;

use ratatui::{
    macros::{horizontal, vertical},
    prelude::*,
};

use crate::{
    app::{App, FocusedArea},
    ui::sidebar::SidebarUI,
};

pub const FOCUSED_BORDER_STYLE: Style = Style::new().add_modifier(Modifier::BOLD).fg(Color::White);

pub struct AppUI<'a> {
    pub state: &'a App,
}

impl Widget for AppUI<'_> {
    #[tracing::instrument(level = "debug", skip(self, area, buf), fields(focused_area = ?self.state.focus_stack.last()))]
    fn render(self, area: Rect, buf: &mut Buffer) {
        let [content_area, help_area] = vertical![>= 0, == 1].areas(area);

        let [sidebar_area, main_area] = horizontal![== 50, >= 0].areas(content_area);

        let sidebar = SidebarUI::from_app_state(self.state, self.state.sidebar_rows());

        sidebar.render(sidebar_area, buf);
        self.state.render_main_area(main_area, buf);
        self.state.render_help_area(help_area, buf);

        if let FocusedArea::Modal(modal_state) = &self.state.focused_area() {
            let modal_area = App::prepare_modal_area(content_area, buf);

            modal_state.render(modal_area, buf, self.state);
        }
    }
}