Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions ios/Sources/NucleusFonts/NucleusFont+Defaults.swift
Original file line number Diff line number Diff line change
Expand Up @@ -170,3 +170,30 @@ public extension NucleusFont {
dynamicTypeStyle: .caption2
)
}

extension NucleusFont {
// map for token-string resolution
static let tokenDefaults: [String: NucleusFont] = [
"d1": .d1,
"n1": .n1,
"n2": .n2,
"n3": .n3,
"n4": .n4,
"n5": .n5,
"h1": .h1,
"h2": .h2,
"h3": .h3,
"h4": .h4,
"s1": .s1,
"s2": .s2,
"s3": .s3,
"s4": .s4,
"l1": .l1,
"l2": .l2,
"l3": .l3,
"b1": .b1,
"b2": .b2,
"b3": .b3,
"b4": .b4,
]
}
17 changes: 17 additions & 0 deletions ios/Sources/NucleusFonts/NucleusFont.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,23 @@ public struct NucleusFont: Equatable, Hashable, Sendable {
}
}

// MARK: - Token Resolution

extension NucleusFont {
/// Resolves a token string like `"n2"` into its matching Nucleus font.
///
/// Returns `nil` if the token doesn't map to a known default. In debug builds an unknown token also trips an assertion failure, so a stale or mistyped token surfaces during development rather than silently falling through.
///
/// - Parameter token: The token string to resolve, e.g. `"n2"`.
public init?(token: String) {
guard let font = Self.tokenDefaults[token] else {
assertionFailure("unknown NucleusFont token: \(token)")
return nil
}
self = font
}
}

// MARK: - Mutating Methods

extension NucleusFont {
Expand Down
9 changes: 9 additions & 0 deletions tokens/templates/ios/NucleusFont+Defaults.swift.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,12 @@ public extension NucleusFont {
)
{{/each}}
}

extension NucleusFont {
// map for token-string resolution
static let tokenDefaults: [String: NucleusFont] = [
{{#each tokens}}
"{{name}}": .{{name}},
{{/each}}
]
}
Loading