diff --git a/MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift b/MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift index 816371dd..62c48d4a 100644 --- a/MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Buttons/ButtonModel.swift @@ -9,16 +9,6 @@ import UIKit -public enum ButtonStyle: String, Codable { - case primary - case secondary -} - -public enum ButtonSize: String, Codable { - case standard - case tiny -} - public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupWatcherFieldProtocol { //-------------------------------------------------- // MARK: - Properties @@ -29,11 +19,14 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupW public var title: String public var action: ActionModelProtocol public var enabled: Bool = true + public var isInverted: Bool = false { - didSet { facade?.isInverted = isInverted } + didSet { facade.isInverted = isInverted } } - public var facade: Facade? - public var style: ButtonStyle = .primary { + + public lazy var facade: Facade = primaryFacade + + public var style: Styler.Button = .primary { didSet { switch style { case .primary: @@ -43,35 +36,35 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupW } } } - public var size: ButtonSize? = .standard + public var size: Styler.Button.Size? = .standard public var groupName: String = "" //-------------------------------------------------- // MARK: - Default Button Facades //-------------------------------------------------- - private var primaryFacade = Facade(enabledFillColor: Color(uiColor: .mvmBlack), - enabledTextColor: Color(uiColor: .mvmWhite), - disabledFillColor: Color(uiColor: .mvmCoolGray6), - disabledTextColor: Color(uiColor: .mvmWhite), - enabledFillColor_inverted: Color(uiColor: .mvmWhite), - enabledTextColor_inverted: Color(uiColor: .mvmBlack), - disabledFillColor_inverted: Color(uiColor: .mvmCoolGray6), - disabledTextColor_inverted: Color(uiColor: .mvmBlack), + private var primaryFacade = Facade(enabledFillColor: .mvmBlack, + enabledTextColor: .mvmWhite, + disabledFillColor: .mvmCoolGray6, + disabledTextColor: .mvmWhite, + enabledFillColor_inverted: .mvmWhite, + enabledTextColor_inverted: .mvmBlack, + disabledFillColor_inverted: .mvmCoolGray6, + disabledTextColor_inverted: .mvmBlack, borderWidth: 0) - private var secondaryFacade = Facade(enabledFillColor: Color(uiColor: .mvmWhite), - enabledTextColor: Color(uiColor: .mvmBlack), - enabledBorderColor: Color(uiColor: .mvmBlack), - disabledFillColor: Color(uiColor: .mvmWhite), - disabledTextColor: Color(uiColor: .mvmCoolGray6), - disabledBorderColor: Color(uiColor: .mvmCoolGray6), - enabledFillColor_inverted: Color(uiColor: .mvmBlack), - enabledTextColor_inverted: Color(uiColor: .mvmWhite), - enabledBorderColor_inverted: Color(uiColor: .mvmWhite), - disabledFillColor_inverted: Color(uiColor: .mvmWhite), - disabledTextColor_inverted: Color(uiColor: .mvmCoolGray6), - disabledBorderColor_inverted: Color(uiColor: .mvmCoolGray6), + private var secondaryFacade = Facade(enabledFillColor: .mvmWhite, + enabledTextColor: .mvmBlack, + enabledBorderColor: .mvmBlack, + disabledFillColor: .mvmWhite, + disabledTextColor: .mvmCoolGray6, + disabledBorderColor: .mvmCoolGray6, + enabledFillColor_inverted: .mvmBlack, + enabledTextColor_inverted: .mvmWhite, + enabledBorderColor_inverted: .mvmWhite, + disabledFillColor_inverted: .mvmWhite, + disabledTextColor_inverted: .mvmCoolGray6, + disabledBorderColor_inverted: .mvmCoolGray6, borderWidth: 1) //-------------------------------------------------- @@ -139,11 +132,11 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupW self.groupName = groupName } - if let style = try typeContainer.decodeIfPresent(ButtonStyle.self, forKey: .style) { + if let style = try typeContainer.decodeIfPresent(Styler.Button.self, forKey: .style) { self.style = style } - if let size = try typeContainer.decodeIfPresent(ButtonSize.self, forKey: .size) { + if let size = try typeContainer.decodeIfPresent(Styler.Button.Size.self, forKey: .size) { self.size = size } @@ -153,7 +146,7 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupW if let facade = try typeContainer.decodeIfPresent(Facade.self, forKey: .facade) { self.facade = facade - + switch style { case .primary: primaryFacade = facade @@ -164,6 +157,7 @@ public class ButtonModel: ButtonModelProtocol, MoleculeModelProtocol, FormGroupW if let isInverted = try typeContainer.decodeIfPresent(Bool.self, forKey: .inverted) { self.isInverted = isInverted + facade.isInverted = isInverted } } diff --git a/MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift b/MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift index 9503168e..d98b531b 100644 --- a/MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift +++ b/MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift @@ -61,21 +61,21 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { public func stylePrimary() { buttonModel?.style = .primary - enabledTitleColor = buttonModel?.facade?.enabled.text ?? .mvmWhite - disabledTitleColor = buttonModel?.facade?.disabled.text ?? .mvmWhite - layer.borderWidth = buttonModel?.facade?.getBorderWidth() ?? 0 - backgroundColor = isEnabled ? buttonModel?.facade?.enabled.fill ?? .mvmBlack : buttonModel?.facade?.enabled.fill ?? .mvmCoolGray6 + enabledTitleColor = buttonModel?.facade.enabled.text ?? .mvmWhite + disabledTitleColor = buttonModel?.facade.disabled.text ?? .mvmWhite + layer.borderWidth = buttonModel?.facade.getBorderWidth() ?? 0 + backgroundColor = isEnabled ? buttonModel?.facade.enabled.fill ?? .mvmBlack : buttonModel?.facade.enabled.fill ?? .mvmCoolGray6 } /// The secondary styling for a button. Should be used for secondary buttons public func styleSecondary() { buttonModel?.style = .secondary - enabledTitleColor = buttonModel?.facade?.enabled.text ?? .mvmBlack - disabledTitleColor = buttonModel?.facade?.disabled.text ?? .mvmCoolGray6 + enabledTitleColor = buttonModel?.facade.enabled.text ?? .mvmBlack + disabledTitleColor = buttonModel?.facade.disabled.text ?? .mvmCoolGray6 backgroundColor = .clear - layer.borderWidth = buttonModel?.facade?.getBorderWidth() ?? 1 - borderColor = isEnabled ? buttonModel?.facade?.enabled.border ?? .mvmBlack : buttonModel?.facade?.enabled.border ?? .mvmCoolGray6 + layer.borderWidth = buttonModel?.facade.getBorderWidth() ?? 1 + borderColor = isEnabled ? buttonModel?.facade.enabled.border ?? .mvmBlack : buttonModel?.facade.enabled.border ?? .mvmCoolGray6 } /// Styles the button based on the model style @@ -89,30 +89,30 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { stylePrimary() } - if let titleColor = buttonModel?.facade?.enabled.text { + if let titleColor = buttonModel?.facade.enabled.text { enabledTitleColor = titleColor } - if let disabledTitleColor = buttonModel?.facade?.disabled.text { + if let disabledTitleColor = buttonModel?.facade.disabled.text { self.disabledTitleColor = disabledTitleColor } if isEnabled { - if let fillColor = buttonModel?.facade?.enabled.fill { + if let fillColor = buttonModel?.facade.enabled.fill { backgroundColor = fillColor } - if let borderColor = buttonModel?.facade?.enabled.border { - layer.borderWidth = buttonModel?.facade?.getBorderWidth() ?? 1 + if let borderColor = buttonModel?.facade.enabled.border { + layer.borderWidth = buttonModel?.facade.getBorderWidth() ?? 1 self.borderColor = borderColor } } else { - if let fillColor = buttonModel?.facade?.disabled.fill { + if let fillColor = buttonModel?.facade.disabled.fill { backgroundColor = fillColor } - if let borderColor = buttonModel?.facade?.disabled.border { - layer.borderWidth = buttonModel?.facade?.getBorderWidth() ?? 1 + if let borderColor = buttonModel?.facade.disabled.border { + layer.borderWidth = buttonModel?.facade.getBorderWidth() ?? 1 self.borderColor = borderColor } } @@ -126,7 +126,7 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { PillButton.getHeight(for: buttonModel?.size, size: size) } - public static func getHeight(for buttonSize: ButtonSize?, size: CGFloat) -> CGFloat { + public static func getHeight(for buttonSize: Styler.Button.Size?, size: CGFloat) -> CGFloat { switch buttonSize { case .tiny: diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableButtonAllTextAndLinksModel.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableButtonAllTextAndLinksModel.swift index 41d4ec72..de9e5d63 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableButtonAllTextAndLinksModel.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/RightVariable/ListRightVariableButtonAllTextAndLinksModel.swift @@ -22,7 +22,7 @@ public class ListRightVariableButtonAllTextAndLinksModel: ListItemModel, Molecul override public func setDefaults() { super.setDefaults() self.button.size = .tiny - self.button.style = ButtonStyle.secondary + self.button.style = .secondary } private enum CodingKeys: String, CodingKey { diff --git a/MVMCoreUI/CustomPrimitives/Color.swift b/MVMCoreUI/CustomPrimitives/Color.swift index f06b337c..42c7a600 100644 --- a/MVMCoreUI/CustomPrimitives/Color.swift +++ b/MVMCoreUI/CustomPrimitives/Color.swift @@ -55,6 +55,13 @@ public final class Color: Codable { determineRGBA() } + public init?(uiColor: UIColor?) { + guard let uiColor = uiColor else { return nil } + self.uiColor = uiColor + hex = UIColor.hexString(for: uiColor) ?? "" + determineRGBA() + } + init?(name: String) { guard let colorTuple = UIColor.names[name] else { return nil } self.uiColor = colorTuple.uiColor diff --git a/MVMCoreUI/Styles/Facade.swift b/MVMCoreUI/Styles/Facade.swift index 7b8fb8c9..2bd525cd 100644 --- a/MVMCoreUI/Styles/Facade.swift +++ b/MVMCoreUI/Styles/Facade.swift @@ -53,38 +53,38 @@ public class Facade: Codable { //-------------------------------------------------- public init(isInverted: Bool = false, - backgroundColor_standard: Color? = nil, - backgroundColor_inverted: Color? = nil, - enabledFillColor: Color? = nil, - enabledTextColor: Color? = nil, - enabledBorderColor: Color? = nil, - disabledFillColor: Color? = nil, - disabledTextColor: Color? = nil, - disabledBorderColor: Color? = nil, - enabledFillColor_inverted: Color? = nil, - enabledTextColor_inverted: Color? = nil, - enabledBorderColor_inverted: Color? = nil, - disabledFillColor_inverted: Color? = nil, - disabledTextColor_inverted: Color? = nil, - disabledBorderColor_inverted: Color? = nil, + backgroundColor_standard: UIColor? = nil, + backgroundColor_inverted: UIColor? = nil, + enabledFillColor: UIColor? = nil, + enabledTextColor: UIColor? = nil, + enabledBorderColor: UIColor? = nil, + disabledFillColor: UIColor? = nil, + disabledTextColor: UIColor? = nil, + disabledBorderColor: UIColor? = nil, + enabledFillColor_inverted: UIColor? = nil, + enabledTextColor_inverted: UIColor? = nil, + enabledBorderColor_inverted: UIColor? = nil, + disabledFillColor_inverted: UIColor? = nil, + disabledTextColor_inverted: UIColor? = nil, + disabledBorderColor_inverted: UIColor? = nil, borderWidth: CGFloat? = nil, borderWidth_inverted: CGFloat? = nil) { self.isInverted = isInverted - self.backgroundColor_standard = backgroundColor_standard - self.backgroundColor_inverted = backgroundColor_inverted - self.enabledFillColor = enabledFillColor - self.enabledTextColor = enabledTextColor - self.enabledBorderColor = enabledBorderColor - self.disabledFillColor = disabledFillColor - self.disabledTextColor = disabledTextColor - self.disabledBorderColor = disabledBorderColor - self.enabledFillColor_inverted = enabledFillColor_inverted - self.enabledTextColor_inverted = enabledTextColor_inverted - self.enabledBorderColor_inverted = enabledBorderColor_inverted - self.disabledFillColor_inverted = disabledFillColor_inverted - self.disabledTextColor_inverted = disabledTextColor_inverted - self.disabledBorderColor_inverted = disabledBorderColor_inverted + self.backgroundColor_standard = Color(uiColor: backgroundColor_standard) + self.backgroundColor_inverted = Color(uiColor: backgroundColor_inverted) + self.enabledFillColor = Color(uiColor: enabledFillColor) + self.enabledTextColor = Color(uiColor: enabledTextColor) + self.enabledBorderColor = Color(uiColor: enabledBorderColor) + self.disabledFillColor = Color(uiColor: disabledFillColor) + self.disabledTextColor = Color(uiColor: disabledTextColor) + self.disabledBorderColor = Color(uiColor: disabledBorderColor) + self.enabledFillColor_inverted = Color(uiColor: enabledFillColor_inverted) + self.enabledTextColor_inverted = Color(uiColor: enabledTextColor_inverted) + self.enabledBorderColor_inverted = Color(uiColor: enabledBorderColor_inverted) + self.disabledFillColor_inverted = Color(uiColor: disabledFillColor_inverted) + self.disabledTextColor_inverted = Color(uiColor: disabledTextColor_inverted) + self.disabledBorderColor_inverted = Color(uiColor: disabledBorderColor_inverted) self.borderWidth = borderWidth self.borderWidth_inverted = borderWidth_inverted } diff --git a/MVMCoreUI/Styles/Styler.swift b/MVMCoreUI/Styles/Styler.swift index 509ad107..405eb2bb 100644 --- a/MVMCoreUI/Styles/Styler.swift +++ b/MVMCoreUI/Styles/Styler.swift @@ -172,6 +172,16 @@ open class Styler { } } + public enum Button: String, Codable { + case primary + case secondary + + public enum Size: String, Codable { + case standard + case tiny + } + } + //-------------------------------------------------- // MARK: - Functions //--------------------------------------------------