gitv-tui 0.4.5

A terminal-based GitHub client built with Rust and Ratatui.
use ratatui::layout::{Rect, Spacing};
use ratatui_macros::{horizontal, vertical};

#[derive(Debug, Clone, Copy)]
pub struct Layout {
    pub status_bar: Rect,
    pub mini_convo_preview: Rect,
    pub main_content: Rect,
    pub label_list: Rect,
    pub text_search: Rect,
    pub status_dropdown: Rect,
    pub issue_preview: Rect,
    pub label_search: Rect,
    pub title_bar: Rect,
}

impl Layout {
    pub fn new(area: Rect) -> Self {
        let [title_bar, main, status_bar] = vertical![==1, *=1, ==1].areas(area);
        let [left, right] = horizontal![==66%, *=1].areas(main);
        let [mini_convo_preview, label_list, issue_preview] = vertical![==60%, *=1, *=1]
            .spacing(Spacing::Overlap(1))
            .areas(right);
        let [text_search, bottom_search, main_content] = vertical![==3, ==3, *=1].areas(left);
        let [label_search, status_dropdown] = horizontal![*=1, ==30%].areas(bottom_search);
        Self {
            status_dropdown,
            mini_convo_preview,
            title_bar,
            status_bar,
            main_content,
            label_list,
            label_search,
            text_search,
            issue_preview,
        }
    }

    pub fn fullscreen(area: Rect) -> Self {
        Self {
            mini_convo_preview: area,
            status_bar: area,
            main_content: area,
            label_list: area,
            text_search: area,
            status_dropdown: area,
            issue_preview: area,
            label_search: area,
            title_bar: area,
        }
    }

    pub fn areas(&self) -> [Rect; 4] {
        [
            self.title_bar,
            self.main_content,
            self.label_list,
            self.issue_preview,
        ]
    }
}