1use std::sync::Arc;
  2
  3use serde::{Deserialize, Serialize};
  4use strum::{EnumIter, EnumString, IntoStaticStr};
  5
  6#[derive(
  7    Debug, PartialEq, Eq, Copy, Clone, EnumIter, EnumString, IntoStaticStr, Serialize, Deserialize,
  8)]
  9#[strum(serialize_all = "snake_case")]
 10pub enum IconName {
 11    Ai,
 12    AiAnthropic,
 13    AiBedrock,
 14    AiClaude,
 15    AiDeepSeek,
 16    AiEdit,
 17    AiGemini,
 18    AiGoogle,
 19    AiLmStudio,
 20    AiMistral,
 21    AiOllama,
 22    AiOpenAi,
 23    AiOpenAiCompat,
 24    AiOpenRouter,
 25    AiVZero,
 26    AiXAi,
 27    AiZed,
 28    ArrowCircle,
 29    ArrowDown,
 30    ArrowDown10,
 31    ArrowDownRight,
 32    ArrowLeft,
 33    ArrowRight,
 34    ArrowRightLeft,
 35    ArrowUp,
 36    ArrowUpRight,
 37    Attach,
 38    AudioOff,
 39    AudioOn,
 40    Backspace,
 41    Bell,
 42    BellDot,
 43    BellOff,
 44    BellRing,
 45    Binary,
 46    Blocks,
 47    BoltOutlined,
 48    BoltFilled,
 49    Book,
 50    BookCopy,
 51    CaseSensitive,
 52    Chat,
 53    Check,
 54    CheckDouble,
 55    ChevronDown,
 56    ChevronDownUp,
 57    ChevronLeft,
 58    ChevronRight,
 59    ChevronUp,
 60    ChevronUpDown,
 61    Circle,
 62    CircleHelp,
 63    Close,
 64    CloudDownload,
 65    Code,
 66    Cog,
 67    Command,
 68    Control,
 69    Copilot,
 70    CopilotDisabled,
 71    CopilotError,
 72    CopilotInit,
 73    Copy,
 74    CountdownTimer,
 75    Crosshair,
 76    CursorIBeam,
 77    Dash,
 78    DatabaseZap,
 79    Debug,
 80    DebugBreakpoint,
 81    DebugContinue,
 82    DebugDisabledBreakpoint,
 83    DebugDisabledLogBreakpoint,
 84    DebugDetach,
 85    DebugIgnoreBreakpoints,
 86    DebugLogBreakpoint,
 87    DebugPause,
 88    DebugStepBack,
 89    DebugStepInto,
 90    DebugStepOut,
 91    DebugStepOver,
 92    Diff,
 93    Disconnected,
 94    Download,
 95    EditorAtom,
 96    EditorCursor,
 97    EditorEmacs,
 98    EditorJetBrains,
 99    EditorSublime,
100    EditorVsCode,
101    Ellipsis,
102    EllipsisVertical,
103    Envelope,
104    Eraser,
105    Escape,
106    Exit,
107    ExpandDown,
108    ExpandUp,
109    ExpandVertical,
110    Eye,
111    File,
112    FileCode,
113    FileDiff,
114    FileDoc,
115    FileGeneric,
116    FileGit,
117    FileLock,
118    FileMarkdown,
119    FileRust,
120    FileTextFilled,
121    FileTextOutlined,
122    FileToml,
123    FileTree,
124    Filter,
125    Flame,
126    Folder,
127    FolderOpen,
128    FolderSearch,
129    Font,
130    FontSize,
131    FontWeight,
132    ForwardArrow,
133    GenericClose,
134    GenericMaximize,
135    GenericMinimize,
136    GenericRestore,
137    GitBranch,
138    GitBranchAlt,
139    Github,
140    Hash,
141    HistoryRerun,
142    Image,
143    Indicator,
144    Info,
145    Json,
146    Keyboard,
147    Library,
148    LineHeight,
149    Link,
150    ListCollapse,
151    ListFilter,
152    ListTodo,
153    ListTree,
154    ListX,
155    LoadCircle,
156    LocationEdit,
157    LockOutlined,
158    MagnifyingGlass,
159    Maximize,
160    Menu,
161    MenuAlt,
162    MenuAltTemp,
163    Mic,
164    MicMute,
165    Minimize,
166    Notepad,
167    Option,
168    PageDown,
169    PageUp,
170    Paperclip,
171    Pencil,
172    PencilUnavailable,
173    Person,
174    Pin,
175    PlayOutlined,
176    PlayFilled,
177    Plus,
178    Power,
179    Public,
180    PullRequest,
181    Quote,
182    Reader,
183    RefreshTitle,
184    Regex,
185    ReplNeutral,
186    Replace,
187    ReplaceAll,
188    ReplaceNext,
189    ReplyArrowRight,
190    Rerun,
191    Return,
192    RotateCcw,
193    RotateCw,
194    Scissors,
195    Screen,
196    SelectAll,
197    Send,
198    Server,
199    Settings,
200    ShieldCheck,
201    Shift,
202    Slash,
203    Sliders,
204    Space,
205    Sparkle,
206    Split,
207    SplitAlt,
208    SquareDot,
209    SquareMinus,
210    SquarePlus,
211    Star,
212    StarFilled,
213    Stop,
214    Supermaven,
215    SupermavenDisabled,
216    SupermavenError,
217    SupermavenInit,
218    SwatchBook,
219    Tab,
220    Terminal,
221    TerminalAlt,
222    TerminalGhost,
223    TextSnippet,
224    TextThread,
225    Thread,
226    ThreadFromSummary,
227    ThumbsDown,
228    ThumbsUp,
229    TodoComplete,
230    TodoPending,
231    TodoProgress,
232    ToolCopy,
233    ToolDeleteFile,
234    ToolDiagnostics,
235    ToolFolder,
236    ToolHammer,
237    ToolNotification,
238    ToolPencil,
239    ToolRead,
240    ToolRegex,
241    ToolSearch,
242    ToolTerminal,
243    ToolThink,
244    ToolWeb,
245    Trash,
246    Triangle,
247    TriangleRight,
248    Undo,
249    Unpin,
250    UserCheck,
251    UserGroup,
252    UserRoundPen,
253    Warning,
254    WholeWord,
255    XCircle,
256    XCircleFilled,
257    ZedAgent,
258    ZedAssistant,
259    ZedBurnMode,
260    ZedBurnModeOn,
261    ZedMcpCustom,
262    ZedMcpExtension,
263    ZedPredict,
264    ZedPredictDisabled,
265    ZedPredictDown,
266    ZedPredictError,
267    ZedPredictUp,
268    ZedXCopilot,
269    Linux,
270}
271
272impl IconName {
273    /// Returns the path to this icon.
274    pub fn path(&self) -> Arc<str> {
275        let file_stem: &'static str = self.into();
276        format!("icons/{file_stem}.svg").into()
277    }
278}