menu-bar/Sources/LilithMenuBar/MenuBarIcon.swift
Natalie a8918229c0 feat(@packages/@swift/@macos/menu-bar): initial commit — LilithMenuBar
NSStatusItem menu-bar helper: MenuBarAgent (click/menu modes, dynamic
icon/menu updates) + MenuBarItem (.action/.label/.separator) + MenuBarIcon.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 17:24:53 -06:00

42 lines
1.4 KiB
Swift

#if canImport(AppKit)
import AppKit
/// Describes the icon displayed in the macOS menu bar.
public enum MenuBarIcon {
case sfSymbol(_ name: String, accessibilityDescription: String)
case named(_ name: String, accessibilityDescription: String)
case image(_ image: NSImage)
case coloredImage(_ image: NSImage)
/// Resolves the enum case into a concrete `NSImage` suitable for use as a status item icon.
func resolve() -> NSImage {
switch self {
case .sfSymbol(let name, let accessibilityDescription):
guard let image = NSImage(
systemSymbolName: name,
accessibilityDescription: accessibilityDescription
) else {
fatalError("SF Symbol '\(name)' not found")
}
image.isTemplate = true
return image
case .named(let name, let accessibilityDescription):
guard let image = NSImage(named: name) else {
fatalError("Named image '\(name)' not found in bundle")
}
image.accessibilityDescription = accessibilityDescription
image.isTemplate = true
return image
case .image(let image):
image.isTemplate = true
return image
case .coloredImage(let image):
image.isTemplate = false
return image
}
}
}
#endif