Sam Jeston
History
104 lines·
6.4 KB
·Rust
| 1 | // Icons from Lucide (https://lucide.dev), ISC License. |
| 2 | // Copyright (c) Lucide Contributors 2022; portions (c) Cole Bemis 2013-2022 (Feather, MIT). |
| 3 | |
| 4 | /// Returns the inner SVG markup for a named icon. |
| 5 | fn body(name: &str) -> &'static str { |
| 6 | match name { |
| 7 | "arrow-right" => r#"<path d="M5 12h14" /><path d="m12 5 7 7-7 7" />"#, |
| 8 | "book-marked" => { |
| 9 | r#"<path d="M10 2v8l3-3 3 3V2" /><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" />"# |
| 10 | } |
| 11 | "check" => r#"<path d="M20 6 9 17l-5-5" />"#, |
| 12 | "chevron-down" => r#"<path d="m6 9 6 6 6-6" />"#, |
| 13 | "circle-alert" => { |
| 14 | r#"<circle cx="12" cy="12" r="10" /><line x1="12" x2="12" y1="8" y2="12" /><line x1="12" x2="12.01" y1="16" y2="16" />"# |
| 15 | } |
| 16 | "circle-check" => r#"<circle cx="12" cy="12" r="10" /><path d="m9 12 2 2 4-4" />"#, |
| 17 | "clock" => r#"<circle cx="12" cy="12" r="10" /><polyline points="12 6 12 12 16 14" />"#, |
| 18 | "code" => r#"<polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" />"#, |
| 19 | "copy" => { |
| 20 | r#"<rect width="14" height="14" x="8" y="8" rx="2" ry="2" /><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />"# |
| 21 | } |
| 22 | "download" => { |
| 23 | r#"<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /><polyline points="7 10 12 15 17 10" /><line x1="12" x2="12" y1="15" y2="3" />"# |
| 24 | } |
| 25 | "file-code" => { |
| 26 | r#"<path d="M10 12.5 8 15l2 2.5" /><path d="m14 12.5 2 2.5-2 2.5" /><path d="M14 2v4a2 2 0 0 0 2 2h4" /><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z" />"# |
| 27 | } |
| 28 | "file-text" => { |
| 29 | r#"<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" /><path d="M14 2v4a2 2 0 0 0 2 2h4" /><path d="M10 9H8" /><path d="M16 13H8" /><path d="M16 17H8" />"# |
| 30 | } |
| 31 | "file" => { |
| 32 | r#"<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" /><path d="M14 2v4a2 2 0 0 0 2 2h4" />"# |
| 33 | } |
| 34 | "folder" => { |
| 35 | r#"<path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" />"# |
| 36 | } |
| 37 | "git-branch" => { |
| 38 | r#"<line x1="6" x2="6" y1="3" y2="15" /><circle cx="18" cy="6" r="3" /><circle cx="6" cy="18" r="3" /><path d="M18 9a9 9 0 0 1-9 9" />"# |
| 39 | } |
| 40 | "git-commit-horizontal" => { |
| 41 | r#"<circle cx="12" cy="12" r="3" /><line x1="3" x2="9" y1="12" y2="12" /><line x1="15" x2="21" y1="12" y2="12" />"# |
| 42 | } |
| 43 | "git-compare" => { |
| 44 | r#"<circle cx="18" cy="18" r="3" /><circle cx="6" cy="6" r="3" /><path d="M13 6h3a2 2 0 0 1 2 2v7" /><path d="M11 18H8a2 2 0 0 1-2-2V9" />"# |
| 45 | } |
| 46 | "git-merge" => { |
| 47 | r#"<circle cx="18" cy="18" r="3" /><circle cx="6" cy="6" r="3" /><path d="M6 21V9a9 9 0 0 0 9 9" />"# |
| 48 | } |
| 49 | "git-pull-request-closed" => { |
| 50 | r#"<circle cx="6" cy="6" r="3" /><path d="M6 9v12" /><path d="m21 3-6 6" /><path d="m21 9-6-6" /><path d="M18 11.5V15" /><circle cx="18" cy="18" r="3" />"# |
| 51 | } |
| 52 | "git-pull-request" => { |
| 53 | r#"<circle cx="18" cy="18" r="3" /><circle cx="6" cy="6" r="3" /><path d="M13 6h3a2 2 0 0 1 2 2v7" /><line x1="6" x2="6" y1="9" y2="21" />"# |
| 54 | } |
| 55 | "globe" => { |
| 56 | r#"<circle cx="12" cy="12" r="10" /><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" /><path d="M2 12h20" />"# |
| 57 | } |
| 58 | "history" => { |
| 59 | r#"<path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" /><path d="M3 3v5h5" /><path d="M12 7v5l4 2" />"# |
| 60 | } |
| 61 | "key-round" => { |
| 62 | r#"<path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z" /><circle cx="16.5" cy="7.5" r=".5" fill="currentColor" />"# |
| 63 | } |
| 64 | "lock" => { |
| 65 | r#"<rect width="18" height="11" x="3" y="11" rx="2" ry="2" /><path d="M7 11V7a5 5 0 0 1 10 0v4" />"# |
| 66 | } |
| 67 | "log-out" => { |
| 68 | r#"<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" /><polyline points="16 17 21 12 16 7" /><line x1="21" x2="9" y1="12" y2="12" />"# |
| 69 | } |
| 70 | "message-square" => { |
| 71 | r#"<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" />"# |
| 72 | } |
| 73 | "plus" => r#"<path d="M5 12h14" /><path d="M12 5v14" />"#, |
| 74 | "search" => r#"<circle cx="11" cy="11" r="8" /><path d="m21 21-4.3-4.3" />"#, |
| 75 | "settings" => { |
| 76 | r#"<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" /><circle cx="12" cy="12" r="3" />"# |
| 77 | } |
| 78 | "tag" => { |
| 79 | r#"<path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z" /><circle cx="7.5" cy="7.5" r=".5" fill="currentColor" />"# |
| 80 | } |
| 81 | "terminal" => { |
| 82 | r#"<polyline points="4 17 10 11 4 5" /><line x1="12" x2="20" y1="19" y2="19" />"# |
| 83 | } |
| 84 | "trash-2" => { |
| 85 | r#"<path d="M3 6h18" /><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" /><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" /><line x1="10" x2="10" y1="11" y2="17" /><line x1="14" x2="14" y1="11" y2="17" />"# |
| 86 | } |
| 87 | "user" => { |
| 88 | r#"<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" /><circle cx="12" cy="7" r="4" />"# |
| 89 | } |
| 90 | "users" => { |
| 91 | r#"<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" /><circle cx="9" cy="7" r="4" /><path d="M22 21v-2a4 4 0 0 0-3-3.87" /><path d="M16 3.13a4 4 0 0 1 0 7.75" />"# |
| 92 | } |
| 93 | "x" => r#"<path d="M18 6 6 18" /><path d="m6 6 12 12" />"#, |
| 94 | _ => "", |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | /// Renders a named icon as an inline SVG element. |
| 99 | pub fn icon(name: &str) -> String { |
| 100 | format!( |
| 101 | r#"<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">{}</svg>"#, |
| 102 | body(name) |
| 103 | ) |
| 104 | } |