use ratatui::Frame;
use ratatui::layout::Rect;
pub struct ClosureRoot {
render_fn: Box<dyn FnMut(&mut Frame<'_>)>,
frame_counter: u64,
}
impl ClosureRoot {
pub fn new<F>(render_fn: F) -> Self
where
F: FnMut(&mut Frame<'_>) + 'static,
{
Self {
render_fn: Box::new(render_fn),
frame_counter: 0,
}
}
}
impl oxi_tui::widget::Renderable for ClosureRoot {
fn content_hash(&self) -> u64 {
self.frame_counter.wrapping_add(1)
}
fn height_for(&self, _width: u16, _ctx: &oxi_tui::widget::RenderCtx<'_, '_>) -> u16 {
24
}
fn render(&mut self, _area: Rect, ctx: &mut oxi_tui::widget::RenderCtx<'_, '_>) {
self.frame_counter = self.frame_counter.wrapping_add(1);
ctx.with_frame(|frame| (self.render_fn)(frame));
}
}
#[allow(unused_imports)] pub use oxi_tui::content::{ChatLog, ChatMessage, ContentBlock, MessageRole, StreamingState};
#[allow(unused_imports)] pub use oxi_tui::pipeline::{CursorState, FrameOutcome, draw_frame};
#[allow(unused_imports)] pub use oxi_tui::theme::{TerminalCaps, Theme as V2Theme};
#[allow(unused_imports)] pub use oxi_tui::widget::chat::ChatView;
#[allow(unused_imports)] pub use oxi_tui::widget::panel::Footer;
#[allow(unused_imports)] pub use oxi_tui::widget::{FocusTarget, RenderCtx, Renderable, RetainedChild, RetainedTree};