use ratatui_core::layout;
use ratatui_core::terminal::Frame;
use ratatui_widgets::block;
use crate::error;
use crate::elements::{Element, ElementWithChildren};
use crate::elements::macros::*;
#[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: 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(())
}
}