eazygit 0.5.1

A fast TUI for Git with staging, conflicts, rebase, and palette-first UX
Documentation
//! Theme picker rendering.

use crate::app::AppState;
use crate::ui::style;
use ratatui::Frame;
use ratatui::layout::Rect;
use ratatui::widgets::{Clear, List, ListItem};
use super::utils;

/// Render the theme picker popup.
pub fn render(frame: &mut Frame, area: Rect, state: &AppState) {
    let max_idx = state.available_themes.len().saturating_sub(1);
    let selected = state.theme_picker_selected.min(max_idx);

    let items: Vec<ListItem> = state
        .available_themes
        .iter()
        .enumerate()
        .map(|(i, name)| {
            let item_style = if i == selected {
                style::selection(&state.theme)
            } else {
                style::body_style(&state.theme)
            };
            ListItem::new(name.clone()).style(item_style)
        })
        .collect();

    let title = format!(
        "Themes [{} / {}]",
        selected.saturating_add(1),
        state.available_themes.len().max(1)
    );

    let popup = utils::center_rect(40, 60, area);
    frame.render_widget(Clear, popup);

    let list = List::new(items)
        .style(style::body_style(&state.theme))
        .block(style::pane_block(&state.theme, title, true));

    frame.render_widget(list, popup);
}