import UIKit public enum Values { // MARK: - Alpha Values public static let veryLowOpacity = CGFloat(0.12) public static let lowOpacity = CGFloat(0.4) public static let mediumOpacity = CGFloat(0.6) public static let highOpacity = CGFloat(0.75) // MARK: - Font Sizes public static let miniFontSize = isIPhone5OrSmaller ? CGFloat(8) : CGFloat(10) public static let verySmallFontSize = isIPhone5OrSmaller ? CGFloat(10) : CGFloat(12) public static let smallFontSize = isIPhone5OrSmaller ? CGFloat(13) : CGFloat(15) public static let mediumFontSize = isIPhone5OrSmaller ? CGFloat(15) : CGFloat(17) public static let mediumLargeFontSize = isIPhone5OrSmaller ? CGFloat(17) : CGFloat(19) public static let largeFontSize = isIPhone5OrSmaller ? CGFloat(20) : CGFloat(22) public static let veryLargeFontSize = isIPhone5OrSmaller ? CGFloat(24) : CGFloat(26) public static let superLargeFontSize = isIPhone5OrSmaller ? CGFloat(31) : CGFloat(33) public static let massiveFontSize = CGFloat(50) // MARK: - Element Sizes public static let smallButtonHeight = isIPhone5OrSmaller ? CGFloat(24) : CGFloat(28) public static let mediumSmallButtonHeight = isIPhone5OrSmaller ? CGFloat(28) : CGFloat(30) public static let mediumButtonHeight = isIPhone5OrSmaller ? CGFloat(30) : CGFloat(34) public static let largeButtonHeight = isIPhone5OrSmaller ? CGFloat(40) : CGFloat(45) public static let alertButtonHeight: CGFloat = 51 // 19px tall font with 16px margins public static let accentLineThickness = CGFloat(4) public static let searchBarHeight = CGFloat(36) public static var separatorThickness: CGFloat { return 1 / UIScreen.main.scale } public static func footerGradientHeight(window: UIWindow?) -> CGFloat { return ( Values.veryLargeSpacing + Values.largeButtonHeight + Values.smallSpacing + (window?.safeAreaInsets.bottom ?? 0) ) } // MARK: - Distances public static let verySmallSpacing = CGFloat(4) public static let smallSpacing = CGFloat(8) public static let mediumSpacing = CGFloat(16) public static let largeSpacing = CGFloat(24) public static let veryLargeSpacing = CGFloat(35) public static let massiveSpacing = CGFloat(64) public static let onboardingButtonBottomOffset = isIPhone5OrSmaller ? CGFloat(52) : CGFloat(72) // MARK: - iPad Sizes public static let iPadModalWidth = UIScreen.main.bounds.width / 2 public static let iPadButtonWidth = CGFloat(240) public static let iPadButtonSpacing = CGFloat(32) public static let iPadUserSessionIdContainerWidth = iPadButtonWidth * 2 + iPadButtonSpacing // MARK: - Auto Scaling static let iPhone5ScreenWidth: CGFloat = 320 static let iPhone7PlusScreenWidth: CGFloat = 414 static var screenShortDimension: CGFloat { return min(UIScreen.main.bounds.size.width, UIScreen.main.bounds.size.height) } public static func scaleFromIPhone5To7Plus(_ iPhone5Value: CGFloat, _ iPhone7PlusValue: CGFloat) -> CGFloat { return screenShortDimension .inverseLerp(iPhone5ScreenWidth, iPhone7PlusScreenWidth) .clamp01() .lerp(iPhone5Value, iPhone7PlusValue) .rounded() } public static func scaleFromIPhone5(_ iPhone5Value: CGFloat) -> CGFloat { round(iPhone5Value * screenShortDimension / iPhone5ScreenWidth) } }