thaw/src/grid/mod.rs

47 lines
1.1 KiB
Rust
Raw Normal View History

2023-10-12 17:40:21 +08:00
mod grid_item;
pub use grid_item::*;
use leptos::*;
#[component]
2023-10-12 23:25:10 +08:00
pub fn Grid(
2023-10-12 17:40:21 +08:00
#[prop(default = MaybeSignal::Static(1u16), into)] cols: MaybeSignal<u16>,
#[prop(optional, into)] x_gap: MaybeSignal<i32>,
#[prop(optional, into)] y_gap: MaybeSignal<i32>,
children: Children,
) -> impl IntoView {
2023-11-09 16:46:14 +08:00
let grid_injection_key = GridInjection::new(x_gap);
2023-10-12 17:40:21 +08:00
provide_context(grid_injection_key);
let style = create_memo(move |_| {
let mut style = String::from("display: grid;");
style.push_str(&format!(
"grid-template-columns: repeat({}, minmax(0px, 1fr));",
cols.get()
));
2023-10-12 23:25:10 +08:00
style.push_str(&format!("grid-gap: {}px {}px;", y_gap.get(), x_gap.get()));
2023-10-12 17:40:21 +08:00
style
});
view! {
2023-11-05 16:03:58 +08:00
<div class="thaw-grid" style=move || style.get()>
2023-10-12 17:40:21 +08:00
{children()}
</div>
}
}
#[derive(Clone)]
2023-11-09 16:46:14 +08:00
pub(crate) struct GridInjection {
2023-10-12 17:40:21 +08:00
x_gap: MaybeSignal<i32>,
}
2023-11-09 16:46:14 +08:00
impl GridInjection {
2023-10-12 17:40:21 +08:00
pub fn new(x_gap: MaybeSignal<i32>) -> Self {
Self { x_gap }
}
}
2023-11-09 16:46:14 +08:00
pub(crate) fn use_grid() -> GridInjection {
expect_context()
2023-10-12 17:40:21 +08:00
}