#![doc = include_str!("../README.md")]
use ratatui::Terminal;
use ratatui::prelude::Backend;
use std::io::Error;
use tokio::task::LocalSet;
mod render;
mod traits;
mod utils;
pub use render::Runtime;
pub use traits::{Component, Render};
pub use utils::*;
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: 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 res = run_with_terminal(app, ratatui::init()).await;
ratatui::restore();
res
}