dxc_components/icon/
icon.rs1use super::props::IconProps;
2use dioxus::prelude::*;
3use dxc_hooks::UseNamespace;
4use dxc_icons::spawn_icon;
5use dxc_macros::classes;
6use dxc_types::namespace::Block;
7
8#[component]
23pub fn DxcIcon(props: IconProps) -> Element {
24 let id = use_signal(|| props.id());
25
26 let ns = UseNamespace::new(Block::Icon, None);
27
28 let classes = classes! {ns.b(), props.class()};
29
30 let style = use_signal(|| props.style());
31
32 rsx! {
33 i {
34 id: id(),
35 class: classes,
36 style: style(),
37 onclick: move |evt| {
38 if let Some(onclick) = props.onclick.as_ref() {
39 onclick.call(evt);
40 }
41 },
42
43 match props.icon {
44 Some(icon) => {
45 spawn_icon(&icon)
46 },
47 None => {
48 props.children
49 }
50 }
51 }
52 }
53}