Sources/Source/Resources/SourceIcon.swift (409 lines of code) (raw):

// // SourceIcon.swift // Source // // Created by Benjamin Briggs on 06/02/2025. // import SwiftUI public extension Image { init(source: SourceIcon) { self.init( source.imageName, bundle: Bundle.module ) } } public enum SourceIcon: CaseIterable { case alertTriangle case directDebitWide case whiteArrowLeftStraightRound case alertPhone case alertRound case appleBrand case arrowContract case arrowDownStraight case arrowExpand case arrowLeftStraight case arrowOutdent case arrowPopOut case arrowRightStraight case arrowScroll case arrowUpAndDownSmall case arrowUpStraightSmall case arrowUpStraight case asterisk case audioMute case audio case bookmarkCross case bookmarkFilled case bookmarkRoundFilled case calendar case camera case checkmark case chevronDownDouble case chevronDownSingle case chevronLeftDouble case chevronLeftSingle case chevronRightDouble case chevronRightSingle case chevronUpDouble case chevronUpSingle case clockBaselineSmall case clockFilled case clockOutlined case creditCard case cross case crosswords case directDebit case discover case document case download case dragHandle case edit case ellipsis case envelope case exclamation case external case eyeStrike case eye case facebookBrand case facebookMessenger case facebook case filterAndroidAppSmall case filter case gift case gps case handPointed case headphonesRoundFilled case homeHouseFilled case houseCross case housePlus case houseSetting case indent case infoRound case linkedIn case list case locationMarker case magnifyingGlassMinus case magnifyingGlassPlus case magnifyingGlassSadFace case magnifyingGlass case mediaControlsBack case mediaControlsForward case mediaControlsPause case mediaControlsPlay case mediaControlsStop case menu case minus case moon case newsletter case newspaperArchive case notificationsOff case notificationsOn case padlock case partyOfThree case payPalBrand case personCross case personPlus case personTick case person case phone case pinterest case plus case quote case reload case settings case shareCallout case shareRoundFilled case shareWeb case speechBubbleCross case speechBubblePlus case speechBubble case star case textLarge case textSizeRoundFilled case textSize case textSmall case tickRound case transparentArrowLeftStraightRound case upload case video case whatsApp case addToBasket case alarmClockFilled case alarmClockOutlined case alarmClockSounded case allRecipes case bin case bookOutlined case bookmarkOutlined case bookmarkRoundOutlined case cameraRoundOutlined case cameraSmall case chef case chevronDownSingleSmall case chevronDownSingleXSmall case chevronLeftSmall case chevronRightSmall case chevronUpAndDownSmall case chevronUpSingleSmall case crossRoundFilled case crossRoundOutlined case crossSmall case crossedOutCloud case cuisine case diets case filterAndroidApp case filterIOSAppSmall case filterIOSApp case filterOutlinedWeb case folderFilled case folder case globe case googleBrand case headphonesFilled case headphonesOutlined case headphonesRoundOutlined case homeHouseOutlined case homeSquareFilled case homeSquareOutlined case ingredient1 case ingredient2 case ingredient3 case knifeAndFork case mealTypes case messageRound case message case newsletterOutlined case noteFilled case noteOutlined case notificationsOffRound case notificationsOnRound case padlockLocked case padlockUnlocked case partyPopperFilled case partyPopperOutlined case personRoundFilled case personRoundOutlined case pinned case plusOnRound case shareAppSmall case shareApp case shareRoundOutline case shoppingBasket case shoppingList case signalBrand case sort case starOutline case telegramBrand case textSizeRoundOutline case timer case twitter case whatsAppBrand } extension SourceIcon { var imageName: String { switch self { case .alertTriangle: "alert-triangle" case .directDebitWide: "direct-debit-wide" case .whiteArrowLeftStraightRound: "white-arrow-left-straight-round" case .alertPhone: "alert-phone" case .alertRound: "alert-round" case .appleBrand: "apple-brand" case .arrowContract: "arrow-contract" case .arrowDownStraight: "arrow-down-straight" case .arrowExpand: "arrow-expand" case .arrowLeftStraight: "arrow-left-straight" case .arrowOutdent: "arrow-outdent" case .arrowPopOut: "arrow-pop-out" case .arrowRightStraight: "arrow-right-straight" case .arrowScroll: "arrow-scroll" case .arrowUpAndDownSmall: "arrow-up-and-down-small" case .arrowUpStraightSmall: "arrow-up-straight-small" case .arrowUpStraight: "arrow-up-straight" case .asterisk: "asterisk" case .audioMute: "audio-mute" case .audio: "audio" case .bookmarkCross: "bookmark-cross" case .bookmarkFilled: "bookmark-filled" case .bookmarkRoundFilled: "bookmark-round-filled" case .calendar: "calendar" case .camera: "camera" case .checkmark: "checkmark" case .chevronDownDouble: "chevron-down-double" case .chevronDownSingle: "chevron-down-single" case .chevronLeftDouble: "chevron-left-double" case .chevronLeftSingle: "chevron-left-single" case .chevronRightDouble: "chevron-right-double" case .chevronRightSingle: "chevron-right-single" case .chevronUpDouble: "chevron-up-double" case .chevronUpSingle: "chevron-up-single" case .clockBaselineSmall: "clock-baseline-small" case .clockFilled: "clock-filled" case .clockOutlined: "clock-outlined" case .creditCard: "credit-card" case .cross: "cross" case .crosswords: "crosswords" case .directDebit: "direct-debit" case .discover: "discover" case .document: "document" case .download: "download" case .dragHandle: "drag-handle" case .edit: "edit" case .ellipsis: "ellipsis" case .envelope: "envelope" case .exclamation: "exclamation" case .external: "external" case .eyeStrike: "eye-strike" case .eye: "eye" case .facebookBrand: "facebook-brand" case .facebookMessenger: "facebook-messenger" case .facebook: "facebook" case .filterAndroidAppSmall: "filter-android-app-small" case .filter: "filter" case .gift: "gift" case .gps: "gps" case .handPointed: "hand-pointed" case .headphonesRoundFilled: "headphones-round-filled" case .homeHouseFilled: "home-house-filled" case .houseCross: "house-cross" case .housePlus: "house-plus" case .houseSetting: "house-setting" case .indent: "indent" case .infoRound: "info-round" case .ingredient1: "ingredient-1" case .linkedIn: "linked-in" case .list: "list" case .locationMarker: "location-marker" case .magnifyingGlassMinus: "magnifying-glass-minus" case .magnifyingGlassPlus: "magnifying-glass-plus" case .magnifyingGlassSadFace: "magnifying-glass-sad-face" case .magnifyingGlass: "magnifying-glass" case .mediaControlsBack: "media-controls-back" case .mediaControlsForward: "media-controls-forward" case .mediaControlsPause: "media-controls-pause" case .mediaControlsPlay: "media-controls-play" case .mediaControlsStop: "media-controls-stop" case .menu: "menu" case .minus: "minus" case .moon: "moon" case .newsletter: "newsletter" case .newspaperArchive: "newspaper-archive" case .notificationsOff: "notifications-off" case .notificationsOn: "notifications-on" case .padlock: "padlock" case .partyOfThree: "party-of-three" case .payPalBrand: "pay-pal-brand" case .personCross: "person-cross" case .personPlus: "person-plus" case .personTick: "person-tick" case .person: "person" case .phone: "phone" case .pinterest: "pinterest" case .plus: "plus" case .quote: "quote" case .reload: "reload" case .settings: "settings" case .shareCallout: "share-callout" case .shareRoundFilled: "share-round-filled" case .shareWeb: "share-web" case .speechBubbleCross: "speech-bubble-cross" case .speechBubblePlus: "speech-bubble-plus" case .speechBubble: "speech-bubble" case .star: "star" case .textLarge: "text-large" case .textSizeRoundFilled: "text-size-round-filled" case .textSize: "text-size" case .textSmall: "text-small" case .tickRound: "tick-round" case .transparentArrowLeftStraightRound: "transparent-arrow-left-straight-round" case .upload: "upload" case .video: "video" case .whatsApp: "whats-app" case .addToBasket: "add-to-basket" case .alarmClockFilled: "alarm-clock-filled" case .alarmClockOutlined: "alarm-clock-outlined" case .alarmClockSounded: "alarm-clock-sounded" case .allRecipes: "all-recipes" case .bin: "bin" case .bookOutlined: "book-outlined" case .bookmarkOutlined: "bookmark-outlined" case .bookmarkRoundOutlined: "bookmark-round-outlined" case .cameraRoundOutlined: "camera-round-outlined" case .cameraSmall: "camera-small" case .chef: "chef" case .chevronDownSingleSmall: "chevron-down-single-small" case .chevronDownSingleXSmall: "chevron-down-single-xsmall" case .chevronLeftSmall: "chevron-left-small" case .chevronRightSmall: "chevron-right-small" case .chevronUpAndDownSmall: "chevron-up-and-down-small" case .chevronUpSingleSmall: "chevron-up-single-small" case .crossRoundFilled: "cross-round-filled" case .crossRoundOutlined: "cross-round-outlined" case .crossSmall: "cross-small" case .crossedOutCloud: "crossed-out-cloud" case .cuisine: "cuisine" case .diets: "diets" case .filterAndroidApp: "filter-android-app" case .filterIOSAppSmall: "filter-ios-app-small" case .filterIOSApp: "filter-ios-app" case .filterOutlinedWeb: "filter-outlined-web" case .folderFilled: "folder-filled" case .folder: "folder" case .globe: "globe" case .googleBrand: "google-brand" case .headphonesFilled: "headphones-filled" case .headphonesOutlined: "headphones-outlined" case .headphonesRoundOutlined: "headphones-round-outlined" case .homeHouseOutlined: "home-house-outlined" case .homeSquareFilled: "home-square-filled" case .homeSquareOutlined: "home-square-outlined" case .ingredient2: "ingredient-2" case .ingredient3: "ingredient-3" case .knifeAndFork: "knife-and-fork" case .mealTypes: "meal-types" case .messageRound: "message-round" case .message: "message" case .newsletterOutlined: "newsletter-outlined" case .noteFilled: "note-filled" case .noteOutlined: "note-outlined" case .notificationsOffRound: "notifications-off-round" case .notificationsOnRound: "notifications-on-round" case .padlockLocked: "padlock-locked" case .padlockUnlocked: "padlock-unlocked" case .partyPopperFilled: "party-popper-filled" case .partyPopperOutlined: "party-popper-outlined" case .personRoundFilled: "person-round-filled" case .personRoundOutlined: "person-round-outlined" case .pinned: "pinned" case .plusOnRound: "plus-on-round" case .shareAppSmall: "share-app-small" case .shareApp: "share-app" case .shareRoundOutline: "share-round-outline" case .shoppingBasket: "shopping-basket" case .shoppingList: "shopping-list" case .signalBrand: "signal-brand" case .sort: "sort" case .starOutline: "star-outline" case .telegramBrand: "telegram-brand" case .textSizeRoundOutline: "text-size-round-outline" case .timer: "timer" case .twitter: "twitter" case .whatsAppBrand: "whats-app-brand" } } } #Preview { ScrollView { LazyVGrid( columns: Array.init( repeating: GridItem(.flexible()), count: 1 ) ) { ForEach(SourceIcon.allCases, id:\.self) { icon in HStack { Image(source: icon) .tint(.primary) Text(icon.imageName) Spacer() } } } .padding() } }