Skip to main content

dioxus_element_plug/components/
icon.rs

1use dioxus::prelude::*;
2
3/// Icon props
4#[derive(Props, Clone, PartialEq)]
5pub struct IconProps {
6    /// Icon CSS class name
7    #[props(default)]
8    pub name: Option<String>,
9
10    /// Icon color
11    #[props(default)]
12    pub color: Option<String>,
13
14    /// Icon size
15    #[props(default)]
16    pub size: Option<u32>,
17
18    /// Additional CSS classes
19    #[props(default)]
20    pub class: Option<String>,
21
22    /// Inline styles
23    #[props(default)]
24    pub style: Option<String>,
25}
26
27/// Icon component for displaying icons
28#[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}