diff --git a/ios/Sources/NucleusFonts/NucleusFont+Defaults.swift b/ios/Sources/NucleusFonts/NucleusFont+Defaults.swift index 07de2ed..4ca3b17 100644 --- a/ios/Sources/NucleusFonts/NucleusFont+Defaults.swift +++ b/ios/Sources/NucleusFonts/NucleusFont+Defaults.swift @@ -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, + ] +} diff --git a/ios/Sources/NucleusFonts/NucleusFont.swift b/ios/Sources/NucleusFonts/NucleusFont.swift index e264a03..4ef0afa 100644 --- a/ios/Sources/NucleusFonts/NucleusFont.swift +++ b/ios/Sources/NucleusFonts/NucleusFont.swift @@ -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 { diff --git a/tokens/templates/ios/NucleusFont+Defaults.swift.hbs b/tokens/templates/ios/NucleusFont+Defaults.swift.hbs index b679f6a..49be667 100644 --- a/tokens/templates/ios/NucleusFont+Defaults.swift.hbs +++ b/tokens/templates/ios/NucleusFont+Defaults.swift.hbs @@ -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}} + ] +}