Vectrum
Sign In
87 lines · 1.6 KB · Rust
//! 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,
    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,
    SquareSlash,
    SlidersHorizontal,
    Space,
    Sparkles,
    SquarePen,
    SwatchBook,
    Star,
    Trash,
    Undo2,
    Zap,
]);

/// The app's asset source: the extra icons, then gpui-component's defaults.
pub struct AppAssets;

impl AssetSource for AppAssets {
    fn load(&self, path: &str) -> Result<Option<Cow<'static, [u8]>>> {
        if let Some(data) = ExtraIcons.load(path)? {
            return Ok(Some(data));
        }
        gpui_kit::assets::Assets.load(path)
    }

    fn list(&self, path: &str) -> Result<Vec<SharedString>> {
        let mut paths = ExtraIcons.list(path)?;
        paths.extend(gpui_kit::assets::Assets.list(path)?);
        Ok(paths)
    }
}