dioxus_element_plug/components/
icon.rs1use dioxus::prelude::*;
2
3#[derive(Props, Clone, PartialEq)]
5pub struct IconProps {
6 #[props(default)]
8 pub name: Option<String>,
9
10 #[props(default)]
12 pub color: Option<String>,
13
14 #[props(default)]
16 pub size: Option<u32>,
17
18 #[props(default)]
20 pub class: Option<String>,
21
22 #[props(default)]
24 pub style: Option<String>,
25}
26
27#[component]
29pub fn Icon(props: IconProps) -> Element {
30 let mut class_names = vec!["el-icon".to_string()];
31 if let Some(ref name) = props.name {
32 class_names.push(name.clone());
33 }
34 if let Some(ref c) = props.class { class_names.push(c.clone()); }
35
36 let mut style_parts = vec![props.style.clone().unwrap_or_default()];
37 if let Some(ref color) = props.color {
38 style_parts.push(format!("color: {};", color));
39 }
40 if let Some(size) = props.size {
41 style_parts.push(format!("font-size: {}px;", size));
42 }
43 let style_string = style_parts.join("");
44
45 rsx! {
46 i {
47 class: "{class_names.join(\" \")}",
48 style: "{style_string}",
49 }
50 }
51}