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::style::{Modifier, Style};
use ratatui::widgets::Tabs;
use ratatui::Frame;

use super::{collect_element_children, collect_plain_text, parse_color, parse_style};
use crate::elements::Element;

pub fn render(frame: &mut Frame, area: Rect, element: &Element) {
    let children = collect_element_children(element);
    let titles: Vec<String> = children
        .iter()
        .map(|child| collect_plain_text(child))
        .collect();

    let divider = element
        .props
        .get("divider")
        .and_then(|v| v.as_str())
        .unwrap_or(" | ")
        .to_string();

    let mut highlight_style = Style::default().add_modifier(Modifier::BOLD);
    if let Some(fg) = element.props.get("highlight_fg").and_then(|v| v.as_str()) {
        highlight_style = highlight_style.fg(parse_color(fg));
    }

    let selected = element
        .props
        .get("selected")
        .and_then(|v| v.as_u64())
        .unwrap_or(0) as usize;

    let mut tabs = Tabs::new(titles)
        .select(selected)
        .highlight_style(highlight_style)
        .divider(divider);

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

    frame.render_widget(tabs, area);
}