nyado 0.2.5

A Rust todo-list manager with TUI, inspired by meowdo
use super::common::{color, truncate_text};
use ratatui::{
    layout::Rect,
    style::{Modifier, Style},
    text::Span,
    widgets::Paragraph,
    Frame,
};

pub fn draw_progress_bar(frame: &mut Frame, area: Rect, done: usize, total: usize) {
    if total == 0 || area.width == 0 {
        return;
    }
    let width = area.width as usize;
    if width < 10 {
        return;
    }
    let percent = (done * 100) / total;
    let bar_len = width.saturating_sub(12);
    if bar_len < 5 {
        return;
    }
    let filled = (bar_len * done) / total;
    let bar: String = (0..bar_len)
        .map(|i| if i < filled { '' } else { '' })
        .collect();
    let label = format!("{}% {}/{}", percent, done, total);
    let line = format!("[{}] {}", bar, label);
    let display = truncate_text(&line, width);
    let line_len = display.chars().count() as u16;
    if line_len <= area.width {
        frame.render_widget(
            Paragraph::new(Span::styled(display, Style::default().fg(color::GREEN).add_modifier(Modifier::BOLD))),
            Rect::new(area.left(), area.top(), line_len, 1),
        );
    }
}