mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-07 16:03:33 +00:00
99 lines
3.2 KiB
Swift
99 lines
3.2 KiB
Swift
import Foundation
|
|
import SwiftUI
|
|
#if os(macOS)
|
|
import AppKit
|
|
#endif
|
|
|
|
enum OpenClawChatTypography {
|
|
static var title3: Font {
|
|
display(size: 22, weight: .bold, relativeTo: .title2)
|
|
}
|
|
|
|
static var title3SemiBold: Font {
|
|
display(size: 22, weight: .semibold, relativeTo: .title2)
|
|
}
|
|
|
|
static var headline: Font {
|
|
display(size: 17, weight: .semibold, relativeTo: .headline)
|
|
}
|
|
|
|
static var callout: Font {
|
|
body(size: 16, weight: .regular, relativeTo: .callout)
|
|
}
|
|
|
|
static var body: Font {
|
|
body(size: 17, weight: .regular, relativeTo: .body)
|
|
}
|
|
|
|
static var footnote: Font {
|
|
body(size: 13, weight: .regular, relativeTo: .footnote)
|
|
}
|
|
|
|
static var footnoteSemiBold: Font {
|
|
body(size: 13, weight: .semibold, relativeTo: .footnote)
|
|
}
|
|
|
|
static var caption: Font {
|
|
body(size: 12, weight: .regular, relativeTo: .caption)
|
|
}
|
|
|
|
static var captionSemiBold: Font {
|
|
body(size: 12, weight: .semibold, relativeTo: .caption)
|
|
}
|
|
|
|
static var caption2: Font {
|
|
body(size: 11, weight: .regular, relativeTo: .caption2)
|
|
}
|
|
|
|
static func avatar(size: CGFloat) -> Font {
|
|
self.body(size: size, weight: .bold, relativeTo: .caption)
|
|
}
|
|
|
|
static func body(size: CGFloat, weight: Font.Weight, relativeTo textStyle: Font.TextStyle) -> Font {
|
|
#if os(iOS)
|
|
Font.custom(self.bodyPostScriptName, size: size, relativeTo: textStyle).weight(weight)
|
|
#elseif os(macOS)
|
|
Font.custom(self.macSystemFontName(size: size), size: size, relativeTo: textStyle).weight(weight)
|
|
#else
|
|
Font.system(size: size, weight: weight)
|
|
#endif
|
|
}
|
|
|
|
static func display(size: CGFloat, weight: Font.Weight, relativeTo textStyle: Font.TextStyle) -> Font {
|
|
#if os(iOS)
|
|
Font.custom(self.displayPostScriptName, size: size, relativeTo: textStyle).weight(weight)
|
|
#elseif os(macOS)
|
|
Font.custom(self.macSystemFontName(size: size), size: size, relativeTo: textStyle).weight(weight)
|
|
#else
|
|
Font.system(size: size, weight: weight)
|
|
#endif
|
|
}
|
|
|
|
static func mono(size: CGFloat, weight: Font.Weight = .regular, relativeTo textStyle: Font.TextStyle) -> Font {
|
|
#if os(iOS)
|
|
let name = weight == .semibold ? Self.monoSemiBoldPostScriptName : Self.monoPostScriptName
|
|
return Font.custom(name, size: size, relativeTo: textStyle)
|
|
#elseif os(macOS)
|
|
return Font.custom(self.macMonospacedSystemFontName(size: size), size: size, relativeTo: textStyle)
|
|
.weight(weight)
|
|
#else
|
|
return Font.system(size: size, weight: weight, design: .monospaced)
|
|
#endif
|
|
}
|
|
|
|
private static let displayPostScriptName = "RedHatDisplay-Regular"
|
|
private static let bodyPostScriptName = "Inter-Regular"
|
|
private static let monoPostScriptName = "JetBrainsMono-Regular"
|
|
private static let monoSemiBoldPostScriptName = "JetBrainsMono-SemiBold"
|
|
|
|
#if os(macOS)
|
|
private static func macSystemFontName(size: CGFloat) -> String {
|
|
NSFont.systemFont(ofSize: size).fontName
|
|
}
|
|
|
|
private static func macMonospacedSystemFontName(size: CGFloat) -> String {
|
|
NSFont.monospacedSystemFont(ofSize: size, weight: .regular).fontName
|
|
}
|
|
#endif
|
|
}
|