wsx 0.15.1

TUI workspace manager — git worktrees + tmux sessions in one tree
// Per-project .gtrconfig editor overlay.

use crate::model::workspace::ProjectConfig;
use crate::ui::popup_center;
use ratatui::{
    prelude::*,
    widgets::{Block, Borders, Clear, Paragraph, Wrap},
};

pub fn render_config_modal(
    frame: &mut Frame,
    area: Rect,
    config: &ProjectConfig,
    project_name: &str,
) {
    let width = area.width.min(60).max(40);
    let height = area.height.min(16).max(8);
    let popup = popup_center(area, width, height);

    frame.render_widget(Clear, popup);

    let mut lines = vec![
        Line::from(vec![
            Span::styled("postCreate: ", Style::default().fg(Color::Gray)),
            Span::styled(
                config.post_create.as_deref().unwrap_or("(none)"),
                Style::default().fg(Color::White),
            ),
        ]),
        Line::from(""),
        Line::from(Span::styled(
            "copy.include:",
            Style::default().fg(Color::Gray),
        )),
    ];

    for inc in &config.copy_includes {
        lines.push(Line::from(Span::styled(
            format!("  {}", inc),
            Style::default().fg(Color::Green),
        )));
    }
    if config.copy_includes.is_empty() {
        lines.push(Line::from(Span::styled(
            "  (none)",
            Style::default().fg(Color::Gray),
        )));
    }

    lines.push(Line::from(Span::styled(
        "copy.exclude:",
        Style::default().fg(Color::Gray),
    )));
    for exc in &config.copy_excludes {
        lines.push(Line::from(Span::styled(
            format!("  {}", exc),
            Style::default().fg(Color::Red),
        )));
    }

    lines.push(Line::from(""));
    lines.push(Line::from(Span::styled(
        "e: edit .gtrignore  Esc: close",
        Style::default().fg(Color::Gray),
    )));

    let block = Block::default()
        .borders(Borders::ALL)
        .title(format!(" Config: {} ", project_name))
        .border_style(Style::default().fg(Color::Yellow));
    let para = Paragraph::new(lines)
        .block(block)
        .wrap(Wrap { trim: false });
    frame.render_widget(para, popup);
}