Skip to main content

orbital_base_components/material/
base.rs

1use leptos::prelude::*;
2
3use super::types::{MaterialCorners, MaterialElevation, MaterialVariant};
4
5/// Headless material surface root — DOM contract only, no theme styling.
6#[component]
7pub fn BaseMaterial(
8    #[prop(optional, into)] class: MaybeProp<String>,
9    #[prop(default = MaterialVariant::Solid)] variant: MaterialVariant,
10    #[prop(default = MaterialElevation::Resting)] elevation: MaterialElevation,
11    #[prop(default = MaterialCorners::Rounded)] corners: MaterialCorners,
12    #[prop(optional, into)] role: MaybeProp<String>,
13    children: Children,
14) -> impl IntoView {
15    view! {
16        <div
17            class=move || {
18                let extra = class.get().unwrap_or_default();
19                if extra.is_empty() {
20                    "orbital-material".to_string()
21                } else {
22                    format!("orbital-material {extra}")
23                }
24            }
25            data-material-variant=variant.as_data()
26            data-material-elevation=elevation.as_data()
27            data-material-corners=corners.as_data()
28            role=move || role.get().unwrap_or_else(|| "group".to_string())
29        >
30            {children()}
31        </div>
32    }
33}