import SwiftUI extension Color { static let ui = Color.UI() struct UI { let primary = Color(hex: "#175DDC") let itemBackground = Color("ItemBackground") let darkTextMuted = Color("DarkTextMuted") let avatarItemBackground = Color("AvatarItemBackground") } init?(hex: String) { var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines) hexSanitized = hexSanitized.replacingOccurrences(of: "#", with: "") var rgb: UInt64 = 0 var r: CGFloat = 0.0 var g: CGFloat = 0.0 var b: CGFloat = 0.0 var a: CGFloat = 1.0 guard Scanner(string: hexSanitized).scanHexInt64(&rgb) else{ return nil } switch hexSanitized.count { case 3: r = CGFloat((rgb >> 8) * 17) / 255.0 g = CGFloat((rgb >> 4 & 0xF) * 17) / 255.0 b = CGFloat((rgb & 0xF) * 17) / 255.0 case 6: r = CGFloat((rgb & 0xFF0000) >> 16) / 255.0 g = CGFloat((rgb & 0x00FF00) >> 8) / 255.0 b = CGFloat(rgb & 0x0000FF) / 255.0 case 8: r = CGFloat((rgb & 0xFF000000) >> 24) / 255.0 g = CGFloat((rgb & 0x00FF0000) >> 16) / 255.0 b = CGFloat((rgb & 0x0000FF00) >> 8) / 255.0 a = CGFloat(rgb & 0x000000FF) / 255.0 default: return nil } self.init(red: r, green: g, blue: b, opacity: a) } var components: (red: CGFloat, green: CGFloat, blue: CGFloat, opacity: CGFloat) { var r: CGFloat = 0 var g: CGFloat = 0 var b: CGFloat = 0 var o: CGFloat = 0 guard UIColor(self).getRed(&r, green: &g, blue: &b, alpha: &o) else { return (0, 0, 0, 0) } return (r, g, b, o) } }