refactored Typography

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-08-16 12:05:28 -05:00
parent b912835c22
commit b4b1de52a2
12 changed files with 79 additions and 318 deletions

View File

@ -31,7 +31,6 @@
EA33622C2891E73B0071C351 /* FontProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA33622B2891E73B0071C351 /* FontProtocol.swift */; };
EA33622E2891EA3C0071C351 /* DispatchQueue+Once.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA33622D2891EA3C0071C351 /* DispatchQueue+Once.swift */; };
EA3362302891EB4A0071C351 /* Fonts.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA33622F2891EB4A0071C351 /* Fonts.swift */; };
EA3362322891F2ED0071C351 /* FontStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3362312891F2ED0071C351 /* FontStyles.swift */; };
EA33623E2892EE950071C351 /* UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA33623D2892EE950071C351 /* UIDevice.swift */; };
EA3362402892EF6C0071C351 /* Label.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA33623F2892EF6B0071C351 /* Label.swift */; };
EA3362432892EFF20071C351 /* LabelModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3362422892EFF20071C351 /* LabelModel.swift */; };
@ -55,7 +54,6 @@
EAF7F0A2289AFB3900B287F5 /* Errorable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0A1289AFB3900B287F5 /* Errorable.swift */; };
EAF7F0A4289B017C00B287F5 /* LabelAttributeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0A3289B017C00B287F5 /* LabelAttributeModel.swift */; };
EAF7F0A6289B0CE000B287F5 /* Resetable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0A5289B0CE000B287F5 /* Resetable.swift */; };
EAF7F0A8289B119400B287F5 /* Fontable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0A7289B119400B287F5 /* Fontable.swift */; };
EAF7F0AB289B13FD00B287F5 /* LabelAttributeFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0AA289B13FD00B287F5 /* LabelAttributeFont.swift */; };
EAF7F0AD289B142900B287F5 /* LabelAttributeStrikeThrough.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0AC289B142900B287F5 /* LabelAttributeStrikeThrough.swift */; };
EAF7F0AF289B144C00B287F5 /* LabelAttributeUnderline.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0AE289B144C00B287F5 /* LabelAttributeUnderline.swift */; };
@ -65,7 +63,6 @@
EAF7F0B7289C12A600B287F5 /* UITapGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0B6289C12A600B287F5 /* UITapGestureRecognizer.swift */; };
EAF7F0B9289C139800B287F5 /* ColorConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0B8289C139800B287F5 /* ColorConfiguration.swift */; };
EAF7F0BB289D80ED00B287F5 /* Modelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0BA289D80ED00B287F5 /* Modelable.swift */; };
EAF7F0BD289D81B100B287F5 /* FontStyleable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0BC289D81B100B287F5 /* FontStyleable.swift */; };
EAF7F0F8289DB1AC00B287F5 /* VDSFormControlsTokens.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAF7F0E8289DB0DA00B287F5 /* VDSFormControlsTokens.xcframework */; };
EAF7F0F9289DB1AC00B287F5 /* VDSTypographyTokens.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA3361F32891D5290071C351 /* VDSTypographyTokens.xcframework */; };
EAF7F0FB289DB1AC00B287F5 /* VDSColorTokens.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAF7F0E9289DB0DA00B287F5 /* VDSColorTokens.xcframework */; };
@ -115,7 +112,6 @@
EA33622B2891E73B0071C351 /* FontProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontProtocol.swift; sourceTree = "<group>"; };
EA33622D2891EA3C0071C351 /* DispatchQueue+Once.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DispatchQueue+Once.swift"; sourceTree = "<group>"; };
EA33622F2891EB4A0071C351 /* Fonts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fonts.swift; sourceTree = "<group>"; };
EA3362312891F2ED0071C351 /* FontStyles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontStyles.swift; sourceTree = "<group>"; };
EA33623D2892EE950071C351 /* UIDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIDevice.swift; sourceTree = "<group>"; };
EA33623F2892EF6B0071C351 /* Label.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Label.swift; sourceTree = "<group>"; };
EA3362422892EFF20071C351 /* LabelModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelModel.swift; sourceTree = "<group>"; };
@ -138,7 +134,6 @@
EAF7F0A1289AFB3900B287F5 /* Errorable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errorable.swift; sourceTree = "<group>"; };
EAF7F0A3289B017C00B287F5 /* LabelAttributeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeModel.swift; sourceTree = "<group>"; };
EAF7F0A5289B0CE000B287F5 /* Resetable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Resetable.swift; sourceTree = "<group>"; };
EAF7F0A7289B119400B287F5 /* Fontable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fontable.swift; sourceTree = "<group>"; };
EAF7F0AA289B13FD00B287F5 /* LabelAttributeFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeFont.swift; sourceTree = "<group>"; };
EAF7F0AC289B142900B287F5 /* LabelAttributeStrikeThrough.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeStrikeThrough.swift; sourceTree = "<group>"; };
EAF7F0AE289B144C00B287F5 /* LabelAttributeUnderline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeUnderline.swift; sourceTree = "<group>"; };
@ -148,7 +143,6 @@
EAF7F0B6289C12A600B287F5 /* UITapGestureRecognizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITapGestureRecognizer.swift; sourceTree = "<group>"; };
EAF7F0B8289C139800B287F5 /* ColorConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorConfiguration.swift; sourceTree = "<group>"; };
EAF7F0BA289D80ED00B287F5 /* Modelable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modelable.swift; sourceTree = "<group>"; };
EAF7F0BC289D81B100B287F5 /* FontStyleable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontStyleable.swift; sourceTree = "<group>"; };
EAF7F0E8289DB0DA00B287F5 /* VDSFormControlsTokens.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = VDSFormControlsTokens.xcframework; path = ../SharedFrameworks/VDSFormControlsTokens.xcframework; sourceTree = "<group>"; };
EAF7F0E9289DB0DA00B287F5 /* VDSColorTokens.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = VDSColorTokens.xcframework; path = ../SharedFrameworks/VDSColorTokens.xcframework; sourceTree = "<group>"; };
EAF7F0EA289DB0DA00B287F5 /* VDSAccessibilityTokens.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = VDSAccessibilityTokens.xcframework; path = ../SharedFrameworks/VDSAccessibilityTokens.xcframework; sourceTree = "<group>"; };
@ -284,8 +278,6 @@
EA3361AC288B26190071C351 /* DataTrackable.swift */,
EA3361A9288B25E40071C351 /* Disabling.swift */,
EAF7F0A1289AFB3900B287F5 /* Errorable.swift */,
EAF7F0A7289B119400B287F5 /* Fontable.swift */,
EAF7F0BC289D81B100B287F5 /* FontStyleable.swift */,
EA3361AE288B26310071C351 /* FormFieldable.swift */,
EA33624628931B050071C351 /* Initable.swift */,
EA3362442892F9130071C351 /* Labelable.swift */,
@ -323,7 +315,6 @@
isa = PBXGroup;
children = (
EA33622F2891EB4A0071C351 /* Fonts.swift */,
EA3362312891F2ED0071C351 /* FontStyles.swift */,
EA33622B2891E73B0071C351 /* FontProtocol.swift */,
);
path = Fonts;
@ -534,7 +525,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EA3362322891F2ED0071C351 /* FontStyles.swift in Sources */,
EAF7F0B5289C126F00B287F5 /* UILabel.swift in Sources */,
EAF7F0A6289B0CE000B287F5 /* Resetable.swift in Sources */,
EAB1D29428A3ECF700DAE764 /* SelectorGroupBase.swift in Sources */,
@ -569,7 +559,6 @@
EA3C3B4C2894823E000CA526 /* AnyProxy.swift in Sources */,
EA3361AF288B26310071C351 /* FormFieldable.swift in Sources */,
EAB1D29A28A5611D00DAE764 /* SelectorGroupModel.swift in Sources */,
EAF7F0A8289B119400B287F5 /* Fontable.swift in Sources */,
EAF7F0BB289D80ED00B287F5 /* Modelable.swift in Sources */,
EAF7F09E289AAEC000B287F5 /* Constants.swift in Sources */,
EA3361B3288B265D0071C351 /* Changable.swift in Sources */,
@ -586,7 +575,6 @@
EA3361AD288B26190071C351 /* DataTrackable.swift in Sources */,
EA33623E2892EE950071C351 /* UIDevice.swift in Sources */,
EA3362302891EB4A0071C351 /* Fonts.swift in Sources */,
EAF7F0BD289D81B100B287F5 /* FontStyleable.swift in Sources */,
EAF7F0AD289B142900B287F5 /* LabelAttributeStrikeThrough.swift in Sources */,
EA3361B8288B2AAA0071C351 /* ViewProtocol.swift in Sources */,
EA3361BF288B2EA60071C351 /* ModelHandlerable.swift in Sources */,

View File

@ -14,12 +14,12 @@ public struct LabelAttributeFont: LabelAttributeModel {
//--------------------------------------------------
public var location: Int
public var length: Int
public var style: FontStyle
public var style: TypographicalStyle
public var color: String
//--------------------------------------------------
// MARK: - Initializer
//--------------------------------------------------
public init(location: Int, length: Int, style: FontStyle, color: String = "#000000") {
public init(location: Int, length: Int, style: TypographicalStyle, color: String = "#000000") {
self.location = location
self.length = length
self.style = style

View File

@ -27,14 +27,8 @@ open class LabelBase<ModelType: LabelModel>: UILabel, ModelHandlerable, ViewProt
@Proxy(\.model.attributes)
open var attributes: [LabelAttributeModel]?
@Proxy(\.model.fontCategory)
open var fontCategory: FontCategory
@Proxy(\.model.fontSize)
open var fontSize: FontSize
@Proxy(\.model.fontWeight)
open var fontWeight: FontWeight
@Proxy(\.model.typograpicalStyle)
open var typograpicalStyle: TypographicalStyle
@Proxy(\.model.textPosition)
open var textPosition: TextPosition
@ -104,7 +98,7 @@ open class LabelBase<ModelType: LabelModel>: UILabel, ModelHandlerable, ViewProt
text = nil
attributedText = nil
textColor = .black
font = FontStyle.RegularBodyLarge.font
font = TypographicalStyle.BodyLarge.font
textAlignment = .left
accessibilityCustomActions = []
accessibilityTraits = .staticText
@ -131,7 +125,7 @@ open class LabelBase<ModelType: LabelModel>: UILabel, ModelHandlerable, ViewProt
if let vdsFont = viewModel.font {
font = vdsFont
} else {
font = FontStyle.defaultStyle.font
font = TypographicalStyle.defaultStyle.font
}
if let attributes = viewModel.attributes, let text = viewModel.text, let font = font, let textColor = textColor {

View File

@ -16,9 +16,7 @@ public protocol LabelModel: Modelable, Labelable {
public struct DefaultLabelModel: LabelModel {
public var text: String?
public var attributes: [LabelAttributeModel]?
public var fontCategory: FontCategory = .body
public var fontSize: FontSize = .small
public var fontWeight: FontWeight = .regular
public var typograpicalStyle: TypographicalStyle = .BodySmall
public var textPosition: TextPosition = .left
public var surface: Surface = .light
public var disabled: Bool = false

View File

@ -19,12 +19,7 @@ public protocol SelectorModel: Modelable, FormFieldable, Errorable, DataTrackabl
}
extension SelectorModel {
public var fontCategory: FontCategory {
get { return .body }
set { return }
}
public var shouldShowError: Bool {
guard hasError && !disabled && errorText?.isEmpty == false else { return false }
return true
@ -38,10 +33,8 @@ extension SelectorModel {
public var labelModel: DefaultLabelModel? {
guard let labelText = labelText else { return nil }
var model = DefaultLabelModel()
model.fontSize = .large
model.textPosition = .left
model.fontWeight = .bold
model.fontCategory = .body
model.typograpicalStyle = .BoldBodyLarge
model.text = labelText
model.surface = surface
model.disabled = disabled
@ -52,10 +45,8 @@ extension SelectorModel {
public var childModel: DefaultLabelModel? {
guard let childText = childText else { return nil }
var model = DefaultLabelModel()
model.fontSize = .large
model.textPosition = .left
model.fontWeight = .regular
model.fontCategory = .body
model.typograpicalStyle = .BodyLarge
model.text = childText
model.surface = surface
model.disabled = disabled
@ -66,10 +57,8 @@ extension SelectorModel {
public var errorModel: DefaultLabelModel? {
guard let errorText = errorText, hasError else { return nil }
var model = DefaultLabelModel()
model.fontSize = .medium
model.textPosition = .left
model.fontWeight = .regular
model.fontCategory = .body
model.typograpicalStyle = .BodyMedium
model.text = errorText
model.surface = surface
model.disabled = disabled

View File

@ -109,11 +109,17 @@ open class ToggleBase<ModelType: ToggleModel>: Control<ModelType>, Changable {
@Proxy(\.model.offText)
public var offText: String
@Proxy(\.model.fontSize)
public var fontSize: FontSize
public var fontSize: TypographicalStyle.FontSize = .small{
didSet {
updateTypography()
}
}
@Proxy(\.model.fontWeight)
public var fontWeight: FontWeight
public var fontWeight: TypographicalStyle.FontWeight = .regular {
didSet {
updateTypography()
}
}
@Proxy(\.model.textPosition)
public var textPosition: TextPosition {
@ -170,6 +176,25 @@ open class ToggleBase<ModelType: ToggleModel>: Control<ModelType>, Changable {
}
}
}
//only allows
//fontSize: small, large
//fontWeight: regular, bold
private func updateTypography() {
if fontSize == .small {
if fontWeight == .regular {
model.typograpicalStyle = .BodySmall
} else {
model.typograpicalStyle = .BoldBodySmall
}
} else {
if fontWeight == .regular {
model.typograpicalStyle = .BodyLarge
} else {
model.typograpicalStyle = .BoldBodyLarge
}
}
}
//--------------------------------------------------
// MARK: - Constraints

View File

@ -16,19 +16,12 @@ public protocol ToggleModel: Modelable, FormFieldable, DataTrackable, Accessable
}
extension ToggleModel {
public var fontCategory: FontCategory {
get { return .body }
set { return }
}
public var userTrueColor: Bool { return on }
public var label: DefaultLabelModel {
var model = DefaultLabelModel()
model.fontSize = fontSize
model.textPosition = textPosition
model.fontWeight = fontWeight
model.fontCategory = .body
model.typograpicalStyle = typograpicalStyle
model.text = on ? onText : offText
model.surface = surface
model.disabled = disabled
@ -43,9 +36,7 @@ public struct DefaultToggleModel: ToggleModel {
public var offText: String = "Off"
public var onText: String = "On"
public var fontCategory: FontCategory = .body
public var fontSize: FontSize = .small
public var fontWeight: FontWeight = .regular
public var typograpicalStyle: TypographicalStyle = .BodySmall
public var textPosition: TextPosition = .left
public var inputId: String?

View File

@ -1,221 +0,0 @@
//
// VDSFontStyles.swift
// VDS
//
// Created by Matt Bruce on 7/27/22.
//
import Foundation
import UIKit
import VDSTypographyTokens
public enum FontWeight: String, Codable {
case regular
case bold
var titleCase: String {
switch self {
case .regular: return "Regular"
case .bold: return "Bold"
}
}
}
public enum TextPosition: String, Codable, CaseIterable {
case left, right, center
var textAlignment: NSTextAlignment {
switch self {
case .left:
return NSTextAlignment.left
case .right:
return NSTextAlignment.right
case .center:
return NSTextAlignment.center
}
}
}
public enum FontCategory: String, Codable, CaseIterable {
case feature
case title
case body
case micro
var fontSizes: [FontSize] {
switch self {
case .feature:
return [.xlarge, .medium, .small, .xsmall]
case .title:
return [.xxlarge, .xlarge, .large, .medium, .small]
case .body:
return [.large, .medium, .small, .xsmall]
case .micro:
return []
}
}
var titleCase: String {
switch self {
case .feature: return "Feature"
case .title: return "Title"
case .body: return "Body"
case .micro: return "Micro"
}
}
}
public enum FontSize: String, Codable, CaseIterable {
case xxlarge
case xlarge
case large
case medium
case small
case xsmall
var titleCase: String {
switch self {
case .xxlarge: return "2XLarge"
case .xlarge: return "XLarge"
case .large: return "Large"
case .medium: return "Medium"
case .small: return "Small"
case .xsmall: return "XSmall"
}
}
}
public enum FontStyle: String, Codable, CaseIterable {
public enum Error: Swift.Error {
case styleNotFound(fontCatergory: FontCategory, fontSize: FontSize, availableFontSizes: [FontSize])
}
case RegularFeatureXLarge
case BoldFeatureXLarge
case RegularFeatureLarge
case BoldFeatureLarge
case RegularFeatureMedium
case BoldFeatureMedium
case RegularFeatureSmall
case BoldFeatureSmall
case RegularFeatureXSmall
case BoldFeatureXSmall
case RegularTitle2XLarge
case BoldTitle2XLarge
case RegularTitleXLarge
case BoldTitleXLarge
case RegularTitleLarge
case BoldTitleLarge
case RegularTitleMedium
case BoldTitleMedium
case RegularTitleSmall
case BoldTitleSmall
case RegularBodyLarge
case BoldBodyLarge
case RegularBodyMedium
case BoldBodyMedium
case RegularBodySmall
case BoldBodySmall
case RegularMicro
case BoldMicro
public var pointSize: CGFloat {
switch self {
case .RegularFeatureXLarge, .BoldFeatureXLarge:
return UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96
case .RegularFeatureLarge, .BoldFeatureLarge:
return UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80
case .RegularFeatureMedium, .BoldFeatureMedium:
return UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64
case .RegularFeatureSmall, .BoldFeatureSmall:
return UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48
case .RegularFeatureXSmall, .BoldFeatureXSmall:
return UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40
case .RegularTitle2XLarge, .BoldTitle2XLarge:
return UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40
case .RegularTitleXLarge, .BoldTitleXLarge:
return UIDevice.isIPad ? VDSTypography.fontSizeTitle48 : VDSTypography.fontSizeTitle32
case .RegularTitleLarge, .BoldTitleLarge:
return UIDevice.isIPad ? VDSTypography.fontSizeTitle32 : VDSTypography.fontSizeTitle24
case .RegularTitleMedium, .BoldTitleMedium:
return UIDevice.isIPad ? VDSTypography.fontSizeTitle24 : VDSTypography.fontSizeTitle20
case .RegularTitleSmall, .BoldTitleSmall:
return UIDevice.isIPad ? VDSTypography.fontSizeTitle20 : VDSTypography.fontSizeTitle16
case .RegularBodyLarge, .BoldBodyLarge:
return VDSTypography.fontSizeBody16
case .RegularBodyMedium, .BoldBodyMedium:
return VDSTypography.fontSizeBody14
case .RegularBodySmall, .BoldBodySmall:
return VDSTypography.fontSizeBody12
case .RegularMicro, .BoldMicro:
return VDSTypography.fontSizeMicro11
}
}
public var fontFace: Fonts {
switch self {
case .BoldFeatureXLarge,
.BoldFeatureLarge,
.BoldFeatureMedium,
.BoldFeatureSmall,
.BoldFeatureXSmall,
.BoldTitle2XLarge,
.BoldTitleXLarge,
.BoldTitleLarge,
.BoldTitleMedium,
.BoldTitleSmall,
.BoldBodyLarge,
.BoldBodyMedium,
.BoldBodySmall:
return .dsBold
case .RegularFeatureXLarge,
.RegularFeatureLarge,
.RegularFeatureMedium,
.RegularFeatureSmall,
.RegularFeatureXSmall,
.RegularTitle2XLarge,
.RegularTitleXLarge,
.RegularTitleLarge,
.RegularTitleMedium,
.RegularTitleSmall,
.RegularBodyLarge,
.RegularBodyMedium,
.RegularBodySmall:
return .dsRegular
case .BoldMicro:
return .txBold
case .RegularMicro:
return .txRegular
}
}
public static var defaultStyle: FontStyle {
return FontStyle.RegularBodyLarge
}
public var font: UIFont {
return fontFace.font(ofSize: pointSize)
}
public var superScriptFont: UIFont {
return fontFace.font(ofSize: pointSize / 2)
}
public static func style(for category: FontCategory, fontWeight: FontWeight, fontSize: FontSize) throws -> FontStyle {
let fontName = "\(fontWeight.titleCase)\(category.titleCase)\(fontSize.titleCase)"
guard let fontStyle = FontStyle(rawValue: fontName) else {
throw FontStyle.Error.styleNotFound(fontCatergory: category, fontSize: fontSize, availableFontSizes: category.fontSizes)
}
return fontStyle
}
public static func font(for category: FontCategory, fontWeight: FontWeight, fontSize: FontSize) throws -> UIFont {
return try style(for: category, fontWeight: fontWeight, fontSize: fontSize).font
}
}

View File

@ -1,12 +0,0 @@
//
// FontStyleable.swift
// VDS
//
// Created by Matt Bruce on 8/5/22.
//
import Foundation
public protocol FontStyleable {
var fontStyle: FontStyle { get set }
}

View File

@ -1,26 +0,0 @@
//
// Fontable.swift
// VDS
//
// Created by Matt Bruce on 8/3/22.
//
import Foundation
import UIKit
public protocol Fontable {
var fontSize: FontSize { get set }
var fontWeight: FontWeight { get set }
var fontCategory: FontCategory { get set }
}
extension Fontable {
var fontStyle: FontStyle? {
return try? FontStyle.style(for: fontCategory, fontWeight: fontWeight, fontSize: fontSize)
}
var font: UIFont? {
return fontStyle?.font
}
}

View File

@ -6,7 +6,15 @@
//
import Foundation
import UIKit
public protocol Labelable: Fontable {
public protocol Labelable {
var typograpicalStyle: TypographicalStyle { get set }
var textPosition: TextPosition { get set }
}
extension Labelable {
public var font: UIFont? {
return typograpicalStyle.font
}
}

View File

@ -8,6 +8,21 @@
import Foundation
import VDSTypographyTokens
public enum TextPosition: String, Codable, CaseIterable {
case left, right, center
var textAlignment: NSTextAlignment {
switch self {
case .left:
return NSTextAlignment.left
case .right:
return NSTextAlignment.right
case .center:
return NSTextAlignment.center
}
}
}
public enum TypographicalStyle: String, Codable, CaseIterable {
case FeatureXLarge
@ -47,9 +62,21 @@ public enum TypographicalStyle: String, Codable, CaseIterable {
}
}
//MARK: FontSize
extension TypographicalStyle {
public enum FontSize: String, Codable, CaseIterable {
case xxlarge
case xlarge
case large
case medium
case small
case xsmall
}
}
//MARK: FontWeight
extension TypographicalStyle {
public enum FontWeight {
public enum FontWeight: String, Codable, CaseIterable {
case light
case regular
case bold