tela-engine 0.1.0

Runtime engine for Tela — React Native for terminals. QuickJS bridge, native APIs, and ratatui renderer.
Documentation
use ratatui::layout::Rect;
use ratatui::symbols;
use ratatui::widgets::{RenderDirection, Sparkline};
use ratatui::Frame;

use super::parse_style;
use crate::elements::Element;

pub fn render(frame: &mut Frame, area: Rect, element: &Element) {
    let data: Vec<u64> = element
        .props
        .get("data")
        .and_then(|v| v.as_array())
        .map(|arr| arr.iter().map(|v| v.as_u64().unwrap_or(0)).collect())
        .unwrap_or_default();

    let mut sparkline = Sparkline::default().data(&data);

    if let Some(max) = element.props.get("max").and_then(|v| v.as_u64()) {
        sparkline = sparkline.max(max);
    }

    sparkline = sparkline.style(parse_style(element));

    match element.props.get("barSet").and_then(|v| v.as_str()) {
        Some("three") => {
            sparkline = sparkline.bar_set(symbols::bar::THREE_LEVELS);
        }
        Some("nine") => {
            sparkline = sparkline.bar_set(symbols::bar::NINE_LEVELS);
        }
        _ => {}
    }

    match element.props.get("direction").and_then(|v| v.as_str()) {
        Some("rtl") => {
            sparkline = sparkline.direction(RenderDirection::RightToLeft);
        }
        _ => {}
    }

    frame.render_widget(sparkline, area);
}