icons 0.3.0

Icons for Rust fullstack applications — Leptos and Dioxus.
Documentation

/// Macro to create Leptos icon components with minimal boilerplate
///
/// Usage:
/// ```rust
/// create_leptos_icons!(AArrowDown, a_arrow_down);
/// create_leptos_icons!(Activity, activity);
/// ```
#[macro_export]
macro_rules! create_leptos_icons {
    ($component_name:ident, $snake_name:ident) => {
        #[component]
        pub fn $component_name(#[prop(into, optional)] class: Signal<String>) -> impl IntoView {
            use leptos::prelude::*;

            use super::parser::parse_svg_elements;
            use super::svg_icon::SvgIcon;

            // Read SVG content at compile time
            const SVG_CONTENT: &str = include_str!(concat!("../../ICONS_TXT/", stringify!($snake_name), ".txt"));
            let elements = parse_svg_elements(SVG_CONTENT);

            view! {
                <SvgIcon class=class>
                    <title>{format!("Rust UI Icons - {}", stringify!($component_name))}</title>

                    {elements.into_iter().map(|element| {
                        element.to_leptos_view()
                    }).collect::<Vec<_>>()}
                </SvgIcon>
            }
        }
    };
}