254 lines
16 KiB
Swift
254 lines
16 KiB
Swift
//
|
|
// Typogprahy+Styles.swift
|
|
// VDS
|
|
//
|
|
// Created by Matt Bruce on 7/21/23.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
import VDSTokens
|
|
|
|
//MARK: Definitions
|
|
extension TextStyle {
|
|
|
|
// Static properties for different text styles
|
|
|
|
public static let boldFeatureXLarge = TextStyle(rawValue: "boldFeatureXLarge",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature136 : VDSTypography.lineHeightFeature88,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -6: -4))
|
|
|
|
public static let featureXLarge = TextStyle(rawValue: "featureXLarge",
|
|
fontFace: .dsLight,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature144 : VDSTypography.fontSizeFeature96,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature136 : VDSTypography.lineHeightFeature88,
|
|
letterSpacing: VDSTypography.letterSpacingSemiwide,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -6: -4))
|
|
|
|
public static let boldFeatureLarge = TextStyle(rawValue: "boldFeatureLarge",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature120 : VDSTypography.lineHeightFeature76,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -6: -2))
|
|
|
|
public static let featureLarge = TextStyle(rawValue: "featureLarge",
|
|
fontFace: .dsLight,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature128 : VDSTypography.fontSizeFeature80,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature120 : VDSTypography.lineHeightFeature76,
|
|
letterSpacing: VDSTypography.letterSpacingSemiwide,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -6: -2))
|
|
|
|
public static let boldFeatureMedium = TextStyle(rawValue: "boldFeatureMedium",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature88 : VDSTypography.lineHeightFeature64,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -4: -2))
|
|
|
|
public static let featureMedium = TextStyle(rawValue: "featureMedium",
|
|
fontFace: .dsLight,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature96 : VDSTypography.fontSizeFeature64,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature88 : VDSTypography.lineHeightFeature64,
|
|
letterSpacing: VDSTypography.letterSpacingSemiwide,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -4: -2))
|
|
|
|
public static let boldFeatureSmall = TextStyle(rawValue: "boldFeatureSmall",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature76 : VDSTypography.lineHeightFeature48,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
|
|
|
|
public static let featureSmall = TextStyle(rawValue: "featureSmall",
|
|
fontFace: .dsLight,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature80 : VDSTypography.fontSizeFeature48,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature76 : VDSTypography.lineHeightFeature48,
|
|
letterSpacing: VDSTypography.letterSpacingSemiwide,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
|
|
|
|
public static let boldFeatureXSmall = TextStyle(rawValue: "boldFeatureXSmall",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature64 : VDSTypography.lineHeightFeature40,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
|
|
|
|
public static let featureXSmall = TextStyle(rawValue: "featureXSmall",
|
|
fontFace: .dsLight,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeFeature64 : VDSTypography.fontSizeFeature40,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightFeature64 : VDSTypography.lineHeightFeature40,
|
|
letterSpacing: VDSTypography.letterSpacingSemiwide,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
|
|
|
|
public static let boldTitle2XLarge = TextStyle(rawValue: "boldTitle2XLarge",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle64 : VDSTypography.lineHeightTitle40,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
|
|
|
|
public static let title2XLarge = TextStyle(rawValue: "title2XLarge",
|
|
fontFace: .dsLight,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle64 : VDSTypography.fontSizeTitle40,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle64 : VDSTypography.lineHeightTitle40,
|
|
letterSpacing: VDSTypography.letterSpacingSemiwide,
|
|
edgeInsets: .bottom(UIDevice.isIPad ? -2: 0))
|
|
|
|
public static let boldTitleXLarge = TextStyle(rawValue: "boldTitleXLarge",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle48 : VDSTypography.fontSizeTitle32,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle48 : VDSTypography.lineHeightTitle36)
|
|
|
|
public static let titleXLarge = TextStyle(rawValue: "titleXLarge",
|
|
fontFace: .dsLight,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle48 : VDSTypography.fontSizeTitle32,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle48 : VDSTypography.lineHeightTitle36,
|
|
letterSpacing: VDSTypography.letterSpacingSemiwide)
|
|
|
|
public static let boldTitleLarge = TextStyle(rawValue: "boldTitleLarge",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle32 : VDSTypography.fontSizeTitle24,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle36 : VDSTypography.lineHeightTitle28)
|
|
|
|
public static let titleLarge = TextStyle(rawValue: "titleLarge",
|
|
fontFace: UIDevice.isIPad ? .dsLight : .edsRegular,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle32 : VDSTypography.fontSizeTitle24,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle36 : VDSTypography.lineHeightTitle28,
|
|
letterSpacing: UIDevice.isIPad ? VDSTypography.letterSpacingSemiwide : 0)
|
|
|
|
public static let boldTitleMedium = TextStyle(rawValue: "boldTitleMedium",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle24 : VDSTypography.fontSizeTitle20,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle28 : VDSTypography.lineHeightTitle24)
|
|
|
|
public static let titleMedium = TextStyle(rawValue: "titleMedium",
|
|
fontFace: .edsRegular,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle24 : VDSTypography.fontSizeTitle20,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle28 : VDSTypography.lineHeightTitle24)
|
|
|
|
public static let boldTitleSmall = TextStyle(rawValue: "boldTitleSmall",
|
|
fontFace: .edsBold,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle20 : VDSTypography.fontSizeTitle16,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle24 : VDSTypography.lineHeightTitle20)
|
|
|
|
public static let titleSmall = TextStyle(rawValue: "titleSmall",
|
|
fontFace: .edsRegular,
|
|
pointSize: UIDevice.isIPad ? VDSTypography.fontSizeTitle20 : VDSTypography.fontSizeTitle16,
|
|
lineHeight: UIDevice.isIPad ? VDSTypography.lineHeightTitle24 : VDSTypography.lineHeightTitle20)
|
|
|
|
public static let boldBodyLarge = TextStyle(rawValue: "boldBodyLarge",
|
|
fontFace: .edsBold,
|
|
pointSize: VDSTypography.fontSizeBody16,
|
|
lineHeight: VDSTypography.lineHeightBody20,
|
|
letterSpacing: VDSTypography.letterSpacingWide)
|
|
|
|
public static let bodyLarge = TextStyle(rawValue: "bodyLarge",
|
|
fontFace: .edsRegular,
|
|
pointSize: VDSTypography.fontSizeBody16,
|
|
lineHeight: VDSTypography.lineHeightBody20,
|
|
letterSpacing:VDSTypography.letterSpacingWide)
|
|
|
|
public static let boldBodyMedium = TextStyle(rawValue: "boldBodyMedium",
|
|
fontFace: .edsBold,
|
|
pointSize: VDSTypography.fontSizeBody14,
|
|
lineHeight: VDSTypography.lineHeightBody18,
|
|
letterSpacing: VDSTypography.letterSpacingWide)
|
|
|
|
public static let bodyMedium = TextStyle(rawValue: "bodyMedium",
|
|
fontFace: .edsRegular,
|
|
pointSize: VDSTypography.fontSizeBody14,
|
|
lineHeight: VDSTypography.lineHeightBody18,
|
|
letterSpacing: VDSTypography.letterSpacingWide)
|
|
|
|
public static let boldBodySmall = TextStyle(rawValue: "boldBodySmall",
|
|
fontFace: .etxBold,
|
|
pointSize: VDSTypography.fontSizeBody12,
|
|
lineHeight: VDSTypography.lineHeightBody16)
|
|
|
|
public static let bodySmall = TextStyle(rawValue: "bodySmall",
|
|
fontFace: .etxRegular,
|
|
pointSize: VDSTypography.fontSizeBody12,
|
|
lineHeight: VDSTypography.lineHeightBody16)
|
|
|
|
public static let boldMicro = TextStyle(rawValue: "boldMicro",
|
|
fontFace: .etxBold,
|
|
pointSize: VDSTypography.fontSizeMicro11,
|
|
lineHeight: VDSTypography.lineHeightMicro16)
|
|
|
|
public static let micro = TextStyle(rawValue: "micro",
|
|
fontFace: .etxRegular,
|
|
pointSize: VDSTypography.fontSizeMicro11,
|
|
lineHeight: VDSTypography.lineHeightMicro16)
|
|
|
|
public static var allCases: [TextStyle] {
|
|
return [
|
|
featureXLarge,
|
|
boldFeatureXLarge,
|
|
featureLarge,
|
|
boldFeatureLarge,
|
|
featureMedium,
|
|
boldFeatureMedium,
|
|
featureSmall,
|
|
boldFeatureSmall,
|
|
featureXSmall,
|
|
boldFeatureXSmall,
|
|
title2XLarge,
|
|
boldTitle2XLarge,
|
|
titleXLarge,
|
|
boldTitleXLarge,
|
|
titleLarge,
|
|
boldTitleLarge,
|
|
titleMedium,
|
|
boldTitleMedium,
|
|
titleSmall,
|
|
boldTitleSmall,
|
|
bodyLarge,
|
|
boldBodyLarge,
|
|
bodyMedium,
|
|
boldBodyMedium,
|
|
bodySmall,
|
|
boldBodySmall,
|
|
micro,
|
|
boldMicro
|
|
]
|
|
}
|
|
}
|
|
|
|
extension TextStyle {
|
|
/// Enum used to describe the naming convention for the Typography.
|
|
public enum StandardStyle: String, CaseIterable {
|
|
case featureXLarge,
|
|
featureLarge,
|
|
featureMedium,
|
|
featureSmall,
|
|
featureXSmall,
|
|
title2XLarge,
|
|
titleXLarge,
|
|
titleLarge,
|
|
titleMedium,
|
|
titleSmall,
|
|
bodyLarge,
|
|
bodyMedium,
|
|
bodySmall,
|
|
micro
|
|
|
|
/// The bold version for this Standard Style.
|
|
public var bold: TextStyle {
|
|
return TextStyle(rawValue: "bold\(rawValue.prefix(1).uppercased())\(rawValue.dropFirst())")!
|
|
}
|
|
|
|
/// The regular version for this Standard Style.
|
|
public var regular: TextStyle {
|
|
TextStyle(rawValue: rawValue)!
|
|
}
|
|
}
|
|
|
|
/// The converting a TextStyle to a StandardStyle.
|
|
public func toStandardStyle() -> StandardStyle {
|
|
var rawName = rawValue
|
|
if rawName.hasPrefix("bold") {
|
|
let updatedRaw = rawName.replacingOccurrences(of: "bold", with: "")
|
|
rawName = updatedRaw.prefix(1).lowercased() + updatedRaw.dropFirst()
|
|
}
|
|
return StandardStyle(rawValue: rawName)!
|
|
}
|
|
}
|