From 138404fd40b60bee8418fc1a2dfaa4919955af8f Mon Sep 17 00:00:00 2001 From: Voiko Volodymyr Date: Thu, 18 Dec 2025 15:14:06 +0200 Subject: [PATCH] Add support for numbers --- .../Convertor/DesignTokensConverter.swift | 4 +++- .../DesignTokensNumberValueExtractor.swift | 15 +++++++++++++++ .../Resources/design.tokens.json | 8 ++++++++ .../Resources/expected.snapptheming.json | 1 + .../SnappThemingDesignTokensParserTests.swift | 6 +++--- 5 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 Sources/SnappThemingDesignTokensSupport/Convertor/Extractor/DesignTokensNumberValueExtractor.swift diff --git a/Sources/SnappThemingDesignTokensSupport/Convertor/DesignTokensConverter.swift b/Sources/SnappThemingDesignTokensSupport/Convertor/DesignTokensConverter.swift index 4647992..951a7b4 100644 --- a/Sources/SnappThemingDesignTokensSupport/Convertor/DesignTokensConverter.swift +++ b/Sources/SnappThemingDesignTokensSupport/Convertor/DesignTokensConverter.swift @@ -221,7 +221,9 @@ public struct DesignTokensConverter: Sendable { return .typography(fontWeightMapping: configuration.fontWeightMapping) case .gradient: return .gradient(using: configuration.colorHexFormat) - case .fontWeight, .number, + case .number: + return .number + case .fontWeight, .duration, .shadow, .strokeStyle, .border, .cubicBezier, .transition: fallthrough diff --git a/Sources/SnappThemingDesignTokensSupport/Convertor/Extractor/DesignTokensNumberValueExtractor.swift b/Sources/SnappThemingDesignTokensSupport/Convertor/Extractor/DesignTokensNumberValueExtractor.swift new file mode 100644 index 0000000..15ca130 --- /dev/null +++ b/Sources/SnappThemingDesignTokensSupport/Convertor/Extractor/DesignTokensNumberValueExtractor.swift @@ -0,0 +1,15 @@ +// +// DesignTokensNumberValueExtractor.swift +// +// Created by Volodymyr Voiko on 09.04.2025. +// + +import Foundation +import SnappDesignTokens +import SnappTheming + +extension DesignTokensTokenValueExtractor { + static var number: Self { + .init(\.metricsCache) { $0 } + } +} diff --git a/Tests/SnappThemingDesignTokensSupportTests/Resources/design.tokens.json b/Tests/SnappThemingDesignTokensSupportTests/Resources/design.tokens.json index 1da78f0..05f790f 100644 --- a/Tests/SnappThemingDesignTokensSupportTests/Resources/design.tokens.json +++ b/Tests/SnappThemingDesignTokensSupportTests/Resources/design.tokens.json @@ -119,6 +119,14 @@ } ] } + }, + "number": { + "aspect": { + "square": { + "$type": "number", + "$value": 1.0 + } + } } }, "files": { diff --git a/Tests/SnappThemingDesignTokensSupportTests/Resources/expected.snapptheming.json b/Tests/SnappThemingDesignTokensSupportTests/Resources/expected.snapptheming.json index bf911b6..8fd8591 100644 --- a/Tests/SnappThemingDesignTokensSupportTests/Resources/expected.snapptheming.json +++ b/Tests/SnappThemingDesignTokensSupportTests/Resources/expected.snapptheming.json @@ -48,6 +48,7 @@ "baseDimensionSpacing20" : 20, "semanticFontsizeBody" : 16, "semanticFontsizeH1" : 32, + "semanticNumberAspectSquare" : 1, "semanticSpacingMedium" : 20, "semanticSpacingSmall" : 10 }, diff --git a/Tests/SnappThemingDesignTokensSupportTests/SnappThemingDesignTokensParserTests.swift b/Tests/SnappThemingDesignTokensSupportTests/SnappThemingDesignTokensParserTests.swift index ee4cefa..a9bb3c6 100644 --- a/Tests/SnappThemingDesignTokensSupportTests/SnappThemingDesignTokensParserTests.swift +++ b/Tests/SnappThemingDesignTokensSupportTests/SnappThemingDesignTokensParserTests.swift @@ -81,13 +81,13 @@ struct SnappThemingDesignTokensParserTests { #""" { "unsupported": { - "$type": "number", - "$value": 0.5 + "$type": "fontWeight", + "$value": 100 } } """#, DesignTokensConverter.Error.unsupportedToken( - .value(.number(0.5)), + .value(.fontWeight(FontWeightValue(alias: .thin))), forKey: "unsupported" ) ),