govctl 0.9.4

Project governance CLI for RFC, ADR, and Work Item management
use ratatui::{
    prelude::*,
    symbols::border,
    widgets::{Block, Borders, Paragraph},
};

pub(in crate::tui::ui) struct ChromeBar {
    border_color: Color,
    left: Line<'static>,
    left_alignment: Alignment,
    right: String,
}

impl ChromeBar {
    pub(in crate::tui::ui) fn new(
        border_color: Color,
        left: Line<'static>,
        right: impl Into<String>,
    ) -> Self {
        Self {
            border_color,
            left,
            left_alignment: Alignment::Left,
            right: right.into(),
        }
    }

    pub(in crate::tui::ui) fn left_alignment(mut self, alignment: Alignment) -> Self {
        self.left_alignment = alignment;
        self
    }

    pub(in crate::tui::ui) fn render(self, frame: &mut Frame, area: Rect) {
        let block = Block::default()
            .borders(Borders::ALL)
            .border_set(border::ROUNDED)
            .border_style(Style::default().fg(self.border_color));
        let inner = block.inner(area);
        frame.render_widget(block, area);

        let chunks = Layout::default()
            .direction(Direction::Horizontal)
            .constraints([Constraint::Min(10), Constraint::Length(30)])
            .split(inner);

        let left = Paragraph::new(self.left).alignment(self.left_alignment);
        let right = Paragraph::new(self.right).alignment(Alignment::Right);

        frame.render_widget(left, chunks[0]);
        frame.render_widget(right, chunks[1]);
    }
}