use gpui::{
Div, ElementId, InteractiveElement, IntoElement, ParentElement, RenderOnce, Styled, div,
};
pub fn spacer() -> Spacer {
Spacer::new()
}
#[derive(IntoElement)]
pub struct Spacer {
element_id: ElementId,
base: Div,
}
impl Default for Spacer {
fn default() -> Self {
Self::new()
}
}
impl Spacer {
pub fn new() -> Self {
Self {
element_id: "ui:spacer".into(),
base: div(),
}
}
pub fn id(mut self, id: impl Into<ElementId>) -> Self {
self.element_id = id.into();
self
}
pub fn key(self, key: impl Into<ElementId>) -> Self {
self.id(key)
}
}
impl ParentElement for Spacer {
fn extend(&mut self, elements: impl IntoIterator<Item = gpui::AnyElement>) {
self.base.extend(elements);
}
}
impl Styled for Spacer {
fn style(&mut self) -> &mut gpui::StyleRefinement {
self.base.style()
}
}
impl RenderOnce for Spacer {
fn render(self, _window: &mut gpui::Window, _cx: &mut gpui::App) -> impl IntoElement {
self.base.id(self.element_id).flex_grow()
}
}