eazygit 0.5.1

A fast TUI for Git with staging, conflicts, rebase, and palette-first UX
Documentation
use crate::app::AppState;
use crate::ui::style::{self, Emphasis};
use crate::palette::filter::ScoredCommand;
use ratatui::Frame;
use ratatui::layout::Rect;
use ratatui::widgets::{Block, Borders, Paragraph};
use ratatui::text::{Line, Span};
use ratatui::style::Modifier;
use super::utils::category_color;

pub fn render_preview(
    frame: &mut Frame,
    area: Rect,
    state: &AppState,
    scored: &ScoredCommand,
) {
    let cmd = scored.command;
    
    let preview_lines = vec![
        Line::from(vec![
            Span::styled("Command: ", style::text(&state.theme, Emphasis::Header)),
            Span::styled(cmd.name, style::text(&state.theme, Emphasis::Normal).add_modifier(Modifier::BOLD)),
        ]),
        Line::from(vec![
            Span::styled("Shortcut: ", style::text(&state.theme, Emphasis::Header)),
            Span::styled(
                format!("[{}]", cmd.key),
                style::text(&state.theme, Emphasis::Muted).add_modifier(Modifier::BOLD),
            ),
        ]),
        Line::from(vec![
            Span::styled("Description: ", style::text(&state.theme, Emphasis::Header)),
            Span::styled(cmd.description, style::text(&state.theme, Emphasis::Normal)),
        ]),
        Line::from(vec![
            Span::styled("Category: ", style::text(&state.theme, Emphasis::Header)),
            Span::styled(
                format!("{:?}", cmd.category),
                category_color(&cmd.category, &state.theme),
            ),
        ]),
    ];
    
    let block = Block::default()
        .borders(Borders::TOP)
        .border_style(style::border(&state.theme, false))
        .title("Preview");
    
    let paragraph = Paragraph::new(preview_lines)
        .block(block)
        .style(style::body_style(&state.theme));
    
    frame.render_widget(paragraph, area);
}

pub fn render_custom_preview(
    frame: &mut Frame,
    area: Rect,
    state: &AppState,
    name: &str,
    command: &str,
) {
    let lines = vec![
        Line::from(vec![
            Span::styled("Custom Command", style::text(&state.theme, Emphasis::Header)),
        ]),
        Line::from(""),
        Line::from(vec![
            Span::styled("Name: ", style::text(&state.theme, Emphasis::Muted)),
            Span::styled(name, style::text(&state.theme, Emphasis::Normal)),
        ]),
        Line::from(vec![
            Span::styled("Command: ", style::text(&state.theme, Emphasis::Muted)),
            Span::styled(command, style::text(&state.theme, Emphasis::Normal)),
        ]),
    ];
    
    let paragraph = Paragraph::new(lines)
        .style(style::text(&state.theme, Emphasis::Normal))
        .block(style::pane_block(&state.theme, "Preview", false));
    
    frame.render_widget(paragraph, area);
}