#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
#[repr(usize)]
pub enum IconName {
Copy,
Check,
Close,
Plus,
Minus,
Search,
Edit,
Trash,
Download,
Upload,
Share,
Link,
ExternalLink,
Refresh,
Undo,
Redo,
Filter,
Settings,
Maximize,
Minimize,
Menu,
MoreHorizontal,
MoreVertical,
ChevronUp,
ChevronDown,
ChevronStart,
ChevronEnd,
ArrowUp,
ArrowDown,
ArrowStart,
ArrowEnd,
Home,
Sidebar,
Info,
Success,
Warning,
Error,
Help,
Lock,
Eye,
EyeOff,
Bell,
Star,
Clock,
Send,
Stop,
Play,
Pause,
Mic,
Attach,
ThumbsUp,
ThumbsDown,
Sparkles,
User,
Mail,
File,
Folder,
Image,
Code,
Terminal,
GitBranch,
Calendar,
Bookmark,
Globe,
Sun,
Moon,
}
struct IconData {
name: &'static str,
path: &'static str,
mirror: bool,
}
const DATA: &[IconData] = &[
IconData { name: "copy", path: "M11 9h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-8a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2zM15 9V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h4", mirror: false },
IconData { name: "check", path: "M5 12.5l4.5 4.5L19 7.5", mirror: false },
IconData { name: "close", path: "M6 6l12 12M18 6L6 18", mirror: false },
IconData { name: "plus", path: "M12 5v14M5 12h14", mirror: false },
IconData { name: "minus", path: "M5 12h14", mirror: false },
IconData { name: "search", path: "M11 4.5a6.5 6.5 0 1 0 0 13a6.5 6.5 0 1 0 0-13zM15.6 15.6L20 20", mirror: false },
IconData { name: "edit", path: "M4 20h4L19 9a2.83 2.83 0 0 0-4-4L4 16zM13.5 6.5l4 4", mirror: false },
IconData { name: "trash", path: "M4 7h16M10 11v6M14 11v6M6 7l1 12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2l1-12M9 7V4h6v3", mirror: false },
IconData { name: "download", path: "M12 4v11M7 10l5 5 5-5M5 20h14", mirror: false },
IconData { name: "upload", path: "M12 16V5M7 10l5-5 5 5M5 20h14", mirror: false },
IconData { name: "share", path: "M18 2.5a2.5 2.5 0 1 0 0 5a2.5 2.5 0 1 0 0-5zM6 9.5a2.5 2.5 0 1 0 0 5a2.5 2.5 0 1 0 0-5zM18 16.5a2.5 2.5 0 1 0 0 5a2.5 2.5 0 1 0 0-5zM8.2 10.8l7.6-4.5M8.2 13.2l7.6 4.5", mirror: false },
IconData { name: "link", path: "M10 14a4 4 0 0 0 5.66 0l3-3a4 4 0 0 0-5.66-5.66l-1 1M14 10a4 4 0 0 0-5.66 0l-3 3a4 4 0 0 0 5.66 5.66l1-1", mirror: false },
IconData { name: "external-link", path: "M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5", mirror: true },
IconData { name: "refresh", path: "M20 12a8 8 0 1 1-2.34-5.66M20 4v4h-4", mirror: false },
IconData { name: "undo", path: "M9 14L4 9l5-5M4 9h10a6 6 0 0 1 0 12h-3", mirror: true },
IconData { name: "redo", path: "M15 14l5-5-5-5M20 9H10a6 6 0 0 0 0 12h3", mirror: true },
IconData { name: "filter", path: "M3 5h18l-7 8v6l-4 2v-8z", mirror: false },
IconData { name: "settings", path: "M4 6h9M17 6h3M4 12h3M11 12h9M4 18h11M19 18h1M15 4v4M9 10v4M17 16v4", mirror: false },
IconData { name: "maximize", path: "M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7", mirror: false },
IconData { name: "minimize", path: "M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7", mirror: false },
IconData { name: "menu", path: "M4 6h16M4 12h16M4 18h16", mirror: false },
IconData { name: "more-horizontal", path: "M5 11a1 1 0 1 0 0 2a1 1 0 1 0 0-2zM12 11a1 1 0 1 0 0 2a1 1 0 1 0 0-2zM19 11a1 1 0 1 0 0 2a1 1 0 1 0 0-2z", mirror: false },
IconData { name: "more-vertical", path: "M12 4a1 1 0 1 0 0 2a1 1 0 1 0 0-2zM12 11a1 1 0 1 0 0 2a1 1 0 1 0 0-2zM12 18a1 1 0 1 0 0 2a1 1 0 1 0 0-2z", mirror: false },
IconData { name: "chevron-up", path: "M6 15l6-6 6 6", mirror: false },
IconData { name: "chevron-down", path: "M6 9l6 6 6-6", mirror: false },
IconData { name: "chevron-start", path: "M15 6l-6 6 6 6", mirror: true },
IconData { name: "chevron-end", path: "M9 6l6 6-6 6", mirror: true },
IconData { name: "arrow-up", path: "M12 19V5M6 11l6-6 6 6", mirror: false },
IconData { name: "arrow-down", path: "M12 5v14M6 13l6 6 6-6", mirror: false },
IconData { name: "arrow-start", path: "M19 12H5M11 6l-6 6 6 6", mirror: true },
IconData { name: "arrow-end", path: "M5 12h14M13 6l6 6-6 6", mirror: true },
IconData { name: "home", path: "M3 11l9-7 9 7M5 9.5V20h5v-6h4v6h5V9.5", mirror: false },
IconData { name: "sidebar", path: "M5 4h14a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1zM9 4v16", mirror: true },
IconData { name: "info", path: "M12 3a9 9 0 1 0 0 18a9 9 0 1 0 0-18zM12 11v5M12 8h.01", mirror: false },
IconData { name: "success", path: "M12 3a9 9 0 1 0 0 18a9 9 0 1 0 0-18zM8 12.5l2.5 2.5L16 9.5", mirror: false },
IconData { name: "warning", path: "M10.3 4.2L2.8 17.5a2 2 0 0 0 1.7 3h15a2 2 0 0 0 1.7-3L13.7 4.2a2 2 0 0 0-3.4 0zM12 9v4M12 17h.01", mirror: false },
IconData { name: "error", path: "M12 3a9 9 0 1 0 0 18a9 9 0 1 0 0-18zM12 7.5v5M12 16h.01", mirror: false },
IconData { name: "help", path: "M12 3a9 9 0 1 0 0 18a9 9 0 1 0 0-18zM9.5 9.5a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6v.6M12 17h.01", mirror: false },
IconData { name: "lock", path: "M6 11h12a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1zM8 11V7a4 4 0 0 1 8 0v4", mirror: false },
IconData { name: "eye", path: "M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12zM12 9a3 3 0 1 0 0 6a3 3 0 1 0 0-6z", mirror: false },
IconData { name: "eye-off", path: "M10.6 5.1A10.6 10.6 0 0 1 12 5c6.5 0 10 7 10 7a17 17 0 0 1-2.2 3.2M6.6 6.6A16.6 16.6 0 0 0 2 12s3.5 7 10 7a9.7 9.7 0 0 0 5.4-1.6M9.9 9.9a3 3 0 0 0 4.2 4.2M3 3l18 18", mirror: false },
IconData { name: "bell", path: "M6 16v-5a6 6 0 0 1 12 0v5l2 2H4zM10 21h4", mirror: false },
IconData { name: "star", path: "M12 3L14.5 9.1L21 9.6L16 13.8L17.6 20.2L12 16.7L6.4 20.2L8 13.8L3 9.6L9.5 9.1z", mirror: false },
IconData { name: "clock", path: "M12 3a9 9 0 1 0 0 18a9 9 0 1 0 0-18zM12 7v5l3 2", mirror: false },
IconData { name: "send", path: "M21 3L10 14M21 3l-7 18-4-7-7-4z", mirror: true },
IconData { name: "stop", path: "M8 6h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z", mirror: false },
IconData { name: "play", path: "M7 4.5v15l12-7.5z", mirror: false },
IconData { name: "pause", path: "M8 5v14M16 5v14", mirror: false },
IconData { name: "mic", path: "M12 3a3 3 0 0 0-3 3v6a3 3 0 0 0 6 0V6a3 3 0 0 0-3-3zM5 11a7 7 0 0 0 14 0M12 18v3", mirror: false },
IconData { name: "attach", path: "M20 11.5l-8 8a5 5 0 0 1-7-7l8.5-8.5a3.3 3.3 0 0 1 4.7 4.7L9.7 17.2a1.7 1.7 0 0 1-2.4-2.4L15 7", mirror: false },
IconData { name: "thumbs-up", path: "M7 11v10M7 11l4-8a2 2 0 0 1 2.5 2v4h5.3a2 2 0 0 1 2 2.4l-1.4 6A2 2 0 0 1 17.4 21H4a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1z", mirror: false },
IconData { name: "thumbs-down", path: "M7 13V3M7 13l4 8a2 2 0 0 0 2.5-2v-4h5.3a2 2 0 0 0 2-2.4l-1.4-6A2 2 0 0 0 17.4 3H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1z", mirror: false },
IconData { name: "sparkles", path: "M11 3l1.8 5.2L18 10l-5.2 1.8L11 17l-1.8-5.2L4 10l5.2-1.8zM19 15v5M16.5 17.5h5", mirror: false },
IconData { name: "user", path: "M12 4a4 4 0 1 0 0 8a4 4 0 1 0 0-8zM4 20a8 6 0 0 1 16 0", mirror: false },
IconData { name: "mail", path: "M4 5h16a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1zM3 7l9 6 9-6", mirror: false },
IconData { name: "file", path: "M6 3h8l5 5v12a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zM14 3v5h5", mirror: false },
IconData { name: "folder", path: "M3 6a1 1 0 0 1 1-1h5l2 2h9a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1z", mirror: false },
IconData { name: "image", path: "M5 4h14a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1zM9 8a1.5 1.5 0 1 0 0 3a1.5 1.5 0 1 0 0-3zM20 15l-5-5L5 20", mirror: false },
IconData { name: "code", path: "M9 7l-5 5 5 5M15 7l5 5-5 5", mirror: false },
IconData { name: "terminal", path: "M4 6l6 6-6 6M12 18h8", mirror: false },
IconData { name: "git-branch", path: "M6 3v12M18 3a3 3 0 1 0 0 6a3 3 0 1 0 0-6zM6 15a3 3 0 1 0 0 6a3 3 0 1 0 0-6zM18 9a9 9 0 0 1-9 9", mirror: false },
IconData { name: "calendar", path: "M5 5h14a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1zM4 10h16M8 3v4M16 3v4", mirror: false },
IconData { name: "bookmark", path: "M6 3h12v18l-6-4-6 4z", mirror: false },
IconData { name: "globe", path: "M12 3a9 9 0 1 0 0 18a9 9 0 1 0 0-18zM3 12h18M12 3a14 14 0 0 1 0 18a14 14 0 0 1 0-18z", mirror: false },
IconData { name: "sun", path: "M12 8a4 4 0 1 0 0 8a4 4 0 1 0 0-8zM12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4", mirror: false },
IconData { name: "moon", path: "M20 14A8 8 0 1 1 10 4a6.5 6.5 0 0 0 10 10z", mirror: false },
];
pub const ICON_VIEWBOX: &str = "0 0 24 24";
pub const ICON_STROKE_WIDTH: &str = "2";
impl IconName {
pub const ALL: &'static [Self] = &[
Self::Copy,
Self::Check,
Self::Close,
Self::Plus,
Self::Minus,
Self::Search,
Self::Edit,
Self::Trash,
Self::Download,
Self::Upload,
Self::Share,
Self::Link,
Self::ExternalLink,
Self::Refresh,
Self::Undo,
Self::Redo,
Self::Filter,
Self::Settings,
Self::Maximize,
Self::Minimize,
Self::Menu,
Self::MoreHorizontal,
Self::MoreVertical,
Self::ChevronUp,
Self::ChevronDown,
Self::ChevronStart,
Self::ChevronEnd,
Self::ArrowUp,
Self::ArrowDown,
Self::ArrowStart,
Self::ArrowEnd,
Self::Home,
Self::Sidebar,
Self::Info,
Self::Success,
Self::Warning,
Self::Error,
Self::Help,
Self::Lock,
Self::Eye,
Self::EyeOff,
Self::Bell,
Self::Star,
Self::Clock,
Self::Send,
Self::Stop,
Self::Play,
Self::Pause,
Self::Mic,
Self::Attach,
Self::ThumbsUp,
Self::ThumbsDown,
Self::Sparkles,
Self::User,
Self::Mail,
Self::File,
Self::Folder,
Self::Image,
Self::Code,
Self::Terminal,
Self::GitBranch,
Self::Calendar,
Self::Bookmark,
Self::Globe,
Self::Sun,
Self::Moon,
];
#[must_use]
pub fn as_str(self) -> &'static str {
DATA.get(self as usize).map_or("", |data| data.name)
}
#[must_use]
pub fn path(self) -> &'static str {
DATA.get(self as usize).map_or("", |data| data.path)
}
#[must_use]
pub fn mirrored(self) -> bool {
DATA.get(self as usize).is_some_and(|data| data.mirror)
}
#[must_use]
pub fn from_name(name: &str) -> Option<Self> {
Self::ALL.iter().copied().find(|icon| icon.as_str() == name)
}
}