//! Icons beyond gpui-component's default set, picked from the bundled Lucide //! catalog so only these SVGs end up in the binary. use std::borrow::Cow; use gpui_kit::*; pub use gpui_kit::assets::IconName as Lucide; gpui_kit::assets::icon_assets!(ExtraIcons, [ AlarmClock, AlarmClockOff, Archive, ArchiveX, ArchiveRestore, Bell, Blocks, Brain, ChevronsDownUp, ChevronsUpDown, Code, Feather, CornerDownRight, FileCode, FileDiff, FolderGit2, FolderPlus, Gauge, Github, HardDrive, GitBranch, GitCommitHorizontal, GitPullRequest, Image, Keyboard, Laptop, Layers, Link2, ListOrdered, Lock, MonitorSmartphone, Network, LockOpen, MessageCircleQuestionMark, PanelLeftClose, PanelLeftOpen, PanelRightClose, PanelRightOpen, Paperclip, Pencil, Pi, Pin, PinOff, Plug, Plus, RotateCcw, Server, Settings2, ShieldCheck, SquareDashed, SquareSlash, SlidersHorizontal, Space, Sparkles, SquarePen, SwatchBook, Star, Trash, Undo2, Zap, Bookmark, Bot, CircleDot, Clock3, CornerUpRight, FolderGit, GripVertical, ListPlus, ListTodo, MessageSquareDashed, Minimize2, Monitor, PenLine, PencilRuler, RotateCcwClock, Scale, Shield, Hammer, MessageCircle, Terminal, Wrench, Quote, Download, Clock, CircleDashed, ShieldQuestionMark, Timer, FolderTree, Hash, MailOpen, MessageSquarePlus, ChartNoAxesColumn, SquareMenu, Maximize2, MessageSquare, Link, ArrowUpDown, X, ArrowRightLeft, GitPullRequestArrow, GitMerge, GitPullRequestClosed, GitPullRequestDraft, ListFilter, CloudUpload, CloudDownload, Square, SquareSplitHorizontal, SquareSplitVertical, SquareTerminal, Smartphone, House, Type, Camera, PictureInPicture2, Power, GripHorizontal, CircleArrowUp, RotateCw, ]); /// Forge logos Lucide doesn't have, from Simple Icons (CC0). pub const GITLAB: &str = "icons/brands/gitlab.svg"; pub const AZURE_DEVOPS: &str = "icons/brands/azuredevops.svg"; pub const BITBUCKET: &str = "icons/brands/bitbucket.svg"; pub const FORGEJO: &str = "icons/brands/forgejo.svg"; const BRANDS: &[(&str, &[u8])] = &[ (GITLAB, include_bytes!("../../assets/icons/brands/gitlab.svg")), (AZURE_DEVOPS, include_bytes!("../../assets/icons/brands/azuredevops.svg")), (BITBUCKET, include_bytes!("../../assets/icons/brands/bitbucket.svg")), (FORGEJO, include_bytes!("../../assets/icons/brands/forgejo.svg")), ]; /// The app's asset source: the forge logos, the extra icons, then /// gpui-component's defaults. pub struct AppAssets; impl AssetSource for AppAssets { fn load(&self, path: &str) -> Result>> { if let Some((_, data)) = BRANDS.iter().find(|(brand, _)| *brand == path) { return Ok(Some(Cow::Borrowed(data))); } if let Some(data) = ExtraIcons.load(path)? { return Ok(Some(data)); } gpui_kit::assets::Assets.load(path) } fn list(&self, path: &str) -> Result> { let mut paths = ExtraIcons.list(path)?; paths.extend(gpui_kit::assets::Assets.list(path)?); Ok(paths) } }