diff --git a/crates/ui2/src/components.rs b/crates/ui2/src/components.rs index 706918c080..e7b2d9cf0f 100644 --- a/crates/ui2/src/components.rs +++ b/crates/ui2/src/components.rs @@ -3,6 +3,7 @@ mod button; mod checkbox; mod context_menu; mod details; +mod divider; mod elevated_surface; mod facepile; mod icon; @@ -31,6 +32,7 @@ pub use button::*; pub use checkbox::*; pub use context_menu::*; pub use details::*; +pub use divider::*; pub use elevated_surface::*; pub use facepile::*; pub use icon::*; diff --git a/crates/ui2/src/components/divider.rs b/crates/ui2/src/components/divider.rs new file mode 100644 index 0000000000..5ebfc7a4ff --- /dev/null +++ b/crates/ui2/src/components/divider.rs @@ -0,0 +1,46 @@ +use crate::prelude::*; + +enum DividerDirection { + Horizontal, + Vertical, +} + +#[derive(Component)] +pub struct Divider { + direction: DividerDirection, + inset: bool, +} + +impl Divider { + pub fn horizontal() -> Self { + Self { + direction: DividerDirection::Horizontal, + inset: false, + } + } + + pub fn vertical() -> Self { + Self { + direction: DividerDirection::Vertical, + inset: false, + } + } + + pub fn inset(mut self) -> Self { + self.inset = true; + self + } + + fn render(self, _view: &mut V, cx: &mut ViewContext) -> impl Component { + div() + .map(|this| match self.direction { + DividerDirection::Horizontal => { + this.h_px().w_full().when(self.inset, |this| this.mx_1p5()) + } + DividerDirection::Vertical => { + this.w_px().h_full().when(self.inset, |this| this.my_1p5()) + } + }) + .bg(cx.theme().colors().border_variant) + } +}