diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index 77cc6883..d686322f 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -53,6 +53,8 @@ EA978EC5291D6AFE00ACC883 /* AnyLabelAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA978EC4291D6AFE00ACC883 /* AnyLabelAttribute.swift */; }; EA985BE429688F3300F2FF2E /* TiletTypographicalStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BE329688F3300F2FF2E /* TiletTypographicalStyle.swift */; }; EA985BE629688F6A00F2FF2E /* TiletBadgeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BE529688F6A00F2FF2E /* TiletBadgeModel.swift */; }; + EA985BE82968951C00F2FF2E /* TiletTitleModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BE72968951C00F2FF2E /* TiletTitleModel.swift */; }; + EA985BEA29689B6D00F2FF2E /* TiletSubTitleModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BE929689B6D00F2FF2E /* TiletSubTitleModel.swift */; }; EAA5EEB528ECBFB4003B3210 /* ImageLabelAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAA5EEB428ECBFB4003B3210 /* ImageLabelAttribute.swift */; }; EAA5EEB728ECC03A003B3210 /* ToolTipLabelAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAA5EEB628ECC03A003B3210 /* ToolTipLabelAttribute.swift */; }; EAA5EEB928ECD24B003B3210 /* Icons.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EAA5EEB828ECD24B003B3210 /* Icons.xcassets */; }; @@ -155,6 +157,8 @@ EA978EC4291D6AFE00ACC883 /* AnyLabelAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyLabelAttribute.swift; sourceTree = ""; }; EA985BE329688F3300F2FF2E /* TiletTypographicalStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TiletTypographicalStyle.swift; sourceTree = ""; }; EA985BE529688F6A00F2FF2E /* TiletBadgeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TiletBadgeModel.swift; sourceTree = ""; }; + EA985BE72968951C00F2FF2E /* TiletTitleModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TiletTitleModel.swift; sourceTree = ""; }; + EA985BE929689B6D00F2FF2E /* TiletSubTitleModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TiletSubTitleModel.swift; sourceTree = ""; }; EAA5EEB428ECBFB4003B3210 /* ImageLabelAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageLabelAttribute.swift; sourceTree = ""; }; EAA5EEB628ECC03A003B3210 /* ToolTipLabelAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolTipLabelAttribute.swift; sourceTree = ""; }; EAA5EEB828ECD24B003B3210 /* Icons.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Icons.xcassets; sourceTree = ""; }; @@ -471,6 +475,8 @@ EA5E3057295105A40082B959 /* Tilet.swift */, EA985BE329688F3300F2FF2E /* TiletTypographicalStyle.swift */, EA985BE529688F6A00F2FF2E /* TiletBadgeModel.swift */, + EA985BE72968951C00F2FF2E /* TiletTitleModel.swift */, + EA985BE929689B6D00F2FF2E /* TiletSubTitleModel.swift */, ); path = Tilet; sourceTree = ""; @@ -720,6 +726,8 @@ EAB1D2CD28ABE76100DAE764 /* Withable.swift in Sources */, EAC846F3294B95CE00F685BA /* ButtonGroupCollectionViewCell.swift in Sources */, EAF7F0952899861000B287F5 /* Checkbox.swift in Sources */, + EA985BE82968951C00F2FF2E /* TiletTitleModel.swift in Sources */, + EA985BEA29689B6D00F2FF2E /* TiletSubTitleModel.swift in Sources */, EA3361C9289054C50071C351 /* Surfaceable.swift in Sources */, EAB5FEED2927E1B200998C17 /* ButtonGroupPositionLayout.swift in Sources */, EA4DB30228DCBCA500103EE3 /* Badge.swift in Sources */, diff --git a/VDS/Components/Tilet/Tilet.swift b/VDS/Components/Tilet/Tilet.swift index 2fa05dde..afbff53b 100644 --- a/VDS/Components/Tilet/Tilet.swift +++ b/VDS/Components/Tilet/Tilet.swift @@ -154,13 +154,8 @@ open class Tilet: TileContainer { public var badgeModel: TiletBadgeModel? { didSet { didChange() }} //text - open var titleTypograpicalStyle: TiletTitleTypographicalStyle = .BoldTitleSmall { didSet { didChange() }} - open var otherTypograpicalStyle: TiletOtherTypographicalStyle = .BodySmall { didSet { didChange() }} - open var titleText: String = "" { didSet { didChange() }} - open var titleTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }} - open var subTitleText: String = "" { didSet { didChange() }} - open var subTitleTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }} - open var subTitleColor: Use = .primary { didSet { didChange() }} + public var titleModel: TiletTitleModel? { didSet { didChange() }} + public var subTitleModel: TiletSubTitleModel? { didSet { didChange() }} //icons @@ -216,11 +211,8 @@ open class Tilet: TileContainer { //titleLockup titleLockup.reset() - titleText = "" - titleTextAttributes = nil - subTitleText = "" - subTitleTextAttributes = nil - subTitleColor = .primary + titleModel = nil + subTitleModel = nil } //-------------------------------------------------- @@ -246,7 +238,17 @@ open class Tilet: TileContainer { badgeContainerView.removeFromSuperview() } - if !titleText.isEmpty || !subTitleText.isEmpty { + var showTitleLockup = false + + if let titleModel, !titleModel.text.isEmpty { + showTitleLockup = true + } + + if let subTitleModel, !subTitleModel.text.isEmpty { + showTitleLockup = true + } + + if showTitleLockup { if titleLockupContainerView.superview == nil { stackView.insertArrangedSubview(titleLockupContainerView, at: badgeContainerView.superview == nil ? 0 : 1) } @@ -275,14 +277,8 @@ open class Tilet: TileContainer { titleLockupTrailingConstraint?.isActive = true } - titleLockup.titleText = titleText - titleLockup.titleTypograpicalStyle = titleTypograpicalStyle.value - titleLockup.titleTextAttributes = titleTextAttributes - - titleLockup.subTitleText = subTitleText - titleLockup.otherTypograpicalStyle = otherTypograpicalStyle.value - titleLockup.subTitleTextAttributes = titleTextAttributes - titleLockup.subTitleColor = subTitleColor + titleLockup.set(with: titleModel) + titleLockup.set(with: subTitleModel) } else { titleLockupContainerView.removeFromSuperview() diff --git a/VDS/Components/Tilet/TiletSubTitleModel.swift b/VDS/Components/Tilet/TiletSubTitleModel.swift new file mode 100644 index 00000000..bfe2d062 --- /dev/null +++ b/VDS/Components/Tilet/TiletSubTitleModel.swift @@ -0,0 +1,49 @@ +// +// TiletSubTitleModel.swift +// VDS +// +// Created by Matt Bruce on 1/6/23. +// + +import Foundation + +public struct TiletSubTitleModel { + public enum SubTitleTypographicalStyle: String, Codable, EnumSubset { + case BodyLarge + case BoldBodyLarge + case BodyMedium + case BoldBodyMedium + case BodySmall + case BoldBodySmall + + public var defaultValue: TitleLockupOtherTypographicalStyle { .BodySmall } + } + + public var text: String = "" + public var textAttributes: [any LabelAttributeModel]? + public var typographicalStyle: SubTitleTypographicalStyle + public var textColor: Use + + public init(text: String, + textColor: Use = .primary, + textAttributes: [any LabelAttributeModel]? = nil, + typographicalStyle: SubTitleTypographicalStyle = .BodySmall) { + self.text = text + self.textColor = textColor + self.textAttributes = textAttributes + self.typographicalStyle = typographicalStyle + } +} + +extension TitleLockup { + public func set(with model: TiletSubTitleModel?) { + if let model, !model.text.isEmpty { + subTitleText = model.text + subTitleTextAttributes = model.textAttributes + otherTypograpicalStyle = model.typographicalStyle.value + subTitleColor = model.textColor + } else { + reset() + } + } +} diff --git a/VDS/Components/Tilet/TiletTitleModel.swift b/VDS/Components/Tilet/TiletTitleModel.swift new file mode 100644 index 00000000..80b04369 --- /dev/null +++ b/VDS/Components/Tilet/TiletTitleModel.swift @@ -0,0 +1,47 @@ +// +// TiletTitleModel.swift +// VDS +// +// Created by Matt Bruce on 1/6/23. +// + +import Foundation + +public struct TiletTitleModel { + public enum TitleTypographicalStyle: String, EnumSubset { + case TitleXLarge + case BoldTitleXLarge + case TitleLarge + case BoldTitleLarge + case TitleMedium + case BoldTitleMedium + case TitleSmall + case BoldTitleSmall + + public var defaultValue: TitleLockupTitleTypographicalStyle { .BoldTitleSmall } + } + + public var text: String = "" + public var textAttributes: [any LabelAttributeModel]? + public var typographicalStyle: TitleTypographicalStyle + + public init(text: String, + textAttributes: [any LabelAttributeModel]? = nil, + typographicalStyle: TitleTypographicalStyle = .BoldTitleSmall) { + self.text = text + self.textAttributes = textAttributes + self.typographicalStyle = typographicalStyle + } +} + +extension TitleLockup { + public func set(with model: TiletTitleModel?) { + if let model, !model.text.isEmpty { + titleText = model.text + titleTextAttributes = model.textAttributes + titleTypograpicalStyle = model.typographicalStyle.value + } else { + reset() + } + } +} diff --git a/VDS/Components/Tilet/TiletTypographicalStyle.swift b/VDS/Components/Tilet/TiletTypographicalStyle.swift index 331f5538..ad2f028e 100644 --- a/VDS/Components/Tilet/TiletTypographicalStyle.swift +++ b/VDS/Components/Tilet/TiletTypographicalStyle.swift @@ -7,19 +7,6 @@ import Foundation -public enum TiletTitleTypographicalStyle: String, Codable, EnumSubset { - case TitleXLarge - case BoldTitleXLarge - case TitleLarge - case BoldTitleLarge - case TitleMedium - case BoldTitleMedium - case TitleSmall - case BoldTitleSmall - - public var defaultValue: TitleLockupTitleTypographicalStyle { .BoldTitleSmall } -} - public enum TiletOtherTypographicalStyle: String, Codable, EnumSubset { case BodyLarge case BoldBodyLarge