// swiftlint:disable all
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen

#if os(macOS)
  import AppKit
#elseif os(iOS)
  import UIKit
#elseif os(tvOS) || os(watchOS)
  import UIKit
#endif

// Deprecated typealiases
@available(*, deprecated, renamed: "ImageAsset.Image", message: "This typealias will be removed in SwiftGen 7.0")
public typealias AssetImageTypeAlias = ImageAsset.Image

// swiftlint:disable superfluous_disable_command file_length implicit_return

// MARK: - Asset Catalogs

// swiftlint:disable identifier_name line_length nesting type_body_length type_name
public enum Asset {
  public static let alert16 = ImageAsset(name: "alert-16")
  public static let alert24 = ImageAsset(name: "alert-24")
  public static let alertFilled16 = ImageAsset(name: "alert-filled-16")
  public static let alertFilled24 = ImageAsset(name: "alert-filled-24")
  public static let archive16 = ImageAsset(name: "archive-16")
  public static let archive24 = ImageAsset(name: "archive-24")
  public static let arrowBoth24 = ImageAsset(name: "arrow-both-24")
  public static let arrowDown16 = ImageAsset(name: "arrow-down-16")
  public static let arrowDown24 = ImageAsset(name: "arrow-down-24")
  public static let arrowDownLeft24 = ImageAsset(name: "arrow-down-left-24")
  public static let arrowDownRight24 = ImageAsset(name: "arrow-down-right-24")
  public static let arrowLeft16 = ImageAsset(name: "arrow-left-16")
  public static let arrowLeft24 = ImageAsset(name: "arrow-left-24")
  public static let arrowRight16 = ImageAsset(name: "arrow-right-16")
  public static let arrowRight24 = ImageAsset(name: "arrow-right-24")
  public static let arrowSwitch24 = ImageAsset(name: "arrow-switch-24")
  public static let arrowUp16 = ImageAsset(name: "arrow-up-16")
  public static let arrowUp24 = ImageAsset(name: "arrow-up-24")
  public static let arrowUpLeft24 = ImageAsset(name: "arrow-up-left-24")
  public static let arrowUpRight24 = ImageAsset(name: "arrow-up-right-24")
  public static let beaker16 = ImageAsset(name: "beaker-16")
  public static let beaker24 = ImageAsset(name: "beaker-24")
  public static let bell16 = ImageAsset(name: "bell-16")
  public static let bell24 = ImageAsset(name: "bell-24")
  public static let bellFilled16 = ImageAsset(name: "bell-filled-16")
  public static let bellFilled24 = ImageAsset(name: "bell-filled-24")
  public static let bellSlash16 = ImageAsset(name: "bell-slash-16")
  public static let bellSlash24 = ImageAsset(name: "bell-slash-24")
  public static let bellSlashFilled16 = ImageAsset(name: "bell-slash-filled-16")
  public static let bellSlashFilled24 = ImageAsset(name: "bell-slash-filled-24")
  public static let bold24 = ImageAsset(name: "bold-24")
  public static let book24 = ImageAsset(name: "book-24")
  public static let bookmark16 = ImageAsset(name: "bookmark-16")
  public static let bookmark24 = ImageAsset(name: "bookmark-24")
  public static let bookmarkFilled16 = ImageAsset(name: "bookmark-filled-16")
  public static let bookmarkFilled24 = ImageAsset(name: "bookmark-filled-24")
  public static let bookmarkSlash16 = ImageAsset(name: "bookmark-slash-16")
  public static let bookmarkSlash24 = ImageAsset(name: "bookmark-slash-24")
  public static let bookmarkSlashFilled16 = ImageAsset(name: "bookmark-slash-filled-16")
  public static let bookmarkSlashFilled24 = ImageAsset(name: "bookmark-slash-filled-24")
  public static let briefcase16 = ImageAsset(name: "briefcase-16")
  public static let briefcase24 = ImageAsset(name: "briefcase-24")
  public static let broadcast24 = ImageAsset(name: "broadcast-24")
  public static let bug16 = ImageAsset(name: "bug-16")
  public static let bug24 = ImageAsset(name: "bug-24")
  public static let calendar16 = ImageAsset(name: "calendar-16")
  public static let calendar24 = ImageAsset(name: "calendar-24")
  public static let caretDown16 = ImageAsset(name: "caret-down-16")
  public static let check16 = ImageAsset(name: "check-16")
  public static let check24 = ImageAsset(name: "check-24")
  public static let checkCircle16 = ImageAsset(name: "check-circle-16")
  public static let checkCircle24 = ImageAsset(name: "check-circle-24")
  public static let checkCircleFilled16 = ImageAsset(name: "check-circle-filled-16")
  public static let checkCircleFilled24 = ImageAsset(name: "check-circle-filled-24")
  public static let checklist24 = ImageAsset(name: "checklist-24")
  public static let chevronDown16 = ImageAsset(name: "chevron-down-16")
  public static let chevronDown24 = ImageAsset(name: "chevron-down-24")
  public static let chevronLeft16 = ImageAsset(name: "chevron-left-16")
  public static let chevronLeft24 = ImageAsset(name: "chevron-left-24")
  public static let chevronRight16 = ImageAsset(name: "chevron-right-16")
  public static let chevronRight24 = ImageAsset(name: "chevron-right-24")
  public static let chevronUp16 = ImageAsset(name: "chevron-up-16")
  public static let chevronUp24 = ImageAsset(name: "chevron-up-24")
  public static let circle16 = ImageAsset(name: "circle-16")
  public static let circle24 = ImageAsset(name: "circle-24")
  public static let circleSlash16 = ImageAsset(name: "circle-slash-16")
  public static let circleSlash24 = ImageAsset(name: "circle-slash-24")
  public static let clippy16 = ImageAsset(name: "clippy-16")
  public static let clippy24 = ImageAsset(name: "clippy-24")
  public static let clock16 = ImageAsset(name: "clock-16")
  public static let clock24 = ImageAsset(name: "clock-24")
  public static let clockFilled16 = ImageAsset(name: "clock-filled-16")
  public static let clockFilled24 = ImageAsset(name: "clock-filled-24")
  public static let code16 = ImageAsset(name: "code-16")
  public static let code24 = ImageAsset(name: "code-24")
  public static let codeReview16 = ImageAsset(name: "code-review-16")
  public static let codeReview24 = ImageAsset(name: "code-review-24")
  public static let codeSquare24 = ImageAsset(name: "code-square-24")
  public static let codescan16 = ImageAsset(name: "codescan-16")
  public static let codescan24 = ImageAsset(name: "codescan-24")
  public static let comment16 = ImageAsset(name: "comment-16")
  public static let comment24 = ImageAsset(name: "comment-24")
  public static let commentDiscussion16 = ImageAsset(name: "comment-discussion-16")
  public static let commentDiscussion24 = ImageAsset(name: "comment-discussion-24")
  public static let commentFilled16 = ImageAsset(name: "comment-filled-16")
  public static let commentFilled24 = ImageAsset(name: "comment-filled-24")
  public static let commit24 = ImageAsset(name: "commit-24")
  public static let copy24 = ImageAsset(name: "copy-24")
  public static let cpu16 = ImageAsset(name: "cpu-16")
  public static let cpu24 = ImageAsset(name: "cpu-24")
  public static let creditCard24 = ImageAsset(name: "credit-card-24")
  public static let crossReference16 = ImageAsset(name: "cross-reference-16")
  public static let crossReference24 = ImageAsset(name: "cross-reference-24")
  public static let dash24 = ImageAsset(name: "dash-24")
  public static let database24 = ImageAsset(name: "database-24")
  public static let dependabot16 = ImageAsset(name: "dependabot-16")
  public static let dependabot24 = ImageAsset(name: "dependabot-24")
  public static let desktopDownload24 = ImageAsset(name: "desktop-download-24")
  public static let deviceCameraVideo24 = ImageAsset(name: "device-camera-video-24")
  public static let deviceDesktop24 = ImageAsset(name: "device-desktop-24")
  public static let deviceMobile24 = ImageAsset(name: "device-mobile-24")
  public static let diff16 = ImageAsset(name: "diff-16")
  public static let diff24 = ImageAsset(name: "diff-24")
  public static let diffAdded16 = ImageAsset(name: "diff-added-16")
  public static let diffAdded24 = ImageAsset(name: "diff-added-24")
  public static let diffModified16 = ImageAsset(name: "diff-modified-16")
  public static let diffModified24 = ImageAsset(name: "diff-modified-24")
  public static let diffRemoved16 = ImageAsset(name: "diff-removed-16")
  public static let diffRemoved24 = ImageAsset(name: "diff-removed-24")
  public static let diffRenamed16 = ImageAsset(name: "diff-renamed-16")
  public static let diffRenamed24 = ImageAsset(name: "diff-renamed-24")
  public static let dot16 = ImageAsset(name: "dot-16")
  public static let dot24 = ImageAsset(name: "dot-24")
  public static let dotFilled16 = ImageAsset(name: "dot-filled-16")
  public static let dotFilled24 = ImageAsset(name: "dot-filled-24")
  public static let download16 = ImageAsset(name: "download-16")
  public static let download24 = ImageAsset(name: "download-24")
  public static let eye16 = ImageAsset(name: "eye-16")
  public static let eye24 = ImageAsset(name: "eye-24")
  public static let eyeSlash24 = ImageAsset(name: "eye-slash-24")
  public static let file16 = ImageAsset(name: "file-16")
  public static let file24 = ImageAsset(name: "file-24")
  public static let fileBinary24 = ImageAsset(name: "file-binary-24")
  public static let fileCode16 = ImageAsset(name: "file-code-16")
  public static let fileCode24 = ImageAsset(name: "file-code-24")
  public static let fileDiff16 = ImageAsset(name: "file-diff-16")
  public static let fileDiff24 = ImageAsset(name: "file-diff-24")
  public static let fileDirectory16 = ImageAsset(name: "file-directory-16")
  public static let fileDirectory24 = ImageAsset(name: "file-directory-24")
  public static let fileDirectoryFilled16 = ImageAsset(name: "file-directory-filled-16")
  public static let fileDirectoryFilled24 = ImageAsset(name: "file-directory-filled-24")
  public static let fileMedia24 = ImageAsset(name: "file-media-24")
  public static let fileSubmodule16 = ImageAsset(name: "file-submodule-16")
  public static let fileSubmodule24 = ImageAsset(name: "file-submodule-24")
  public static let fileSymlink24 = ImageAsset(name: "file-symlink-24")
  public static let fileSymlinkFile16 = ImageAsset(name: "file-symlink-file-16")
  public static let fileZip16 = ImageAsset(name: "file-zip-16")
  public static let fileZip24 = ImageAsset(name: "file-zip-24")
  public static let filter16 = ImageAsset(name: "filter-16")
  public static let filter24 = ImageAsset(name: "filter-24")
  public static let fire24 = ImageAsset(name: "fire-24")
  public static let flame16 = ImageAsset(name: "flame-16")
  public static let flame24 = ImageAsset(name: "flame-24")
  public static let fold24 = ImageAsset(name: "fold-24")
  public static let foldDown24 = ImageAsset(name: "fold-down-24")
  public static let foldUp24 = ImageAsset(name: "fold-up-24")
  public static let gear24 = ImageAsset(name: "gear-24")
  public static let gift24 = ImageAsset(name: "gift-24")
  public static let gitBranch16 = ImageAsset(name: "git-branch-16")
  public static let gitBranch24 = ImageAsset(name: "git-branch-24")
  public static let gitCommit16 = ImageAsset(name: "git-commit-16")
  public static let gitCommit24 = ImageAsset(name: "git-commit-24")
  public static let gitCompare24 = ImageAsset(name: "git-compare-24")
  public static let gitFork24 = ImageAsset(name: "git-fork-24")
  public static let gitMerge16 = ImageAsset(name: "git-merge-16")
  public static let gitMerge24 = ImageAsset(name: "git-merge-24")
  public static let gitPullRequest16 = ImageAsset(name: "git-pull-request-16")
  public static let gitPullRequest24 = ImageAsset(name: "git-pull-request-24")
  public static let gitPullRequestClosed16 = ImageAsset(name: "git-pull-request-closed-16")
  public static let gitPullRequestClosed24 = ImageAsset(name: "git-pull-request-closed-24")
  public static let gitPullRequestDraft16 = ImageAsset(name: "git-pull-request-draft-16")
  public static let gitPullRequestDraft24 = ImageAsset(name: "git-pull-request-draft-24")
  public static let globe24 = ImageAsset(name: "globe-24")
  public static let grabber24 = ImageAsset(name: "grabber-24")
  public static let graph24 = ImageAsset(name: "graph-24")
  public static let heading24 = ImageAsset(name: "heading-24")
  public static let heart16 = ImageAsset(name: "heart-16")
  public static let heart24 = ImageAsset(name: "heart-24")
  public static let heartFill16 = ImageAsset(name: "heart-fill-16")
  public static let heartFill24 = ImageAsset(name: "heart-fill-24")
  public static let history24 = ImageAsset(name: "history-24")
  public static let home16 = ImageAsset(name: "home-16")
  public static let home24 = ImageAsset(name: "home-24")
  public static let homeFill24 = ImageAsset(name: "home-fill-24")
  public static let horizontalRule24 = ImageAsset(name: "horizontal-rule-24")
  public static let hourglass24 = ImageAsset(name: "hourglass-24")
  public static let hubot16 = ImageAsset(name: "hubot-16")
  public static let hubot24 = ImageAsset(name: "hubot-24")
  public static let image24 = ImageAsset(name: "image-24")
  public static let inbox24 = ImageAsset(name: "inbox-24")
  public static let inboxFilled16 = ImageAsset(name: "inbox-filled-16")
  public static let inboxFilled24 = ImageAsset(name: "inbox-filled-24")
  public static let infinity24 = ImageAsset(name: "infinity-24")
  public static let info16 = ImageAsset(name: "info-16")
  public static let info24 = ImageAsset(name: "info-24")
  public static let insights24 = ImageAsset(name: "insights-24")
  public static let issueClosed16 = ImageAsset(name: "issue-closed-16")
  public static let issueClosed24 = ImageAsset(name: "issue-closed-24")
  public static let issueOpened16 = ImageAsset(name: "issue-opened-16")
  public static let issueOpened24 = ImageAsset(name: "issue-opened-24")
  public static let issueReopened16 = ImageAsset(name: "issue-reopened-16")
  public static let issueReopened24 = ImageAsset(name: "issue-reopened-24")
  public static let italic24 = ImageAsset(name: "italic-24")
  public static let kebabHorizontal16 = ImageAsset(name: "kebab-horizontal-16")
  public static let kebabHorizontal24 = ImageAsset(name: "kebab-horizontal-24")
  public static let key24 = ImageAsset(name: "key-24")
  public static let law16 = ImageAsset(name: "law-16")
  public static let law24 = ImageAsset(name: "law-24")
  public static let lightBulb24 = ImageAsset(name: "light-bulb-24")
  public static let link16 = ImageAsset(name: "link-16")
  public static let link24 = ImageAsset(name: "link-24")
  public static let linkExternal16 = ImageAsset(name: "link-external-16")
  public static let linkExternal24 = ImageAsset(name: "link-external-24")
  public static let listOrdered24 = ImageAsset(name: "list-ordered-24")
  public static let listUnordered24 = ImageAsset(name: "list-unordered-24")
  public static let location16 = ImageAsset(name: "location-16")
  public static let location24 = ImageAsset(name: "location-24")
  public static let lock16 = ImageAsset(name: "lock-16")
  public static let lock24 = ImageAsset(name: "lock-24")
  public static let mail16 = ImageAsset(name: "mail-16")
  public static let mail24 = ImageAsset(name: "mail-24")
  public static let megaphone24 = ImageAsset(name: "megaphone-24")
  public static let mention16 = ImageAsset(name: "mention-16")
  public static let mention24 = ImageAsset(name: "mention-24")
  public static let meter16 = ImageAsset(name: "meter-16")
  public static let milestone16 = ImageAsset(name: "milestone-16")
  public static let milestone24 = ImageAsset(name: "milestone-24")
  public static let milestoneFilled16 = ImageAsset(name: "milestone-filled-16")
  public static let mirror24 = ImageAsset(name: "mirror-24")
  public static let moon16 = ImageAsset(name: "moon-16")
  public static let moon24 = ImageAsset(name: "moon-24")
  public static let mortarBoard24 = ImageAsset(name: "mortar-board-24")
  public static let mute16 = ImageAsset(name: "mute-16")
  public static let mute24 = ImageAsset(name: "mute-24")
  public static let noEntry24 = ImageAsset(name: "no-entry-24")
  public static let northStar16 = ImageAsset(name: "north-star-16")
  public static let northStar24 = ImageAsset(name: "north-star-24")
  public static let note24 = ImageAsset(name: "note-24")
  public static let organization16 = ImageAsset(name: "organization-16")
  public static let organization24 = ImageAsset(name: "organization-24")
  public static let package16 = ImageAsset(name: "package-16")
  public static let package24 = ImageAsset(name: "package-24")
  public static let packageDependencies24 = ImageAsset(name: "package-dependencies-24")
  public static let packageDependents24 = ImageAsset(name: "package-dependents-24")
  public static let paperAirplane24 = ImageAsset(name: "paper-airplane-24")
  public static let pencil16 = ImageAsset(name: "pencil-16")
  public static let pencil24 = ImageAsset(name: "pencil-24")
  public static let people16 = ImageAsset(name: "people-16")
  public static let people24 = ImageAsset(name: "people-24")
  public static let person16 = ImageAsset(name: "person-16")
  public static let person24 = ImageAsset(name: "person-24")
  public static let personFill16 = ImageAsset(name: "person-fill-16")
  public static let personFill24 = ImageAsset(name: "person-fill-24")
  public static let pin16 = ImageAsset(name: "pin-16")
  public static let pin24 = ImageAsset(name: "pin-24")
  public static let play24 = ImageAsset(name: "play-24")
  public static let plug24 = ImageAsset(name: "plug-24")
  public static let plus16 = ImageAsset(name: "plus-16")
  public static let plus24 = ImageAsset(name: "plus-24")
  public static let plusCircle16 = ImageAsset(name: "plus-circle-16")
  public static let plusCircle24 = ImageAsset(name: "plus-circle-24")
  public static let progress16 = ImageAsset(name: "progress-16")
  public static let project16 = ImageAsset(name: "project-16")
  public static let project24 = ImageAsset(name: "project-24")
  public static let pulse24 = ImageAsset(name: "pulse-24")
  public static let question16 = ImageAsset(name: "question-16")
  public static let question24 = ImageAsset(name: "question-24")
  public static let quote16 = ImageAsset(name: "quote-16")
  public static let quote24 = ImageAsset(name: "quote-24")
  public static let reply16 = ImageAsset(name: "reply-16")
  public static let reply24 = ImageAsset(name: "reply-24")
  public static let repo16 = ImageAsset(name: "repo-16")
  public static let repo24 = ImageAsset(name: "repo-24")
  public static let repoForked16 = ImageAsset(name: "repo-forked-16")
  public static let repoPush16 = ImageAsset(name: "repo-push-16")
  public static let repoPush24 = ImageAsset(name: "repo-push-24")
  public static let repoTemplate16 = ImageAsset(name: "repo-template-16")
  public static let repoTemplate24 = ImageAsset(name: "repo-template-24")
  public static let report24 = ImageAsset(name: "report-24")
  public static let requestChanges16 = ImageAsset(name: "request-changes-16")
  public static let requestChanges24 = ImageAsset(name: "request-changes-24")
  public static let rocket16 = ImageAsset(name: "rocket-16")
  public static let rocket24 = ImageAsset(name: "rocket-24")
  public static let rss24 = ImageAsset(name: "rss-24")
  public static let ruby24 = ImageAsset(name: "ruby-24")
  public static let screenFull24 = ImageAsset(name: "screen-full-24")
  public static let screenNormal24 = ImageAsset(name: "screen-normal-24")
  public static let search16 = ImageAsset(name: "search-16")
  public static let search24 = ImageAsset(name: "search-24")
  public static let server24 = ImageAsset(name: "server-24")
  public static let settings16 = ImageAsset(name: "settings-16")
  public static let settings24 = ImageAsset(name: "settings-24")
  public static let share24 = ImageAsset(name: "share-24")
  public static let shareAndroid24 = ImageAsset(name: "share-android-24")
  public static let shield16 = ImageAsset(name: "shield-16")
  public static let shield24 = ImageAsset(name: "shield-24")
  public static let shieldCheck24 = ImageAsset(name: "shield-check-24")
  public static let shieldLock16 = ImageAsset(name: "shield-lock-16")
  public static let shieldLock24 = ImageAsset(name: "shield-lock-24")
  public static let shieldX24 = ImageAsset(name: "shield-x-24")
  public static let signIn24 = ImageAsset(name: "sign-in-24")
  public static let signOut24 = ImageAsset(name: "sign-out-24")
  public static let skip16 = ImageAsset(name: "skip-16")
  public static let skip24 = ImageAsset(name: "skip-24")
  public static let smiley16 = ImageAsset(name: "smiley-16")
  public static let smiley24 = ImageAsset(name: "smiley-24")
  public static let smiley25 = ImageAsset(name: "smiley-25")
  public static let square24 = ImageAsset(name: "square-24")
  public static let squareFill16 = ImageAsset(name: "square-fill-16")
  public static let squareFill24 = ImageAsset(name: "square-fill-24")
  public static let squirrel16 = ImageAsset(name: "squirrel-16")
  public static let squirrel24 = ImageAsset(name: "squirrel-24")
  public static let star16 = ImageAsset(name: "star-16")
  public static let star24 = ImageAsset(name: "star-24")
  public static let starFilled16 = ImageAsset(name: "star-filled-16")
  public static let starFilled24 = ImageAsset(name: "star-filled-24")
  public static let stop16 = ImageAsset(name: "stop-16")
  public static let stop24 = ImageAsset(name: "stop-24")
  public static let stopwatch24 = ImageAsset(name: "stopwatch-24")
  public static let strikethrough16 = ImageAsset(name: "strikethrough-16")
  public static let strikethrough24 = ImageAsset(name: "strikethrough-24")
  public static let sun16 = ImageAsset(name: "sun-16")
  public static let sun24 = ImageAsset(name: "sun-24")
  public static let sync16 = ImageAsset(name: "sync-16")
  public static let sync24 = ImageAsset(name: "sync-24")
  public static let tab24 = ImageAsset(name: "tab-24")
  public static let tab25 = ImageAsset(name: "tab-25")
  public static let tag16 = ImageAsset(name: "tag-16")
  public static let tag24 = ImageAsset(name: "tag-24")
  public static let tasklist24 = ImageAsset(name: "tasklist-24")
  public static let telescope16 = ImageAsset(name: "telescope-16")
  public static let telescope24 = ImageAsset(name: "telescope-24")
  public static let telescopeFill16 = ImageAsset(name: "telescope-fill-16")
  public static let telescopeFill24 = ImageAsset(name: "telescope-fill-24")
  public static let terminal16 = ImageAsset(name: "terminal-16")
  public static let terminal24 = ImageAsset(name: "terminal-24")
  public static let threeBars16 = ImageAsset(name: "three-bars-16")
  public static let thumbsdown24 = ImageAsset(name: "thumbsdown-24")
  public static let thumbsup24 = ImageAsset(name: "thumbsup-24")
  public static let tools16 = ImageAsset(name: "tools-16")
  public static let tools24 = ImageAsset(name: "tools-24")
  public static let trashcan16 = ImageAsset(name: "trashcan-16")
  public static let trashcan24 = ImageAsset(name: "trashcan-24")
  public static let triangleDown24 = ImageAsset(name: "triangle-down-24")
  public static let triangleLeft24 = ImageAsset(name: "triangle-left-24")
  public static let triangleRight24 = ImageAsset(name: "triangle-right-24")
  public static let triangleUp24 = ImageAsset(name: "triangle-up-24")
  public static let typography24 = ImageAsset(name: "typography-24")
  public static let unfold24 = ImageAsset(name: "unfold-24")
  public static let unlock16 = ImageAsset(name: "unlock-16")
  public static let unlock24 = ImageAsset(name: "unlock-24")
  public static let unmute16 = ImageAsset(name: "unmute-16")
  public static let unmute24 = ImageAsset(name: "unmute-24")
  public static let unverifed24 = ImageAsset(name: "unverifed-24")
  public static let upload24 = ImageAsset(name: "upload-24")
  public static let verified24 = ImageAsset(name: "verified-24")
  public static let versions16 = ImageAsset(name: "versions-16")
  public static let versions24 = ImageAsset(name: "versions-24")
  public static let workflow24 = ImageAsset(name: "workflow-24")
  public static let x16 = ImageAsset(name: "x-16")
  public static let x24 = ImageAsset(name: "x-24")
  public static let xCircle24 = ImageAsset(name: "x-circle-24")
  public static let xCircleFilled16 = ImageAsset(name: "x-circle-filled-16")
  public static let xCircleFilled24 = ImageAsset(name: "x-circle-filled-24")
  public static let zap16 = ImageAsset(name: "zap-16")
  public static let zap24 = ImageAsset(name: "zap-24")
}
// swiftlint:enable identifier_name line_length nesting type_body_length type_name

// MARK: - Implementation Details

public struct ImageAsset {
  public fileprivate(set) var name: String

  #if os(macOS)
  public typealias Image = NSImage
  #elseif os(iOS) || os(tvOS) || os(watchOS)
  public typealias Image = UIImage
  #endif

  @available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.7, *)
  public var image: Image {
    let bundle = BundleToken.bundle
    #if os(iOS) || os(tvOS)
    let image = Image(named: name, in: bundle, compatibleWith: nil)
    #elseif os(macOS)
    let name = NSImage.Name(self.name)
    let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name)
    #elseif os(watchOS)
    let image = Image(named: name)
    #endif
    guard let result = image else {
      fatalError("Unable to load image asset named \(name).")
    }
    return result
  }

  #if os(iOS) || os(tvOS)
  @available(iOS 8.0, tvOS 9.0, *)
  public func image(compatibleWith traitCollection: UITraitCollection) -> Image {
    let bundle = BundleToken.bundle
    guard let result = Image(named: name, in: bundle, compatibleWith: traitCollection) else {
      fatalError("Unable to load image asset named \(name).")
    }
    return result
  }
  #endif
}

public extension ImageAsset.Image {
  @available(iOS 8.0, tvOS 9.0, watchOS 2.0, *)
  @available(macOS, deprecated,
    message: "This initializer is unsafe on macOS, please use the ImageAsset.image property")
  convenience init?(asset: ImageAsset) {
    #if os(iOS) || os(tvOS)
    let bundle = BundleToken.bundle
    self.init(named: asset.name, in: bundle, compatibleWith: nil)
    #elseif os(macOS)
    self.init(named: NSImage.Name(asset.name))
    #elseif os(watchOS)
    self.init(named: asset.name)
    #endif
  }
}

// swiftlint:disable convenience_type
private final class BundleToken {
  static let bundle: Bundle = {
    #if SWIFT_PACKAGE
    return Bundle.module
    #else
    return Bundle(for: BundleToken.self)
    #endif
  }()
}
// swiftlint:enable convenience_type
