diff --git a/VDS/Components/TileContainer/TileContainer.swift b/VDS/Components/TileContainer/TileContainer.swift index 314b16b8..eb356ecc 100644 --- a/VDS/Components/TileContainer/TileContainer.swift +++ b/VDS/Components/TileContainer/TileContainer.swift @@ -132,7 +132,7 @@ open class TileContainerBase: Control where Padding open var aspectRatio: AspectRatio = .ratio1x1 { didSet { setNeedsUpdate() } } /// Sets the background color for the component. - open var color: BackgroundColor = .secondary { didSet { setNeedsUpdate() } } + open var color: BackgroundColor? { didSet { setNeedsUpdate() } } /// Sets the background effect for the component. open var backgroundEffect: BackgroundEffect = .none { didSet { setNeedsUpdate() } } @@ -192,13 +192,13 @@ open class TileContainerBase: Control where Padding // MARK: - Configuration //-------------------------------------------------- private let cornerRadius = VDSFormControls.borderRadius * 2 - private var backgroundColorConfiguration = BackgroundColorConfiguration() + internal var backgroundColorConfiguration = BackgroundColorConfiguration() private let dropShadowConfiguration = DropShadowConfiguration().with { $0.shadowColorConfiguration = SurfaceColorConfiguration().with { $0.lightColor = VDSColor.elementsPrimaryOnlight }.eraseToAnyColorable() $0.shadowOffsetConfiguration = .init(.init(width: 0, height: 6), .zero) - $0.shadowRadiusConfiguration = .init(3.0, 0.0) + $0.shadowRadiusConfiguration = .init(8.0, 0.0) $0.shadowOpacityConfiguration = .init(0.01, 0.0) } @@ -325,7 +325,7 @@ open class TileContainerBase: Control where Padding } applyBackgroundEffects() - + if showDropShadow, surface == .light { addDropShadow(dropShadowConfiguration) } else { @@ -457,17 +457,22 @@ extension TileContainerBase { required init() { } func getColor(_ object: ObjectType) -> UIColor { - switch object.color { + guard let color = object.color else { + let config = object.surface == .light ? blackColorConfig : whiteColorConfig + return config.getColor(object.surface) + } + + switch color { case .primary: - primaryColorConfig.getColor(object.surface) + return primaryColorConfig.getColor(object.surface) case .secondary: - secondaryColorConfig.getColor(object.surface) + return secondaryColorConfig.getColor(object.surface) case .white: - whiteColorConfig.getColor(object.surface) + return whiteColorConfig.getColor(object.surface) case .black: - blackColorConfig.getColor(object.surface) + return blackColorConfig.getColor(object.surface) case .custom(let hexCode): - UIColor(hexString: hexCode) + return UIColor(hexString: hexCode) } } } diff --git a/VDS/Components/Tilelet/Tilelet.swift b/VDS/Components/Tilelet/Tilelet.swift index fe9fe7f1..f0814e11 100644 --- a/VDS/Components/Tilelet/Tilelet.swift +++ b/VDS/Components/Tilelet/Tilelet.swift @@ -102,6 +102,10 @@ open class Tilelet: TileContainerBase { $0.backgroundColor = .clear } + private var backgroundColorSurface: Surface { + backgroundColorConfiguration.getColor(self).surface + } + //-------------------------------------------------- // MARK: - Public Properties //-------------------------------------------------- @@ -444,7 +448,7 @@ open class Tilelet: TileContainerBase { badge.text = badgeModel.text badge.fillColor = badgeModel.fillColor badge.numberOfLines = badgeModel.numberOfLines - badge.surface = badgeModel.surface + badge.surface = backgroundColorSurface badge.maxWidth = badgeModel.maxWidth badgeLabelHeightGreaterThanConstraint?.constant = badge.label.minimumLineHeight if badgeContainerView.superview == nil { @@ -474,7 +478,7 @@ open class Tilelet: TileContainerBase { if showTitleLockup { //flip the surface for the titleLockup - titleLockup.surface = color == .black ? Surface.dark : Surface.light + titleLockup.surface = backgroundColorSurface //titleLockup if let textWidth { @@ -529,14 +533,14 @@ open class Tilelet: TileContainerBase { if let descriptiveIconModel { descriptiveIcon.name = descriptiveIconModel.name descriptiveIcon.size = descriptiveIconModel.size - descriptiveIcon.surface = descriptiveIconModel.surface + descriptiveIcon.surface = backgroundColorSurface descriptiveIcon.accessibilityLabel = descriptiveIconModel.accessibleText showIconContainerView = true } if let directionalIconModel { directionalIcon.size = directionalIconModel.size - directionalIcon.surface = directionalIconModel.surface + directionalIcon.surface = backgroundColorSurface directionalIcon.accessibilityLabel = "Right arrow" showIconContainerView = true } diff --git a/VDS/Components/Tilelet/TileletSubTitleModel.swift b/VDS/Components/Tilelet/TileletSubTitleModel.swift index fb68ff53..4c48cc3a 100644 --- a/VDS/Components/Tilelet/TileletSubTitleModel.swift +++ b/VDS/Components/Tilelet/TileletSubTitleModel.swift @@ -36,8 +36,8 @@ extension Tilelet { public var textAttributes: [any LabelAttributeModel]? /// Text color that will be used for the subTitle label. - public var textColor: Use = .primary - + public var textColor: TitleLockup.TextColor + /// LineBreakMode used in Badge label. public var lineBreakMode: NSLineBreakMode @@ -46,7 +46,7 @@ extension Tilelet { //-------------------------------------------------- public init(text: String, otherStandardStyle: OtherStandardStyle = .bodySmall, - textColor: Use = .primary, + textColor: TitleLockup.TextColor = .primary, textAttributes: [any LabelAttributeModel]? = nil, lineBreakMode: NSLineBreakMode = .byTruncatingTail) { self.text = text @@ -64,7 +64,8 @@ extension Tilelet { TitleLockup.SubTitleModel(text: text, otherStandardStyle: otherStandardStyle.value, textColor: textColor, - textAttributes: textAttributes, lineBreakMode: lineBreakMode) + textAttributes: textAttributes, + lineBreakMode: lineBreakMode) } } } diff --git a/VDS/Components/Tilelet/TileletTitleModel.swift b/VDS/Components/Tilelet/TileletTitleModel.swift index fa8c603d..b9bc7bbe 100644 --- a/VDS/Components/Tilelet/TileletTitleModel.swift +++ b/VDS/Components/Tilelet/TileletTitleModel.swift @@ -32,6 +32,9 @@ extension Tilelet { /// Text that will be used for the title label. public var text: String = "" + /// TextColor that will be used for the title label. + public var textColor: TitleLockup.TitleTextColor + /// Used in combination with standardStyle to set the textStyle that will be used for the title label. public var isBold: Bool = false /// Text attributes that will be used for the title label. @@ -47,11 +50,13 @@ extension Tilelet { // MARK: - Initializers //-------------------------------------------------- public init(text: String, + textColor: TitleLockup.TitleTextColor = .primary, textAttributes: [any LabelAttributeModel]? = nil, isBold: Bool = true, standardStyle: StandardStyle = .titleSmall, lineBreakMode: NSLineBreakMode = .byTruncatingTail) { self.text = text + self.textColor = textColor self.textAttributes = textAttributes self.standardStyle = standardStyle self.isBold = isBold @@ -64,8 +69,11 @@ extension Tilelet { /// Converts this type of model to a TitleLockup.TitleModel. public func toTitleLockupTitleModel() -> TitleLockup.TitleModel { TitleLockup.TitleModel(text: text, + textColor: textColor, textAttributes: textAttributes, - isBold: isBold, standardStyle: standardStyle.value, lineBreakMode: lineBreakMode) + isBold: isBold, + standardStyle: standardStyle.value, + lineBreakMode: lineBreakMode) } } } diff --git a/VDS/Components/Tilelet/TiletEyebrowModel.swift b/VDS/Components/Tilelet/TiletEyebrowModel.swift index e7c008b4..3d22ab74 100644 --- a/VDS/Components/Tilelet/TiletEyebrowModel.swift +++ b/VDS/Components/Tilelet/TiletEyebrowModel.swift @@ -18,6 +18,9 @@ extension Tilelet { /// Text that will be used for the eyebrow label. public var text: String = "" + /// Text color that will be used for the eyebrow label + public var textColor: TitleLockup.TextColor + /// Used in combination with standardStyle to set the textStyle that will be used for the eyebrow label. public var isBold: Bool = false /// Text attributes that will be used for the eyebrow label. @@ -33,11 +36,13 @@ extension Tilelet { // MARK: - Initializers //-------------------------------------------------- public init(text: String, + textColor: TitleLockup.TextColor = .primary, textAttributes: [any LabelAttributeModel]? = nil, isBold: Bool = true, standardStyle: Tilelet.SubTitleModel.OtherStandardStyle = .bodySmall, lineBreakMode: NSLineBreakMode = .byTruncatingTail) { self.text = text + self.textColor = textColor self.textAttributes = textAttributes self.standardStyle = standardStyle self.isBold = isBold @@ -49,7 +54,11 @@ extension Tilelet { //-------------------------------------------------- /// Converts this type of model to a TitleLockup.TitleModel. public func toTitleLockupEyebrowModel() -> TitleLockup.EyebrowModel { - TitleLockup.EyebrowModel(text: text, isBold: isBold, standardStyle: standardStyle.value, textAttributes: textAttributes) + TitleLockup.EyebrowModel(text: text, + textColor: textColor, + isBold: isBold, + standardStyle: standardStyle.value, + textAttributes: textAttributes) } } } diff --git a/VDS/Extensions/UIColor+VDSColor.swift b/VDS/Extensions/UIColor+VDSColor.swift index c622db33..9b165f64 100644 --- a/VDS/Extensions/UIColor+VDSColor.swift +++ b/VDS/Extensions/UIColor+VDSColor.swift @@ -176,4 +176,10 @@ extension UIColor { guard let found else { return nil} return found } + + public var surface: Surface { + var greyScale: CGFloat = 0 + getWhite(&greyScale, alpha: nil) + return greyScale < 0.5 ? .dark : .light + } }