AkurAI Build
Menu

Public repository / 8981a62302ff7a56d4372a05dcc249fd4539987f

AkurAI-Framework / crates/ui/src/kit/icons.rs

Latest change ef2b6f39a839842d6f1fa9f1d7d401dee73d9e15 - akurai-ui: play, gamepad and globe icons by Ólafur Búi Ólafsson

//! Stroke icons (24×24, `currentColor`), drawn for this kit in the Lucide
//! style. Each returns an `<svg>` [`El`] sized `size-4`; restyle with `.class`.

use crate::dom::El;
use crate::html::{path, svg};

/// An icon from raw path data.
pub fn icon(d: &'static str) -> El {
    svg()
        .attr("viewBox", "0 0 24 24")
        .attr("fill", "none")
        .attr("stroke", "currentColor")
        .attr("stroke-width", "2")
        .attr("stroke-linecap", "round")
        .attr("stroke-linejoin", "round")
        .attr("aria-hidden", "true")
        .class("size-4 shrink-0")
        .child(path().attr("d", d))
}

macro_rules! icons {
    ($($name:ident => $d:literal),+ $(,)?) => {$(
        pub fn $name() -> El {
            icon($d)
        }
    )+};
}

icons! {
    plus => "M5 12h14M12 5v14",
    x => "M18 6 6 18M6 6l12 12",
    check => "M20 6 9 17l-5-5",
    chevron_left => "m15 18-6-6 6-6",
    chevron_right => "m9 18 6-6-6-6",
    chevron_down => "m6 9 6 6 6-6",
    calendar => "M8 2v4M16 2v4M3 10h18M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z",
    home => "M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6H9v6H4a1 1 0 0 1-1-1z",
    list_checks => "m3 7 2 2 4-4M3 17l2 2 4-4M13 7h8M13 17h8",
    cart => "M3 3h2l2.4 12.2a2 2 0 0 0 2 1.6h8.2a2 2 0 0 0 2-1.6L21 7H6M9 21a1 1 0 1 0 0-2 1 1 0 0 0 0 2zM18 21a1 1 0 1 0 0-2 1 1 0 0 0 0 2z",
    utensils => "M4 3v7a3 3 0 0 0 6 0V3M7 3v18M17 3c-2 2-3 4.5-3 7.5V13h3v8",
    users => "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75",
    trash => "M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6",
    pencil => "M17 3a2.83 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5z",
    clock => "M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20zM12 6v6l4 2",
    map_pin => "M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0zM12 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",
    log_out => "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9",
    sliders => "M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6",
    sparkles => "M12 3l1.9 5.1L19 10l-5.1 1.9L12 17l-1.9-5.1L5 10l5.1-1.9zM19 3v4M17 5h4",
    repeat => "m17 2 4 4-4 4M3 11v-1a4 4 0 0 1 4-4h14M7 22l-4-4 4-4M21 13v1a4 4 0 0 1-4 4H3",
    menu => "M4 6h16M4 12h16M4 18h16",
    moon => "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9z",
    sun => "M12 17a5 5 0 1 0 0-10 5 5 0 0 0 0 10zM12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2M4.2 19.8l1.4-1.4M18.4 5.6l1.4-1.4",
    copy => "M8 8h12v12H8zM4 16V4h12",
    star => "m12 2 3.1 6.3 6.9 1-5 4.9 1.2 6.8-6.2-3.2L5.8 21 7 14.2 2 9.3l6.9-1z",
    play => "M6 3l14 9-14 9z",
    gamepad => "M6 12h4M8 10v4M15 13h.01M18 11h.01M17.3 5H6.7a4 4 0 0 0-3.96 3.43l-.71 5A4 4 0 0 0 6 18c1.06 0 2.08-.42 2.83-1.17L10 15.66h4l1.17 1.17A4 4 0 0 0 18 18a4 4 0 0 0 3.97-4.57l-.71-5A4 4 0 0 0 17.3 5z",
    globe => "M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20zM2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z",
}