Skip to content

Commit

Permalink
Solara
Browse files Browse the repository at this point in the history
  • Loading branch information
MalekKamel committed Sep 23, 2024
1 parent 4ba4b57 commit b4fd289
Showing 1 changed file with 40 additions and 52 deletions.
92 changes: 40 additions & 52 deletions solara/lib/core/scripts/theme_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@ def generate_colors
@theme['colors'].each do |name, value|
code += " val #{name} = Color.parseColor(\"#{value}\")\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_typography
Expand All @@ -72,40 +71,37 @@ def generate_typography
code += " val #{name} = #{value}\n"
end
code += " }\n"
code += " }\n\n"
code
code + " }\n\n"
end

def generate_spacing
code = " object Spacing {\n"
@theme['spacing'].each do |name, value|
code += " val #{name} = #{value}\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_border_radius
code = " object BorderRadius {\n"
@theme['borderRadius'].each do |name, value|
code += " val #{name} = #{value}\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_elevation
code = " object Elevation {\n"
@theme['elevation'].each do |name, value|
code += " val #{name} = #{value}\n"
end
code += " }\n"
code + " }\n"
end
end

class SwiftThemeGenerator < ThemeGenerator
def generate
code = "import SwiftUI\n\n"
code = "import UIKit\n\n"
code += "struct BrandTheme {\n"
code += generate_colors
code += generate_typography
Expand All @@ -122,39 +118,37 @@ def generate
def generate_colors
code = " struct Colors {\n"
@theme['colors'].each do |name, value|
code += " static let #{name} = Color(hex: \"#{value}\")\n"
code += " static let #{name} = UIColor(hex: \"#{value}\")\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_colors_hex_extension
<<-SWIFT
extension Color {
init(hex: String) {
let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
var int: UInt64 = 0
Scanner(string: hex).scanHexInt64(&int)
let a, r, g, b: UInt64
switch hex.count {
case 3: // RGB (12-bit)
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6: // RGB (24-bit)
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8: // ARGB (32-bit)
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
(a, r, g, b) = (1, 1, 1, 0)
}
self.init(
.sRGB,
red: Double(r) / 255,
green: Double(g) / 255,
blue: Double(b) / 255,
opacity: Double(a) / 255
)
}
extension UIColor {
convenience init(hex: String) {
let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
var int: UInt64 = 0
Scanner(string: hex).scanHexInt64(&int)
let a, r, g, b: UInt64
switch hex.count {
case 3: // RGB (12-bit)
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6: // RGB (24-bit)
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8: // ARGB (32-bit)
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
(a, r, g, b) = (255, 255, 255, 0)
}
self.init(
red: CGFloat(r) / 255,
green: CGFloat(g) / 255,
blue: CGFloat(b) / 255,
alpha: CGFloat(a) / 255
)
}
}
SWIFT
end
Expand All @@ -171,34 +165,31 @@ def generate_typography
code += " static let #{name}: CGFloat = #{value}\n"
end
code += " }\n"
code += " }\n\n"
code
code + " }\n\n"
end

def generate_spacing
code = " struct Spacing {\n"
@theme['spacing'].each do |name, value|
code += " static let #{name}: CGFloat = #{value}\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_border_radius
code = " struct BorderRadius {\n"
@theme['borderRadius'].each do |name, value|
code += " static let #{name}: CGFloat = #{value}\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_elevation
code = " struct Elevation {\n"
@theme['elevation'].each do |name, value|
code += " static let #{name}: CGFloat = #{value}\n"
end
code += " }\n"
code + " }\n"
end
end

Expand All @@ -220,8 +211,7 @@ def generate_colors
@theme['colors'].each do |name, value|
code += " static const Color #{name} = Color(0xFF#{value[1..-1]});\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_typography
Expand All @@ -234,17 +224,15 @@ def generate_typography
@theme['typography']['fontSize'].each do |name, value|
code += " static const double #{name} = #{value};\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_spacing
code = " class Spacing {\n"
@theme['spacing'].each do |name, value|
code += " static const double #{name} = #{value};\n"
end
code += " }\n\n"
code
code + " }\n\n"
end

def generate_border_radius
Expand All @@ -260,6 +248,6 @@ def generate_elevation
@theme['elevation'].each do |name, value|
code += " static const double #{name} = #{value};\n"
end
code += " }\n"
code + " }\n"
end
end

0 comments on commit b4fd289

Please sign in to comment.