Files
fluxer/fluxer_admin/src/templates/components/stack.rs
T

54 lines
1.2 KiB
Rust

// SPDX-License-Identifier: AGPL-3.0-or-later
use maud::{Markup, html};
#[derive(Clone, Copy)]
pub enum StackGap {
Sm,
Md,
Lg,
}
#[derive(Clone, Copy)]
pub enum StackAlign {
Start,
Center,
End,
Stretch,
}
fn gap_class(gap: StackGap) -> &'static str {
match gap {
StackGap::Sm => "gap-2",
StackGap::Md => "gap-4",
StackGap::Lg => "gap-6",
}
}
fn align_class(align: StackAlign) -> &'static str {
match align {
StackAlign::Start => "items-start",
StackAlign::Center => "items-center",
StackAlign::End => "items-end",
StackAlign::Stretch => "items-stretch",
}
}
pub fn vstack(gap: StackGap, align: StackAlign, content: Markup) -> Markup {
let classes = format!("flex flex-col {} {}", gap_class(gap), align_class(align),);
html! {
div class=(classes) { (content) }
}
}
pub fn hstack(gap: StackGap, align: StackAlign, content: Markup) -> Markup {
let classes = format!("flex flex-row {} {}", gap_class(gap), align_class(align),);
html! {
div class=(classes) { (content) }
}
}
pub fn stack(content: Markup) -> Markup {
vstack(StackGap::Md, StackAlign::Stretch, content)
}