ratflow 0.2.0

A minimalistic framework for building TUI applications using a reactive architecture.
Documentation
#![doc = include_str!("../README.md")]

use ratatui::Terminal;
use ratatui::prelude::Backend;
use std::io::Error;
use tokio::task::LocalSet;

mod events;
mod on_drop;
mod render;
mod timer;
mod traits;

pub use events::*;
pub use timer::*;

pub use render::Runtime;
pub use traits::{Component, Render};

use crate::render::render_loop;

#[inline]
pub async fn run_with_terminal<
    B: Backend<Error = Error> + 'static,
    F: Render + 'static,
    C: Component<F>,
>(
    app: C,
    terminal: &mut Terminal<B>,
) -> Result<(), Error> {
    let _ = any_spawner::Executor::init_tokio();
    LocalSet::new().run_until(render_loop(app, terminal)).await
}

#[inline]
pub async fn run<F: Render + 'static, C: Component<F>>(app: C) -> Result<(), Error> {
    let mut terminal = ratatui::init();
    let res = run_with_terminal(app, &mut terminal).await;
    ratatui::restore();
    res
}