virtuoso-cli 0.3.6

CLI tool to control Cadence Virtuoso from anywhere, locally or remotely
Documentation
use crate::tui::app::overlay::ConfirmOverlay;
use crate::tui::theme::Theme;
use crate::tui::ui::overlay::layout::{centered_message_lines, compact_message_overlay_rect};
use crate::tui::ui::shared::overlay_border_style;
use ratatui::layout::{Alignment, Rect};
use ratatui::style::{Modifier, Style};
use ratatui::text::{Line, Span};
use ratatui::widgets::{Block, Borders, Clear, Paragraph};
use ratatui::Frame;

pub fn render(frame: &mut Frame, confirm: &ConfirmOverlay, theme: &Theme, area: Rect) {
    let title = format!(" {} ", confirm.title);
    let rect = compact_message_overlay_rect(area, &title, &confirm.message);
    frame.render_widget(Clear, rect);

    let block = Block::default()
        .title(title)
        .borders(Borders::ALL)
        .border_style(overlay_border_style(theme, true));
    let inner = block.inner(rect);

    let message_height = inner.height.saturating_sub(2);
    let mut lines = centered_message_lines(&confirm.message, inner.width, message_height);

    lines.push(Line::raw(""));
    let hint_style = if theme.no_color {
        Style::default().add_modifier(Modifier::BOLD)
    } else {
        Style::default().fg(theme.text_dim)
    };
    lines.push(Line::from(Span::styled(
        "y/Enter=confirm   n/Esc=cancel",
        hint_style,
    )));

    frame.render_widget(block, rect);
    frame.render_widget(Paragraph::new(lines).alignment(Alignment::Center), inner);
}