Visual_Novel_iOS/crush/Crush/Src/Components/Skin/CLGlobalTokens.swift

308 lines
13 KiB
Swift

//
// CLGlobalTokens.swift
// Crush
//
// Created by Leon on 2025/8/14.
//
enum CLEnumGlobalToken: String, CaseIterable {
init?(caseName: String) {
self = CLEnumGlobalToken.allCases.first(where: { "\($0)" == caseName }) ?? .glo_color_orange_0
}
case glo_color_orange_0 = "glo.color.orange.0"
case glo_color_orange_10 = "glo.color.orange.10"
case glo_color_orange_20 = "glo.color.orange.20"
case glo_color_orange_30 = "glo.color.orange.30"
case glo_color_orange_40 = "glo.color.orange.40"
case glo_color_orange_50 = "glo.color.orange.50"
case glo_color_orange_60 = "glo.color.orange.60"
case glo_color_orange_70 = "glo.color.orange.70"
case glo_color_orange_80 = "glo.color.orange.80"
case glo_color_orange_90 = "glo.color.orange.90"
case glo_color_yellow_0 = "glo.color.yellow.0"
case glo_color_yellow_10 = "glo.color.yellow.10"
case glo_color_yellow_20 = "glo.color.yellow.20"
case glo_color_yellow_30 = "glo.color.yellow.30"
case glo_color_yellow_40 = "glo.color.yellow.40"
case glo_color_yellow_50 = "glo.color.yellow.50"
case glo_color_yellow_60 = "glo.color.yellow.60"
case glo_color_yellow_70 = "glo.color.yellow.70"
case glo_color_yellow_80 = "glo.color.yellow.80"
case glo_color_yellow_90 = "glo.color.yellow.90"
case glo_color_grass_0 = "glo.color.grass.0"
case glo_color_grass_10 = "glo.color.grass.10"
case glo_color_grass_20 = "glo.color.grass.20"
case glo_color_grass_30 = "glo.color.grass.30"
case glo_color_grass_40 = "glo.color.grass.40"
case glo_color_grass_50 = "glo.color.grass.50"
case glo_color_grass_60 = "glo.color.grass.60"
case glo_color_grass_70 = "glo.color.grass.70"
case glo_color_grass_80 = "glo.color.grass.80"
case glo_color_grass_90 = "glo.color.grass.90"
case glo_color_green_0 = "glo.color.green.0"
case glo_color_green_10 = "glo.color.green.10"
case glo_color_green_20 = "glo.color.green.20"
case glo_color_green_30 = "glo.color.green.30"
case glo_color_green_40 = "glo.color.green.40"
case glo_color_green_50 = "glo.color.green.50"
case glo_color_green_60 = "glo.color.green.60"
case glo_color_green_70 = "glo.color.green.70"
case glo_color_green_80 = "glo.color.green.80"
case glo_color_green_90 = "glo.color.green.90"
case glo_color_mint_0 = "glo.color.mint.0"
case glo_color_mint_10 = "glo.color.mint.10"
case glo_color_mint_20 = "glo.color.mint.20"
case glo_color_mint_30 = "glo.color.mint.30"
case glo_color_mint_40 = "glo.color.mint.40"
case glo_color_mint_50 = "glo.color.mint.50"
case glo_color_mint_60 = "glo.color.mint.60"
case glo_color_mint_70 = "glo.color.mint.70"
case glo_color_mint_80 = "glo.color.mint.80"
case glo_color_mint_90 = "glo.color.mint.90"
case glo_color_sky_0 = "glo.color.sky.0"
case glo_color_sky_10 = "glo.color.sky.10"
case glo_color_sky_20 = "glo.color.sky.20"
case glo_color_sky_30 = "glo.color.sky.30"
case glo_color_sky_40 = "glo.color.sky.40"
case glo_color_sky_50 = "glo.color.sky.50"
case glo_color_sky_60 = "glo.color.sky.60"
case glo_color_sky_70 = "glo.color.sky.70"
case glo_color_sky_80 = "glo.color.sky.80"
case glo_color_sky_90 = "glo.color.sky.90"
case glo_color_blue_0 = "glo.color.blue.0"
case glo_color_blue_10 = "glo.color.blue.10"
case glo_color_blue_20 = "glo.color.blue.20"
case glo_color_blue_30 = "glo.color.blue.30"
case glo_color_blue_40 = "glo.color.blue.40"
case glo_color_blue_50 = "glo.color.blue.50"
case glo_color_blue_60 = "glo.color.blue.60"
case glo_color_blue_70 = "glo.color.blue.70"
case glo_color_blue_80 = "glo.color.blue.80"
case glo_color_blue_90 = "glo.color.blue.90"
case glo_color_violet_0 = "glo.color.violet.0"
case glo_color_violet_10 = "glo.color.violet.10"
case glo_color_violet_20 = "glo.color.violet.20"
case glo_color_violet_30 = "glo.color.violet.30"
case glo_color_violet_40 = "glo.color.violet.40"
case glo_color_violet_50 = "glo.color.violet.50"
case glo_color_violet_60 = "glo.color.violet.60"
case glo_color_violet_70 = "glo.color.violet.70"
case glo_color_violet_80 = "glo.color.violet.80"
case glo_color_violet_90 = "glo.color.violet.90"
case glo_color_purple_0 = "glo.color.purple.0"
case glo_color_purple_10 = "glo.color.purple.10"
case glo_color_purple_20 = "glo.color.purple.20"
case glo_color_purple_30 = "glo.color.purple.30"
case glo_color_purple_40 = "glo.color.purple.40"
case glo_color_purple_50 = "glo.color.purple.50"
case glo_color_purple_60 = "glo.color.purple.60"
case glo_color_purple_70 = "glo.color.purple.70"
case glo_color_purple_80 = "glo.color.purple.80"
case glo_color_purple_90 = "glo.color.purple.90"
case glo_color_magenta_0 = "glo.color.magenta.0"
case glo_color_magenta_10 = "glo.color.magenta.10"
case glo_color_magenta_20 = "glo.color.magenta.20"
case glo_color_magenta_30 = "glo.color.magenta.30"
case glo_color_magenta_40 = "glo.color.magenta.40"
case glo_color_magenta_50 = "glo.color.magenta.50"
case glo_color_magenta_60 = "glo.color.magenta.60"
case glo_color_magenta_70 = "glo.color.magenta.70"
case glo_color_magenta_80 = "glo.color.magenta.80"
case glo_color_magenta_90 = "glo.color.magenta.90"
case glo_color_red_0 = "glo.color.red.0"
case glo_color_red_10 = "glo.color.red.10"
case glo_color_red_20 = "glo.color.red.20"
case glo_color_red_30 = "glo.color.red.30"
case glo_color_red_40 = "glo.color.red.40"
case glo_color_red_50 = "glo.color.red.50"
case glo_color_red_60 = "glo.color.red.60"
case glo_color_red_70 = "glo.color.red.70"
case glo_color_red_80 = "glo.color.red.80"
case glo_color_red_90 = "glo.color.red.90"
case glo_color_grey_0 = "glo.color.grey.0"
case glo_color_grey_10 = "glo.color.grey.10"
case glo_color_grey_20 = "glo.color.grey.20"
case glo_color_grey_30 = "glo.color.grey.30"
case glo_color_grey_40 = "glo.color.grey.40"
case glo_color_grey_50 = "glo.color.grey.50"
case glo_color_grey_60 = "glo.color.grey.60"
case glo_color_grey_70 = "glo.color.grey.70"
case glo_color_grey_80 = "glo.color.grey.80"
case glo_color_grey_90 = "glo.color.grey.90"
case glo_color_grey_100 = "glo.color.grey.100"
case glo_color_white = "glo.color.white"
case glo_color_black = "glo.color.black"
case glo_transparent_t0 = "glo.transparent.t0"
case glo_transparent_t2 = "glo.transparent.t2"
case glo_transparent_t4 = "glo.transparent.t4"
case glo_transparent_t6 = "glo.transparent.t6"
case glo_transparent_t8 = "glo.transparent.t8"
case glo_transparent_t12 = "glo.transparent.t12"
case glo_transparent_t15 = "glo.transparent.t15"
case glo_transparent_t20 = "glo.transparent.t20"
case glo_transparent_t25 = "glo.transparent.t25"
case glo_transparent_t30 = "glo.transparent.t30"
case glo_transparent_t45 = "glo.transparent.t45"
case glo_transparent_t60 = "glo.transparent.t60"
case glo_transparent_t65 = "glo.transparent.t65"
case glo_transparent_t85 = "glo.transparent.t85"
case glo_transparent_t100 = "glo.transparent.t100"
case glo_deg_ltr = "glo.deg.ltr"
case glo_deg_ttb = "glo.deg.ttb"
case glo_deg_lttrb = "glo.deg.lttrb"
case glo_font_family_sys = "glo.font.family.sys"
case glo_font_family_sys_italic = "glo.font.family.sys.italic"
case glo_font_family_numDisplay = "glo.font.family.numDisplay"
case glo_font_family_num = "glo.font.family.num"
case glo_font_family_display = "glo.font.family.display"
case glo_font_size_64 = "glo.font.size.64"
case glo_font_size_48 = "glo.font.size.48"
case glo_font_size_36 = "glo.font.size.36"
case glo_font_size_24 = "glo.font.size.24"
case glo_font_size_20 = "glo.font.size.20"
case glo_font_size_18 = "glo.font.size.18"
case glo_font_size_16 = "glo.font.size.16"
case glo_font_size_14 = "glo.font.size.14"
case glo_font_size_12 = "glo.font.size.12"
case glo_font_weight_regular = "glo.font.weight.regular"
case glo_font_weight_medium = "glo.font.weight.medium"
case glo_font_weight_semibold = "glo.font.weight.semibold"
case glo_font_weight_bold = "glo.font.weight.bold"
case glo_font_lineheight_size64 = "glo.font.lineheight.size64"
case glo_font_lineheight_size48 = "glo.font.lineheight.size48"
case glo_font_lineheight_size36 = "glo.font.lineheight.size36"
case glo_font_lineheight_size24 = "glo.font.lineheight.size24"
case glo_font_lineheight_size20 = "glo.font.lineheight.size20"
case glo_font_lineheight_size18 = "glo.font.lineheight.size18"
case glo_font_lineheight_size16 = "glo.font.lineheight.size16"
case glo_font_lineheight_size14 = "glo.font.lineheight.size14"
case glo_font_lineheight_size12 = "glo.font.lineheight.size12"
case glo_font_lineheight_size0 = "glo.font.lineheight.size0"
case glo_radio_1_1 = "glo.radio.1.1"
case glo_radio_4_3 = "glo.radio.4.3"
case glo_radio_3_2 = "glo.radio.3.2"
case glo_radio_2_1 = "glo.radio.2.1"
case glo_radio_16_9 = "glo.radio.16.9"
case glo_radius_4 = "glo.radius.4"
case glo_radius_8 = "glo.radius.8"
case glo_radius_12 = "glo.radius.12"
case glo_radius_16 = "glo.radius.16"
case glo_radius_round = "glo.radius.round"
case glo_border_half = "glo.border.half"
case glo_border_1 = "glo.border.1"
case glo_border_2 = "glo.border.2"
case glo_border_4 = "glo.border.4"
case glo_spacing_4 = "glo.spacing.4"
case glo_spacing_8 = "glo.spacing.8"
case glo_spacing_12 = "glo.spacing.12"
case glo_spacing_16 = "glo.spacing.16"
case glo_spacing_24 = "glo.spacing.24"
case glo_spacing_32 = "glo.spacing.32"
case glo_spacing_48 = "glo.spacing.48"
case glo_spacing_64 = "glo.spacing.64"
case glo_spacing_80 = "glo.spacing.80"
case glo_spacing_128 = "glo.spacing.128"
}
func KeyForGlobalTokenFrom(_ token: CLEnumGlobalToken) -> String {
return token.rawValue
}
class CLGlobalToken {
static let baseTokens = CLBaseTokens.shared
// MARK: - Color Methods
static func color(token: CLEnumGlobalToken) -> UIColor? {
let key = KeyForGlobalTokenFrom(token)
let values = baseTokens.getTokensByKey(key)
return EPBaseObject.subGetColorByTokenValues(values)
}
static func darkColor(token: CLEnumGlobalToken) -> UIColor? {
let key = KeyForGlobalTokenFrom(token)
let values = baseTokens.getDarkTokens(key)
return EPBaseObject.subGetColorByTokenValues(values)
}
// MARK: - String Method
static func string(token: CLEnumGlobalToken) -> String? {
let key = KeyForGlobalTokenFrom(token)
return baseTokens.getTokenByKey(key)
}
// MARK: - Float Method
static func float(token: CLEnumGlobalToken) -> CGFloat {
let key = KeyForGlobalTokenFrom(token)
let value = baseTokens.getTokenByKey(key)
guard let floatValue = Float(value) else {
print("❌ Invalid float format for key: \(key)")
return 0
}
return CGFloat(floatValue)
}
// MARK: - Radius Method
static func radius(token: CLEnumGlobalToken) -> CGFloat {
let key = KeyForGlobalTokenFrom(token)
let value = baseTokens.getTokenByKey(key)
guard let radius = Float(value) else {
print("❌ Invalid radius format for key: \(key)")
return 0
}
// print("🎨 radius: \(key) \(radius)") // DLog print
return CGFloat(radius)
}
// MARK: - Border Method
static func border(token: CLEnumGlobalToken) -> CGFloat {
let key = KeyForGlobalTokenFrom(token)
let value = baseTokens.getTokenByKey(key)
guard let border = Float(value) else {
print("❌ Invalid border format for key: \(key)")
return 0
}
// print("🎨 border: \(key) \(border)") // DLog print
return CGFloat(border)
}
// MARK: - Shadow Method
static func shadow(token: CLEnumGlobalToken) -> EPShadow {
let key = KeyForGlobalTokenFrom(token)
let values = baseTokens.getTokensByKey(key)
guard values.count == 4, values.first?.contains(EPConfigShadowPrefix) == true else {
assertionFailure("Wrong format for shadow token: \(key)")
return EPShadow()
}
var shadow = EPShadow()
if let colorStr = values.first?.replacingOccurrences(of: EPConfigShadowPrefix, with: "") {
let color = EPBaseObject.subGetColorByTokenValues([colorStr])
shadow.color = color
}
if let opacity = Float(values[1]) {
shadow.opacity = opacity
}
let offXy = values[2].components(separatedBy: "&")
if offXy.count == 2,
let x = Float(offXy[0]), let y = Float(offXy[1]) {
shadow.offset = CGSize(width: CGFloat(x), height: CGFloat(y))
}
if let radius = Float(values[3]) {
shadow.radius = CGFloat(radius)
}
return shadow
}
}