dioxus-icons 0.0.1

Lucide icons for Dioxus, one component per icon.
Documentation
use dioxus::prelude::*;
use dioxus::ssr::render_element;
use dioxus_icons::lucide::{Calendar1, Trash, Type};

fn render_icon(element: Element) -> String {
    render_element(element)
}

#[test]
fn default_svg_shape() {
    let html = render_icon(rsx! { Trash {} });

    assert!(html.starts_with("<svg "));
    assert!(html.contains(r#"xmlns="http://www.w3.org/2000/svg""#));
    assert!(html.contains(r#"width="24""#));
    assert!(html.contains(r#"height="24""#));
    assert!(html.contains(r#"viewBox="0 0 24 24""#));
    assert!(html.contains(r#"fill="none""#));
    assert!(html.contains(r#"stroke="currentColor""#));
    assert!(html.contains(r#"stroke-width="2""#));
    assert!(html.contains(r#"stroke-linecap="round""#));
    assert!(html.contains(r#"stroke-linejoin="round""#));
    assert!(!html.contains("class="));
    assert!(html.contains(r#"<path d="M19 6v14"#));
}

#[test]
fn props_map_to_svg_attributes() {
    let html = render_icon(rsx! {
        Trash {
            size: 32,
            color: "red",
            stroke_width: 3,
            stroke_linecap: "butt",
            stroke_linejoin: "bevel",
            class: "text-red-500",
        }
    });

    assert!(html.contains(r#"width="32""#));
    assert!(html.contains(r#"height="32""#));
    assert!(html.contains(r#"fill="none""#));
    assert!(html.contains(r#"stroke="red""#));
    assert!(!html.contains(r#"fill="red""#));
    assert!(html.contains(r#"stroke-width="3""#));
    assert!(html.contains(r#"stroke-linecap="butt""#));
    assert!(html.contains(r#"stroke-linejoin="bevel""#));
    assert!(html.contains(r#"class="text-red-500""#));
}

#[test]
fn public_imports_cover_keyword_and_numeric_names() {
    assert!(render_icon(rsx! { Type {} }).contains(r#"viewBox="0 0 24 24""#));
    assert!(render_icon(rsx! { Calendar1 {} }).contains(r#"viewBox="0 0 24 24""#));
}