rustact 0.1.0

Async terminal UI framework inspired by React, built on top of ratatui and tokio.
Documentation
use ratatui::Frame;
use ratatui::layout::Rect;
use ratatui::style::Style;
use ratatui::text::Span;
use ratatui::widgets::Gauge;

use crate::runtime::GaugeView;

pub fn render_gauge(frame: &mut Frame<'_>, area: Rect, view: &GaugeView) {
    let mut widget = Gauge::default()
        .use_unicode(true)
        .ratio(view.ratio.clamp(0.0, 1.0));

    if let Some(label) = &view.label {
        widget = widget.label(Span::raw(label.clone()));
    } else {
        let percent = (view.ratio * 100.0).round();
        widget = widget.label(Span::raw(format!("{percent:.0}%")));
    }

    if let Some(color) = view.color {
        widget = widget.style(Style::default().fg(color));
    }

    frame.render_widget(widget, area);
}