use ratatui_core::layout;
use ratatui_core::terminal::Frame;
use crate::elements::macros::*;
use crate::elements::{Element, ElementWithChildren};
use crate::error;
#[derive(Default)]
pub struct Container<'a> {
children: Vec<Box<dyn Element>>,
constraint: layout::Constraint,
layout: layout::Layout,
widgets: ContainerWidgets<'a>,
}
#[derive(Clone, Default)]
struct ContainerWidgets<'a> {
block0: ratatui_widgets::block::Block<'a>,
}
basic_config_methods!(Container<'_>);
element_with_children!(Container<'_>);
impl Element for Container<'_> {
#[inline(always)]
fn constraint(&self) -> layout::Constraint {
self.constraint
}
fn render(
&self,
frm: &mut Frame,
rect: layout::Rect,
) -> Result<(), error::LintuiniError> {
frm.render_widget(&self.widgets.block0, rect);
for (el, r) in self.children.iter().zip(&*self.layout.split(rect)) {
el.render(frm, *r)?;
}
Ok(())
}
}