Skip to main content

dioxus_bulma/components/
level.rs

1use dioxus::prelude::*;
2use crate::utils::build_class;
3
4#[derive(Props, Clone, PartialEq)]
5pub struct LevelProps {
6    #[props(default)]
7    pub mobile: Option<bool>,
8    #[props(default)]
9    pub id: Option<String>,
10    #[props(default)]
11    pub class: Option<String>,
12    #[props(default)]
13    pub style: Option<String>,
14    pub children: Element,
15}
16
17#[component]
18pub fn Level(props: LevelProps) -> Element {
19    let mobile = props.mobile.unwrap_or(false);
20    
21    let base_classes = vec!["level"];
22    let optional_classes = vec![
23        if mobile { Some("is-mobile".to_string()) } else { None },
24        props.class.clone(),
25    ];
26    
27    let final_class = build_class(&base_classes, &optional_classes);
28    let level_style = props.style.as_deref().unwrap_or("");
29
30    rsx! {
31        nav {
32            class: "{final_class}",
33            style: "{level_style}",
34            id: props.id.clone(),
35            {props.children}
36        }
37    }
38}
39
40#[derive(Props, Clone, PartialEq)]
41pub struct LevelLeftProps {
42    #[props(default)]
43    pub id: Option<String>,
44    #[props(default)]
45    pub class: Option<String>,
46    #[props(default)]
47    pub style: Option<String>,
48    pub children: Element,
49}
50
51#[component]
52pub fn LevelLeft(props: LevelLeftProps) -> Element {
53    let base_classes = vec!["level-left"];
54    let optional_classes = vec![props.class.clone()];
55    let final_class = build_class(&base_classes, &optional_classes);
56    let style = props.style.as_deref().unwrap_or("");
57
58    rsx! {
59        div {
60            class: "{final_class}",
61            style: "{style}",
62            {props.children}
63        }
64    }
65}
66
67#[derive(Props, Clone, PartialEq)]
68pub struct LevelRightProps {
69    #[props(default)]
70    pub id: Option<String>,
71    #[props(default)]
72    pub class: Option<String>,
73    #[props(default)]
74    pub style: Option<String>,
75    pub children: Element,
76}
77
78#[component]
79pub fn LevelRight(props: LevelRightProps) -> Element {
80    let base_classes = vec!["level-right"];
81    let optional_classes = vec![props.class.clone()];
82    let final_class = build_class(&base_classes, &optional_classes);
83    let style = props.style.as_deref().unwrap_or("");
84
85    rsx! {
86        div {
87            class: "{final_class}",
88            style: "{style}",
89            {props.children}
90        }
91    }
92}
93
94#[derive(Props, Clone, PartialEq)]
95pub struct LevelItemProps {
96    #[props(default)]
97    pub id: Option<String>,
98    #[props(default)]
99    pub class: Option<String>,
100    #[props(default)]
101    pub style: Option<String>,
102    pub children: Element,
103}
104
105#[component]
106pub fn LevelItem(props: LevelItemProps) -> Element {
107    let base_classes = vec!["level-item"];
108    let optional_classes = vec![props.class.clone()];
109    let final_class = build_class(&base_classes, &optional_classes);
110    let style = props.style.as_deref().unwrap_or("");
111
112    rsx! {
113        div {
114            class: "{final_class}",
115            style: "{style}",
116            {props.children}
117        }
118    }
119}