thaw/src/grid/grid_item.rs

41 lines
1 KiB
Rust
Raw Normal View History

2023-10-12 17:40:21 +08:00
use super::use_grid;
use leptos::*;
#[component]
2023-10-12 23:25:10 +08:00
pub fn GridItem(
2023-10-12 17:40:21 +08:00
#[prop(default = MaybeSignal::Static(1u16), into)] span: MaybeSignal<u16>,
#[prop(optional, into)] offset: MaybeSignal<i32>,
children: Children,
) -> impl IntoView {
let grid = use_grid();
let style = create_memo(move |_| {
2023-10-12 23:25:10 +08:00
let mut style = String::new();
2023-10-12 17:40:21 +08:00
let offset = offset.get();
let span = i32::from(span.get());
let x_gap = grid.x_gap.get();
if offset > 0 {
style.push_str(&format!(
2023-10-12 23:25:10 +08:00
"margin-left: calc((100% - {}px) / {} * {} + {}px);",
2023-10-12 17:40:21 +08:00
(span + offset - 1) * x_gap,
span + offset,
offset,
offset * x_gap
));
}
style.push_str(&format!(
2023-10-12 23:25:10 +08:00
"grid-column: span {} / span {};",
2023-10-12 17:40:21 +08:00
span + offset,
span + offset
));
style
});
view! {
<div class="melt-grid-item" style=move || style.get()>
{children()}
</div>
}
}