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;
2023-11-19 14:06:23 +08:00
use crate::utils::Provider;
2023-10-12 17:40:21 +08:00
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<u16>,
#[prop(optional, into)] y_gap: MaybeSignal<u16>,
2023-10-12 17:40:21 +08:00
children: Children,
) -> impl IntoView {
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-19 14:06:23 +08:00
<Provider value=GridInjection::new(x_gap)>
<div class="thaw-grid" style=move || style.get()>
{children()}
</div>
</Provider>
2023-10-12 17:40:21 +08:00
}
}
#[derive(Clone)]
2023-11-09 16:46:14 +08:00
pub(crate) struct GridInjection {
x_gap: MaybeSignal<u16>,
2023-10-12 17:40:21 +08:00
}
2023-11-09 16:46:14 +08:00
impl GridInjection {
pub fn new(x_gap: MaybeSignal<u16>) -> Self {
2023-10-12 17:40:21 +08:00
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
}