tuimux 0.1.2

A fast Rust TUI for everything tmux, with full CRUD support.
Documentation
use ratatui::layout::{Constraint, Direction, Layout, Rect};

#[derive(Debug, Clone, Copy)]
pub struct Regions {
    pub left: Rect,
    pub right: Rect,
    pub bottom: Rect,
    pub overlay: Rect,
}

#[must_use]
pub fn split(area: Rect) -> Regions {
    let canvas =
        Layout::default().direction(Direction::Vertical).constraints([Constraint::Min(1)]).margin(1).split(area)[0];

    let vertical = Layout::default()
        .direction(Direction::Vertical)
        .constraints([Constraint::Min(4), Constraint::Length(7)])
        .split(canvas);

    let top = vertical[0];
    let bottom = vertical[1];

    let horizontal = Layout::default()
        .direction(Direction::Horizontal)
        .constraints([Constraint::Percentage(40), Constraint::Percentage(60)])
        .split(top);

    Regions { left: horizontal[0], right: horizontal[1], bottom, overlay: centered_rect(60, 30, canvas) }
}

fn centered_rect(percent_x: u16, percent_y: u16, area: Rect) -> Rect {
    let popup_layout = Layout::default()
        .direction(Direction::Vertical)
        .constraints([
            Constraint::Percentage((100 - percent_y) / 2),
            Constraint::Percentage(percent_y),
            Constraint::Percentage((100 - percent_y) / 2),
        ])
        .split(area);

    Layout::default()
        .direction(Direction::Horizontal)
        .constraints([
            Constraint::Percentage((100 - percent_x) / 2),
            Constraint::Percentage(percent_x),
            Constraint::Percentage((100 - percent_x) / 2),
        ])
        .split(popup_layout[1])[1]
}