From 19a8d8e09a8d80aad625433d665125c2f82cdb72 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Mon, 15 May 2023 11:35:27 -0500 Subject: [PATCH] refactored out IconColor Signed-off-by: Matt Bruce --- VDS.xcodeproj/project.pbxproj | 8 +- VDS/Components/Icon/Icon.swift | 17 ++- VDS/Components/Icon/IconColor.swift | 115 ----------------- .../Notification/Notification.swift | 2 +- .../TextFields/EntryField/EntryField.swift | 2 +- .../TextFields/InputField/InputField.swift | 2 +- VDS/Extensions/VDSColor.swift | 119 ++++++++++++++++++ 7 files changed, 138 insertions(+), 127 deletions(-) delete mode 100644 VDS/Components/Icon/IconColor.swift create mode 100644 VDS/Extensions/VDSColor.swift diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index c5673da2..63be730a 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -48,6 +48,7 @@ EA5E3058295105A40082B959 /* Tilelet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E3057295105A40082B959 /* Tilelet.swift */; }; EA5E305A29510F8B0082B959 /* EnumSubset.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E305929510F8B0082B959 /* EnumSubset.swift */; }; EA81410B2A0E8E3C004F60D2 /* ButtonIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA81410A2A0E8E3C004F60D2 /* ButtonIcon.swift */; }; + EA8141102A127066004F60D2 /* VDSColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA81410F2A127066004F60D2 /* VDSColor.swift */; }; EA89200428AECF4B006B9984 /* UITextField+Publisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89200328AECF4B006B9984 /* UITextField+Publisher.swift */; }; EA89200628B526D6006B9984 /* CheckboxGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89200528B526D6006B9984 /* CheckboxGroup.swift */; }; EA89201328B568D8006B9984 /* RadioBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89201228B568D8006B9984 /* RadioBox.swift */; }; @@ -62,7 +63,6 @@ EA985BF22968B5BB00F2FF2E /* TitleLockupTextStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BF12968B5BB00F2FF2E /* TitleLockupTextStyle.swift */; }; EA985BF5296C60C000F2FF2E /* Icon.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BF4296C60C000F2FF2E /* Icon.swift */; }; EA985BF7296C665E00F2FF2E /* IconName.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BF6296C665E00F2FF2E /* IconName.swift */; }; - EA985BF9296C710100F2FF2E /* IconColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BF8296C710100F2FF2E /* IconColor.swift */; }; EA985C1D296CD13600F2FF2E /* BundleManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985C1C296CD13600F2FF2E /* BundleManager.swift */; }; EA985C23296E033A00F2FF2E /* TextArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985C22296E033A00F2FF2E /* TextArea.swift */; }; EA985C2D296F03FE00F2FF2E /* TileletIconModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985C2C296F03FE00F2FF2E /* TileletIconModels.swift */; }; @@ -169,6 +169,7 @@ EA5E3057295105A40082B959 /* Tilelet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tilelet.swift; sourceTree = ""; }; EA5E305929510F8B0082B959 /* EnumSubset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnumSubset.swift; sourceTree = ""; }; EA81410A2A0E8E3C004F60D2 /* ButtonIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonIcon.swift; sourceTree = ""; }; + EA81410F2A127066004F60D2 /* VDSColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VDSColor.swift; sourceTree = ""; }; EA89200328AECF4B006B9984 /* UITextField+Publisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+Publisher.swift"; sourceTree = ""; }; EA89200528B526D6006B9984 /* CheckboxGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckboxGroup.swift; sourceTree = ""; }; EA89201228B568D8006B9984 /* RadioBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBox.swift; sourceTree = ""; }; @@ -183,7 +184,6 @@ EA985BF12968B5BB00F2FF2E /* TitleLockupTextStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleLockupTextStyle.swift; sourceTree = ""; }; EA985BF4296C60C000F2FF2E /* Icon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Icon.swift; sourceTree = ""; }; EA985BF6296C665E00F2FF2E /* IconName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconName.swift; sourceTree = ""; }; - EA985BF8296C710100F2FF2E /* IconColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconColor.swift; sourceTree = ""; }; EA985C1C296CD13600F2FF2E /* BundleManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleManager.swift; sourceTree = ""; }; EA985C22296E033A00F2FF2E /* TextArea.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextArea.swift; sourceTree = ""; }; EA985C2C296F03FE00F2FF2E /* TileletIconModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TileletIconModels.swift; sourceTree = ""; }; @@ -414,6 +414,7 @@ EAB5FED329267EB300998C17 /* UIView.swift */, EAB5FF0029424ACB00998C17 /* UIControl.swift */, EA985C662970C21600F2FF2E /* VDSLayout.swift */, + EA81410F2A127066004F60D2 /* VDSColor.swift */, ); path = Extensions; sourceTree = ""; @@ -564,7 +565,6 @@ children = ( EA81410C2A0E8E52004F60D2 /* ButtonIcon */, EA985BF4296C60C000F2FF2E /* Icon.swift */, - EA985BF8296C710100F2FF2E /* IconColor.swift */, EA985BF6296C665E00F2FF2E /* IconName.swift */, EA985C682971B90B00F2FF2E /* IconSize.swift */, ); @@ -821,6 +821,7 @@ EA4DB2FD28D3D0CA00103EE3 /* AnyEquatable.swift in Sources */, EA5E305A29510F8B0082B959 /* EnumSubset.swift in Sources */, EA985BF7296C665E00F2FF2E /* IconName.swift in Sources */, + EA8141102A127066004F60D2 /* VDSColor.swift in Sources */, EAF7F0AF289B144C00B287F5 /* UnderlineLabelAttribute.swift in Sources */, EAC925842911C63100091998 /* Colorable.swift in Sources */, EAB5FEF5292D371F00998C17 /* ButtonBase.swift in Sources */, @@ -879,7 +880,6 @@ 5F21D7BF28DCEB3D003E7CD6 /* Useable.swift in Sources */, EAF7F0B7289C12A600B287F5 /* UITapGestureRecognizer.swift in Sources */, EAB2376629E9952D00AABE9A /* UIApplication.swift in Sources */, - EA985BF9296C710100F2FF2E /* IconColor.swift in Sources */, EAB5FED429267EB300998C17 /* UIView.swift in Sources */, EAB2376829E9992800AABE9A /* TooltipAlertViewController.swift in Sources */, EA33623E2892EE950071C351 /* UIDevice.swift in Sources */, diff --git a/VDS/Components/Icon/Icon.swift b/VDS/Components/Icon/Icon.swift index 54fe428f..7983d7c9 100644 --- a/VDS/Components/Icon/Icon.swift +++ b/VDS/Components/Icon/Icon.swift @@ -28,7 +28,14 @@ open class Icon: View { $0.clipsToBounds = true } - open var color: Color = .black { didSet { setNeedsUpdate() }} + open var color: UIColor = VDSColor.paletteBlack { + didSet { + if let hex = color.hexString, !UIColor.isVDSColor(color: color) { + print("icon.color is not a VDSColor. Hex: \(hex) is not a supported color") + } + setNeedsUpdate() + } + } open var size: Size = .medium { didSet { setNeedsUpdate() }} open var name: Name? { didSet { setNeedsUpdate() }} open var customSize: Int? { didSet { setNeedsUpdate() }} @@ -57,7 +64,7 @@ open class Icon: View { open override func reset() { super.reset() - color = .black + color = VDSColor.paletteBlack imageView.image = nil } @@ -67,12 +74,12 @@ open class Icon: View { open override func updateView() { super.updateView() //get the color for the image - var imageColor = color.value + var imageColor = color //ensure the correct color for white/black colors - if surface == .dark && color == Color.black { + if surface == .dark && color == VDSColor.paletteBlack { imageColor = VDSColor.elementsPrimaryOndark - } else if surface == .light && color == Color.black { + } else if surface == .light && color == VDSColor.paletteBlack { imageColor = VDSColor.elementsPrimaryOnlight } diff --git a/VDS/Components/Icon/IconColor.swift b/VDS/Components/Icon/IconColor.swift deleted file mode 100644 index bcfc73c1..00000000 --- a/VDS/Components/Icon/IconColor.swift +++ /dev/null @@ -1,115 +0,0 @@ -// -// IconColor.swift -// VDS -// -// Created by Matt Bruce on 1/9/23. -// - -import Foundation -import VDSColorTokens -import UIKit - -extension Icon { - public enum Color: String, CaseIterable { - case black - case white - case red - case gray95 - case gray85 - case gray65 - case gray44 - case gray20 - case gray11 - case orange94 - case orange83 - case orange71 - case orange58 - case orange41 - case orange24 - case orange17 - case yellow94 - case yellow87 - case yellow74 - case yellow53 - case yellow39 - case yellow20 - case yellow15 - case blue94 - case blue82 - case blue62 - case blue46 - case blue38 - case blue21 - case blue15 - case green91 - case green77 - case green61 - case green36 - case green26 - case green15 - case green10 - case pink87 - case pink76 - case pink62 - case pink46 - case pink25 - case purple85 - case purple75 - case purple60 - case purple39 - case purple20 - - // Map each color name to its corresponding UIColor object. - public var value: UIColor { - switch self { - case .black: return VDSColor.paletteBlack - case .white: return VDSColor.paletteWhite - case .red: return VDSColor.paletteRed - case .gray95: return VDSColor.paletteGray95 - case .gray85: return VDSColor.paletteGray85 - case .gray65: return VDSColor.paletteGray65 - case .gray44: return VDSColor.paletteGray44 - case .gray20: return VDSColor.paletteGray20 - case .gray11: return VDSColor.paletteGray11 - case .orange94: return VDSColor.paletteOrange94 - case .orange83: return VDSColor.paletteOrange83 - case .orange71: return VDSColor.paletteOrange71 - case .orange58: return VDSColor.paletteOrange58 - case .orange41: return VDSColor.paletteOrange41 - case .orange24: return VDSColor.paletteOrange24 - case .orange17: return VDSColor.paletteOrange17 - case .yellow94: return VDSColor.paletteYellow94 - case .yellow87: return VDSColor.paletteYellow87 - case .yellow74: return VDSColor.paletteYellow74 - case .yellow53: return VDSColor.paletteYellow53 - case .yellow39: return VDSColor.paletteYellow39 - case .yellow20: return VDSColor.paletteYellow20 - case .yellow15: return VDSColor.paletteYellow15 - case .blue94: return VDSColor.paletteBlue94 - case .blue82: return VDSColor.paletteBlue82 - case .blue62: return VDSColor.paletteBlue62 - case .blue46: return VDSColor.paletteBlue46 - case .blue38: return VDSColor.paletteBlue38 - case .blue21: return VDSColor.paletteBlue21 - case .blue15: return VDSColor.paletteBlue15 - case .green91: return VDSColor.paletteGreen91 - case .green77: return VDSColor.paletteGreen77 - case .green61: return VDSColor.paletteGreen61 - case .green36: return VDSColor.paletteGreen36 - case .green26: return VDSColor.paletteGreen26 - case .green15: return VDSColor.paletteGreen15 - case .green10: return VDSColor.paletteGreen10 - case .pink87: return VDSColor.palettePink87 - case .pink76: return VDSColor.palettePink76 - case .pink62: return VDSColor.palettePink62 - case .pink46: return VDSColor.palettePink46 - case .pink25: return VDSColor.palettePink25 - case .purple85: return VDSColor.palettePurple85 - case .purple75: return VDSColor.palettePurple75 - case .purple60: return VDSColor.palettePurple60 - case .purple39: return VDSColor.palettePurple39 - case .purple20: return VDSColor.palettePurple20 - } - } - } -} diff --git a/VDS/Components/Notification/Notification.swift b/VDS/Components/Notification/Notification.swift index eacb55d1..c4b54185 100644 --- a/VDS/Components/Notification/Notification.swift +++ b/VDS/Components/Notification/Notification.swift @@ -274,7 +274,7 @@ open class Notification: View { } private func updateIcons() { - let iconColor = surface == .dark ? Icon.Color.white : Icon.Color.black + let iconColor = surface == .dark ? VDSColor.paletteWhite : VDSColor.paletteBlack typeIcon.name = type.styleIconName() typeIcon.color = iconColor closeButton.color = iconColor diff --git a/VDS/Components/TextFields/EntryField/EntryField.swift b/VDS/Components/TextFields/EntryField/EntryField.swift index b57b733b..2501af26 100644 --- a/VDS/Components/TextFields/EntryField/EntryField.swift +++ b/VDS/Components/TextFields/EntryField/EntryField.swift @@ -311,7 +311,7 @@ open class EntryField: Control, Changeable { errorLabel.disabled = disabled errorLabel.isHidden = false icon.name = .error - icon.color = .black + icon.color = VDSColor.paletteBlack icon.surface = surface icon.isHidden = disabled } else { diff --git a/VDS/Components/TextFields/InputField/InputField.swift b/VDS/Components/TextFields/InputField/InputField.swift index 2257ca89..ce2aca7d 100644 --- a/VDS/Components/TextFields/InputField/InputField.swift +++ b/VDS/Components/TextFields/InputField/InputField.swift @@ -177,7 +177,7 @@ open class InputField: EntryField, UITextFieldDelegate { successLabel.isHidden = false errorLabel.isHidden = true icon.name = .checkmarkAlt - icon.color = .black + icon.color = VDSColor.paletteBlack icon.surface = surface icon.isHidden = disabled } else { diff --git a/VDS/Extensions/VDSColor.swift b/VDS/Extensions/VDSColor.swift new file mode 100644 index 00000000..3e29e31b --- /dev/null +++ b/VDS/Extensions/VDSColor.swift @@ -0,0 +1,119 @@ +// +// VDSColor.swift +// VDS +// +// Created by Matt Bruce on 5/15/23. +// + +import Foundation +import VDSColorTokens + +extension VDSColor { + public enum Color: String, CaseIterable { + case paletteBlack + case paletteWhite + case paletteRed + case paletteGray95 + case paletteGray85 + case paletteGray65 + case paletteGray44 + case paletteGray20 + case paletteGray11 + case paletteOrange94 + case paletteOrange83 + case paletteOrange71 + case paletteOrange58 + case paletteOrange41 + case paletteOrange24 + case paletteOrange17 + case paletteYellow94 + case paletteYellow87 + case paletteYellow74 + case paletteYellow53 + case paletteYellow39 + case paletteYellow20 + case paletteYellow15 + case paletteBlue94 + case paletteBlue82 + case paletteBlue62 + case paletteBlue46 + case paletteBlue38 + case paletteBlue21 + case paletteBlue15 + case paletteGreen91 + case paletteGreen77 + case paletteGreen61 + case paletteGreen36 + case paletteGreen26 + case paletteGreen15 + case paletteGreen10 + case palettePink87 + case palettePink76 + case palettePink62 + case palettePink46 + case palettePink25 + case palettePurple85 + case palettePurple75 + case palettePurple60 + case palettePurple39 + case palettePurple20 + case backgroundPrimaryLight + case backgroundPrimaryDark + case backgroundSecondaryLight + case backgroundSecondaryDark + case backgroundBrandhighlight + case feedbackErrorOnlight + case feedbackErrorOndark + case feedbackErrorBackgroundOnlight + case feedbackErrorBackgroundOndark + case feedbackWarningOnlight + case feedbackWarningOndark + case feedbackWarningBackgroundOnlight + case feedbackWarningBackgroundOndark + case feedbackInformationOnlight + case feedbackInformationOndark + case feedbackInformationBackgroundOnlight + case feedbackInformationBackgroundOndark + case feedbackSuccessOnlight + case feedbackSuccessOndark + case feedbackSuccessBackgroundOnlight + case feedbackSuccessBackgroundOndark + case interactiveActiveOnlight + case interactiveActiveOndark + case interactiveDisabledOnlight + case interactiveDisabledOndark + case interactiveScrollthumbOnlight + case interactiveScrollthumbOndark + case interactiveScrollthumbHoverOnlight + case interactiveScrollthumbHoverOndark + case interactiveScrolltrackOnlight + case interactiveScrolltrackOndark + case elementsPrimaryOnlight + case elementsPrimaryOndark + case elementsSecondaryOnlight + case elementsSecondaryOndark + case elementsBrandhighlight + case elementsLowcontrastOnlight + case elementsLowcontrastOndark + + // Map each color name to its corresponding UIColor object. + public var uiColor: UIColor { + do { + let color = try VDSColor.getTokenByString(tokenName: "VDSColor.\(rawValue)") + return color + } catch { + print(error) + return VDSColor.paletteBlack + } + } + } +} + +extension UIColor { + public static func isVDSColor(color: UIColor) -> Bool { + guard let hex = color.hexString else { return false } + let found = VDSColor.Color.allCases.first{ $0.uiColor.hexString == hex } + guard let _ = found else { return false} + return true + } +}