tr300-tui 1.4.3

Real-time interactive system diagnostic TUI
Documentation
use ratatui::layout::{Alignment, Constraint, Direction, Layout, Rect};
use ratatui::style::{Modifier, Style};
use ratatui::text::{Line, Span};
use ratatui::widgets::{Paragraph, Tabs};
use ratatui::Frame;

use crate::app::App;
use crate::types::Section;
use crate::ui::common::*;

pub fn render(frame: &mut Frame, app: &App, area: Rect) {
    let titles = Section::ALL.iter().map(|section| {
        Line::from(Span::raw(format!(
            " {} {} ",
            section.number(),
            section.label()
        )))
    });

    let selected = Section::ALL
        .iter()
        .position(|section| *section == app.current_section)
        .unwrap_or(0);
    let chunks = Layout::default()
        .direction(Direction::Horizontal)
        .constraints([Constraint::Min(10), Constraint::Length(8)])
        .split(area);

    let tabs = Tabs::new(titles)
        .select(selected)
        .style(Style::default().fg(COLOR_MUTED))
        .highlight_style(
            Style::default()
                .fg(COLOR_ACCENT)
                .bg(COLOR_HIGHLIGHT_BG)
                .add_modifier(Modifier::BOLD),
        )
        .divider(Span::styled("\u{2502}", Style::default().fg(COLOR_BORDER)))
        .padding("", "");

    frame.render_widget(tabs, chunks[0]);
    frame.render_widget(
        Paragraph::new(Line::from(Span::styled(
            "? Help",
            Style::default().fg(COLOR_DIM),
        )))
        .alignment(Alignment::Right),
        chunks[1],
    );
}