thaw/src/space/mod.rs

42 lines
1.2 KiB
Rust
Raw Normal View History

2023-04-03 15:21:23 +08:00
use crate::utils::mount_style::mount_style;
use leptos::*;
use stylers::style_sheet_str;
#[derive(Default)]
pub enum SpaceGap {
SMALL,
#[default]
MEDIUM,
LARGE,
NUMBER(u16),
TUPLE(u16, u16),
}
#[component]
2023-08-29 09:11:22 +08:00
pub fn Space(#[prop(optional)] gap: SpaceGap, children: Children) -> impl IntoView {
2023-04-03 15:21:23 +08:00
let class_name = mount_style("space", || style_sheet_str!("./src/space/space.css"));
let gap = match gap {
SpaceGap::SMALL => "gap: 4px 8px".into(),
SpaceGap::MEDIUM => "gap: 8px 12px".into(),
SpaceGap::LARGE => "gap: 12px 16px".into(),
SpaceGap::NUMBER(size) => format!("gap: {size}px {size}px"),
SpaceGap::TUPLE(x, y) => format!("gap: {x}px {y}px"),
};
view! {
2023-08-29 09:11:22 +08:00
class=class_name,
2023-04-03 15:21:23 +08:00
<div class="melt-space" style=format!("{gap};")>
{
2023-08-29 09:11:22 +08:00
children().nodes.into_iter().map(|node| {
2023-04-03 15:21:23 +08:00
view! {
2023-08-29 09:11:22 +08:00
class=class_name,
2023-04-03 15:21:23 +08:00
<div class="melt-space__item">
{node}
</div>
}
}).collect::<Vec<_>>()
}
</div>
}
}