From 7b1df9140c5f4969c8262a1060bbfb47f577f647 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Thu, 19 Sep 2024 16:37:18 +0200 Subject: [PATCH 01/25] doc: add small details about release Signed-off-by: Pierre-Yves Lapersonne --- docs_release/README.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docs_release/README.md b/docs_release/README.md index 1c20cd791..c0a46961c 100644 --- a/docs_release/README.md +++ b/docs_release/README.md @@ -58,13 +58,6 @@ This file lists all the steps to follow when releasing a new version of OUDS iOS -- Generate documentation from Swift sources, it will update online version and generate a ZIP file - ```shell - ./generateDoc.sh --libversion=X.Y.Z --usegit - # --usegit means updating GitHub Pages branch - # Add --nozip if you don't want a ZIP file - # X.Y.Z here is just the version number to display in main index.html pages, replace values of course - ``` - Create a new pull request named `Prepare release X.Y.Z` on GitHub to merge your branch into `develop`. - Review and merge this pull request on GitHub.

@@ -75,7 +68,16 @@ This file lists all the steps to follow when releasing a new version of OUDS iOS - Review and merge this pull request on GitHub. The merge strategy must be a **simple merge without squash of commits** (this strategy is only dedicated to feature branches to merge in develop branch). +- Generate documentation from Swift sources, it will update online version and generate a ZIP file in _/tmp_ + ```shell + ./generateDoc.sh --libversion=X.Y.Z --usegit + # --usegit means updating GitHub Pages branch + # Add --nozip if you don't want a ZIP file + # X.Y.Z here is just the version number to display in main index.html pages, replace values of course + ``` + - Launch a job on your runner to build the demo application + - Or use _Fastlane_ command: ```shell # Variables for application signing @@ -153,7 +155,7 @@ This file lists all the steps to follow when releasing a new version of OUDS iOS \## [Unreleased]\(https://github.com/Orange-OpenSource/ouds-ios/compare/X.Y.Z...develop) ``` - - Update in Xcode the version of Showcase target to U.V.W (the new version you suppose it will be) + - Update in Xcode the version of Showcase target to U.V.W (the new version you suppose it will be) and increment build number - Commit your modifications - Push them to the repository - Create a new pull request named `Update release U.V.W` on GitHub to merge your branch into `develop`. From 32a19aaa380cd41432a2ac2a8a949158375608f0 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Thu, 19 Sep 2024 16:39:40 +0200 Subject: [PATCH 02/25] chore: prepare next release Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 3 +++ Showcase/Showcase.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b28307e8..f34d77a2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased](https://github.com/Orange-OpenSource/ouds-ios/compare/0.2.0...develop) + + ## [0.2.0](https://github.com/Orange-OpenSource/ouds-ios/compare/0.1.0...0.2.0) - 2024-09-19 ### Added diff --git a/Showcase/Showcase.xcodeproj/project.pbxproj b/Showcase/Showcase.xcodeproj/project.pbxproj index 8e5fbf04d..09b48e66d 100644 --- a/Showcase/Showcase.xcodeproj/project.pbxproj +++ b/Showcase/Showcase.xcodeproj/project.pbxproj @@ -751,7 +751,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 9; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_ASSET_PATHS = "\"Showcase/Preview Content\""; DEVELOPMENT_TEAM = MG2LSJNJB6; ENABLE_PREVIEWS = YES; @@ -767,7 +767,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 0.2.0; + MARKETING_VERSION = 0.3.0; PRODUCT_BUNDLE_IDENTIFIER = "com.orange.ouds.demoapp-debug"; PRODUCT_NAME = "OUDS Showcase"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -789,7 +789,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 9; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_ASSET_PATHS = "\"Showcase/Preview Content\""; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = MG2LSJNJB6; @@ -806,7 +806,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 0.2.0; + MARKETING_VERSION = 0.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.orange.ouds.demoapp; PRODUCT_NAME = "OUDS Showcase"; PROVISIONING_PROFILE_SPECIFIER = ""; From d6f4268b9887f5ac8329ed072de84e697a336827 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Mon, 23 Sep 2024 09:52:34 +0200 Subject: [PATCH 03/25] refactor: remove tokens `elevationZIndex` and add `elevationX200`(#119) (#121) Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 7 +++++++ .../Values/ElevationRawTokens+Values.swift | 19 +------------------ .../Tests/ElevationRawTokensTests.swift | 6 ++++++ .../ElevationSemanticTokens+Aliases.swift | 3 --- 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f34d77a2b..91fb51958 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/Orange-OpenSource/ouds-ios/compare/0.2.0...develop) +### Added + +- [Library] Add `elevationX200` raw token ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) + +### Removed + +- [Library] Remove raw tokens `elevationZIndex` ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) ## [0.2.0](https://github.com/Orange-OpenSource/ouds-ios/compare/0.1.0...0.2.0) - 2024-09-19 diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift index f7d80ff52..0703e94cd 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift @@ -15,27 +15,10 @@ /// Should be fully generated in the future. extension ElevationRawTokens { - // MARK: Primitive token - Elevation - Z Index - - public static let elevationZIndex0: ElevationRawToken = 0 - public static let elevationZIndexMinus9999: ElevationRawToken = -9999 - public static let elevationZIndex1000: ElevationRawToken = 1000 - public static let elevationZIndex1010: ElevationRawToken = 1010 - public static let elevationZIndex1020: ElevationRawToken = 1020 - public static let elevationZIndex1030: ElevationRawToken = 1030 - public static let elevationZIndex1035: ElevationRawToken = 1035 - public static let elevationZIndex1038: ElevationRawToken = 1038 - public static let elevationZIndex1040: ElevationRawToken = 1040 - public static let elevationZIndex1045: ElevationRawToken = 1045 - public static let elevationZIndex1050: ElevationRawToken = 1050 - public static let elevationZIndex1060: ElevationRawToken = 1060 - public static let elevationZIndex1070: ElevationRawToken = 1070 - public static let elevationZIndex1080: ElevationRawToken = 1080 - public static let elevationZIndex1090: ElevationRawToken = 1090 - // MARK: Primitive token - Elevation - X public static let elevationX0: ElevationRawToken = 0 + public static let elevationX200: ElevationRawToken = 2 // MARK: Primitive token - Elevation - Y diff --git a/OUDS/Core/Tokens/RawTokens/Tests/ElevationRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/ElevationRawTokensTests.swift index 75d4f5449..b1d6737d8 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/ElevationRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/ElevationRawTokensTests.swift @@ -62,6 +62,12 @@ final class ElevationRawTokensTests: XCTestCase { XCTAssertTrue(radius == 6) } + // MARK: - Primitive token - Elevation - X + + func testElevationXRawToken0LessThanX200() throws { + XCTAssertLessThan(ElevationRawTokens.elevationX0, ElevationRawTokens.elevationX200) + } + // MARK: - Primitive token - Elevation - Y func testElevationYRawToken0LessThanY100() throws { diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ElevationSemanticTokens+Aliases.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ElevationSemanticTokens+Aliases.swift index dfe4f183e..ed6685a04 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ElevationSemanticTokens+Aliases.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ElevationSemanticTokens+Aliases.swift @@ -13,9 +13,6 @@ import OUDSTokensRaw -/// Basically an elevation semantic token for Z Index is a raw token for elevation, with the same final type, to keep grammar clean and clear with design system grammar. -public typealias ElevationZIndexSemanticToken = ElevationRawToken - /// Basically an elevation semantic token for X offset is a raw token for elevation, with the same final type, to keep grammar clean and clear with design system grammar. public typealias ElevationXSemanticToken = ElevationRawToken From 6e07429420f11a4d02a126bca4ee8738f756d967 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Mon, 23 Sep 2024 11:19:38 +0200 Subject: [PATCH 04/25] feat: add missing `letterSpacing` typography tokens (#51) (#116) Signed-off-by: Pierre-Yves Lapersonne Co-authored-by: Ludovic Pinel --- CHANGELOG.md | 1 + .../TypographyRawTokens+Composites.swift | 23 ++- .../TypographyRawTokens+Aliases.swift | 5 +- .../Values/TypographyRawTokens+Values.swift | 82 ++++++--- .../Tests/TypographyRawTokensTests.swift | 174 +++++++++++------- 5 files changed, 190 insertions(+), 95 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91fb51958..469ab5f8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [Library] Add letter spacing and more font family tokens for typography ([#51](https://github.com/Orange-OpenSource/ouds-ios/issues/51)) - [Library] Add `elevationX200` raw token ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) ### Removed diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Composites/TypographyRawTokens+Composites.swift b/OUDS/Core/Tokens/RawTokens/Sources/Composites/TypographyRawTokens+Composites.swift index 8c8cd6670..4418d77e8 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Composites/TypographyRawTokens+Composites.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Composites/TypographyRawTokens+Composites.swift @@ -11,6 +11,11 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +import OUDSFoundations + +/// An operator to make for example comparisons between `TypographyCompositeRawToken` +infix operator <| + /// Composite raw tokens are here to pack a set of specific values according to the global design system tool. /// Here a *typography* is finaly defined by some specific values. public struct TypographyCompositeRawToken: Equatable { @@ -23,8 +28,22 @@ public struct TypographyCompositeRawToken: Equatable { /// The line height to apply on texts public let lineHeight: TypographyFontLineHeightRawToken - /// The font weight to associated wit the font family + /// The font weight to associate with the font family public let weight: TypographyFontWeightRawToken - // TODO: How to deal "letter spacing"? + /// The font letter spacing to associated with the font family + public let letterSpacing: TypographyFontLetterSpacingRawToken + + /// Operator which will return `true` if `lhs` is smaller than `rhs`. + /// By "smaller" we mean smaller `size` and smaller or equal `lineHeight`, `weight` and `letterSpacing` + /// - Parameters: + /// - lhs: The typography composite token we expect to be smaller than `rhs` + /// - rhs: The typography composite token we expect to be bigger than `lhs` + /// - Returns Bool: `true` if `lhs` smaller than `rhs`, `false` otherwise + static func <| (lhs: TypographyCompositeRawToken, rhs: TypographyCompositeRawToken) -> Bool { + lhs.size < rhs.size + && lhs.lineHeight <= rhs.lineHeight + && lhs.weight <= rhs.weight + && lhs.letterSpacing <= rhs.letterSpacing + } } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/TypeAliases/TypographyRawTokens+Aliases.swift b/OUDS/Core/Tokens/RawTokens/Sources/TypeAliases/TypographyRawTokens+Aliases.swift index 922094301..530bf1a69 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/TypeAliases/TypographyRawTokens+Aliases.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/TypeAliases/TypographyRawTokens+Aliases.swift @@ -22,5 +22,8 @@ public typealias TypographyFontWeightRawToken = String /// In the global design system tool, *font size* raw tokens are basically `CGFloat` values, to keep grammar clean and clear with design system grammar. public typealias TypographyFontSizeRawToken = CGFloat -/// In the global design system tool, *font line height* raw tokens are basically `Int` values, to keep grammar clean and clear with design system grammar. +/// In the global design system tool, *font line height* raw tokens are basically `CGFloat` values, to keep grammar clean and clear with design system grammar. public typealias TypographyFontLineHeightRawToken = CGFloat + +/// In the global design system tool, *font letter spacing* raw tokens are basically `CGFloat` values, to keep grammar clean and clear with design system grammar. +public typealias TypographyFontLetterSpacingRawToken = CGFloat diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift index c0467a360..851349145 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift @@ -17,7 +17,7 @@ extension TypographyRawTokens { // MARK: Primitive token - Typography - Font size - // Warning: values in pixels! + // WARNING: values in pixels and not in points, do not use as is! public static let fontSize100: TypographyFontSizeRawToken = 10 public static let fontSize150: TypographyFontSizeRawToken = 12 @@ -40,7 +40,7 @@ extension TypographyRawTokens { // MARK: Primitive token - Typography - Line height - // Warning: values in pixels! + // WARNING: values in pixels and not in points, do not use as is! public static let fontLineHeight250: TypographyFontLineHeightRawToken = 16 public static let fontLineHeight350: TypographyFontLineHeightRawToken = 20 @@ -58,17 +58,41 @@ extension TypographyRawTokens { public static let fontLineHeight1850: TypographyFontLineHeightRawToken = 72 public static let fontLineHeight2050: TypographyFontLineHeightRawToken = 80 + // MARK: Primitive token - Typography - Letter spacing + + // WARNING: values in pixels and not in points, do not use as is! + + public static let fontLetterSpacing150: TypographyFontLetterSpacingRawToken = 150 + public static let fontLetterSpacing175: TypographyFontLetterSpacingRawToken = 175 + public static let fontLetterSpacing200: TypographyFontLetterSpacingRawToken = 200 + public static let fontLetterSpacing250: TypographyFontLetterSpacingRawToken = 250 + public static let fontLetterSpacing300: TypographyFontLetterSpacingRawToken = 300 + public static let fontLetterSpacing350: TypographyFontLetterSpacingRawToken = 350 + public static let fontLetterSpacing450: TypographyFontLetterSpacingRawToken = 450 + public static let fontLetterSpacing550: TypographyFontLetterSpacingRawToken = 550 + public static let fontLetterSpacing650: TypographyFontLetterSpacingRawToken = 650 + public static let fontLetterSpacing750: TypographyFontLetterSpacingRawToken = 750 + public static let fontLetterSpacing850: TypographyFontLetterSpacingRawToken = 850 + public static let fontLetterSpacing950: TypographyFontLetterSpacingRawToken = 950 + public static let fontLetterSpacing1050: TypographyFontLetterSpacingRawToken = 1050 + public static let fontLetterSpacing1150: TypographyFontLetterSpacingRawToken = 1150 + public static let fontLetterSpacing1250: TypographyFontLetterSpacingRawToken = 1250 + public static let fontLetterSpacing1450: TypographyFontLetterSpacingRawToken = 1450 + public static let fontLetterSpacing1850: TypographyFontLetterSpacingRawToken = 1850 + // MARK: Primitive token - Typography - Font family + // WARNING: Raw values, do not use as is, ensure fonts are available + public static let fontFamilyBrandDefault: TypographyFontFamilyRawToken = "Helvetica Neue" - // TODO: How to manage font-family-brand-tv = "Helvetica Neue LT"? Not existing in iOS SwiftUI + public static let fontFamilyBrandTV: TypographyFontFamilyRawToken = "Helvetica Neue LT" public static let fontFamilySystemArial: TypographyFontFamilyRawToken = "Arial" public static let fontFamilySystemHelvetica: TypographyFontFamilyRawToken = "Helvetica" - // TODO: How to manage font-family-system-noto-sans = "Noto sans"? Not existing in iOS SwiftUI - // TODO: How to manage font-family-system-sf-pro-text = "SF Pro Text"? Not existing in iOS SwiftUI - // TODO: How to manage font-family-system-roboto = "Roboto"? Not existing in iOS SwiftUI + public static let fontFamilySystemNotoSans: TypographyFontFamilyRawToken = "Noto sans" + public static let fontFamilySystemSFProText: TypographyFontFamilyRawToken = "SF Pro Text" + public static let fontFamilySystemRoboto: TypographyFontFamilyRawToken = "Roboto" public static let fontFamilyMonospaceMenlo: TypographyFontFamilyRawToken = "Menlo" - // TODO: How to manage font-family-system-monaco = "Monaco"? Not existing in iOS SwiftUI + public static let fontFamilyMonospaceMonaco: TypographyFontFamilyRawToken = "Monaco" public static let fontFamilyMonospaceCourierNew: TypographyFontFamilyRawToken = "Courier New" // MARK: Primitive token - Typography - Font weight @@ -80,31 +104,29 @@ extension TypographyRawTokens { public static let fontWeight500: TypographyFontWeightRawToken = "medium" public static let fontWeight600: TypographyFontWeightRawToken = "semibold" public static let fontWeight700: TypographyFontWeightRawToken = "bold" - // TODO: How to manage fontWeight800 = "extra bold"? Not existing in iOS SwiftUI public static let fontWeight900: TypographyFontWeightRawToken = "heavy" - // TODO: How to manage fontWeight950 = "extra black"? Not existing in iOS SwiftUI // MARK: Primitive token - Typography - Composite - public static let typeRegular150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight400) - public static let typeRegular175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight400) - public static let typeRegular200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight400) - public static let typeRegular250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight400) - public static let typeBold150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight700) - public static let typeBold175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight700) - public static let typeBold200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight700) - public static let typeBold250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight700) - public static let typeBold300 = TypographyCompositeRawToken(size: fontSize300, lineHeight: fontLineHeight450, weight: fontWeight700) - public static let typeBold350 = TypographyCompositeRawToken(size: fontSize350, lineHeight: fontLineHeight550, weight: fontWeight700) - public static let typeBold450 = TypographyCompositeRawToken(size: fontSize450, lineHeight: fontLineHeight550, weight: fontWeight700) - public static let typeBold550 = TypographyCompositeRawToken(size: fontSize550, lineHeight: fontLineHeight650, weight: fontWeight700) - public static let typeBold650 = TypographyCompositeRawToken(size: fontSize650, lineHeight: fontLineHeight750, weight: fontWeight700) - public static let typeBold750 = TypographyCompositeRawToken(size: fontSize750, lineHeight: fontLineHeight850, weight: fontWeight700) - public static let typeBold850 = TypographyCompositeRawToken(size: fontSize850, lineHeight: fontLineHeight950, weight: fontWeight700) - public static let typeBold950 = TypographyCompositeRawToken(size: fontSize950, lineHeight: fontLineHeight1050, weight: fontWeight700) - public static let typeBold1050 = TypographyCompositeRawToken(size: fontSize1050, lineHeight: fontLineHeight1150, weight: fontWeight700) - public static let typeBold1150 = TypographyCompositeRawToken(size: fontSize1150, lineHeight: fontLineHeight1250, weight: fontWeight700) - public static let typeBold1250 = TypographyCompositeRawToken(size: fontSize1250, lineHeight: fontLineHeight1350, weight: fontWeight700) - public static let typeBold1450 = TypographyCompositeRawToken(size: fontSize1450, lineHeight: fontLineHeight1450, weight: fontWeight700) - public static let typeBold1850 = TypographyCompositeRawToken(size: fontSize1850, lineHeight: fontLineHeight1850, weight: fontWeight700) + public static let typeRegular150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing150) + public static let typeRegular175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing175) + public static let typeRegular200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing200) + public static let typeRegular250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight400, letterSpacing: fontLetterSpacing250) + public static let typeBold150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing150) + public static let typeBold175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing175) + public static let typeBold200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing200) + public static let typeBold250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight700, letterSpacing: fontLetterSpacing250) + public static let typeBold300 = TypographyCompositeRawToken(size: fontSize300, lineHeight: fontLineHeight450, weight: fontWeight700, letterSpacing: fontLetterSpacing300) + public static let typeBold350 = TypographyCompositeRawToken(size: fontSize350, lineHeight: fontLineHeight550, weight: fontWeight700, letterSpacing: fontLetterSpacing350) + public static let typeBold450 = TypographyCompositeRawToken(size: fontSize450, lineHeight: fontLineHeight550, weight: fontWeight700, letterSpacing: fontLetterSpacing450) + public static let typeBold550 = TypographyCompositeRawToken(size: fontSize550, lineHeight: fontLineHeight650, weight: fontWeight700, letterSpacing: fontLetterSpacing550) + public static let typeBold650 = TypographyCompositeRawToken(size: fontSize650, lineHeight: fontLineHeight750, weight: fontWeight700, letterSpacing: fontLetterSpacing650) + public static let typeBold750 = TypographyCompositeRawToken(size: fontSize750, lineHeight: fontLineHeight850, weight: fontWeight700, letterSpacing: fontLetterSpacing750) + public static let typeBold850 = TypographyCompositeRawToken(size: fontSize850, lineHeight: fontLineHeight950, weight: fontWeight700, letterSpacing: fontLetterSpacing850) + public static let typeBold950 = TypographyCompositeRawToken(size: fontSize950, lineHeight: fontLineHeight1050, weight: fontWeight700, letterSpacing: fontLetterSpacing950) + public static let typeBold1050 = TypographyCompositeRawToken(size: fontSize1050, lineHeight: fontLineHeight1150, weight: fontWeight700, letterSpacing: fontLetterSpacing1050) + public static let typeBold1150 = TypographyCompositeRawToken(size: fontSize1150, lineHeight: fontLineHeight1250, weight: fontWeight700, letterSpacing: fontLetterSpacing1150) + public static let typeBold1250 = TypographyCompositeRawToken(size: fontSize1250, lineHeight: fontLineHeight1350, weight: fontWeight700, letterSpacing: fontLetterSpacing1250) + public static let typeBold1450 = TypographyCompositeRawToken(size: fontSize1450, lineHeight: fontLineHeight1450, weight: fontWeight700, letterSpacing: fontLetterSpacing1450) + public static let typeBold1850 = TypographyCompositeRawToken(size: fontSize1850, lineHeight: fontLineHeight1850, weight: fontWeight700, letterSpacing: fontLetterSpacing1850) } diff --git a/OUDS/Core/Tokens/RawTokens/Tests/TypographyRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/TypographyRawTokensTests.swift index 5c3fb4680..f054990d0 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/TypographyRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/TypographyRawTokensTests.swift @@ -2,17 +2,19 @@ // Software Name: OUDS iOS // SPDX-FileCopyrightText: Copyright (c) Orange SA // SPDX-License-Identifier: MIT -// +// // This software is distributed under the MIT license, // the text of which is available at https://opensource.org/license/MIT/ // or see the "LICENSE" file for more details. -// +// // Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// Software description: A SwiftUI components library with code examples for Orange Unified Design System // import XCTest -import OUDSTokensRaw +@testable import OUDSTokensRaw + +// swiftlint:disable type_body_length /// The aim of this tests class is to look for regressions in **typography raw tokens**. /// Because these values will be at least generated through an external tool, is it not relevant to test each token values. @@ -24,11 +26,14 @@ final class TypographyRawTokensTests: XCTestCase { // MARK: - Primitive token - Typography - Font family // Just to ensure the font families in tokens are the ones in system with the same name - func testTypographyRawTokenFontFamilyBrandDefault() throws { XCTAssertEqual(TypographyRawTokens.fontFamilyBrandDefault, "Helvetica Neue") } + func testTypographyRawTokenFontFamilyBrandTV() throws { + XCTAssertEqual(TypographyRawTokens.fontFamilyBrandTV, "Helvetica Neue LT") + } + func testTypographyRawTokenFontFamilySystemArial() throws { XCTAssertEqual(TypographyRawTokens.fontFamilySystemArial, "Arial") } @@ -37,10 +42,26 @@ final class TypographyRawTokensTests: XCTestCase { XCTAssertEqual(TypographyRawTokens.fontFamilySystemHelvetica, "Helvetica") } + func testTypographyRawTokenFontFamilySystemNotoSans() throws { + XCTAssertEqual(TypographyRawTokens.fontFamilySystemNotoSans, "Noto sans") + } + + func testTypographyRawTokenFontFamilySystemSFProText() throws { + XCTAssertEqual(TypographyRawTokens.fontFamilySystemSFProText, "SF Pro Text") + } + + func testTypographyRawTokenFontFamilySystemRoboto() throws { + XCTAssertEqual(TypographyRawTokens.fontFamilySystemRoboto, "Roboto") + } + func testTypographyRawTokenFontFamilyMonospaceMenlo() throws { XCTAssertEqual(TypographyRawTokens.fontFamilyMonospaceMenlo, "Menlo") } + func testTypographyRawTokenFontFamilyMonospaceMonaco() throws { + XCTAssertEqual(TypographyRawTokens.fontFamilyMonospaceMonaco, "Monaco") + } + func testTypographyRawTokenFontFamilyCourrierNew() throws { XCTAssertEqual(TypographyRawTokens.fontFamilyMonospaceCourierNew, "Courier New") } @@ -173,6 +194,72 @@ final class TypographyRawTokensTests: XCTestCase { XCTAssertLessThan(TypographyRawTokens.fontLineHeight1850, TypographyRawTokens.fontLineHeight2050) } + // MARK: - Primitive token - Typography - Letter spacong + + func testTypographyRawTokensFontLetterSpacing150LessThanFontLetterSpacing175() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing150, TypographyRawTokens.fontLetterSpacing175) + } + + func testTypographyRawTokensFontLetterSpacing175LessThanFontLetterSpacing200() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing175, TypographyRawTokens.fontLetterSpacing200) + } + + func testTypographyRawTokensFontLetterSpacing200LessThanFontLetterSpacing250() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing200, TypographyRawTokens.fontLetterSpacing250) + } + + func testTypographyRawTokensFontLetterSpacing250LessThanFontLetterSpacing300() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing250, TypographyRawTokens.fontLetterSpacing300) + } + + func testTypographyRawTokensFontLetterSpacing300LessThanFontLetterSpacing350() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing300, TypographyRawTokens.fontLetterSpacing350) + } + + func testTypographyRawTokensFontLetterSpacing350LessThanFontLetterSpacing450() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing350, TypographyRawTokens.fontLetterSpacing450) + } + + func testTypographyRawTokensFontLetterSpacing450LessThanFontLetterSpacing550() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing450, TypographyRawTokens.fontLetterSpacing550) + } + + func testTypographyRawTokensFontLetterSpacing550LessThanFontLetterSpacing650() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing550, TypographyRawTokens.fontLetterSpacing650) + } + + func testTypographyRawTokensFontLetterSpacing650LessThanFontLetterSpacing750() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing650, TypographyRawTokens.fontLetterSpacing750) + } + + func testTypographyRawTokensFontLetterSpacing750LessThanFontLetterSpacing850() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing750, TypographyRawTokens.fontLetterSpacing850) + } + + func testTypographyRawTokensFontLetterSpacing850LessThanFontLetterSpacing950() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing850, TypographyRawTokens.fontLetterSpacing950) + } + + func testTypographyRawTokensFontLetterSpacing950LessThanFontLetterSpacing1050() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing950, TypographyRawTokens.fontLetterSpacing1050) + } + + func testTypographyRawTokensFontLetterSpacing1050LessThanFontLetterSpacing1150() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing1050, TypographyRawTokens.fontLetterSpacing1150) + } + + func testTypographyRawTokensFontLetterSpacing1150LessThanFontLetterSpacing1250() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing1150, TypographyRawTokens.fontLetterSpacing1250) + } + + func testTypographyRawTokensFontLetterSpacing1250LessThanFontLetterSpacing1450() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing1250, TypographyRawTokens.fontLetterSpacing1450) + } + + func testTypographyRawTokensFontLetterSpacing1450LessThanFontLetterSpacing1850() throws { + XCTAssertLessThan(TypographyRawTokens.fontLetterSpacing1450, TypographyRawTokens.fontLetterSpacing1850) + } + // MARK: - Primitive token - Typography - Font family func testTypographyRawTokensFontFamiliesAreAllDifferent() throws { @@ -224,116 +311,79 @@ final class TypographyRawTokensTests: XCTestCase { // MARK: - Primitive token - Typography - Composite func testTypographyRawTokensTypeRegular150LessThanTypeRegular175() throws { - XCTAssertLessThan(TypographyRawTokens.typeRegular150.size, TypographyRawTokens.typeRegular175.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeRegular150.lineHeight, TypographyRawTokens.typeRegular175.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeRegular150.weight, TypographyRawTokens.typeRegular175.weight) + XCTAssertTrue(TypographyRawTokens.typeRegular150 <| TypographyRawTokens.typeRegular175) } func testTypographyRawTokensTypeRegular175LessThanTypeRegular200() throws { - XCTAssertLessThan(TypographyRawTokens.typeRegular175.size, TypographyRawTokens.typeRegular200.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeRegular175.lineHeight, TypographyRawTokens.typeRegular200.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeRegular175.weight, TypographyRawTokens.typeRegular200.weight) + XCTAssertTrue(TypographyRawTokens.typeRegular175 <| TypographyRawTokens.typeRegular200) } func testTypographyRawTokensTypeRegular200LessThanTypeRegular250() throws { - XCTAssertLessThan(TypographyRawTokens.typeRegular200.size, TypographyRawTokens.typeRegular250.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeRegular200.lineHeight, TypographyRawTokens.typeRegular250.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeRegular200.weight, TypographyRawTokens.typeRegular250.weight) + XCTAssertTrue(TypographyRawTokens.typeRegular200 <| TypographyRawTokens.typeRegular250) } func testTypographyRawTokensTypeBold150LessThanTypeBold175() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold150.size, TypographyRawTokens.typeBold175.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold150.lineHeight, TypographyRawTokens.typeBold175.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold150.weight, TypographyRawTokens.typeBold175.weight) + XCTAssertTrue(TypographyRawTokens.typeBold150 <| TypographyRawTokens.typeBold175) } func testTypographyRawTokensTypeBold175LessThanTypeBold200() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold175.size, TypographyRawTokens.typeBold200.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold175.lineHeight, TypographyRawTokens.typeBold200.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold175.weight, TypographyRawTokens.typeBold200.weight) + XCTAssertTrue(TypographyRawTokens.typeBold175 <| TypographyRawTokens.typeBold200) } func testTypographyRawTokensTypeBold200LessThanTypeBold250() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold200.size, TypographyRawTokens.typeBold250.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold200.lineHeight, TypographyRawTokens.typeBold250.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold200.weight, TypographyRawTokens.typeBold250.weight) + XCTAssertTrue(TypographyRawTokens.typeBold200 <| TypographyRawTokens.typeBold250) } func testTypographyRawTokensTypeBold250LessThanTypeBold300() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold250.size, TypographyRawTokens.typeBold300.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold250.lineHeight, TypographyRawTokens.typeBold300.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold250.weight, TypographyRawTokens.typeBold300.weight) + XCTAssertTrue(TypographyRawTokens.typeBold250 <| TypographyRawTokens.typeBold300) } func testTypographyRawTokensTypeBold300LessThanTypeBold350() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold300.size, TypographyRawTokens.typeBold350.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold300.lineHeight, TypographyRawTokens.typeBold350.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold300.weight, TypographyRawTokens.typeBold350.weight) + XCTAssertTrue(TypographyRawTokens.typeBold300 <| TypographyRawTokens.typeBold350) } func testTypographyRawTokensTypeBold350LessThanTypeBold450() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold350.size, TypographyRawTokens.typeBold450.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold350.lineHeight, TypographyRawTokens.typeBold450.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold350.weight, TypographyRawTokens.typeBold450.weight) + XCTAssertTrue(TypographyRawTokens.typeBold350 <| TypographyRawTokens.typeBold450) } func testTypographyRawTokensTypeBold450LessThanTypeBold550() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold450.size, TypographyRawTokens.typeBold550.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold450.lineHeight, TypographyRawTokens.typeBold550.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold450.weight, TypographyRawTokens.typeBold550.weight) + XCTAssertTrue(TypographyRawTokens.typeBold450 <| TypographyRawTokens.typeBold550) } func testTypographyRawTokensTypeBold550LessThanTypeBold650() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold550.size, TypographyRawTokens.typeBold650.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold550.lineHeight, TypographyRawTokens.typeBold650.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold550.weight, TypographyRawTokens.typeBold650.weight) + XCTAssertTrue(TypographyRawTokens.typeBold550 <| TypographyRawTokens.typeBold650) } func testTypographyRawTokensTypeBold650LessThanTypeBold750() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold650.size, TypographyRawTokens.typeBold750.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold650.lineHeight, TypographyRawTokens.typeBold750.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold650.weight, TypographyRawTokens.typeBold750.weight) + XCTAssertTrue(TypographyRawTokens.typeBold650 <| TypographyRawTokens.typeBold750) } func testTypographyRawTokensTypeBold750LessThanTypeBold850() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold750.size, TypographyRawTokens.typeBold850.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold750.lineHeight, TypographyRawTokens.typeBold850.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold750.weight, TypographyRawTokens.typeBold850.weight) + XCTAssertTrue(TypographyRawTokens.typeBold750 <| TypographyRawTokens.typeBold850) } func testTypographyRawTokensTypeBold850LessThanTypeBold950() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold850.size, TypographyRawTokens.typeBold950.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold850.lineHeight, TypographyRawTokens.typeBold950.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold850.weight, TypographyRawTokens.typeBold950.weight) + XCTAssertTrue(TypographyRawTokens.typeBold850 <| TypographyRawTokens.typeBold950) } func testTypographyRawTokensTypeBold950LessThanTypeBold1050() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold950.size, TypographyRawTokens.typeBold1050.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold950.lineHeight, TypographyRawTokens.typeBold1050.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold950.weight, TypographyRawTokens.typeBold1050.weight) + XCTAssertTrue(TypographyRawTokens.typeBold950 <| TypographyRawTokens.typeBold1050) } func testTypographyRawTokensTypeBold1050LessThanTypeBold1150() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold1050.size, TypographyRawTokens.typeBold1150.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold1050.lineHeight, TypographyRawTokens.typeBold1150.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold1050.weight, TypographyRawTokens.typeBold1150.weight) + XCTAssertTrue(TypographyRawTokens.typeBold1050 <| TypographyRawTokens.typeBold1150) } func testTypographyRawTokensTypeBold1150LessThanTypeBold1250() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold1150.size, TypographyRawTokens.typeBold1250.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold1150.lineHeight, TypographyRawTokens.typeBold1250.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold1150.weight, TypographyRawTokens.typeBold1250.weight) + XCTAssertTrue(TypographyRawTokens.typeBold1150 <| TypographyRawTokens.typeBold1250) } func testTypographyRawTokensTypeBold1250LessThanTypeBold1450() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold1250.size, TypographyRawTokens.typeBold1450.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold1250.lineHeight, TypographyRawTokens.typeBold1450.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold1250.weight, TypographyRawTokens.typeBold1450.weight) + XCTAssertTrue(TypographyRawTokens.typeBold1250 <| TypographyRawTokens.typeBold1450) } func testTypographyRawTokensTypeBold1450LessThanTypeBold1850() throws { - XCTAssertLessThan(TypographyRawTokens.typeBold1450.size, TypographyRawTokens.typeBold1850.size) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold1450.lineHeight, TypographyRawTokens.typeBold1850.lineHeight) - XCTAssertLessThanOrEqual(TypographyRawTokens.typeBold1450.weight, TypographyRawTokens.typeBold1850.weight) + XCTAssertTrue(TypographyRawTokens.typeBold1450 <| TypographyRawTokens.typeBold1850) } } +// swiftlint:enable type_body_length From 58764e1aec3760c3e11118b4e5d88ef8bf5af9be Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Mon, 23 Sep 2024 11:41:31 +0200 Subject: [PATCH 05/25] refactor: renaming of spacing semantic tokens (#117) (#118) Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 4 + .../OUDSTheme+SpacingSemanticTokens.swift | 40 +++++----- .../MockTheme+SpacingSemanticTokens.swift | 40 +++++----- ...ThemeOverrideOfSpacingSemanticTokens.swift | 80 +++++++++---------- .../SpacingSemanticTokens+Aliases.swift | 2 +- .../Values/SpacingSemanticTokens.swift | 44 +++++----- 6 files changed, 107 insertions(+), 103 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 469ab5f8f..8554036db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Library] Add letter spacing and more font family tokens for typography ([#51](https://github.com/Orange-OpenSource/ouds-ios/issues/51)) - [Library] Add `elevationX200` raw token ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) +### Changed + +- [Library] Replace "adaptable" word by "scaled" in space semantic tokens, "fix" by "fixed" and remove "layout" ([#117](https://github.com/Orange-OpenSource/ouds-ios/issues/117)) + ### Removed - [Library] Remove raw tokens `elevationZIndex` ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift index e38b6606c..9a5c9490f 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift @@ -22,29 +22,29 @@ extension OUDSTheme: SpacingSemanticTokens { // MARK: Semantic token - Spacing - Layout fix - @objc open var spaceLayoutFixNone: SpacingLayoutSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spaceLayoutFixSmash: SpacingLayoutSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spaceLayoutFixShortest: SpacingLayoutSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spaceLayoutFixShorter: SpacingLayoutSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spaceLayoutFixShort: SpacingLayoutSemanticToken { DimensionRawTokens.dimension150 } - @objc open var spaceLayoutFixMedium: SpacingLayoutSemanticToken { DimensionRawTokens.dimension200 } - @objc open var spaceLayoutFixTall: SpacingLayoutSemanticToken { DimensionRawTokens.dimension300 } - @objc open var spaceLayoutFixTaller: SpacingLayoutSemanticToken { DimensionRawTokens.dimension400 } - @objc open var spaceLayoutFixTallest: SpacingLayoutSemanticToken { DimensionRawTokens.dimension500 } - @objc open var spaceLayoutFixSpacious: SpacingLayoutSemanticToken { DimensionRawTokens.dimension600 } + @objc open var spaceFixedNone: SpacingSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spaceFixedSmash: SpacingSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spaceFixedShortest: SpacingSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spaceFixedShorter: SpacingSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spaceFixedShort: SpacingSemanticToken { DimensionRawTokens.dimension150 } + @objc open var spaceFixedMedium: SpacingSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spaceFixedTall: SpacingSemanticToken { DimensionRawTokens.dimension300 } + @objc open var spaceFixedTaller: SpacingSemanticToken { DimensionRawTokens.dimension400 } + @objc open var spaceFixedTallest: SpacingSemanticToken { DimensionRawTokens.dimension500 } + @objc open var spaceFixedSpacious: SpacingSemanticToken { DimensionRawTokens.dimension600 } // MARK: Semantic token - Spacing - Layout fluid - @objc open var spaceLayoutAdaptableNone: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension0, regular: DimensionRawTokens.dimension0) } - @objc open var spaceLayoutAdaptableSmash: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension25, regular: DimensionRawTokens.dimension50) } - @objc open var spaceLayoutAdaptableShortest: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension50, regular: DimensionRawTokens.dimension100) } - @objc open var spaceLayoutAdaptableShorter: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension100, regular: DimensionRawTokens.dimension150) } - @objc open var spaceLayoutAdaptableShort: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension150, regular: DimensionRawTokens.dimension200) } - @objc open var spaceLayoutAdaptableMedium: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension300) } - @objc open var spaceLayoutAdaptableTall: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension400) } - @objc open var spaceLayoutAdaptableTaller: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension500) } - @objc open var spaceLayoutAdaptableTallest: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension600) } - @objc open var spaceLayoutAdaptableSpacious: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700) } + @objc open var spaceScaledNone: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension0, regular: DimensionRawTokens.dimension0) } + @objc open var spaceScaledSmash: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension25, regular: DimensionRawTokens.dimension50) } + @objc open var spaceScaledShortest: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension50, regular: DimensionRawTokens.dimension100) } + @objc open var spaceScaledShorter: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension100, regular: DimensionRawTokens.dimension150) } + @objc open var spaceScaledShort: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension150, regular: DimensionRawTokens.dimension200) } + @objc open var spaceScaledMedium: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension300) } + @objc open var spaceScaledTall: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension400) } + @objc open var spaceScaledTaller: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension500) } + @objc open var spaceScaledTallest: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension600) } + @objc open var spaceScaledSpacious: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700) } // MARK: Semantic token - Spacing - Padding - Padding inline diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift index a12f04a33..721e68104 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift @@ -22,29 +22,29 @@ extension MockTheme { // MARK: Semantic token - Spacing - Layout fix - override var spaceLayoutFixNone: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixSmash: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixShortest: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixShorter: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixShort: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixMedium: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixTall: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixTaller: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixTallest: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceLayoutFixSpacious: SpacingLayoutSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedNone: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedSmash: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedShortest: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedShorter: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedShort: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedMedium: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedTall: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedTaller: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedTallest: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedSpacious: SpacingSemanticToken { Self.mockThemeSpaceRawToken } // MARK: Semantic token - Spacing - Layout fluid - override var spaceLayoutAdaptableNone: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableSmash: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableShortest: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableShorter: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableShort: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableMedium: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableTall: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableTaller: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableTallest: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceLayoutAdaptableSpacious: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledNone: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledSmash: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledShortest: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledShorter: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledShort: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledMedium: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledTall: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledTaller: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledTallest: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledSpacious: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } // MARK: Semantic token - Spacing - Padding - Padding inline diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift index b9f9ce23a..5dca0b45e 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift @@ -33,105 +33,105 @@ final class TestThemeOverrideOfSpacingSemanticTokens: XCTestCase { // MARK: - Semantic token - Spacing - Layout fix func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixNone() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixNone, abstractTheme.spaceLayoutFixNone) - XCTAssertTrue(inheritedTheme.spaceLayoutFixNone == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedNone, abstractTheme.spaceFixedNone) + XCTAssertTrue(inheritedTheme.spaceFixedNone == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixSmash() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixSmash, abstractTheme.spaceLayoutFixSmash) - XCTAssertTrue(inheritedTheme.spaceLayoutFixSmash == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedSmash, abstractTheme.spaceFixedSmash) + XCTAssertTrue(inheritedTheme.spaceFixedSmash == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixShortest() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixShortest, abstractTheme.spaceLayoutFixShortest) - XCTAssertTrue(inheritedTheme.spaceLayoutFixShortest == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedShortest, abstractTheme.spaceFixedShortest) + XCTAssertTrue(inheritedTheme.spaceFixedShortest == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixShorter() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixShorter, abstractTheme.spaceLayoutFixShorter) - XCTAssertTrue(inheritedTheme.spaceLayoutFixShorter == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedShorter, abstractTheme.spaceFixedShorter) + XCTAssertTrue(inheritedTheme.spaceFixedShorter == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixShort() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixShort, abstractTheme.spaceLayoutFixShort) - XCTAssertTrue(inheritedTheme.spaceLayoutFixShort == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedShort, abstractTheme.spaceFixedShort) + XCTAssertTrue(inheritedTheme.spaceFixedShort == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixMedium() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixMedium, abstractTheme.spaceLayoutFixMedium) - XCTAssertTrue(inheritedTheme.spaceLayoutFixMedium == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedMedium, abstractTheme.spaceFixedMedium) + XCTAssertTrue(inheritedTheme.spaceFixedMedium == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixTall() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixTall, abstractTheme.spaceLayoutFixTall) - XCTAssertTrue(inheritedTheme.spaceLayoutFixTall == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedTall, abstractTheme.spaceFixedTall) + XCTAssertTrue(inheritedTheme.spaceFixedTall == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixTaller() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixTaller, abstractTheme.spaceLayoutFixTaller) - XCTAssertTrue(inheritedTheme.spaceLayoutFixTaller == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedTaller, abstractTheme.spaceFixedTaller) + XCTAssertTrue(inheritedTheme.spaceFixedTaller == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixTallest() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixTallest, abstractTheme.spaceLayoutFixTallest) - XCTAssertTrue(inheritedTheme.spaceLayoutFixTallest == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedTallest, abstractTheme.spaceFixedTallest) + XCTAssertTrue(inheritedTheme.spaceFixedTallest == MockTheme.mockThemeSpaceRawToken) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixSpacious() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutFixSpacious, abstractTheme.spaceLayoutFixSpacious) - XCTAssertTrue(inheritedTheme.spaceLayoutFixSpacious == MockTheme.mockThemeSpaceRawToken) + XCTAssertNotEqual(inheritedTheme.spaceFixedSpacious, abstractTheme.spaceFixedSpacious) + XCTAssertTrue(inheritedTheme.spaceFixedSpacious == MockTheme.mockThemeSpaceRawToken) } // MARK: - Semantic token - Spacing - Layout fluid func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableNone() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableNone, abstractTheme.spaceLayoutAdaptableNone) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableNone.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledNone, abstractTheme.spaceScaledNone) + XCTAssertTrue(inheritedTheme.spaceScaledNone.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableSmash() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableSmash, abstractTheme.spaceLayoutAdaptableSmash) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableSmash.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledSmash, abstractTheme.spaceScaledSmash) + XCTAssertTrue(inheritedTheme.spaceScaledSmash.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableShortest() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableShortest, abstractTheme.spaceLayoutAdaptableShortest) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableShortest.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledShortest, abstractTheme.spaceScaledShortest) + XCTAssertTrue(inheritedTheme.spaceScaledShortest.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableShorter() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableShorter, abstractTheme.spaceLayoutAdaptableShorter) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableShorter.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledShorter, abstractTheme.spaceScaledShorter) + XCTAssertTrue(inheritedTheme.spaceScaledShorter.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableShort() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableShort, abstractTheme.spaceLayoutAdaptableShort) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableShort.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledShort, abstractTheme.spaceScaledShort) + XCTAssertTrue(inheritedTheme.spaceScaledShort.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableMedium() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableMedium, abstractTheme.spaceLayoutAdaptableMedium) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableMedium.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledMedium, abstractTheme.spaceScaledMedium) + XCTAssertTrue(inheritedTheme.spaceScaledMedium.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableTall() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableTall, abstractTheme.spaceLayoutAdaptableTall) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableTall.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledTall, abstractTheme.spaceScaledTall) + XCTAssertTrue(inheritedTheme.spaceScaledTall.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableTaller() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableTaller, abstractTheme.spaceLayoutAdaptableTaller) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableTaller.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledTaller, abstractTheme.spaceScaledTaller) + XCTAssertTrue(inheritedTheme.spaceScaledTaller.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableTallest() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableTallest, abstractTheme.spaceLayoutAdaptableTallest) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableTallest.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledTallest, abstractTheme.spaceScaledTallest) + XCTAssertTrue(inheritedTheme.spaceScaledTallest.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableSpacious() throws { - XCTAssertNotEqual(inheritedTheme.spaceLayoutAdaptableSpacious, abstractTheme.spaceLayoutAdaptableSpacious) - XCTAssertTrue(inheritedTheme.spaceLayoutAdaptableSpacious.isEqual(MockTheme.mockThemeSpaceSemanticToken)) + XCTAssertNotEqual(inheritedTheme.spaceScaledSpacious, abstractTheme.spaceScaledSpacious) + XCTAssertTrue(inheritedTheme.spaceScaledSpacious.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } // MARK: - Semantic token - Spacing - Padding - Padding inline diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/SpacingSemanticTokens+Aliases.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/SpacingSemanticTokens+Aliases.swift index 2ca3c5cbd..89ceb46c2 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/SpacingSemanticTokens+Aliases.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/SpacingSemanticTokens+Aliases.swift @@ -14,7 +14,7 @@ import OUDSTokensRaw /// Basically a space semantic token for layout is a dimension raw token, it has the same final type, to keep grammar clean and clear with design system grammar. -public typealias SpacingLayoutSemanticToken = DimensionRawToken +public typealias SpacingSemanticToken = DimensionRawToken /// Basically a space semantic token for padding inline is a dimension raw token, it has the same final type, to keep grammar clean and clear with design system grammar. public typealias SpacingPaddingInlineSemanticToken = DimensionRawToken diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift index dfdf2bcec..a4ba6fc8d 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift @@ -17,31 +17,31 @@ /// In the future this file should be generated by a parser converting Figma JSON to Swift code. public protocol SpacingSemanticTokens { - // MARK: Semantic token - Spacing - Layout fix + // MARK: Semantic token - Spacing - Fixed - var spaceLayoutFixNone: SpacingLayoutSemanticToken { get } - var spaceLayoutFixSmash: SpacingLayoutSemanticToken { get } - var spaceLayoutFixShortest: SpacingLayoutSemanticToken { get } - var spaceLayoutFixShorter: SpacingLayoutSemanticToken { get } - var spaceLayoutFixShort: SpacingLayoutSemanticToken { get } - var spaceLayoutFixMedium: SpacingLayoutSemanticToken { get } - var spaceLayoutFixTall: SpacingLayoutSemanticToken { get } - var spaceLayoutFixTaller: SpacingLayoutSemanticToken { get } - var spaceLayoutFixTallest: SpacingLayoutSemanticToken { get } - var spaceLayoutFixSpacious: SpacingLayoutSemanticToken { get } + var spaceFixedNone: SpacingSemanticToken { get } + var spaceFixedSmash: SpacingSemanticToken { get } + var spaceFixedShortest: SpacingSemanticToken { get } + var spaceFixedShorter: SpacingSemanticToken { get } + var spaceFixedShort: SpacingSemanticToken { get } + var spaceFixedMedium: SpacingSemanticToken { get } + var spaceFixedTall: SpacingSemanticToken { get } + var spaceFixedTaller: SpacingSemanticToken { get } + var spaceFixedTallest: SpacingSemanticToken { get } + var spaceFixedSpacious: SpacingSemanticToken { get } - // MARK: Semantic token - Spacing - Layout fluid + // MARK: Semantic token - Spacing - Scaled - var spaceLayoutAdaptableNone: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableSmash: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableShortest: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableShorter: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableShort: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableMedium: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableTall: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableTaller: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableTallest: SpacingCompositeSemanticToken { get } - var spaceLayoutAdaptableSpacious: SpacingCompositeSemanticToken { get } + var spaceScaledNone: SpacingCompositeSemanticToken { get } + var spaceScaledSmash: SpacingCompositeSemanticToken { get } + var spaceScaledShortest: SpacingCompositeSemanticToken { get } + var spaceScaledShorter: SpacingCompositeSemanticToken { get } + var spaceScaledShort: SpacingCompositeSemanticToken { get } + var spaceScaledMedium: SpacingCompositeSemanticToken { get } + var spaceScaledTall: SpacingCompositeSemanticToken { get } + var spaceScaledTaller: SpacingCompositeSemanticToken { get } + var spaceScaledTallest: SpacingCompositeSemanticToken { get } + var spaceScaledSpacious: SpacingCompositeSemanticToken { get } // MARK: Semantic token - Spacing - Padding - Padding inline From 2c182fe85a4c62d4ef3f33ab7074f0f756191838 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Mon, 23 Sep 2024 13:39:46 +0200 Subject: [PATCH 06/25] refactor: rename of sizing semantic tokens (#122) (#123) Closes #122 Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 2 + .../OUDSTheme+ButtonsComponentTokens.swift | 4 +- .../OUDSTheme+SizingSemanticTokens.swift | 138 ++++---- .../MockTheme+ElevationSemanticTokens.swift | 94 +++--- .../MockTheme+SizingSemanticTokens.swift | 138 ++++---- .../MockTheme+TypographySemanticTokens.swift | 138 ++++---- ...emeOverrideOfElevationSemanticTokens.swift | 84 ++--- ...tThemeOverrideOfSizingSemanticTokens.swift | 302 +++++++++--------- ...meOverrideOfTypographySemanticTokens.swift | 130 ++++---- .../Values/ButtonsComponentTokens.swift | 4 +- .../SizingSemanticTokens+Composites.swift | 12 +- .../SizingSemanticTokens+Aliases.swift | 5 +- .../Sources/Values/SizingSemanticTokens.swift | 138 ++++---- Showcase/Showcase/OrangeCustomTheme.swift | 4 +- 14 files changed, 603 insertions(+), 590 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8554036db..42312806f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,10 +13,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- [Library] Rename some sizing semantic tokens ([#122](https://github.com/Orange-OpenSource/ouds-ios/issues/122)) - [Library] Replace "adaptable" word by "scaled" in space semantic tokens, "fix" by "fixed" and remove "layout" ([#117](https://github.com/Orange-OpenSource/ouds-ios/issues/117)) ### Removed +- [Library] Add more sizing semantic tokens ([#122](https://github.com/Orange-OpenSource/ouds-ios/issues/122)) - [Library] Remove raw tokens `elevationZIndex` ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) ## [0.2.0](https://github.com/Orange-OpenSource/ouds-ios/compare/0.1.0...0.2.0) - 2024-09-19 diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift index 1c691cf95..c032c2931 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift @@ -33,8 +33,8 @@ extension OUDSTheme: ButtonsComponentTokens { @objc open var buttonBackgroundColorLight: ColorSemanticToken { colorBackgroundBrandPrimaryLight! } @objc open var buttonBackgroundColorDark: ColorSemanticToken { colorBackgroundBrandPrimaryDark! } - @objc open var buttonWidth: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension3000 } - @objc open var buttonHeight: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension1000 } + @objc open var buttonWidth: SizingSemanticToken { DimensionRawTokens.dimension3000 } + @objc open var buttonHeight: SizingSemanticToken { DimensionRawTokens.dimension1000 } @objc open var buttonTypography: TypographyCompositeSemanticToken { typeDisplayMedium } } diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift index dfeea7377..513c8fc47 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift @@ -20,71 +20,77 @@ import OUDSTokensSemantic /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: SizingSemanticTokens { - // MARK: Semantic token - Sizing - Width height - Icon decorative - - @objc open var sizeWidthHeightIconShortest: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension200 } - @objc open var sizeWidthHeightIconShorter: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension300 } - @objc open var sizeWidthHeightIconShort: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension400 } - @objc open var sizeWidthHeightIconMedium: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension500 } - @objc open var sizeWidthHeightIconTall: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension600 } - @objc open var sizeWidthHeightIconTaller: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension700 } - @objc open var sizeWidthHeightIconTallest: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension900 } - - // MARK: Semantic token - Sizing - Width height - Icon component - - @objc open var sizeWidthHeightIsLabelSmallShort: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension150 } - @objc open var sizeWidthHeightIsLabelSmallMedium: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension200 } - @objc open var sizeWidthHeightIsLabelSmallTall: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension250 } - @objc open var sizeWidthHeightIsLabelMediumShort: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension200 } - @objc open var sizeWidthHeightIsLabelMediumMedium: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension250 } - @objc open var sizeWidthHeightIsLabelMediumTall: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension300 } - @objc open var sizeWidthHeightIsLabelLargeShorter: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension250 } - @objc open var sizeWidthHeightIsLabelLargeShort: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension300 } - @objc open var sizeWidthHeightIsLabelLargeMedium: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension350 } - @objc open var sizeWidthHeightIsLabelLargeTall: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension400 } - @objc open var sizeWidthHeightIsLabelLargeTaller: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension550 } - @objc open var sizeWidthHeightIsLabelXLargeShort: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension400 } - @objc open var sizeWidthHeightIsLabelXLargeMedium: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension500 } - @objc open var sizeWidthHeightIsLabelXLargeTall: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension550 } - - // MARK: Semantic token - Sizing - Width height - Icon typography - Heading - - @objc open var sizeWidthHeightIconIsHeadingSmallShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension400) } - @objc open var sizeWidthHeightIconIsHeadingSmallMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension500 ) } - @objc open var sizeWidthHeightIconIsHeadingSmallTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension550 ) } - @objc open var sizeWidthHeightIconIsHeadingMediumShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension500 ) } - @objc open var sizeWidthHeightIconIsHeadingMediumMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension550 ) } - @objc open var sizeWidthHeightIconIsHeadingMediumTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension600 ) } - @objc open var sizeWidthHeightIconIsHeadingLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension550 ) } - @objc open var sizeWidthHeightIconIsHeadingLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension600 ) } - @objc open var sizeWidthHeightIconIsHeadingLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension650 ) } - @objc open var sizeWidthHeightIconIsHeadingXLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension650 ) } - @objc open var sizeWidthHeightIconIsHeadingXLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700 ) } - @objc open var sizeWidthHeightIconIsHeadingXLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension650, regular: DimensionRawTokens.dimension800 ) } - - // MARK: Semantic token - Sizing - Width height - Icon typography - Body - - @objc open var sizeWidthHeightIconIsBodySmallShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension150, regular: DimensionRawTokens.dimension150 ) } - @objc open var sizeWidthHeightIconIsBodySmallMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension200 ) } - @objc open var sizeWidthHeightIconIsBodySmallTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } - @objc open var sizeWidthHeightIconIsBodyMediumShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension200 ) } - @objc open var sizeWidthHeightIconIsBodyMediumMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } - @objc open var sizeWidthHeightIconIsBodyMediumTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } - @objc open var sizeWidthHeightIconIsBodyLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } - @objc open var sizeWidthHeightIconIsBodyLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } - @objc open var sizeWidthHeightIconIsBodyLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension350, regular: DimensionRawTokens.dimension350 ) } - - // MARK: Semantic token - Sizing - Max width - - @objc open var sizeMaxWidthTypographyDisplaySmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypographyDisplayMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypographyDisplayLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypographyHeadingSmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } - @objc open var sizeMaxWidthTypographyHeadingMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypographyHeadingLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypographyHeadingXLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypographyBodySmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } - @objc open var sizeMaxWidthTypographyBodyMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } - @objc open var sizeMaxWidthTypographyBodyLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } + // MARK: - Semantic token - Sizing - Icon decorative + + @objc open var sizeIconDecorativeShortest: SizingSemanticToken { DimensionRawTokens.dimension200 } + @objc open var sizeIconDecorativeShorter: SizingSemanticToken { DimensionRawTokens.dimension300 } + @objc open var sizeIconDecorativeShort: SizingSemanticToken { DimensionRawTokens.dimension400 } + @objc open var sizeIconDecorativeMedium: SizingSemanticToken { DimensionRawTokens.dimension500 } + @objc open var sizeIconDecorativeTall: SizingSemanticToken { DimensionRawTokens.dimension600 } + @objc open var sizeIconDecorativeTaller: SizingSemanticToken { DimensionRawTokens.dimension700 } + @objc open var sizeIconDecorativeTallest: SizingSemanticToken { DimensionRawTokens.dimension900 } + + // MARK: - Semantic token - Sizing - Icon with typography + + @objc open var sizeIconWithTypeHeadingSmallShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension400) } + @objc open var sizeIconWithTypeHeadingSmallMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension500) } + @objc open var sizeIconWithTypeHeadingSmallTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension550) } + + @objc open var sizeIconWithTypeHeadingMediumShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension500) } + @objc open var sizeIconWithTypeHeadingMediumMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension550) } + @objc open var sizeIconWithTypeHeadingMediumTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension600) } + + @objc open var sizeIconWithTypeHeadingLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension550) } + @objc open var sizeIconWithTypeHeadingLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension600) } + @objc open var sizeIconWithTypeHeadingLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension650) } + + @objc open var sizeIconWithTypeHeadingXLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension650) } + @objc open var sizeIconWithTypeHeadingXLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700) } + @objc open var sizeIconWithTypeHeadingXLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension650) } + + @objc open var sizeIconWithTypeBodySmallShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension150, regular: DimensionRawTokens.dimension150 ) } + @objc open var sizeIconWithTypeBodySmallMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension200 ) } + @objc open var sizeIconWithTypeBodySmallTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } + + @objc open var sizeIconWithTypeBodyMediumShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension200 ) } + @objc open var sizeIconWithTypeBodyMediumMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } + @objc open var sizeIconWithTypeBodyMediumTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } + + @objc open var sizeIconWithTypeBodyLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } + @objc open var sizeIconWithTypeBodyLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } + @objc open var sizeIconWithTypeBodyLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension350, regular: DimensionRawTokens.dimension350 ) } + + @objc open var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { DimensionRawTokens.dimension150 } // sys-dimension-50 + @objc open var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { DimensionRawTokens.dimension200 } // sys-dimension-60 + @objc open var sizeIconWithTypeLabelSmallTall: SizingSemanticToken { DimensionRawTokens.dimension250 } // sys-dimension-70 + + @objc open var sizeIconWithTypeLabelMediumShort: SizingSemanticToken { DimensionRawTokens.dimension200 } // sys-dimension-60 + @objc open var sizeIconWithTypeLabelMediumMedium: SizingSemanticToken { DimensionRawTokens.dimension250 } // sys-dimension-70 + @objc open var sizeIconWithTypeLabelMediumTall: SizingSemanticToken { DimensionRawTokens.dimension300 } // sys-dimension-80 + + @objc open var sizeIconWithTypeLabelLargeShorter: SizingSemanticToken { DimensionRawTokens.dimension250 } // sys-dimension-70 + @objc open var sizeIconWithTypeLabelLargeShort: SizingSemanticToken { DimensionRawTokens.dimension300 } // sys-dimension-80 + @objc open var sizeIconWithTypeLabelLargeMedium: SizingSemanticToken { DimensionRawTokens.dimension350 } // sys-dimension-90 + @objc open var sizeIconWithTypeLabelLargeTall: SizingSemanticToken { DimensionRawTokens.dimension100 } // sys-dimension-100 + @objc open var sizeIconWithTypeLabelLargeTaller: SizingSemanticToken { DimensionRawTokens.dimension550 } // sys-dimension-130 + + @objc open var sizeIconWithTypeLabelXLargeShort: SizingSemanticToken { DimensionRawTokens.dimension400 } // sys-dimension-100 + @objc open var sizeIconWithTypeLabelXLargeMedium: SizingSemanticToken { DimensionRawTokens.dimension500 } // sys-dimension-120 + @objc open var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { DimensionRawTokens.dimension550 } // sys-dimension-130 + + // MARK: - Semantic token - Sizing - Max width typography + + @objc open var sizeMaxWidthTypeDisplaySmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeDisplayMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeDisplayLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + + @objc open var sizeMaxWidthTypeHeadingSmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } + @objc open var sizeMaxWidthTypeHeadingMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeHeadingLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeHeadingXLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + + @objc open var sizeMaxWidthTypeBodySmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } + @objc open var sizeMaxWidthTypeBodyMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } + @objc open var sizeMaxWidthTypeBodyLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } } // swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ElevationSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ElevationSemanticTokens.swift index a5a6c4afd..4657f3805 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ElevationSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ElevationSemanticTokens.swift @@ -17,50 +17,50 @@ import OUDSTokensSemantic extension MockTheme { - static let mockThemeXRawToken: ElevationRawToken = 711 - static let mockThemeYRawToken: ElevationRawToken = 713 - static let mockThemeBlurRawToken: ElevationRawToken = 816 + static let mockThemeElevationXRawToken: ElevationRawToken = 711 + static let mockThemeElevationYRawToken: ElevationRawToken = 713 + static let mockThemeElevationBlurRawToken: ElevationRawToken = 816 static let mockThemeElevationColorRawToken: ColorRawToken = ColorRawTokens.colorFunctionalMalachite500 - static let mockThemeCompositeRawToken: ElevationCompositeRawToken = ElevationCompositeRawToken(x: 118, + static let mockThemeElevationCompositeRawToken: ElevationCompositeRawToken = ElevationCompositeRawToken(x: 118, y: 712, blur: 118, color: ColorRawTokens.colorFunctionalDodgerBlue800) // MARK: Semantic token - Elevation - X - override var elevationXNone: ElevationYSemanticToken { Self.mockThemeXRawToken } - override var elevationXRaised: ElevationYSemanticToken { Self.mockThemeXRawToken } - override var elevationXDrag: ElevationYSemanticToken { Self.mockThemeXRawToken } - override var elevationXOverlayDefault: ElevationYSemanticToken { Self.mockThemeXRawToken } - override var elevationXOverlayEmphasized: ElevationYSemanticToken { Self.mockThemeXRawToken } - override var elevationXStickyDefault: ElevationYSemanticToken { Self.mockThemeXRawToken } - override var elevationXStickyEmphasized: ElevationYSemanticToken { Self.mockThemeXRawToken } - override var elevationXStickyNavigationScrolled: ElevationYSemanticToken { Self.mockThemeXRawToken } - override var elevationXFocus: ElevationYSemanticToken { Self.mockThemeXRawToken } + override var elevationXNone: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } + override var elevationXRaised: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } + override var elevationXDrag: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } + override var elevationXOverlayDefault: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } + override var elevationXOverlayEmphasized: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } + override var elevationXStickyDefault: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } + override var elevationXStickyEmphasized: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } + override var elevationXStickyNavigationScrolled: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } + override var elevationXFocus: ElevationYSemanticToken { Self.mockThemeElevationXRawToken } // MARK: Semantic token - Elevation - Y - override var elevationYNone: ElevationYSemanticToken { Self.mockThemeYRawToken } - override var elevationYRaised: ElevationYSemanticToken { Self.mockThemeYRawToken } - override var elevationYDrag: ElevationYSemanticToken { Self.mockThemeYRawToken } - override var elevationYOverlayDefault: ElevationYSemanticToken { Self.mockThemeYRawToken } - override var elevationYOverlayEmphasized: ElevationYSemanticToken { Self.mockThemeYRawToken } - override var elevationYStickyDefault: ElevationYSemanticToken { Self.mockThemeYRawToken } - override var elevationYStickyEmphasized: ElevationYSemanticToken { Self.mockThemeYRawToken } - override var elevationYStickyNavigationScrolled: ElevationYSemanticToken { Self.mockThemeYRawToken } - override var elevationYFocus: ElevationYSemanticToken { Self.mockThemeYRawToken } + override var elevationYNone: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } + override var elevationYRaised: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } + override var elevationYDrag: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } + override var elevationYOverlayDefault: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } + override var elevationYOverlayEmphasized: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } + override var elevationYStickyDefault: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } + override var elevationYStickyEmphasized: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } + override var elevationYStickyNavigationScrolled: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } + override var elevationYFocus: ElevationYSemanticToken { Self.mockThemeElevationYRawToken } // MARK: Semantic token - Elevation - Blur - override var elevationBlurNone: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } - override var elevationBlurRaised: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } - override var elevationBlurDrag: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } - override var elevationBlurOverlayDefault: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } - override var elevationBlurOverlayEmphasized: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } - override var elevationBlurStickyDefault: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } - override var elevationBlurStickyEmphasized: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } - override var elevationBlurStickyNavigationScrolled: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } - override var elevationBlurFocus: ElevationBlurSemanticToken { Self.mockThemeBlurRawToken } + override var elevationBlurNone: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } + override var elevationBlurRaised: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } + override var elevationBlurDrag: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } + override var elevationBlurOverlayDefault: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } + override var elevationBlurOverlayEmphasized: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } + override var elevationBlurStickyDefault: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } + override var elevationBlurStickyEmphasized: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } + override var elevationBlurStickyNavigationScrolled: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } + override var elevationBlurFocus: ElevationBlurSemanticToken { Self.mockThemeElevationBlurRawToken } // MARK: Semantic token - Elevation - Color - None @@ -109,27 +109,27 @@ extension MockTheme { // MARK: Semantic token - Elevation - Box shadow - override var elevationRaisedLight: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } - override var elevationRaisedDark: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } + override var elevationRaisedLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationRaisedDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationDragLight: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } - override var elevationDragDark: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } + override var elevationDragLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationDragDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationOverlayDefaultLight: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } - override var elevationOverlayDefaultDark: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } + override var elevationOverlayDefaultLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationOverlayDefaultDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationOverlayEmphasizedLight: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } - override var elevationOverlayEmphasizedDark: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } + override var elevationOverlayEmphasizedLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationOverlayEmphasizedDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationStickyDefaultLight: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } - override var elevationStickyDefaultDark: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } + override var elevationStickyDefaultLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationStickyDefaultDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationStickyEmphasizedLight: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } - override var elevationStickyEmphasizedDark: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } + override var elevationStickyEmphasizedLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationStickyEmphasizedDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationStickyNavigationScrolledLight: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } - override var elevationStickyNavigationScrolledDark: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } + override var elevationStickyNavigationScrolledLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationStickyNavigationScrolledDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationFocusLight: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } - override var elevationFocusDark: ElevationCompositeSemanticToken { Self.mockThemeCompositeRawToken } + override var elevationFocusLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationFocusDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift index 1abbfb2c4..4770f8a1f 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift @@ -20,70 +20,76 @@ extension MockTheme { static let mockThemeSizeRawToken: DimensionRawToken = 118_000 static let mockThemeSizeCompositeToken: SizingCompositeSemanticToken = SizingCompositeSemanticToken(compact: 1, regular: 151) - // MARK: Semantic token - Sizing - Width height - Icon decorative - - override var sizeWidthHeightIconShortest: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIconShorter: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIconShort: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIconMedium: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIconTall: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIconTaller: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIconTallest: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - - // MARK: Semantic token - Sizing - Width height - Icon component - - override var sizeWidthHeightIsLabelSmallShort: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelSmallMedium: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelSmallTall: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelMediumShort: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelMediumMedium: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelMediumTall: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelLargeShorter: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelLargeShort: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelLargeMedium: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelLargeTall: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelLargeTaller: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelXLargeShort: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelXLargeMedium: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - override var sizeWidthHeightIsLabelXLargeTall: SizingWidthHeightSemanticToken { Self.mockThemeSizeRawToken } - - // MARK: Semantic token - Sizing - Width height - Icon typography - Heading - - override var sizeWidthHeightIconIsHeadingSmallShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingSmallMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingSmallTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingMediumShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingMediumMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingMediumTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingXLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingXLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsHeadingXLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - - // MARK: Semantic token - Sizing - Width height - Icon typography - Body - - override var sizeWidthHeightIconIsBodySmallShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsBodySmallMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsBodySmallTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsBodyMediumShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsBodyMediumMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsBodyMediumTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsBodyLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsBodyLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeWidthHeightIconIsBodyLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - - // MARK: Semantic token - Sizing - Max width - - override var sizeMaxWidthTypographyDisplaySmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyDisplayMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyDisplayLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyHeadingSmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyHeadingMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyHeadingLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyHeadingXLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyBodySmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyBodyMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypographyBodyLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + // MARK: - Semantic token - Sizing - Icon decorative + + override var sizeIconDecorativeShortest: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconDecorativeShorter: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconDecorativeShort: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconDecorativeMedium: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconDecorativeTall: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconDecorativeTaller: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconDecorativeTallest: SizingSemanticToken { Self.mockThemeSizeRawToken } + + // MARK: - Semantic token - Sizing - Icon with typography + + override var sizeIconWithTypeHeadingSmallShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingSmallMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingSmallTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeIconWithTypeHeadingMediumShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingMediumMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingMediumTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeIconWithTypeHeadingLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeIconWithTypeHeadingXLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingXLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingXLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeIconWithTypeBodySmallShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodySmallMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodySmallTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeIconWithTypeBodyMediumShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyMediumMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyMediumTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeIconWithTypeBodyLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelSmallTall: SizingSemanticToken { Self.mockThemeSizeRawToken } + + override var sizeIconWithTypeLabelMediumShort: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelMediumMedium: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelMediumTall: SizingSemanticToken { Self.mockThemeSizeRawToken } + + override var sizeIconWithTypeLabelLargeShorter: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelLargeShort: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelLargeMedium: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelLargeTall: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelLargeTaller: SizingSemanticToken { Self.mockThemeSizeRawToken } + + override var sizeIconWithTypeLabelXLargeShort: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelXLargeMedium: SizingSemanticToken { Self.mockThemeSizeRawToken } + override var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { Self.mockThemeSizeRawToken } + + // MARK: - Semantic token - Sizing - Max width typography + + override var sizeMaxWidthTypeDisplaySmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeDisplayMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeDisplayLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeMaxWidthTypeHeadingSmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeHeadingMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeHeadingLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeHeadingXLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + + override var sizeMaxWidthTypeBodySmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeBodyMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeBodyLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift index 0b48e91a5..3b65a6deb 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift @@ -18,100 +18,100 @@ import OUDSTokensSemantic // swiftlint:disable line_length extension MockTheme { - static let mockThemeFontFamilyRawToken: TypographyFontFamilyRawToken = "oยฐxXSkyBl0GF0ntxXxยฐo" - static let mockThemeFontWeightRawToken: TypographyFontWeightRawToken = "stiicckkyyyy" - static let mockThemeFontSizeRawToken: TypographyFontSizeRawToken = 666 - static let mockThemeFontLineHeightRawToken: TypographyFontLineHeightRawToken = 321 + static let mockThemeTypographyFontFamilyRawToken: TypographyFontFamilyRawToken = "oยฐxXSkyBl0GF0ntxXxยฐo" + static let mockThemeTypographyFontWeightRawToken: TypographyFontWeightRawToken = "stiicckkyyyy" + static let mockThemeTypographyFontSizeRawToken: TypographyFontSizeRawToken = 666 + static let mockThemeTypographyFontLineHeightRawToken: TypographyFontLineHeightRawToken = 321 static let mockThemeTypographyCompositeSemanticToken: TypographyCompositeSemanticToken = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold1850, regular: TypographyRawTokens.typeBold1850) // MARK: Semantic token - Typography - Font - Family - override var fontFamily: TypographyFontFamilySemanticToken { Self.mockThemeFontFamilyRawToken } - override var fontFamilyDisplay: TypographyFontFamilySemanticToken { Self.mockThemeFontFamilyRawToken } - override var fontFamilyHeading: TypographyFontFamilySemanticToken { Self.mockThemeFontFamilyRawToken } - override var fontFamilyBody: TypographyFontFamilySemanticToken { Self.mockThemeFontFamilyRawToken } - override var fontFamilyLabel: TypographyFontFamilySemanticToken { Self.mockThemeFontFamilyRawToken } - override var fontFamilyCode: TypographyFontFamilySemanticToken { Self.mockThemeFontFamilyRawToken } + override var fontFamily: TypographyFontFamilySemanticToken { Self.mockThemeTypographyFontFamilyRawToken } + override var fontFamilyDisplay: TypographyFontFamilySemanticToken { Self.mockThemeTypographyFontFamilyRawToken } + override var fontFamilyHeading: TypographyFontFamilySemanticToken { Self.mockThemeTypographyFontFamilyRawToken } + override var fontFamilyBody: TypographyFontFamilySemanticToken { Self.mockThemeTypographyFontFamilyRawToken } + override var fontFamilyLabel: TypographyFontFamilySemanticToken { Self.mockThemeTypographyFontFamilyRawToken } + override var fontFamilyCode: TypographyFontFamilySemanticToken { Self.mockThemeTypographyFontFamilyRawToken } // MARK: Semantic token - Typography - Font - Weight - override var fontWeightDisplay: TypographyFontWeightSemanticToken { Self.mockThemeFontWeightRawToken } - override var fontWeightHeading: TypographyFontWeightSemanticToken { Self.mockThemeFontWeightRawToken } - override var fontWeightBodyDefault: TypographyFontWeightSemanticToken { Self.mockThemeFontWeightRawToken } - override var fontWeightBodyStrong: TypographyFontWeightSemanticToken { Self.mockThemeFontWeightRawToken } - override var fontWeightLabelDefault: TypographyFontWeightSemanticToken { Self.mockThemeFontWeightRawToken } - override var fontWeightLabelStrong: TypographyFontWeightSemanticToken { Self.mockThemeFontWeightRawToken } - override var fontWeightCode: TypographyFontWeightSemanticToken { Self.mockThemeFontWeightRawToken } + override var fontWeightDisplay: TypographyFontWeightSemanticToken { Self.mockThemeTypographyFontWeightRawToken } + override var fontWeightHeading: TypographyFontWeightSemanticToken { Self.mockThemeTypographyFontWeightRawToken } + override var fontWeightBodyDefault: TypographyFontWeightSemanticToken { Self.mockThemeTypographyFontWeightRawToken } + override var fontWeightBodyStrong: TypographyFontWeightSemanticToken { Self.mockThemeTypographyFontWeightRawToken } + override var fontWeightLabelDefault: TypographyFontWeightSemanticToken { Self.mockThemeTypographyFontWeightRawToken } + override var fontWeightLabelStrong: TypographyFontWeightSemanticToken { Self.mockThemeTypographyFontWeightRawToken } + override var fontWeightCode: TypographyFontWeightSemanticToken { Self.mockThemeTypographyFontWeightRawToken } // MARK: Semantic token - Typography - Font - Size - Mobile - override var fontSizeMobileDisplayLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileDisplayMedium: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileDisplaySmall: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileHeadingXLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileHeadingLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileHeadingMedium: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileHeadingSmall: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileBodyLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileBodyMedium: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeMobileBodySmall: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } + override var fontSizeMobileDisplayLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileDisplayMedium: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileDisplaySmall: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileHeadingXLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileHeadingLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileHeadingMedium: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileHeadingSmall: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileBodyLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileBodyMedium: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeMobileBodySmall: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } // MARK: Semantic token - Typography - Font - Size - Tablet - override var fontSizeTabletDisplayLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletDisplayMedium: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletDisplaySmall: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletHeadingXLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletHeadingLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletHeadingMedium: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletHeadingSmall: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletBodyLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletBodyMedium: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeTabletBodySmall: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } + override var fontSizeTabletDisplayLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletDisplayMedium: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletDisplaySmall: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletHeadingXLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletHeadingLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletHeadingMedium: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletHeadingSmall: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletBodyLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletBodyMedium: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeTabletBodySmall: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } // MARK: Semantic token - Typography - Font - Size - Others - override var fontSizeLabelXLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeLabelLarge: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeLabelMedium: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeLabelSmall: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeCodeMedium: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } - override var fontSizeCodeSmall: TypographyFontSizeSemanticToken { Self.mockThemeFontSizeRawToken } + override var fontSizeLabelXLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeLabelLarge: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeLabelMedium: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeLabelSmall: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeCodeMedium: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } + override var fontSizeCodeSmall: TypographyFontSizeSemanticToken { Self.mockThemeTypographyFontSizeRawToken } // MARK: Semantic token - Typography - Font - Line height - Mobile - override var fontLineHeightMobileDisplayLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileDisplayMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileDisplaySmall: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileHeadingXLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileHeadingLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileHeadingMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileHeadingSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileBodyLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileBodyMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightMobileBodySmall: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } + override var fontLineHeightMobileDisplayLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileDisplayMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileDisplaySmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileHeadingXLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileHeadingLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileHeadingMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileHeadingSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileBodyLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileBodyMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightMobileBodySmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } // MARK: Semantic token - Typography - Font - Line height - Tablet - override var fontLineHeightTabletDisplayLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletDisplayMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletDisplaySmall: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletHeadingXLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletHeadingLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletHeadingMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletHeadingSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletBodyLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletBodyMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightTabletBodySmall: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } + override var fontLineHeightTabletDisplayLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletDisplayMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletDisplaySmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletHeadingXLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletHeadingLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletHeadingMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletHeadingSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletBodyLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletBodyMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightTabletBodySmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } // MARK: Semantic token - Typography - Font - Light height - Others - override var fontLineHeightLabelXLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightLabelLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightLabelMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightLabelSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightCodeMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } - override var fontLineHeightCodeSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeFontLineHeightRawToken } + override var fontLineHeightLabelXLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightLabelLarge: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightLabelMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightLabelSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightCodeMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + override var fontLineHeightCodeSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } // MARK: - Semantic tokens - Typography - Composites - Display diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift index 187273b7a..53c117fce 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift @@ -32,141 +32,141 @@ final class TestThemeOverrideOfElevationSemanticTokens: XCTestCase { func testInheritedThemeCanOverrideSemanticTokenElevationXNone() throws { XCTAssertNotEqual(inheritedTheme.elevationXNone, abstractTheme.elevationXNone) - XCTAssertTrue(inheritedTheme.elevationXNone == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXNone == MockTheme.mockThemeElevationXRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationXRaised() throws { XCTAssertNotEqual(inheritedTheme.elevationXRaised, abstractTheme.elevationXRaised) - XCTAssertTrue(inheritedTheme.elevationXRaised == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXRaised == MockTheme.mockThemeElevationXRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationXDrag() throws { XCTAssertNotEqual(inheritedTheme.elevationXDrag, abstractTheme.elevationXDrag) - XCTAssertTrue(inheritedTheme.elevationXDrag == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXDrag == MockTheme.mockThemeElevationXRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationXOverlayDefault() throws { XCTAssertNotEqual(inheritedTheme.elevationXOverlayDefault, abstractTheme.elevationXOverlayDefault) - XCTAssertTrue(inheritedTheme.elevationXOverlayDefault == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXOverlayDefault == MockTheme.mockThemeElevationXRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationXOverlayEmphasized() throws { XCTAssertNotEqual(inheritedTheme.elevationXOverlayEmphasized, abstractTheme.elevationXOverlayEmphasized) - XCTAssertTrue(inheritedTheme.elevationXOverlayEmphasized == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXOverlayEmphasized == MockTheme.mockThemeElevationXRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationXStickyDefault() throws { XCTAssertNotEqual(inheritedTheme.elevationXStickyDefault, abstractTheme.elevationXStickyDefault) - XCTAssertTrue(inheritedTheme.elevationXStickyDefault == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXStickyDefault == MockTheme.mockThemeElevationXRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationXStickyEmphasized() throws { XCTAssertNotEqual(inheritedTheme.elevationXStickyEmphasized, abstractTheme.elevationXStickyEmphasized) - XCTAssertTrue(inheritedTheme.elevationXStickyEmphasized == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXStickyEmphasized == MockTheme.mockThemeElevationXRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationXStickyNavigationScrolled() throws { XCTAssertNotEqual(inheritedTheme.elevationXStickyNavigationScrolled, abstractTheme.elevationXStickyNavigationScrolled) - XCTAssertTrue(inheritedTheme.elevationXStickyNavigationScrolled == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXStickyNavigationScrolled == MockTheme.mockThemeElevationXRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationXFocus() throws { XCTAssertNotEqual(inheritedTheme.elevationXFocus, abstractTheme.elevationXFocus) - XCTAssertTrue(inheritedTheme.elevationXFocus == MockTheme.mockThemeXRawToken) + XCTAssertTrue(inheritedTheme.elevationXFocus == MockTheme.mockThemeElevationXRawToken) } // MARK: - Semantic token - Elevation - Y func testInheritedThemeCanOverrideSemanticTokenElevationYNone() throws { XCTAssertNotEqual(inheritedTheme.elevationYNone, abstractTheme.elevationYNone) - XCTAssertTrue(inheritedTheme.elevationYNone == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYNone == MockTheme.mockThemeElevationYRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationYRaised() throws { XCTAssertNotEqual(inheritedTheme.elevationYRaised, abstractTheme.elevationYRaised) - XCTAssertTrue(inheritedTheme.elevationYRaised == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYRaised == MockTheme.mockThemeElevationYRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationYDrag() throws { XCTAssertNotEqual(inheritedTheme.elevationYDrag, abstractTheme.elevationYDrag) - XCTAssertTrue(inheritedTheme.elevationYDrag == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYDrag == MockTheme.mockThemeElevationYRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationYOverlayDefault() throws { XCTAssertNotEqual(inheritedTheme.elevationYOverlayDefault, abstractTheme.elevationYOverlayDefault) - XCTAssertTrue(inheritedTheme.elevationYOverlayDefault == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYOverlayDefault == MockTheme.mockThemeElevationYRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationYOverlayEmphasized() throws { XCTAssertNotEqual(inheritedTheme.elevationYOverlayEmphasized, abstractTheme.elevationYOverlayEmphasized) - XCTAssertTrue(inheritedTheme.elevationYOverlayEmphasized == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYOverlayEmphasized == MockTheme.mockThemeElevationYRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationYStickyDefault() throws { XCTAssertNotEqual(inheritedTheme.elevationYStickyDefault, abstractTheme.elevationYStickyDefault) - XCTAssertTrue(inheritedTheme.elevationYStickyDefault == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYStickyDefault == MockTheme.mockThemeElevationYRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationYStickyEmphasized() throws { XCTAssertNotEqual(inheritedTheme.elevationYStickyEmphasized, abstractTheme.elevationYStickyEmphasized) - XCTAssertTrue(inheritedTheme.elevationYStickyEmphasized == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYStickyEmphasized == MockTheme.mockThemeElevationYRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationYStickyNavigationScrolled() throws { XCTAssertNotEqual(inheritedTheme.elevationYStickyNavigationScrolled, abstractTheme.elevationYStickyNavigationScrolled) - XCTAssertTrue(inheritedTheme.elevationYStickyNavigationScrolled == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYStickyNavigationScrolled == MockTheme.mockThemeElevationYRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationYFocus() throws { XCTAssertNotEqual(inheritedTheme.elevationYFocus, abstractTheme.elevationYFocus) - XCTAssertTrue(inheritedTheme.elevationYFocus == MockTheme.mockThemeYRawToken) + XCTAssertTrue(inheritedTheme.elevationYFocus == MockTheme.mockThemeElevationYRawToken) } // MARK: - Semantic token - Elevation - Blur func testInheritedThemeCanOverrideSemanticTokenElevationBlurNone() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurNone, abstractTheme.elevationBlurNone) - XCTAssertTrue(inheritedTheme.elevationBlurNone == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurNone == MockTheme.mockThemeElevationBlurRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationBlurRaised() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurRaised, abstractTheme.elevationBlurRaised) - XCTAssertTrue(inheritedTheme.elevationBlurRaised == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurRaised == MockTheme.mockThemeElevationBlurRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationBlurDrag() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurDrag, abstractTheme.elevationBlurDrag) - XCTAssertTrue(inheritedTheme.elevationBlurDrag == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurDrag == MockTheme.mockThemeElevationBlurRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationBlurOverlayDefault() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurOverlayDefault, abstractTheme.elevationBlurOverlayDefault) - XCTAssertTrue(inheritedTheme.elevationBlurOverlayDefault == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurOverlayDefault == MockTheme.mockThemeElevationBlurRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationBlurOverlayEmphasized() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurOverlayEmphasized, abstractTheme.elevationBlurOverlayEmphasized) - XCTAssertTrue(inheritedTheme.elevationBlurOverlayEmphasized == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurOverlayEmphasized == MockTheme.mockThemeElevationBlurRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationBlurStickyDefault() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurStickyDefault, abstractTheme.elevationBlurStickyDefault) - XCTAssertTrue(inheritedTheme.elevationBlurStickyDefault == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurStickyDefault == MockTheme.mockThemeElevationBlurRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationBlurStickyEmphasized() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurStickyEmphasized, abstractTheme.elevationBlurStickyEmphasized) - XCTAssertTrue(inheritedTheme.elevationBlurStickyEmphasized == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurStickyEmphasized == MockTheme.mockThemeElevationBlurRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationBlurStickyNavigationScrolled() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurStickyNavigationScrolled, abstractTheme.elevationBlurStickyNavigationScrolled) - XCTAssertTrue(inheritedTheme.elevationBlurStickyNavigationScrolled == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurStickyNavigationScrolled == MockTheme.mockThemeElevationBlurRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationBlurFocus() throws { XCTAssertNotEqual(inheritedTheme.elevationBlurFocus, abstractTheme.elevationBlurFocus) - XCTAssertTrue(inheritedTheme.elevationBlurFocus == MockTheme.mockThemeBlurRawToken) + XCTAssertTrue(inheritedTheme.elevationBlurFocus == MockTheme.mockThemeElevationBlurRawToken) } // MARK: - Semantic token - Elevation - Color - None @@ -263,76 +263,76 @@ final class TestThemeOverrideOfElevationSemanticTokens: XCTestCase { func testInheritedThemeCanOverrideSemanticTokenElevationCompositeRaisedDark() throws { XCTAssertNotEqual(inheritedTheme.elevationRaisedDark, abstractTheme.elevationRaisedDark) - XCTAssertTrue(inheritedTheme.elevationRaisedDark == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationRaisedDark == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeDragLight() throws { XCTAssertNotEqual(inheritedTheme.elevationDragLight, abstractTheme.elevationDragLight) - XCTAssertTrue(inheritedTheme.elevationDragLight == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationDragLight == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeDragDark() throws { XCTAssertNotEqual(inheritedTheme.elevationDragDark, abstractTheme.elevationDragDark) - XCTAssertTrue(inheritedTheme.elevationDragDark == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationDragDark == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayDefaultLight() throws { XCTAssertNotEqual(inheritedTheme.elevationOverlayDefaultLight, abstractTheme.elevationOverlayDefaultLight) - XCTAssertTrue(inheritedTheme.elevationOverlayDefaultLight == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationOverlayDefaultLight == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayDefaultDark() throws { XCTAssertNotEqual(inheritedTheme.elevationOverlayDefaultDark, abstractTheme.elevationOverlayDefaultDark) - XCTAssertTrue(inheritedTheme.elevationOverlayDefaultDark == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationOverlayDefaultDark == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayEmphasizedLight() throws { XCTAssertNotEqual(inheritedTheme.elevationOverlayEmphasizedLight, abstractTheme.elevationOverlayEmphasizedLight) - XCTAssertTrue(inheritedTheme.elevationOverlayEmphasizedLight == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationOverlayEmphasizedLight == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayEmphasizedDark() throws { XCTAssertNotEqual(inheritedTheme.elevationOverlayEmphasizedDark, abstractTheme.elevationOverlayEmphasizedDark) - XCTAssertTrue(inheritedTheme.elevationOverlayEmphasizedDark == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationOverlayEmphasizedDark == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyDefaultLight() throws { XCTAssertNotEqual(inheritedTheme.elevationStickyDefaultLight, abstractTheme.elevationStickyDefaultLight) - XCTAssertTrue(inheritedTheme.elevationStickyDefaultLight == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationStickyDefaultLight == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyDefaultDark() throws { XCTAssertNotEqual(inheritedTheme.elevationStickyDefaultDark, abstractTheme.elevationStickyDefaultDark) - XCTAssertTrue(inheritedTheme.elevationStickyDefaultDark == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationStickyDefaultDark == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyEmphasizedLight() throws { XCTAssertNotEqual(inheritedTheme.elevationStickyEmphasizedLight, abstractTheme.elevationStickyEmphasizedLight) - XCTAssertTrue(inheritedTheme.elevationStickyEmphasizedLight == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationStickyEmphasizedLight == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyEmphasizedDark() throws { XCTAssertNotEqual(inheritedTheme.elevationStickyEmphasizedDark, abstractTheme.elevationStickyEmphasizedDark) - XCTAssertTrue(inheritedTheme.elevationStickyEmphasizedDark == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationStickyEmphasizedDark == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyNavigationScrolledLight() throws { XCTAssertNotEqual(inheritedTheme.elevationStickyNavigationScrolledLight, abstractTheme.elevationStickyNavigationScrolledLight) - XCTAssertTrue(inheritedTheme.elevationStickyNavigationScrolledLight == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationStickyNavigationScrolledLight == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyNavigationScrolledDark() throws { XCTAssertNotEqual(inheritedTheme.elevationStickyNavigationScrolledDark, abstractTheme.elevationStickyNavigationScrolledDark) - XCTAssertTrue(inheritedTheme.elevationStickyNavigationScrolledDark == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationStickyNavigationScrolledDark == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeFocusLight() throws { XCTAssertNotEqual(inheritedTheme.elevationFocusLight, abstractTheme.elevationFocusLight) - XCTAssertTrue(inheritedTheme.elevationFocusLight == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationFocusLight == MockTheme.mockThemeElevationCompositeRawToken) } func testInheritedThemeCanOverrideSemanticTokenElevationCompositeFocusDark() throws { XCTAssertNotEqual(inheritedTheme.elevationFocusDark, abstractTheme.elevationFocusDark) - XCTAssertTrue(inheritedTheme.elevationFocusDark == MockTheme.mockThemeCompositeRawToken) + XCTAssertTrue(inheritedTheme.elevationFocusDark == MockTheme.mockThemeElevationCompositeRawToken) } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSizingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSizingSemanticTokens.swift index 2c181e6bb..e48843d31 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSizingSemanticTokens.swift @@ -15,7 +15,7 @@ import XCTest import OUDS /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. -/// In factn the `OUDSTheme` object is a class, which can be seens as an _asbtract class_, exposing through its extensions and protocols _sizing semantic tokens_. +/// In fact the `OUDSTheme` object is a class, which can be seen as an _asbtract class_, exposing through its extensions and protocols _sizing semantic tokens_. /// These semantic tokens should be overriden by subclass like the `OrangeTheme` default theme. /// **These tests checks if any _sizing semantic tokens_ can be surcharged by a child theme** final class TestThemeOverrideOfSizingSemanticTokens: XCTestCase { @@ -28,273 +28,269 @@ final class TestThemeOverrideOfSizingSemanticTokens: XCTestCase { inheritedTheme = MockTheme() } - // MARK: - Semantic token - Sizing - Width height - Icon decorative + // MARK: - Semantic token - Sizing - Icon decorative - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconShortest() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconShortest, abstractTheme.sizeWidthHeightIconShortest) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconShortest == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconDecorativeShortest() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconDecorativeShortest, abstractTheme.sizeIconDecorativeShortest) + XCTAssertTrue(inheritedTheme.sizeIconDecorativeShortest == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconShorter() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconShorter, abstractTheme.sizeWidthHeightIconShorter) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconShorter == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconDecorativeShorter() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconDecorativeShorter, abstractTheme.sizeIconDecorativeShorter) + XCTAssertTrue(inheritedTheme.sizeIconDecorativeShorter == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconShort, abstractTheme.sizeWidthHeightIconShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconShort == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconDecorativeShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconDecorativeShort, abstractTheme.sizeIconDecorativeShort) + XCTAssertTrue(inheritedTheme.sizeIconDecorativeShort == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconMedium, abstractTheme.sizeWidthHeightIconMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconMedium == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconDecorativeMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconDecorativeMedium, abstractTheme.sizeIconDecorativeMedium) + XCTAssertTrue(inheritedTheme.sizeIconDecorativeMedium == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconTall, abstractTheme.sizeWidthHeightIconTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconTall == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconDecorativeTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconDecorativeTall, abstractTheme.sizeIconDecorativeTall) + XCTAssertTrue(inheritedTheme.sizeIconDecorativeTall == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconTaller() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconTaller, abstractTheme.sizeWidthHeightIconTaller) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconTaller == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconDecorativeTaller() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconDecorativeTaller, abstractTheme.sizeIconDecorativeTaller) + XCTAssertTrue(inheritedTheme.sizeIconDecorativeTaller == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconTallest() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconTallest, abstractTheme.sizeWidthHeightIconTallest) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconTallest == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconDecorativeTallest() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconDecorativeTallest, abstractTheme.sizeIconDecorativeTallest) + XCTAssertTrue(inheritedTheme.sizeIconDecorativeTallest == MockTheme.mockThemeSizeRawToken) } - // MARK: - Semantic token - Sizing - Width height - Icon component + // MARK: - Semantic token - Sizing - Icon with typography - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelSmallShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelSmallShort, abstractTheme.sizeWidthHeightIsLabelSmallShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelSmallShort == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingSmallShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingSmallShort, abstractTheme.sizeIconWithTypeHeadingSmallShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingSmallShort == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelSmallMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelSmallMedium, abstractTheme.sizeWidthHeightIsLabelSmallMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelSmallMedium == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingSmallMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingSmallMedium, abstractTheme.sizeIconWithTypeHeadingSmallMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingSmallMedium == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelSmallTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelSmallTall, abstractTheme.sizeWidthHeightIsLabelSmallTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelSmallTall == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingSmallTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingSmallTall, abstractTheme.sizeIconWithTypeHeadingSmallTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingSmallTall == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelMediumShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelMediumShort, abstractTheme.sizeWidthHeightIsLabelMediumShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelMediumShort == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingMediumShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingMediumShort, abstractTheme.sizeIconWithTypeHeadingMediumShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingMediumShort == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelMediumMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelMediumMedium, abstractTheme.sizeWidthHeightIsLabelMediumMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelMediumMedium == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizIconWithTypeHeadingMediumMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingMediumMedium, abstractTheme.sizeIconWithTypeHeadingMediumMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingMediumMedium == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelMediumTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelMediumTall, abstractTheme.sizeWidthHeightIsLabelMediumTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelMediumTall == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingMediumTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingMediumTall, abstractTheme.sizeIconWithTypeHeadingMediumTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingMediumTall == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelLargeShorter() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelLargeShorter, abstractTheme.sizeWidthHeightIsLabelLargeShorter) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelLargeShorter == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingLargeShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingLargeShort, abstractTheme.sizeIconWithTypeHeadingLargeShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingLargeShort == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelLargeShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelLargeShort, abstractTheme.sizeWidthHeightIsLabelLargeShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelLargeShort == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingLargeMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingLargeMedium, abstractTheme.sizeIconWithTypeHeadingLargeMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingLargeMedium == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelLargeMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelLargeMedium, abstractTheme.sizeWidthHeightIsLabelLargeMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelLargeMedium == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingLargeTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingLargeTall, abstractTheme.sizeIconWithTypeHeadingLargeTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingLargeTall == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelLargeTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelLargeTall, abstractTheme.sizeWidthHeightIsLabelLargeTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelLargeTall == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingXLargeShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingXLargeShort, abstractTheme.sizeIconWithTypeHeadingXLargeShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingXLargeShort == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelLargeTaller() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelLargeTaller, abstractTheme.sizeWidthHeightIsLabelLargeTaller) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelLargeTaller == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingXLargeMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingXLargeMedium, abstractTheme.sizeIconWithTypeHeadingXLargeMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingXLargeMedium == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelXLargeShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelXLargeShort, abstractTheme.sizeWidthHeightIsLabelXLargeShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelXLargeShort == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeHeadingXLargeTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeHeadingXLargeTall, abstractTheme.sizeIconWithTypeHeadingXLargeTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeHeadingXLargeTall == MockTheme.mockThemeSizeCompositeToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelXLargeMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelXLargeMedium, abstractTheme.sizeWidthHeightIsLabelXLargeMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelXLargeMedium == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodySmallShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodySmallShort, abstractTheme.sizeIconWithTypeBodySmallShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodySmallShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIsLabelXLargeTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIsLabelXLargeTall, abstractTheme.sizeWidthHeightIsLabelXLargeTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIsLabelXLargeTall == MockTheme.mockThemeSizeRawToken) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodySmallMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodySmallMedium, abstractTheme.sizeIconWithTypeBodySmallMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodySmallMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - // MARK: - Semantic token - Sizing - Width height - Icon typography - Heading - - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingSmallShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingSmallShort, abstractTheme.sizeWidthHeightIconIsHeadingSmallShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingSmallShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodySmallTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodySmallTall, abstractTheme.sizeIconWithTypeBodySmallTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodySmallTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingSmallMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingSmallMedium, abstractTheme.sizeWidthHeightIconIsHeadingSmallMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingSmallMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodyMediumShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodyMediumShort, abstractTheme.sizeIconWithTypeBodyMediumShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodyMediumShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingSmallTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingSmallTall, abstractTheme.sizeWidthHeightIconIsHeadingSmallTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingSmallTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodyMediumMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodyMediumMedium, abstractTheme.sizeIconWithTypeBodyMediumMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodyMediumMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingMediumShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingMediumShort, abstractTheme.sizeWidthHeightIconIsHeadingMediumShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingMediumShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodyMediumTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodyMediumTall, abstractTheme.sizeIconWithTypeBodyMediumTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodyMediumTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingMediumMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingMediumMedium, abstractTheme.sizeWidthHeightIconIsHeadingMediumMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingMediumMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodyLargeShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodyLargeShort, abstractTheme.sizeIconWithTypeBodyLargeShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodyLargeShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingMediumTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingMediumTall, abstractTheme.sizeWidthHeightIconIsHeadingMediumTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingMediumTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodyLargeMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodyLargeMedium, abstractTheme.sizeIconWithTypeBodyLargeMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodyLargeMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingLargeShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingLargeShort, abstractTheme.sizeWidthHeightIconIsHeadingLargeShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingLargeShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeIconWithTypeBodyLargeTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeBodyLargeTall, abstractTheme.sizeIconWithTypeBodyLargeTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeBodyLargeTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingLargeMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingLargeMedium, abstractTheme.sizeWidthHeightIconIsHeadingLargeMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingLargeMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelSmallShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelSmallShort, abstractTheme.sizeIconWithTypeLabelSmallShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelSmallShort == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingLargeTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingLargeTall, abstractTheme.sizeWidthHeightIconIsHeadingLargeTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingLargeTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelSmallMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelSmallMedium, abstractTheme.sizeIconWithTypeLabelSmallMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelSmallMedium == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingXLargeShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingXLargeShort, abstractTheme.sizeWidthHeightIconIsHeadingXLargeShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingXLargeShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelSmallTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelSmallTall, abstractTheme.sizeIconWithTypeLabelSmallTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelSmallTall == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingXLargeMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingXLargeMedium, abstractTheme.sizeWidthHeightIconIsHeadingXLargeMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingXLargeMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelMediumShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelMediumShort, abstractTheme.sizeIconWithTypeLabelMediumShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelMediumShort == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsHeadingXLargeTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsHeadingXLargeTall, abstractTheme.sizeWidthHeightIconIsHeadingXLargeTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsHeadingXLargeTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelMediumMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelMediumMedium, abstractTheme.sizeIconWithTypeLabelMediumMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelMediumMedium == MockTheme.mockThemeSizeRawToken) } - // MARK: - Semantic token - Sizing - Width height - Icon typography - Body - - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodySmallShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodySmallShort, abstractTheme.sizeWidthHeightIconIsBodySmallShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodySmallShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelMediumTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelMediumTall, abstractTheme.sizeIconWithTypeLabelMediumTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelMediumTall == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodySmallMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodySmallMedium, abstractTheme.sizeWidthHeightIconIsBodySmallMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodySmallMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelLargeShorter() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelLargeShorter, abstractTheme.sizeIconWithTypeLabelLargeShorter) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelLargeShorter == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodySmallTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodySmallTall, abstractTheme.sizeWidthHeightIconIsBodySmallTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodySmallTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelLargeShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelLargeShort, abstractTheme.sizeIconWithTypeLabelLargeShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelLargeShort == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodyMediumShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodyMediumShort, abstractTheme.sizeWidthHeightIconIsBodyMediumShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodyMediumShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelLargeMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelLargeMedium, abstractTheme.sizeIconWithTypeLabelLargeMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelLargeMedium == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodyMediumMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodyMediumMedium, abstractTheme.sizeWidthHeightIconIsBodyMediumMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodyMediumMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelLargeTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelLargeTall, abstractTheme.sizeIconWithTypeLabelLargeTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelLargeTall == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodyMediumTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodyMediumTall, abstractTheme.sizeWidthHeightIconIsBodyMediumTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodyMediumTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelLargeTaller() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelLargeTaller, abstractTheme.sizeIconWithTypeLabelLargeTaller) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelLargeTaller == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodyLargeShort() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodyLargeShort, abstractTheme.sizeWidthHeightIconIsBodyLargeShort) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodyLargeShort.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelXLargeShort() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelXLargeShort, abstractTheme.sizeIconWithTypeLabelXLargeShort) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelXLargeShort == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodyLargeMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodyLargeMedium, abstractTheme.sizeWidthHeightIconIsBodyLargeMedium) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodyLargeMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelXLargeMedium() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelXLargeMedium, abstractTheme.sizeIconWithTypeLabelXLargeMedium) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelXLargeMedium == MockTheme.mockThemeSizeRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSizeWidthHeightIconIsBodyLargeTall() throws { - XCTAssertNotEqual(inheritedTheme.sizeWidthHeightIconIsBodyLargeTall, abstractTheme.sizeWidthHeightIconIsBodyLargeTall) - XCTAssertTrue(inheritedTheme.sizeWidthHeightIconIsBodyLargeTall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + func testInheritedThemeCanOverrideSemanticTokenSizeWithTypeLabelXLargeTall() throws { + XCTAssertNotEqual(inheritedTheme.sizeIconWithTypeLabelXLargeTall, abstractTheme.sizeIconWithTypeLabelXLargeTall) + XCTAssertTrue(inheritedTheme.sizeIconWithTypeLabelXLargeTall == MockTheme.mockThemeSizeRawToken) } // MARK: - Semantic token - Sizing - Max width func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyDisplaySmall() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyDisplaySmall, abstractTheme.sizeMaxWidthTypographyDisplaySmall) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyDisplaySmall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeDisplaySmall, abstractTheme.sizeMaxWidthTypeDisplaySmall) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeDisplaySmall.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyDisplayMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyDisplayMedium, abstractTheme.sizeMaxWidthTypographyDisplayMedium) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyDisplayMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeDisplayMedium, abstractTheme.sizeMaxWidthTypeDisplayMedium) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeDisplayMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyDisplayLarge() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyDisplayLarge, abstractTheme.sizeMaxWidthTypographyDisplayLarge) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyDisplayLarge.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeDisplayLarge, abstractTheme.sizeMaxWidthTypeDisplayLarge) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeDisplayLarge.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyHeadingSmall() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyHeadingSmall, abstractTheme.sizeMaxWidthTypographyHeadingSmall) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyHeadingSmall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeHeadingSmall, abstractTheme.sizeMaxWidthTypeHeadingSmall) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeHeadingSmall.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyHeadingMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyHeadingMedium, abstractTheme.sizeMaxWidthTypographyHeadingMedium) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyHeadingMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeHeadingMedium, abstractTheme.sizeMaxWidthTypeHeadingMedium) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeHeadingMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyHeadingLarge() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyHeadingLarge, abstractTheme.sizeMaxWidthTypographyHeadingLarge) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyHeadingLarge.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeHeadingLarge, abstractTheme.sizeMaxWidthTypeHeadingLarge) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeHeadingLarge.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyHeadingXLarge() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyHeadingXLarge, abstractTheme.sizeMaxWidthTypographyHeadingXLarge) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyHeadingXLarge.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeHeadingXLarge, abstractTheme.sizeMaxWidthTypeHeadingXLarge) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeHeadingXLarge.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyBodySmall() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyBodySmall, abstractTheme.sizeMaxWidthTypographyBodySmall) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyBodySmall.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeBodySmall, abstractTheme.sizeMaxWidthTypeBodySmall) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeBodySmall.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyBodyMedium() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyBodyMedium, abstractTheme.sizeMaxWidthTypographyBodyMedium) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyBodyMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeBodyMedium, abstractTheme.sizeMaxWidthTypeBodyMedium) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeBodyMedium.isEqual(MockTheme.mockThemeSizeCompositeToken)) } func testInheritedThemeCanOverrideSemanticTokenSizeMaxWidthTypographyBodyLarge() throws { - XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypographyBodyLarge, abstractTheme.sizeMaxWidthTypographyBodyLarge) - XCTAssertTrue(inheritedTheme.sizeMaxWidthTypographyBodyLarge.isEqual(MockTheme.mockThemeSizeCompositeToken)) + XCTAssertNotEqual(inheritedTheme.sizeMaxWidthTypeBodyLarge, abstractTheme.sizeMaxWidthTypeBodyLarge) + XCTAssertTrue(inheritedTheme.sizeMaxWidthTypeBodyLarge.isEqual(MockTheme.mockThemeSizeCompositeToken)) } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift index c25f5f11d..aafd5a1d8 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift @@ -34,341 +34,341 @@ final class TestThemeOverrideOfTypographySemanticTokens: XCTestCase { func testInheritedThemeCanOverrideSemanticTokenFontFamily() throws { XCTAssertNotEqual(inheritedTheme.fontFamily, abstractTheme.fontFamily) - XCTAssertTrue(inheritedTheme.fontFamily == MockTheme.mockThemeFontFamilyRawToken) + XCTAssertTrue(inheritedTheme.fontFamily == MockTheme.mockThemeTypographyFontFamilyRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontFamilyDisplay() throws { XCTAssertNotEqual(inheritedTheme.fontFamilyDisplay, abstractTheme.fontFamilyDisplay) - XCTAssertTrue(inheritedTheme.fontFamilyDisplay == MockTheme.mockThemeFontFamilyRawToken) + XCTAssertTrue(inheritedTheme.fontFamilyDisplay == MockTheme.mockThemeTypographyFontFamilyRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontFamilyHeading() throws { XCTAssertNotEqual(inheritedTheme.fontFamilyHeading, abstractTheme.fontFamilyHeading) - XCTAssertTrue(inheritedTheme.fontFamilyHeading == MockTheme.mockThemeFontFamilyRawToken) + XCTAssertTrue(inheritedTheme.fontFamilyHeading == MockTheme.mockThemeTypographyFontFamilyRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontFamilyBody() throws { XCTAssertNotEqual(inheritedTheme.fontFamilyBody, abstractTheme.fontFamilyBody) - XCTAssertTrue(inheritedTheme.fontFamilyBody == MockTheme.mockThemeFontFamilyRawToken) + XCTAssertTrue(inheritedTheme.fontFamilyBody == MockTheme.mockThemeTypographyFontFamilyRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontFamilyLabel() throws { XCTAssertNotEqual(inheritedTheme.fontFamilyLabel, abstractTheme.fontFamilyLabel) - XCTAssertTrue(inheritedTheme.fontFamilyLabel == MockTheme.mockThemeFontFamilyRawToken) + XCTAssertTrue(inheritedTheme.fontFamilyLabel == MockTheme.mockThemeTypographyFontFamilyRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontFamilyCode() throws { XCTAssertNotEqual(inheritedTheme.fontFamilyCode, abstractTheme.fontFamilyCode) - XCTAssertTrue(inheritedTheme.fontFamilyCode == MockTheme.mockThemeFontFamilyRawToken) + XCTAssertTrue(inheritedTheme.fontFamilyCode == MockTheme.mockThemeTypographyFontFamilyRawToken) } // MARK: - Semantic token - Typography - Font - Weight func testInheritedThemeCanOverrideSemanticTokenFontWeightDisplay() throws { XCTAssertNotEqual(inheritedTheme.fontWeightDisplay, abstractTheme.fontWeightDisplay) - XCTAssertTrue(inheritedTheme.fontWeightDisplay == MockTheme.mockThemeFontWeightRawToken) + XCTAssertTrue(inheritedTheme.fontWeightDisplay == MockTheme.mockThemeTypographyFontWeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontWeightHeading() throws { XCTAssertNotEqual(inheritedTheme.fontWeightHeading, abstractTheme.fontWeightHeading) - XCTAssertTrue(inheritedTheme.fontWeightHeading == MockTheme.mockThemeFontWeightRawToken) + XCTAssertTrue(inheritedTheme.fontWeightHeading == MockTheme.mockThemeTypographyFontWeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontWeightBodyDefault() throws { XCTAssertNotEqual(inheritedTheme.fontWeightBodyDefault, abstractTheme.fontWeightBodyDefault) - XCTAssertTrue(inheritedTheme.fontWeightBodyDefault == MockTheme.mockThemeFontWeightRawToken) + XCTAssertTrue(inheritedTheme.fontWeightBodyDefault == MockTheme.mockThemeTypographyFontWeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontWeightBodyStrong() throws { XCTAssertNotEqual(inheritedTheme.fontWeightBodyStrong, abstractTheme.fontWeightBodyStrong) - XCTAssertTrue(inheritedTheme.fontWeightBodyStrong == MockTheme.mockThemeFontWeightRawToken) + XCTAssertTrue(inheritedTheme.fontWeightBodyStrong == MockTheme.mockThemeTypographyFontWeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontWeightLabelDefault() throws { XCTAssertNotEqual(inheritedTheme.fontWeightLabelDefault, abstractTheme.fontWeightLabelDefault) - XCTAssertTrue(inheritedTheme.fontWeightLabelDefault == MockTheme.mockThemeFontWeightRawToken) + XCTAssertTrue(inheritedTheme.fontWeightLabelDefault == MockTheme.mockThemeTypographyFontWeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontWeightLabelStrong() throws { XCTAssertNotEqual(inheritedTheme.fontWeightLabelStrong, abstractTheme.fontWeightLabelStrong) - XCTAssertTrue(inheritedTheme.fontWeightLabelStrong == MockTheme.mockThemeFontWeightRawToken) + XCTAssertTrue(inheritedTheme.fontWeightLabelStrong == MockTheme.mockThemeTypographyFontWeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontWeightCode() throws { XCTAssertNotEqual(inheritedTheme.fontWeightCode, abstractTheme.fontWeightCode) - XCTAssertTrue(inheritedTheme.fontWeightCode == MockTheme.mockThemeFontWeightRawToken) + XCTAssertTrue(inheritedTheme.fontWeightCode == MockTheme.mockThemeTypographyFontWeightRawToken) } // MARK: - Semantic token - Typography - Font - Size - Mobile func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileDisplayLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileDisplayLarge, abstractTheme.fontSizeMobileDisplayLarge) - XCTAssertTrue(inheritedTheme.fontSizeMobileDisplayLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileDisplayLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileDisplayMedium() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileDisplayMedium, abstractTheme.fontSizeMobileDisplayMedium) - XCTAssertTrue(inheritedTheme.fontSizeMobileDisplayMedium == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileDisplayMedium == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileDisplaySmall() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileDisplaySmall, abstractTheme.fontSizeMobileDisplaySmall) - XCTAssertTrue(inheritedTheme.fontSizeMobileDisplaySmall == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileDisplaySmall == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileHeadingXLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileHeadingXLarge, abstractTheme.fontSizeMobileHeadingXLarge) - XCTAssertTrue(inheritedTheme.fontSizeMobileHeadingXLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileHeadingXLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileHeadingLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileHeadingLarge, abstractTheme.fontSizeMobileHeadingLarge) - XCTAssertTrue(inheritedTheme.fontSizeMobileHeadingLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileHeadingLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileHeadingMedium() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileHeadingMedium, abstractTheme.fontSizeMobileHeadingMedium) - XCTAssertTrue(inheritedTheme.fontSizeMobileHeadingMedium == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileHeadingMedium == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileHeadingSmall() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileHeadingSmall, abstractTheme.fontSizeMobileHeadingSmall) - XCTAssertTrue(inheritedTheme.fontSizeMobileHeadingSmall == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileHeadingSmall == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileBodyLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileBodyLarge, abstractTheme.fontSizeMobileBodyLarge) - XCTAssertTrue(inheritedTheme.fontSizeMobileBodyLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileBodyLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileBodyMedium() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileBodyMedium, abstractTheme.fontSizeMobileBodyMedium) - XCTAssertTrue(inheritedTheme.fontSizeMobileBodyMedium == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileBodyMedium == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeMobileBodySmall() throws { XCTAssertNotEqual(inheritedTheme.fontSizeMobileBodySmall, abstractTheme.fontSizeMobileBodySmall) - XCTAssertTrue(inheritedTheme.fontSizeMobileBodySmall == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeMobileBodySmall == MockTheme.mockThemeTypographyFontSizeRawToken) } // MARK: - Semantic token - Typography - Font - Size - Tablet func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletDisplayLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletDisplayLarge, abstractTheme.fontSizeTabletDisplayLarge) - XCTAssertTrue(inheritedTheme.fontSizeTabletDisplayLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletDisplayLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletDisplayMedium() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletDisplayMedium, abstractTheme.fontSizeTabletDisplayMedium) - XCTAssertTrue(inheritedTheme.fontSizeTabletDisplayMedium == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletDisplayMedium == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletDisplaySmall() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletDisplaySmall, abstractTheme.fontSizeTabletDisplaySmall) - XCTAssertTrue(inheritedTheme.fontSizeTabletDisplaySmall == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletDisplaySmall == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletHeadingXLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletHeadingXLarge, abstractTheme.fontSizeTabletHeadingXLarge) - XCTAssertTrue(inheritedTheme.fontSizeTabletHeadingXLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletHeadingXLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletHeadingLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletHeadingLarge, abstractTheme.fontSizeTabletHeadingLarge) - XCTAssertTrue(inheritedTheme.fontSizeTabletHeadingLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletHeadingLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletHeadingMedium() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletHeadingMedium, abstractTheme.fontSizeTabletHeadingMedium) - XCTAssertTrue(inheritedTheme.fontSizeTabletHeadingMedium == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletHeadingMedium == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletHeadingSmall() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletHeadingSmall, abstractTheme.fontSizeTabletHeadingSmall) - XCTAssertTrue(inheritedTheme.fontSizeTabletHeadingSmall == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletHeadingSmall == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletBodyLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletBodyLarge, abstractTheme.fontSizeTabletBodyLarge) - XCTAssertTrue(inheritedTheme.fontSizeTabletBodyLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletBodyLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletBodyMedium() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletBodyMedium, abstractTheme.fontSizeTabletBodyMedium) - XCTAssertTrue(inheritedTheme.fontSizeTabletBodyMedium == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletBodyMedium == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeTabletBodySmall() throws { XCTAssertNotEqual(inheritedTheme.fontSizeTabletBodySmall, abstractTheme.fontSizeTabletBodySmall) - XCTAssertTrue(inheritedTheme.fontSizeTabletBodySmall == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeTabletBodySmall == MockTheme.mockThemeTypographyFontSizeRawToken) } // MARK: - Semantic token - Typography - Font - Size - Others func testInheritedThemeCanOverrideSemanticTokenFontSizeLabelXLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeLabelXLarge, abstractTheme.fontSizeLabelXLarge) - XCTAssertTrue(inheritedTheme.fontSizeLabelXLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeLabelXLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeLabelLarge() throws { XCTAssertNotEqual(inheritedTheme.fontSizeLabelLarge, abstractTheme.fontSizeLabelLarge) - XCTAssertTrue(inheritedTheme.fontSizeLabelLarge == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeLabelLarge == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeLabelMedium() throws { XCTAssertNotEqual(inheritedTheme.fontSizeLabelMedium, abstractTheme.fontSizeLabelMedium) - XCTAssertTrue(inheritedTheme.fontSizeLabelMedium == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeLabelMedium == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeLabelSmall() throws { XCTAssertNotEqual(inheritedTheme.fontSizeLabelSmall, abstractTheme.fontSizeLabelSmall) - XCTAssertTrue(inheritedTheme.fontSizeLabelSmall == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeLabelSmall == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeCodeMedium() throws { XCTAssertNotEqual(inheritedTheme.fontSizeCodeMedium, abstractTheme.fontSizeCodeMedium) - XCTAssertTrue(inheritedTheme.fontSizeCodeMedium == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeCodeMedium == MockTheme.mockThemeTypographyFontSizeRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontSizeCodeSmall() throws { XCTAssertNotEqual(inheritedTheme.fontSizeCodeSmall, abstractTheme.fontSizeCodeSmall) - XCTAssertTrue(inheritedTheme.fontSizeCodeSmall == MockTheme.mockThemeFontSizeRawToken) + XCTAssertTrue(inheritedTheme.fontSizeCodeSmall == MockTheme.mockThemeTypographyFontSizeRawToken) } // MARK: - Semantic token - Typography - Font - Line height - Mobile func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileDisplayLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileDisplayLarge, abstractTheme.fontLineHeightMobileDisplayLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileDisplayLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileDisplayLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileDisplayMedium() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileDisplayMedium, abstractTheme.fontLineHeightMobileDisplayMedium) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileDisplayMedium == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileDisplayMedium == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileDisplaySmall() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileDisplaySmall, abstractTheme.fontLineHeightMobileDisplaySmall) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileDisplaySmall == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileDisplaySmall == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileHeadingXLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileHeadingXLarge, abstractTheme.fontLineHeightMobileHeadingXLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileHeadingXLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileHeadingXLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileHeadingLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileHeadingLarge, abstractTheme.fontLineHeightMobileHeadingLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileHeadingLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileHeadingLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileHeadingMedium() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileHeadingMedium, abstractTheme.fontLineHeightMobileHeadingMedium) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileHeadingMedium == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileHeadingMedium == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileHeadingSmall() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileHeadingSmall, abstractTheme.fontLineHeightMobileHeadingSmall) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileHeadingSmall == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileHeadingSmall == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileBodyLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileBodyLarge, abstractTheme.fontLineHeightMobileBodyLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileBodyLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileBodyLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileBodyMedium() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileBodyMedium, abstractTheme.fontLineHeightMobileBodyMedium) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileBodyMedium == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileBodyMedium == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileBodySmall() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightMobileBodySmall, abstractTheme.fontLineHeightMobileBodySmall) - XCTAssertTrue(inheritedTheme.fontLineHeightMobileBodySmall == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightMobileBodySmall == MockTheme.mockThemeTypographyFontLineHeightRawToken) } // MARK: - Semantic token - Typography - Font - Line height - Tablet func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletDisplayLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletDisplayLarge, abstractTheme.fontLineHeightTabletDisplayLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletDisplayLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletDisplayLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletDisplayMedium() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletDisplayMedium, abstractTheme.fontLineHeightTabletDisplayMedium) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletDisplayMedium == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletDisplayMedium == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletDisplaySmall() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletDisplaySmall, abstractTheme.fontLineHeightTabletDisplaySmall) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletDisplaySmall == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletDisplaySmall == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletHeadingXLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletHeadingXLarge, abstractTheme.fontLineHeightTabletHeadingXLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletHeadingXLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletHeadingXLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletHeadingLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletHeadingLarge, abstractTheme.fontLineHeightTabletHeadingLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletHeadingLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletHeadingLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletHeadingMedium() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletHeadingMedium, abstractTheme.fontLineHeightTabletHeadingMedium) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletHeadingMedium == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletHeadingMedium == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletHeadingSmall() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletHeadingSmall, abstractTheme.fontLineHeightTabletHeadingSmall) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletHeadingSmall == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletHeadingSmall == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletBodyLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletBodyLarge, abstractTheme.fontLineHeightTabletBodyLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletBodyLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletBodyLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletBodyMedium() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletBodyMedium, abstractTheme.fontLineHeightTabletBodyMedium) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletBodyMedium == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletBodyMedium == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightTabletBodySmall() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightTabletBodySmall, abstractTheme.fontLineHeightTabletBodySmall) - XCTAssertTrue(inheritedTheme.fontLineHeightTabletBodySmall == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightTabletBodySmall == MockTheme.mockThemeTypographyFontLineHeightRawToken) } // MARK: - Semantic token - Typography - Font - Line height - Others func testInheritedThemeCanOverrideSemanticTokenFontLineHeightLabelXLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightLabelXLarge, abstractTheme.fontLineHeightLabelXLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightLabelXLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightLabelXLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightLabelLarge() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightLabelLarge, abstractTheme.fontLineHeightLabelLarge) - XCTAssertTrue(inheritedTheme.fontLineHeightLabelLarge == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightLabelLarge == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightLabelMedium() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightLabelMedium, abstractTheme.fontLineHeightLabelMedium) - XCTAssertTrue(inheritedTheme.fontLineHeightLabelMedium == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightLabelMedium == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightLabelSmall() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightLabelSmall, abstractTheme.fontLineHeightLabelSmall) - XCTAssertTrue(inheritedTheme.fontLineHeightLabelSmall == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightLabelSmall == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightCodeMedium() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightCodeMedium, abstractTheme.fontLineHeightCodeMedium) - XCTAssertTrue(inheritedTheme.fontLineHeightCodeMedium == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightCodeMedium == MockTheme.mockThemeTypographyFontLineHeightRawToken) } func testInheritedThemeCanOverrideSemanticTokenFontLineHeightCodeSmall() throws { XCTAssertNotEqual(inheritedTheme.fontLineHeightCodeSmall, abstractTheme.fontLineHeightCodeSmall) - XCTAssertTrue(inheritedTheme.fontLineHeightCodeSmall == MockTheme.mockThemeFontLineHeightRawToken) + XCTAssertTrue(inheritedTheme.fontLineHeightCodeSmall == MockTheme.mockThemeTypographyFontLineHeightRawToken) } // MARK: - Semantic tokens - Typography - Composites - Display diff --git a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift index 90fcedb7c..4d5e10527 100644 --- a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift +++ b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift @@ -37,8 +37,8 @@ public protocol ButtonsComponentTokens { var buttonBackgroundColorLight: ColorSemanticToken { get } var buttonBackgroundColorDark: ColorSemanticToken { get } - var buttonWidth: SizingWidthHeightSemanticToken { get } - var buttonHeight: SizingWidthHeightSemanticToken { get } + var buttonWidth: SizingSemanticToken { get } + var buttonHeight: SizingSemanticToken { get } var buttonTypography: TypographyCompositeSemanticToken { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SizingSemanticTokens+Composites.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SizingSemanticTokens+Composites.swift index f6d5efb46..e8e05cc7f 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SizingSemanticTokens+Composites.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SizingSemanticTokens+Composites.swift @@ -13,20 +13,20 @@ import Foundation -/// Composite semantic tokens which will wrap a combination of `SizingWidthHeightSemanticToken` depending to viewports / size classes. +/// Composite semantic tokens which will wrap a combination of `SizingSemanticToken` depending to viewports / size classes. public final class SizingCompositeSemanticToken: NSObject { /// For **extra-compact** and **compact** viewports - public let compact: SizingWidthHeightSemanticToken + public let compact: SizingSemanticToken /// For **regular** and **medium** viewports - public let regular: SizingWidthHeightSemanticToken + public let regular: SizingSemanticToken /// Initializes a new sizing composite semantic token. /// - Parameters: - /// - compact: The `SizingWidthHeightSemanticToken` to apply if device in *compact* mode - /// - regular: The `SizingWidthHeightSemanticToken` to apply if device in *regular* mode - public init(compact: SizingWidthHeightSemanticToken, regular: SizingWidthHeightSemanticToken) { + /// - compact: The `SizingSemanticToken` to apply if device in *compact* mode + /// - regular: The `SizingSemanticToken` to apply if device in *regular* mode + public init(compact: SizingSemanticToken, regular: SizingSemanticToken) { self.compact = compact self.regular = regular } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/SizingSemanticTokens+Aliases.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/SizingSemanticTokens+Aliases.swift index 579359d81..3be331526 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/SizingSemanticTokens+Aliases.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/SizingSemanticTokens+Aliases.swift @@ -14,7 +14,4 @@ import OUDSTokensRaw /// Basically a size semantic token for width and height is a dimension raw token, it has the same final type, to keep grammar clean and clear with design system grammar. -public typealias SizingWidthHeightSemanticToken = DimensionRawToken - -/// Basically a size semantic token for max width is a dimension raw token, it has the same final type, to keep grammar clean and clear with design system grammar. -public typealias SizingMaxWidthSemanticToken = DimensionRawToken +public typealias SizingSemanticToken = DimensionRawToken diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift index 5bb1af1ec..ec4a700e4 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift @@ -17,70 +17,76 @@ /// In the future this file should be generated by a parser converting Figma JSON to Swift code. public protocol SizingSemanticTokens { - // MARK: - Semantic token - Sizing - Width height - Icon decorative - - var sizeWidthHeightIconShortest: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIconShorter: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIconShort: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIconMedium: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIconTall: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIconTaller: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIconTallest: SizingWidthHeightSemanticToken { get } - - // MARK: - Semantic token - Sizing - Width height - Icon component - - var sizeWidthHeightIsLabelSmallShort: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelSmallMedium: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelSmallTall: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelMediumShort: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelMediumMedium: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelMediumTall: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelLargeShorter: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelLargeShort: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelLargeMedium: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelLargeTall: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelLargeTaller: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelXLargeShort: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelXLargeMedium: SizingWidthHeightSemanticToken { get } - var sizeWidthHeightIsLabelXLargeTall: SizingWidthHeightSemanticToken { get } - - // MARK: - Semantic token - Sizing - Width height - Icon typography - Heading - - var sizeWidthHeightIconIsHeadingSmallShort: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingSmallMedium: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingSmallTall: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingMediumShort: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingMediumMedium: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingMediumTall: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingLargeShort: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingLargeMedium: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingLargeTall: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingXLargeShort: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingXLargeMedium: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsHeadingXLargeTall: SizingCompositeSemanticToken { get } - - // MARK: - Semantic token - Sizing - Width height - Icon typography - Body - - var sizeWidthHeightIconIsBodySmallShort: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsBodySmallMedium: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsBodySmallTall: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsBodyMediumShort: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsBodyMediumMedium: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsBodyMediumTall: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsBodyLargeShort: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsBodyLargeMedium: SizingCompositeSemanticToken { get } - var sizeWidthHeightIconIsBodyLargeTall: SizingCompositeSemanticToken { get } - - // MARK: - Semantic token - Sizing - Max width - - var sizeMaxWidthTypographyDisplaySmall: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyDisplayMedium: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyDisplayLarge: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyHeadingSmall: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyHeadingMedium: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyHeadingLarge: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyHeadingXLarge: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyBodySmall: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyBodyMedium: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypographyBodyLarge: SizingCompositeSemanticToken { get } + // MARK: - Semantic token - Sizing - Icon decorative + + var sizeIconDecorativeShortest: SizingSemanticToken { get } + var sizeIconDecorativeShorter: SizingSemanticToken { get } + var sizeIconDecorativeShort: SizingSemanticToken { get } + var sizeIconDecorativeMedium: SizingSemanticToken { get } + var sizeIconDecorativeTall: SizingSemanticToken { get } + var sizeIconDecorativeTaller: SizingSemanticToken { get } + var sizeIconDecorativeTallest: SizingSemanticToken { get } + + // MARK: - Semantic token - Sizing - Icon with typography + + var sizeIconWithTypeHeadingSmallShort: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingSmallMedium: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingSmallTall: SizingCompositeSemanticToken { get } + + var sizeIconWithTypeHeadingMediumShort: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingMediumMedium: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingMediumTall: SizingCompositeSemanticToken { get } + + var sizeIconWithTypeHeadingLargeShort: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingLargeMedium: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingLargeTall: SizingCompositeSemanticToken { get } + + var sizeIconWithTypeHeadingXLargeShort: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingXLargeMedium: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingXLargeTall: SizingCompositeSemanticToken { get } + + var sizeIconWithTypeBodySmallShort: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodySmallMedium: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodySmallTall: SizingCompositeSemanticToken { get } + + var sizeIconWithTypeBodyMediumShort: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodyMediumMedium: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodyMediumTall: SizingCompositeSemanticToken { get } + + var sizeIconWithTypeBodyLargeShort: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodyLargeMedium: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodyLargeTall: SizingCompositeSemanticToken { get } + + var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { get } + var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { get } + var sizeIconWithTypeLabelSmallTall: SizingSemanticToken { get } + + var sizeIconWithTypeLabelMediumShort: SizingSemanticToken { get } + var sizeIconWithTypeLabelMediumMedium: SizingSemanticToken { get } + var sizeIconWithTypeLabelMediumTall: SizingSemanticToken { get } + + var sizeIconWithTypeLabelLargeShorter: SizingSemanticToken { get } + var sizeIconWithTypeLabelLargeShort: SizingSemanticToken { get } + var sizeIconWithTypeLabelLargeMedium: SizingSemanticToken { get } + var sizeIconWithTypeLabelLargeTall: SizingSemanticToken { get } + var sizeIconWithTypeLabelLargeTaller: SizingSemanticToken { get } + + var sizeIconWithTypeLabelXLargeShort: SizingSemanticToken { get } + var sizeIconWithTypeLabelXLargeMedium: SizingSemanticToken { get } + var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { get } // TODO: #122: Unit test to add + + // MARK: - Semantic token - Sizing - Max width typography + + var sizeMaxWidthTypeDisplaySmall: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeDisplayMedium: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeDisplayLarge: SizingCompositeSemanticToken { get } + + var sizeMaxWidthTypeHeadingSmall: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeHeadingMedium: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeHeadingLarge: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeHeadingXLarge: SizingCompositeSemanticToken { get } + + var sizeMaxWidthTypeBodySmall: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeBodyMedium: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeBodyLarge: SizingCompositeSemanticToken { get } } diff --git a/Showcase/Showcase/OrangeCustomTheme.swift b/Showcase/Showcase/OrangeCustomTheme.swift index 1e267896b..6af008924 100644 --- a/Showcase/Showcase/OrangeCustomTheme.swift +++ b/Showcase/Showcase/OrangeCustomTheme.swift @@ -64,8 +64,8 @@ extension OrangeCustomTheme { // For ButtonsComponentTokens override var buttonBackgroundColorLight: ColorSemanticToken { sysColorBrandPositiveLowest! } override var buttonBackgroundColorDark: ColorSemanticToken { sysColorBrandPositiveHighest! } - override var buttonWidth: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension2000 } - override var buttonHeight: SizingWidthHeightSemanticToken { DimensionRawTokens.dimension800 } + override var buttonWidth: SizingSemanticToken { DimensionRawTokens.dimension2000 } + override var buttonHeight: SizingSemanticToken { DimensionRawTokens.dimension800 } override var buttonTypography: TypographyCompositeSemanticToken { typeDisplaySmall } } From efba7fef1f27d17cca4a890900c3de12e492a1a8 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Mon, 23 Sep 2024 16:47:35 +0200 Subject: [PATCH 07/25] chore: add issue template for tokens updates request Signed-off-by: Pierre-Yves Lapersonne --- .github/ISSUE_TEMPLATE/token_update.yml | 49 +++++++++++++++++++++++++ CHANGELOG.md | 1 + 2 files changed, 50 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/token_update.yml diff --git a/.github/ISSUE_TEMPLATE/token_update.yml b/.github/ISSUE_TEMPLATE/token_update.yml new file mode 100644 index 000000000..965787a98 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/token_update.yml @@ -0,0 +1,49 @@ +name: Token Update Request +description: Please fill out the following details for your token update request. +title: "[Token Update] - Title" +labels: ["๐Ÿ“€ token", "๐Ÿ” triage"] +assignees: ["ludovic35", "pylapp"] +body: + - type: markdown + attributes: + value: | + ### Type of tokens + Please fill the checkboxes of the token type you want to update: + - [ ] Raw token (i.e. associated to _SwiftUI_ or _Swift_ value) + - [ ] Semantic token (i.e. pointing to a raw token) + - [ ] Component token (i.e. pointing to a semantic token, used for a component) + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: Describe your need in details + validations: + required: true + - type: textarea + id: motivation_context + attributes: + label: Motivation & Context + description: Why is this change required? What problem does it solve? + validations: + required: true + - type: markdown + attributes: + value: | + ### Types of change + Please fill the suitable items in the list: + - [ ] Add new tokens + - [ ] Update existing tokens (i.e. change name or value) + - [ ] Remove existing token + validations: + required: true + - type: markdown + attributes: + value: | + ### Checklist for Core Team + - [ ] Tokens have been updated + - [ ] Documentation have been updated + - [ ] Unit tests have been updated + - [ ] Retrocompatibility has been checked, or broken API have been flagged as deprecated without a workaround + diff --git a/CHANGELOG.md b/CHANGELOG.md index 42312806f..bccc6d3ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [Tool] GitHub issue template for tokens update request - [Library] Add letter spacing and more font family tokens for typography ([#51](https://github.com/Orange-OpenSource/ouds-ios/issues/51)) - [Library] Add `elevationX200` raw token ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) From 11989f0161a94d0adae8f76530718f699acf100c Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Mon, 23 Sep 2024 17:03:50 +0200 Subject: [PATCH 08/25] doc: add more details about what should be merge commit in `main` Signed-off-by: Pierre-Yves Lapersonne --- docs_release/README.md | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/docs_release/README.md b/docs_release/README.md index c0a46961c..712a04878 100644 --- a/docs_release/README.md +++ b/docs_release/README.md @@ -66,7 +66,38 @@ This file lists all the steps to follow when releasing a new version of OUDS iOS - Create a new pull request named `Release X.Y.Z` on GitHub to merge `develop` into `main`. -- Review and merge this pull request on GitHub. The merge strategy must be a **simple merge without squash of commits** (this strategy is only dedicated to feature branches to merge in develop branch). +- Review and merge this pull request on GitHub. The merge strategy must be a **simple merge without squash of commits** (this strategy is only dedicated to feature branches to merge in develop branch). The _merge commit_ can be defined so as to bring details about the merge and make links automatically with GitHub issues. To do that, you can copy/paste the content of the changelog (after the version line) and uncomment (i.e. remove # symbols) lines. Thus if in the commit message body any issue is referenced, it will appear in the associated issue. Do not forget also to add people as co-authors if needed. + +Below is an example of what should be a merge commit in `main` branch for a release (ignore of course // lines, see [this commit for example](https://github.com/Orange-OpenSource/ouds-ios/commit/98640b4b63037c2780128f41ceba5b896763b94f)): + +```text +Version 0.2.0 (#113) // <--- Commit title, #113 is PR nummber + +// Bellow is commit body, keep an empty line +Released of version 0.2.0 +See below the full CHANGELOG details. + +// Keep also an empty line above +// And copy/paste changelog without # +Added: +- [Tests] Add UI regression tests using snapshot comparisons with *swift-snapshot-testing* tool ([#78](#78)) +- [DemoApp] Display fake components for elevation rendering tests + +Changed: +- [Library] Split raws, semantics and components tokens definitions and also values, composites and type aliases +- [Showcase] Improve Fastlane alpha build notifications + +Removed: +- [Library] Remove Z Index tokens for elevations ([#109](#109)) + +Fixed: +- [Library] Fix some typos in documentation ([#89](#89)) + +// Add in co authors anyone working on the commits being merged +Co-authored-by: Ludovic Pinel +Co-authored-by: Pierre-Yves Lapersonne +Co-authored-by: Julien Dรฉramond +``` - Generate documentation from Swift sources, it will update online version and generate a ZIP file in _/tmp_ ```shell From 1e40b3a83f0f3b046ddcd23edc88ddcc30e7625d Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Mon, 23 Sep 2024 17:15:24 +0200 Subject: [PATCH 09/25] docs: add more details in DEVELOP about commit messages Signed-off-by: Pierre-Yves Lapersonne --- .github/DEVELOP.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/DEVELOP.md b/.github/DEVELOP.md index 9f3341c74..00914793d 100644 --- a/.github/DEVELOP.md +++ b/.github/DEVELOP.md @@ -147,10 +147,27 @@ A [GitHub Action bot](https://probot.github.io/apps/dco/) has been plugged in th ### About commits Try as best as possible to apply [conventional commits rules](https://www.conventionalcommits.org/en/v1.0.0/). -Keep in mind to have your commits well prefixed, and with the issue number between parenthesis at the end. +Keep in mind to have your commits well prefixed, and with the issue number between parenthesis at the end, and also if needed the pull request issue number. If your commits embed contributions for other people, do not forget to [add them as co-authors](https://docs.github.com/fr/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors). All of you should also comply to DCO. +You commit message should be prefixed by keywords [you can find in the specification](https://www.conventionalcommits.org/en/v1.0.0/#specification): +- fix: +- feat: +- build: +- chore: +- ci: +- docs: +- style: +- refactor: +- perf: +- test: + +You can add also ! aftter the keyword to say a breaking change occur, and also add a scope between parenthesis like: +- feat!: breaking change because.. +- feat(API)!: breaking change in the API because.. +- feat: add something in the API... + For example, given a commit to fix the issue nยฐ42, the commit should be like: ```text From d68e8e2c9fdf7c955fbe88b6b2b6248f8d949c7f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Wed, 25 Sep 2024 11:08:10 +0200 Subject: [PATCH 10/25] refactor: remove `elevationX200`, remove factor base in raw tokens, light and dark mode scolors management Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 11 +- .../Sources/Buttons/OUDSButton.swift | 7 +- .../Forms/TextInput/OUDSFormsTextInput.swift | 12 +- .../ViewModifiers/BorderStyleModifier.swift | 15 +- .../OUDSTheme+ButtonsComponentTokens.swift | 11 +- ...DSTheme+FormsTextInputComponentToken.swift | 16 +- .../OUDSTheme+ColorSemanticTokens.swift | 171 +++---- .../OUDSTheme+DimensionSemanticTokens.swift | 27 +- .../OUDSTheme+ElevationSemanticTokens.swift | 8 +- .../OUDSTheme+SizingSemanticTokens.swift | 34 +- .../OUDSTheme+SpacingSemanticTokens.swift | 178 +++---- .../MockTheme+ColorSemanticTokens.swift | 173 +++---- .../MockTheme+DimensionSemanticTokens.swift | 26 +- .../MockTheme+SpacingSemanticTokens.swift | 168 +++---- ...stThemeOverrideOfColorSemanticTokens.swift | 454 ++++++++--------- ...emeOverrideOfDimensionSemanticTokens.swift | 133 ++++- ...ThemeOverrideOfSpacingSemanticTokens.swift | 470 +++++++++--------- .../InverseTheme+ColorSemanticTokens.swift | 162 ++---- .../Tests/TestInverseThemeColors.swift | 131 +++-- .../Values/ButtonsComponentTokens.swift | 9 +- .../FormsTextInputComponentTokens.swift | 3 +- .../Values/BorderRawTokens+Values.swift | 41 +- .../Values/DimenRawTokens+Values.swift | 55 -- .../Values/DimensionRawTokens+Values.swift | 53 ++ .../Values/ElevationRawTokens+Values.swift | 1 - .../Sources/Values/GridRawTokens+Values.swift | 38 +- .../Tests/BorderRawTokensTests.swift | 6 +- .../Tests/DimensionRawTokensTests.swift | 6 +- .../Tests/ElevationRawTokensTests.swift | 6 - .../RawTokens/Tests/GridRawTokensTests.swift | 6 +- .../ColorSemanticTokens+Composites.swift | 73 +++ .../SpacingSemanticTokens+Composites.swift | 2 +- .../ColorSemanticTokens+Aliases.swift | 4 +- .../Sources/Values/ColorSemanticTokens.swift | 167 +++---- .../Values/DimensionSemanticTokens.swift | 29 +- .../Values/SpacingSemanticTokens.swift | 168 +++---- .../ColorCompositeSemanticTokenTests.swift | 63 +++ .../SizingCompositeSemanticTokenTests.swift | 47 ++ .../SpacingCompositeSemanticTokenTests.swift | 48 ++ ...ypographyCompositeSemanticTokenTests.swift | 48 ++ OUDS/OUDS Library TestPlan.xctestplan | 7 + Package.swift | 4 + Showcase/Showcase/OrangeCustomTheme.swift | 26 +- ...sTextInput_InverseTheme-InverseTheme.1.png | Bin 93664 -> 93412 bytes ...sTextInput_InverseTheme-InverseTheme.2.png | Bin 86520 -> 86865 bytes ...rmsTextInput_OrangeTheme-OrangeTheme.1.png | Bin 93335 -> 92942 bytes ...rmsTextInput_OrangeTheme-OrangeTheme.2.png | Bin 86671 -> 84860 bytes ...DSFormsTextInput_SoshTheme-SoshTheme.1.png | Bin 92010 -> 92942 bytes ...DSFormsTextInput_SoshTheme-SoshTheme.2.png | Bin 86377 -> 84860 bytes 49 files changed, 1714 insertions(+), 1403 deletions(-) delete mode 100644 OUDS/Core/Tokens/RawTokens/Sources/Values/DimenRawTokens+Values.swift create mode 100644 OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift create mode 100644 OUDS/Core/Tokens/SemanticTokens/Sources/Composites/ColorSemanticTokens+Composites.swift create mode 100644 OUDS/Core/Tokens/SemanticTokens/Tests/Composites/ColorCompositeSemanticTokenTests.swift create mode 100644 OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SizingCompositeSemanticTokenTests.swift create mode 100644 OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SpacingCompositeSemanticTokenTests.swift create mode 100644 OUDS/Core/Tokens/SemanticTokens/Tests/Composites/TypographyCompositeSemanticTokenTests.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index bccc6d3ab..a3f1419e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,18 +8,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [Library] Unit tests for composite tokens +- [Library] Add color semantic composite tokens embeding light and dark modes values +- [Library] Add spacing semantic tokens huge and jumbo +- [Library] Add closed "sys" dimension semantic tokens - [Tool] GitHub issue template for tokens update request +- [Library] Add more sizing semantic tokens ([#122](https://github.com/Orange-OpenSource/ouds-ios/issues/122)) - [Library] Add letter spacing and more font family tokens for typography ([#51](https://github.com/Orange-OpenSource/ouds-ios/issues/51)) -- [Library] Add `elevationX200` raw token ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) ### Changed +- [Library] Update color semantic tokens to better manage light and dark modes values +- [Library] Update elevation colors focus light and dark +- [Library] Rename space padding inline component tokens by removing "component" word - [Library] Rename some sizing semantic tokens ([#122](https://github.com/Orange-OpenSource/ouds-ios/issues/122)) - [Library] Replace "adaptable" word by "scaled" in space semantic tokens, "fix" by "fixed" and remove "layout" ([#117](https://github.com/Orange-OpenSource/ouds-ios/issues/117)) ### Removed -- [Library] Add more sizing semantic tokens ([#122](https://github.com/Orange-OpenSource/ouds-ios/issues/122)) +- [Library] Remove some base multiplier factor from raw tokens - [Library] Remove raw tokens `elevationZIndex` ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) ## [0.2.0](https://github.com/Orange-OpenSource/ouds-ios/compare/0.1.0...0.2.0) - 2024-09-19 diff --git a/OUDS/Core/Components/Sources/Buttons/OUDSButton.swift b/OUDS/Core/Components/Sources/Buttons/OUDSButton.swift index 3776286de..edc0864f7 100644 --- a/OUDS/Core/Components/Sources/Buttons/OUDSButton.swift +++ b/OUDS/Core/Components/Sources/Buttons/OUDSButton.swift @@ -61,13 +61,12 @@ public struct OUDSButton: View { .systemFont(typography: theme.buttonTypography) .padding(theme.buttonInternalSpacing) .foregroundColor(colorScheme == .light - ? theme.buttonForegroundColorLight.color - : theme.buttonForegroundColorDark.color) + ? theme.buttonForegroundColor.light.color + : theme.buttonForegroundColor.dark.color) .modifier(BorderStyleModifier(theme.buttonBorderStyle, theme.buttonBorderWidth, theme.buttonBorderRadius, - theme.buttonBorderColorLight, - theme.buttonBorderColorDark)) + theme.buttonBorderColor)) }.frame(width: theme.buttonWidth, height: theme.buttonHeight) } } diff --git a/OUDS/Core/Components/Sources/Forms/TextInput/OUDSFormsTextInput.swift b/OUDS/Core/Components/Sources/Forms/TextInput/OUDSFormsTextInput.swift index 0a9d6f14e..88cebbee8 100644 --- a/OUDS/Core/Components/Sources/Forms/TextInput/OUDSFormsTextInput.swift +++ b/OUDS/Core/Components/Sources/Forms/TextInput/OUDSFormsTextInput.swift @@ -54,14 +54,14 @@ public struct OUDSFormsTextInput: View { // MARK: - Body public var body: some View { - VStack(spacing: theme.spacePaddingBlockComponentTall) { + VStack(spacing: theme.spacePaddingBlockTall) { Label( title: { Text(label) .fontWeight(theme.ftiTitleFontWeight.fontWeight) .font(.system(size: theme.ftiTitleFontSize)) - .foregroundColor(theme.ftiTitleColor.color) + .foregroundColor(theme.ftiTitleColor.light.color) }, icon: { /*@START_MENU_TOKEN@*/Image(systemName: "42.circle")/*@END_MENU_TOKEN@*/ } ) @@ -69,12 +69,12 @@ public struct OUDSFormsTextInput: View { Text(hint) .fontWeight(theme.ftiSubtitleFontWeight.fontWeight) .font(.system(size: theme.ftiSubtitleFontSize)) - .foregroundColor(theme.ftiSubtitleColor.color) + .foregroundColor(theme.ftiSubtitleColor.light.color) TextField(placeholder, text: $value) } - .padding(theme.spacePaddingBlockComponentTall) - .background(colorScheme == .light ? theme.ftiBackgroundColorLight.color : theme.ftiBackgroundColorDark.color) - .border(theme.ftiBorderColor.color, width: theme.ftiBorderWidth) + .padding(theme.spacePaddingBlockTall) + .background(colorScheme == .light ? theme.ftiBackgroundColor.light.color : theme.ftiBackgroundColor.dark.color) + .border(theme.ftiBorderColor.light.color, width: theme.ftiBorderWidth) } } diff --git a/OUDS/Core/Components/Sources/ViewModifiers/BorderStyleModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/BorderStyleModifier.swift index 23099fd58..73d46d25a 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/BorderStyleModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/BorderStyleModifier.swift @@ -30,15 +30,12 @@ struct BorderStyleModifier: ViewModifier { /// The radius of the border to apply private let radius: BorderRadiusSemanticToken - /// The color in light scheme of the border - private let colorLight: ColorSemanticToken - - /// The color in dark scheme of the border - private let colorDark: ColorSemanticToken + /// The colors of the border + private let color: ColorSemanticToken /// Color to apply depending to the `colorScheme` private var colorToApply: Color { - colorScheme == .light ? colorLight.color : colorDark.color + colorScheme == .light ? color.light.color : color.dark.color } /// To know if the device is in light mode or in dark mode @@ -49,13 +46,11 @@ struct BorderStyleModifier: ViewModifier { init(_ token: BorderStyleSemanticToken, _ width: BorderWidthSemanticToken, _ radius: BorderRadiusSemanticToken, - _ colorLight: ColorSemanticToken, - _ colorDark: ColorSemanticToken) { + _ color: ColorSemanticToken) { self.token = token self.width = width self.radius = radius - self.colorLight = colorLight - self.colorDark = colorDark + self.color = color if token != "solid" && token != "dashed" && token != "dotted" { OUDSLogger.error("Unmanaged token: '\(token)'!") } diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift index c032c2931..136b9ec95 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift @@ -20,18 +20,15 @@ import OUDSTokensSemantic /// **Warning: These are random and dumb values** extension OUDSTheme: ButtonsComponentTokens { - @objc open var buttonInternalSpacing: SpacingPaddingInlineSemanticToken { spacePaddingInlineComponentShort } + @objc open var buttonInternalSpacing: SpacingPaddingInlineSemanticToken { spacePaddingInlineShort } @objc open var buttonBorderStyle: BorderStyleSemanticToken { borderStyleDefault } - @objc open var buttonBorderColorLight: ColorSemanticToken { colorBorderDefaultLight! } - @objc open var buttonBorderColorDark: ColorSemanticToken { colorBorderDefaultDark! } + @objc open var buttonBorderColor: ColorSemanticToken { colorBorderDefault! } @objc open var buttonBorderWidth: BorderWidthSemanticToken { borderWidthDefault } @objc open var buttonBorderRadius: BorderRadiusSemanticToken { borderRadiusShort } - @objc open var buttonForegroundColorLight: ColorSemanticToken { colorContentBrandPrimaryLight! } - @objc open var buttonForegroundColorDark: ColorSemanticToken { colorContentBrandPrimaryDark! } - @objc open var buttonBackgroundColorLight: ColorSemanticToken { colorBackgroundBrandPrimaryLight! } - @objc open var buttonBackgroundColorDark: ColorSemanticToken { colorBackgroundBrandPrimaryDark! } + @objc open var buttonForegroundColor: ColorSemanticToken { colorContentBrandPrimary! } + @objc open var buttonBackgroundColor: ColorSemanticToken { colorBackgroundBrandPrimary! } @objc open var buttonWidth: SizingSemanticToken { DimensionRawTokens.dimension3000 } @objc open var buttonHeight: SizingSemanticToken { DimensionRawTokens.dimension1000 } diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift index a6a674050..ecf93b877 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift @@ -16,29 +16,29 @@ import OUDSTokensRaw import OUDSTokensSemantic import OUDSTokensComponent +// swiftlint:disable line_length + /// Defines for `FormsTextInputComponentTokens` the basic configuration which can be overriden in subthemes / subclasses of this theme. /// **Warning: These are random and dumb values** extension OUDSTheme: FormsTextInputComponentTokens { // NOTE: What should we done if missing value? E.g. missing color or alias with empty values in the end - private static let defaultBlack: ColorSemanticToken = ColorRawTokens.colorFunctionalBlack - private static let defaultWhite: ColorSemanticToken = ColorRawTokens.colorFunctionalWhite - @objc open var ftiTitleFontWeight: TypographyFontWeightSemanticToken { fontWeightHeading } @objc open var ftiTitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelLarge } - @objc open var ftiTitleColor: ColorSemanticToken { colorContentBrandPrimaryLight ?? Self.defaultBlack } + @objc open var ftiTitleColor: ColorSemanticToken { ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalLightGray80, dark: ColorRawTokens.colorFunctionalDarkGray640) } @objc open var ftiSubtitleFontWeight: TypographyFontWeightSemanticToken { fontWeightDisplay } @objc open var ftiSubtitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelMedium } - @objc open var ftiSubtitleColor: ColorSemanticToken { colorContentDefaultLight ?? Self.defaultBlack } + @objc open var ftiSubtitleColor: ColorSemanticToken { colorContentDefault! } - @objc open var ftiBackgroundColorLight: ColorSemanticToken { colorBackgroundDefaultPrimaryLight ?? Self.defaultWhite } - @objc open var ftiBackgroundColorDark: ColorSemanticToken { colorBackgroundDefaultPrimaryDark ?? Self.defaultBlack } + @objc open var ftiBackgroundColor: ColorSemanticToken { colorBackgroundDefaultPrimary! } - @objc open var ftiBorderColor: ColorSemanticToken { colorBorderEmphasizedLight ?? Self.defaultBlack } + @objc open var ftiBorderColor: ColorSemanticToken { colorBorderEmphasized! } @objc open var ftiBorderStyle: BorderStyleSemanticToken { borderStyleDefault } @objc open var ftiBorderWidth: BorderWidthSemanticToken { borderWidthThin } } + +// swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift index a7505afc3..867727046 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift @@ -16,6 +16,7 @@ import OUDSFoundations import OUDSTokensRaw import OUDSTokensSemantic +// swiftlint:disable line_length /// Defines basic values common to all themes for `ColorSemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: ColorSemanticTokens { @@ -124,33 +125,27 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - Background - Default - Primary - @objc open var colorBackgroundDefaultPrimaryLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - @objc open var colorBackgroundDefaultPrimaryDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHighest } + @objc open var colorBackgroundDefaultPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedHighest) } // MARK: Semantic token - Colors - Background - Default - Secondary - @objc open var colorBackgroundDefaultSecondaryLight: ColorSemanticToken? { sysColorBrandNeutralMutedLowest } - @objc open var colorBackgroundDefaultSecondaryDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHigher } + @objc open var colorBackgroundDefaultSecondary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedLowest, dark: sysColorBrandNeutralEmphasizedHigher) } // MARK: Semantic token - Colors - Background - Default - Tertiary - @objc open var colorBackgroundDefaultTertiaryLight: ColorSemanticToken? { sysColorBrandAttractiveLowest } - @objc open var colorBackgroundDefaultTertiaryDark: ColorSemanticToken? { sysColorBrandAttractiveHighest } + @objc open var colorBackgroundDefaultTertiary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } // MARK: Semantic token - Colors - Background - Emphasized - Primary - @objc open var colorBackgroundEmphasizedPrimaryLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorBackgroundEmphasizedPrimaryDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedMedium } + @objc open var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralEmphasizedMedium) } // MARK: Semantic token - Colors - Background - Emphasized - Secondary - @objc open var colorBackgroundEmphasizedSecondaryLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedMedium } - @objc open var colorBackgroundEmphasizedSecondaryDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHigh } + @objc open var colorBackgroundEmphasizedSecondary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedMedium, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Brand - Primary - @objc open var colorBackgroundBrandPrimaryLight: ColorSemanticToken? { sysColorBrandPrimaryDefault } - @objc open var colorBackgroundBrandPrimaryDark: ColorSemanticToken? { sysColorBrandPrimaryLow } + @objc open var colorBackgroundBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Background - Brand - Secondary @@ -162,244 +157,194 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - Background - Status - Attractive - Muted - @objc open var colorBackgroundStatusAttractiveMutedLight: ColorSemanticToken? { sysColorBrandAttractiveLowest } - @objc open var colorBackgroundStatusAttractiveMutedDark: ColorSemanticToken? { sysColorBrandAttractiveHighest } + @objc open var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized - @objc open var colorBackgroundStatusAttractiveEmphasizedLight: ColorSemanticToken? { sysColorBrandWarningDefault } - @objc open var colorBackgroundStatusAttractiveEmphasizedDark: ColorSemanticToken? { sysColorBrandWarningHighest } + @objc open var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningHighest) } // MARK: Semantic token - Colors - Background - Status - Warning - Muted - @objc open var colorBackgroundStatusWarningMutedLight: ColorSemanticToken? { sysColorBrandWarningLowest } - @objc open var colorBackgroundStatusWarningMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHigh } + @objc open var colorBackgroundStatusWarningMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandWarningLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized - @objc open var colorBackgroundStatusWarningEmphasizedLight: ColorSemanticToken? { sysColorBrandWarningDefault } - @objc open var colorBackgroundStatusWarningEmphasizedDark: ColorSemanticToken? { sysColorBrandWarningHighest } + @objc open var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningHighest) } // MARK: Semantic token - Colors - Background - Status - Negative - Muted - @objc open var colorBackgroundStatusNegativeMutedLight: ColorSemanticToken? { sysColorBrandNegativeLowest } - @objc open var colorBackgroundStatusNegativeMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHigh } + @objc open var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNegativeLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized - @objc open var colorBackgroundStatusNegativeEmphasizedLight: ColorSemanticToken? { sysColorBrandNegativeDefault } - @objc open var colorBackgroundStatusNegativeEmphasizedDark: ColorSemanticToken? { sysColorBrandNegativeHighest } + @objc open var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeHighest) } // MARK: Semantic token - Colors - Background - Status - Positive - Muted - @objc open var colorBackgroundStatusPositiveMutedLight: ColorSemanticToken? { sysColorBrandPositiveLowest } - @objc open var colorBackgroundStatusPositiveMutedInverse: ColorSemanticToken? { sysColorBrandPositiveLowest } - @objc open var colorBackgroundStatusPositiveMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHigh } + @objc open var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPositiveLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized - @objc open var colorBackgroundStatusPositiveEmphasizedLight: ColorSemanticToken? { sysColorBrandPositiveDefault } - @objc open var colorBackgroundStatusPositiveEmphasizedDark: ColorSemanticToken? { sysColorBrandPositiveHighest } + @objc open var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveHighest) } // MARK: Semantic token - Colors - Background - Status - Information - Muted - @objc open var colorBackgroundStatusInformationMutedLight: ColorSemanticToken? { sysColorBrandInformationLowest } - @objc open var colorBackgroundStatusInformationMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHigh } + @objc open var colorBackgroundStatusInformationMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandInformationLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Status - Information - Emphasized - @objc open var colorBackgroundStatusInformationEmphasizedLight: ColorSemanticToken? { sysColorBrandInformationDefault } - @objc open var colorBackgroundStatusInformationEmphasizedDark: ColorSemanticToken? { sysColorBrandInformationHighest } + @objc open var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationHighest) } // MARK: Semantic token - Colors - Content - Default - @objc open var colorContentDefaultLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorContentDefaultDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorContentDefault: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - Content - Default - On background emphasized - @objc open var colorContentDefaultOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - @objc open var colorContentDefaultOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - Content - Muted - @objc open var colorContentMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedLowest } - @objc open var colorContentMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHigh } + @objc open var colorContentMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Content - Muted - On background emphasized - @objc open var colorContentMutedOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralMutedMedium } - @objc open var colorContentMutedOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedHigh } + @objc open var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralMutedHigh) } // MARK: Semantic token - Colors - Content - Brand - Primary - @objc open var colorContentBrandPrimaryLight: ColorSemanticToken? { sysColorBrandPrimaryDefault } - @objc open var colorContentBrandPrimaryDark: ColorSemanticToken? { sysColorBrandPrimaryLow } + @objc open var colorContentBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized - @objc open var colorContentBrandPrimaryOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandPrimaryLow } - @objc open var colorContentBrandPrimaryOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandPrimaryLow } + @objc open var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Content - Brand - Secondary - @objc open var colorContentBrandSecondaryLight: ColorSemanticToken? { nil } - @objc open var colorContentBrandSecondaryDark: ColorSemanticToken? { nil } + @objc open var colorContentBrandSecondary: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Content - Brand - Tertiary - @objc open var colorContentBrandTertiaryLight: ColorSemanticToken? { nil } - @objc open var colorContentBrandTertiaryDark: ColorSemanticToken? { nil } + @objc open var colorContentBrandTertiary: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Content - Status - Attractive - @objc open var colorContentStatusAttractiveLight: ColorSemanticToken? { nil } - @objc open var colorContentStatusAttractiveDark: ColorSemanticToken? { nil } + @objc open var colorContentStatusAttractive: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Content - Status - Negative - @objc open var colorContentStatusNegativeLight: ColorSemanticToken? { sysColorBrandNegativeDefault } - @objc open var colorContentStatusNegativeDark: ColorSemanticToken? { sysColorBrandNegativeDefault } + @objc open var colorContentStatusNegative: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeDefault) } // MARK: Semantic token - Colors - Content - Status - Positive - @objc open var colorContentStatusPositiveLight: ColorSemanticToken? { sysColorBrandPositiveDefault } - @objc open var colorContentStatusPositiveInverse: ColorSemanticToken? { sysColorBrandPositiveDefault } - @objc open var colorContentStatusPositiveDark: ColorSemanticToken? { sysColorBrandPositiveDefault } + @objc open var colorContentStatusPositive: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveDefault) } // MARK: Semantic token - Colors - Content - Status - Information - @objc open var colorContentStatusInformationLight: ColorSemanticToken? { sysColorBrandInformationDefault } - @objc open var colorContentStatusInformationDark: ColorSemanticToken? { sysColorBrandInformationDefault } + @objc open var colorContentStatusInformation: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationDefault) } // MARK: Semantic token - Colors - Border - Default - @objc open var colorBorderDefaultLight: ColorSemanticToken? { sysColorBrandNeutralMutedMedium } - @objc open var colorBorderDefaultDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedLowest } + @objc open var colorBorderDefault: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralEmphasizedLowest) } // MARK: Semantic token - Colors - Border - Default - On background emphasized - @objc open var colorBorderDefaultOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedLowest } - @objc open var colorBorderDefaultOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedLowest } + @objc open var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedLowest) } // MARK: Semantic token - Colors - Border - Emphasized - @objc open var colorBorderEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorBorderEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorBorderEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized - @objc open var colorBorderEmphasizedOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - @objc open var colorBorderEmphasizedOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - Border - Brand - Primary - @objc open var colorBorderBrandPrimaryLight: ColorSemanticToken? { sysColorBrandPrimaryDefault } - @objc open var colorBorderBrandPrimaryDark: ColorSemanticToken? { sysColorBrandPrimaryLow } + @objc open var colorBorderBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized - @objc open var colorBorderBrandPrimaryOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandPrimaryLow } - @objc open var colorBorderBrandPrimaryOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandPrimaryLow } + @objc open var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Border - Brand - Secondary - @objc open var colorBorderBrandSecondaryLight: ColorSemanticToken? { nil } - @objc open var colorBorderBrandSecondaryDark: ColorSemanticToken? { nil } + @objc open var colorBorderBrandSecondary: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Border - Brand - Tertiary - @objc open var colorBorderBrandTertiaryLight: ColorSemanticToken? { nil } - @objc open var colorBorderBrandTertiaryDark: ColorSemanticToken? { nil } + @objc open var colorBorderBrandTertiary: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Border - Status - Attractive - @objc open var colorBorderBrandStatusAttractiveLight: ColorSemanticToken? { nil } - @objc open var colorBorderBrandStatusAttractiveDark: ColorSemanticToken? { nil } + @objc open var colorBorderBrandStatusAttractive: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Border - Status - Warning - @objc open var colorBorderBrandStatusWarningLight: ColorSemanticToken? { nil } - @objc open var colorBorderBrandStatusWarningDark: ColorSemanticToken? { nil } + @objc open var colorBorderBrandStatusWarning: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Border - Status - Negative - @objc open var colorBorderBrandStatusNegativeLight: ColorSemanticToken? { nil } - @objc open var colorBorderBrandStatusNegativeDark: ColorSemanticToken? { nil } + @objc open var colorBorderBrandStatusNegative: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Border - Status - Positive - @objc open var colorBorderBrandStatusPositiveLight: ColorSemanticToken? { nil } - @objc open var colorBorderBrandStatusPositiveDark: ColorSemanticToken? { nil } + @objc open var colorBorderBrandStatusPositive: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - Border - Status - Information - @objc open var colorBorderBrandStatusInformationLight: ColorSemanticToken? { nil } - @objc open var colorBorderBrandStatusInformationDark: ColorSemanticToken? { nil } + @objc open var colorBorderBrandStatusInformation: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - On background - Primary - @objc open var colorOnBackgroundPrimaryLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - @objc open var colorOnBackgroundPrimaryDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedHighest } + @objc open var colorOnBackgroundPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedHighest) } // MARK: Semantic token - Colors - On background - Secondary - @objc open var colorOnBackgroundSecondaryLight: ColorSemanticToken? { nil } - @objc open var colorOnBackgroundSecondaryDark: ColorSemanticToken? { nil } + @objc open var colorOnBackgroundSecondary: ColorSemanticToken? { nil } // MARK: Semantic token - Colors - On background - Tertiary - @objc open var colorOnBackgroundTertiaryLight: ColorSemanticToken? { nil } - @objc open var colorOnBackgroundTertiaryDark: ColorSemanticToken? { nil } + @objc open var colorOnBackgroundTertiary: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - On background - Status - Attrative - Muted + // MARK: Semantic token - Colors - On background - Status - Attractive - Muted - @objc open var colorOnBackgroundStatusAttractiveMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusAttractiveMutedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - // MARK: Semantic token - Colors - On background - Status - Attrative - Emphasized + // MARK: Semantic token - Colors - On background - Status - Attractive - Emphasized - @objc open var colorOnBackgroundStatusAttractiveEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusAttractiveEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Warning - Muted - @objc open var colorOnBackgroundStatusWarningMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusWarningMutedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusWarningMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized - @objc open var colorOnBackgroundStatusWarningEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusWarningEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Negative - Muted - @objc open var colorOnBackgroundStatusNegativeMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusNegativeMutedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized - @objc open var colorOnBackgroundStatusNegativeEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - @objc open var colorOnBackgroundStatusNegativeEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Positive - Muted - @objc open var colorOnBackgroundStatusPositiveMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusPositiveMutedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized - @objc open var colorOnBackgroundStatusPositiveEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusPositiveEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Information - Muted - @objc open var colorOnBackgroundStatusInformationMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusInformationMutedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } + @objc open var colorOnBackgroundStatusInformationMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Information - Emphasized - @objc open var colorOnBackgroundStatusInformationEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - @objc open var colorOnBackgroundStatusInformationEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedLower } - + @objc open var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } } +// swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+DimensionSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+DimensionSemanticTokens.swift index 58989ad60..c6548e93b 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+DimensionSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+DimensionSemanticTokens.swift @@ -19,6 +19,29 @@ import OUDSTokensSemantic /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: DimensionSemanticTokens { - @objc open var dimensionDensityDefault: DimensionSemanticToken { DimensionRawTokens.dimensionBase } - + @objc open var dimension0: DimensionSemanticToken { DimensionRawTokens.dimension0 } + @objc open var dimension10: DimensionSemanticToken { DimensionRawTokens.dimension25 } + @objc open var dimension20: DimensionSemanticToken { DimensionRawTokens.dimension50 } + @objc open var dimension30: DimensionSemanticToken { DimensionRawTokens.dimension75 } + @objc open var dimension40: DimensionSemanticToken { DimensionRawTokens.dimension100 } + @objc open var dimension50: DimensionSemanticToken { DimensionRawTokens.dimension150 } + @objc open var dimension60: DimensionSemanticToken { DimensionRawTokens.dimension200 } + @objc open var dimension70: DimensionSemanticToken { DimensionRawTokens.dimension250 } + @objc open var dimension80: DimensionSemanticToken { DimensionRawTokens.dimension300 } + @objc open var dimension90: DimensionSemanticToken { DimensionRawTokens.dimension350 } + @objc open var dimension100: DimensionSemanticToken { DimensionRawTokens.dimension400 } + @objc open var dimension110: DimensionSemanticToken { DimensionRawTokens.dimension450 } + @objc open var dimension120: DimensionSemanticToken { DimensionRawTokens.dimension500 } + @objc open var dimension130: DimensionSemanticToken { DimensionRawTokens.dimension550 } + @objc open var dimension140: DimensionSemanticToken { DimensionRawTokens.dimension600 } + @objc open var dimension150: DimensionSemanticToken { DimensionRawTokens.dimension650 } + @objc open var dimension160: DimensionSemanticToken { DimensionRawTokens.dimension700 } + @objc open var dimension170: DimensionSemanticToken { DimensionRawTokens.dimension750 } + @objc open var dimension180: DimensionSemanticToken { DimensionRawTokens.dimension800 } + @objc open var dimension190: DimensionSemanticToken { DimensionRawTokens.dimension900 } + @objc open var dimension200: DimensionSemanticToken { DimensionRawTokens.dimension1000 } + @objc open var dimension210: DimensionSemanticToken { DimensionRawTokens.dimension1200 } + @objc open var dimension220: DimensionSemanticToken { DimensionRawTokens.dimension1400 } + @objc open var dimension230: DimensionSemanticToken { DimensionRawTokens.dimension1600 } + @objc open var dimension240: DimensionSemanticToken { DimensionRawTokens.dimension1800 } } diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift index a779ced96..ca06e61ad 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift @@ -99,8 +99,8 @@ extension OUDSTheme: ElevationSemanticTokens { // MARK: Semantic token - Elevation - Color - Focus - @objc open var elevationColorFocusLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentWhite900 } - @objc open var elevationColorFocusDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentWhite900 } + @objc open var elevationColorFocusLight: ElevationColorSemanticToken { ColorRawTokens.colorFunctionalBlack } + @objc open var elevationColorFocusDark: ElevationColorSemanticToken { ColorRawTokens.colorFunctionalLightGray160 } // MARK: Semantic token - Elevation - Box shadow @@ -125,6 +125,6 @@ extension OUDSTheme: ElevationSemanticTokens { @objc open var elevationStickyNavigationScrolledLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } @objc open var elevationStickyNavigationScrolledDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } - @objc open var elevationFocusLight: ElevationCompositeSemanticToken { ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorTransparentWhite900) } - @objc open var elevationFocusDark: ElevationCompositeSemanticToken { ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorTransparentWhite900) } + @objc open var elevationFocusLight: ElevationCompositeSemanticToken { ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorFunctionalBlack) } + @objc open var elevationFocusDark: ElevationCompositeSemanticToken { ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorFunctionalLightGray160) } } diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift index 513c8fc47..a0270036d 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift @@ -60,23 +60,23 @@ extension OUDSTheme: SizingSemanticTokens { @objc open var sizeIconWithTypeBodyLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } @objc open var sizeIconWithTypeBodyLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension350, regular: DimensionRawTokens.dimension350 ) } - @objc open var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { DimensionRawTokens.dimension150 } // sys-dimension-50 - @objc open var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { DimensionRawTokens.dimension200 } // sys-dimension-60 - @objc open var sizeIconWithTypeLabelSmallTall: SizingSemanticToken { DimensionRawTokens.dimension250 } // sys-dimension-70 - - @objc open var sizeIconWithTypeLabelMediumShort: SizingSemanticToken { DimensionRawTokens.dimension200 } // sys-dimension-60 - @objc open var sizeIconWithTypeLabelMediumMedium: SizingSemanticToken { DimensionRawTokens.dimension250 } // sys-dimension-70 - @objc open var sizeIconWithTypeLabelMediumTall: SizingSemanticToken { DimensionRawTokens.dimension300 } // sys-dimension-80 - - @objc open var sizeIconWithTypeLabelLargeShorter: SizingSemanticToken { DimensionRawTokens.dimension250 } // sys-dimension-70 - @objc open var sizeIconWithTypeLabelLargeShort: SizingSemanticToken { DimensionRawTokens.dimension300 } // sys-dimension-80 - @objc open var sizeIconWithTypeLabelLargeMedium: SizingSemanticToken { DimensionRawTokens.dimension350 } // sys-dimension-90 - @objc open var sizeIconWithTypeLabelLargeTall: SizingSemanticToken { DimensionRawTokens.dimension100 } // sys-dimension-100 - @objc open var sizeIconWithTypeLabelLargeTaller: SizingSemanticToken { DimensionRawTokens.dimension550 } // sys-dimension-130 - - @objc open var sizeIconWithTypeLabelXLargeShort: SizingSemanticToken { DimensionRawTokens.dimension400 } // sys-dimension-100 - @objc open var sizeIconWithTypeLabelXLargeMedium: SizingSemanticToken { DimensionRawTokens.dimension500 } // sys-dimension-120 - @objc open var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { DimensionRawTokens.dimension550 } // sys-dimension-130 + @objc open var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { dimension50 } + @objc open var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { dimension60 } + @objc open var sizeIconWithTypeLabelSmallTall: SizingSemanticToken { dimension70 } + + @objc open var sizeIconWithTypeLabelMediumShort: SizingSemanticToken { dimension60 } + @objc open var sizeIconWithTypeLabelMediumMedium: SizingSemanticToken { dimension70 } + @objc open var sizeIconWithTypeLabelMediumTall: SizingSemanticToken { dimension80 } + + @objc open var sizeIconWithTypeLabelLargeShorter: SizingSemanticToken { dimension70 } + @objc open var sizeIconWithTypeLabelLargeShort: SizingSemanticToken { dimension80 } + @objc open var sizeIconWithTypeLabelLargeMedium: SizingSemanticToken { dimension90 } + @objc open var sizeIconWithTypeLabelLargeTall: SizingSemanticToken { dimension100 } + @objc open var sizeIconWithTypeLabelLargeTaller: SizingSemanticToken { dimension130 } + + @objc open var sizeIconWithTypeLabelXLargeShort: SizingSemanticToken { dimension100 } + @objc open var sizeIconWithTypeLabelXLargeMedium: SizingSemanticToken { dimension120 } + @objc open var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { dimension130 } // MARK: - Semantic token - Sizing - Max width typography diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift index 9a5c9490f..85062b826 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift @@ -20,19 +20,6 @@ import OUDSTokensSemantic /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: SpacingSemanticTokens { - // MARK: Semantic token - Spacing - Layout fix - - @objc open var spaceFixedNone: SpacingSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spaceFixedSmash: SpacingSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spaceFixedShortest: SpacingSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spaceFixedShorter: SpacingSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spaceFixedShort: SpacingSemanticToken { DimensionRawTokens.dimension150 } - @objc open var spaceFixedMedium: SpacingSemanticToken { DimensionRawTokens.dimension200 } - @objc open var spaceFixedTall: SpacingSemanticToken { DimensionRawTokens.dimension300 } - @objc open var spaceFixedTaller: SpacingSemanticToken { DimensionRawTokens.dimension400 } - @objc open var spaceFixedTallest: SpacingSemanticToken { DimensionRawTokens.dimension500 } - @objc open var spaceFixedSpacious: SpacingSemanticToken { DimensionRawTokens.dimension600 } - // MARK: Semantic token - Spacing - Layout fluid @objc open var spaceScaledNone: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension0, regular: DimensionRawTokens.dimension0) } @@ -46,95 +33,110 @@ extension OUDSTheme: SpacingSemanticTokens { @objc open var spaceScaledTallest: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension600) } @objc open var spaceScaledSpacious: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700) } + // MARK: Semantic token - Spacing - Layout fix + + @objc open var spaceFixedNone: SpacingSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spaceFixedSmash: SpacingSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spaceFixedShortest: SpacingSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spaceFixedShorter: SpacingSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spaceFixedShort: SpacingSemanticToken { DimensionRawTokens.dimension150 } + @objc open var spaceFixedMedium: SpacingSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spaceFixedTall: SpacingSemanticToken { DimensionRawTokens.dimension300 } + @objc open var spaceFixedTaller: SpacingSemanticToken { DimensionRawTokens.dimension400 } + @objc open var spaceFixedTallest: SpacingSemanticToken { DimensionRawTokens.dimension500 } + @objc open var spaceFixedSpacious: SpacingSemanticToken { DimensionRawTokens.dimension600 } + @objc open var spaceFixedHuge: SpacingSemanticToken { DimensionRawTokens.dimension700 } + @objc open var spaceFixedJumbo: SpacingSemanticToken { DimensionRawTokens.dimension800 } + // MARK: Semantic token - Spacing - Padding - Padding inline - @objc open var spacePaddingInlineComponentNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spacePaddingInlineComponentShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spacePaddingInlineComponentShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spacePaddingInlineComponentMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } - @objc open var spacePaddingInlineComponentTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension300 } - @objc open var spacePaddingInlineComponentTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension400 } - - @objc open var spacePaddingInlineComponentIsIconNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spacePaddingInlineComponentIsIconShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spacePaddingInlineComponentIsIconShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spacePaddingInlineComponentIsIconMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } - @objc open var spacePaddingInlineComponentIsIconTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spacePaddingInlineComponentIsIconTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } - - @objc open var spacePaddingInlineComponentIsArrowNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spacePaddingInlineComponentIsArrowShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spacePaddingInlineComponentIsArrowShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spacePaddingInlineComponentIsArrowMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } - @objc open var spacePaddingInlineComponentIsArrowTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spacePaddingInlineComponentIsArrowTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spacePaddingInlineNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spacePaddingInlineShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spacePaddingInlineShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spacePaddingInlineMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spacePaddingInlineTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension300 } + @objc open var spacePaddingInlineTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension400 } + + @objc open var spacePaddingInlineIsIconNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spacePaddingInlineIsIconShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spacePaddingInlineIsIconShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spacePaddingInlineIsIconMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } + @objc open var spacePaddingInlineIsIconTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spacePaddingInlineIsIconTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + + @objc open var spacePaddingInlineIsArrowNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spacePaddingInlineIsArrowShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spacePaddingInlineIsArrowShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spacePaddingInlineIsArrowMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } + @objc open var spacePaddingInlineIsArrowTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spacePaddingInlineIsArrowTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } // MARK: Semantic token - Padding - Padding stack - @objc open var spacePaddingBlockComponentNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spacePaddingBlockComponentShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spacePaddingBlockComponentShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spacePaddingBlockComponentMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } - @objc open var spacePaddingBlockComponentTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension300 } - @objc open var spacePaddingBlockComponentTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension400 } + @objc open var spacePaddingBlockNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spacePaddingBlockShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spacePaddingBlockShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spacePaddingBlockMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spacePaddingBlockTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension300 } + @objc open var spacePaddingBlockTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension400 } - @objc open var spacePaddingBlockComponentIsIconNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spacePaddingBlockComponentIsIconShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spacePaddingBlockComponentIsIconShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spacePaddingBlockComponentIsIconMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } - @objc open var spacePaddingBlockComponentIsIconTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spacePaddingBlockComponentIsIconTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spacePaddingBlockIsIconNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spacePaddingBlockIsIconShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spacePaddingBlockIsIconShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spacePaddingBlockIsIconMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } + @objc open var spacePaddingBlockIsIconTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spacePaddingBlockIsIconTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } // MARK: Semantic token - Padding - Padding inset - @objc open var spaceInsetComponentNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spaceInsetComponentSmash: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spaceInsetComponentShortest: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spaceInsetComponentShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } - @objc open var spaceInsetComponentShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spaceInsetComponentMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension150 } - @objc open var spaceInsetComponentTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } - @objc open var spaceInsetComponentTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension300 } - @objc open var spaceInsetComponentTallest: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension400 } - @objc open var spaceInsetComponentSpacious: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension500 } + @objc open var spaceInsetNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spaceInsetSmash: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spaceInsetShortest: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spaceInsetShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } + @objc open var spaceInsetShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spaceInsetMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension150 } + @objc open var spaceInsetTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spaceInsetTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension300 } + @objc open var spaceInsetTallest: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension400 } + @objc open var spaceInsetSpacious: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension500 } // MARK: Semantic token - Padding - Gap inline - @objc open var spaceColumnGapComponentNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spaceColumnGapComponentShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spaceColumnGapComponentShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spaceColumnGapComponentMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } - @objc open var spaceColumnGapComponentTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension300 } - @objc open var spaceColumnGapComponentTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension400 } - - @objc open var spaceColumnGapComponentIsIconNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spaceColumnGapComponentIsIconShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spaceColumnGapComponentIsIconShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spaceColumnGapComponentIsIconMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } - @objc open var spaceColumnGapComponentIsIconTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spaceColumnGapComponentIsIconTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } - - @objc open var spaceColumnGapComponentIsArrowNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spaceColumnGapComponentIsArrowShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spaceColumnGapComponentIsArrowShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spaceColumnGapComponentIsArrowMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } - @objc open var spaceColumnGapComponentIsArrowTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spaceColumnGapComponentIsArrowTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spaceColumnGapNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spaceColumnGapShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spaceColumnGapShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spaceColumnGapMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spaceColumnGapTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension300 } + @objc open var spaceColumnGapTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension400 } + + @objc open var spaceColumnGapIsIconNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spaceColumnGapIsIconShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spaceColumnGapIsIconShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spaceColumnGapIsIconMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } + @objc open var spaceColumnGapIsIconTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spaceColumnGapIsIconTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } + + @objc open var spaceColumnGapIsArrowNone: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spaceColumnGapIsArrowShorter: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spaceColumnGapIsArrowShort: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spaceColumnGapIsArrowMedium: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension75 } + @objc open var spaceColumnGapIsArrowTall: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spaceColumnGapIsArrowTaller: SpacingPaddingInlineSemanticToken { DimensionRawTokens.dimension200 } // MARK: Semantic token - Padding - Gap stack - @objc open var spaceRowGapComponentNone: SpacingGapStackSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spaceRowGapComponentShorter: SpacingGapStackSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spaceRowGapComponentShort: SpacingGapStackSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spaceRowGapComponentMedium: SpacingGapStackSemanticToken { DimensionRawTokens.dimension75 } - @objc open var spaceRowGapComponentTall: SpacingGapStackSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spaceRowGapComponentTaller: SpacingGapStackSemanticToken { DimensionRawTokens.dimension200 } - - @objc open var spaceRowGapComponentIsIconNone: SpacingGapStackSemanticToken { DimensionRawTokens.dimension0 } - @objc open var spaceRowGapComponentIsIconShorter: SpacingGapStackSemanticToken { DimensionRawTokens.dimension25 } - @objc open var spaceRowGapComponentIsIconShort: SpacingGapStackSemanticToken { DimensionRawTokens.dimension50 } - @objc open var spaceRowGapComponentIsIconMedium: SpacingGapStackSemanticToken { DimensionRawTokens.dimension75 } - @objc open var spaceRowGapComponentIsIconTall: SpacingGapStackSemanticToken { DimensionRawTokens.dimension100 } - @objc open var spaceRowGapComponentIsIconTaller: SpacingGapStackSemanticToken { DimensionRawTokens.dimension200 } + @objc open var spaceRowGapNone: SpacingGapStackSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spaceRowGapShorter: SpacingGapStackSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spaceRowGapShort: SpacingGapStackSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spaceRowGapMedium: SpacingGapStackSemanticToken { DimensionRawTokens.dimension75 } + @objc open var spaceRowGapTall: SpacingGapStackSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spaceRowGapTaller: SpacingGapStackSemanticToken { DimensionRawTokens.dimension200 } + + @objc open var spaceRowGapIsIconNone: SpacingGapStackSemanticToken { DimensionRawTokens.dimension0 } + @objc open var spaceRowGapIsIconShorter: SpacingGapStackSemanticToken { DimensionRawTokens.dimension25 } + @objc open var spaceRowGapIsIconShort: SpacingGapStackSemanticToken { DimensionRawTokens.dimension50 } + @objc open var spaceRowGapIsIconMedium: SpacingGapStackSemanticToken { DimensionRawTokens.dimension75 } + @objc open var spaceRowGapIsIconTall: SpacingGapStackSemanticToken { DimensionRawTokens.dimension100 } + @objc open var spaceRowGapIsIconTaller: SpacingGapStackSemanticToken { DimensionRawTokens.dimension200 } } // swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift index f3d3d20bf..8e4186518 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift @@ -18,6 +18,7 @@ import OUDSTokensSemantic extension MockTheme { static let mockThemeColorRawToken: ColorRawToken = "#68489D" + static let mockThemeColorCompositeSemanticToken: ColorCompositeSemanticToken = ColorCompositeSemanticToken("#68489D") // MARK: Semantic token - Colors - Alias - Primary @@ -123,281 +124,225 @@ extension MockTheme { // MARK: Semantic token - Colors - Background - Default - Primary - override var colorBackgroundDefaultPrimaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundDefaultPrimaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundDefaultPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Default - Secondary - override var colorBackgroundDefaultSecondaryLight: ColorSemanticToken! { sysColorBrandNeutralMutedLowest } - override var colorBackgroundDefaultSecondaryDark: ColorSemanticToken! { sysColorBrandNeutralEmphasizedHigher } + override var colorBackgroundDefaultSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Default - Tertiary - override var colorBackgroundDefaultTertiaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundDefaultTertiaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundDefaultTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Emphasized - Primary - override var colorBackgroundEmphasizedPrimaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundEmphasizedPrimaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundEmphasizedPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Emphasized - Secondary - override var colorBackgroundEmphasizedSecondaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundEmphasizedSecondaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundEmphasizedSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Brand - Primary - override var colorBackgroundBrandPrimaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundBrandPrimaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundBrandPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Brand - Secondary - override var colorBackgroundBrandSecondary: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundBrandSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Brand - Tertiary - override var colorBackgroundBrandTertiary: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundBrandTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Attractive - Muted - override var colorBackgroundStatusAttractiveMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusAttractiveMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized - override var colorBackgroundStatusAttractiveEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusAttractiveEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Warning - Muted - override var colorBackgroundStatusWarningMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusWarningMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusWarningMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized - override var colorBackgroundStatusWarningEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusWarningEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusWarningEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Negative - Muted - override var colorBackgroundStatusNegativeMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusNegativeMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusNegativeMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized - override var colorBackgroundStatusNegativeEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusNegativeEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Positive - Muted - override var colorBackgroundStatusPositiveMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusPositiveMutedInverse: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusPositiveMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusPositiveMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized - override var colorBackgroundStatusPositiveEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusPositiveEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Information - Muted - override var colorBackgroundStatusInformationMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusInformationMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusInformationMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Background - Status - Information - Emphasized - override var colorBackgroundStatusInformationEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBackgroundStatusInformationEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBackgroundStatusInformationEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Default - override var colorContentDefaultLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentDefaultDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentDefault: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Default - On background emphasized - override var colorContentDefaultOnBackgroundEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentDefaultOnBackgroundEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Muted - override var colorContentMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Muted - On background emphasized - override var colorContentMutedOnBackgroundEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentMutedOnBackgroundEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Brand - Primary - override var colorContentBrandPrimaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentBrandPrimaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentBrandPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized - override var colorContentBrandPrimaryOnBackgroundEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentBrandPrimaryOnBackgroundEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Brand - Secondary - override var colorContentBrandSecondaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentBrandSecondaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentBrandSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Brand - Tertiary - override var colorContentBrandTertiaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentBrandTertiaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentBrandTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Status - Attractive - override var colorContentStatusAttractiveLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentStatusAttractiveDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentStatusAttractive: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Status - Negative - override var colorContentStatusNegativeLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentStatusNegativeDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentStatusNegative: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Status - Positive - override var colorContentStatusPositiveLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentStatusPositiveInverse: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentStatusPositiveDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentStatusPositive: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Content - Status - Information - override var colorContentStatusInformationLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorContentStatusInformationDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorContentStatusInformation: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Default - override var colorBorderDefaultLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderDefaultDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderDefault: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Default - On background emphasized - override var colorBorderDefaultOnBackgroundEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderDefaultOnBackgroundEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Emphasized - override var colorBorderEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized - override var colorBorderEmphasizedOnBackgroundEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderEmphasizedOnBackgroundEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Brand - Primary - override var colorBorderBrandPrimaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandPrimaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized - override var colorBorderBrandPrimaryOnBackgroundEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandPrimaryOnBackgroundEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Brand - Secondary - override var colorBorderBrandSecondaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandSecondaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Brand - Tertiary - override var colorBorderBrandTertiaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandTertiaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Status - Attractive - override var colorBorderBrandStatusAttractiveLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandStatusAttractiveDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandStatusAttractive: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Status - Warning - override var colorBorderBrandStatusWarningLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandStatusWarningDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandStatusWarning: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Status - Negative - override var colorBorderBrandStatusNegativeLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandStatusNegativeDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandStatusNegative: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Status - Positive - override var colorBorderBrandStatusPositiveLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandStatusPositiveDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandStatusPositive: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - Border - Status - Information - override var colorBorderBrandStatusInformationLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorBorderBrandStatusInformationDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorBorderBrandStatusInformation: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Primary - override var colorOnBackgroundPrimaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundPrimaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Secondary - override var colorOnBackgroundSecondaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundSecondaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Tertiary - override var colorOnBackgroundTertiaryLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundTertiaryDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } - // MARK: Semantic token - Colors - On background - Status - Attrative - Muted + // MARK: Semantic token - Colors - On background - Status - Attractive - Muted - override var colorOnBackgroundStatusAttractiveMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusAttractiveMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } - // MARK: Semantic token - Colors - On background - Status - Attrative - Emphasized + // MARK: Semantic token - Colors - On background - Status - Attractive - Emphasized - override var colorOnBackgroundStatusAttractiveEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusAttractiveEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Status - Warning - Muted - override var colorOnBackgroundStatusWarningMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusWarningMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusWarningMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized - override var colorOnBackgroundStatusWarningEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusWarningEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Status - Negative - Muted - override var colorOnBackgroundStatusNegativeMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusNegativeMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized - override var colorOnBackgroundStatusNegativeEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusNegativeEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Status - Positive - Muted - override var colorOnBackgroundStatusPositiveMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusPositiveMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized - override var colorOnBackgroundStatusPositiveEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusPositiveEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Status - Information - Muted - override var colorOnBackgroundStatusInformationMutedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusInformationMutedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusInformationMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } // MARK: Semantic token - Colors - On background - Status - Information - Emphasized - override var colorOnBackgroundStatusInformationEmphasizedLight: ColorSemanticToken! { Self.mockThemeColorRawToken } - override var colorOnBackgroundStatusInformationEmphasizedDark: ColorSemanticToken! { Self.mockThemeColorRawToken } + override var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift index 2335aeb88..0443b1a94 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift @@ -20,5 +20,29 @@ extension MockTheme { static let mockThemeDimensionSemanticToken: DimensionSemanticToken = 007 - override var dimensionDensityDefault: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension0: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension10: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension20: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension30: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension40: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension50: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension60: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension70: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension80: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension90: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension100: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension110: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension120: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension130: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension140: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension150: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension160: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension170: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension180: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension190: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension200: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension210: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension220: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension230: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension240: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift index 721e68104..a1efdd7a2 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift @@ -20,19 +20,6 @@ extension MockTheme { static let mockThemeSpaceRawToken: DimensionRawToken = 911 static let mockThemeSpaceSemanticToken: SpacingCompositeSemanticToken = SpacingCompositeSemanticToken(compact: 1, regular: 151) - // MARK: Semantic token - Spacing - Layout fix - - override var spaceFixedNone: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedSmash: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedShortest: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedShorter: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedShort: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedMedium: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedTall: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedTaller: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedTallest: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceFixedSpacious: SpacingSemanticToken { Self.mockThemeSpaceRawToken } - // MARK: Semantic token - Spacing - Layout fluid override var spaceScaledNone: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } @@ -46,88 +33,103 @@ extension MockTheme { override var spaceScaledTallest: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } override var spaceScaledSpacious: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + // MARK: Semantic token - Spacing - Layout fix + + override var spaceFixedNone: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedSmash: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedShortest: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedShorter: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedShort: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedMedium: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedTall: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedTaller: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedTallest: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedSpacious: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedHuge: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceFixedJumbo: SpacingSemanticToken { Self.mockThemeSpaceRawToken } + // MARK: Semantic token - Spacing - Padding - Padding inline - override var spacePaddingInlineComponentNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsIconNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsIconShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsIconShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsIconMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsIconTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsIconTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsArrowNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsArrowShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsArrowShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsArrowMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsArrowTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingInlineComponentIsArrowTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsIconNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsIconShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsIconShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsIconMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsIconTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsIconTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsArrowNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsArrowShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsArrowShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsArrowMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsArrowTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingInlineIsArrowTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } // MARK: Semantic token - Padding - Padding stack - override var spacePaddingBlockComponentNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentIsIconNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentIsIconShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentIsIconShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentIsIconMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentIsIconTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spacePaddingBlockComponentIsIconTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockIsIconNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockIsIconShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockIsIconShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockIsIconMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockIsIconTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spacePaddingBlockIsIconTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } // MARK: Semantic token - Padding - Padding inset - override var spaceInsetComponentNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentSmash: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentShortest: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentTallest: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceInsetComponentSpacious: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetSmash: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetShortest: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetTallest: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceInsetSpacious: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } // MARK: Semantic token - Padding - Gap inline - override var spaceColumnGapComponentNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsIconNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsIconShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsIconShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsIconMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsIconTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsIconTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsArrowNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsArrowShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsArrowShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsArrowMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsArrowTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceColumnGapComponentIsArrowTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsIconNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsIconShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsIconShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsIconMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsIconTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsIconTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsArrowNone: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsArrowShorter: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsArrowShort: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsArrowMedium: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsArrowTall: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceColumnGapIsArrowTaller: SpacingPaddingInlineSemanticToken { Self.mockThemeSpaceRawToken } // MARK: Semantic token - Padding - Gap stack - override var spaceRowGapComponentNone: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentShorter: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentShort: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentMedium: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentTall: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentTaller: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentIsIconNone: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentIsIconShorter: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentIsIconShort: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentIsIconMedium: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentIsIconTall: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } - override var spaceRowGapComponentIsIconTaller: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapNone: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapShorter: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapShort: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapMedium: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapTall: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapTaller: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapIsIconNone: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapIsIconShorter: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapIsIconShort: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapIsIconMedium: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapIsIconTall: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } + override var spaceRowGapIsIconTaller: SpacingGapStackSemanticToken { Self.mockThemeSpaceRawToken } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfColorSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfColorSemanticTokens.swift index 16a5f1c8a..0199add7f 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfColorSemanticTokens.swift @@ -414,559 +414,569 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { // MARK: - Semantic token - Colors - Background func testInheritedThemeCanOverrideSemanticTokenColorBackgroundDefaultPrimaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultPrimaryLight, abstractTheme.colorBackgroundDefaultPrimaryLight) - XCTAssertTrue(inheritedTheme.colorBackgroundDefaultPrimaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultPrimary?.light, abstractTheme.colorBackgroundDefaultPrimary?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundDefaultPrimary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundDefaultPrimaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultPrimaryDark, abstractTheme.colorBackgroundDefaultPrimaryDark) - XCTAssertTrue(inheritedTheme.colorBackgroundDefaultPrimaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultPrimary?.dark, abstractTheme.colorBackgroundDefaultPrimary?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundDefaultPrimary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundDefaultSecondaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultSecondaryLight, abstractTheme.colorBackgroundDefaultSecondaryLight) - XCTAssertTrue(inheritedTheme.colorBackgroundDefaultSecondaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultSecondary?.light, abstractTheme.colorBackgroundDefaultSecondary?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundDefaultSecondary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundDefaultSecondaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultSecondaryDark, abstractTheme.colorBackgroundDefaultSecondaryDark) - XCTAssertTrue(inheritedTheme.colorBackgroundDefaultSecondaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultSecondary?.dark, abstractTheme.colorBackgroundDefaultSecondary?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundDefaultSecondary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundDefaultTertiaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultTertiaryLight, abstractTheme.colorBackgroundDefaultTertiaryLight) - XCTAssertTrue(inheritedTheme.colorBackgroundDefaultTertiaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultTertiary?.light, abstractTheme.colorBackgroundDefaultTertiary?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundDefaultTertiary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundDefaultTertiaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultTertiaryDark, abstractTheme.colorBackgroundDefaultTertiaryDark) - XCTAssertTrue(inheritedTheme.colorBackgroundDefaultTertiaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundDefaultTertiary?.dark, abstractTheme.colorBackgroundDefaultTertiary?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundDefaultTertiary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundEmphasizedPrimaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedPrimaryLight, abstractTheme.colorBackgroundEmphasizedPrimaryLight) - XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedPrimaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedPrimary?.light, abstractTheme.colorBackgroundEmphasizedPrimary?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedPrimary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundEmphasizedPrimaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedPrimaryDark, abstractTheme.colorBackgroundEmphasizedPrimaryDark) - XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedPrimaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedPrimary?.dark, abstractTheme.colorBackgroundEmphasizedPrimary?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedPrimary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundEmphasizedSecondaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedSecondaryLight, abstractTheme.colorBackgroundEmphasizedSecondaryLight) - XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedSecondaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedSecondary?.light, abstractTheme.colorBackgroundEmphasizedSecondary?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedSecondary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundEmphasizedSecondaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedSecondaryDark, abstractTheme.colorBackgroundEmphasizedSecondaryDark) - XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedSecondaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedSecondary?.dark, abstractTheme.colorBackgroundEmphasizedSecondary?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedSecondary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandPrimaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandPrimaryLight, abstractTheme.colorBackgroundBrandPrimaryLight) - XCTAssertTrue(inheritedTheme.colorBackgroundBrandPrimaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandPrimary?.light, abstractTheme.colorBackgroundBrandPrimary?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundBrandPrimary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandPrimaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandPrimaryDark, abstractTheme.colorBackgroundBrandPrimaryDark) - XCTAssertTrue(inheritedTheme.colorBackgroundBrandPrimaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandPrimary?.dark, abstractTheme.colorBackgroundBrandPrimary?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundBrandPrimary?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandSecondary() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandSecondary, abstractTheme.colorBackgroundBrandSecondary) - XCTAssertTrue(inheritedTheme.colorBackgroundBrandSecondary == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandSecondaryLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandSecondary?.light, abstractTheme.colorBackgroundBrandSecondary?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundBrandSecondary?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandTertiary() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandTertiary, abstractTheme.colorBackgroundBrandTertiary) - XCTAssertTrue(inheritedTheme.colorBackgroundBrandTertiary == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandSecondaryDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandSecondary?.dark, abstractTheme.colorBackgroundBrandSecondary?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundBrandSecondary?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandTertiaryLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandTertiary?.light, abstractTheme.colorBackgroundBrandTertiary?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundBrandTertiary?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandTertiaryDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandTertiary?.dark, abstractTheme.colorBackgroundBrandTertiary?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundBrandTertiary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusAttractiveMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveMutedLight, abstractTheme.colorBackgroundStatusAttractiveMutedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveMuted?.light, abstractTheme.colorBackgroundStatusAttractiveMuted?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusAttractiveMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveMutedDark, abstractTheme.colorBackgroundStatusAttractiveMutedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveMuted?.dark, abstractTheme.colorBackgroundStatusAttractiveMuted?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusAttractiveEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveEmphasizedLight, abstractTheme.colorBackgroundStatusAttractiveEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveEmphasized?.light, abstractTheme.colorBackgroundStatusAttractiveEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusAttractiveEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveEmphasizedDark, abstractTheme.colorBackgroundStatusAttractiveEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveEmphasized?.dark, abstractTheme.colorBackgroundStatusAttractiveEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusWarningMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningMutedLight, abstractTheme.colorBackgroundStatusWarningMutedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningMuted?.light, abstractTheme.colorBackgroundStatusWarningMuted?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusWarningMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningMutedDark, abstractTheme.colorBackgroundStatusWarningMutedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningMuted?.dark, abstractTheme.colorBackgroundStatusWarningMuted?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusWarningEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningEmphasizedLight, abstractTheme.colorBackgroundStatusWarningEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningEmphasized?.light, abstractTheme.colorBackgroundStatusWarningEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusWarningEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningEmphasizedDark, abstractTheme.colorBackgroundStatusWarningEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningEmphasized?.dark, abstractTheme.colorBackgroundStatusWarningEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNegativeMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeMutedLight, abstractTheme.colorBackgroundStatusNegativeMutedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeMuted?.light, abstractTheme.colorBackgroundStatusNegativeMuted?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNegativeMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeMutedDark, abstractTheme.colorBackgroundStatusNegativeMutedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeMuted?.dark, abstractTheme.colorBackgroundStatusNegativeMuted?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNegativeEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeEmphasizedLight, abstractTheme.colorBackgroundStatusNegativeEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeEmphasized?.light, abstractTheme.colorBackgroundStatusNegativeEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNegativeEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeEmphasizedDark, abstractTheme.colorBackgroundStatusNegativeEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeEmphasized?.dark, abstractTheme.colorBackgroundStatusNegativeEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusPositiveMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveMutedLight, abstractTheme.colorBackgroundStatusPositiveMutedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveMuted?.light, abstractTheme.colorBackgroundStatusPositiveMuted?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusPositiveMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveMutedDark, abstractTheme.colorBackgroundStatusPositiveMutedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveMuted?.dark, abstractTheme.colorBackgroundStatusPositiveMuted?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusPositiveEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveEmphasizedLight, abstractTheme.colorBackgroundStatusPositiveEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveEmphasized?.light, abstractTheme.colorBackgroundStatusPositiveEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusPositiveEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveEmphasizedDark, abstractTheme.colorBackgroundStatusPositiveEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveEmphasized?.dark, abstractTheme.colorBackgroundStatusPositiveEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusInformationMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationMutedLight, abstractTheme.colorBackgroundStatusInformationMutedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationMuted?.light, abstractTheme.colorBackgroundStatusInformationMuted?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusInformationMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationMutedDark, abstractTheme.colorBackgroundStatusInformationMutedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationMuted?.dark, abstractTheme.colorBackgroundStatusInformationMuted?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusInformationEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationEmphasizedLight, abstractTheme.colorBackgroundStatusInformationEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationEmphasized?.light, abstractTheme.colorBackgroundStatusInformationEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusInformationEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationEmphasizedDark, abstractTheme.colorBackgroundStatusInformationEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationEmphasized?.dark, abstractTheme.colorBackgroundStatusInformationEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationEmphasized?.dark == MockTheme.mockThemeColorRawToken) } // MARK: - Semantic token - Colors - Content func testInheritedThemeCanOverrideSemanticTokenColorContentDefaultLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentDefaultLight, abstractTheme.colorContentDefaultLight) - XCTAssertTrue(inheritedTheme.colorContentDefaultLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentDefault?.light, abstractTheme.colorContentDefault?.light) + XCTAssertTrue(inheritedTheme.colorContentDefault?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentDefaultDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentDefaultDark, abstractTheme.colorContentDefaultDark) - XCTAssertTrue(inheritedTheme.colorContentDefaultDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentDefault?.dark, abstractTheme.colorContentDefault?.dark) + XCTAssertTrue(inheritedTheme.colorContentDefault?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentDefaultOnBackgroundEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentDefaultOnBackgroundEmphasizedLight, abstractTheme.colorContentDefaultOnBackgroundEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorContentDefaultOnBackgroundEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentDefaultOnBackgroundEmphasized?.light, abstractTheme.colorContentDefaultOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorContentDefaultOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentDefaultOnBackgroundEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentDefaultOnBackgroundEmphasizedDark, abstractTheme.colorContentDefaultOnBackgroundEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorContentDefaultOnBackgroundEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentDefaultOnBackgroundEmphasized?.dark, abstractTheme.colorContentDefaultOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorContentDefaultOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentMutedLight, abstractTheme.colorContentMutedLight) - XCTAssertTrue(inheritedTheme.colorContentMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentMuted?.light, abstractTheme.colorContentMuted?.light) + XCTAssertTrue(inheritedTheme.colorContentMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentMutedDark, abstractTheme.colorContentMutedDark) - XCTAssertTrue(inheritedTheme.colorContentMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentMuted?.dark, abstractTheme.colorContentMuted?.dark) + XCTAssertTrue(inheritedTheme.colorContentMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentMutedOnBackgroundEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentMutedOnBackgroundEmphasizedLight, abstractTheme.colorContentMutedOnBackgroundEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorContentMutedOnBackgroundEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentMutedOnBackgroundEmphasized?.light, abstractTheme.colorContentMutedOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorContentMutedOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentMutedOnBackgroundEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentMutedOnBackgroundEmphasizedDark, abstractTheme.colorContentMutedOnBackgroundEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorContentMutedOnBackgroundEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentMutedOnBackgroundEmphasized?.dark, abstractTheme.colorContentMutedOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorContentMutedOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentBrandPrimaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimaryLight, abstractTheme.colorContentBrandPrimaryLight) - XCTAssertTrue(inheritedTheme.colorContentBrandPrimaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimary?.light, abstractTheme.colorContentBrandPrimary?.light) + XCTAssertTrue(inheritedTheme.colorContentBrandPrimary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentBrandPrimaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimaryDark, abstractTheme.colorContentBrandPrimaryDark) - XCTAssertTrue(inheritedTheme.colorContentBrandPrimaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimary?.dark, abstractTheme.colorContentBrandPrimary?.dark) + XCTAssertTrue(inheritedTheme.colorContentBrandPrimary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentBrandPrimaryOnBackgroundEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimaryOnBackgroundEmphasizedLight, abstractTheme.colorContentBrandPrimaryOnBackgroundEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorContentBrandPrimaryOnBackgroundEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimaryOnBackgroundEmphasized?.light, abstractTheme.colorContentBrandPrimaryOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorContentBrandPrimaryOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentBrandPrimaryOnBackgroundEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimaryOnBackgroundEmphasizedDark, abstractTheme.colorContentBrandPrimaryOnBackgroundEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorContentBrandPrimaryOnBackgroundEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimaryOnBackgroundEmphasized?.dark, abstractTheme.colorContentBrandPrimaryOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorContentBrandPrimaryOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentBrandSecondaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentBrandSecondaryLight, abstractTheme.colorContentBrandSecondaryLight) - XCTAssertTrue(inheritedTheme.colorContentBrandSecondaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentBrandSecondary?.light, abstractTheme.colorContentBrandSecondary?.light) + XCTAssertTrue(inheritedTheme.colorContentBrandSecondary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentBrandSecondaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentBrandSecondaryDark, abstractTheme.colorContentBrandSecondaryDark) - XCTAssertTrue(inheritedTheme.colorContentBrandSecondaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentBrandSecondary?.dark, abstractTheme.colorContentBrandSecondary?.dark) + XCTAssertTrue(inheritedTheme.colorContentBrandSecondary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentBrandTertiaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentBrandTertiaryLight, abstractTheme.colorContentBrandTertiaryLight) - XCTAssertTrue(inheritedTheme.colorContentBrandTertiaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentBrandTertiary?.light, abstractTheme.colorContentBrandTertiary?.light) + XCTAssertTrue(inheritedTheme.colorContentBrandTertiary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentBrandTertiaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentBrandTertiaryDark, abstractTheme.colorContentBrandTertiaryDark) - XCTAssertTrue(inheritedTheme.colorContentBrandTertiaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentBrandTertiary?.dark, abstractTheme.colorContentBrandTertiary?.dark) + XCTAssertTrue(inheritedTheme.colorContentBrandTertiary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentStatusAttractiveLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentStatusAttractiveLight, abstractTheme.colorContentStatusAttractiveLight) - XCTAssertTrue(inheritedTheme.colorContentStatusAttractiveLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentStatusAttractive?.light, abstractTheme.colorContentStatusAttractive?.light) + XCTAssertTrue(inheritedTheme.colorContentStatusAttractive?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentStatusAttractiveDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentStatusAttractiveDark, abstractTheme.colorContentStatusAttractiveDark) - XCTAssertTrue(inheritedTheme.colorContentStatusAttractiveDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentStatusAttractive?.dark, abstractTheme.colorContentStatusAttractive?.dark) + XCTAssertTrue(inheritedTheme.colorContentStatusAttractive?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentStatusNegativeLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentStatusNegativeLight, abstractTheme.colorContentStatusNegativeLight) - XCTAssertTrue(inheritedTheme.colorContentStatusNegativeLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentStatusNegative?.light, abstractTheme.colorContentStatusNegative?.light) + XCTAssertTrue(inheritedTheme.colorContentStatusNegative?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentStatusNegativeDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentStatusNegativeDark, abstractTheme.colorContentStatusNegativeDark) - XCTAssertTrue(inheritedTheme.colorContentStatusNegativeDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentStatusNegative?.dark, abstractTheme.colorContentStatusNegative?.dark) + XCTAssertTrue(inheritedTheme.colorContentStatusNegative?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentStatusPositiveLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentStatusPositiveLight, abstractTheme.colorContentStatusPositiveLight) - XCTAssertTrue(inheritedTheme.colorContentStatusPositiveLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentStatusPositive?.light, abstractTheme.colorContentStatusPositive?.light) + XCTAssertTrue(inheritedTheme.colorContentStatusPositive?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentStatusPositiveDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentStatusPositiveDark, abstractTheme.colorContentStatusPositiveDark) - XCTAssertTrue(inheritedTheme.colorContentStatusPositiveDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentStatusPositive?.dark, abstractTheme.colorContentStatusPositive?.dark) + XCTAssertTrue(inheritedTheme.colorContentStatusPositive?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentStatusInformationLight() throws { - XCTAssertNotEqual(inheritedTheme.colorContentStatusInformationLight, abstractTheme.colorContentStatusInformationLight) - XCTAssertTrue(inheritedTheme.colorContentStatusInformationLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentStatusInformation?.light, abstractTheme.colorContentStatusInformation?.light) + XCTAssertTrue(inheritedTheme.colorContentStatusInformation?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorContentStatusInformationDark() throws { - XCTAssertNotEqual(inheritedTheme.colorContentStatusInformationDark, abstractTheme.colorContentStatusInformationDark) - XCTAssertTrue(inheritedTheme.colorContentStatusInformationDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorContentStatusInformation?.dark, abstractTheme.colorContentStatusInformation?.dark) + XCTAssertTrue(inheritedTheme.colorContentStatusInformation?.dark == MockTheme.mockThemeColorRawToken) } // MARK: - Semantic token - Colors - Border func testInheritedThemeCanOverrideSemanticTokenColorBorderDefaultLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderDefaultLight, abstractTheme.colorBorderDefaultLight) - XCTAssertTrue(inheritedTheme.colorBorderDefaultLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderDefault?.light, abstractTheme.colorBorderDefault?.light) + XCTAssertTrue(inheritedTheme.colorBorderDefault?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderDefaultDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderDefaultDark, abstractTheme.colorBorderDefaultDark) - XCTAssertTrue(inheritedTheme.colorBorderDefaultDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderDefault?.dark, abstractTheme.colorBorderDefault?.dark) + XCTAssertTrue(inheritedTheme.colorBorderDefault?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderDefaultOnBackgroundEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderDefaultOnBackgroundEmphasizedLight, abstractTheme.colorBorderDefaultOnBackgroundEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBorderDefaultOnBackgroundEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderDefaultOnBackgroundEmphasized?.light, abstractTheme.colorBorderDefaultOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBorderDefaultOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderDefaultOnBackgroundEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderDefaultOnBackgroundEmphasizedDark, abstractTheme.colorBorderDefaultOnBackgroundEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBorderDefaultOnBackgroundEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderDefaultOnBackgroundEmphasized?.dark, abstractTheme.colorBorderDefaultOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBorderDefaultOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderEmphasizedLight, abstractTheme.colorBorderEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBorderEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderEmphasized?.light, abstractTheme.colorBorderEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBorderEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderEmphasizedDark, abstractTheme.colorBorderEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBorderEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderEmphasized?.dark, abstractTheme.colorBorderEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBorderEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderEmphasizedOnBackgroundEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderEmphasizedOnBackgroundEmphasizedLight, abstractTheme.colorBorderEmphasizedOnBackgroundEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBorderEmphasizedOnBackgroundEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderEmphasizedOnBackgroundEmphasized?.light, abstractTheme.colorBorderEmphasizedOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBorderEmphasizedOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderEmphasizedOnBackgroundEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderEmphasizedOnBackgroundEmphasizedDark, abstractTheme.colorBorderEmphasizedOnBackgroundEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBorderEmphasizedOnBackgroundEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderEmphasizedOnBackgroundEmphasized?.dark, abstractTheme.colorBorderEmphasizedOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBorderEmphasizedOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandPrimaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandPrimaryLight, abstractTheme.colorBorderBrandPrimaryLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandPrimaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandPrimary?.light, abstractTheme.colorBorderBrandPrimary?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandPrimary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandPrimaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandPrimaryDark, abstractTheme.colorBorderBrandPrimaryDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandPrimaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandPrimary?.dark, abstractTheme.colorBorderBrandPrimary?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandPrimary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandPrimaryOnBackgroundEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandPrimaryOnBackgroundEmphasizedLight, abstractTheme.colorBorderBrandPrimaryOnBackgroundEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandPrimaryOnBackgroundEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandPrimaryOnBackgroundEmphasized?.light, abstractTheme.colorBorderBrandPrimaryOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandPrimaryOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandPrimaryOnBackgroundEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandPrimaryOnBackgroundEmphasizedDark, abstractTheme.colorBorderBrandPrimaryOnBackgroundEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandPrimaryOnBackgroundEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandPrimaryOnBackgroundEmphasized?.dark, abstractTheme.colorBorderBrandPrimaryOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandPrimaryOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandSecondaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandSecondaryLight, abstractTheme.colorBorderBrandSecondaryLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandSecondaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandSecondary?.light, abstractTheme.colorBorderBrandSecondary?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandSecondary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandSecondaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandSecondaryDark, abstractTheme.colorBorderBrandSecondaryDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandSecondaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandSecondary?.dark, abstractTheme.colorBorderBrandSecondary?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandSecondary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandTertiaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandTertiaryLight, abstractTheme.colorBorderBrandTertiaryLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandTertiaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandTertiary?.light, abstractTheme.colorBorderBrandTertiary?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandTertiary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandTertiaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandTertiaryDark, abstractTheme.colorBorderBrandTertiaryDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandTertiaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandTertiary?.dark, abstractTheme.colorBorderBrandTertiary?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandTertiary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusAttractiveLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusAttractiveLight, abstractTheme.colorBorderBrandStatusAttractiveLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusAttractiveLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusAttractive?.light, abstractTheme.colorBorderBrandStatusAttractive?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusAttractive?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusAttractiveDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusAttractiveDark, abstractTheme.colorBorderBrandStatusAttractiveDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusAttractiveDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusAttractive?.dark, abstractTheme.colorBorderBrandStatusAttractive?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusAttractive?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusWarningLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusWarningLight, abstractTheme.colorBorderBrandStatusWarningLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusWarningLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusWarning?.light, abstractTheme.colorBorderBrandStatusWarning?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusWarning?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusWarningDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusWarningDark, abstractTheme.colorBorderBrandStatusWarningDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusWarningDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusWarning?.dark, abstractTheme.colorBorderBrandStatusWarning?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusWarning?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusNegativeLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusNegativeLight, abstractTheme.colorBorderBrandStatusNegativeLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusNegativeLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusNegative?.light, abstractTheme.colorBorderBrandStatusNegative?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusNegative?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusNegativeDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusNegativeDark, abstractTheme.colorBorderBrandStatusNegativeDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusNegativeDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusNegative?.dark, abstractTheme.colorBorderBrandStatusNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusNegative?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusPositiveLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusPositiveLight, abstractTheme.colorBorderBrandStatusPositiveLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusPositiveLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusPositive?.light, abstractTheme.colorBorderBrandStatusPositive?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusPositive?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusPositiveDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusPositiveDark, abstractTheme.colorBorderBrandStatusPositiveDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusPositiveDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusPositive?.dark, abstractTheme.colorBorderBrandStatusPositive?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusPositive?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusInformationLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusInformationLight, abstractTheme.colorBorderBrandStatusInformationLight) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusInformationLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusInformation?.light, abstractTheme.colorBorderBrandStatusInformation?.light) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusInformation?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorBorderBrandStatusInformationDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusInformationDark, abstractTheme.colorBorderBrandStatusInformationDark) - XCTAssertTrue(inheritedTheme.colorBorderBrandStatusInformationDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorBorderBrandStatusInformation?.dark, abstractTheme.colorBorderBrandStatusInformation?.dark) + XCTAssertTrue(inheritedTheme.colorBorderBrandStatusInformation?.dark == MockTheme.mockThemeColorRawToken) } // MARK: - Semantic token - Colors - On background func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundPrimaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundPrimaryLight, abstractTheme.colorOnBackgroundPrimaryLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundPrimaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundPrimary?.light, abstractTheme.colorOnBackgroundPrimary?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundPrimary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundPrimaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundPrimaryDark, abstractTheme.colorOnBackgroundPrimaryDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundPrimaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundPrimary?.dark, abstractTheme.colorOnBackgroundPrimary?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundPrimary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundSecondaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundSecondaryLight, abstractTheme.colorOnBackgroundSecondaryLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundSecondaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundSecondary?.light, abstractTheme.colorOnBackgroundSecondary?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundSecondary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundSecondaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundSecondaryDark, abstractTheme.colorOnBackgroundSecondaryDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundSecondaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundSecondary?.dark, abstractTheme.colorOnBackgroundSecondary?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundSecondary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundTertiaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundTertiaryLight, abstractTheme.colorOnBackgroundTertiaryLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundTertiaryLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundTertiary?.light, abstractTheme.colorOnBackgroundTertiary?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundTertiary?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundTertiaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundTertiaryDark, abstractTheme.colorOnBackgroundTertiaryDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundTertiaryDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundTertiary?.dark, abstractTheme.colorOnBackgroundTertiary?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundTertiary?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusAttractiveMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveMutedLight, abstractTheme.colorOnBackgroundStatusAttractiveMutedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveMuted?.light, abstractTheme.colorOnBackgroundStatusAttractiveMuted?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusAttractiveMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveMutedDark, abstractTheme.colorOnBackgroundStatusAttractiveMutedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveMuted?.dark, abstractTheme.colorOnBackgroundStatusAttractiveMuted?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusAttractiveEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasizedLight, abstractTheme.colorOnBackgroundStatusAttractiveEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasized?.light, abstractTheme.colorOnBackgroundStatusAttractiveEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusAttractiveEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasizedDark, abstractTheme.colorOnBackgroundStatusAttractiveEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasized?.dark, abstractTheme.colorOnBackgroundStatusAttractiveEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusWarningMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningMutedLight, abstractTheme.colorOnBackgroundStatusWarningMutedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningMuted?.light, abstractTheme.colorOnBackgroundStatusWarningMuted?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusWarningMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningMutedDark, abstractTheme.colorOnBackgroundStatusWarningMutedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningMuted?.dark, abstractTheme.colorOnBackgroundStatusWarningMuted?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusWarningEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningEmphasizedLight, abstractTheme.colorOnBackgroundStatusWarningEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningEmphasized?.light, abstractTheme.colorOnBackgroundStatusWarningEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusWarningEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningEmphasizedDark, abstractTheme.colorOnBackgroundStatusWarningEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningEmphasized?.dark, abstractTheme.colorOnBackgroundStatusWarningEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusNegativeMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeMutedLight, abstractTheme.colorOnBackgroundStatusNegativeMutedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeMuted?.light, abstractTheme.colorOnBackgroundStatusNegativeMuted?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusNegativeMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeMutedDark, abstractTheme.colorOnBackgroundStatusNegativeMutedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeMuted?.dark, abstractTheme.colorOnBackgroundStatusNegativeMuted?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusNegativeEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeEmphasizedLight, abstractTheme.colorOnBackgroundStatusNegativeEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeEmphasized?.light, abstractTheme.colorOnBackgroundStatusNegativeEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusNegativeEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeEmphasizedDark, abstractTheme.colorOnBackgroundStatusNegativeEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeEmphasized?.dark, abstractTheme.colorOnBackgroundStatusNegativeEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func ttestInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusPositiveMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveMutedLight, abstractTheme.colorOnBackgroundStatusPositiveMutedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveMuted?.light, abstractTheme.colorOnBackgroundStatusPositiveMuted?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusPositiveMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveMutedDark, abstractTheme.colorOnBackgroundStatusPositiveMutedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveMuted?.dark, abstractTheme.colorOnBackgroundStatusPositiveMuted?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusPositiveEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveEmphasizedLight, abstractTheme.colorOnBackgroundStatusPositiveEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveEmphasized?.light, abstractTheme.colorOnBackgroundStatusPositiveEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusPositiveEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveEmphasizedDark, abstractTheme.colorOnBackgroundStatusPositiveEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveEmphasized?.dark, abstractTheme.colorOnBackgroundStatusPositiveEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveEmphasized?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusInformationMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationMutedLight, abstractTheme.colorOnBackgroundStatusInformationMutedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationMutedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationMuted?.light, abstractTheme.colorOnBackgroundStatusInformationMuted?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationMuted?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusInformationMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationMutedDark, abstractTheme.colorOnBackgroundStatusInformationMutedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationMutedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationMuted?.dark, abstractTheme.colorOnBackgroundStatusInformationMuted?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationMuted?.dark == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusInformationEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationEmphasizedLight, abstractTheme.colorOnBackgroundStatusInformationEmphasizedLight) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationEmphasizedLight == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationEmphasized?.light, abstractTheme.colorOnBackgroundStatusInformationEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationEmphasized?.light == MockTheme.mockThemeColorRawToken) } func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusInformationEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationEmphasizedDark, abstractTheme.colorOnBackgroundStatusInformationEmphasizedDark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationEmphasizedDark == MockTheme.mockThemeColorRawToken) + XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationEmphasized?.dark, abstractTheme.colorOnBackgroundStatusInformationEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationEmphasized?.dark == MockTheme.mockThemeColorRawToken) } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift index 19e3dcce5..53f86b880 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift @@ -2,13 +2,13 @@ // Software Name: OUDS iOS // SPDX-FileCopyrightText: Copyright (c) Orange SA // SPDX-License-Identifier: MIT -// +// // This software is distributed under the MIT license, // the text of which is available at https://opensource.org/license/MIT/ // or see the "LICENSE" file for more details. -// +// // Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// Software description: A SwiftUI components library with code examples for Orange Unified Design System // import XCTest @@ -28,9 +28,128 @@ final class TestThemeOverrideOfDimensionSemanticTokens: XCTestCase { inheritedTheme = MockTheme() } - /// Test overriding of dimension semantic tokens - func testInheritedThemeCanOverrideSemanticTokenDimensionDensityDefault() throws { - XCTAssertNotEqual(inheritedTheme.dimensionDensityDefault, abstractTheme.dimensionDensityDefault) - XCTAssertTrue(inheritedTheme.dimensionDensityDefault == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension0() throws { + XCTAssertNotEqual(inheritedTheme.dimension0, abstractTheme.dimension0) + XCTAssertTrue(inheritedTheme.dimension0 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension10() throws { + XCTAssertNotEqual(inheritedTheme.dimension10, abstractTheme.dimension10) + XCTAssertTrue(inheritedTheme.dimension10 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension20() throws { + XCTAssertNotEqual(inheritedTheme.dimension20, abstractTheme.dimension20) + XCTAssertTrue(inheritedTheme.dimension20 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimensio3n0() throws { + XCTAssertNotEqual(inheritedTheme.dimension30, abstractTheme.dimension30) + XCTAssertTrue(inheritedTheme.dimension30 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension40() throws { + XCTAssertNotEqual(inheritedTheme.dimension40, abstractTheme.dimension40) + XCTAssertTrue(inheritedTheme.dimension40 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension50() throws { + XCTAssertNotEqual(inheritedTheme.dimension50, abstractTheme.dimension50) + XCTAssertTrue(inheritedTheme.dimension50 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension60() throws { + XCTAssertNotEqual(inheritedTheme.dimension60, abstractTheme.dimension60) + XCTAssertTrue(inheritedTheme.dimension60 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension70() throws { + XCTAssertNotEqual(inheritedTheme.dimension70, abstractTheme.dimension70) + XCTAssertTrue(inheritedTheme.dimension70 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension80() throws { + XCTAssertNotEqual(inheritedTheme.dimension0, abstractTheme.dimension0) + XCTAssertTrue(inheritedTheme.dimension0 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension90() throws { + XCTAssertNotEqual(inheritedTheme.dimension90, abstractTheme.dimension90) + XCTAssertTrue(inheritedTheme.dimension90 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension100() throws { + XCTAssertNotEqual(inheritedTheme.dimension100, abstractTheme.dimension100) + XCTAssertTrue(inheritedTheme.dimension100 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension110() throws { + XCTAssertNotEqual(inheritedTheme.dimension110, abstractTheme.dimension110) + XCTAssertTrue(inheritedTheme.dimension110 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension120() throws { + XCTAssertNotEqual(inheritedTheme.dimension120, abstractTheme.dimension120) + XCTAssertTrue(inheritedTheme.dimension120 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension130() throws { + XCTAssertNotEqual(inheritedTheme.dimension130, abstractTheme.dimension130) + XCTAssertTrue(inheritedTheme.dimension130 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension140() throws { + XCTAssertNotEqual(inheritedTheme.dimension140, abstractTheme.dimension140) + XCTAssertTrue(inheritedTheme.dimension140 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension150() throws { + XCTAssertNotEqual(inheritedTheme.dimension150, abstractTheme.dimension150) + XCTAssertTrue(inheritedTheme.dimension150 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension160() throws { + XCTAssertNotEqual(inheritedTheme.dimension160, abstractTheme.dimension160) + XCTAssertTrue(inheritedTheme.dimension160 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension170() throws { + XCTAssertNotEqual(inheritedTheme.dimension170, abstractTheme.dimension170) + XCTAssertTrue(inheritedTheme.dimension170 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension180() throws { + XCTAssertNotEqual(inheritedTheme.dimension180, abstractTheme.dimension180) + XCTAssertTrue(inheritedTheme.dimension180 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension190() throws { + XCTAssertNotEqual(inheritedTheme.dimension190, abstractTheme.dimension190) + XCTAssertTrue(inheritedTheme.dimension190 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension200() throws { + XCTAssertNotEqual(inheritedTheme.dimension200, abstractTheme.dimension200) + XCTAssertTrue(inheritedTheme.dimension200 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension210() throws { + XCTAssertNotEqual(inheritedTheme.dimension210, abstractTheme.dimension210) + XCTAssertTrue(inheritedTheme.dimension210 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension220() throws { + XCTAssertNotEqual(inheritedTheme.dimension220, abstractTheme.dimension220) + XCTAssertTrue(inheritedTheme.dimension220 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension230() throws { + XCTAssertNotEqual(inheritedTheme.dimension230, abstractTheme.dimension230) + XCTAssertTrue(inheritedTheme.dimension230 == MockTheme.mockThemeDimensionSemanticToken) + } + + func testInheritedThemeCanOverrideSemanticTokenDimension240() throws { + XCTAssertNotEqual(inheritedTheme.dimension240, abstractTheme.dimension240) + XCTAssertTrue(inheritedTheme.dimension240 == MockTheme.mockThemeDimensionSemanticToken) } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift index 5dca0b45e..b58138231 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift @@ -32,466 +32,476 @@ final class TestThemeOverrideOfSpacingSemanticTokens: XCTestCase { // MARK: - Semantic token - Spacing - Layout fix - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixNone() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedNone() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedNone, abstractTheme.spaceFixedNone) XCTAssertTrue(inheritedTheme.spaceFixedNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixSmash() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedSmash() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedSmash, abstractTheme.spaceFixedSmash) XCTAssertTrue(inheritedTheme.spaceFixedSmash == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixShortest() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedShortest() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedShortest, abstractTheme.spaceFixedShortest) XCTAssertTrue(inheritedTheme.spaceFixedShortest == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixShorter() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedShorter() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedShorter, abstractTheme.spaceFixedShorter) XCTAssertTrue(inheritedTheme.spaceFixedShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixShort() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedShort() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedShort, abstractTheme.spaceFixedShort) XCTAssertTrue(inheritedTheme.spaceFixedShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixMedium() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedMedium() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedMedium, abstractTheme.spaceFixedMedium) XCTAssertTrue(inheritedTheme.spaceFixedMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixTall() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedTall() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedTall, abstractTheme.spaceFixedTall) XCTAssertTrue(inheritedTheme.spaceFixedTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixTaller() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedTaller() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedTaller, abstractTheme.spaceFixedTaller) XCTAssertTrue(inheritedTheme.spaceFixedTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixTallest() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedTallest() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedTallest, abstractTheme.spaceFixedTallest) XCTAssertTrue(inheritedTheme.spaceFixedTallest == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutFixSpacious() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedSpacious() throws { XCTAssertNotEqual(inheritedTheme.spaceFixedSpacious, abstractTheme.spaceFixedSpacious) XCTAssertTrue(inheritedTheme.spaceFixedSpacious == MockTheme.mockThemeSpaceRawToken) } + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedHuge() throws { + XCTAssertNotEqual(inheritedTheme.spaceFixedHuge, abstractTheme.spaceFixedHuge) + XCTAssertTrue(inheritedTheme.spaceFixedHuge == MockTheme.mockThemeSpaceRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenSpaceFixedJumbo() throws { + XCTAssertNotEqual(inheritedTheme.spaceFixedJumbo, abstractTheme.spaceFixedJumbo) + XCTAssertTrue(inheritedTheme.spaceFixedJumbo == MockTheme.mockThemeSpaceRawToken) + } + // MARK: - Semantic token - Spacing - Layout fluid - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableNone() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledNone() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledNone, abstractTheme.spaceScaledNone) XCTAssertTrue(inheritedTheme.spaceScaledNone.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableSmash() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledSmash() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledSmash, abstractTheme.spaceScaledSmash) XCTAssertTrue(inheritedTheme.spaceScaledSmash.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableShortest() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledShortest() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledShortest, abstractTheme.spaceScaledShortest) XCTAssertTrue(inheritedTheme.spaceScaledShortest.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableShorter() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledShorter() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledShorter, abstractTheme.spaceScaledShorter) XCTAssertTrue(inheritedTheme.spaceScaledShorter.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableShort() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledShort() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledShort, abstractTheme.spaceScaledShort) XCTAssertTrue(inheritedTheme.spaceScaledShort.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableMedium() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledMedium() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledMedium, abstractTheme.spaceScaledMedium) XCTAssertTrue(inheritedTheme.spaceScaledMedium.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableTall() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledTall() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledTall, abstractTheme.spaceScaledTall) XCTAssertTrue(inheritedTheme.spaceScaledTall.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableTaller() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledTaller() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledTaller, abstractTheme.spaceScaledTaller) XCTAssertTrue(inheritedTheme.spaceScaledTaller.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableTallest() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledTallest() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledTallest, abstractTheme.spaceScaledTallest) XCTAssertTrue(inheritedTheme.spaceScaledTallest.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } - func testInheritedThemeCanOverrideSemanticTokenSpaceLayoutAdaptableSpacious() throws { + func testInheritedThemeCanOverrideSemanticTokenSpaceScaledSpacious() throws { XCTAssertNotEqual(inheritedTheme.spaceScaledSpacious, abstractTheme.spaceScaledSpacious) XCTAssertTrue(inheritedTheme.spaceScaledSpacious.isEqual(MockTheme.mockThemeSpaceSemanticToken)) } // MARK: - Semantic token - Spacing - Padding - Padding inline - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentNone() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentNone, abstractTheme.spacePaddingInlineComponentNone) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineNone() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineNone, abstractTheme.spacePaddingInlineNone) + XCTAssertTrue(inheritedTheme.spacePaddingInlineNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentShorter() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentShorter, abstractTheme.spacePaddingInlineComponentShorter) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineShorter() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineShorter, abstractTheme.spacePaddingInlineShorter) + XCTAssertTrue(inheritedTheme.spacePaddingInlineShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentShort() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentShort, abstractTheme.spacePaddingInlineComponentShort) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineShort() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineShort, abstractTheme.spacePaddingInlineShort) + XCTAssertTrue(inheritedTheme.spacePaddingInlineShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentMedium() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentMedium, abstractTheme.spacePaddingInlineComponentMedium) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineMedium() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineMedium, abstractTheme.spacePaddingInlineMedium) + XCTAssertTrue(inheritedTheme.spacePaddingInlineMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentTall() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentTall, abstractTheme.spacePaddingInlineComponentTall) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineTall() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineTall, abstractTheme.spacePaddingInlineTall) + XCTAssertTrue(inheritedTheme.spacePaddingInlineTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentTaller() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentTaller, abstractTheme.spacePaddingInlineComponentTaller) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineTaller() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineTaller, abstractTheme.spacePaddingInlineTaller) + XCTAssertTrue(inheritedTheme.spacePaddingInlineTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsIconNone() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsIconNone, abstractTheme.spacePaddingInlineComponentIsIconNone) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsIconNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsIconNone() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsIconNone, abstractTheme.spacePaddingInlineIsIconNone) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsIconNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsIconShorter() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsIconShorter, abstractTheme.spacePaddingInlineComponentIsIconShorter) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsIconShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsIconShorter() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsIconShorter, abstractTheme.spacePaddingInlineIsIconShorter) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsIconShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsIconShort() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsIconShort, abstractTheme.spacePaddingInlineComponentIsIconShort) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsIconShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsIconShort() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsIconShort, abstractTheme.spacePaddingInlineIsIconShort) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsIconShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsIconMedium() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsIconMedium, abstractTheme.spacePaddingInlineComponentIsIconMedium) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsIconMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsIconMedium() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsIconMedium, abstractTheme.spacePaddingInlineIsIconMedium) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsIconMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsIconTall() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsIconTall, abstractTheme.spacePaddingInlineComponentIsIconTall) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsIconTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsIconTall() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsIconTall, abstractTheme.spacePaddingInlineIsIconTall) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsIconTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsIconTaller() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsIconTaller, abstractTheme.spacePaddingInlineComponentIsIconTaller) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsIconTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsIconTaller() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsIconTaller, abstractTheme.spacePaddingInlineIsIconTaller) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsIconTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsArrowNone() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsArrowNone, abstractTheme.spacePaddingInlineComponentIsArrowNone) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsArrowNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsArrowNone() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsArrowNone, abstractTheme.spacePaddingInlineIsArrowNone) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsArrowNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsArrowShorter() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsArrowShorter, abstractTheme.spacePaddingInlineComponentIsArrowShorter) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsArrowShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsArrowShorter() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsArrowShorter, abstractTheme.spacePaddingInlineIsArrowShorter) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsArrowShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsArrowShort() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsArrowShort, abstractTheme.spacePaddingInlineComponentIsArrowShort) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsArrowShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsArrowShort() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsArrowShort, abstractTheme.spacePaddingInlineIsArrowShort) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsArrowShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsArrowMedium() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsArrowMedium, abstractTheme.spacePaddingInlineComponentIsArrowMedium) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsArrowMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsArrowMedium() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsArrowMedium, abstractTheme.spacePaddingInlineIsArrowMedium) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsArrowMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsArrowTall() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsArrowTaller, abstractTheme.spacePaddingInlineComponentIsArrowTaller) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsArrowTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsArrowTall() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsArrowTaller, abstractTheme.spacePaddingInlineIsArrowTaller) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsArrowTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineComponentIsArrowTaller() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingInlineComponentIsArrowTaller, abstractTheme.spacePaddingInlineComponentIsArrowTaller) - XCTAssertTrue(inheritedTheme.spacePaddingInlineComponentIsArrowTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingInlineIsArrowTaller() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingInlineIsArrowTaller, abstractTheme.spacePaddingInlineIsArrowTaller) + XCTAssertTrue(inheritedTheme.spacePaddingInlineIsArrowTaller == MockTheme.mockThemeSpaceRawToken) } // MARK: - Semantic token - Spacing - Padding - Padding stack - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentNone() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentNone, abstractTheme.spacePaddingBlockComponentNone) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockNone() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockNone, abstractTheme.spacePaddingBlockNone) + XCTAssertTrue(inheritedTheme.spacePaddingBlockNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentShorter() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentShorter, abstractTheme.spacePaddingBlockComponentShorter) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockShorter() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockShorter, abstractTheme.spacePaddingBlockShorter) + XCTAssertTrue(inheritedTheme.spacePaddingBlockShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentShort() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentShort, abstractTheme.spacePaddingBlockComponentShort) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockShort() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockShort, abstractTheme.spacePaddingBlockShort) + XCTAssertTrue(inheritedTheme.spacePaddingBlockShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentMedium() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentMedium, abstractTheme.spacePaddingBlockComponentMedium) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockMedium() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockMedium, abstractTheme.spacePaddingBlockMedium) + XCTAssertTrue(inheritedTheme.spacePaddingBlockMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentTall() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentTall, abstractTheme.spacePaddingBlockComponentTall) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockTall() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockTall, abstractTheme.spacePaddingBlockTall) + XCTAssertTrue(inheritedTheme.spacePaddingBlockTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentTaller() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentTaller, abstractTheme.spacePaddingBlockComponentTaller) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockTaller() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockTaller, abstractTheme.spacePaddingBlockTaller) + XCTAssertTrue(inheritedTheme.spacePaddingBlockTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentIsIconNone() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentIsIconNone, abstractTheme.spacePaddingBlockComponentIsIconNone) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentIsIconNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockIsIconNone() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockIsIconNone, abstractTheme.spacePaddingBlockIsIconNone) + XCTAssertTrue(inheritedTheme.spacePaddingBlockIsIconNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentIsIconShorter() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentIsIconShorter, abstractTheme.spacePaddingBlockComponentIsIconShorter) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentIsIconShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockIsIconShorter() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockIsIconShorter, abstractTheme.spacePaddingBlockIsIconShorter) + XCTAssertTrue(inheritedTheme.spacePaddingBlockIsIconShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentIsIconShort() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentIsIconShort, abstractTheme.spacePaddingBlockComponentIsIconShort) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentIsIconShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockIsIconShort() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockIsIconShort, abstractTheme.spacePaddingBlockIsIconShort) + XCTAssertTrue(inheritedTheme.spacePaddingBlockIsIconShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentIsIconMedium() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentIsIconMedium, abstractTheme.spacePaddingBlockComponentIsIconMedium) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentIsIconMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockIsIconMedium() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockIsIconMedium, abstractTheme.spacePaddingBlockIsIconMedium) + XCTAssertTrue(inheritedTheme.spacePaddingBlockIsIconMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentIsIconTall() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentIsIconTall, abstractTheme.spacePaddingBlockComponentIsIconTall) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentIsIconTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockIsIconTall() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockIsIconTall, abstractTheme.spacePaddingBlockIsIconTall) + XCTAssertTrue(inheritedTheme.spacePaddingBlockIsIconTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockComponentIsIconTaller() throws { - XCTAssertNotEqual(inheritedTheme.spacePaddingBlockComponentIsIconTaller, abstractTheme.spacePaddingBlockComponentIsIconTaller) - XCTAssertTrue(inheritedTheme.spacePaddingBlockComponentIsIconTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpacePaddingBlockIsIconTaller() throws { + XCTAssertNotEqual(inheritedTheme.spacePaddingBlockIsIconTaller, abstractTheme.spacePaddingBlockIsIconTaller) + XCTAssertTrue(inheritedTheme.spacePaddingBlockIsIconTaller == MockTheme.mockThemeSpaceRawToken) } // MARK: - Semantic token - Spacing - Padding - Padding inset - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentNone() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentNone, abstractTheme.spaceInsetComponentNone) - XCTAssertTrue(inheritedTheme.spaceInsetComponentNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetNone() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetNone, abstractTheme.spaceInsetNone) + XCTAssertTrue(inheritedTheme.spaceInsetNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentSmash() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentSmash, abstractTheme.spaceInsetComponentSmash) - XCTAssertTrue(inheritedTheme.spaceInsetComponentSmash == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetSmash() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetSmash, abstractTheme.spaceInsetSmash) + XCTAssertTrue(inheritedTheme.spaceInsetSmash == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentShortest() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentShortest, abstractTheme.spaceInsetComponentShortest) - XCTAssertTrue(inheritedTheme.spaceInsetComponentShortest == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetShortest() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetShortest, abstractTheme.spaceInsetShortest) + XCTAssertTrue(inheritedTheme.spaceInsetShortest == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentShorter() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentShorter, abstractTheme.spaceInsetComponentShorter) - XCTAssertTrue(inheritedTheme.spaceInsetComponentShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetShorter() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetShorter, abstractTheme.spaceInsetShorter) + XCTAssertTrue(inheritedTheme.spaceInsetShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentShort() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentShort, abstractTheme.spaceInsetComponentShort) - XCTAssertTrue(inheritedTheme.spaceInsetComponentShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetShort() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetShort, abstractTheme.spaceInsetShort) + XCTAssertTrue(inheritedTheme.spaceInsetShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentMedium() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentMedium, abstractTheme.spaceInsetComponentMedium) - XCTAssertTrue(inheritedTheme.spaceInsetComponentMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetMedium() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetMedium, abstractTheme.spaceInsetMedium) + XCTAssertTrue(inheritedTheme.spaceInsetMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentTall() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentTall, abstractTheme.spaceInsetComponentTall) - XCTAssertTrue(inheritedTheme.spaceInsetComponentTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetTall() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetTall, abstractTheme.spaceInsetTall) + XCTAssertTrue(inheritedTheme.spaceInsetTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentTaller() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentTaller, abstractTheme.spaceInsetComponentTaller) - XCTAssertTrue(inheritedTheme.spaceInsetComponentTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetTaller() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetTaller, abstractTheme.spaceInsetTaller) + XCTAssertTrue(inheritedTheme.spaceInsetTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentTallest() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentTallest, abstractTheme.spaceInsetComponentTallest) - XCTAssertTrue(inheritedTheme.spaceInsetComponentTallest == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetTallest() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetTallest, abstractTheme.spaceInsetTallest) + XCTAssertTrue(inheritedTheme.spaceInsetTallest == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceInsetComponentSpacious() throws { - XCTAssertNotEqual(inheritedTheme.spaceInsetComponentSpacious, abstractTheme.spaceInsetComponentSpacious) - XCTAssertTrue(inheritedTheme.spaceInsetComponentSpacious == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceInsetSpacious() throws { + XCTAssertNotEqual(inheritedTheme.spaceInsetSpacious, abstractTheme.spaceInsetSpacious) + XCTAssertTrue(inheritedTheme.spaceInsetSpacious == MockTheme.mockThemeSpaceRawToken) } // MARK: - Semantic token - Spacing - Padding - Gap inline - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentNone() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentNone, abstractTheme.spaceColumnGapComponentNone) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapNone() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapNone, abstractTheme.spaceColumnGapNone) + XCTAssertTrue(inheritedTheme.spaceColumnGapNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentShorter() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentShorter, abstractTheme.spaceColumnGapComponentShorter) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapShorter() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapShorter, abstractTheme.spaceColumnGapShorter) + XCTAssertTrue(inheritedTheme.spaceColumnGapShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentShort() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentShort, abstractTheme.spaceColumnGapComponentShort) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapShort() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapShort, abstractTheme.spaceColumnGapShort) + XCTAssertTrue(inheritedTheme.spaceColumnGapShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentMedium() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentMedium, abstractTheme.spaceColumnGapComponentMedium) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapMedium() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapMedium, abstractTheme.spaceColumnGapMedium) + XCTAssertTrue(inheritedTheme.spaceColumnGapMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentTall() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentTall, abstractTheme.spaceColumnGapComponentTall) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapTall() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapTall, abstractTheme.spaceColumnGapTall) + XCTAssertTrue(inheritedTheme.spaceColumnGapTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentTaller() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentTaller, abstractTheme.spaceColumnGapComponentTaller) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapTaller() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapTaller, abstractTheme.spaceColumnGapTaller) + XCTAssertTrue(inheritedTheme.spaceColumnGapTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsIconNone() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsIconNone, abstractTheme.spaceColumnGapComponentIsIconNone) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsIconNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsIconNone() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsIconNone, abstractTheme.spaceColumnGapIsIconNone) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsIconNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsIconShorter() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsIconShorter, abstractTheme.spaceColumnGapComponentIsIconShorter) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsIconShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsIconShorter() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsIconShorter, abstractTheme.spaceColumnGapIsIconShorter) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsIconShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsIconShort() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsIconShort, abstractTheme.spaceColumnGapComponentIsIconShort) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsIconShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsIconShort() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsIconShort, abstractTheme.spaceColumnGapIsIconShort) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsIconShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsIconMedium() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsIconMedium, abstractTheme.spaceColumnGapComponentIsIconMedium) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsIconMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsIconMedium() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsIconMedium, abstractTheme.spaceColumnGapIsIconMedium) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsIconMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsIconTall() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsIconTall, abstractTheme.spaceColumnGapComponentIsIconTall) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsIconTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsIconTall() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsIconTall, abstractTheme.spaceColumnGapIsIconTall) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsIconTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsIconTaller() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsIconTaller, abstractTheme.spaceColumnGapComponentIsIconTaller) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsIconTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsIconTaller() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsIconTaller, abstractTheme.spaceColumnGapIsIconTaller) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsIconTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsArrowNone() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsArrowNone, abstractTheme.spaceColumnGapComponentIsArrowNone) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsArrowNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsArrowNone() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsArrowNone, abstractTheme.spaceColumnGapIsArrowNone) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsArrowNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsArrowShorter() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsArrowShorter, abstractTheme.spaceColumnGapComponentIsArrowShorter) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsArrowShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsArrowShorter() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsArrowShorter, abstractTheme.spaceColumnGapIsArrowShorter) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsArrowShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsArrowShort() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsArrowShort, abstractTheme.spaceColumnGapComponentIsArrowShort) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsArrowShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsArrowShort() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsArrowShort, abstractTheme.spaceColumnGapIsArrowShort) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsArrowShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsArrowMedium() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsArrowMedium, abstractTheme.spaceColumnGapComponentIsArrowMedium) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsArrowMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsArrowMedium() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsArrowMedium, abstractTheme.spaceColumnGapIsArrowMedium) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsArrowMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsArrowTall() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsArrowTall, abstractTheme.spaceColumnGapComponentIsArrowTall) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsArrowTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsArrowTall() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsArrowTall, abstractTheme.spaceColumnGapIsArrowTall) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsArrowTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapComponentIsArrowTaller() throws { - XCTAssertNotEqual(inheritedTheme.spaceColumnGapComponentIsArrowTaller, abstractTheme.spaceColumnGapComponentIsArrowTaller) - XCTAssertTrue(inheritedTheme.spaceColumnGapComponentIsArrowTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceColumnGapIsArrowTaller() throws { + XCTAssertNotEqual(inheritedTheme.spaceColumnGapIsArrowTaller, abstractTheme.spaceColumnGapIsArrowTaller) + XCTAssertTrue(inheritedTheme.spaceColumnGapIsArrowTaller == MockTheme.mockThemeSpaceRawToken) } // MARK: - Semantic token - Spacing - Padding - Gap stack - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentNone() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentNone, abstractTheme.spaceRowGapComponentNone) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapNone() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapNone, abstractTheme.spaceRowGapNone) + XCTAssertTrue(inheritedTheme.spaceRowGapNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentShorter() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentShorter, abstractTheme.spaceRowGapComponentShorter) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapShorter() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapShorter, abstractTheme.spaceRowGapShorter) + XCTAssertTrue(inheritedTheme.spaceRowGapShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentShort() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentShort, abstractTheme.spaceRowGapComponentShort) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapShort() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapShort, abstractTheme.spaceRowGapShort) + XCTAssertTrue(inheritedTheme.spaceRowGapShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentMedium() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentMedium, abstractTheme.spaceRowGapComponentMedium) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapMedium() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapMedium, abstractTheme.spaceRowGapMedium) + XCTAssertTrue(inheritedTheme.spaceRowGapMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentTall() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentTall, abstractTheme.spaceRowGapComponentTall) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapTall() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapTall, abstractTheme.spaceRowGapTall) + XCTAssertTrue(inheritedTheme.spaceRowGapTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentTaller() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentTaller, abstractTheme.spaceRowGapComponentTaller) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapTaller() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapTaller, abstractTheme.spaceRowGapTaller) + XCTAssertTrue(inheritedTheme.spaceRowGapTaller == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentIsIconNone() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentIsIconNone, abstractTheme.spaceRowGapComponentIsIconNone) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentIsIconNone == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapIsIconNone() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapIsIconNone, abstractTheme.spaceRowGapIsIconNone) + XCTAssertTrue(inheritedTheme.spaceRowGapIsIconNone == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentIsIconShorter() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentIsIconShorter, abstractTheme.spaceRowGapComponentIsIconShorter) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentIsIconShorter == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapIsIconShorter() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapIsIconShorter, abstractTheme.spaceRowGapIsIconShorter) + XCTAssertTrue(inheritedTheme.spaceRowGapIsIconShorter == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentIsIconShort() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentIsIconShort, abstractTheme.spaceRowGapComponentIsIconShort) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentIsIconShort == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapIsIconShort() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapIsIconShort, abstractTheme.spaceRowGapIsIconShort) + XCTAssertTrue(inheritedTheme.spaceRowGapIsIconShort == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentIsIconMedium() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentIsIconMedium, abstractTheme.spaceRowGapComponentIsIconMedium) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentIsIconMedium == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapIsIconMedium() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapIsIconMedium, abstractTheme.spaceRowGapIsIconMedium) + XCTAssertTrue(inheritedTheme.spaceRowGapIsIconMedium == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentIsIconTall() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentIsIconTall, abstractTheme.spaceRowGapComponentIsIconTall) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentIsIconTall == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapIsIconTall() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapIsIconTall, abstractTheme.spaceRowGapIsIconTall) + XCTAssertTrue(inheritedTheme.spaceRowGapIsIconTall == MockTheme.mockThemeSpaceRawToken) } - func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapComponentIsIconTaller() throws { - XCTAssertNotEqual(inheritedTheme.spaceRowGapComponentIsIconTaller, abstractTheme.spaceRowGapComponentIsIconTaller) - XCTAssertTrue(inheritedTheme.spaceRowGapComponentIsIconTaller == MockTheme.mockThemeSpaceRawToken) + func testInheritedThemeCanOverrideSemanticTokenSpaceRowGapIsIconTaller() throws { + XCTAssertNotEqual(inheritedTheme.spaceRowGapIsIconTaller, abstractTheme.spaceRowGapIsIconTaller) + XCTAssertTrue(inheritedTheme.spaceRowGapIsIconTaller == MockTheme.mockThemeSpaceRawToken) } } diff --git a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift index adb6098ba..e2a9950ef 100644 --- a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift @@ -17,165 +17,111 @@ import OUDSTokensSemantic /// Overrides some colors using values defined in extension of `ColorRawTokens` in this current module. extension InverseTheme { - public override var colorBackgroundDefaultPrimaryLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorBackgroundDefaultPrimaryDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorBackgroundDefaultPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorBackgroundDefaultSecondaryLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedMedium } - public override var colorBackgroundDefaultSecondaryDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedMedium } + public override var colorBackgroundDefaultSecondary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedMedium!) } - public override var colorBackgroundDefaultTertiaryLight: ColorSemanticToken? { sysColorBrandAttractiveHighest } - public override var colorBackgroundDefaultTertiaryDark: ColorSemanticToken? { sysColorBrandAttractiveHighest } + public override var colorBackgroundDefaultTertiary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandAttractiveHighest!) } - public override var colorBackgroundEmphasizedPrimaryLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - public override var colorBackgroundEmphasizedPrimaryDark: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } + public override var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } - public override var colorBackgroundEmphasizedSecondaryLight: ColorSemanticToken? { sysColorBrandNeutralMutedLowest } - public override var colorBackgroundEmphasizedSecondaryDark: ColorSemanticToken? { sysColorBrandNeutralMutedLowest } + public override var colorBackgroundEmphasizedSecondary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedLowest!) } - public override var colorBackgroundBrandPrimaryLight: ColorSemanticToken? { sysColorBrandPrimaryDefault } - public override var colorBackgroundBrandPrimaryDark: ColorSemanticToken? { sysColorBrandPrimaryDefault } + public override var colorBackgroundBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryDefault!) } - public override var colorBackgroundStatusAttractiveMutedLight: ColorSemanticToken? { sysColorBrandAttractiveLowest } - public override var colorBackgroundStatusAttractiveMutedDark: ColorSemanticToken? { sysColorBrandAttractiveLowest } + public override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandAttractiveLowest!) } - public override var colorBackgroundStatusAttractiveEmphasizedLight: ColorSemanticToken? { sysColorBrandWarningDefault } - public override var colorBackgroundStatusAttractiveEmphasizedDark: ColorSemanticToken? { sysColorBrandWarningDefault } + public override var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandWarningDefault!) } - public override var colorBackgroundStatusWarningMutedLight: ColorSemanticToken? { sysColorBrandWarningLowest } - public override var colorBackgroundStatusWarningMutedDark: ColorSemanticToken? { sysColorBrandWarningLowest } + public override var colorBackgroundStatusWarningMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandWarningLowest!) } - public override var colorBackgroundStatusWarningEmphasizedLight: ColorSemanticToken? { sysColorBrandWarningDefault } - public override var colorBackgroundStatusWarningEmphasizedDark: ColorSemanticToken? { sysColorBrandWarningDefault } + public override var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandWarningDefault!) } - public override var colorBackgroundStatusNegativeMutedLight: ColorSemanticToken? { sysColorBrandNegativeLowest } - public override var colorBackgroundStatusNegativeMutedDark: ColorSemanticToken? { sysColorBrandNegativeLowest } + public override var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNegativeLowest!) } - public override var colorBackgroundStatusNegativeEmphasizedLight: ColorSemanticToken? { sysColorBrandNegativeDefault } - public override var colorBackgroundStatusNegativeEmphasizedDark: ColorSemanticToken? { sysColorBrandNegativeDefault } + public override var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNegativeDefault!) } - public override var colorBackgroundStatusPositiveMutedLight: ColorSemanticToken? { sysColorBrandPositiveLowest } - public override var colorBackgroundStatusPositiveMutedDark: ColorSemanticToken? { sysColorBrandPositiveLowest } + public override var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPositiveLowest!) } - public override var colorBackgroundStatusPositiveEmphasizedLight: ColorSemanticToken? { sysColorBrandPositiveDefault } - public override var colorBackgroundStatusPositiveEmphasizedDark: ColorSemanticToken? { sysColorBrandPositiveDefault } + public override var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPositiveDefault!) } - public override var colorBackgroundStatusInformationMutedLight: ColorSemanticToken? { sysColorBrandInformationLowest } - public override var colorBackgroundStatusInformationMutedDark: ColorSemanticToken? { sysColorBrandInformationLowest } + public override var colorBackgroundStatusInformationMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandInformationLowest!) } - public override var colorBackgroundStatusInformationEmphasizedLight: ColorSemanticToken? { sysColorBrandPositiveLowest } - public override var colorBackgroundStatusInformationEmphasizedDark: ColorSemanticToken? { sysColorBrandPositiveLowest } + public override var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPositiveLowest!) } - public override var colorContentDefaultLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - public override var colorContentDefaultDark: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } + public override var colorContentDefault: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } - public override var colorContentDefaultOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorContentDefaultOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorContentMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedMedium } - public override var colorContentMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedMedium } + public override var colorContentMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedMedium!) } - public override var colorContentMutedOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedLowest } - public override var colorContentMutedOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedLowest } + public override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedLowest!) } - public override var colorContentBrandPrimaryLight: ColorSemanticToken? { sysColorBrandPrimaryLow } - public override var colorContentBrandPrimaryDark: ColorSemanticToken? { sysColorBrandPrimaryLow } + public override var colorContentBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryLow!) } - public override var colorContentBrandPrimaryOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandPrimaryDefault } - public override var colorContentBrandPrimaryOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandPrimaryDefault } + public override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryDefault!) } - public override var colorContentBrandSecondaryLight: ColorSemanticToken? { nil } - public override var colorContentBrandSecondaryDark: ColorSemanticToken? { nil } + public override var colorContentBrandSecondary: ColorSemanticToken? { nil } - public override var colorContentBrandTertiaryLight: ColorSemanticToken? { nil } - public override var colorContentBrandTertiaryDark: ColorSemanticToken? { nil } + public override var colorContentBrandTertiary: ColorSemanticToken? { nil } - public override var colorContentStatusAttractiveLight: ColorSemanticToken? { nil } - public override var colorContentStatusAttractiveDark: ColorSemanticToken? { nil } + public override var colorContentStatusAttractive: ColorSemanticToken? { nil } - public override var colorContentStatusNegativeLight: ColorSemanticToken? { sysColorBrandNegativeDefault } - public override var colorContentStatusNegativeDark: ColorSemanticToken? { sysColorBrandNegativeDefault } + public override var colorContentStatusNegative: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNegativeDefault!) } - public override var colorContentStatusPositiveLight: ColorSemanticToken? { sysColorBrandPositiveDefault } - public override var colorContentStatusPositiveDark: ColorSemanticToken? { sysColorBrandPositiveDefault } + public override var colorContentStatusPositive: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPositiveDefault!) } - public override var colorContentStatusInformationLight: ColorSemanticToken? { sysColorBrandInformationDefault } - public override var colorContentStatusInformationDark: ColorSemanticToken? { sysColorBrandInformationDefault } + public override var colorContentStatusInformation: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandInformationDefault!) } - public override var colorBorderDefaultLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedLowest } - public override var colorBorderDefaultDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedLowest } + public override var colorBorderDefault: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedLowest!) } - public override var colorBorderDefaultOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralMutedMedium } - public override var colorBorderDefaultOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedMedium } + public override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedMedium!) } - public override var colorBorderEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - public override var colorBorderEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } + public override var colorBorderEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } - public override var colorBorderEmphasizedOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorBorderEmphasizedOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorBorderBrandPrimaryLight: ColorSemanticToken? { sysColorBrandPrimaryLow } - public override var colorBorderBrandPrimaryDark: ColorSemanticToken? { sysColorBrandPrimaryLow } + public override var colorBorderBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryLow!) } - public override var colorBorderBrandPrimaryOnBackgroundEmphasizedLight: ColorSemanticToken? { sysColorBrandPrimaryDefault } - public override var colorBorderBrandPrimaryOnBackgroundEmphasizedDark: ColorSemanticToken? { sysColorBrandPrimaryDefault } + public override var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryDefault!) } - public override var colorBorderBrandSecondaryLight: ColorSemanticToken? { nil } - public override var colorBorderBrandSecondaryDark: ColorSemanticToken? { nil } + public override var colorBorderBrandSecondary: ColorSemanticToken? { nil } - public override var colorBorderBrandTertiaryLight: ColorSemanticToken? { nil } - public override var colorBorderBrandTertiaryDark: ColorSemanticToken? { nil } + public override var colorBorderBrandTertiary: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusAttractiveLight: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusAttractiveDark: ColorSemanticToken? { nil } + public override var colorBorderBrandStatusAttractive: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusWarningLight: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusWarningDark: ColorSemanticToken? { nil } + public override var colorBorderBrandStatusWarning: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusNegativeLight: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusNegativeDark: ColorSemanticToken? { nil } + public override var colorBorderBrandStatusNegative: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusPositiveLight: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusPositiveDark: ColorSemanticToken? { nil } + public override var colorBorderBrandStatusPositive: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusInformationLight: ColorSemanticToken? { nil } - public override var colorBorderBrandStatusInformationDark: ColorSemanticToken? { nil } + public override var colorBorderBrandStatusInformation: ColorSemanticToken? { nil } - public override var colorOnBackgroundPrimaryLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - public override var colorOnBackgroundPrimaryDark: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } + public override var colorOnBackgroundPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } - public override var colorOnBackgroundSecondaryLight: ColorSemanticToken? { nil } - public override var colorOnBackgroundSecondaryDark: ColorSemanticToken? { nil } + public override var colorOnBackgroundSecondary: ColorSemanticToken? { nil } - public override var colorOnBackgroundTertiaryLight: ColorSemanticToken? { nil } - public override var colorOnBackgroundTertiaryDark: ColorSemanticToken? { nil } + public override var colorOnBackgroundTertiary: ColorSemanticToken? { nil } - public override var colorOnBackgroundStatusAttractiveMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusAttractiveMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusAttractiveEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusAttractiveEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusWarningMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusWarningMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusWarningMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusWarningEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusWarningEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusNegativeMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusNegativeMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusNegativeEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } - public override var colorOnBackgroundStatusNegativeEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralMutedWhite } + public override var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } - public override var colorOnBackgroundStatusPositiveMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusPositiveMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusPositiveEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusPositiveEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusInformationMutedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusInformationMutedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusInformationMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusInformationEmphasizedLight: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } - public override var colorOnBackgroundStatusInformationEmphasizedDark: ColorSemanticToken? { sysColorBrandNeutralEmphasizedBlack } + public override var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } } diff --git a/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeColors.swift b/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeColors.swift index d5c198fb9..fb8ac37c5 100644 --- a/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeColors.swift +++ b/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeColors.swift @@ -2,13 +2,13 @@ // Software Name: OUDS iOS // SPDX-FileCopyrightText: Copyright (c) Orange SA // SPDX-License-Identifier: MIT -// +// // This software is distributed under the MIT license, // the text of which is available at https://opensource.org/license/MIT/ // or see the "LICENSE" file for more details. -// +// // Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// Software description: A SwiftUI components library with code examples for Orange Unified Design System // import XCTest @@ -26,47 +26,88 @@ final class TestInverseThemeColors: XCTestCase { } func testColorsEquality() throws { - XCTAssertEqual(inverseTheme.colorBackgroundDefaultPrimaryLight, inverseTheme.colorBackgroundDefaultPrimaryDark) - XCTAssertEqual(inverseTheme.colorBackgroundDefaultSecondaryLight, inverseTheme.colorBackgroundDefaultSecondaryDark) - XCTAssertEqual(inverseTheme.colorBackgroundDefaultTertiaryLight, inverseTheme.colorBackgroundDefaultTertiaryDark) - XCTAssertEqual(inverseTheme.colorBackgroundEmphasizedPrimaryLight, inverseTheme.colorBackgroundEmphasizedPrimaryDark) - XCTAssertEqual(inverseTheme.colorBackgroundEmphasizedSecondaryLight, inverseTheme.colorBackgroundEmphasizedSecondaryDark) - XCTAssertEqual(inverseTheme.colorBackgroundBrandPrimaryLight, inverseTheme.colorBackgroundBrandPrimaryDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusAttractiveMutedLight, inverseTheme.colorBackgroundStatusAttractiveMutedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusAttractiveEmphasizedLight, inverseTheme.colorBackgroundStatusAttractiveEmphasizedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusWarningMutedLight, inverseTheme.colorBackgroundStatusWarningMutedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusWarningEmphasizedLight, inverseTheme.colorBackgroundStatusWarningEmphasizedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusNegativeMutedLight, inverseTheme.colorBackgroundStatusNegativeMutedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusNegativeEmphasizedLight, inverseTheme.colorBackgroundStatusNegativeEmphasizedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusPositiveMutedLight, inverseTheme.colorBackgroundStatusPositiveMutedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusPositiveEmphasizedLight, inverseTheme.colorBackgroundStatusPositiveEmphasizedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusInformationMutedLight, inverseTheme.colorBackgroundStatusInformationMutedDark) - XCTAssertEqual(inverseTheme.colorBackgroundStatusInformationEmphasizedLight, inverseTheme.colorBackgroundStatusInformationEmphasizedDark) - XCTAssertEqual(inverseTheme.colorContentDefaultLight, inverseTheme.colorContentDefaultDark) - XCTAssertEqual(inverseTheme.colorContentDefaultOnBackgroundEmphasizedLight, inverseTheme.colorContentDefaultOnBackgroundEmphasizedDark) - XCTAssertEqual(inverseTheme.colorContentMutedLight, inverseTheme.colorContentMutedDark) - XCTAssertEqual(inverseTheme.colorContentMutedOnBackgroundEmphasizedLight, inverseTheme.colorContentMutedOnBackgroundEmphasizedDark) - XCTAssertEqual(inverseTheme.colorContentBrandPrimaryLight, inverseTheme.colorContentBrandPrimaryDark) - XCTAssertEqual(inverseTheme.colorContentBrandPrimaryOnBackgroundEmphasizedLight, inverseTheme.colorContentBrandPrimaryOnBackgroundEmphasizedDark) - XCTAssertEqual(inverseTheme.colorContentStatusNegativeLight, inverseTheme.colorContentStatusNegativeDark) - XCTAssertEqual(inverseTheme.colorContentStatusPositiveLight, inverseTheme.colorContentStatusPositiveDark) - XCTAssertEqual(inverseTheme.colorContentStatusInformationLight, inverseTheme.colorContentStatusInformationDark) - XCTAssertEqual(inverseTheme.colorBorderDefaultLight, inverseTheme.colorBorderDefaultDark) - XCTAssertEqual(inverseTheme.colorBorderDefaultOnBackgroundEmphasizedLight, inverseTheme.colorBorderDefaultOnBackgroundEmphasizedDark) - XCTAssertEqual(inverseTheme.colorBorderEmphasizedLight, inverseTheme.colorBorderEmphasizedDark) - XCTAssertEqual(inverseTheme.colorBorderEmphasizedOnBackgroundEmphasizedLight, inverseTheme.colorBorderEmphasizedOnBackgroundEmphasizedDark) - XCTAssertEqual(inverseTheme.colorBorderBrandPrimaryLight, inverseTheme.colorBorderBrandPrimaryDark) - XCTAssertEqual(inverseTheme.colorBorderBrandPrimaryOnBackgroundEmphasizedLight, inverseTheme.colorBorderBrandPrimaryOnBackgroundEmphasizedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundPrimaryLight, inverseTheme.colorOnBackgroundPrimaryDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusAttractiveMutedLight, inverseTheme.colorOnBackgroundStatusAttractiveMutedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusAttractiveEmphasizedLight, inverseTheme.colorOnBackgroundStatusAttractiveEmphasizedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusWarningMutedLight, inverseTheme.colorOnBackgroundStatusWarningMutedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusWarningEmphasizedLight, inverseTheme.colorOnBackgroundStatusWarningEmphasizedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusNegativeMutedLight, inverseTheme.colorOnBackgroundStatusNegativeMutedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusNegativeEmphasizedLight, inverseTheme.colorOnBackgroundStatusNegativeEmphasizedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusPositiveMutedLight, inverseTheme.colorOnBackgroundStatusPositiveMutedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusPositiveEmphasizedLight, inverseTheme.colorOnBackgroundStatusPositiveEmphasizedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusInformationMutedLight, inverseTheme.colorOnBackgroundStatusInformationMutedDark) - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusInformationEmphasizedLight, inverseTheme.colorOnBackgroundStatusInformationEmphasizedDark) + XCTAssertEqual(inverseTheme.colorBackgroundDefaultPrimary!.light, inverseTheme.colorBackgroundDefaultPrimary!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundDefaultSecondary!.light, inverseTheme.colorBackgroundDefaultSecondary!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundDefaultTertiary!.light, inverseTheme.colorBackgroundDefaultTertiary!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundEmphasizedPrimary!.light, inverseTheme.colorBackgroundEmphasizedPrimary!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundEmphasizedSecondary!.light, inverseTheme.colorBackgroundEmphasizedSecondary!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundBrandPrimary!.light, inverseTheme.colorBackgroundBrandPrimary!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusAttractiveMuted!.light, inverseTheme.colorBackgroundStatusAttractiveMuted!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusAttractiveEmphasized!.light, inverseTheme.colorBackgroundStatusAttractiveEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusWarningMuted!.light, inverseTheme.colorBackgroundStatusWarningMuted!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusWarningEmphasized!.light, inverseTheme.colorBackgroundStatusWarningEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusNegativeMuted!.light, inverseTheme.colorBackgroundStatusNegativeMuted!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusNegativeEmphasized!.light, inverseTheme.colorBackgroundStatusNegativeEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusPositiveMuted!.light, inverseTheme.colorBackgroundStatusPositiveMuted!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusPositiveEmphasized!.light, inverseTheme.colorBackgroundStatusPositiveEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusInformationMuted!.light, inverseTheme.colorBackgroundStatusInformationMuted!.dark) + + XCTAssertEqual(inverseTheme.colorBackgroundStatusInformationEmphasized!.light, inverseTheme.colorBackgroundStatusInformationEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorContentDefault!.light, inverseTheme.colorContentDefault!.dark) + + XCTAssertEqual(inverseTheme.colorContentDefaultOnBackgroundEmphasized!.light, inverseTheme.colorContentDefaultOnBackgroundEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorContentMuted!.light, inverseTheme.colorContentMuted!.dark) + + XCTAssertEqual(inverseTheme.colorContentMutedOnBackgroundEmphasized!.light, inverseTheme.colorContentMutedOnBackgroundEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorContentBrandPrimary!.light, inverseTheme.colorContentBrandPrimary!.dark) + + XCTAssertEqual(inverseTheme.colorContentBrandPrimaryOnBackgroundEmphasized!.light, inverseTheme.colorContentBrandPrimaryOnBackgroundEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorContentStatusNegative!.light, inverseTheme.colorContentStatusNegative!.dark) + + XCTAssertEqual(inverseTheme.colorContentStatusPositive!.light, inverseTheme.colorContentStatusPositive!.dark) + + XCTAssertEqual(inverseTheme.colorContentStatusInformation!.light, inverseTheme.colorContentStatusInformation!.dark) + + XCTAssertEqual(inverseTheme.colorBorderDefault!.light, inverseTheme.colorBorderDefault!.dark) + + XCTAssertEqual(inverseTheme.colorBorderDefaultOnBackgroundEmphasized!.light, inverseTheme.colorBorderDefaultOnBackgroundEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorBorderEmphasized!.light, inverseTheme.colorBorderEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorBorderEmphasizedOnBackgroundEmphasized!.light, inverseTheme.colorBorderEmphasizedOnBackgroundEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorBorderBrandPrimary!.light, inverseTheme.colorBorderBrandPrimary!.dark) + + XCTAssertEqual(inverseTheme.colorBorderBrandPrimaryOnBackgroundEmphasized!.light, inverseTheme.colorBorderBrandPrimaryOnBackgroundEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundPrimary!.light, inverseTheme.colorOnBackgroundPrimary!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusAttractiveMuted!.light, inverseTheme.colorOnBackgroundStatusAttractiveMuted!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusAttractiveEmphasized!.light, inverseTheme.colorOnBackgroundStatusAttractiveEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusWarningMuted!.light, inverseTheme.colorOnBackgroundStatusWarningMuted!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusWarningEmphasized!.light, inverseTheme.colorOnBackgroundStatusWarningEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusNegativeMuted!.light, inverseTheme.colorOnBackgroundStatusNegativeMuted!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusNegativeEmphasized!.light, inverseTheme.colorOnBackgroundStatusNegativeEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusPositiveMuted!.light, inverseTheme.colorOnBackgroundStatusPositiveMuted!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusPositiveEmphasized!.light, inverseTheme.colorOnBackgroundStatusPositiveEmphasized!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusInformationMuted!.light, inverseTheme.colorOnBackgroundStatusInformationMuted!.dark) + + XCTAssertEqual(inverseTheme.colorOnBackgroundStatusInformationEmphasized!.light, inverseTheme.colorOnBackgroundStatusInformationEmphasized!.dark) } } diff --git a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift index 4d5e10527..1abcbeebf 100644 --- a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift +++ b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift @@ -27,15 +27,12 @@ public protocol ButtonsComponentTokens { var buttonInternalSpacing: SpacingPaddingInlineSemanticToken { get } var buttonBorderStyle: BorderStyleSemanticToken { get } - var buttonBorderColorLight: ColorSemanticToken { get } - var buttonBorderColorDark: ColorSemanticToken { get } + var buttonBorderColor: ColorSemanticToken { get } var buttonBorderWidth: BorderWidthSemanticToken { get } var buttonBorderRadius: BorderRadiusSemanticToken { get } - var buttonForegroundColorLight: ColorSemanticToken { get } - var buttonForegroundColorDark: ColorSemanticToken { get } - var buttonBackgroundColorLight: ColorSemanticToken { get } - var buttonBackgroundColorDark: ColorSemanticToken { get } + var buttonForegroundColor: ColorSemanticToken { get } + var buttonBackgroundColor: ColorSemanticToken { get } var buttonWidth: SizingSemanticToken { get } var buttonHeight: SizingSemanticToken { get } diff --git a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/FormsTextInputComponentTokens.swift b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/FormsTextInputComponentTokens.swift index 6bf0f8040..2902b5dcd 100644 --- a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/FormsTextInputComponentTokens.swift +++ b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/FormsTextInputComponentTokens.swift @@ -26,8 +26,7 @@ public protocol FormsTextInputComponentTokens { var ftiSubtitleFontSize: TypographyFontSizeSemanticToken { get } var ftiSubtitleColor: ColorSemanticToken { get } - var ftiBackgroundColorLight: ColorSemanticToken { get } - var ftiBackgroundColorDark: ColorSemanticToken { get } + var ftiBackgroundColor: ColorSemanticToken { get } var ftiBorderColor: ColorSemanticToken { get } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift index 17d25bc99..c4827e289 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift @@ -15,33 +15,30 @@ /// Should be fully generated in the future. extension BorderRawTokens { - // Double type because used below for computations with Double values - private static let borderBase: Double = 4 - // MARK: Primitive token - Border - Width - public static let borderWidth0: BorderWidthRawToken = borderBase * 0 - public static let borderWidth25: BorderWidthRawToken = borderBase * 0.25 - public static let borderWidth50: BorderWidthRawToken = borderBase * 0.5 - public static let borderWidth75: BorderWidthRawToken = borderBase * 0.75 - public static let borderWidth100: BorderWidthRawToken = borderBase * 1 - public static let borderWidth150: BorderWidthRawToken = borderBase * 1.5 - public static let borderWidth200: BorderWidthRawToken = borderBase * 2 + public static let borderWidth0: BorderWidthRawToken = 4 * 0 + public static let borderWidth25: BorderWidthRawToken = 4 * 0.25 + public static let borderWidth50: BorderWidthRawToken = 4 * 0.5 + public static let borderWidth75: BorderWidthRawToken = 4 * 0.75 + public static let borderWidth100: BorderWidthRawToken = 4 * 1 + public static let borderWidth150: BorderWidthRawToken = 4 * 1.5 + public static let borderWidth200: BorderWidthRawToken = 4 * 2 // MARK: Primitive token - Border - Radius - public static let borderRadius0: BorderRadiusRawToken = borderBase * 0 - public static let borderRadius25: BorderRadiusRawToken = borderBase * 0.25 - public static let borderRadius50: BorderRadiusRawToken = borderBase * 0.5 - public static let borderRadius75: BorderRadiusRawToken = borderBase * 0.75 - public static let borderRadius100: BorderRadiusRawToken = borderBase * 1 - public static let borderRadius150: BorderRadiusRawToken = borderBase * 1.5 - public static let borderRadius200: BorderRadiusRawToken = borderBase * 2 - public static let borderRadius300: BorderRadiusRawToken = borderBase * 3 - public static let borderRadius400: BorderRadiusRawToken = borderBase * 4 - public static let borderRadius500: BorderRadiusRawToken = borderBase * 5 - public static let borderRadius600: BorderRadiusRawToken = borderBase * 6 - public static let borderRadius800: BorderRadiusRawToken = borderBase * 8 + public static let borderRadius0: BorderRadiusRawToken = 4 * 0 + public static let borderRadius25: BorderRadiusRawToken = 4 * 0.25 + public static let borderRadius50: BorderRadiusRawToken = 4 * 0.5 + public static let borderRadius75: BorderRadiusRawToken = 4 * 0.75 + public static let borderRadius100: BorderRadiusRawToken = 4 * 1 + public static let borderRadius150: BorderRadiusRawToken = 4 * 1.5 + public static let borderRadius200: BorderRadiusRawToken = 4 * 2 + public static let borderRadius300: BorderRadiusRawToken = 4 * 3 + public static let borderRadius400: BorderRadiusRawToken = 4 * 4 + public static let borderRadius500: BorderRadiusRawToken = 4 * 5 + public static let borderRadius600: BorderRadiusRawToken = 4 * 6 + public static let borderRadius800: BorderRadiusRawToken = 4 * 8 // MARK: Primitive token - Border - Style diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/DimenRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/DimenRawTokens+Values.swift deleted file mode 100644 index 925062f7e..000000000 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/DimenRawTokens+Values.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// Software Name: OUDS iOS -// SPDX-FileCopyrightText: Copyright (c) Orange SA -// SPDX-License-Identifier: MIT -// -// This software is distributed under the MIT license, -// the text of which is available at https://opensource.org/license/MIT/ -// or see the "LICENSE" file for more details. -// -// Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System -// - -/// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. -/// Should be fully generated in the future. -extension DimensionRawTokens { - - public static let dimensionBase: DimensionRawToken = 4 - - // MARK: Primitive token - Dimension - - public static let dimension0: DimensionRawToken = dimensionBase * 0 - public static let dimension25: DimensionRawToken = dimensionBase * 0.5 - public static let dimension50: DimensionRawToken = dimensionBase * 1 - public static let dimension75: DimensionRawToken = dimensionBase * 1.5 - public static let dimension100: DimensionRawToken = dimensionBase * 2 - public static let dimension150: DimensionRawToken = dimensionBase * 3 - public static let dimension200: DimensionRawToken = dimensionBase * 4 - public static let dimension250: DimensionRawToken = dimensionBase * 5 - public static let dimension300: DimensionRawToken = dimensionBase * 6 - public static let dimension350: DimensionRawToken = dimensionBase * 7 - public static let dimension400: DimensionRawToken = dimensionBase * 8 - public static let dimension450: DimensionRawToken = dimensionBase * 9 - public static let dimension500: DimensionRawToken = dimensionBase * 10 - public static let dimension550: DimensionRawToken = dimensionBase * 11 - public static let dimension600: DimensionRawToken = dimensionBase * 12 - public static let dimension650: DimensionRawToken = dimensionBase * 13 - public static let dimension700: DimensionRawToken = dimensionBase * 14 - public static let dimension750: DimensionRawToken = dimensionBase * 15 - public static let dimension800: DimensionRawToken = dimensionBase * 16 - public static let dimension900: DimensionRawToken = dimensionBase * 18 - public static let dimension1000: DimensionRawToken = dimensionBase * 20 - public static let dimension1200: DimensionRawToken = dimensionBase * 24 - public static let dimension1400: DimensionRawToken = dimensionBase * 28 - public static let dimension1600: DimensionRawToken = dimensionBase * 32 - public static let dimension1800: DimensionRawToken = dimensionBase * 36 - public static let dimension2000: DimensionRawToken = dimensionBase * 40 - public static let dimension3000: DimensionRawToken = dimensionBase * 80 - public static let dimension4000: DimensionRawToken = dimensionBase * 120 - public static let dimension5000: DimensionRawToken = dimensionBase * 140 - public static let dimension6000: DimensionRawToken = dimensionBase * 160 - public static let dimension7000: DimensionRawToken = dimensionBase * 180 - public static let dimension9000: DimensionRawToken = dimensionBase * 220 - public static let dimension11000: DimensionRawToken = dimensionBase * 260 -} diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift new file mode 100644 index 000000000..dc3ce1653 --- /dev/null +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift @@ -0,0 +1,53 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +/// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. +/// Should be fully generated in the future. +extension DimensionRawTokens { + + // MARK: Primitive token - Dimension + + public static let dimension0: DimensionRawToken = 4 * 0 + public static let dimension25: DimensionRawToken = 4 * 0.5 + public static let dimension50: DimensionRawToken = 4 * 1 + public static let dimension75: DimensionRawToken = 4 * 1.5 + public static let dimension100: DimensionRawToken = 4 * 2 + public static let dimension150: DimensionRawToken = 4 * 3 + public static let dimension200: DimensionRawToken = 4 * 4 + public static let dimension250: DimensionRawToken = 4 * 5 + public static let dimension300: DimensionRawToken = 4 * 6 + public static let dimension350: DimensionRawToken = 4 * 7 + public static let dimension400: DimensionRawToken = 4 * 8 + public static let dimension450: DimensionRawToken = 4 * 9 + public static let dimension500: DimensionRawToken = 4 * 10 + public static let dimension550: DimensionRawToken = 4 * 11 + public static let dimension600: DimensionRawToken = 4 * 12 + public static let dimension650: DimensionRawToken = 4 * 13 + public static let dimension700: DimensionRawToken = 4 * 14 + public static let dimension750: DimensionRawToken = 4 * 15 + public static let dimension800: DimensionRawToken = 4 * 16 + public static let dimension900: DimensionRawToken = 4 * 18 + public static let dimension1000: DimensionRawToken = 4 * 20 + public static let dimension1200: DimensionRawToken = 4 * 24 + public static let dimension1400: DimensionRawToken = 4 * 28 + public static let dimension1600: DimensionRawToken = 4 * 32 + public static let dimension1800: DimensionRawToken = 4 * 36 + public static let dimension2000: DimensionRawToken = 4 * 40 + public static let dimension3000: DimensionRawToken = 4 * 80 + public static let dimension4000: DimensionRawToken = 4 * 120 + public static let dimension5000: DimensionRawToken = 4 * 140 + public static let dimension6000: DimensionRawToken = 4 * 160 + public static let dimension7000: DimensionRawToken = 4 * 180 + public static let dimension9000: DimensionRawToken = 4 * 220 + public static let dimension11000: DimensionRawToken = 4 * 260 +} diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift index 0703e94cd..37acc3183 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift @@ -18,7 +18,6 @@ extension ElevationRawTokens { // MARK: Primitive token - Elevation - X public static let elevationX0: ElevationRawToken = 0 - public static let elevationX200: ElevationRawToken = 2 // MARK: Primitive token - Elevation - Y diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift index ab813cf82..4e06dd50e 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift @@ -15,8 +15,6 @@ /// Should be fully generated in the future. extension GridRawTokens { - private static let dimensionBase: GridRawToken = 4 - // MARK: Primitive token - Grid - Design width public static let gridWidth100: GridRawToken = 320 @@ -59,27 +57,27 @@ extension GridRawTokens { // MARK: Primitive token - Grid - Margin - public static let gridMargin100: GridRawToken = dimensionBase * 4 - public static let gridMargin300: GridRawToken = dimensionBase * 6 - public static let gridMargin400: GridRawToken = dimensionBase * 7 - public static let gridMargin500: GridRawToken = dimensionBase * 8 - public static let gridMargin600: GridRawToken = dimensionBase * 9 - public static let gridMargin700: GridRawToken = dimensionBase * 10 - public static let gridMargin900: GridRawToken = dimensionBase * 12 - public static let gridMargin1000: GridRawToken = dimensionBase * 13 - public static let gridMargin1100: GridRawToken = dimensionBase * 14 - public static let gridMargin1700: GridRawToken = dimensionBase * 20 - public static let gridMargin2500: GridRawToken = dimensionBase * 28 + public static let gridMargin100: GridRawToken = 4 * 4 + public static let gridMargin300: GridRawToken = 4 * 6 + public static let gridMargin400: GridRawToken = 4 * 7 + public static let gridMargin500: GridRawToken = 4 * 8 + public static let gridMargin600: GridRawToken = 4 * 9 + public static let gridMargin700: GridRawToken = 4 * 10 + public static let gridMargin900: GridRawToken = 4 * 12 + public static let gridMargin1000: GridRawToken = 4 * 13 + public static let gridMargin1100: GridRawToken = 4 * 14 + public static let gridMargin1700: GridRawToken = 4 * 20 + public static let gridMargin2500: GridRawToken = 4 * 28 // MARK: Primitive token - Grid - Column gap - public static let gridColumnGap10: GridRawToken = dimensionBase * 0.25 - public static let gridColumnGap100: GridRawToken = dimensionBase * 2 - public static let gridColumnGap200: GridRawToken = dimensionBase * 4 - public static let gridColumnGap300: GridRawToken = dimensionBase * 5 - public static let gridColumnGap400: GridRawToken = dimensionBase * 6 - public static let gridColumnGap600: GridRawToken = dimensionBase * 8 - public static let gridColumnGap700: GridRawToken = dimensionBase * 10 + public static let gridColumnGap10: GridRawToken = 4 * 0.25 + public static let gridColumnGap100: GridRawToken = 4 * 2 + public static let gridColumnGap200: GridRawToken = 4 * 4 + public static let gridColumnGap300: GridRawToken = 4 * 5 + public static let gridColumnGap400: GridRawToken = 4 * 6 + public static let gridColumnGap600: GridRawToken = 4 * 8 + public static let gridColumnGap700: GridRawToken = 4 * 10 // MARK: Primitive token - Grid - Column count diff --git a/OUDS/Core/Tokens/RawTokens/Tests/BorderRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/BorderRawTokensTests.swift index 932b50d9f..4678d486d 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/BorderRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/BorderRawTokensTests.swift @@ -21,8 +21,10 @@ import OUDSTokensRaw /// Thus this tests class just checks if such relationships are still here whatever the values at the end. final class BorderRawTokensTests: XCTestCase { - // Curent value of BorderRawTokens.borderBase - static let borderRawTokensBorderBase = 4 + // In the global design system, there is a "border base" defined as 4 as a factor of any other token value. + // This value does not appear in the Swift code generated by the parser from Figma JSON. + // But we can still check this truth is still applied. + private static let borderRawTokensBorderBase = 4 // MARK: - Primitive token - Border - Width diff --git a/OUDS/Core/Tokens/RawTokens/Tests/DimensionRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/DimensionRawTokensTests.swift index 50874f9ac..68a9d52bc 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/DimensionRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/DimensionRawTokensTests.swift @@ -21,8 +21,10 @@ import OUDSTokensRaw /// Thus this tests class just checks if such relationships are still here whatever the values at the end. final class DimensionRawTokensTests: XCTestCase { - // Curent value of DimensionRawTokens.dimensionBase - static let dimensionRawTokensDimensionBase = 4 + // In the global design system, there is a "dimension base" defined as 4 as a factor of any other token value. + // This value does not appear in the Swift code generated by the parser from Figma JSON. + // But we can still check this truth is still applied. + private static let dimensionRawTokensDimensionBase = 4 func testDimensionRawToken0LessThan25() throws { XCTAssertLessThan(DimensionRawTokens.dimension0, DimensionRawTokens.dimension25) diff --git a/OUDS/Core/Tokens/RawTokens/Tests/ElevationRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/ElevationRawTokensTests.swift index b1d6737d8..75d4f5449 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/ElevationRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/ElevationRawTokensTests.swift @@ -62,12 +62,6 @@ final class ElevationRawTokensTests: XCTestCase { XCTAssertTrue(radius == 6) } - // MARK: - Primitive token - Elevation - X - - func testElevationXRawToken0LessThanX200() throws { - XCTAssertLessThan(ElevationRawTokens.elevationX0, ElevationRawTokens.elevationX200) - } - // MARK: - Primitive token - Elevation - Y func testElevationYRawToken0LessThanY100() throws { diff --git a/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift index 6361d3821..0d6cc7475 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift @@ -21,8 +21,10 @@ import OUDSTokensRaw /// Thus this tests class just checks if such relationships are still here whatever the values at the end. final class GridRawTokensTests: XCTestCase { - // Curent value ofGridRawTokens.dimensionBase - static let gridRawTokensDimensionBase = 4 + // In the global design system, there is a "dimension base" defined as 4 as a factor of any other token value. + // This value does not appear in the Swift code generated by the parser from Figma JSON. + // But we can still check this truth is still applied. + private static let gridRawTokensDimensionBase = 4 // MARK: - Primitive token - Grid - Design Width diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/ColorSemanticTokens+Composites.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/ColorSemanticTokens+Composites.swift new file mode 100644 index 000000000..483baa772 --- /dev/null +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/ColorSemanticTokens+Composites.swift @@ -0,0 +1,73 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import Foundation +import OUDSTokensRaw +import OUDSFoundations + +/// Composite semantic tokens which will wrap a combination of `ColorRawToken` depending to color scheme +public final class ColorCompositeSemanticToken: NSObject { + + /// For **light** mode scheme + public let light: ColorRawToken + + /// For **dark** mode scheme + public let dark: ColorRawToken + + /// Initializes a new color composite semantic token with the same value for light and dark modes + /// - Parameter value: The `ColorRawToken` to apply wether the device is in *light* and *dark* mode + public init(_ value: ColorRawToken) { + self.light = value + self.dark = value + } + + /// Initializes a new color composite semantic token with the same value for light and dark modes, + /// which can be `nil` (because for example use of optional `ColorAliasSemanticToken`) + /// - Parameter value: The `ColorRawToken` to apply wether the device is in *light* and *dark* mode + public convenience init?(_ value: ColorRawToken?) { + guard let value = value else { + OUDSLogger.error("Tried to define a ColorCompositeSemanticToken with a nil unique value!") + return nil + } + self.init(value) + } + + /// Initializes a new color composite semantic token with two values + /// - Parameters: + /// - light: The `ColorRawToken` to apply if device in *light* mode + /// - dark: The `ColorRawToken` to apply if device in *dark* mode + public init(light: ColorRawToken, dark: ColorRawToken) { + self.light = light + self.dark = dark + } + + /// Initializes a new color composite semantic token with two values which can be `nil` (because for example use of optional `ColorAliasSemanticToken`) + /// - Parameters: + /// - light: The `ColorRawToken` to apply if device in *light* mode + /// - dark: The `ColorRawToken` to apply if device in *dark* mode + public convenience init?(light: ColorRawToken?, dark: ColorRawToken?) { + guard let light = light, let dark = dark else { + OUDSLogger.error("Tried to define a ColorCompositeSemanticToken with at least one nil value! (light = '\(light ?? "nil")', dark = '\(dark ?? "nil")')") + return nil + } + self.init(light: light, dark: dark) + } + + /// Returns `true` if `self` and `object` has the same `light` and `dark` values and with `object` + /// as a `ColorCompositeSemanticToken`. Otherwise returns `false`. + /// `isEqual` override is preferred for `NSObject`. + public override func isEqual(_ object: Any?) -> Bool { + guard let other = object as? ColorCompositeSemanticToken else { return false } + return self.light == other.light && self.dark == other.dark + } +} diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SpacingSemanticTokens+Composites.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SpacingSemanticTokens+Composites.swift index ac0a91606..0696f5711 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SpacingSemanticTokens+Composites.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SpacingSemanticTokens+Composites.swift @@ -6,7 +6,7 @@ // This software is distributed under the MIT license, // the text of which is available at https://opensource.org/license/MIT/ // or see the "LICENSE" file for more details. -// ww +// // Authors: See CONTRIBUTORS.txt // Software description: A SwiftUI components library with code examples for Orange Unified Design System // diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ColorSemanticTokens+Aliases.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ColorSemanticTokens+Aliases.swift index 433d13761..beadc2e81 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ColorSemanticTokens+Aliases.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ColorSemanticTokens+Aliases.swift @@ -14,7 +14,7 @@ import OUDSTokensRaw /// Basically a semantic color token, which can be either a functional or a decorative token, is a `String`, to keep grammar clean and clear with design system grammar. -public typealias ColorSemanticToken = ColorRawToken +public typealias ColorSemanticToken = ColorCompositeSemanticToken /// The global design system tool defines aliases of semantic colors token as semantic color tokens, to keep grammar clean and clear with design system grammar. -public typealias ColorAliasSemanticToken = ColorSemanticToken +public typealias ColorAliasSemanticToken = ColorRawToken diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift index c2a7a74d4..ba522daaa 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift @@ -121,280 +121,225 @@ public protocol ColorSemanticTokens { // MARK: Semantic token - Colors - Background - Default - Primary - var colorBackgroundDefaultPrimaryLight: ColorSemanticToken? { get } - var colorBackgroundDefaultPrimaryDark: ColorSemanticToken? { get } + var colorBackgroundDefaultPrimary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Default - Secondary - var colorBackgroundDefaultSecondaryLight: ColorSemanticToken? { get } - var colorBackgroundDefaultSecondaryDark: ColorSemanticToken? { get } + var colorBackgroundDefaultSecondary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Default - Tertiary - var colorBackgroundDefaultTertiaryLight: ColorSemanticToken? { get } - var colorBackgroundDefaultTertiaryDark: ColorSemanticToken? { get } + var colorBackgroundDefaultTertiary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Emphasized - Primary - var colorBackgroundEmphasizedPrimaryLight: ColorSemanticToken? { get } - var colorBackgroundEmphasizedPrimaryDark: ColorSemanticToken? { get } + var colorBackgroundEmphasizedPrimary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Emphasized - Secondary - var colorBackgroundEmphasizedSecondaryLight: ColorSemanticToken? { get } - var colorBackgroundEmphasizedSecondaryDark: ColorSemanticToken? { get } + var colorBackgroundEmphasizedSecondary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Brand - Primary - var colorBackgroundBrandPrimaryLight: ColorSemanticToken? { get } - var colorBackgroundBrandPrimaryDark: ColorSemanticToken? { get } + var colorBackgroundBrandPrimary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Brand - Secondary - var colorBackgroundBrandSecondary: ColorSemanticToken? { get } + var colorBackgroundBrandSecondary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Brand - Tertiary - var colorBackgroundBrandTertiary: ColorSemanticToken? { get } + var colorBackgroundBrandTertiary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Attractive - Muted - var colorBackgroundStatusAttractiveMutedLight: ColorSemanticToken? { get } - var colorBackgroundStatusAttractiveMutedDark: ColorSemanticToken? { get } + var colorBackgroundStatusAttractiveMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized - var colorBackgroundStatusAttractiveEmphasizedLight: ColorSemanticToken? { get } - var colorBackgroundStatusAttractiveEmphasizedDark: ColorSemanticToken? { get } + var colorBackgroundStatusAttractiveEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Warning - Muted - var colorBackgroundStatusWarningMutedLight: ColorSemanticToken? { get } - var colorBackgroundStatusWarningMutedDark: ColorSemanticToken? { get } + var colorBackgroundStatusWarningMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized - var colorBackgroundStatusWarningEmphasizedLight: ColorSemanticToken? { get } - var colorBackgroundStatusWarningEmphasizedDark: ColorSemanticToken? { get } + var colorBackgroundStatusWarningEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Negative - Muted - var colorBackgroundStatusNegativeMutedLight: ColorSemanticToken? { get } - var colorBackgroundStatusNegativeMutedDark: ColorSemanticToken? { get } + var colorBackgroundStatusNegativeMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized - var colorBackgroundStatusNegativeEmphasizedLight: ColorSemanticToken? { get } - var colorBackgroundStatusNegativeEmphasizedDark: ColorSemanticToken? { get } + var colorBackgroundStatusNegativeEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Positive - Muted - var colorBackgroundStatusPositiveMutedLight: ColorSemanticToken? { get } - var colorBackgroundStatusPositiveMutedDark: ColorSemanticToken? { get } + var colorBackgroundStatusPositiveMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized - var colorBackgroundStatusPositiveEmphasizedLight: ColorSemanticToken? { get } - var colorBackgroundStatusPositiveEmphasizedDark: ColorSemanticToken? { get } + var colorBackgroundStatusPositiveEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Information - Muted - var colorBackgroundStatusInformationMutedLight: ColorSemanticToken? { get } - var colorBackgroundStatusInformationMutedDark: ColorSemanticToken? { get } + var colorBackgroundStatusInformationMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Background - Status - Information - Emphasized - var colorBackgroundStatusInformationEmphasizedLight: ColorSemanticToken? { get } - var colorBackgroundStatusInformationEmphasizedDark: ColorSemanticToken? { get } + var colorBackgroundStatusInformationEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Default - var colorContentDefaultLight: ColorSemanticToken? { get } - var colorContentDefaultDark: ColorSemanticToken? { get } + var colorContentDefault: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Default - On background emphasized - var colorContentDefaultOnBackgroundEmphasizedLight: ColorSemanticToken? { get } - var colorContentDefaultOnBackgroundEmphasizedDark: ColorSemanticToken? { get } + var colorContentDefaultOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Muted - var colorContentMutedLight: ColorSemanticToken? { get } - var colorContentMutedDark: ColorSemanticToken? { get } + var colorContentMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Muted - On background emphasized - var colorContentMutedOnBackgroundEmphasizedLight: ColorSemanticToken? { get } - var colorContentMutedOnBackgroundEmphasizedDark: ColorSemanticToken? { get } + var colorContentMutedOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Brand - Primary - var colorContentBrandPrimaryLight: ColorSemanticToken? { get } - var colorContentBrandPrimaryDark: ColorSemanticToken? { get } + var colorContentBrandPrimary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized - var colorContentBrandPrimaryOnBackgroundEmphasizedLight: ColorSemanticToken? { get } - var colorContentBrandPrimaryOnBackgroundEmphasizedDark: ColorSemanticToken? { get } + var colorContentBrandPrimaryOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Brand - Secondary - var colorContentBrandSecondaryLight: ColorSemanticToken? { get } - var colorContentBrandSecondaryDark: ColorSemanticToken? { get } + var colorContentBrandSecondary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Brand - Tertiary - var colorContentBrandTertiaryLight: ColorSemanticToken? { get } - var colorContentBrandTertiaryDark: ColorSemanticToken? { get } + var colorContentBrandTertiary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Status - Attractive - var colorContentStatusAttractiveLight: ColorSemanticToken? { get } - var colorContentStatusAttractiveDark: ColorSemanticToken? { get } + var colorContentStatusAttractive: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Status - Negative - var colorContentStatusNegativeLight: ColorSemanticToken? { get } - var colorContentStatusNegativeDark: ColorSemanticToken? { get } + var colorContentStatusNegative: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Status - Positive - var colorContentStatusPositiveLight: ColorSemanticToken? { get } - var colorContentStatusPositiveDark: ColorSemanticToken? { get } + var colorContentStatusPositive: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Content - Status - Information - var colorContentStatusInformationLight: ColorSemanticToken? { get } - var colorContentStatusInformationDark: ColorSemanticToken? { get } + var colorContentStatusInformation: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Default - var colorBorderDefaultLight: ColorSemanticToken? { get } - var colorBorderDefaultDark: ColorSemanticToken? { get } + var colorBorderDefault: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Default - On background emphasized - var colorBorderDefaultOnBackgroundEmphasizedLight: ColorSemanticToken? { get } - var colorBorderDefaultOnBackgroundEmphasizedDark: ColorSemanticToken? { get } + var colorBorderDefaultOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Emphasized - var colorBorderEmphasizedLight: ColorSemanticToken? { get } - var colorBorderEmphasizedDark: ColorSemanticToken? { get } + var colorBorderEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized - var colorBorderEmphasizedOnBackgroundEmphasizedLight: ColorSemanticToken? { get } - var colorBorderEmphasizedOnBackgroundEmphasizedDark: ColorSemanticToken? { get } + var colorBorderEmphasizedOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Brand - Primary - var colorBorderBrandPrimaryLight: ColorSemanticToken? { get } - var colorBorderBrandPrimaryDark: ColorSemanticToken? { get } + var colorBorderBrandPrimary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized - var colorBorderBrandPrimaryOnBackgroundEmphasizedLight: ColorSemanticToken? { get } - var colorBorderBrandPrimaryOnBackgroundEmphasizedDark: ColorSemanticToken? { get } + var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Brand - Secondary - var colorBorderBrandSecondaryLight: ColorSemanticToken? { get } - var colorBorderBrandSecondaryDark: ColorSemanticToken? { get } + var colorBorderBrandSecondary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Brand - Tertiary - var colorBorderBrandTertiaryLight: ColorSemanticToken? { get } - var colorBorderBrandTertiaryDark: ColorSemanticToken? { get } + var colorBorderBrandTertiary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Status - Attractive - var colorBorderBrandStatusAttractiveLight: ColorSemanticToken? { get } - var colorBorderBrandStatusAttractiveDark: ColorSemanticToken? { get } + var colorBorderBrandStatusAttractive: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Status - Warning - var colorBorderBrandStatusWarningLight: ColorSemanticToken? { get } - var colorBorderBrandStatusWarningDark: ColorSemanticToken? { get } + var colorBorderBrandStatusWarning: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Status - Negative - var colorBorderBrandStatusNegativeLight: ColorSemanticToken? { get } - var colorBorderBrandStatusNegativeDark: ColorSemanticToken? { get } + var colorBorderBrandStatusNegative: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Status - Positive - var colorBorderBrandStatusPositiveLight: ColorSemanticToken? { get } - var colorBorderBrandStatusPositiveDark: ColorSemanticToken? { get } + var colorBorderBrandStatusPositive: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - Border - Status - Information - var colorBorderBrandStatusInformationLight: ColorSemanticToken? { get } - var colorBorderBrandStatusInformationDark: ColorSemanticToken? { get } + var colorBorderBrandStatusInformation: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Primary - var colorOnBackgroundPrimaryLight: ColorSemanticToken? { get } - var colorOnBackgroundPrimaryDark: ColorSemanticToken? { get } + var colorOnBackgroundPrimary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Secondary - var colorOnBackgroundSecondaryLight: ColorSemanticToken? { get } - var colorOnBackgroundSecondaryDark: ColorSemanticToken? { get } + var colorOnBackgroundSecondary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Tertiary - var colorOnBackgroundTertiaryLight: ColorSemanticToken? { get } - var colorOnBackgroundTertiaryDark: ColorSemanticToken? { get } + var colorOnBackgroundTertiary: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Attrative - Muted - var colorOnBackgroundStatusAttractiveMutedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusAttractiveMutedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusAttractiveMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Attrative - Emphasized - var colorOnBackgroundStatusAttractiveEmphasizedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusAttractiveEmphasizedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusAttractiveEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Warning - Muted - var colorOnBackgroundStatusWarningMutedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusWarningMutedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusWarningMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized - var colorOnBackgroundStatusWarningEmphasizedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusWarningEmphasizedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusWarningEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Negative - Muted - var colorOnBackgroundStatusNegativeMutedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusNegativeMutedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusNegativeMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized - var colorOnBackgroundStatusNegativeEmphasizedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusNegativeEmphasizedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusNegativeEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Positive - Muted - var colorOnBackgroundStatusPositiveMutedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusPositiveMutedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusPositiveMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized - var colorOnBackgroundStatusPositiveEmphasizedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusPositiveEmphasizedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusPositiveEmphasized: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Information - Muted - var colorOnBackgroundStatusInformationMutedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusInformationMutedDark: ColorSemanticToken? { get } + var colorOnBackgroundStatusInformationMuted: ColorCompositeSemanticToken? { get } // MARK: Semantic token - Colors - On background - Status - Information - Emphasized - var colorOnBackgroundStatusInformationEmphasizedLight: ColorSemanticToken? { get } - var colorOnBackgroundStatusInformationEmphasizedDark: ColorSemanticToken? { get } - + var colorOnBackgroundStatusInformationEmphasized: ColorCompositeSemanticToken? { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/DimensionSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/DimensionSemanticTokens.swift index 88a3c045c..58ff97b4d 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/DimensionSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/DimensionSemanticTokens.swift @@ -17,8 +17,31 @@ /// In the future this file should be generated by a parser converting Figma JSON to Swift code. public protocol DimensionSemanticTokens { - // MARK: Semantic token - Dimension - - var dimensionDensityDefault: DimensionSemanticToken { get } + // "Close" in Figma, "sys" tokens (โ‰–_โ‰–) + var dimension0: DimensionSemanticToken { get } + var dimension10: DimensionSemanticToken { get } + var dimension20: DimensionSemanticToken { get } + var dimension30: DimensionSemanticToken { get } + var dimension40: DimensionSemanticToken { get } + var dimension50: DimensionSemanticToken { get } + var dimension60: DimensionSemanticToken { get } + var dimension70: DimensionSemanticToken { get } + var dimension80: DimensionSemanticToken { get } + var dimension90: DimensionSemanticToken { get } + var dimension100: DimensionSemanticToken { get } + var dimension110: DimensionSemanticToken { get } + var dimension120: DimensionSemanticToken { get } + var dimension130: DimensionSemanticToken { get } + var dimension140: DimensionSemanticToken { get } + var dimension150: DimensionSemanticToken { get } + var dimension160: DimensionSemanticToken { get } + var dimension170: DimensionSemanticToken { get } + var dimension180: DimensionSemanticToken { get } + var dimension190: DimensionSemanticToken { get } + var dimension200: DimensionSemanticToken { get } + var dimension210: DimensionSemanticToken { get } + var dimension220: DimensionSemanticToken { get } + var dimension230: DimensionSemanticToken { get } + var dimension240: DimensionSemanticToken { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift index a4ba6fc8d..a80db32e6 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift @@ -17,19 +17,6 @@ /// In the future this file should be generated by a parser converting Figma JSON to Swift code. public protocol SpacingSemanticTokens { - // MARK: Semantic token - Spacing - Fixed - - var spaceFixedNone: SpacingSemanticToken { get } - var spaceFixedSmash: SpacingSemanticToken { get } - var spaceFixedShortest: SpacingSemanticToken { get } - var spaceFixedShorter: SpacingSemanticToken { get } - var spaceFixedShort: SpacingSemanticToken { get } - var spaceFixedMedium: SpacingSemanticToken { get } - var spaceFixedTall: SpacingSemanticToken { get } - var spaceFixedTaller: SpacingSemanticToken { get } - var spaceFixedTallest: SpacingSemanticToken { get } - var spaceFixedSpacious: SpacingSemanticToken { get } - // MARK: Semantic token - Spacing - Scaled var spaceScaledNone: SpacingCompositeSemanticToken { get } @@ -43,88 +30,103 @@ public protocol SpacingSemanticTokens { var spaceScaledTallest: SpacingCompositeSemanticToken { get } var spaceScaledSpacious: SpacingCompositeSemanticToken { get } + // MARK: Semantic token - Spacing - Fixed + + var spaceFixedNone: SpacingSemanticToken { get } + var spaceFixedSmash: SpacingSemanticToken { get } + var spaceFixedShortest: SpacingSemanticToken { get } + var spaceFixedShorter: SpacingSemanticToken { get } + var spaceFixedShort: SpacingSemanticToken { get } + var spaceFixedMedium: SpacingSemanticToken { get } + var spaceFixedTall: SpacingSemanticToken { get } + var spaceFixedTaller: SpacingSemanticToken { get } + var spaceFixedTallest: SpacingSemanticToken { get } + var spaceFixedSpacious: SpacingSemanticToken { get } + var spaceFixedHuge: SpacingSemanticToken { get } + var spaceFixedJumbo: SpacingSemanticToken { get } + // MARK: Semantic token - Spacing - Padding - Padding inline - var spacePaddingInlineComponentNone: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentShorter: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentShort: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentMedium: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentTall: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentTaller: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsIconNone: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsIconShorter: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsIconShort: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsIconMedium: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsIconTall: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsIconTaller: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsArrowNone: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsArrowShorter: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsArrowShort: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsArrowMedium: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsArrowTall: SpacingPaddingInlineSemanticToken { get } - var spacePaddingInlineComponentIsArrowTaller: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineNone: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineShorter: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineShort: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineMedium: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineTall: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineTaller: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsIconNone: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsIconShorter: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsIconShort: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsIconMedium: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsIconTall: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsIconTaller: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsArrowNone: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsArrowShorter: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsArrowShort: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsArrowMedium: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsArrowTall: SpacingPaddingInlineSemanticToken { get } + var spacePaddingInlineIsArrowTaller: SpacingPaddingInlineSemanticToken { get } // MARK: Semantic token - Spacing - Padding - Padding stack - var spacePaddingBlockComponentNone: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentShorter: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentShort: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentMedium: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentTall: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentTaller: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentIsIconNone: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentIsIconShorter: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentIsIconShort: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentIsIconMedium: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentIsIconTall: SpacingPaddingInlineSemanticToken { get } - var spacePaddingBlockComponentIsIconTaller: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockNone: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockShorter: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockShort: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockMedium: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockTall: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockTaller: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockIsIconNone: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockIsIconShorter: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockIsIconShort: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockIsIconMedium: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockIsIconTall: SpacingPaddingInlineSemanticToken { get } + var spacePaddingBlockIsIconTaller: SpacingPaddingInlineSemanticToken { get } // MARK: Semantic token - Spacing - Padding - Padding inset - var spaceInsetComponentNone: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentSmash: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentShortest: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentShorter: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentShort: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentMedium: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentTall: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentTaller: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentTallest: SpacingPaddingInlineSemanticToken { get } - var spaceInsetComponentSpacious: SpacingPaddingInlineSemanticToken { get } + var spaceInsetNone: SpacingPaddingInlineSemanticToken { get } + var spaceInsetSmash: SpacingPaddingInlineSemanticToken { get } + var spaceInsetShortest: SpacingPaddingInlineSemanticToken { get } + var spaceInsetShorter: SpacingPaddingInlineSemanticToken { get } + var spaceInsetShort: SpacingPaddingInlineSemanticToken { get } + var spaceInsetMedium: SpacingPaddingInlineSemanticToken { get } + var spaceInsetTall: SpacingPaddingInlineSemanticToken { get } + var spaceInsetTaller: SpacingPaddingInlineSemanticToken { get } + var spaceInsetTallest: SpacingPaddingInlineSemanticToken { get } + var spaceInsetSpacious: SpacingPaddingInlineSemanticToken { get } // MARK: Semantic token - Spacing - Padding - Gap inline - var spaceColumnGapComponentNone: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentShorter: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentShort: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentMedium: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentTall: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentTaller: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsIconNone: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsIconShorter: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsIconShort: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsIconMedium: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsIconTall: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsIconTaller: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsArrowNone: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsArrowShorter: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsArrowShort: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsArrowMedium: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsArrowTall: SpacingPaddingInlineSemanticToken { get } - var spaceColumnGapComponentIsArrowTaller: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapNone: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapShorter: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapShort: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapMedium: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapTall: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapTaller: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsIconNone: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsIconShorter: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsIconShort: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsIconMedium: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsIconTall: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsIconTaller: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsArrowNone: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsArrowShorter: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsArrowShort: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsArrowMedium: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsArrowTall: SpacingPaddingInlineSemanticToken { get } + var spaceColumnGapIsArrowTaller: SpacingPaddingInlineSemanticToken { get } // MARK: Semantic token - Spacing - Padding - Gap stack - var spaceRowGapComponentNone: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentShorter: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentShort: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentMedium: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentTall: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentTaller: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentIsIconNone: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentIsIconShorter: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentIsIconShort: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentIsIconMedium: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentIsIconTall: SpacingGapStackSemanticToken { get } - var spaceRowGapComponentIsIconTaller: SpacingGapStackSemanticToken { get } + var spaceRowGapNone: SpacingGapStackSemanticToken { get } + var spaceRowGapShorter: SpacingGapStackSemanticToken { get } + var spaceRowGapShort: SpacingGapStackSemanticToken { get } + var spaceRowGapMedium: SpacingGapStackSemanticToken { get } + var spaceRowGapTall: SpacingGapStackSemanticToken { get } + var spaceRowGapTaller: SpacingGapStackSemanticToken { get } + var spaceRowGapIsIconNone: SpacingGapStackSemanticToken { get } + var spaceRowGapIsIconShorter: SpacingGapStackSemanticToken { get } + var spaceRowGapIsIconShort: SpacingGapStackSemanticToken { get } + var spaceRowGapIsIconMedium: SpacingGapStackSemanticToken { get } + var spaceRowGapIsIconTall: SpacingGapStackSemanticToken { get } + var spaceRowGapIsIconTaller: SpacingGapStackSemanticToken { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/ColorCompositeSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/ColorCompositeSemanticTokenTests.swift new file mode 100644 index 000000000..5f8eab068 --- /dev/null +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/ColorCompositeSemanticTokenTests.swift @@ -0,0 +1,63 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import XCTest +import OUDSTokensRaw +import OUDSTokensSemantic + +/// To ensure the `ColorCompositeSemanticToken` is tested as a wrapper of semantic tokens for light and dark color schemes. +final class ColorCompositeSemanticTokenTests: XCTestCase { + + /// Tests if light and dark values are preserved when defined with two assigned non nil values + func testInitTwoNonNilValues() { + let light: ColorRawToken = ColorRawTokens.colorFunctionalMalachite300 + let dark: ColorRawToken = ColorRawTokens.colorFunctionalScarlet900 + let token = ColorCompositeSemanticToken(light: light, dark: dark) + + XCTAssertTrue(token.light == light) + XCTAssertTrue(token.dark == dark) + } + + /// Tests init of `ColorCompositeSemanticToken` with nil values in parameters + func testInitNilValues() { + let light: ColorRawToken = ColorRawTokens.colorFunctionalMalachite300 + let dark: ColorRawToken = ColorRawTokens.colorFunctionalScarlet900 + + XCTAssertNil(ColorCompositeSemanticToken(light: light, dark: nil)) + XCTAssertNil(ColorCompositeSemanticToken(light: nil, dark: dark)) + XCTAssertNil(ColorCompositeSemanticToken(light: nil, dark: nil)) + } + + /// Tests init of `ColorCompositeSemanticToken` with nil value in parameter + func testInitNilValue() { + XCTAssertNil(ColorCompositeSemanticToken(nil)) + } + + /// Tests comparisons between two `ColorCompositeSemanticToken` to ensure tokens are considered as equal + /// if an only if they have the same compact and regular values and have the same types. + func testIsEqual() { + let first = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalScarlet900) + let second = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalDarkGray80, dark: ColorRawTokens.colorFunctionalSun100) + let third = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalSun100) + let fourth = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalDarkGray80, dark: ColorRawTokens.colorFunctionalScarlet900) + let fifth = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalScarlet900) + let sixth = SizingCompositeSemanticToken(compact: 12, regular: 12) + + XCTAssertTrue(first.isEqual(first)) + XCTAssertFalse(first.isEqual(second)) + XCTAssertFalse(first.isEqual(third)) + XCTAssertFalse(first.isEqual(fourth)) + XCTAssertTrue(first.isEqual(fifth)) + XCTAssertFalse(first.isEqual(sixth)) + } +} diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SizingCompositeSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SizingCompositeSemanticTokenTests.swift new file mode 100644 index 000000000..39f956bf4 --- /dev/null +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SizingCompositeSemanticTokenTests.swift @@ -0,0 +1,47 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import XCTest +import OUDSTokensSemantic + +/// To ensure the `SizingCompositeSemanticToken` is tested as a wrapper of semantic tokens for compact and regular size classes. +final class SizingCompositeSemanticTokenTests: XCTestCase { + + /// Tests if compact and regular values are preserved when defined + func testInit() { + let compact: SizingSemanticToken = 123 + let regular: SizingSemanticToken = 456 + let token = SizingCompositeSemanticToken(compact: compact, regular: regular) + + XCTAssertTrue(token.compact == compact) + XCTAssertTrue(token.regular == regular) + } + + /// Tests comparisons between two `SizingCompositeSemanticToken` to ensure tokens are considered as equal + /// if an only if they have the same compact and regular values and have the same types. + func testIsEqual() { + let first = SizingCompositeSemanticToken(compact: 12, regular: 34) + let second = SizingCompositeSemanticToken(compact: 56, regular: 78) + let third = SizingCompositeSemanticToken(compact: 12, regular: 78) + let fourth = SizingCompositeSemanticToken(compact: 56, regular: 34) + let fifth = SizingCompositeSemanticToken(compact: 12, regular: 34) + let sixth = ColorCompositeSemanticToken("#000000") + + XCTAssertTrue(first.isEqual(first)) + XCTAssertFalse(first.isEqual(second)) + XCTAssertFalse(first.isEqual(third)) + XCTAssertFalse(first.isEqual(fourth)) + XCTAssertTrue(first.isEqual(fifth)) + XCTAssertFalse(first.isEqual(sixth)) + } +} diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SpacingCompositeSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SpacingCompositeSemanticTokenTests.swift new file mode 100644 index 000000000..03383cf9f --- /dev/null +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SpacingCompositeSemanticTokenTests.swift @@ -0,0 +1,48 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import XCTest +import OUDSTokensRaw +import OUDSTokensSemantic + +/// To ensure the `SpacingCompositeSemanticToken` is tested as a wrapper of semantic tokens for compact and regular size classes. +final class SpacingCompositeSemanticTokenTests: XCTestCase { + + /// Tests if compact and regular values are preserved when defined + func testInit() { + let compact: DimensionRawToken = 123 + let regular: DimensionRawToken = 456 + let token = SpacingCompositeSemanticToken(compact: compact, regular: regular) + + XCTAssertTrue(token.compact == compact) + XCTAssertTrue(token.regular == regular) + } + + /// Tests comparisons between two `SpacingCompositeSemanticToken` to ensure tokens are considered as equal + /// if an only if they have the same compact and regular values and have the same types. + func testIsEqual() { + let first = SpacingCompositeSemanticToken(compact: 12, regular: 34) + let second = SpacingCompositeSemanticToken(compact: 56, regular: 78) + let third = SpacingCompositeSemanticToken(compact: 12, regular: 78) + let fourth = SpacingCompositeSemanticToken(compact: 56, regular: 34) + let fifth = SpacingCompositeSemanticToken(compact: 12, regular: 34) + let sixth = SizingCompositeSemanticToken(compact: 0, regular: 00) + + XCTAssertTrue(first.isEqual(first)) + XCTAssertFalse(first.isEqual(second)) + XCTAssertFalse(first.isEqual(third)) + XCTAssertFalse(first.isEqual(fourth)) + XCTAssertTrue(first.isEqual(fifth)) + XCTAssertFalse(first.isEqual(sixth)) + } +} diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/TypographyCompositeSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/TypographyCompositeSemanticTokenTests.swift new file mode 100644 index 000000000..4ea7d2d97 --- /dev/null +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/TypographyCompositeSemanticTokenTests.swift @@ -0,0 +1,48 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import XCTest +import OUDSTokensRaw +import OUDSTokensSemantic + +/// To ensure the `TypographyCompositeSemanticToken` is tested as a wrapper of semantic tokens for compact and regular size classes. +final class TypographyCompositeSemanticTokenTests: XCTestCase { + + /// Tests if compact and regular values are preserved when defined + func testInit() { + let compact = TypographyRawTokens.typeRegular150 + let regular = TypographyRawTokens.typeBold550 + let token = TypographyCompositeSemanticToken(compact: compact, regular: regular) + + XCTAssertTrue(token.compact == compact) + XCTAssertTrue(token.regular == regular) + } + + /// Tests comparisons between two `SpacingCompositeSemanticToken` to ensure tokens are considered as equal + /// if an only if they have the same compact and regular values and have the same types. + func testIsEqual() { + let first = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold550) + let second = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold750) + let third = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold750) + let fourth = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold550) + let fifth = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold550) + let sixth = SizingCompositeSemanticToken(compact: 0, regular: 0) + + XCTAssertTrue(first.isEqual(first)) + XCTAssertFalse(first.isEqual(second)) + XCTAssertFalse(first.isEqual(third)) + XCTAssertFalse(first.isEqual(fourth)) + XCTAssertTrue(first.isEqual(fifth)) + XCTAssertFalse(first.isEqual(sixth)) + } +} diff --git a/OUDS/OUDS Library TestPlan.xctestplan b/OUDS/OUDS Library TestPlan.xctestplan index 500b0624b..3c77aedaa 100644 --- a/OUDS/OUDS Library TestPlan.xctestplan +++ b/OUDS/OUDS Library TestPlan.xctestplan @@ -53,6 +53,13 @@ "identifier" : "OUDSTokensRaw-Tests", "name" : "OUDSTokensRaw-Tests" } + }, + { + "target" : { + "containerPath" : "container:..", + "identifier" : "OUDSTokensSemantic-Tests", + "name" : "OUDSTokensSemantic-Tests" + } } ], "version" : 1 diff --git a/Package.swift b/Package.swift index 5da74b90a..f4c11ecda 100644 --- a/Package.swift +++ b/Package.swift @@ -115,6 +115,10 @@ let package = Package( name: "OUDSTokensSemantic", dependencies: ["OUDSTokensRaw"], path: "OUDS/Core/Tokens/SemanticTokens/Sources"), + .testTarget( + name: "OUDSTokensSemantic-Tests", + dependencies: ["OUDSTokensSemantic"], + path: "OUDS/Core/Tokens/SemanticTokens/Tests"), .target( name: "OUDSTokensRaw", dependencies: ["OUDSFoundations"], diff --git a/Showcase/Showcase/OrangeCustomTheme.swift b/Showcase/Showcase/OrangeCustomTheme.swift index 6af008924..5f9d88247 100644 --- a/Showcase/Showcase/OrangeCustomTheme.swift +++ b/Showcase/Showcase/OrangeCustomTheme.swift @@ -18,6 +18,8 @@ import OUDSTokensSemantic import OUDSTokensComponent import OUDSThemesOrange +// swiftlint:disable line_length + // Can be for example a country theme class OrangeCustomTheme: OrangeTheme { } @@ -27,16 +29,15 @@ extension OrangeCustomTheme { // For FormsTextInputComponentTokens public override var ftiTitleFontWeight: TypographyFontWeightSemanticToken { fontWeightLabelStrong } public override var ftiTitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelXLarge } - public override var ftiTitleColor: ColorSemanticToken { ColorRawTokens.colorFunctionalDodgerBlue500 } + public override var ftiTitleColor: ColorSemanticToken { ColorCompositeSemanticToken(ColorRawTokens.colorFunctionalDodgerBlue500) } public override var ftiSubtitleFontWeight: TypographyFontWeightSemanticToken { fontWeightBodyDefault } public override var ftiSubtitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelMedium } - public override var ftiSubtitleColor: ColorSemanticToken { ColorRawTokens.colorFunctionalMalachite500 } + public override var ftiSubtitleColor: ColorSemanticToken { ColorCompositeSemanticToken(ColorRawTokens.colorFunctionalMalachite500) } - public override var ftiBackgroundColorLight: ColorSemanticToken { colorBackgroundDefaultPrimaryLight } - public override var ftiBackgroundColorDark: ColorSemanticToken { colorBackgroundDefaultPrimaryDark } + public override var ftiBackgroundColor: ColorSemanticToken { colorBackgroundDefaultPrimary } - public override var ftiBorderColor: ColorSemanticToken { colorBorderEmphasizedDark ?? OrangeBrandColorRawTokens.colorDecorativeShockingPink500 } + public override var ftiBorderColor: ColorSemanticToken { ColorCompositeSemanticToken(light: OrangeBrandColorRawTokens.colorDecorativeShockingPink800, dark: OrangeBrandColorRawTokens.colorDecorativeShockingPink200) } public override var ftiBorderStyle: BorderStyleSemanticToken { borderStyleDrag } @@ -45,27 +46,24 @@ extension OrangeCustomTheme { // For FormsTextInputComponentTokens extension OrangeCustomTheme { // For ColorSemanticTokens - override var colorBackgroundDefaultPrimaryLight: ColorSemanticToken! { ColorRawTokens.colorFunctionalSun500 } - override var colorBackgroundDefaultPrimaryDark: ColorSemanticToken! { ColorRawTokens.colorFunctionalSun800 } + override var colorBackgroundDefaultPrimary: ColorSemanticToken! { ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalSun500, dark: ColorRawTokens.colorFunctionalSun800) } } extension OrangeCustomTheme { // For ButtonsComponentTokens - override var buttonInternalSpacing: SpacingPaddingInlineSemanticToken { spacePaddingInlineComponentShorter } + override var buttonInternalSpacing: SpacingPaddingInlineSemanticToken { spacePaddingInlineShorter } override var buttonBorderStyle: BorderStyleSemanticToken { borderStyleDrag } - override var buttonBorderColorLight: ColorSemanticToken { colorBorderDefaultLight! } - override var buttonBorderColorDark: ColorSemanticToken { colorBorderDefaultDark! } + override var buttonBorderColor: ColorSemanticToken { colorBorderDefault! } override var buttonBorderWidth: BorderWidthSemanticToken { borderWidthDefault } override var buttonBorderRadius: BorderRadiusSemanticToken { borderRadiusShort } - override var buttonForegroundColorLight: ColorSemanticToken { sysColorBrandNeutralMutedLower! } - override var buttonForegroundColorDark: ColorSemanticToken { sysColorBrandNeutralMutedWhite! } - override var buttonBackgroundColorLight: ColorSemanticToken { sysColorBrandPositiveLowest! } - override var buttonBackgroundColorDark: ColorSemanticToken { sysColorBrandPositiveHighest! } + override var buttonForegroundColor: ColorSemanticToken { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedLower!, dark: sysColorBrandNeutralMutedWhite!) } + override var buttonBackgroundColor: ColorSemanticToken { ColorCompositeSemanticToken(light: sysColorBrandPositiveLowest!, dark: sysColorBrandPositiveHighest!) } override var buttonWidth: SizingSemanticToken { DimensionRawTokens.dimension2000 } override var buttonHeight: SizingSemanticToken { DimensionRawTokens.dimension800 } override var buttonTypography: TypographyCompositeSemanticToken { typeDisplaySmall } } +// swiftlint:enable line_length diff --git a/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_InverseTheme-InverseTheme.1.png b/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_InverseTheme-InverseTheme.1.png index 8c282f6fc3d9569681cb65c5b76a0019fd947063..935903b6e42277f7458e45ae6f52240689394f11 100644 GIT binary patch delta 16206 zcmeHuXH-*ZySCDmt|Bco9owK_qbO1og_&^_5ESWc5CKC7y(QZqiim)|C^%HH08&B` z2sIID4k%Gts0o4)NPqw#2_z&rJLtS;&Ux3jzF+4b{Mc);*WS>(2Z&1PmpY?7>4vu+>M&vjXgNZC- zu8B`+cs4zUHHTo**G)LaoS0mMhvrk1UDDGns-o_n zaRtf8TiY(%&CShXn5wBBO1p&PJcLr4l@-O6f9b!zt=uN{FO8Zl7L=+|depG6+$ga)tH`iw~em3)K6CXD5bF;o|*2hi$ zu*t7B`Qavi-qaVWqMQ0?Q$KF%>;GH-;lvMrx-S9E_EnD;;zn(v9_upqV|BtYr1kV-@YqGSpX7Paf&FHh#WwQaH*?c4q7U{^x<2oY4P1Cm7<#)sG6r z*+R`HJAO5S-(c?a@xz6t9uwVpK)H~dEp&F(_N!u)(b>boQb*ry`RCz}lbUk7gtl)@ zZI;`Wn!F?~*52xrnY5DHytY%E3z|DZXZNOV6<0__E{JQX5OeQQWx37&V*tT;%F+@d zqOlfRQk%DK4)SAlHrHe`PBwGr{~S+%|1T(Q*xS>C@7h&i&djlJQqcQt2c86XpDJ*M zw<$~&m~wsV=4(beOEE;pfZDJ3f`+`)pIRX(wo}i%k`Fa3)cZTYnizdC$^JR;J6AIi zHeP?1iF|)E%^5%vrF(Y+RD*B0-;vfoC=LlUt6O|8NzI+yYl`JEN4kc5a$T6jXj7Ke<9UMyiJSfFzPHrGK$%j z%oplz(eu?)<9B3rs3mW^ANcvVCmn|}0q?kfJNWKzr225@B}5QQ4DUyRv+klQwOuX? zS7c7lJP+zRg6T8G6tGt*#br9ta~1LIvUhCVev3TTlIXw3_~7-N=Y39d=HhML*o|3f ze|%@IzWk`${0_hwA*BW5jWH19>R0b{m#{;bFl;2?0B{*y8UAR8g(yNpS~Q76^rn_# zbijADj|A@^W)d`bi}7qSK$=Ve)+d{0p;FUBN_PI$H~wD7W#vL(o16r?To-liLyY#T zjN((mQhn0r--XjZ84yg1?M<;OJr}#Q-PSr?$L(`(Jn6`U);L7As1mKw4ZuQuKfTy= zmB_-{*9`k0F;bx8;LUKWT;`8CPI2V8xOHl8k6 zF$`ZcR)0Mmu{Yw)c(exp4`p}v*Qyb-7u_5uCN%C~w96VR&)=+QSMfj02AIYR@D$>j zFulz7_9JIE26Po{ z4s|c06)Y%H2G)Ebuux0ra4gE7hOPcqoU$S>9F7#02gGF52UKw#q8A2Sqvzl7%ZPuZ zUg~u4$-YY3KV!_B(ghsU`KujPT<#6uRZ-oDv#01EPjp=}7^~8pQvXqU6_#spq`t3PS+B2 zjsTRmzFhn^*#%{#=F#9Bde)zW{md*?sXeg9rS|3fmS;StX-$JkIhLmEFW&t{SNGn% zeW`hzL2x6DI34e9s2%h^#_c5DcbnDf`^^pO%kJ(Q@MUI3md^2yQC^xz9X+ZGl8~zDa`;1f|psu7EKG#baVQ1Tz3K*M~^#obrt-{MUqh5ovzQ}@UI=>31%gZX*gh)Fmw{S)h()4T4LGZ>lCpS8pZ5ndf&XxqmfvfC<`BdH0H?dgQm*smM;-oXT5Wz28CvsRcj#UvQmor{>q@^kG&i?XzNrk1e@;X-@OLR z$Ot*8o19e#?MOg2LEBAwA#Hl?!rH1*@*2q*v2YKsik zbSBI-pouYn^&SZ)AuKb(1`rr9g;r$V1dM1elK5PJ)McRx?W-$+>yb6UKrd|`H|0&5 zhFvzL>Syq8@x)7iY_-dc?|X2AjysE^*o!HBxbYnOSQpGG_C$+-vz51sf!oJf5qiTG zUk2gYxJss?fGBSXvC*lYc|oib=P%HB=-`YF5Cf)CbJxF7SnMG@fV^hHtVnrUS~FY} zT#sp*hcYf`SEP^sHh4X%P22U0$~PCV%y=j14Ji4Z%H@obYr4s?k~&Jh>X*3k9^dpw zZrO&B5GI3B%CMnd$Hg<+#z_ZUuo7(k9G+KltMae?UO4jj@hYy#eEp^2fto3Lqb~isSa=w) zu~5zvx~S*LGFRPZwZ)Wb->Tf#EJHS|1It|(A!wtLCjN>Q-!8X=6#-@%G)spW*8tW& z#YU5y)lV>_?Vi?~(Ku;?(ZJCA*FR|r<<}5&`|0v_HS=l_>q{LejWO~N*O;ZYB>DsT z&g3Zg<7fC2IZF?B#2@SU+79hvwrKFm&(EuKXDm}1AATti*N6#RTTaJ~uI>a-F8wrl zp>|RCJ&S72_quc%N(^%K-74%UP9*lg@;nTPZmxo(GC_Q3Pz<|D(_28qA>`BAE;tRN zx2q}MPrzAPhhQ4UprH-zh%z+6YH!?wC`+fy#*Dt8si*cjGi61zmn7`UYu%>=9FMW@ zTnl=th^ODZd|}IKvn;Y4h~ZM*XbrX9Af(!1+5Kf{tNhBrrX(K+41Cy;krF-fLv8)u zVO9;*UE_4+p2GcloWbeG5QxmBi;IzeAmqmW^Z(k^G zX11*zDaOJa2W--4y&xnGBG?prT-3LWwxA;y#w>jOZ8aiw@Z?vH#d=^=95oVVNXLMs zG_XYag7);>wcioNFy#*(?zsr&8$c#qV(wnQiBOB-M}q)zR`BJ7VtIQ^zS&{}i5tKm zFTXlq{07FW01E6w6Cb^pZ<<{EpbBfO07C-_GQC>}#7Ip3S`1|Pv{IEFuEW(9VAunC z^r>i818J;Ys=xAKl(^gI?7}fhVMl5|w}V)A?Nd=JwI0G7!Er|@g!Vfiq?FMaF7%9c5_8zUEHCc^;9HP= zjY1}5wsWr0?@N08uF`q(QutUX;i)*7Kc$Fa1&QRSLfSZ|J=$VSJXeFkGQ3qoNy+Ef zun)@YO-{swWQSKc<~(!jpIXurg7!!*&rig_YL_Z#rK#L3=C)^vTbou`Z;y5`d9SI7FZLH4Z#!X{i$UxpV2 z#6s!%IpKgPmd{HslFWY3!6fANs#!%bG|T#%5|~xeYm)KgB(0Nh?OGH1ekna1J2VO=qxQoZe-q)4nr)rd{jnow70{%qhM; ztt_LaKE=$Sd!JG~y2BOW(ZqHd;WiK%=zgxrpw&ee47z5!NIdXZwIr9sP!^!)J3}$b z2vewe-}(;2%a0oee)|O0>(Nuvtwb9J;N*O)s(1kY!80_mIKJJVn&;Z9)dHm_j_(ml zqv+4AdoHy#AvvuFOup2WKxsyw$X>D?HJ@Kn*J`g{m|Iec|7b$7Nl|G~1DVzzRE~wx zU|2QzW;7wMyW*q#13kuZO3C)UTQ!Q_}by1-k@YU7*c&8#p0jTvArHOW3Dk=|GP)tC(n^XLV}gB zkHg(5*mB?GzGNCCw9lrLrrg`1P$=N4?cT1G`q1jDni1snQB@xohNFOOqlQ!pVIz_v z{8}y1EE55l1C*}+EG*yG2dl8R8Hu*MZ7+HszHf*k$$f=#pA)?{h6Kx#>=@mzAUmwc zmDr#Wb|3C!l)ttvP;4grHGKFzjjOkNLN)R(&&gwkZe&(70YqIxHz9l`FJ30Q!^e~} zG~gZ35F2c-sT5xrcK0v&n6PR-$bM&?r}^wMKH!&)o%cLhL2&Mkws3>h&*o>-Fko(` z>jGH5yDT(O8qj%!g6Qk^=S^^#e}aC)@KB0;06Duzl%()KO~#IeP^( zsYrVZ!Ohkf`Bl=bmi@YdaE-D46NqjWkoe=*FgD#TwV(7y>~v{kvPOV&bDOqscR+%dn&YI!swRV6v1@O21!!^3=?B5&o1L z?={_6gZ`|e3hTCF;|zG$I@aWK46CY3b@%?FmbJg6s)+|W2M&wu=GjSBI&OWcls@QJ zTxyYF*&8!i_gW^eUPd9sIy&%FLz*sIk9k}z>&7B0dW`Ctt(f6^`c}j#%0T}$)N_2- zSpw2076guGXcW7>$;?{QFhsa_yWyCEH9)Zv3sPML$&C{L;%J4BU1ma}PJJP37_56Q zVOBN23N^Du&tXBS^P4`w){v*QBFz=Y;qmAG@lS$ zeYH%rkyd{t7~$G~HB-Ex3`qjvcXwkrxb4s~Jg~UrLW?30Jzn&$Q(5w{Xpo&|_jb6# z8GtV(B~u7XXj%v@Elbh%m(_9WrMWcwAGYc}`O*Z_r_~1*-2Pz=o6P2^1xM@*M}i|( z;LGMdza!&^AeABJ{UxU>AfZ&hVzZ+xvRA4v{+Pfw{GDKi7;)7+DCb-bzj-%vVS9lo z?!9E6+fkxnS*}1n_fWfHz`XcZ^^Uw!*_d%*#j0b>62DA0Tf>2YX~UIj zs0mzjs(H3vs5v{F7}-n}FMu`Fwy|)0ZeDNu`bZiB3X2|zot*?IL(nq*M;{YgB9DoY zF#shiqzjAJ)D1~H@<>IjH62D?=zEBB`mIw z_1CaT^^}2-+U1}==yH%k0<|BoGh_#dI3x zD%s>fUEued8Tv9_r2$qTwsUy)1mR`@Lkzb;wOiJ)vT~#-`DevH=!t7MvU{e@W8b_k4kwa5jZ}NqZ`2; zU+Jf5tdEO3k#}lcVboKw+H#Pv53rBGUY&EtY8#h02T|iEa@Rh#`+BkS$9>-l{0qmeG5Vl_;Gz5t9SI{K@diX&tGaP`xRSc@+aW2-(v_U_CfenIN6>JgcE& zIkwv=(S|awXOjA35%kO17n?OS1Wg7>eVJ0jPuj`IFS;Ouk`@L8%9EPg;!SH}1+1Gw z>DnpXkPXmE6ZnhU^|_C4oUs#fBk4E66W90JL%DqM`N;6M-LUSg_NUqh~~8 z`CJmf9~-Wz(NCerINz-;hQ)KC$F%ISx=t{ARDB{FT#W)Wm8f6Knf-j^d^Mp)$3F{r z%Nw359P#wCaSKa9>_4$#_Z`Ke*foL_AH;avysHA-?eSqh+$z?7OfJuvyF1USccsE$ z$PiO||182p{&Z_Pml8&dBtISOdIRt>JW?k8u#AyHa;&O8X^PE3fP9(QraVzTkA8RK z=$3AB^0VoUK>n>_8|kJ#z5XvqN~9f>~Qo4r47Li zeC>!qkNBj1X6^AvE|-$xrB=wogVFgf$G-F-uiU!t%JBDq=KvNe;5baEl4Heww~Cc) ztk-RnjnrJtNC23o#5!6={s`!cMvomZn4A4!en48+kcv|Q<*#zC0+-4qyjrf<`&oU!r@xIU$ zFXM!!Wh{3dmM*DN`#c6z{nV_0QM16$UiL7%q6vI6JeVgik zAaQM>^et`TjCKwd=&_eNDknDJ25_;#?6&wI=V$H^4T0rp52WG9#x#ecQ0LL-NP#hG z@5=5;XL4JwIyLC%RB{#?2tHqo{s_wQcAhOm^kx$KRI;)F-WmcVt>4rlzdc5j&HIIa z#2m5n+rInz%dHMko3em`#{-3*nw(!nF1y4X5d$uX@bF0ED@$|?Hd*x)w zX{m19Jj;-Db0nz4?EQF1mkkE)f2{T+lI74Tushzp`}Vi~icK=tCVbOQ$M%MUIrRWF zc&8Aldcf|%nyjRVm(^>VfQpXKr>P~qtEc4RZw|mN*{7+!F71u_1gi2yU`L)quhlwq zl$G%A?GeKSb|0Cbpq?BY(BO}*%V!v8>g+gfg>tvoxZp*rv1ldQ*I^Phz>^PPo^Lib}=in&#Y?l1>lcKQ| z9TRHdqhAc51Y%t3N^@=RTs;+Cde#!cG+bEsO!=$k-F{|a2_6R8+rEf-43<&aQx$(5 z!H$3+hM7nMQcQ4y6X~MuIU$^R zj2qQTM9K+T-5=}gwPpqS7+7!BGjU;0^e=PtK!phR|19s(@lu^p*j`h0#L_vm_RwMi zS;lzfGd8kqZ5IHt*J>K=MEA~9tL#-oj!?5i-7xzg^Y=vasmx)+Rp+@w z%JCB>lYlaQhCA0t@7{+5y{xy7^EI;E7@S%V1H<3`W$Bz%kl{0eI1KBp>JLs8i8UAt z>9wA;)IfxgITjjHI&?6_MjfSe-jWdAKT@m?#kRnLNLcGW`MFbXt@AZ)MNL@hq2D;z z`9K5e>4t|Fk)VdHE#i@3v4PSl>S=O7P(35L7i{&a;f$ufYaB$9ICi z?r2>8U}+M>h$QTJ7ul1VV<&Kdc6@bF_;_**bQ6Y>MnqF0KYDfI!N$daZyCtDmqGii zag@6d?q-aLGk`^QIh`&@eDrpf}^_U&a$1T)TJB^4-$;;`$TKYa2 z7MF_SQC$ZeKQ+u_slT;>Dh~uBzoe#avf=lIXaRlqySEdGh z%9I;n^|hAOx8l{p20ycsjVmS^V_%Ax!)?;D!-n55PDB!gnr8|Gq%|9{0w!|F`I)GR zgac{4R;Ep@3L!7?VpMCcx?WbhdeP)P>#~?BZKw1@X-8u55F8kVE8#-A484WdgPcYe!2^<38y2861L)(h7yq|MtS$NXLC z8Qsiwtuhy~I)vObQQd+bJ(B{U#syMtA}e*0d0~XgXTtb3Z}-1cff&R&f;LEpOlq-y zYhDv*8H77>+(*rh>U8cP|5-9^y1@M!uVGRpn_d|(IpEo+5}l3TkeFM=?x_~S79~Nh zWp1#e)UL(;XT+-%P<>qyhF9FBfw{-PPX~dWuBVE))wYWOlV5j8YCVO&n&NF7Q&((? zAt5=S%dq~(#O+sytP>=Uhcx*xFox@fXur{uDe#;`^Mt)|Z>C2=OjA(qReQUyvi`C{ z27N*7(#d3d|BJkTTi(RPewS!n{eB}Ii^{d>%yhJQG6|l=q`f}kg%$YjyM*D@B*T(2WTIrWpqBwr zQAs+^uOYP7QN?6;CVSsEcWuzg`mB$89b>{itYi0OSLZ{zb5$s2EKHU9HV}004}yY{ zaQEDBnig7zJ4!YQf5plqm>q=x=QY&et@1k=U+yZpUI$+<{W1HdU2y6>Ye5IJZaTx? zB4~GfLWg=u#qYf`B3?OgG)@ptdyiZkJVPmb*}l;7x^U!GwNmwfD>*nFlzX7c4-;n4 zR0Xpb1f5Yd^XWy>j4G%D``+!$U2WY#exlk~>R4TLW+hKH8({M(wHb@!qUR@?%IYaa z%b+t8NTC_{;-oTlx^)#5y%K_ZtM3M0!dsRHeb9=352a$T6nCB*Jpme;Ap4LM9tmiG)_uLFO3CeQ>HsOYe}cKA zfR$a~0MhBs>A_v-bkyMj$x{+=p~FUY8_8m-Jw(Y^o;u(SEuTa!7rCNRtRC9YgU z<}asbU!``+7|k7Bj%=Q2nxHg-un@h`t`*=w6p|q>pHaHf64$`~L@EJU=SH~z1ji6C zV>iYZI=c}+3OC$AwV`t$HztTnk7}M27{lRHUuwtAAhE1(2TbcQte#1AR_%`H*KO** z!(}Q2bs;H!kNt^t(C8u<&4uoc_Z`-x5;c2G+3_1ODLA+vlC~plop9BxeUBB<*(XAq z(vSr}_%5%Mo&!7GQ#}`TOMw6@#uC^aBp7{sbm!^38KUnW_p5*(I_wvGQx+|@@tH%3 zyD(g)46IKD&Ov|eW8i5Qj7|9K^o!09y;M{cradN~{QKFrQENx7`8%}aoSWT*O0DS? z=ia2AKKAY%a7B3#$(ip;IFNH44W=90XYH31UEKO|(8psPPmW+lugJ~3&HcwPao{^Z zL}IsXJ>0KoPuu&G2MEzOd^FJq>p|dp>Xl+#6Em?h_h9k0(x1WhhQ}Ic;5&AMy^o-F zWuGSoxV2ABO_DzFt1i{qE>K1(c8523{|3%0J-fRV^<3`rFR5BgMMgS6M7SYg1q1e_VCLBlT>VN~-m|_#U6f2Qv#EZ~u>R z+}*KK|M&thXGL7A3W@EBVqDSvk83wp$?UVl<|=Kj(q=4eX59Z9mt@b2QBdQ2;VoPE k{P{i~&$kAcr!~8<(nXT*r4szNfPcSUxO^Uc&OP?O00au&!2kdN delta 16490 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 diff --git a/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_InverseTheme-InverseTheme.2.png b/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_InverseTheme-InverseTheme.2.png index 2847c74425dd30fc6b14e84ba15a39865e812431..8a24e4d4e87a68f6c5743e8a0f9d1b5ed4aaca3a 100644 GIT binary patch delta 11445 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 diff --git a/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_OrangeTheme-OrangeTheme.1.png b/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_OrangeTheme-OrangeTheme.1.png index 5ad84d50886892c58ad8d24f4b83d9b22c0b742d..19c3b0cd1b51b9fa1b880d737578c441883f3696 100644 GIT binary patch delta 13989 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 delta 14595 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 diff --git a/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_OrangeTheme-OrangeTheme.2.png b/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_OrangeTheme-OrangeTheme.2.png index 60f4608dadce30d98e5b1ff8e00874ab675c95bc..17258e68419a409c0b2a9b6269e6d15289bb86fb 100644 GIT binary patch delta 13280 zcmeHtc{r5&|F=XYEk+b&r#M0?Srbw!ME0={DMDk&HnzD_I+U%NELl%=kag@NV-0OM zVNAv{n6k_elZ=U(@w=J6zwbHU=X$Q|`90V5Jb&@m_o8#dbqIu+;?3=$#Do-w1 z-3a*vJ%4vDnZ3_a_jltAMV8!{$vLCAw=bR@5e|Fz!hMChx|)^ii&m>5M0$454f)Oo z<`7yudvhFoqx5>IVL`bpPtS$(+}y3_yX}r{y?9;ZKA@EeLEpMLh4S17|T6E+j;JIVrWodUfFHYZqG5>Y(=;2#>kinK`tGZ zhF%`HnTI*CPiQ+7l7WfdBg}iBhv&|H%vo#EZEBc+9m0H%ZW|o8tV+SO?iJ!OkiM}4 z^GQUA_wYU_L>?1u2|jGQFyF6%VJvqEZw+T_b+&3}>tt==&K4?fk;E2-ZV8Mn`L!iZ zx3u#Ay^{bQUK%&*B^{O8{qgp} z@_)JV-(Ps>vx5y(+#fqyYV$9Hwc)fdR~-2OZ=OzWc(hwakJ1ya|F&PhK1k<*4(a;v zezV*E+4ayCv}83)6nW6A{qw3ziXbo!g%}BK*tmamUE2?Zc+NLA?A&yCzq)pBe#wd- z!ed?Qf{7*z0S>%8cN|V*{r*1E%`2jxfG+U~0(R;jcireRumkPiU{7)8KOYEo{m*A` z1_J#bPGM^XTYK=I=U}UfwodYY!qgTP{htuR|3@?(e$XOxMc2|Luv;BJTafE25j
2MOu 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 MVSgNB<9qY}03HT&{r~^~ delta 15162 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 Date: Wed, 25 Sep 2024 16:00:50 +0200 Subject: [PATCH 11/25] chore: add @Tayebsed93 as new contributor (#134) (#135) Signed-off-by: Pierre-Yves Lapersonne --- .github/CODEOWNERS | 14 +++++++------- .github/CONTRIBUTORS.txt | 1 + .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/documentation-update.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/ISSUE_TEMPLATE/token_update.yml | 2 +- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 582e522cf..f67303bbd 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -17,15 +17,15 @@ AUTHORS.txt @pylapp CONTRIBUTORS.txt @pylapp LICENSE @pylapp -README.md @ludovic35 @pylapp -CHANGELOG.md @ludovic35 @pylapp +README.md @ludovic35 @pylapp @Tayebsed93 +CHANGELOG.md @ludovic35 @pylapp @Tayebsed93 DEVELOP.md @ludovic35 @pylapp CONTRIBUTING.md @ludovic35 @pylapp -THIRD-PARTY.md @ludovic35 @pylapp -NOTICE.txt @ludovic35 @pylapp +THIRD-PARTY.md @pylapp +NOTICE.txt @pylapp # Project -/.github/ @pylapp @ludovic35 -/Showcase/ @pylapp @ludovic35 -/OUDS/ @pylapp @ludovic35 +/.github/ @pylapp +/Showcase/ @pylapp @ludovic35 @Tayebsed93 +/OUDS/ @pylapp @ludovic35 @Tayebsed93 diff --git a/.github/CONTRIBUTORS.txt b/.github/CONTRIBUTORS.txt index f24c27374..5f0f53886 100644 --- a/.github/CONTRIBUTORS.txt +++ b/.github/CONTRIBUTORS.txt @@ -23,3 +23,4 @@ Julien DERAMOND Pierre-Yves LAPERSONNE Ludovic PINEL +Tayeb SEDRAIA \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 08d2a95e1..23cc8bede 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,7 +2,7 @@ name: Report a bug description: Tell us about a bug or issue you may have identified in OUDS iOS. title: "[Bug]: Bug Summary" labels: ["๐Ÿž bug", "๐Ÿ” triage"] -assignees: ["ludovic35", "pylapp"] +assignees: ["ludovic35", "pylapp", "Tayebsed93"] body: - type: checkboxes attributes: diff --git a/.github/ISSUE_TEMPLATE/documentation-update.yml b/.github/ISSUE_TEMPLATE/documentation-update.yml index 3172cdda1..85c31cc71 100644 --- a/.github/ISSUE_TEMPLATE/documentation-update.yml +++ b/.github/ISSUE_TEMPLATE/documentation-update.yml @@ -2,7 +2,7 @@ name: Documentation Update description: Describe this issue found in the documentation title: "[Doc]: " labels: ["๐Ÿ“– documentation", "๐Ÿ” triage"] -assignees: ["ludovic35", "pylapp"] +assignees: ["ludovic35", "pylapp", "Tayebsed93"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 85703208a..d223e9a82 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -2,7 +2,7 @@ name: Feature Request description: Suggest a new Epic to be added to the backlog. title: "[feature]: " labels: ["feature", "๐Ÿ” triage"] -assignees: ["ludovic35", "pylapp"] +assignees: ["ludovic35", "pylapp", "Tayebsed93"] body: - type: checkboxes attributes: diff --git a/.github/ISSUE_TEMPLATE/token_update.yml b/.github/ISSUE_TEMPLATE/token_update.yml index 965787a98..a07ef09f2 100644 --- a/.github/ISSUE_TEMPLATE/token_update.yml +++ b/.github/ISSUE_TEMPLATE/token_update.yml @@ -2,7 +2,7 @@ name: Token Update Request description: Please fill out the following details for your token update request. title: "[Token Update] - Title" labels: ["๐Ÿ“€ token", "๐Ÿ” triage"] -assignees: ["ludovic35", "pylapp"] +assignees: ["ludovic35", "pylapp", "Tayebsed93"] body: - type: markdown attributes: From 8f7fe44637326eb885e0904f12e4d3db5308dd39 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Wed, 25 Sep 2024 16:01:57 +0200 Subject: [PATCH 12/25] ci: remove useless options in doc generation script Signed-off-by: Pierre-Yves Lapersonne --- generateDoc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generateDoc.sh b/generateDoc.sh index b19e212c2..00a84f4a2 100755 --- a/generateDoc.sh +++ b/generateDoc.sh @@ -101,7 +101,7 @@ clean_repo() { show_help() { echo "This script will use swift-docc-plugin to build HTML documentation of the OUDS iOS Swift Package" echo "It can also update the Git repository." - echo -e "Usage: $0 [--help] --libversion=VERSION [--usegit | --nozip | --nokeep]\n" + echo -e "Usage: $0 [--help] --libversion=VERSION [--usegit | --nozip]\n" echo "Options:" echo " --help Shows this help message." echo " --libversion=VERSION Specifies the library version to include in HTML page (mandatory)." From 7dd748adb16974db4636ce9bb05ae1d041c786e0 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Wed, 25 Sep 2024 16:31:28 +0200 Subject: [PATCH 13/25] docs: add details about raw and semantic tokens definitions (#127) (#128) Reviewed-by: Tayeb SEDRAIA --- CHANGELOG.md | 1 + OUDS/Core/OUDS/Sources/_OUDS.docc/Tokens.md | 21 ++----- .../_OUDSTokensRaw.docc/OUDSTokensRaw.md | 56 +++++++++++++++++-- .../OUDSTokensSemantic.md | 41 +++++++++++++- OUDS/README.md | 4 +- 5 files changed, 98 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3f1419e8..28ad084fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Library] Update color semantic tokens to better manage light and dark modes values - [Library] Update elevation colors focus light and dark - [Library] Rename space padding inline component tokens by removing "component" word +- [Library] Improve documentation about raw and semantic tokens definitions ([#127](https://github.com/Orange-OpenSource/ouds-ios/issues/127)) - [Library] Rename some sizing semantic tokens ([#122](https://github.com/Orange-OpenSource/ouds-ios/issues/122)) - [Library] Replace "adaptable" word by "scaled" in space semantic tokens, "fix" by "fixed" and remove "layout" ([#117](https://github.com/Orange-OpenSource/ouds-ios/issues/117)) diff --git a/OUDS/Core/OUDS/Sources/_OUDS.docc/Tokens.md b/OUDS/Core/OUDS/Sources/_OUDS.docc/Tokens.md index dd1c9b193..7fdcfe071 100644 --- a/OUDS/Core/OUDS/Sources/_OUDS.docc/Tokens.md +++ b/OUDS/Core/OUDS/Sources/_OUDS.docc/Tokens.md @@ -98,7 +98,7 @@ In addition, there are hundreds of _semantics tokens_ and we needed to add them That is the reason why tokens are exposed as `@objc open` to be available and overridable anywhere. -To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are avaialble for those who want too make their own theme. It's only syntaxic sugar to bring _design words_ in our product. +To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want to make their own theme. It's only syntaxic sugar to bring _design words_ in our product. Example with [OUDSTokensComponent/ColorSemanticTokens](https://ios.unified-design-system.orange.com/documentation/oudstokenssemantic/colorsemantictokens): @@ -125,7 +125,7 @@ In fact, we choose to use as most as possible primitive types for raw values, li So we expose also in higher level some properties so as to convert when needed some of these types to `SwiftUI` types (like `Font.Weight` and `Color`). -To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want too make their own theme. +To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want to make their own theme. Using more simple and primitive types will help also to test the library. With also type aliases we force users to use our types and not higher level types like _SwiftUI_ types. @@ -157,23 +157,12 @@ extension String { // The OUDS library still exposes this comptuer property ## Add, edit or remove tokens If you need to add, edit or remove tokens, you will have to follow some simple steps. -You may need to [create an issue](https://github.com/Orange-OpenSource/ouds-ios/issues) or [a pull request](https://github.com/Orange-OpenSource/ouds-ios/pulls) to submit the evolutions you want. +You may need to [create an issue](https://github.com/Orange-OpenSource/ouds-ios/issues) or [a pull request](https://github.com/Orange-OpenSource/ouds-ios/pulls) to submit the evolutions you want. Use for example the _Token Update Request_ issue template. ### For raw tokens -First, find the file containing the tokens you target. For example, _raw tokens_ are listed and gathered in dedicated files (one file for elevation tokens, one file for dimensions tokens, etc.). -Then, in the _enum_, add as _static let_ the new raw rotken you want, or update or remove the one you target. Beware, some of them are not *raw types* but *composite types* because they wrap severla values. - -Do not forget to update the unit tests. Indeed we don't want to test realy the values of each raw token, because for each update of values the unit tests will have to be updated, and it is time wasting. Thus we only test relationship between tokens. For exemple, for a color palette we ensure the colors are lighter and lighter (or darker and darker). For sizes we check if a variable remains lower than the next one, etc. - -Beware, if you want remove tokens and if the raw tokens you want to remove are shared to others, prefer keeping the old value until the next release and flag it as deprecated so as to avoid to break the backward compatibility. +You can refer to the *OUDSTokensRaw* documentation or [get it online](https://ios.unified-design-system.orange.com/documentation/oudstokensraw/) ### For semantic tokens -Semantic tokens are declared in dedicated protocols, i.e. each semantic token family is gathered in its own protocol definition. It allows to not spread tokens everywhere, keep things clean, and will force themes to implement them so as to be sure the tokens will always been defined. -You may need thus to add the semantic tokens you want in the suitable protocol, then update the theme which defines the vavlues by implementing the protocol. -You can declare a semantic token (or several) in a protocol, and define them in your theme assigning in the end a raw token as value. - -Do not forget to update the unit tests. Indeed we don't tests the real values of the semantic tokens which can change a lot, but we test if the semantic tokens can be overriden, i.e. if a theme which is a subclass of an higher level them can change the value for each semantic token. It will ensure that tokens remain overridable. - -Beware, if you want remove tokens and if the semantic tokens you want to remove are shared to others, prefer keeping the old value until the next release and flag it as deprecated so as to avoid to break the backward compatibility. +You can refer to the *OUDSTokensSemantic* documentation or [get it online](https://ios.unified-design-system.orange.com/documentation/oudstokenssemantic/ diff --git a/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md b/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md index 8898a3495..60a7dd009 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md +++ b/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md @@ -4,17 +4,17 @@ _Raw tokens_ are smallest _tokens_ possible. They are associated to raw values a ## Overview -In fact, we choose to use as most as possible primitive types for raw values, like `Int`, `Double`, `CGFloat` or `String` so as to handle the smallest types with few impacts on the memory for ecodesign principles. Indeed with hundreds of raw tokens, it will be more efficient to store primitive small types than structs or classes. +In fact, we choose to use as most as possible primitive types for raw values, like `Int`, `Double`, `CGFloat` or `String` so as to handle the smallest types with few impacts on the memory for ecodesign principles. Indeed with hundreds of raw tokens, it will be more efficient to store primitive small types than Swift `struct` or `class` objects. So we expose also in higher level some properties so as to convert when needed some of these types to `SwiftUI` types (like `Font.Weight` and `Color`). -To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are avaialble for those who want too make their own theme. +To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want to make their own theme. Using more simple and primitive types will help also to test the library. With also type aliases we force users to use our types and not higher level types like _SwiftUI_ types. -We also choose to add in _extension_ all the tokens values in a separated file so as to help the *Figma*-JSON-to-Swift parser to build files to copy and past easily in the project and keeping all the other objects. +We also choose to add in _extension_ all the tokens values in a separated file so as to help the *Figma*-JSON-to-Swift parser to build files to copy and paste easily in the project and keeping all the other objects. -Example for ``ColorRawTokens`: +Example for ``ColorRawTokens``: ```swift // Define types for color raw tokens @@ -22,7 +22,7 @@ public typealias ColorRawToken = String public enum ColorRawTokens { } // Gathers all color raw tokens -extension ColorRawTokens { +extension ColorRawTokens { // In a separated file public static let colorFunctionalWhite: ColorRawToken = "#FFFFFF" public static let colorFunctionalScarlet400: ColorRawToken = "#FF4D4E" @@ -31,12 +31,56 @@ extension ColorRawTokens { } extension String { - public var color: Color { + public var color: Color { // Helper for SwiftUI Color(hexadecimalCode: self) } } ``` +## Architecture + +The *Composites* folder contains some _composite class_ defined to match the objects available in *Figma*. +In fact the design system implementations should expose pack of values so as to gather several tokens in one object. For exemple `ElevationCompositeRawToken` can be used for predefined elevations effects, and `TypographyCompositeRawToken` can be used for predefined typography. +All such *composites* are defined here. + +The *Declarations* folder contains all the Swift `enum` objects which will gather the raw tokens. +In fact, raw tokens are defined as `static let` _stored properties_, an adding them in an `enum` is more optimized for namespaces reasons. Thus all `public enum` gathering raw tokens are defined there. + +The *TypeAliases* folder contains all the *typealias* values used for the raw tokens. +Indeed these aliases are here to bring clarity and meanings in the library, and also to help users (i.e. developers) to know what kind of objects they handle with the same vocabulary as the one used in *Figma*, and in general, in the whole design system. They can be seen as a ligh level of abstraction with meanings, without having to define real types with `struct` or `class`. + +The *Values* folder is maybe the hotter one. +In fact all the raw tokens values are defined there, and if a JSON to Swift parser generate files, these files must be stored there. It contains only pure raw tokens Swift values, without any type aliases definitions or objects declarations. + +In a nutshell, place the generated values somewhere, and the types and objects elsewhere. + +## Raw tokens management + +### How to add raw tokens + +First, you need to define which from family this semantic comes. We have today up to 7 families: *border*, *color*, *dimension*, *elevation*, *grid*, *opacity* and *typography*. +If your token is not from one of these groups, maybe you should redesign your token or create a new family. To do that, you will have to create a dedicated Swift `enum`, with a useful name, and declare as a `static let` the raw tokens in an `extension`. If you already know the family, just update the matching files. + +If you need to define Swift `typealias`, update the suitable file in the *TypeAliases* folder. + +Please, respect the nomenclature of the files, e.g. for a new family "Awesome raw" tokens: +- declaration of raw tokens family must be `AwesomeRawTokens.swift` +- values must be in `AwesomeRawTokens+Values.swift` +- type aliases must be in `AwesomeRawTokens+Aliases.swift` +- composites objects must be in `AwesomeRawTokens+Composites.swift` + +*Composites* here are notions from *Figma* and are here to pack several raw tokens together to expose a plain, useful and usable object. + +Then, update the unit tests. We do not test the raw tokens values as they are, because these values will be generated and keeping up to date the unit tests may be time wasting. +But we can however test the relationships between tokens, for exemple for colors if they go lighter and lighter, or for dimensions if they go smaller and smaller. If some raw tokens like font weights strongly rely on the values, we still test these values. + +### How to update or remove raw tokens + +Quite simple, find the raw token you want to update or remove, and update or remove it. +But beware, if you change the name of the property or if you move it from an `enum` to another, or if you remove the token, you must keep retrocompatibility as much as possible so as to avoid to break any public API. Keep also the CHANGELOG and/or the release updated with some BREAKING CHANGE notification, and also the Git history clean. + +If you update the value, keep also the CHANGELOG and/or RELEASE NOTE updated so as to let yout users know the variables have been changed. + ## Topics ### Group diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md b/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md index 6a15b9609..6bdb0f9c6 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md @@ -11,7 +11,7 @@ In addition, there are hundreds of _semantics tokens_ and we needed to add them That is the reason why tokens are exposed as `@objc open` to be available and oveeridable anywhere. -To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are avaialble for those who want too make their own theme. +To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want to make their own theme. Example with ``ColorSemanticTokens``: @@ -28,6 +28,45 @@ extension OUDSTheme: ColorSemanticTokens { } ``` +## Architecture + +The *Composites* folder contains some _composite class_ defined to pack double values for dedicated needs, like size classes management (_regular_ or _compact_ device modes), and also for color schemes management (_light_ and _dark_ modes). +This *composites* are not the same as the ones defined in the *Figma* design systme, they are just utilities to handle tuple of values, without the syntaxe of tuples and with some helper functions. + +The *TypeAliases* folder contains all the *typealias* values used for the semantic tokens. +Indeed these aliases are here to bring clarity and meanings in the library, and also to help users (i.e. developers) to know what kind of objects they handle with the same vocabulary as the one used in *Figma*, and in general, in the whole design system. They can be seen as a ligh level of abstraction with meanings, without having to define real types with `struct` or `class`. +Type aliases here point to raw tokens aliases, thus by transition they point to real types. + +The *Values* folder is maybe the hotter one. +In fact all the semantic tokens values are defined there, and if a JSON to Swift parser generate files, these files must be stored there. We need any _theme_ can embed and override all or some of the tokens, and if a new theme must be implemented from nothing, it must implement all the semantic tokens. Thus each semantic tokens group is declared in a Swft `protocol`. +These protocols list all semantic tokens for each "family". Thus, any theme implementation (at least `OUDSTheme`) must implement the values, and if possible through a _Swift_ extension of the `class` so as to keep seperated the objects. + +In a nutshell, declare the tokens somewhere in protocols, and define theme in theme implementation. + +## Semantic tokens management + +### How to add semantic tokens + +First, you need to define which from family this semantic comes. We have today 9 families: *border*, *color*, *dimension*, *elevation*, *grid*, *opacity*, *sizing*, *spacing* and *typography*. +If your token is not from one of these groups, maybe you should redesign your token or create a new family. To do that, you will have to create a dedicated Swift `protocol`, with a useful name, and declare as a `var` the semantic token. If you already know the family, just update the matching files. + +If you need to define Swift `typealias`, update the suitable file in the *TypeAliases* folder. If you think users may handle your tokens with tuples, or pack of tokens, you can add your own *composite* object. + +Please, respect the nomenclature of the files, e.g. for a new family "Awesome semantic" tokens: +- values must be in `AwesomeSemanticTokens.swift` +- type aliases must be in `AwesomeSemanticTokens+Aliases.swift` +- composites objects must be in `AwesomeSemanticTokens+Composites.swift` + +Then, update the unit tests. For each semantic tokens we check if a subtheme can override the token, i.e. update the `MockTheme` by overring the property with a fake value, then compare it to the `OUDSTheme` containing a default value. If you have defined also composite objects, add unit tests to check if they do their job. + +### How to update or remove semantic tokens + +Quite simple, find the semantic token you want to update or remove, and update or remove it. +But beware, if you change the name of the property or if you move it from a `protocol` to another, or if you remove the token, you must keep retrocompatibility as much as possible so as to avoid to break any public API. Keep also the CHANGELOG and/or the release updated with some BREAKING CHANGE notification, and also the Git history clean. + +If you update the value, keep also the CHANGELOG and/or RELEASE NOTE updated so as to let yout users know the variables have been changed. + + ## Topics ### Group diff --git a/OUDS/README.md b/OUDS/README.md index f066b4ebf..e62008d87 100644 --- a/OUDS/README.md +++ b/OUDS/README.md @@ -131,7 +131,7 @@ They can be seen as an high level of usage with functional meanings. Thus if we need for example to change a warning color, supposing this color is defined as a _semantic token_, we onlyhave to change its assigned value and all components using the _semantic token_ won't be impacted in their definition. In addition, there are hundreds of _semantics tokens_ and we needed to add them to the abstract root theme using extensions for clarity reasons to prevent to have a _Swift class_ with thousands of lines. Each _raw token_ "family" is then declared in its dedicated _Swift protocol_ any root theme must implement. Because we choose to split responsabilities and objects into their own modules, we faced troubles to make possible for children themes to override properties declared in _protocols_ and defined in _extensions_. That is the reason why tokens are exposed as `@objc open` to be available and oveeridable anywhere. -To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want too make their own theme. +To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want to make their own theme. Example with `ColorSemanticTokens`: @@ -152,7 +152,7 @@ _Raw tokens_ are smallest _tokens_ possible. They are associated to raw values a In fact, we choose to use as most as possible primitive types for raw values, like `Int`, `Double`, `CGFloat` or `String` so as to handle the smallest types with few impacts on the memory for ecodesign principles. Indeed with hundreds of raw tokens, it will be more efficient to store primitive small types than structs or classes. So we expose also in higher level some properties so as to convert when needed some of these types to `SwiftUI` types (like `Font.Weight` and `Color`). -To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want too make their own theme. +To keep the same semantics as the ones used in our specifications, _typealias_ are used to as to make the links to _primitive types_ and our logic of _tokens_. These type aliases are available for those who want to make their own theme. Using more simple and primitive types will help also to test the library. With also type aliases we force users to use our types and not higher level types like _SwiftUI_ types. From b0237e470430bbc51dc2fd79b898744c9ac8f04b Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Wed, 25 Sep 2024 16:52:10 +0200 Subject: [PATCH 14/25] refactor: rename dimension semantic tokens , clean code (#130) (#136) - Rename dimension tokens to apply t-shirt size logic - Clean code, more labels for tokenator, split files for subthemes Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 1 + .../OUDSTheme+BorderSemanticTokens.swift | 3 + .../OUDSTheme+ColorSemanticTokens.swift | 3 + .../OUDSTheme+DimensionSemanticTokens.swift | 53 ++++--- .../OUDSTheme+ElevationSemanticTokens.swift | 3 + .../OUDSTheme+GridSemanticTokens.swift | 3 + .../OUDSTheme+OpacitySemanticTokens.swift | 3 + .../OUDSTheme+SizingSemanticTokens.swift | 31 ++-- .../OUDSTheme+SpacingSemanticTokens.swift | 3 + .../OUDSTheme+TypographySemanticTokens.swift | 3 + .../MockTheme+DimensionSemanticTokens.swift | 50 +++--- ...emeOverrideOfDimensionSemanticTokens.swift | 150 +++++++++--------- ...ThemeOverrideOfSpacingSemanticTokens.swift | 2 +- .../InverseTheme+ColorSemanticTokens.swift | 3 + ...InverseTheme+ElevationSemanticTokens.swift | 3 + .../OrangeBrandColorRawTokens.swift | 25 +++ .../OrangeTheme+SemanticColorTokens.swift | 3 + .../OrangeBrandColorTokens+Aliases.swift | 20 +++ .../OrangeBrandColorRawTokens+Values.swift} | 13 +- .../SoshBrandColorRawTokens.swift | 21 +++ .../SoshBrandColorTokens+Aliases.swift | 17 ++ .../SoshBrandColorRawTokens+Values.swift} | 17 +- .../Declarations/BorderRawTokens.swift | 3 +- .../Sources/Declarations/ColorRawTokens.swift | 8 +- .../Declarations/DimensionRawTokens.swift | 3 +- .../Declarations/ElevationRawTokens.swift | 3 +- .../Sources/Declarations/GridRawTokens.swift | 3 +- .../Declarations/OpacityRawTokens.swift | 3 +- .../Declarations/TypographyRawTokens.swift | 3 +- .../Values/BorderRawTokens+Values.swift | 4 +- .../Values/ColorRawTokens+Values.swift | 4 +- .../Values/DimensionRawTokens+Values.swift | 4 +- .../Values/ElevationRawTokens+Values.swift | 4 +- .../Sources/Values/GridRawTokens+Values.swift | 4 +- .../Values/OpacityRawTokens+Values.swift | 4 +- .../Values/TypographyRawTokens+Values.swift | 4 +- .../Sources/Values/BorderSemanticTokens.swift | 3 + .../Sources/Values/ColorSemanticTokens.swift | 3 + .../Values/DimensionSemanticTokens.swift | 55 +++---- .../Values/ElevationSemanticTokens.swift | 3 + .../Sources/Values/GridSemanticTokens.swift | 3 + .../Values/OpacitySemanticTokens.swift | 3 + .../Sources/Values/SizingSemanticTokens.swift | 3 + .../Values/SpacingSemanticTokens.swift | 3 + .../Values/TypographySemanticTokens.swift | 3 + 45 files changed, 358 insertions(+), 205 deletions(-) create mode 100644 OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift create mode 100644 OUDS/Core/Themes/Orange/Sources/TypeAliases/OrangeBrandColorTokens+Aliases.swift rename OUDS/Core/Themes/Orange/Sources/{OrangeBrandColorRawTokens.swift => Values/OrangeBrandColorRawTokens+Values.swift} (90%) create mode 100644 OUDS/Core/Themes/Sosh/Sources/Declarations/SoshBrandColorRawTokens.swift create mode 100644 OUDS/Core/Themes/Sosh/Sources/TypeAliases/SoshBrandColorTokens+Aliases.swift rename OUDS/Core/Themes/Sosh/Sources/{SoshBrandColorRawTokens.swift => Values/SoshBrandColorRawTokens+Values.swift} (82%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28ad084fe..1d321f581 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- [Library] Rename dimension semantic tokens to apply T-Shirt size rules ([#130](https://github.com/Orange-OpenSource/ouds-ios/issues/130)) - [Library] Update color semantic tokens to better manage light and dark modes values - [Library] Update elevation colors focus light and dark - [Library] Rename space padding inline component tokens by removing "component" word diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+BorderSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+BorderSemanticTokens.swift index 598c96909..c95e14fa5 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+BorderSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+BorderSemanticTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Defines basic values common to all themes for `BorderSemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. /// The aim of this extensions is to make relationships between all semantic tokens for borders and associated raw tokens. diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift index 867727046..ac7b1ec82 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift @@ -16,6 +16,9 @@ import OUDSFoundations import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + // swiftlint:disable line_length /// Defines basic values common to all themes for `ColorSemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+DimensionSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+DimensionSemanticTokens.swift index c6548e93b..ee98cef5c 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+DimensionSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+DimensionSemanticTokens.swift @@ -15,33 +15,36 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Defines basic values common to all themes for `DimensionSemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: DimensionSemanticTokens { - @objc open var dimension0: DimensionSemanticToken { DimensionRawTokens.dimension0 } - @objc open var dimension10: DimensionSemanticToken { DimensionRawTokens.dimension25 } - @objc open var dimension20: DimensionSemanticToken { DimensionRawTokens.dimension50 } - @objc open var dimension30: DimensionSemanticToken { DimensionRawTokens.dimension75 } - @objc open var dimension40: DimensionSemanticToken { DimensionRawTokens.dimension100 } - @objc open var dimension50: DimensionSemanticToken { DimensionRawTokens.dimension150 } - @objc open var dimension60: DimensionSemanticToken { DimensionRawTokens.dimension200 } - @objc open var dimension70: DimensionSemanticToken { DimensionRawTokens.dimension250 } - @objc open var dimension80: DimensionSemanticToken { DimensionRawTokens.dimension300 } - @objc open var dimension90: DimensionSemanticToken { DimensionRawTokens.dimension350 } - @objc open var dimension100: DimensionSemanticToken { DimensionRawTokens.dimension400 } - @objc open var dimension110: DimensionSemanticToken { DimensionRawTokens.dimension450 } - @objc open var dimension120: DimensionSemanticToken { DimensionRawTokens.dimension500 } - @objc open var dimension130: DimensionSemanticToken { DimensionRawTokens.dimension550 } - @objc open var dimension140: DimensionSemanticToken { DimensionRawTokens.dimension600 } - @objc open var dimension150: DimensionSemanticToken { DimensionRawTokens.dimension650 } - @objc open var dimension160: DimensionSemanticToken { DimensionRawTokens.dimension700 } - @objc open var dimension170: DimensionSemanticToken { DimensionRawTokens.dimension750 } - @objc open var dimension180: DimensionSemanticToken { DimensionRawTokens.dimension800 } - @objc open var dimension190: DimensionSemanticToken { DimensionRawTokens.dimension900 } - @objc open var dimension200: DimensionSemanticToken { DimensionRawTokens.dimension1000 } - @objc open var dimension210: DimensionSemanticToken { DimensionRawTokens.dimension1200 } - @objc open var dimension220: DimensionSemanticToken { DimensionRawTokens.dimension1400 } - @objc open var dimension230: DimensionSemanticToken { DimensionRawTokens.dimension1600 } - @objc open var dimension240: DimensionSemanticToken { DimensionRawTokens.dimension1800 } + @objc open var dimensionNone: DimensionSemanticToken { DimensionRawTokens.dimension0 } + @objc open var dimension10XS: DimensionSemanticToken { DimensionRawTokens.dimension25 } + @objc open var dimension9XS: DimensionSemanticToken { DimensionRawTokens.dimension50 } + @objc open var dimension8XS: DimensionSemanticToken { DimensionRawTokens.dimension75 } + @objc open var dimension7XS: DimensionSemanticToken { DimensionRawTokens.dimension100 } + @objc open var dimension6XS: DimensionSemanticToken { DimensionRawTokens.dimension150 } + @objc open var dimension5XS: DimensionSemanticToken { DimensionRawTokens.dimension200 } + @objc open var dimension4XS: DimensionSemanticToken { DimensionRawTokens.dimension250 } + @objc open var dimension3XS: DimensionSemanticToken { DimensionRawTokens.dimension300 } + @objc open var dimension2XS: DimensionSemanticToken { DimensionRawTokens.dimension350 } + @objc open var dimensionXS: DimensionSemanticToken { DimensionRawTokens.dimension400 } + @objc open var dimensionSM: DimensionSemanticToken { DimensionRawTokens.dimension450 } + @objc open var dimensionMD: DimensionSemanticToken { DimensionRawTokens.dimension500 } + @objc open var dimensionLG: DimensionSemanticToken { DimensionRawTokens.dimension550 } + @objc open var dimensionXL: DimensionSemanticToken { DimensionRawTokens.dimension600 } + @objc open var dimension2XL: DimensionSemanticToken { DimensionRawTokens.dimension650 } + @objc open var dimension3XL: DimensionSemanticToken { DimensionRawTokens.dimension700 } + @objc open var dimension4XL: DimensionSemanticToken { DimensionRawTokens.dimension750 } + @objc open var dimension5XL: DimensionSemanticToken { DimensionRawTokens.dimension800 } + @objc open var dimension6XL: DimensionSemanticToken { DimensionRawTokens.dimension900 } + @objc open var dimension7XL: DimensionSemanticToken { DimensionRawTokens.dimension1000 } + @objc open var dimension8XL: DimensionSemanticToken { DimensionRawTokens.dimension1200 } + @objc open var dimension9XL: DimensionSemanticToken { DimensionRawTokens.dimension1400 } + @objc open var dimension10XL: DimensionSemanticToken { DimensionRawTokens.dimension1600 } + @objc open var dimension11XL: DimensionSemanticToken { DimensionRawTokens.dimension1800 } } diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift index ca06e61ad..854e465d5 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Defines basic values common to all themes for `ElevationSemanticTokenss`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. /// The aim of this extensions is to make relationships between all semantic tokens for elevations and associated raw tokens. diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+GridSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+GridSemanticTokens.swift index 39f43bbb3..e11b50910 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+GridSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+GridSemanticTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Defines basic values common to all themes for `DimensionSemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: GridSemanticTokens { diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+OpacitySemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+OpacitySemanticTokens.swift index caa49027c..d898d8cbc 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+OpacitySemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+OpacitySemanticTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Defines basic values common to all themes for `OpacitySemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: OpacitySemanticTokens { diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift index a0270036d..9a7313968 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + // swiftlint:disable line_length /// Defines basic values common to all themes for `SizingSemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. @@ -60,23 +63,23 @@ extension OUDSTheme: SizingSemanticTokens { @objc open var sizeIconWithTypeBodyLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } @objc open var sizeIconWithTypeBodyLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension350, regular: DimensionRawTokens.dimension350 ) } - @objc open var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { dimension50 } - @objc open var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { dimension60 } - @objc open var sizeIconWithTypeLabelSmallTall: SizingSemanticToken { dimension70 } + @objc open var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { dimension6XS } + @objc open var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { dimension5XS } + @objc open var sizeIconWithTypeLabelSmallTall: SizingSemanticToken { dimension4XS } - @objc open var sizeIconWithTypeLabelMediumShort: SizingSemanticToken { dimension60 } - @objc open var sizeIconWithTypeLabelMediumMedium: SizingSemanticToken { dimension70 } - @objc open var sizeIconWithTypeLabelMediumTall: SizingSemanticToken { dimension80 } + @objc open var sizeIconWithTypeLabelMediumShort: SizingSemanticToken { dimension5XS } + @objc open var sizeIconWithTypeLabelMediumMedium: SizingSemanticToken { dimension4XS } + @objc open var sizeIconWithTypeLabelMediumTall: SizingSemanticToken { dimension3XS } - @objc open var sizeIconWithTypeLabelLargeShorter: SizingSemanticToken { dimension70 } - @objc open var sizeIconWithTypeLabelLargeShort: SizingSemanticToken { dimension80 } - @objc open var sizeIconWithTypeLabelLargeMedium: SizingSemanticToken { dimension90 } - @objc open var sizeIconWithTypeLabelLargeTall: SizingSemanticToken { dimension100 } - @objc open var sizeIconWithTypeLabelLargeTaller: SizingSemanticToken { dimension130 } + @objc open var sizeIconWithTypeLabelLargeShorter: SizingSemanticToken { dimension4XS } + @objc open var sizeIconWithTypeLabelLargeShort: SizingSemanticToken { dimension3XS } + @objc open var sizeIconWithTypeLabelLargeMedium: SizingSemanticToken { dimension2XS } + @objc open var sizeIconWithTypeLabelLargeTall: SizingSemanticToken { dimensionXS } + @objc open var sizeIconWithTypeLabelLargeTaller: SizingSemanticToken { dimensionLG } - @objc open var sizeIconWithTypeLabelXLargeShort: SizingSemanticToken { dimension100 } - @objc open var sizeIconWithTypeLabelXLargeMedium: SizingSemanticToken { dimension120 } - @objc open var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { dimension130 } + @objc open var sizeIconWithTypeLabelXLargeShort: SizingSemanticToken { dimensionXS } + @objc open var sizeIconWithTypeLabelXLargeMedium: SizingSemanticToken { dimensionMD } + @objc open var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { dimensionLG } // MARK: - Semantic token - Sizing - Max width typography diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift index 85062b826..9d6cf6359 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + // swiftlint:disable line_length /// Defines basic values common to all themes for `SpacingSemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift index 0a24b780d..9c927cc4f 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + // swiftlint:disable line_length /// Defines basic values common to all themes for `TypographySemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift index 0443b1a94..5de4df69c 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift @@ -20,29 +20,29 @@ extension MockTheme { static let mockThemeDimensionSemanticToken: DimensionSemanticToken = 007 - override var dimension0: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension10: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension20: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension30: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension40: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension50: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension60: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension70: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension80: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension90: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension100: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension110: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension120: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension130: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension140: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension150: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension160: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension170: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension180: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension190: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension200: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension210: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension220: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension230: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } - override var dimension240: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimensionNone: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension10XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension9XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension8XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension7XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension6XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension5XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension4XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension3XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension2XS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimensionXS: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimensionSM: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimensionMD: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimensionLG: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimensionXL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension2XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension3XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension4XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension5XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension6XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension7XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension8XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension9XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension10XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } + override var dimension11XL: DimensionSemanticToken { Self.mockThemeDimensionSemanticToken } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift index 53f86b880..51211a21c 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift @@ -28,128 +28,128 @@ final class TestThemeOverrideOfDimensionSemanticTokens: XCTestCase { inheritedTheme = MockTheme() } - func testInheritedThemeCanOverrideSemanticTokenDimension0() throws { - XCTAssertNotEqual(inheritedTheme.dimension0, abstractTheme.dimension0) - XCTAssertTrue(inheritedTheme.dimension0 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimensionNone() throws { + XCTAssertNotEqual(inheritedTheme.dimensionNone, abstractTheme.dimensionNone) + XCTAssertTrue(inheritedTheme.dimensionNone == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension10() throws { - XCTAssertNotEqual(inheritedTheme.dimension10, abstractTheme.dimension10) - XCTAssertTrue(inheritedTheme.dimension10 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension10XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension10XS, abstractTheme.dimension10XS) + XCTAssertTrue(inheritedTheme.dimension10XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension20() throws { - XCTAssertNotEqual(inheritedTheme.dimension20, abstractTheme.dimension20) - XCTAssertTrue(inheritedTheme.dimension20 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension9XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension9XS, abstractTheme.dimension9XS) + XCTAssertTrue(inheritedTheme.dimension9XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimensio3n0() throws { - XCTAssertNotEqual(inheritedTheme.dimension30, abstractTheme.dimension30) - XCTAssertTrue(inheritedTheme.dimension30 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension8XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension8XS, abstractTheme.dimension8XS) + XCTAssertTrue(inheritedTheme.dimension8XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension40() throws { - XCTAssertNotEqual(inheritedTheme.dimension40, abstractTheme.dimension40) - XCTAssertTrue(inheritedTheme.dimension40 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension7XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension7XS, abstractTheme.dimension7XS) + XCTAssertTrue(inheritedTheme.dimension7XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension50() throws { - XCTAssertNotEqual(inheritedTheme.dimension50, abstractTheme.dimension50) - XCTAssertTrue(inheritedTheme.dimension50 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension6XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension6XS, abstractTheme.dimension6XS) + XCTAssertTrue(inheritedTheme.dimension6XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension60() throws { - XCTAssertNotEqual(inheritedTheme.dimension60, abstractTheme.dimension60) - XCTAssertTrue(inheritedTheme.dimension60 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension5XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension5XS, abstractTheme.dimension5XS) + XCTAssertTrue(inheritedTheme.dimension5XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension70() throws { - XCTAssertNotEqual(inheritedTheme.dimension70, abstractTheme.dimension70) - XCTAssertTrue(inheritedTheme.dimension70 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension4XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension4XS, abstractTheme.dimension4XS) + XCTAssertTrue(inheritedTheme.dimension4XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension80() throws { - XCTAssertNotEqual(inheritedTheme.dimension0, abstractTheme.dimension0) - XCTAssertTrue(inheritedTheme.dimension0 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension3XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension3XS, abstractTheme.dimension3XS) + XCTAssertTrue(inheritedTheme.dimension3XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension90() throws { - XCTAssertNotEqual(inheritedTheme.dimension90, abstractTheme.dimension90) - XCTAssertTrue(inheritedTheme.dimension90 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension2XS() throws { + XCTAssertNotEqual(inheritedTheme.dimension2XS, abstractTheme.dimension2XS) + XCTAssertTrue(inheritedTheme.dimension2XS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension100() throws { - XCTAssertNotEqual(inheritedTheme.dimension100, abstractTheme.dimension100) - XCTAssertTrue(inheritedTheme.dimension100 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimensionXS() throws { + XCTAssertNotEqual(inheritedTheme.dimensionXS, abstractTheme.dimensionXS) + XCTAssertTrue(inheritedTheme.dimensionXS == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension110() throws { - XCTAssertNotEqual(inheritedTheme.dimension110, abstractTheme.dimension110) - XCTAssertTrue(inheritedTheme.dimension110 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimensionSM() throws { + XCTAssertNotEqual(inheritedTheme.dimensionSM, abstractTheme.dimensionSM) + XCTAssertTrue(inheritedTheme.dimensionSM == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension120() throws { - XCTAssertNotEqual(inheritedTheme.dimension120, abstractTheme.dimension120) - XCTAssertTrue(inheritedTheme.dimension120 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimensionMD() throws { + XCTAssertNotEqual(inheritedTheme.dimensionMD, abstractTheme.dimensionMD) + XCTAssertTrue(inheritedTheme.dimensionMD == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension130() throws { - XCTAssertNotEqual(inheritedTheme.dimension130, abstractTheme.dimension130) - XCTAssertTrue(inheritedTheme.dimension130 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimensionLG() throws { + XCTAssertNotEqual(inheritedTheme.dimensionLG, abstractTheme.dimensionLG) + XCTAssertTrue(inheritedTheme.dimensionLG == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension140() throws { - XCTAssertNotEqual(inheritedTheme.dimension140, abstractTheme.dimension140) - XCTAssertTrue(inheritedTheme.dimension140 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimensionXL() throws { + XCTAssertNotEqual(inheritedTheme.dimensionXL, abstractTheme.dimensionXL) + XCTAssertTrue(inheritedTheme.dimensionXL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension150() throws { - XCTAssertNotEqual(inheritedTheme.dimension150, abstractTheme.dimension150) - XCTAssertTrue(inheritedTheme.dimension150 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension2XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension2XL, abstractTheme.dimension2XL) + XCTAssertTrue(inheritedTheme.dimension2XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension160() throws { - XCTAssertNotEqual(inheritedTheme.dimension160, abstractTheme.dimension160) - XCTAssertTrue(inheritedTheme.dimension160 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension3XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension3XL, abstractTheme.dimension3XL) + XCTAssertTrue(inheritedTheme.dimension3XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension170() throws { - XCTAssertNotEqual(inheritedTheme.dimension170, abstractTheme.dimension170) - XCTAssertTrue(inheritedTheme.dimension170 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension4XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension4XL, abstractTheme.dimension4XL) + XCTAssertTrue(inheritedTheme.dimension4XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension180() throws { - XCTAssertNotEqual(inheritedTheme.dimension180, abstractTheme.dimension180) - XCTAssertTrue(inheritedTheme.dimension180 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension5XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension5XL, abstractTheme.dimension5XL) + XCTAssertTrue(inheritedTheme.dimension5XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension190() throws { - XCTAssertNotEqual(inheritedTheme.dimension190, abstractTheme.dimension190) - XCTAssertTrue(inheritedTheme.dimension190 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension6XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension6XL, abstractTheme.dimension6XL) + XCTAssertTrue(inheritedTheme.dimension6XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension200() throws { - XCTAssertNotEqual(inheritedTheme.dimension200, abstractTheme.dimension200) - XCTAssertTrue(inheritedTheme.dimension200 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension7XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension7XL, abstractTheme.dimension7XL) + XCTAssertTrue(inheritedTheme.dimension7XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension210() throws { - XCTAssertNotEqual(inheritedTheme.dimension210, abstractTheme.dimension210) - XCTAssertTrue(inheritedTheme.dimension210 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension8XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension8XL, abstractTheme.dimension8XL) + XCTAssertTrue(inheritedTheme.dimension8XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension220() throws { - XCTAssertNotEqual(inheritedTheme.dimension220, abstractTheme.dimension220) - XCTAssertTrue(inheritedTheme.dimension220 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension9XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension9XL, abstractTheme.dimension9XL) + XCTAssertTrue(inheritedTheme.dimension9XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension230() throws { - XCTAssertNotEqual(inheritedTheme.dimension230, abstractTheme.dimension230) - XCTAssertTrue(inheritedTheme.dimension230 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension10XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension10XL, abstractTheme.dimension10XL) + XCTAssertTrue(inheritedTheme.dimension10XL == MockTheme.mockThemeDimensionSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenDimension240() throws { - XCTAssertNotEqual(inheritedTheme.dimension240, abstractTheme.dimension240) - XCTAssertTrue(inheritedTheme.dimension240 == MockTheme.mockThemeDimensionSemanticToken) + func testInheritedThemeCanOverrideSemanticTokenDimension11XL() throws { + XCTAssertNotEqual(inheritedTheme.dimension11XL, abstractTheme.dimension11XL) + XCTAssertTrue(inheritedTheme.dimension11XL == MockTheme.mockThemeDimensionSemanticToken) } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift index b58138231..b9d657c13 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift @@ -91,7 +91,7 @@ final class TestThemeOverrideOfSpacingSemanticTokens: XCTestCase { XCTAssertNotEqual(inheritedTheme.spaceFixedJumbo, abstractTheme.spaceFixedJumbo) XCTAssertTrue(inheritedTheme.spaceFixedJumbo == MockTheme.mockThemeSpaceRawToken) } - + // MARK: - Semantic token - Spacing - Layout fluid func testInheritedThemeCanOverrideSemanticTokenSpaceScaledNone() throws { diff --git a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift index e2a9950ef..495eac59b 100644 --- a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift @@ -14,6 +14,9 @@ import Foundation import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Overrides some colors using values defined in extension of `ColorRawTokens` in this current module. extension InverseTheme { diff --git a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ElevationSemanticTokens.swift b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ElevationSemanticTokens.swift index c8066e598..d849db1b9 100644 --- a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ElevationSemanticTokens.swift +++ b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ElevationSemanticTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + extension InverseTheme { // MARK: Semantic token - Elevation - Color - None diff --git a/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift b/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift new file mode 100644 index 000000000..a17df44ed --- /dev/null +++ b/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift @@ -0,0 +1,25 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import Foundation +import SwiftUI +import OUDSTokensRaw + +/// This enum helps to add new raw tokens for this theme. +/// Such tokens are packed in a _Swift enum_ so as to gather them in one object with the suitable namespace and avoid to have just constants in nothing else +/// (i.e. publicly accessible from everywhere). More optimized than _struct_. +public enum OrangeBrandColorRawTokens { + + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder +} diff --git a/OUDS/Core/Themes/Orange/Sources/OrangeTheme+SemanticColorTokens.swift b/OUDS/Core/Themes/Orange/Sources/OrangeTheme+SemanticColorTokens.swift index d28a264d5..ad9a58c30 100644 --- a/OUDS/Core/Themes/Orange/Sources/OrangeTheme+SemanticColorTokens.swift +++ b/OUDS/Core/Themes/Orange/Sources/OrangeTheme+SemanticColorTokens.swift @@ -15,6 +15,9 @@ import Foundation import OUDSTokensRaw import OUDSTokensSemantic +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Overrides some colors using values defined in extension of `ColorRawTokens` in this current module. extension OrangeTheme { diff --git a/OUDS/Core/Themes/Orange/Sources/TypeAliases/OrangeBrandColorTokens+Aliases.swift b/OUDS/Core/Themes/Orange/Sources/TypeAliases/OrangeBrandColorTokens+Aliases.swift new file mode 100644 index 000000000..389ceb2e3 --- /dev/null +++ b/OUDS/Core/Themes/Orange/Sources/TypeAliases/OrangeBrandColorTokens+Aliases.swift @@ -0,0 +1,20 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import OUDSTokensRaw + +/// In the global design system tool, the verbs of "brand colors" are used, and at this level mean simply raw tokens of colors. +public typealias ColorOrangeBrandRawToken = ColorRawToken + +/// In the global design system tool, the verbs of "decorative colors" are used, and at this level mean simply raw tokens of colors, but decorative ones +public typealias ColorOrangeDecorativeRawToken = ColorRawToken diff --git a/OUDS/Core/Themes/Orange/Sources/OrangeBrandColorRawTokens.swift b/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift similarity index 90% rename from OUDS/Core/Themes/Orange/Sources/OrangeBrandColorRawTokens.swift rename to OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift index ce19fddaa..79363337a 100644 --- a/OUDS/Core/Themes/Orange/Sources/OrangeBrandColorRawTokens.swift +++ b/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift @@ -15,17 +15,10 @@ import Foundation import SwiftUI import OUDSTokensRaw -/// In the global design system tool, the verbs of "brand colors" are used, and at this level mean simply raw tokens of colors. -public typealias ColorOrangeBrandRawToken = ColorRawToken +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] -/// In the global design system tool, the verbs of "decorative colors" are used, and at this level mean simply raw tokens of colors, but decorative ones -public typealias ColorOrangeDecorativeRawToken = ColorRawToken - -/// This extension helps to add new raw tokens for this theme. -/// Type aliases here are just for consistancy reasons. -/// Such tokens are packed in a _Swift enum_ so as to gather them in one object with the suitable namespace and avoid to have just constants in nothing else -/// (i.e. publicly accessible from everywhere). More optimized than _struct_. -public enum OrangeBrandColorRawTokens { +extension OrangeBrandColorRawTokens { // MARK: Primitive token - Colors - Orange - Brand - Orange diff --git a/OUDS/Core/Themes/Sosh/Sources/Declarations/SoshBrandColorRawTokens.swift b/OUDS/Core/Themes/Sosh/Sources/Declarations/SoshBrandColorRawTokens.swift new file mode 100644 index 000000000..8ea60897f --- /dev/null +++ b/OUDS/Core/Themes/Sosh/Sources/Declarations/SoshBrandColorRawTokens.swift @@ -0,0 +1,21 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +/// This enum helps to add new raw tokens for this theme. +/// Such tokens are packed in a _Swift enum_ so as to gather them in one object with the suitable namespace and avoid to have just constants in nothing else +/// (i.e. publicly accessible from everywhere). More optimized than _struct_. +public enum SoshBrandColorRawTokens { + + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder +} diff --git a/OUDS/Core/Themes/Sosh/Sources/TypeAliases/SoshBrandColorTokens+Aliases.swift b/OUDS/Core/Themes/Sosh/Sources/TypeAliases/SoshBrandColorTokens+Aliases.swift new file mode 100644 index 000000000..7283e8538 --- /dev/null +++ b/OUDS/Core/Themes/Sosh/Sources/TypeAliases/SoshBrandColorTokens+Aliases.swift @@ -0,0 +1,17 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import OUDSTokensRaw + +/// In the global design system tool, the verbs of "primitive colors" are used, and at this level mean simply raw tokens of colors. +public typealias ColorSoshPrimitiveToken = ColorRawToken diff --git a/OUDS/Core/Themes/Sosh/Sources/SoshBrandColorRawTokens.swift b/OUDS/Core/Themes/Sosh/Sources/Values/SoshBrandColorRawTokens+Values.swift similarity index 82% rename from OUDS/Core/Themes/Sosh/Sources/SoshBrandColorRawTokens.swift rename to OUDS/Core/Themes/Sosh/Sources/Values/SoshBrandColorRawTokens+Values.swift index 8a3c01d1f..b516c1087 100644 --- a/OUDS/Core/Themes/Sosh/Sources/SoshBrandColorRawTokens.swift +++ b/OUDS/Core/Themes/Sosh/Sources/Values/SoshBrandColorRawTokens+Values.swift @@ -11,23 +11,12 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation -import SwiftUI import OUDSTokensRaw -// MARK: - Type aliases to keep grammar clear +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] -/// In the global design system tool, the verbs of "primitive colors" are used, and at this level mean simply raw tokens of colors. -public typealias ColorSoshPrimitiveToken = ColorRawToken - -// MARK: Primitive tokens - -/// This extension helps to add new raw tokens for this theme. -/// Type aliases here are just for consistancy reasons. -/// Such tokens are packed in a _Swift enum_ so as to gather them in one object with the suitable namespace and avoid to have just constants in nothing else -/// (i.e. publicly accessible from everywhere). More optimized than _struct_. -/// All colors of the Sosh brand are listed here. -public enum SoshBrandColorRawTokens { +extension SoshBrandColorRawTokens { // MARK: Primitive token - Colors - Sosh - Magenta diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/BorderRawTokens.swift b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/BorderRawTokens.swift index aad05a50f..63cb3e617 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/BorderRawTokens.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/BorderRawTokens.swift @@ -18,5 +18,6 @@ /// (i.e. publicly accessible from everywhere). More optimized than _struct_. public enum BorderRawTokens { - // Note: So as to help the Figma JSON to Swift parser the values have been added in the Values folder + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/ColorRawTokens.swift b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/ColorRawTokens.swift index 6f195ac04..f83ad3b18 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/ColorRawTokens.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/ColorRawTokens.swift @@ -17,8 +17,14 @@ /// (i.e. publicly accessible from everywhere). More optimized than _struct_. public enum ColorRawTokens { - // Note: So as to help the Figma JSON to Swift parser the values have been added in the Values folder + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder + /// Applies to a color in its hexadecimal representation the given `opacity` + /// - Parameters: + /// - opacity: The opacity effect to apply + /// - hexColor: The String color to update + /// - Returns: The new color, as a `String`, update with the given `OpacityRawToken` value static func apply(opacity: OpacityRawToken, on hexColor: String) -> String { // TODO: Improve this algorithm too much naive // Values picked from https://gist.github.com/lopspower/03fb1cc0ac9f32ef38f4 diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/DimensionRawTokens.swift b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/DimensionRawTokens.swift index 8213adebd..4c45081e7 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/DimensionRawTokens.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/DimensionRawTokens.swift @@ -17,5 +17,6 @@ /// (i.e. publicly accessible from everywhere). More optimized than _struct_. public enum DimensionRawTokens { - // Note: So as to help the Figma JSON to Swift parser the values have been added in the Values folder + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/ElevationRawTokens.swift b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/ElevationRawTokens.swift index a03e02f86..dd0b1856b 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/ElevationRawTokens.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/ElevationRawTokens.swift @@ -17,5 +17,6 @@ /// (i.e. publicly accessible from everywhere). More optimized than _struct_. public enum ElevationRawTokens { - // Note: So as to help the Figma JSON to Swift parser the values have been added in the Values folder + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/GridRawTokens.swift b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/GridRawTokens.swift index 86fcaae94..97fe45feb 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/GridRawTokens.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/GridRawTokens.swift @@ -17,5 +17,6 @@ /// (i.e. publicly accessible from everywhere). More optimized than _struct_. public enum GridRawTokens { - // Note: So as to help the Figma JSON to Swift parser the values have been added in the Values folder + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/OpacityRawTokens.swift b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/OpacityRawTokens.swift index 71f6c5f32..dd65c69b0 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/OpacityRawTokens.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/OpacityRawTokens.swift @@ -17,5 +17,6 @@ /// (i.e. publicly accessible from everywhere). More optimized than _struct_. public enum OpacityRawTokens { - // Note: So as to help the Figma JSON to Swift parser the values have been added in the Values folder + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/TypographyRawTokens.swift b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/TypographyRawTokens.swift index 60603f25b..dfac38b26 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Declarations/TypographyRawTokens.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Declarations/TypographyRawTokens.swift @@ -17,5 +17,6 @@ /// (i.e. publicly accessible from everywhere). More optimized than _struct_. public enum TypographyRawTokens { - // Note: So as to help the Figma JSON to Swift parser the values have been added in the Values folder + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† + // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift index c4827e289..de1da47b3 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift @@ -11,8 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Extracted in this separated file to help the *Figma* JSON to Swift parser to generate files to include easily. -/// Should be fully generated in the future. extension BorderRawTokens { // MARK: Primitive token - Border - Width diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/ColorRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/ColorRawTokens+Values.swift index 93e29e5c9..745faab86 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/ColorRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/ColorRawTokens+Values.swift @@ -11,8 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. -/// Should be fully generated in the future. extension ColorRawTokens { // MARK: Primitive token - Colors - Black, white diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift index dc3ce1653..ddc7558a7 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift @@ -11,8 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. -/// Should be fully generated in the future. extension DimensionRawTokens { // MARK: Primitive token - Dimension diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift index 37acc3183..39a49a797 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift @@ -11,8 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. -/// Should be fully generated in the future. extension ElevationRawTokens { // MARK: Primitive token - Elevation - X diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift index 4e06dd50e..614cdcd0e 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift @@ -11,8 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. -/// Should be fully generated in the future. extension GridRawTokens { // MARK: Primitive token - Grid - Design width diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/OpacityRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/OpacityRawTokens+Values.swift index f1567ad41..714106531 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/OpacityRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/OpacityRawTokens+Values.swift @@ -11,8 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. -/// Should be fully generated in the future. extension OpacityRawTokens { // MARK: Primitive token - Opacity diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift index 851349145..13b26b1ab 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift @@ -11,8 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. -/// Should be fully generated in the future. extension TypographyRawTokens { // MARK: Primitive token - Typography - Font size diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/BorderSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/BorderSemanticTokens.swift index b6c849b22..d5568fd4b 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/BorderSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/BorderSemanticTokens.swift @@ -11,6 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **borders**. /// It defines all `BorderWidthSemanticToken`, `BorderRadiusSemanticToken` and `BorderStyleSemanticToken` a theme must have. /// diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift index ba522daaa..a54967bb7 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift @@ -11,6 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **colors**. /// It defines all `ColorSemanticToken` and `ColorAliasSemanticToken` a theme must have. /// diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/DimensionSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/DimensionSemanticTokens.swift index 58ff97b4d..8c95b0cdd 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/DimensionSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/DimensionSemanticTokens.swift @@ -11,37 +11,38 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **dimensions**. /// It defines all `DimensionSemanticToken` a theme must have. /// /// In the future this file should be generated by a parser converting Figma JSON to Swift code. public protocol DimensionSemanticTokens { - // "Close" in Figma, "sys" tokens (โ‰–_โ‰–) - - var dimension0: DimensionSemanticToken { get } - var dimension10: DimensionSemanticToken { get } - var dimension20: DimensionSemanticToken { get } - var dimension30: DimensionSemanticToken { get } - var dimension40: DimensionSemanticToken { get } - var dimension50: DimensionSemanticToken { get } - var dimension60: DimensionSemanticToken { get } - var dimension70: DimensionSemanticToken { get } - var dimension80: DimensionSemanticToken { get } - var dimension90: DimensionSemanticToken { get } - var dimension100: DimensionSemanticToken { get } - var dimension110: DimensionSemanticToken { get } - var dimension120: DimensionSemanticToken { get } - var dimension130: DimensionSemanticToken { get } - var dimension140: DimensionSemanticToken { get } - var dimension150: DimensionSemanticToken { get } - var dimension160: DimensionSemanticToken { get } - var dimension170: DimensionSemanticToken { get } - var dimension180: DimensionSemanticToken { get } - var dimension190: DimensionSemanticToken { get } - var dimension200: DimensionSemanticToken { get } - var dimension210: DimensionSemanticToken { get } - var dimension220: DimensionSemanticToken { get } - var dimension230: DimensionSemanticToken { get } - var dimension240: DimensionSemanticToken { get } + var dimensionNone: DimensionSemanticToken { get } + var dimension10XS: DimensionSemanticToken { get } + var dimension9XS: DimensionSemanticToken { get } + var dimension8XS: DimensionSemanticToken { get } + var dimension7XS: DimensionSemanticToken { get } + var dimension6XS: DimensionSemanticToken { get } + var dimension5XS: DimensionSemanticToken { get } + var dimension4XS: DimensionSemanticToken { get } + var dimension3XS: DimensionSemanticToken { get } + var dimension2XS: DimensionSemanticToken { get } + var dimensionXS: DimensionSemanticToken { get } + var dimensionSM: DimensionSemanticToken { get } + var dimensionMD: DimensionSemanticToken { get } + var dimensionLG: DimensionSemanticToken { get } + var dimensionXL: DimensionSemanticToken { get } + var dimension2XL: DimensionSemanticToken { get } + var dimension3XL: DimensionSemanticToken { get } + var dimension4XL: DimensionSemanticToken { get } + var dimension5XL: DimensionSemanticToken { get } + var dimension6XL: DimensionSemanticToken { get } + var dimension7XL: DimensionSemanticToken { get } + var dimension8XL: DimensionSemanticToken { get } + var dimension9XL: DimensionSemanticToken { get } + var dimension10XL: DimensionSemanticToken { get } + var dimension11XL: DimensionSemanticToken { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ElevationSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ElevationSemanticTokens.swift index 91cbe5335..74986bf45 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ElevationSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ElevationSemanticTokens.swift @@ -11,6 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **elevations**. /// It defines all elevation semantic tokens a theme must have. (`ElevationXSemanticToken`,`ElevationYSemanticToken`, /// `ElevationBlurSemanticToken` and `ElevationColorSemanticToken`) diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/GridSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/GridSemanticTokens.swift index e6c7e1e43..cc2516014 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/GridSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/GridSemanticTokens.swift @@ -11,6 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **grids**. /// It defines all `GridSemanticToken` a theme must have. /// diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/OpacitySemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/OpacitySemanticTokens.swift index 17e600fc0..eca860503 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/OpacitySemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/OpacitySemanticTokens.swift @@ -11,6 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **opacity.** /// It defines all `OpacitySemanticToken` a theme must have. /// diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift index ec4a700e4..b6003fae4 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift @@ -11,6 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **sizing**. /// It defines all `SizingSemanticToken` a theme must have. /// diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift index a80db32e6..2fa8d7fa5 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift @@ -11,6 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **spacing**. /// It defines all `SpacingSemanticToken` a theme must have. /// diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift index a4a315a6c..e4c045a56 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift @@ -13,6 +13,9 @@ import OUDSTokensRaw +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + /// This is a group of semantic tokens for **typography**. /// It defines all typography semantic tokens a theme must have /// (`TypographyFontFamilySemanticToken`, `TypographyFontWeightSemanticToken`, `TypographyFontSizeSemanticToken`, `TypographyFontLineHeightSemanticToken`). From 7624a2c2648fb89bbec202e8f72bc4d3e816828a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Wed, 25 Sep 2024 17:38:48 +0200 Subject: [PATCH 15/25] refactor: move composite tokens in dedicated files to help parser (#129) (#131) Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 18 +- .../Sources/Extensions/View+Font.swift | 4 +- .../Sources/Extensions/View+Shadows.swift | 9 +- .../ViewModifiers/CustomFontModifier.swift | 2 +- .../Sources/ViewModifiers/FontModifier.swift | 4 +- .../ViewModifiers/TypographyModifier.swift | 6 +- .../_OUDSComponents.docc/_OUDSComponents.md | 8 +- .../OUDSTheme+ButtonsComponentTokens.swift | 2 +- ...DSTheme+FormsTextInputComponentToken.swift | 6 +- .../OUDSTheme+ColorSemanticTokens.swift | 84 ++++---- .../OUDSTheme+ElevationSemanticTokens.swift | 57 +++--- .../OUDSTheme+SizingSemanticTokens.swift | 62 +++--- .../OUDSTheme+SpacingSemanticTokens.swift | 22 +-- .../OUDSTheme+TypographySemanticTokens.swift | 48 +++-- .../MockTheme+ColorSemanticTokens.swift | 114 +++++------ .../MockTheme+ElevationSemanticTokens.swift | 58 ++---- .../MockTheme+SizingSemanticTokens.swift | 64 +++--- .../MockTheme+SpacingSemanticTokens.swift | 22 +-- .../MockTheme+TypographySemanticTokens.swift | 48 ++--- ...emeOverrideOfElevationSemanticTokens.swift | 182 +++++------------- ...meOverrideOfTypographySemanticTokens.swift | 46 ++--- .../InverseTheme+ColorSemanticTokens.swift | 84 ++++---- ...InverseTheme+ElevationSemanticTokens.swift | 71 +------ .../Tests/TestInverseThemeElevation.swift | 19 +- .../OrangeBrandColorRawTokens.swift | 4 +- .../SoshBrandColorRawTokens.swift | 2 +- .../Values/ButtonsComponentTokens.swift | 2 +- ...swift => ElevationCompositeRawToken.swift} | 0 ...wift => TypographyCompositeRawToken.swift} | 0 .../ElevationRawTokens+Composites.swift | 99 ++++++++++ .../Values/ElevationRawTokens+Values.swift | 42 ---- .../TypographyRawTokens+Composites.swift | 65 +++++++ .../Values/TypographyRawTokens+Values.swift | 24 --- .../_OUDSTokensRaw.docc/OUDSTokensRaw.md | 11 +- .../MultipleColorTokens.swift} | 14 +- .../Multiples/MultipleElevationTokens.swift | 52 +++++ .../MultipleSizingTokens.swift} | 10 +- .../MultipleSpacingTokens.swift} | 10 +- .../MultipleTypographyTokens.swift} | 10 +- .../ColorSemanticTokens+Aliases.swift | 2 +- .../ElevationSemanticTokens+Aliases.swift | 4 +- .../Sources/Values/ColorSemanticTokens.swift | 112 +++++------ .../Values/ElevationSemanticTokens.swift | 55 ++---- .../Sources/Values/SizingSemanticTokens.swift | 62 +++--- .../Values/SpacingSemanticTokens.swift | 20 +- .../Values/TypographySemanticTokens.swift | 46 ++--- .../OUDSTokensSemantic.md | 9 +- .../ColorCompositeSemanticTokenTests.swift | 63 ------ .../MultipleColorSemanticTokenTests.swift | 72 +++++++ .../MultipleElevationTokensTests.swift | 57 ++++++ ...=> MultipleSizingSemanticTokenTests.swift} | 20 +- ...swift => MultipleSpacingTokensTests.swift} | 20 +- ...ft => MultipleTypographyTokensTests.swift} | 20 +- .../xcshareddata/swiftpm/Package.resolved | 2 +- Showcase/Showcase/OrangeCustomTheme.swift | 14 +- .../Elevations/ElevationsList.swift | 10 +- 56 files changed, 1004 insertions(+), 969 deletions(-) rename OUDS/Core/Tokens/RawTokens/Sources/Composites/{ElevationRawTokens+Composites.swift => ElevationCompositeRawToken.swift} (100%) rename OUDS/Core/Tokens/RawTokens/Sources/Composites/{TypographyRawTokens+Composites.swift => TypographyCompositeRawToken.swift} (100%) create mode 100644 OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Composites.swift create mode 100644 OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Composites.swift rename OUDS/Core/Tokens/SemanticTokens/Sources/{Composites/ColorSemanticTokens+Composites.swift => Multiples/MultipleColorTokens.swift} (77%) create mode 100644 OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleElevationTokens.swift rename OUDS/Core/Tokens/SemanticTokens/Sources/{Composites/SizingSemanticTokens+Composites.swift => Multiples/MultipleSizingTokens.swift} (72%) rename OUDS/Core/Tokens/SemanticTokens/Sources/{Composites/SpacingSemanticTokens+Composites.swift => Multiples/MultipleSpacingTokens.swift} (72%) rename OUDS/Core/Tokens/SemanticTokens/Sources/{Composites/TypographySemanticTokens+Composites.swift => Multiples/MultipleTypographyTokens.swift} (72%) delete mode 100644 OUDS/Core/Tokens/SemanticTokens/Tests/Composites/ColorCompositeSemanticTokenTests.swift create mode 100644 OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleColorSemanticTokenTests.swift create mode 100644 OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleElevationTokensTests.swift rename OUDS/Core/Tokens/SemanticTokens/Tests/Composites/{SizingCompositeSemanticTokenTests.swift => MultipleSizingSemanticTokenTests.swift} (58%) rename OUDS/Core/Tokens/SemanticTokens/Tests/Composites/{SpacingCompositeSemanticTokenTests.swift => MultipleSpacingTokensTests.swift} (58%) rename OUDS/Core/Tokens/SemanticTokens/Tests/Composites/{TypographyCompositeSemanticTokenTests.swift => MultipleTypographyTokensTests.swift} (50%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d321f581..0c7670bdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- [Library] Unit tests for composite tokens +- [Library] Unit tests for multiple tokens - [Library] Add color semantic composite tokens embeding light and dark modes values -- [Library] Add spacing semantic tokens huge and jumbo +- [Library] Add spacing semantic tokens "huge" and "jumbo" - [Library] Add closed "sys" dimension semantic tokens - [Tool] GitHub issue template for tokens update request - [Library] Add more sizing semantic tokens ([#122](https://github.com/Orange-OpenSource/ouds-ios/issues/122)) @@ -19,10 +19,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - [Library] Rename dimension semantic tokens to apply T-Shirt size rules ([#130](https://github.com/Orange-OpenSource/ouds-ios/issues/130)) +- [Library] Rename `SizingCompositeSemanticToken` to `MultipleSizingSemanticToken` to keep "composite" word for *Figma* design system +- [Library] Rename `ColorCompositeSemanticToken` to `MultipleColorRawToken` to keep "composite" word for *Figma* design system +- [Library] Rename `TypographyCompositeSemanticToken` to `MultipleTypographyTokens` to keep "composite" word for *Figma* design system +- [Library] Rename `SpacingCompositeSemanticToken` to `MultipleSpacingTokens` to keep "composite" word for *Figma* design system +- [Library] Rename `SizingCompositeSemanticToken` to `MultipleSizingTokens` to keep "composite" word for *Figma* design system +- [Library] Rename `ColorCompositeSemanticToken` to `MultipleColorTokens` to keep "composite" word for *Figma* design system +- [Library] Elevation colors have been merged into "multiple" objects colors to have less variables and manage color schemes - [Library] Update color semantic tokens to better manage light and dark modes values - [Library] Update elevation colors focus light and dark - [Library] Rename space padding inline component tokens by removing "component" word - [Library] Improve documentation about raw and semantic tokens definitions ([#127](https://github.com/Orange-OpenSource/ouds-ios/issues/127)) +- [Library] Improve documentation about raw tokens definitions +- [Library] Move composite tokens elsewhere to help parser ([#129](https://github.com/Orange-OpenSource/ouds-ios/issues/129)) +- [Library] Improve documentation about raw and semantic tokens definitions ([#127](https://github.com/Orange-OpenSource/ouds-ios/issues/127)) - [Library] Rename some sizing semantic tokens ([#122](https://github.com/Orange-OpenSource/ouds-ios/issues/122)) - [Library] Replace "adaptable" word by "scaled" in space semantic tokens, "fix" by "fixed" and remove "layout" ([#117](https://github.com/Orange-OpenSource/ouds-ios/issues/117)) @@ -31,6 +41,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Library] Remove some base multiplier factor from raw tokens - [Library] Remove raw tokens `elevationZIndex` ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) +### Fixed + +- [Library] Blur values for elevation composite raw tokens + ## [0.2.0](https://github.com/Orange-OpenSource/ouds-ios/compare/0.1.0...0.2.0) - 2024-09-19 ### Added diff --git a/OUDS/Core/Components/Sources/Extensions/View+Font.swift b/OUDS/Core/Components/Sources/Extensions/View+Font.swift index ab6ee5d65..4e0b2a7db 100644 --- a/OUDS/Core/Components/Sources/Extensions/View+Font.swift +++ b/OUDS/Core/Components/Sources/Extensions/View+Font.swift @@ -22,14 +22,14 @@ extension View { /// - familyName: The font family name to load later (e.g. "Luciole") /// - token: The typography token to use to get useful values for `compact` or `regular` mode /// - Returns: The `View` with the custom font applied - func customFont(familyName: String, typography token: TypographyCompositeSemanticToken) -> some View { + func customFont(familyName: String, typography token: MultipleTypographyTokens) -> some View { self.modifier(CustomFontModifier(token: token, fontFamilyName: familyName)) } /// Applies a `FontModifier` to use the system font on the current `View` with a specific token /// - Parameter token: The typography token to use to get useful values for `compact` or `regular` mode /// - Returns: The `View` with the custom font applied - func systemFont(typography token: TypographyCompositeSemanticToken) -> some View { + func systemFont(typography token: MultipleTypographyTokens) -> some View { self.modifier(FontModifier(token: token)) } } diff --git a/OUDS/Core/Components/Sources/Extensions/View+Shadows.swift b/OUDS/Core/Components/Sources/Extensions/View+Shadows.swift index 989587d75..d00e5fd3a 100644 --- a/OUDS/Core/Components/Sources/Extensions/View+Shadows.swift +++ b/OUDS/Core/Components/Sources/Extensions/View+Shadows.swift @@ -22,10 +22,11 @@ extension View { /// - Parameter elevation: The token to give for the shadow / elevation effect /// - Returns `View`: The current `View` with the shadow / elevation effect public func shadow(elevation: ElevationCompositeSemanticToken) -> some View { + // TODO: Manage light and dark color scheme return self - .shadow(color: elevation.color.color, - radius: elevation.radius, - x: CGFloat(elevation.x), - y: CGFloat(elevation.y)) + .shadow(color: elevation.light.color.color, + radius: elevation.light.radius, + x: CGFloat(elevation.light.x), + y: CGFloat(elevation.light.y)) } } diff --git a/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift index de578b385..938bf501d 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift @@ -22,7 +22,7 @@ struct CustomFontModifier: ViewModifier { // MARK: - Properties /// The typography style to apply - let token: TypographyCompositeSemanticToken + let token: MultipleTypographyTokens /// The name of the custom font family, should be registered previously in the app, like "Luciole". let fontFamilyName: String diff --git a/OUDS/Core/Components/Sources/ViewModifiers/FontModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/FontModifier.swift index b59bb1239..eb8efce5f 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/FontModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/FontModifier.swift @@ -15,7 +15,7 @@ import Foundation import OUDSTokensSemantic import SwiftUI -/// A `ViewModifier` which will apply the system `Font` in a component `View` using a `TypographyCompositeSemanticToken` +/// A `ViewModifier` which will apply the system `Font` in a component `View` using a `MultipleTypographyTokens` /// Note that `FontModifier` use default system font but nothing for others fonts embeded in device struct FontModifier: ViewModifier { @@ -23,7 +23,7 @@ struct FontModifier: ViewModifier { // TODO: How to manage other fonts on device? - let token: TypographyCompositeSemanticToken + let token: MultipleTypographyTokens /// The size of the font to apply private var fontSize: CGFloat { diff --git a/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift index ddc400b62..98912a170 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift @@ -20,7 +20,7 @@ import SwiftUI // swiftlint:disable line_length /// A `ViewModifier` which will make possible to get the horizontal and vertical classes as `@Environment` values -/// so as to define the viewport and use finaly the suitable `TypographyCompositeSemanticToken`. +/// so as to define the viewport and use finaly the suitable `MultipleTypographyTokens`. /// In fact _Swift extension_ does not allow to have such stored properties, and we don't want to use *UIKit* `UIScreen.main.traitCollection` to get values /// which may be out of date. /// For more details about layouts, see [the Apple documentation about devices dimensions](https://developer.apple.com/design/human-interface-guidelines/layout#iOS-iPadOS-device-size-classes) @@ -29,7 +29,7 @@ struct TypographyModifier: ViewModifier { /// The name of a possible custom font family, or `nil` if the font is use is _system font_ let customFontFamily: TypographyFontFamilyRawToken? /// The typography to apply for *compact* or *regular* modes - let typography: TypographyCompositeSemanticToken + let typography: MultipleTypographyTokens /// To get programatically and on the fly the horizontal layout size @Environment(\.horizontalSizeClass) private var horizontalSizeClass @@ -63,7 +63,7 @@ struct TypographyModifier: ViewModifier { } /// Applies to the `Content` the *adaptive font* (i.e. *font family*, *font weight*, *font size* and the *line height* - /// depending to the current `TypographyCompositeSemanticToken` + /// depending to the current `MultipleTypographyTokens` func body(content: Content) -> some View { content .font(adaptiveFont()) diff --git a/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md b/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md index 35d3be579..e0e285eb3 100644 --- a/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md +++ b/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md @@ -36,14 +36,14 @@ public static let elevationBottom_3_500 = ElevationCompositeRawToken(x: 0, y: 4, Your application identity can be strongly based on the *typography* you use, i.e. the font family you choose and other configuration details like the font size or the font weight. -With OUDS, typography depends to the class size, i.e. wether or not the application is in _compact mode_ or in _regular mode_, and is defined with a [`TypographyCompositeSemanticToken`](https://ios.unified-design-system.orange.com/documentation/oudstokenssemantic/typographycompositesemantictoken). defined in the [`OUDSTkensSemantic` `TypographySemanticTokens`](https://ios.unified-design-system.orange.com/documentation/oudstokenssemantic/typographysemantictokens/). +With OUDS, typography depends to the class size, i.e. wether or not the application is in _compact mode_ or in _regular mode_, and is defined with a [`MultipleTypographyTokens`](https://ios.unified-design-system.orange.com/documentation/oudstokenssemantic/multipletypographytokens). defined in the [`OUDSTkensSemantic` `TypographySemanticTokens`](https://ios.unified-design-system.orange.com/documentation/oudstokenssemantic/typographysemantictokens/). -The _theme_ contains lots of `TypographyCompositeSemanticToken` listing all the combinations of typography you can apply, and these *composite semantic tokens* use *composite raw tokens*. For example: +The _theme_ contains lots of `MultipleTypographyTokens` listing all the combinations of typography you can apply, and these *composite semantic tokens* use *composite raw tokens*. For example: ```swift // Here is a definition of a semantic token inside the theme for typography "typeDisplayMedium": -@objc open var typeDisplayMedium: TypographyCompositeSemanticToken { - TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold750, regular: TypographyRawTokens.typeBold1050) +@objc open var typeDisplayMedium: MultipleTypographyTokens { +MultipleTypographyTokens(compact: TypographyRawTokens.typeBold750, regular: TypographyRawTokens.typeBold1050) } // And here are the raw tokebs definitions: diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift index 136b9ec95..59d407801 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+ButtonsComponentTokens.swift @@ -33,5 +33,5 @@ extension OUDSTheme: ButtonsComponentTokens { @objc open var buttonWidth: SizingSemanticToken { DimensionRawTokens.dimension3000 } @objc open var buttonHeight: SizingSemanticToken { DimensionRawTokens.dimension1000 } - @objc open var buttonTypography: TypographyCompositeSemanticToken { typeDisplayMedium } + @objc open var buttonTypography: MultipleTypographyTokens { typeDisplayMedium } } diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift index ecf93b877..65826983a 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift @@ -16,8 +16,6 @@ import OUDSTokensRaw import OUDSTokensSemantic import OUDSTokensComponent -// swiftlint:disable line_length - /// Defines for `FormsTextInputComponentTokens` the basic configuration which can be overriden in subthemes / subclasses of this theme. /// **Warning: These are random and dumb values** extension OUDSTheme: FormsTextInputComponentTokens { @@ -26,7 +24,7 @@ extension OUDSTheme: FormsTextInputComponentTokens { @objc open var ftiTitleFontWeight: TypographyFontWeightSemanticToken { fontWeightHeading } @objc open var ftiTitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelLarge } - @objc open var ftiTitleColor: ColorSemanticToken { ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalLightGray80, dark: ColorRawTokens.colorFunctionalDarkGray640) } + @objc open var ftiTitleColor: ColorSemanticToken { MultipleColorTokens(light: ColorRawTokens.colorFunctionalLightGray80, dark: ColorRawTokens.colorFunctionalDarkGray640) } @objc open var ftiSubtitleFontWeight: TypographyFontWeightSemanticToken { fontWeightDisplay } @objc open var ftiSubtitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelMedium } @@ -40,5 +38,3 @@ extension OUDSTheme: FormsTextInputComponentTokens { @objc open var ftiBorderWidth: BorderWidthSemanticToken { borderWidthThin } } - -// swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift index ac7b1ec82..935b95a57 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift @@ -128,27 +128,27 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - Background - Default - Primary - @objc open var colorBackgroundDefaultPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedHighest) } + @objc open var colorBackgroundDefaultPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedHighest) } // MARK: Semantic token - Colors - Background - Default - Secondary - @objc open var colorBackgroundDefaultSecondary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedLowest, dark: sysColorBrandNeutralEmphasizedHigher) } + @objc open var colorBackgroundDefaultSecondary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedLowest, dark: sysColorBrandNeutralEmphasizedHigher) } // MARK: Semantic token - Colors - Background - Default - Tertiary - @objc open var colorBackgroundDefaultTertiary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } + @objc open var colorBackgroundDefaultTertiary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } // MARK: Semantic token - Colors - Background - Emphasized - Primary - @objc open var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralEmphasizedMedium) } + @objc open var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralEmphasizedMedium) } // MARK: Semantic token - Colors - Background - Emphasized - Secondary - @objc open var colorBackgroundEmphasizedSecondary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedMedium, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundEmphasizedSecondary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedMedium, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Brand - Primary - @objc open var colorBackgroundBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } + @objc open var colorBackgroundBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Background - Brand - Secondary @@ -160,67 +160,67 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - Background - Status - Attractive - Muted - @objc open var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } + @objc open var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized - @objc open var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningHighest) } + @objc open var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningHighest) } // MARK: Semantic token - Colors - Background - Status - Warning - Muted - @objc open var colorBackgroundStatusWarningMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandWarningLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized - @objc open var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningHighest) } + @objc open var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningHighest) } // MARK: Semantic token - Colors - Background - Status - Negative - Muted - @objc open var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNegativeLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized - @objc open var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeHighest) } + @objc open var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeHighest) } // MARK: Semantic token - Colors - Background - Status - Positive - Muted - @objc open var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPositiveLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized - @objc open var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveHighest) } + @objc open var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveHighest) } // MARK: Semantic token - Colors - Background - Status - Information - Muted - @objc open var colorBackgroundStatusInformationMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandInformationLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandInformationLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Background - Status - Information - Emphasized - @objc open var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationHighest) } + @objc open var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationHighest) } // MARK: Semantic token - Colors - Content - Default - @objc open var colorContentDefault: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorContentDefault: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - Content - Default - On background emphasized - @objc open var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - Content - Muted - @objc open var colorContentMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorContentMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedHigh) } // MARK: Semantic token - Colors - Content - Muted - On background emphasized - @objc open var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralMutedHigh) } + @objc open var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralMutedHigh) } // MARK: Semantic token - Colors - Content - Brand - Primary - @objc open var colorContentBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } + @objc open var colorContentBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized - @objc open var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } + @objc open var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Content - Brand - Secondary @@ -236,39 +236,39 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - Content - Status - Negative - @objc open var colorContentStatusNegative: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeDefault) } + @objc open var colorContentStatusNegative: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeDefault) } // MARK: Semantic token - Colors - Content - Status - Positive - @objc open var colorContentStatusPositive: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveDefault) } + @objc open var colorContentStatusPositive: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveDefault) } // MARK: Semantic token - Colors - Content - Status - Information - @objc open var colorContentStatusInformation: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationDefault) } + @objc open var colorContentStatusInformation: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationDefault) } // MARK: Semantic token - Colors - Border - Default - @objc open var colorBorderDefault: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralEmphasizedLowest) } + @objc open var colorBorderDefault: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralEmphasizedLowest) } // MARK: Semantic token - Colors - Border - Default - On background emphasized - @objc open var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedLowest) } + @objc open var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedLowest) } // MARK: Semantic token - Colors - Border - Emphasized - @objc open var colorBorderEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorBorderEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized - @objc open var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - Border - Brand - Primary - @objc open var colorBorderBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } + @objc open var colorBorderBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized - @objc open var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } + @objc open var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } // MARK: Semantic token - Colors - Border - Brand - Secondary @@ -300,7 +300,7 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - On background - Primary - @objc open var colorOnBackgroundPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedHighest) } + @objc open var colorOnBackgroundPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedHighest) } // MARK: Semantic token - Colors - On background - Secondary @@ -312,42 +312,42 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - On background - Status - Attractive - Muted - @objc open var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Attractive - Emphasized - @objc open var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Warning - Muted - @objc open var colorOnBackgroundStatusWarningMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized - @objc open var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Negative - Muted - @objc open var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized - @objc open var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Positive - Muted - @objc open var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized - @objc open var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Information - Muted - @objc open var colorOnBackgroundStatusInformationMuted: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } // MARK: Semantic token - Colors - On background - Status - Information - Emphasized - @objc open var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } } // swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift index 854e465d5..0897f6f66 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ElevationSemanticTokens.swift @@ -18,6 +18,8 @@ import OUDSTokensSemantic // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // [File to generate with the tokenator] +// swiftlint:disable line_length + /// Defines basic values common to all themes for `ElevationSemanticTokenss`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. /// The aim of this extensions is to make relationships between all semantic tokens for elevations and associated raw tokens. @@ -62,72 +64,59 @@ extension OUDSTheme: ElevationSemanticTokens { // MARK: Semantic token - Elevation - Color - None - @objc open var elevationColorNoneLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack0 } - @objc open var elevationColorNoneDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack0 } + @objc open var elevationColorNone: ElevationColorSemanticToken { ElevationColorSemanticToken(ColorRawTokens.colorTransparentBlack0) } // MARK: Semantic token - Elevation - Color - Raised - @objc open var elevationColorRaisedLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack500 } - @objc open var elevationColorRaisedDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack500 } + @objc open var elevationColorRaised: ElevationColorSemanticToken { ElevationColorSemanticToken(ColorRawTokens.colorTransparentBlack500) } // MARK: Semantic token - Elevation - Color - Drag - @objc open var elevationColorDragLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack600 } - @objc open var elevationColorDragDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack600 } + @objc open var elevationColorDrag: ElevationColorSemanticToken { ElevationColorSemanticToken(ColorRawTokens.colorTransparentBlack500) } // MARK: Semantic token - Elevation - Color - Overlay - Default - @objc open var elevationColorOverlayDefaultLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack400 } - @objc open var elevationColorOverlayDefaultDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack400 } + @objc open var elevationColorOverlayDefault: ElevationColorSemanticToken { ElevationColorSemanticToken(ColorRawTokens.colorTransparentBlack400) } // MARK: Semantic token - Elevation - Color - Overlay - Emphasized - @objc open var elevationColorOverlayEmphasizedLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - @objc open var elevationColorOverlayEmphasizedDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } + @objc open var elevationColorOverlayEmphasized: ElevationColorSemanticToken { ElevationColorSemanticToken(ColorRawTokens.colorTransparentBlack300) } // MARK: Semantic token - Elevation - Color - Sticky - Default - @objc open var elevationColorStickyDefaultLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - @objc open var elevationColorStickyDefaultDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } + @objc open var elevationColorStickyDefault: ElevationColorSemanticToken { ElevationColorSemanticToken(ColorRawTokens.colorTransparentBlack300) } // MARK: Semantic token - Elevation - Color - Sticky - Emphasized - @objc open var elevationColorStickyEmphasizedLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - @objc open var elevationColorStickyEmphasizedDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } + @objc open var elevationColorStickyEmphasized: ElevationColorSemanticToken { ElevationColorSemanticToken(ColorRawTokens.colorTransparentBlack300) } // MARK: Semantic token - Elevation - Color - Sticky - Navigation scrolled - @objc open var elevationColorStickyNavigationScrolledLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - @objc open var elevationColorStickyNavigationScrolledDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } + @objc open var elevationColorStickyNavigationScrolled: ElevationColorSemanticToken { ElevationColorSemanticToken(ColorRawTokens.colorTransparentBlack300) } // MARK: Semantic token - Elevation - Color - Focus - @objc open var elevationColorFocusLight: ElevationColorSemanticToken { ColorRawTokens.colorFunctionalBlack } - @objc open var elevationColorFocusDark: ElevationColorSemanticToken { ColorRawTokens.colorFunctionalLightGray160 } + @objc open var elevationColorFocus: ElevationColorSemanticToken { ElevationColorSemanticToken(light: ColorRawTokens.colorFunctionalBlack, dark: ColorRawTokens.colorFunctionalLightGray160) } // MARK: Semantic token - Elevation - Box shadow - @objc open var elevationRaisedLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } - @objc open var elevationRaisedDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } + @objc open var elevationNone: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_0) } + + @objc open var elevationRaised: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_1_500) } - @objc open var elevationDragLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_500 } - @objc open var elevationDragDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_500 } + @objc open var elevationDrag: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_3_500) } - @objc open var elevationOverlayDefaultLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_2_400 } - @objc open var elevationOverlayDefaultDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_2_400 } + @objc open var elevationOverlayDefault: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_2_400) } - @objc open var elevationOverlayEmphasizedLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_5_300 } - @objc open var elevationOverlayEmphasizedDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_5_300 } + @objc open var elevationOverlayEmphasized: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_5_300) } - @objc open var elevationStickyDefaultLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_300 } - @objc open var elevationStickyDefaultDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_300 } + @objc open var elevationStickyDefault: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_3_300) } - @objc open var elevationStickyEmphasizedLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_300 } - @objc open var elevationStickyEmphasizedDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_300 } + @objc open var elevationStickyEmphasized: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_3_300) } - @objc open var elevationStickyNavigationScrolledLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } - @objc open var elevationStickyNavigationScrolledDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } + @objc open var elevationStickyNavigationScrolled: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_1_500) } - @objc open var elevationFocusLight: ElevationCompositeSemanticToken { ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorFunctionalBlack) } - @objc open var elevationFocusDark: ElevationCompositeSemanticToken { ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorFunctionalLightGray160) } + @objc open var elevationFocus: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(light: ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorFunctionalBlack), dark: ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorFunctionalLightGray160)) } } + +// swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift index 9a7313968..5279d8085 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SizingSemanticTokens.swift @@ -35,33 +35,33 @@ extension OUDSTheme: SizingSemanticTokens { // MARK: - Semantic token - Sizing - Icon with typography - @objc open var sizeIconWithTypeHeadingSmallShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension400) } - @objc open var sizeIconWithTypeHeadingSmallMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension500) } - @objc open var sizeIconWithTypeHeadingSmallTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension550) } + @objc open var sizeIconWithTypeHeadingSmallShort: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension400) } + @objc open var sizeIconWithTypeHeadingSmallMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension500) } + @objc open var sizeIconWithTypeHeadingSmallTall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension550) } - @objc open var sizeIconWithTypeHeadingMediumShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension500) } - @objc open var sizeIconWithTypeHeadingMediumMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension550) } - @objc open var sizeIconWithTypeHeadingMediumTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension600) } + @objc open var sizeIconWithTypeHeadingMediumShort: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension500) } + @objc open var sizeIconWithTypeHeadingMediumMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension550) } + @objc open var sizeIconWithTypeHeadingMediumTall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension600) } - @objc open var sizeIconWithTypeHeadingLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension550) } - @objc open var sizeIconWithTypeHeadingLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension600) } - @objc open var sizeIconWithTypeHeadingLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension650) } + @objc open var sizeIconWithTypeHeadingLargeShort: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension550) } + @objc open var sizeIconWithTypeHeadingLargeMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension600) } + @objc open var sizeIconWithTypeHeadingLargeTall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension650) } - @objc open var sizeIconWithTypeHeadingXLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension650) } - @objc open var sizeIconWithTypeHeadingXLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700) } - @objc open var sizeIconWithTypeHeadingXLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension650) } + @objc open var sizeIconWithTypeHeadingXLargeShort: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension650) } + @objc open var sizeIconWithTypeHeadingXLargeMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700) } + @objc open var sizeIconWithTypeHeadingXLargeTall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension550, regular: DimensionRawTokens.dimension650) } - @objc open var sizeIconWithTypeBodySmallShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension150, regular: DimensionRawTokens.dimension150 ) } - @objc open var sizeIconWithTypeBodySmallMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension200 ) } - @objc open var sizeIconWithTypeBodySmallTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } + @objc open var sizeIconWithTypeBodySmallShort: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension150, regular: DimensionRawTokens.dimension150 ) } + @objc open var sizeIconWithTypeBodySmallMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension200 ) } + @objc open var sizeIconWithTypeBodySmallTall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } - @objc open var sizeIconWithTypeBodyMediumShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension200 ) } - @objc open var sizeIconWithTypeBodyMediumMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } - @objc open var sizeIconWithTypeBodyMediumTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } + @objc open var sizeIconWithTypeBodyMediumShort: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension200 ) } + @objc open var sizeIconWithTypeBodyMediumMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } + @objc open var sizeIconWithTypeBodyMediumTall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } - @objc open var sizeIconWithTypeBodyLargeShort: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } - @objc open var sizeIconWithTypeBodyLargeMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } - @objc open var sizeIconWithTypeBodyLargeTall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension350, regular: DimensionRawTokens.dimension350 ) } + @objc open var sizeIconWithTypeBodyLargeShort: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension250, regular: DimensionRawTokens.dimension250 ) } + @objc open var sizeIconWithTypeBodyLargeMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension300 ) } + @objc open var sizeIconWithTypeBodyLargeTall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension350, regular: DimensionRawTokens.dimension350 ) } @objc open var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { dimension6XS } @objc open var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { dimension5XS } @@ -83,17 +83,17 @@ extension OUDSTheme: SizingSemanticTokens { // MARK: - Semantic token - Sizing - Max width typography - @objc open var sizeMaxWidthTypeDisplaySmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypeDisplayMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypeDisplayLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeDisplaySmall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeDisplayMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeDisplayLarge: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypeHeadingSmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } - @objc open var sizeMaxWidthTypeHeadingMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypeHeadingLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypeHeadingXLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeHeadingSmall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } + @objc open var sizeMaxWidthTypeHeadingMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeHeadingLarge: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } + @objc open var sizeMaxWidthTypeHeadingXLarge: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension9000, regular: DimensionRawTokens.dimension9000 ) } - @objc open var sizeMaxWidthTypeBodySmall: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } - @objc open var sizeMaxWidthTypeBodyMedium: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } - @objc open var sizeMaxWidthTypeBodyLarge: SizingCompositeSemanticToken { SizingCompositeSemanticToken(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } + @objc open var sizeMaxWidthTypeBodySmall: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } + @objc open var sizeMaxWidthTypeBodyMedium: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } + @objc open var sizeMaxWidthTypeBodyLarge: MultipleSizingTokens { MultipleSizingTokens(compact: DimensionRawTokens.dimension6000, regular: DimensionRawTokens.dimension6000 ) } } // swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift index 9d6cf6359..7f19cf156 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+SpacingSemanticTokens.swift @@ -18,23 +18,22 @@ import OUDSTokensSemantic // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // [File to generate with the tokenator] -// swiftlint:disable line_length /// Defines basic values common to all themes for `SpacingSemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: SpacingSemanticTokens { // MARK: Semantic token - Spacing - Layout fluid - @objc open var spaceScaledNone: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension0, regular: DimensionRawTokens.dimension0) } - @objc open var spaceScaledSmash: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension25, regular: DimensionRawTokens.dimension50) } - @objc open var spaceScaledShortest: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension50, regular: DimensionRawTokens.dimension100) } - @objc open var spaceScaledShorter: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension100, regular: DimensionRawTokens.dimension150) } - @objc open var spaceScaledShort: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension150, regular: DimensionRawTokens.dimension200) } - @objc open var spaceScaledMedium: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension300) } - @objc open var spaceScaledTall: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension400) } - @objc open var spaceScaledTaller: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension500) } - @objc open var spaceScaledTallest: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension600) } - @objc open var spaceScaledSpacious: SpacingCompositeSemanticToken { SpacingCompositeSemanticToken(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700) } + @objc open var spaceScaledNone: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension0, regular: DimensionRawTokens.dimension0) } + @objc open var spaceScaledSmash: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension25, regular: DimensionRawTokens.dimension50) } + @objc open var spaceScaledShortest: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension50, regular: DimensionRawTokens.dimension100) } + @objc open var spaceScaledShorter: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension100, regular: DimensionRawTokens.dimension150) } + @objc open var spaceScaledShort: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension150, regular: DimensionRawTokens.dimension200) } + @objc open var spaceScaledMedium: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension200, regular: DimensionRawTokens.dimension300) } + @objc open var spaceScaledTall: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension300, regular: DimensionRawTokens.dimension400) } + @objc open var spaceScaledTaller: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension400, regular: DimensionRawTokens.dimension500) } + @objc open var spaceScaledTallest: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension500, regular: DimensionRawTokens.dimension600) } + @objc open var spaceScaledSpacious: MultipleSpacingTokens { MultipleSpacingTokens(compact: DimensionRawTokens.dimension600, regular: DimensionRawTokens.dimension700) } // MARK: Semantic token - Spacing - Layout fix @@ -142,4 +141,3 @@ extension OUDSTheme: SpacingSemanticTokens { @objc open var spaceRowGapIsIconTall: SpacingGapStackSemanticToken { DimensionRawTokens.dimension100 } @objc open var spaceRowGapIsIconTaller: SpacingGapStackSemanticToken { DimensionRawTokens.dimension200 } } -// swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift index 9c927cc4f..168fb9598 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift @@ -18,7 +18,6 @@ import OUDSTokensSemantic // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // [File to generate with the tokenator] -// swiftlint:disable line_length /// Defines basic values common to all themes for `TypographySemanticTokens`. /// These values can be overriden inside `OUDSTheme` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination. extension OUDSTheme: TypographySemanticTokens { @@ -116,40 +115,39 @@ extension OUDSTheme: TypographySemanticTokens { // MARK: - Semantic tokens - Typography - Composites - Display - @objc open var typeDisplayLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold1450) } - @objc open var typeDisplayMedium: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold750, regular: TypographyRawTokens.typeBold1050) } - @objc open var typeDisplaySmall: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold650, regular: TypographyRawTokens.typeBold850) } + @objc open var typeDisplayLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold1450) } + @objc open var typeDisplayMedium: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold750, regular: TypographyRawTokens.typeBold1050) } + @objc open var typeDisplaySmall: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold650, regular: TypographyRawTokens.typeBold850) } // MARK: - Semantic tokens - Typography - Composites - Heading - @objc open var typeHeadingXLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold550, regular: TypographyRawTokens.typeBold750) } - @objc open var typeHeadingLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold450, regular: TypographyRawTokens.typeBold550) } - @objc open var typeHeadingMedium: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold350, regular: TypographyRawTokens.typeBold450) } - @objc open var typeHeadingSmall: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold300, regular: TypographyRawTokens.typeBold350) } + @objc open var typeHeadingXLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold550, regular: TypographyRawTokens.typeBold750) } + @objc open var typeHeadingLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold450, regular: TypographyRawTokens.typeBold550) } + @objc open var typeHeadingMedium: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold350, regular: TypographyRawTokens.typeBold450) } + @objc open var typeHeadingSmall: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold300, regular: TypographyRawTokens.typeBold350) } // MARK: - Semantic tokens - Typography - Composites - Body - @objc open var typeBodyDefaultLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold250, regular: TypographyRawTokens.typeBold250) } - @objc open var typeBodyDefaultMedium: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } - @objc open var typeBodyDefaultSmall: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } - @objc open var typeBodyStrongLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold250, regular: TypographyRawTokens.typeBold250) } - @objc open var typeBodyStrongMedium: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } - @objc open var typeBodyStrongSmall: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } + @objc open var typeBodyDefaultLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold250, regular: TypographyRawTokens.typeBold250) } + @objc open var typeBodyDefaultMedium: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } + @objc open var typeBodyDefaultSmall: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } + @objc open var typeBodyStrongLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold250, regular: TypographyRawTokens.typeBold250) } + @objc open var typeBodyStrongMedium: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } + @objc open var typeBodyStrongSmall: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } // MARK: - Semantic tokens - Typography - Composites - Label - @objc open var typeLabelDefaultXLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold300, regular: TypographyRawTokens.typeBold300) } - @objc open var typeLabelDefaultLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold250, regular: TypographyRawTokens.typeBold250) } - @objc open var typeLabelDefaultMedium: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } - @objc open var typeLabelDefaultSmall: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } - @objc open var typeLabelStrongXLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold300, regular: TypographyRawTokens.typeBold300) } - @objc open var typeLabelStrongLarge: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold250, regular: TypographyRawTokens.typeBold250) } - @objc open var typeLabelStrongMedium: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } - @objc open var typeLabelStrongSmall: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } + @objc open var typeLabelDefaultXLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold300, regular: TypographyRawTokens.typeBold300) } + @objc open var typeLabelDefaultLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold250, regular: TypographyRawTokens.typeBold250) } + @objc open var typeLabelDefaultMedium: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } + @objc open var typeLabelDefaultSmall: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } + @objc open var typeLabelStrongXLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold300, regular: TypographyRawTokens.typeBold300) } + @objc open var typeLabelStrongLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold250, regular: TypographyRawTokens.typeBold250) } + @objc open var typeLabelStrongMedium: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } + @objc open var typeLabelStrongSmall: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } // MARK: - Semantic tokens - Typography - Composites - Code - @objc open var typeCodeMedium: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } - @objc open var typeCodeSmall: TypographyCompositeSemanticToken { TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } + @objc open var typeCodeMedium: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold200, regular: TypographyRawTokens.typeBold200) } + @objc open var typeCodeSmall: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold150, regular: TypographyRawTokens.typeBold150) } } -// swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift index 8e4186518..ee7e4ee1a 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift @@ -18,7 +18,7 @@ import OUDSTokensSemantic extension MockTheme { static let mockThemeColorRawToken: ColorRawToken = "#68489D" - static let mockThemeColorCompositeSemanticToken: ColorCompositeSemanticToken = ColorCompositeSemanticToken("#68489D") + static let mockThemeMultipleColorTokens: MultipleColorTokens = MultipleColorTokens("#68489D") // MARK: Semantic token - Colors - Alias - Primary @@ -124,225 +124,225 @@ extension MockTheme { // MARK: Semantic token - Colors - Background - Default - Primary - override var colorBackgroundDefaultPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundDefaultPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Default - Secondary - override var colorBackgroundDefaultSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundDefaultSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Default - Tertiary - override var colorBackgroundDefaultTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundDefaultTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Emphasized - Primary - override var colorBackgroundEmphasizedPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundEmphasizedPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Emphasized - Secondary - override var colorBackgroundEmphasizedSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundEmphasizedSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Brand - Primary - override var colorBackgroundBrandPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Brand - Secondary - override var colorBackgroundBrandSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundBrandSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Brand - Tertiary - override var colorBackgroundBrandTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundBrandTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Attractive - Muted - override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized - override var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Warning - Muted - override var colorBackgroundStatusWarningMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusWarningMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized - override var colorBackgroundStatusWarningEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusWarningEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Negative - Muted - override var colorBackgroundStatusNegativeMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusNegativeMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized - override var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Positive - Muted - override var colorBackgroundStatusPositiveMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusPositiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized - override var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Information - Muted - override var colorBackgroundStatusInformationMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusInformationMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Background - Status - Information - Emphasized - override var colorBackgroundStatusInformationEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBackgroundStatusInformationEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Default - override var colorContentDefault: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentDefault: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Default - On background emphasized - override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Muted - override var colorContentMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Muted - On background emphasized - override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Brand - Primary - override var colorContentBrandPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized - override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Brand - Secondary - override var colorContentBrandSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentBrandSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Brand - Tertiary - override var colorContentBrandTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentBrandTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Status - Attractive - override var colorContentStatusAttractive: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentStatusAttractive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Status - Negative - override var colorContentStatusNegative: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Status - Positive - override var colorContentStatusPositive: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentStatusPositive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Content - Status - Information - override var colorContentStatusInformation: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorContentStatusInformation: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Default - override var colorBorderDefault: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderDefault: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Default - On background emphasized - override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Emphasized - override var colorBorderEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized - override var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Brand - Primary - override var colorBorderBrandPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized - override var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Brand - Secondary - override var colorBorderBrandSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Brand - Tertiary - override var colorBorderBrandTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Status - Attractive - override var colorBorderBrandStatusAttractive: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandStatusAttractive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Status - Warning - override var colorBorderBrandStatusWarning: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandStatusWarning: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Status - Negative - override var colorBorderBrandStatusNegative: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Status - Positive - override var colorBorderBrandStatusPositive: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandStatusPositive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - Border - Status - Information - override var colorBorderBrandStatusInformation: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorBorderBrandStatusInformation: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Primary - override var colorOnBackgroundPrimary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Secondary - override var colorOnBackgroundSecondary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Tertiary - override var colorOnBackgroundTertiary: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Attractive - Muted - override var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Attractive - Emphasized - override var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Warning - Muted - override var colorOnBackgroundStatusWarningMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusWarningMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized - override var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Negative - Muted - override var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized - override var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Positive - Muted - override var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized - override var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Information - Muted - override var colorOnBackgroundStatusInformationMuted: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusInformationMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } // MARK: Semantic token - Colors - On background - Status - Information - Emphasized - override var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken! { Self.mockThemeColorCompositeSemanticToken } + override var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ElevationSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ElevationSemanticTokens.swift index 4657f3805..6072519e1 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ElevationSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ElevationSemanticTokens.swift @@ -21,10 +21,9 @@ extension MockTheme { static let mockThemeElevationYRawToken: ElevationRawToken = 713 static let mockThemeElevationBlurRawToken: ElevationRawToken = 816 static let mockThemeElevationColorRawToken: ColorRawToken = ColorRawTokens.colorFunctionalMalachite500 - static let mockThemeElevationCompositeRawToken: ElevationCompositeRawToken = ElevationCompositeRawToken(x: 118, - y: 712, - blur: 118, - color: ColorRawTokens.colorFunctionalDodgerBlue800) + static let mockThemeElevationMultipleColorSemanticToken: ElevationColorSemanticToken = ElevationColorSemanticToken(mockThemeElevationColorRawToken) + static let mockThemeElevationCompositeRawToken = ElevationCompositeRawToken(x: 118, y: 712, blur: 118, color: ColorRawTokens.colorFunctionalDodgerBlue800) + static let mockThemeElevationCompositeSemanticToken = ElevationCompositeSemanticToken(ElevationRawTokens.elevationBottom_1_600) // MARK: Semantic token - Elevation - X @@ -64,72 +63,55 @@ extension MockTheme { // MARK: Semantic token - Elevation - Color - None - override var elevationColorNoneLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorNoneDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorNone: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Color - Raised - override var elevationColorRaisedLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorRaisedDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorRaised: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Color - Drag - override var elevationColorDragLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorDragDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorDrag: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Color - Overlay - Default - override var elevationColorOverlayDefaultLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorOverlayDefaultDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorOverlayDefault: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Color - Overlay - Emphasized - override var elevationColorOverlayEmphasizedLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorOverlayEmphasizedDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorOverlayEmphasized: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Color - Sticky - Default - override var elevationColorStickyDefaultLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorStickyDefaultDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorStickyDefault: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Color - Sticky - Emphasized - override var elevationColorStickyEmphasizedLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorStickyEmphasizedDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorStickyEmphasized: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Color - Sticky - Navigation scrolled - override var elevationColorStickyNavigationScrolledLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorStickyNavigationScrolledDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorStickyNavigationScrolled: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Color - Focus - override var elevationColorFocusLight: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } - override var elevationColorFocusDark: ElevationColorSemanticToken { Self.mockThemeElevationColorRawToken } + override var elevationColorFocus: ElevationColorSemanticToken { Self.mockThemeElevationMultipleColorSemanticToken } // MARK: Semantic token - Elevation - Box shadow - override var elevationRaisedLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationRaisedDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationRaised: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeSemanticToken } - override var elevationDragLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationDragDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationDrag: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeSemanticToken } - override var elevationOverlayDefaultLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationOverlayDefaultDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationOverlayDefault: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeSemanticToken } - override var elevationOverlayEmphasizedLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationOverlayEmphasizedDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationOverlayEmphasized: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeSemanticToken } - override var elevationStickyDefaultLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationStickyDefaultDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationStickyDefault: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeSemanticToken } - override var elevationStickyEmphasizedLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationStickyEmphasizedDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationStickyEmphasized: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeSemanticToken } - override var elevationStickyNavigationScrolledLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationStickyNavigationScrolledDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationStickyNavigationScrolled: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeSemanticToken } - override var elevationFocusLight: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } - override var elevationFocusDark: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeRawToken } + override var elevationFocus: ElevationCompositeSemanticToken { Self.mockThemeElevationCompositeSemanticToken } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift index 4770f8a1f..ac4c698d8 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift @@ -18,7 +18,7 @@ import OUDSTokensSemantic extension MockTheme { static let mockThemeSizeRawToken: DimensionRawToken = 118_000 - static let mockThemeSizeCompositeToken: SizingCompositeSemanticToken = SizingCompositeSemanticToken(compact: 1, regular: 151) + static let mockThemeSizeCompositeToken: MultipleSizingTokens = MultipleSizingTokens(compact: 1, regular: 151) // MARK: - Semantic token - Sizing - Icon decorative @@ -32,33 +32,33 @@ extension MockTheme { // MARK: - Semantic token - Sizing - Icon with typography - override var sizeIconWithTypeHeadingSmallShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingSmallMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingSmallTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingSmallShort: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingSmallMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingSmallTall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingMediumShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingMediumMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingMediumTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingMediumShort: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingMediumMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingMediumTall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingLargeShort: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingLargeMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingLargeTall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingXLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingXLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeHeadingXLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingXLargeShort: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingXLargeMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeHeadingXLargeTall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodySmallShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodySmallMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodySmallTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodySmallShort: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodySmallMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodySmallTall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodyMediumShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodyMediumMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodyMediumTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyMediumShort: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyMediumMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyMediumTall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodyLargeShort: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodyLargeMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeIconWithTypeBodyLargeTall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyLargeShort: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyLargeMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeIconWithTypeBodyLargeTall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } override var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { Self.mockThemeSizeRawToken } override var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { Self.mockThemeSizeRawToken } @@ -80,16 +80,16 @@ extension MockTheme { // MARK: - Semantic token - Sizing - Max width typography - override var sizeMaxWidthTypeDisplaySmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeDisplayMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeDisplayLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeDisplaySmall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeDisplayMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeDisplayLarge: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeHeadingSmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeHeadingMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeHeadingLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeHeadingXLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeHeadingSmall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeHeadingMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeHeadingLarge: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeHeadingXLarge: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeBodySmall: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeBodyMedium: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } - override var sizeMaxWidthTypeBodyLarge: SizingCompositeSemanticToken { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeBodySmall: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeBodyMedium: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } + override var sizeMaxWidthTypeBodyLarge: MultipleSizingTokens { Self.mockThemeSizeCompositeToken } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift index a1efdd7a2..2e45b9bfc 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift @@ -18,20 +18,20 @@ import OUDSTokensSemantic extension MockTheme { static let mockThemeSpaceRawToken: DimensionRawToken = 911 - static let mockThemeSpaceSemanticToken: SpacingCompositeSemanticToken = SpacingCompositeSemanticToken(compact: 1, regular: 151) + static let mockThemeSpaceSemanticToken: MultipleSpacingTokens = MultipleSpacingTokens(compact: 1, regular: 151) // MARK: Semantic token - Spacing - Layout fluid - override var spaceScaledNone: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledSmash: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledShortest: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledShorter: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledShort: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledMedium: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledTall: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledTaller: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledTallest: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } - override var spaceScaledSpacious: SpacingCompositeSemanticToken { Self.mockThemeSpaceSemanticToken } + override var spaceScaledNone: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledSmash: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledShortest: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledShorter: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledShort: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledMedium: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledTall: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledTaller: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledTallest: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } + override var spaceScaledSpacious: MultipleSpacingTokens { Self.mockThemeSpaceSemanticToken } // MARK: Semantic token - Spacing - Layout fix diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift index 3b65a6deb..0f0149e26 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift @@ -22,7 +22,7 @@ extension MockTheme { static let mockThemeTypographyFontWeightRawToken: TypographyFontWeightRawToken = "stiicckkyyyy" static let mockThemeTypographyFontSizeRawToken: TypographyFontSizeRawToken = 666 static let mockThemeTypographyFontLineHeightRawToken: TypographyFontLineHeightRawToken = 321 - static let mockThemeTypographyCompositeSemanticToken: TypographyCompositeSemanticToken = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold1850, regular: TypographyRawTokens.typeBold1850) + static let mockThemeMultipleTypographyTokens: MultipleTypographyTokens = MultipleTypographyTokens(compact: TypographyRawTokens.typeBold1850, regular: TypographyRawTokens.typeBold1850) // MARK: Semantic token - Typography - Font - Family @@ -115,40 +115,40 @@ extension MockTheme { // MARK: - Semantic tokens - Typography - Composites - Display - override var typeDisplayLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeDisplayMedium: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeDisplaySmall: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } + override var typeDisplayLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeDisplayMedium: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeDisplaySmall: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } // MARK: - Semantic tokens - Typography - Composites - Heading - override var typeHeadingXLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeHeadingLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeHeadingMedium: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeHeadingSmall: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } + override var typeHeadingXLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeHeadingLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeHeadingMedium: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeHeadingSmall: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } // MARK: - Semantic tokens - Typography - Composites - Body - override var typeBodyDefaultLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeBodyDefaultMedium: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeBodyDefaultSmall: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeBodyStrongLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeBodyStrongMedium: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeBodyStrongSmall: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } + override var typeBodyDefaultLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeBodyDefaultMedium: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeBodyDefaultSmall: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeBodyStrongLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeBodyStrongMedium: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeBodyStrongSmall: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } // MARK: - Semantic tokens - Typography - Composites - Label - override var typeLabelDefaultXLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeLabelDefaultLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeLabelDefaultMedium: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeLabelDefaultSmall: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeLabelStrongXLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeLabelStrongLarge: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeLabelStrongMedium: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeLabelStrongSmall: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } + override var typeLabelDefaultXLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeLabelDefaultLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeLabelDefaultMedium: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeLabelDefaultSmall: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeLabelStrongXLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeLabelStrongLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeLabelStrongMedium: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeLabelStrongSmall: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } // MARK: - Semantic tokens - Typography - Composites - Code - override var typeCodeMedium: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } - override var typeCodeSmall: TypographyCompositeSemanticToken { Self.mockThemeTypographyCompositeSemanticToken } + override var typeCodeMedium: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } + override var typeCodeSmall: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } } // swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift index 53c117fce..3585b0c3f 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift @@ -171,168 +171,88 @@ final class TestThemeOverrideOfElevationSemanticTokens: XCTestCase { // MARK: - Semantic token - Elevation - Color - None - func testInheritedThemeCanOverrideSemanticTokenElevationColorNoneLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorNoneLight, abstractTheme.elevationColorNoneLight) - XCTAssertTrue(inheritedTheme.elevationColorNoneLight == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorNone() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorNone, abstractTheme.elevationColorNone) + XCTAssertTrue(inheritedTheme.elevationColorNone == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorNoneDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorNoneDark, abstractTheme.elevationColorNoneDark) - XCTAssertTrue(inheritedTheme.elevationColorNoneDark == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorRaised() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorRaised, abstractTheme.elevationColorRaised) + XCTAssertTrue(inheritedTheme.elevationColorRaised == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorRaisedLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorRaisedLight, abstractTheme.elevationColorRaisedLight) - XCTAssertTrue(inheritedTheme.elevationColorRaisedLight == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorDrag() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorDrag, abstractTheme.elevationColorDrag) + XCTAssertTrue(inheritedTheme.elevationColorDrag == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorRaisedDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorRaisedDark, abstractTheme.elevationColorRaisedDark) - XCTAssertTrue(inheritedTheme.elevationColorRaisedDark == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorOverlayDefault() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorOverlayDefault, abstractTheme.elevationColorOverlayDefault) + XCTAssertTrue(inheritedTheme.elevationColorOverlayDefault == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorDragLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorDragLight, abstractTheme.elevationColorDragLight) - XCTAssertTrue(inheritedTheme.elevationColorDragLight == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorOverlayEmphasized() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorOverlayEmphasized, abstractTheme.elevationColorOverlayEmphasized) + XCTAssertTrue(inheritedTheme.elevationColorOverlayEmphasized == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorDragDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorDragDark, abstractTheme.elevationColorDragDark) - XCTAssertTrue(inheritedTheme.elevationColorDragDark == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyDefault() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorStickyDefault, abstractTheme.elevationColorStickyDefault) + XCTAssertTrue(inheritedTheme.elevationColorStickyDefault == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorOverlayDefaultLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorOverlayDefaultLight, abstractTheme.elevationColorOverlayDefaultLight) - XCTAssertTrue(inheritedTheme.elevationColorOverlayDefaultLight == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyEmphasized() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorStickyEmphasized, abstractTheme.elevationColorStickyEmphasized) + XCTAssertTrue(inheritedTheme.elevationColorStickyEmphasized == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorOverlayDefaultDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorOverlayDefaultDark, abstractTheme.elevationColorOverlayDefaultDark) - XCTAssertTrue(inheritedTheme.elevationColorOverlayDefaultDark == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyNavigationScrolled() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorStickyNavigationScrolled, abstractTheme.elevationColorStickyNavigationScrolled) + XCTAssertTrue(inheritedTheme.elevationColorStickyNavigationScrolled == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorOverlayEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorOverlayEmphasizedLight, abstractTheme.elevationColorOverlayEmphasizedLight) - XCTAssertTrue(inheritedTheme.elevationColorOverlayEmphasizedLight == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationColorFocus() throws { + XCTAssertNotEqual(inheritedTheme.elevationColorFocus, abstractTheme.elevationColorFocus) + XCTAssertTrue(inheritedTheme.elevationColorFocus == MockTheme.mockThemeElevationMultipleColorSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorOverlayEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorOverlayEmphasizedDark, abstractTheme.elevationColorOverlayEmphasizedDark) - XCTAssertTrue(inheritedTheme.elevationColorOverlayEmphasizedDark == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationCompositeRaised() throws { + XCTAssertNotEqual(inheritedTheme.elevationRaised, abstractTheme.elevationRaised) + XCTAssertTrue(inheritedTheme.elevationRaised == MockTheme.mockThemeElevationCompositeSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyDefaultLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorStickyDefaultLight, abstractTheme.elevationColorStickyDefaultLight) - XCTAssertTrue(inheritedTheme.elevationColorStickyDefaultLight == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationCompositeDrag() throws { + XCTAssertNotEqual(inheritedTheme.elevationDrag, abstractTheme.elevationDrag) + XCTAssertTrue(inheritedTheme.elevationDrag == MockTheme.mockThemeElevationCompositeSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyDefaultDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorStickyDefaultDark, abstractTheme.elevationColorStickyDefaultDark) - XCTAssertTrue(inheritedTheme.elevationColorStickyDefaultDark == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayDefault() throws { + XCTAssertNotEqual(inheritedTheme.elevationOverlayDefault, abstractTheme.elevationOverlayDefault) + XCTAssertTrue(inheritedTheme.elevationOverlayDefault == MockTheme.mockThemeElevationCompositeSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorStickyEmphasizedLight, abstractTheme.elevationColorStickyEmphasizedLight) - XCTAssertTrue(inheritedTheme.elevationColorStickyEmphasizedLight == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayEmphasized() throws { + XCTAssertNotEqual(inheritedTheme.elevationOverlayEmphasized, abstractTheme.elevationOverlayEmphasized) + XCTAssertTrue(inheritedTheme.elevationOverlayEmphasized == MockTheme.mockThemeElevationCompositeSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorStickyEmphasizedDark, abstractTheme.elevationColorStickyEmphasizedDark) - XCTAssertTrue(inheritedTheme.elevationColorStickyEmphasizedDark == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyDefault() throws { + XCTAssertNotEqual(inheritedTheme.elevationStickyDefault, abstractTheme.elevationStickyDefault) + XCTAssertTrue(inheritedTheme.elevationStickyDefault == MockTheme.mockThemeElevationCompositeSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyNavigationScrolledLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorStickyNavigationScrolledLight, abstractTheme.elevationColorStickyNavigationScrolledLight) - XCTAssertTrue(inheritedTheme.elevationColorStickyNavigationScrolledLight == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyEmphasized() throws { + XCTAssertNotEqual(inheritedTheme.elevationStickyEmphasized, abstractTheme.elevationStickyEmphasized) + XCTAssertTrue(inheritedTheme.elevationStickyEmphasized == MockTheme.mockThemeElevationCompositeSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorStickyNavigationScrolledDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorStickyNavigationScrolledDark, abstractTheme.elevationColorStickyNavigationScrolledDark) - XCTAssertTrue(inheritedTheme.elevationColorStickyNavigationScrolledDark == MockTheme.mockThemeElevationColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyNavigationScrolled() throws { + XCTAssertNotEqual(inheritedTheme.elevationStickyNavigationScrolled, abstractTheme.elevationStickyNavigationScrolled) + XCTAssertTrue(inheritedTheme.elevationStickyNavigationScrolled == MockTheme.mockThemeElevationCompositeSemanticToken) } - func testInheritedThemeCanOverrideSemanticTokenElevationColorFocusLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorFocusLight, abstractTheme.elevationColorFocusLight) - XCTAssertTrue(inheritedTheme.elevationColorFocusLight == MockTheme.mockThemeElevationColorRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationColorFocusDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationColorFocusDark, abstractTheme.elevationColorFocusDark) - XCTAssertTrue(inheritedTheme.elevationColorFocusDark == MockTheme.mockThemeElevationColorRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeRaisedDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationRaisedDark, abstractTheme.elevationRaisedDark) - XCTAssertTrue(inheritedTheme.elevationRaisedDark == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeDragLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationDragLight, abstractTheme.elevationDragLight) - XCTAssertTrue(inheritedTheme.elevationDragLight == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeDragDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationDragDark, abstractTheme.elevationDragDark) - XCTAssertTrue(inheritedTheme.elevationDragDark == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayDefaultLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationOverlayDefaultLight, abstractTheme.elevationOverlayDefaultLight) - XCTAssertTrue(inheritedTheme.elevationOverlayDefaultLight == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayDefaultDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationOverlayDefaultDark, abstractTheme.elevationOverlayDefaultDark) - XCTAssertTrue(inheritedTheme.elevationOverlayDefaultDark == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationOverlayEmphasizedLight, abstractTheme.elevationOverlayEmphasizedLight) - XCTAssertTrue(inheritedTheme.elevationOverlayEmphasizedLight == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeOverlayEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationOverlayEmphasizedDark, abstractTheme.elevationOverlayEmphasizedDark) - XCTAssertTrue(inheritedTheme.elevationOverlayEmphasizedDark == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyDefaultLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationStickyDefaultLight, abstractTheme.elevationStickyDefaultLight) - XCTAssertTrue(inheritedTheme.elevationStickyDefaultLight == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyDefaultDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationStickyDefaultDark, abstractTheme.elevationStickyDefaultDark) - XCTAssertTrue(inheritedTheme.elevationStickyDefaultDark == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationStickyEmphasizedLight, abstractTheme.elevationStickyEmphasizedLight) - XCTAssertTrue(inheritedTheme.elevationStickyEmphasizedLight == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationStickyEmphasizedDark, abstractTheme.elevationStickyEmphasizedDark) - XCTAssertTrue(inheritedTheme.elevationStickyEmphasizedDark == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyNavigationScrolledLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationStickyNavigationScrolledLight, abstractTheme.elevationStickyNavigationScrolledLight) - XCTAssertTrue(inheritedTheme.elevationStickyNavigationScrolledLight == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeStickyNavigationScrolledDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationStickyNavigationScrolledDark, abstractTheme.elevationStickyNavigationScrolledDark) - XCTAssertTrue(inheritedTheme.elevationStickyNavigationScrolledDark == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeFocusLight() throws { - XCTAssertNotEqual(inheritedTheme.elevationFocusLight, abstractTheme.elevationFocusLight) - XCTAssertTrue(inheritedTheme.elevationFocusLight == MockTheme.mockThemeElevationCompositeRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenElevationCompositeFocusDark() throws { - XCTAssertNotEqual(inheritedTheme.elevationFocusDark, abstractTheme.elevationFocusDark) - XCTAssertTrue(inheritedTheme.elevationFocusDark == MockTheme.mockThemeElevationCompositeRawToken) + func testInheritedThemeCanOverrideSemanticTokenElevationCompositeFocus() throws { + XCTAssertNotEqual(inheritedTheme.elevationFocus, abstractTheme.elevationFocus) + XCTAssertTrue(inheritedTheme.elevationFocus == MockTheme.mockThemeElevationCompositeSemanticToken) } } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift index aafd5a1d8..7ba6abdc9 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift @@ -375,125 +375,125 @@ final class TestThemeOverrideOfTypographySemanticTokens: XCTestCase { func testInheritedThemeCanOverrideSemanticTokenTypeDisplayLarge() throws { XCTAssertNotEqual(inheritedTheme.typeDisplayLarge, abstractTheme.typeDisplayLarge) - XCTAssertTrue(inheritedTheme.typeDisplayLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeDisplayLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeDisplayMedium() throws { XCTAssertNotEqual(inheritedTheme.typeDisplayMedium, abstractTheme.typeDisplayMedium) - XCTAssertTrue(inheritedTheme.typeDisplayMedium == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeDisplayMedium == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeDisplaySmal() throws { XCTAssertNotEqual(inheritedTheme.typeDisplaySmall, abstractTheme.typeDisplaySmall) - XCTAssertTrue(inheritedTheme.typeDisplaySmall == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeDisplaySmall == MockTheme.mockThemeMultipleTypographyTokens) } // MARK: - Semantic tokens - Typography - Composites - Heading func testInheritedThemeCanOverrideSemanticTokenTypeHeadingXLarge() throws { XCTAssertNotEqual(inheritedTheme.typeHeadingXLarge, abstractTheme.typeHeadingXLarge) - XCTAssertTrue(inheritedTheme.typeHeadingXLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeHeadingXLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeHeadingLarge() throws { XCTAssertNotEqual(inheritedTheme.typeHeadingLarge, abstractTheme.typeHeadingLarge) - XCTAssertTrue(inheritedTheme.typeHeadingLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeHeadingLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeHeadingMedium() throws { XCTAssertNotEqual(inheritedTheme.typeHeadingMedium, abstractTheme.typeHeadingMedium) - XCTAssertTrue(inheritedTheme.typeHeadingMedium == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeHeadingMedium == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeHeadingSmall() throws { XCTAssertNotEqual(inheritedTheme.typeHeadingSmall, abstractTheme.typeHeadingSmall) - XCTAssertTrue(inheritedTheme.typeHeadingSmall == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeHeadingSmall == MockTheme.mockThemeMultipleTypographyTokens) } // MARK: - Semantic tokens - Typography - Composites - Body func testInheritedThemeCanOverrideSemanticTokenTypeDefaultLarge() throws { XCTAssertNotEqual(inheritedTheme.typeBodyDefaultLarge, abstractTheme.typeBodyDefaultLarge) - XCTAssertTrue(inheritedTheme.typeBodyDefaultLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeBodyDefaultLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeDefaultMedium() throws { XCTAssertNotEqual(inheritedTheme.typeBodyDefaultMedium, abstractTheme.typeBodyDefaultMedium) - XCTAssertTrue(inheritedTheme.typeBodyDefaultMedium == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeBodyDefaultMedium == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeDefaultSmall() throws { XCTAssertNotEqual(inheritedTheme.typeBodyDefaultSmall, abstractTheme.typeBodyDefaultSmall) - XCTAssertTrue(inheritedTheme.typeBodyDefaultSmall == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeBodyDefaultSmall == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeStrongLarge() throws { XCTAssertNotEqual(inheritedTheme.typeBodyStrongLarge, abstractTheme.typeBodyStrongLarge) - XCTAssertTrue(inheritedTheme.typeBodyStrongLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeBodyStrongLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeStrongMedium() throws { XCTAssertNotEqual(inheritedTheme.typeBodyStrongMedium, abstractTheme.typeBodyStrongMedium) - XCTAssertTrue(inheritedTheme.typeBodyStrongMedium == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeBodyStrongMedium == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeStrongSmall() throws { XCTAssertNotEqual(inheritedTheme.typeBodyStrongSmall, abstractTheme.typeBodyStrongSmall) - XCTAssertTrue(inheritedTheme.typeBodyStrongSmall == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeBodyStrongSmall == MockTheme.mockThemeMultipleTypographyTokens) } // MARK: - Semantic tokens - Typography - Composites - Label func testInheritedThemeCanOverrideSemanticTokenTypeLabelDefaultXLarge() throws { XCTAssertNotEqual(inheritedTheme.typeLabelDefaultXLarge, abstractTheme.typeLabelDefaultXLarge) - XCTAssertTrue(inheritedTheme.typeLabelDefaultXLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeLabelDefaultXLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeLabelDefaultLarge() throws { XCTAssertNotEqual(inheritedTheme.typeLabelDefaultLarge, abstractTheme.typeLabelDefaultLarge) - XCTAssertTrue(inheritedTheme.typeLabelDefaultLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeLabelDefaultLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeLabelDefaultMedium() throws { XCTAssertNotEqual(inheritedTheme.typeLabelDefaultMedium, abstractTheme.typeLabelDefaultMedium) - XCTAssertTrue(inheritedTheme.typeLabelDefaultMedium == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeLabelDefaultMedium == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeLabelDefaultSmall() throws { XCTAssertNotEqual(inheritedTheme.typeLabelDefaultSmall, abstractTheme.typeLabelDefaultSmall) - XCTAssertTrue(inheritedTheme.typeLabelDefaultSmall == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeLabelDefaultSmall == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeLabelStrongXLarge() throws { XCTAssertNotEqual(inheritedTheme.typeLabelStrongXLarge, abstractTheme.typeLabelStrongXLarge) - XCTAssertTrue(inheritedTheme.typeLabelStrongXLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeLabelStrongXLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeLabelStrongLarge() throws { XCTAssertNotEqual(inheritedTheme.typeLabelStrongLarge, abstractTheme.typeLabelStrongLarge) - XCTAssertTrue(inheritedTheme.typeLabelStrongLarge == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeLabelStrongLarge == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeLabelStrongMedium() throws { XCTAssertNotEqual(inheritedTheme.typeLabelStrongMedium, abstractTheme.typeLabelStrongMedium) - XCTAssertTrue(inheritedTheme.typeLabelStrongMedium == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeLabelStrongMedium == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeLabelStrongSmall() throws { XCTAssertNotEqual(inheritedTheme.typeLabelStrongSmall, abstractTheme.typeLabelStrongSmall) - XCTAssertTrue(inheritedTheme.typeLabelStrongSmall == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeLabelStrongSmall == MockTheme.mockThemeMultipleTypographyTokens) } // MARK: - Semantic tokens - Typography - Composites - Code func testInheritedThemeCanOverrideSemanticTokenTypeCodeMedium() throws { XCTAssertNotEqual(inheritedTheme.typeCodeMedium, abstractTheme.typeCodeMedium) - XCTAssertTrue(inheritedTheme.typeCodeMedium == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeCodeMedium == MockTheme.mockThemeMultipleTypographyTokens) } func testInheritedThemeCanOverrideSemanticTokenTypeCodeSmall() throws { XCTAssertNotEqual(inheritedTheme.typeCodeSmall, abstractTheme.typeCodeSmall) - XCTAssertTrue(inheritedTheme.typeCodeSmall == MockTheme.mockThemeTypographyCompositeSemanticToken) + XCTAssertTrue(inheritedTheme.typeCodeSmall == MockTheme.mockThemeMultipleTypographyTokens) } } diff --git a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift index 495eac59b..9227d05a5 100644 --- a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift @@ -20,49 +20,49 @@ import OUDSTokensSemantic /// Overrides some colors using values defined in extension of `ColorRawTokens` in this current module. extension InverseTheme { - public override var colorBackgroundDefaultPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundDefaultPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorBackgroundDefaultSecondary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedMedium!) } + public override var colorBackgroundDefaultSecondary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedMedium!) } - public override var colorBackgroundDefaultTertiary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandAttractiveHighest!) } + public override var colorBackgroundDefaultTertiary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandAttractiveHighest!) } - public override var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } + public override var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } - public override var colorBackgroundEmphasizedSecondary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedLowest!) } + public override var colorBackgroundEmphasizedSecondary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedLowest!) } - public override var colorBackgroundBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryDefault!) } + public override var colorBackgroundBrandPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault!) } - public override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandAttractiveLowest!) } + public override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandAttractiveLowest!) } - public override var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandWarningDefault!) } + public override var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningDefault!) } - public override var colorBackgroundStatusWarningMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandWarningLowest!) } + public override var colorBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningLowest!) } - public override var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandWarningDefault!) } + public override var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningDefault!) } - public override var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNegativeLowest!) } + public override var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeLowest!) } - public override var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNegativeDefault!) } + public override var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeDefault!) } - public override var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPositiveLowest!) } + public override var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveLowest!) } - public override var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPositiveDefault!) } + public override var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveDefault!) } - public override var colorBackgroundStatusInformationMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandInformationLowest!) } + public override var colorBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandInformationLowest!) } - public override var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPositiveLowest!) } + public override var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveLowest!) } - public override var colorContentDefault: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } + public override var colorContentDefault: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } - public override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorContentMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedMedium!) } + public override var colorContentMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedMedium!) } - public override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedLowest!) } + public override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest!) } - public override var colorContentBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryLow!) } + public override var colorContentBrandPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryLow!) } - public override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryDefault!) } + public override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault!) } public override var colorContentBrandSecondary: ColorSemanticToken? { nil } @@ -70,23 +70,23 @@ extension InverseTheme { public override var colorContentStatusAttractive: ColorSemanticToken? { nil } - public override var colorContentStatusNegative: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNegativeDefault!) } + public override var colorContentStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeDefault!) } - public override var colorContentStatusPositive: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPositiveDefault!) } + public override var colorContentStatusPositive: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveDefault!) } - public override var colorContentStatusInformation: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandInformationDefault!) } + public override var colorContentStatusInformation: ColorSemanticToken? { MultipleColorTokens(sysColorBrandInformationDefault!) } - public override var colorBorderDefault: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedLowest!) } + public override var colorBorderDefault: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest!) } - public override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedMedium!) } + public override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium!) } - public override var colorBorderEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } + public override var colorBorderEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } - public override var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorBorderBrandPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryLow!) } + public override var colorBorderBrandPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryLow!) } - public override var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandPrimaryDefault!) } + public override var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault!) } public override var colorBorderBrandSecondary: ColorSemanticToken? { nil } @@ -102,29 +102,29 @@ extension InverseTheme { public override var colorBorderBrandStatusInformation: ColorSemanticToken? { nil } - public override var colorOnBackgroundPrimary: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } + public override var colorOnBackgroundPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } public override var colorOnBackgroundSecondary: ColorSemanticToken? { nil } public override var colorOnBackgroundTertiary: ColorSemanticToken? { nil } - public override var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusWarningMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralMutedWhite!) } + public override var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } - public override var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusInformationMuted: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } - public override var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken? { ColorCompositeSemanticToken(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } } diff --git a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ElevationSemanticTokens.swift b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ElevationSemanticTokens.swift index d849db1b9..26591de27 100644 --- a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ElevationSemanticTokens.swift +++ b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ElevationSemanticTokens.swift @@ -18,76 +18,17 @@ import OUDSTokensSemantic // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // [File to generate with the tokenator] -extension InverseTheme { - - // MARK: Semantic token - Elevation - Color - None - - public override var elevationColorNoneLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack0 } - public override var elevationColorNoneDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack0 } - - // MARK: Semantic token - Elevation - Color - Raised - - public override var elevationColorRaisedLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack500 } - public override var elevationColorRaisedDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack500 } - - // MARK: Semantic token - Elevation - Color - Drag - - public override var elevationColorDragLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack600 } - public override var elevationColorDragDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack600 } - - // MARK: Semantic token - Elevation - Color - Overlay - Default - - public override var elevationColorOverlayDefaultLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack400 } - public override var elevationColorOverlayDefaultDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack400 } - - // MARK: Semantic token - Elevation - Color - Overlay - Emphasized - - public override var elevationColorOverlayEmphasizedLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - public override var elevationColorOverlayEmphasizedDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - - // MARK: Semantic token - Elevation - Color - Sticky - Default - - public override var elevationColorStickyDefaultLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - public override var elevationColorStickyDefaultDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } +// swiftlint:disable line_length - // MARK: Semantic token - Elevation - Color - Sticky - Emphasized - - public override var elevationColorStickyEmphasizedLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - public override var elevationColorStickyEmphasizedDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - - // MARK: Semantic token - Elevation - Color - Sticky - Navigation scrolled - - public override var elevationColorStickyNavigationScrolledLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } - public override var elevationColorStickyNavigationScrolledDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentBlack300 } +extension InverseTheme { // MARK: Semantic token - Elevation - Color - Focus - public override var elevationColorFocusLight: ElevationColorSemanticToken { ColorRawTokens.colorTransparentWhite900 } - public override var elevationColorFocusDark: ElevationColorSemanticToken { ColorRawTokens.colorTransparentWhite900 } + public override var elevationColorFocus: ElevationColorSemanticToken { MultipleColorTokens( ColorRawTokens.colorFunctionalLightGray160) } // MARK: Semantic token - Elevation - Box shadow - public override var elevationRaisedLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } - public override var elevationRaisedDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } - - public override var elevationDragLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_600 } - public override var elevationDragDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_600 } - - public override var elevationOverlayDefaultLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_2_400 } - public override var elevationOverlayDefaultDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_2_400 } - - public override var elevationOverlayEmphasizedLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_5_300 } - public override var elevationOverlayEmphasizedDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_5_300 } - - public override var elevationStickyDefaultLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_300 } - public override var elevationStickyDefaultDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_300 } - - public override var elevationStickyEmphasizedLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_300 } - public override var elevationStickyEmphasizedDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_3_300 } - - public override var elevationStickyNavigationScrolledLight: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } - public override var elevationStickyNavigationScrolledDark: ElevationCompositeSemanticToken { ElevationRawTokens.elevationBottom_1_500 } - - public override var elevationFocusLight: ElevationCompositeSemanticToken { ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorTransparentWhite900) } - public override var elevationFocusDark: ElevationCompositeSemanticToken { ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorTransparentWhite900) } + public override var elevationFocus: ElevationCompositeSemanticToken { ElevationCompositeSemanticToken(light: ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorFunctionalLightGray160), dark: ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorFunctionalLightGray160)) } } + +// swiftlint:enable line_length diff --git a/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeElevation.swift b/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeElevation.swift index 3aa3dadaf..aba5f4bbd 100644 --- a/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeElevation.swift +++ b/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeElevation.swift @@ -26,25 +26,10 @@ final class TestInverseThemeElevationColors: XCTestCase { } func testElevationColorsEquality() throws { - XCTAssertEqual(inverseTheme.elevationColorNoneLight, inverseTheme.elevationColorNoneDark) - XCTAssertEqual(inverseTheme.elevationColorRaisedLight, inverseTheme.elevationColorRaisedDark) - XCTAssertEqual(inverseTheme.elevationColorDragLight, inverseTheme.elevationColorDragDark) - XCTAssertEqual(inverseTheme.elevationColorOverlayDefaultLight, inverseTheme.elevationColorOverlayDefaultDark) - XCTAssertEqual(inverseTheme.elevationColorOverlayEmphasizedLight, inverseTheme.elevationColorOverlayEmphasizedDark) - XCTAssertEqual(inverseTheme.elevationColorStickyDefaultLight, inverseTheme.elevationColorStickyDefaultDark) - XCTAssertEqual(inverseTheme.elevationColorStickyEmphasizedLight, inverseTheme.elevationColorStickyEmphasizedDark) - XCTAssertEqual(inverseTheme.elevationColorStickyNavigationScrolledLight, inverseTheme.elevationColorStickyNavigationScrolledDark) - XCTAssertEqual(inverseTheme.elevationColorFocusLight, inverseTheme.elevationColorFocusDark) + XCTAssertEqual(inverseTheme.elevationColorFocus.light, inverseTheme.elevationColorFocus.dark) } func testElevationEquality() throws { - XCTAssertEqual(inverseTheme.elevationRaisedLight, inverseTheme.elevationRaisedDark) - XCTAssertEqual(inverseTheme.elevationDragLight, inverseTheme.elevationDragDark) - XCTAssertEqual(inverseTheme.elevationOverlayDefaultLight, inverseTheme.elevationOverlayDefaultDark) - XCTAssertEqual(inverseTheme.elevationOverlayEmphasizedLight, inverseTheme.elevationOverlayEmphasizedDark) - XCTAssertEqual(inverseTheme.elevationStickyDefaultLight, inverseTheme.elevationStickyDefaultDark) - XCTAssertEqual(inverseTheme.elevationStickyEmphasizedLight, inverseTheme.elevationStickyEmphasizedDark) - XCTAssertEqual(inverseTheme.elevationStickyNavigationScrolledLight, inverseTheme.elevationStickyNavigationScrolledDark) - XCTAssertEqual(inverseTheme.elevationFocusLight, inverseTheme.elevationFocusDark) + XCTAssertEqual(inverseTheme.elevationFocus.light, inverseTheme.elevationFocus.dark) } } diff --git a/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift b/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift index a17df44ed..479eefaff 100644 --- a/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift +++ b/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift @@ -18,8 +18,8 @@ import OUDSTokensRaw /// This enum helps to add new raw tokens for this theme. /// Such tokens are packed in a _Swift enum_ so as to gather them in one object with the suitable namespace and avoid to have just constants in nothing else /// (i.e. publicly accessible from everywhere). More optimized than _struct_. -public enum OrangeBrandColorRawTokens { - +public enum OrangeBrandColorRawTokens { + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder } diff --git a/OUDS/Core/Themes/Sosh/Sources/Declarations/SoshBrandColorRawTokens.swift b/OUDS/Core/Themes/Sosh/Sources/Declarations/SoshBrandColorRawTokens.swift index 8ea60897f..2a0f43dae 100644 --- a/OUDS/Core/Themes/Sosh/Sources/Declarations/SoshBrandColorRawTokens.swift +++ b/OUDS/Core/Themes/Sosh/Sources/Declarations/SoshBrandColorRawTokens.swift @@ -15,7 +15,7 @@ /// Such tokens are packed in a _Swift enum_ so as to gather them in one object with the suitable namespace and avoid to have just constants in nothing else /// (i.e. publicly accessible from everywhere). More optimized than _struct_. public enum SoshBrandColorRawTokens { - + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // Note: So as to help the Figma-JSON-to-Swift parser the values have been added in the Values folder } diff --git a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift index 1abcbeebf..d4b80226f 100644 --- a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift +++ b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift @@ -37,5 +37,5 @@ public protocol ButtonsComponentTokens { var buttonWidth: SizingSemanticToken { get } var buttonHeight: SizingSemanticToken { get } - var buttonTypography: TypographyCompositeSemanticToken { get } + var buttonTypography: MultipleTypographyTokens { get } } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Composites/ElevationRawTokens+Composites.swift b/OUDS/Core/Tokens/RawTokens/Sources/Composites/ElevationCompositeRawToken.swift similarity index 100% rename from OUDS/Core/Tokens/RawTokens/Sources/Composites/ElevationRawTokens+Composites.swift rename to OUDS/Core/Tokens/RawTokens/Sources/Composites/ElevationCompositeRawToken.swift diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Composites/TypographyRawTokens+Composites.swift b/OUDS/Core/Tokens/RawTokens/Sources/Composites/TypographyCompositeRawToken.swift similarity index 100% rename from OUDS/Core/Tokens/RawTokens/Sources/Composites/TypographyRawTokens+Composites.swift rename to OUDS/Core/Tokens/RawTokens/Sources/Composites/TypographyCompositeRawToken.swift diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Composites.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Composites.swift new file mode 100644 index 000000000..994752403 --- /dev/null +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Composites.swift @@ -0,0 +1,99 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + +/// Extracted in a separated file because the the *Figma* JSON to Swift parser is not abale to process such composite tokens, and the *Figma* tool is not able to. +/// +/// **Beware, may result in desynchronization between generated raw tokens values and theses composite raw tokens** +extension ElevationRawTokens { + + // MARK: Primitive token - Elevation - Box Shadow + + // WARNING: Not the same syntax between CSS and Figma, maybe blur and Y and inverted, beware + + public static let elevationBottom_0 = ElevationCompositeRawToken(x: elevationX0, y: elevationY0, blur: elevationBlur0, color: ColorRawTokens.colorTransparentBlack0) + + public static let elevationBottom_1_100 = ElevationCompositeRawToken(x: elevationX0, y: elevationY100, blur: elevationBlur200, color: ColorRawTokens.colorTransparentBlack100) + + public static let elevationBottom_1_200 = ElevationCompositeRawToken(x: elevationX0, y: elevationY100, blur: elevationBlur200, color: ColorRawTokens.colorTransparentBlack200) + + public static let elevationBottom_1_300 = ElevationCompositeRawToken(x: elevationX0, y: elevationY100, blur: elevationBlur200, color: ColorRawTokens.colorTransparentBlack300) + + public static let elevationBottom_1_400 = ElevationCompositeRawToken(x: elevationX0, y: elevationY100, blur: elevationBlur200, color: ColorRawTokens.colorTransparentBlack400) + + public static let elevationBottom_1_500 = ElevationCompositeRawToken(x: elevationX0, y: elevationY100, blur: elevationBlur200, color: ColorRawTokens.colorTransparentBlack500) + + public static let elevationBottom_1_600 = ElevationCompositeRawToken(x: elevationX0, y: elevationY100, blur: elevationBlur200, color: ColorRawTokens.colorTransparentBlack600) + + public static let elevationBottom_2_100 = ElevationCompositeRawToken(x: elevationX0, y: elevationY200, blur: elevationBlur300, color: ColorRawTokens.colorTransparentBlack100) + + public static let elevationBottom_2_200 = ElevationCompositeRawToken(x: elevationX0, y: elevationY200, blur: elevationBlur300, color: ColorRawTokens.colorTransparentBlack200) + + public static let elevationBottom_2_300 = ElevationCompositeRawToken(x: elevationX0, y: elevationY200, blur: elevationBlur300, color: ColorRawTokens.colorTransparentBlack300) + + public static let elevationBottom_2_400 = ElevationCompositeRawToken(x: elevationX0, y: elevationY200, blur: elevationBlur300, color: ColorRawTokens.colorTransparentBlack400) + + public static let elevationBottom_2_500 = ElevationCompositeRawToken(x: elevationX0, y: elevationY200, blur: elevationBlur300, color: ColorRawTokens.colorTransparentBlack500) + + public static let elevationBottom_2_600 = ElevationCompositeRawToken(x: elevationX0, y: elevationY200, blur: elevationBlur300, color: ColorRawTokens.colorTransparentBlack600) + + public static let elevationBottom_3_100 = ElevationCompositeRawToken(x: elevationX0, y: elevationY300, blur: elevationBlur400, color: ColorRawTokens.colorTransparentBlack100) + + public static let elevationBottom_3_200 = ElevationCompositeRawToken(x: elevationX0, y: elevationY300, blur: elevationBlur400, color: ColorRawTokens.colorTransparentBlack200) + + public static let elevationBottom_3_300 = ElevationCompositeRawToken(x: elevationX0, y: elevationY300, blur: elevationBlur400, color: ColorRawTokens.colorTransparentBlack300) + + public static let elevationBottom_3_400 = ElevationCompositeRawToken(x: elevationX0, y: elevationY300, blur: elevationBlur400, color: ColorRawTokens.colorTransparentBlack400) + + public static let elevationBottom_3_500 = ElevationCompositeRawToken(x: elevationX0, y: elevationY300, blur: elevationBlur400, color: ColorRawTokens.colorTransparentBlack500) + + public static let elevationBottom_3_600 = ElevationCompositeRawToken(x: elevationX0, y: elevationY300, blur: elevationBlur400, color: ColorRawTokens.colorTransparentBlack600) + + public static let elevationBottom_4_100 = ElevationCompositeRawToken(x: elevationX0, y: elevationY400, blur: elevationBlur500, color: ColorRawTokens.colorTransparentBlack100) + + public static let elevationBottom_4_200 = ElevationCompositeRawToken(x: elevationX0, y: elevationY400, blur: elevationBlur500, color: ColorRawTokens.colorTransparentBlack200) + + public static let elevationBottom_4_300 = ElevationCompositeRawToken(x: elevationX0, y: elevationY400, blur: elevationBlur500, color: ColorRawTokens.colorTransparentBlack300) + + public static let elevationBottom_4_400 = ElevationCompositeRawToken(x: elevationX0, y: elevationY400, blur: elevationBlur500, color: ColorRawTokens.colorTransparentBlack400) + + public static let elevationBottom_4_500 = ElevationCompositeRawToken(x: elevationX0, y: elevationY400, blur: elevationBlur500, color: ColorRawTokens.colorTransparentBlack500) + + public static let elevationBottom_4_600 = ElevationCompositeRawToken(x: elevationX0, y: elevationY400, blur: elevationBlur500, color: ColorRawTokens.colorTransparentBlack600) + + public static let elevationBottom_5_100 = ElevationCompositeRawToken(x: elevationX0, y: elevationY500, blur: elevationBlur600, color: ColorRawTokens.colorTransparentBlack100) + + public static let elevationBottom_5_200 = ElevationCompositeRawToken(x: elevationX0, y: elevationY500, blur: elevationBlur600, color: ColorRawTokens.colorTransparentBlack200) + + public static let elevationBottom_5_300 = ElevationCompositeRawToken(x: elevationX0, y: elevationY500, blur: elevationBlur600, color: ColorRawTokens.colorTransparentBlack300) + + public static let elevationBottom_5_400 = ElevationCompositeRawToken(x: elevationX0, y: elevationY500, blur: elevationBlur600, color: ColorRawTokens.colorTransparentBlack400) + + public static let elevationBottom_5_500 = ElevationCompositeRawToken(x: elevationX0, y: elevationY500, blur: elevationBlur600, color: ColorRawTokens.colorTransparentBlack500) + + public static let elevationBottom_5_600 = ElevationCompositeRawToken(x: elevationX0, y: elevationY500, blur: elevationBlur600, color: ColorRawTokens.colorTransparentBlack600) + + public static let elevationBottom_6_100 = ElevationCompositeRawToken(x: elevationX0, y: elevationY600, blur: elevationBlur700, color: ColorRawTokens.colorTransparentBlack100) + + public static let elevationBottom_6_200 = ElevationCompositeRawToken(x: elevationX0, y: elevationY600, blur: elevationBlur700, color: ColorRawTokens.colorTransparentBlack200) + + public static let elevationBottom_6_300 = ElevationCompositeRawToken(x: elevationX0, y: elevationY600, blur: elevationBlur700, color: ColorRawTokens.colorTransparentBlack300) + + public static let elevationBottom_6_400 = ElevationCompositeRawToken(x: elevationX0, y: elevationY600, blur: elevationBlur700, color: ColorRawTokens.colorTransparentBlack400) + + public static let elevationBottom_6_500 = ElevationCompositeRawToken(x: elevationX0, y: elevationY600, blur: elevationBlur700, color: ColorRawTokens.colorTransparentBlack500) + + public static let elevationBottom_6_600 = ElevationCompositeRawToken(x: elevationX0, y: elevationY600, blur: elevationBlur700, color: ColorRawTokens.colorTransparentBlack600) +} diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift index 39a49a797..34f27531a 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/ElevationRawTokens+Values.swift @@ -41,46 +41,4 @@ extension ElevationRawTokens { public static let elevationBlur500: ElevationRawToken = 8 public static let elevationBlur600: ElevationRawToken = 12 public static let elevationBlur700: ElevationRawToken = 20 - - // MARK: Primitive token - Elevation - Box Shadow - - // WARNING: Not the same syntax between CSS and Figma, maybe blur and Y and inverted, beware - - public static let elevationBottom_0 = ElevationCompositeRawToken(x: 0, y: 0, blur: 0, color: ColorRawTokens.colorTransparentBlack0) - public static let elevationBottom_1_100 = ElevationCompositeRawToken(x: 0, y: 1, blur: 2, color: ColorRawTokens.colorTransparentBlack100) - public static let elevationBottom_1_200 = ElevationCompositeRawToken(x: 0, y: 1, blur: 2, color: ColorRawTokens.colorTransparentBlack200) - public static let elevationBottom_1_300 = ElevationCompositeRawToken(x: 0, y: 1, blur: 2, color: ColorRawTokens.colorTransparentBlack300) - public static let elevationBottom_1_400 = ElevationCompositeRawToken(x: 0, y: 1, blur: 2, color: ColorRawTokens.colorTransparentBlack400) - public static let elevationBottom_1_500 = ElevationCompositeRawToken(x: 0, y: 1, blur: 2, color: ColorRawTokens.colorTransparentBlack500) - public static let elevationBottom_1_600 = ElevationCompositeRawToken(x: 0, y: 1, blur: 2, color: ColorRawTokens.colorTransparentBlack600) - public static let elevationBottom_2_100 = ElevationCompositeRawToken(x: 0, y: 2, blur: 3, color: ColorRawTokens.colorTransparentBlack100) - public static let elevationBottom_2_200 = ElevationCompositeRawToken(x: 0, y: 2, blur: 3, color: ColorRawTokens.colorTransparentBlack200) - public static let elevationBottom_2_300 = ElevationCompositeRawToken(x: 0, y: 2, blur: 3, color: ColorRawTokens.colorTransparentBlack300) - public static let elevationBottom_2_400 = ElevationCompositeRawToken(x: 0, y: 2, blur: 3, color: ColorRawTokens.colorTransparentBlack400) - public static let elevationBottom_2_500 = ElevationCompositeRawToken(x: 0, y: 2, blur: 3, color: ColorRawTokens.colorTransparentBlack500) - public static let elevationBottom_2_600 = ElevationCompositeRawToken(x: 0, y: 2, blur: 3, color: ColorRawTokens.colorTransparentBlack600) - public static let elevationBottom_3_100 = ElevationCompositeRawToken(x: 0, y: 4, blur: 4, color: ColorRawTokens.colorTransparentBlack100) - public static let elevationBottom_3_200 = ElevationCompositeRawToken(x: 0, y: 4, blur: 4, color: ColorRawTokens.colorTransparentBlack200) - public static let elevationBottom_3_300 = ElevationCompositeRawToken(x: 0, y: 4, blur: 4, color: ColorRawTokens.colorTransparentBlack300) - public static let elevationBottom_3_400 = ElevationCompositeRawToken(x: 0, y: 4, blur: 4, color: ColorRawTokens.colorTransparentBlack400) - public static let elevationBottom_3_500 = ElevationCompositeRawToken(x: 0, y: 4, blur: 4, color: ColorRawTokens.colorTransparentBlack500) - public static let elevationBottom_3_600 = ElevationCompositeRawToken(x: 0, y: 4, blur: 4, color: ColorRawTokens.colorTransparentBlack600) - public static let elevationBottom_4_100 = ElevationCompositeRawToken(x: 0, y: 8, blur: 8, color: ColorRawTokens.colorTransparentBlack100) - public static let elevationBottom_4_200 = ElevationCompositeRawToken(x: 0, y: 8, blur: 8, color: ColorRawTokens.colorTransparentBlack200) - public static let elevationBottom_4_300 = ElevationCompositeRawToken(x: 0, y: 8, blur: 8, color: ColorRawTokens.colorTransparentBlack300) - public static let elevationBottom_4_400 = ElevationCompositeRawToken(x: 0, y: 8, blur: 8, color: ColorRawTokens.colorTransparentBlack400) - public static let elevationBottom_4_500 = ElevationCompositeRawToken(x: 0, y: 8, blur: 8, color: ColorRawTokens.colorTransparentBlack500) - public static let elevationBottom_4_600 = ElevationCompositeRawToken(x: 0, y: 8, blur: 8, color: ColorRawTokens.colorTransparentBlack600) - public static let elevationBottom_5_100 = ElevationCompositeRawToken(x: 0, y: 12, blur: 12, color: ColorRawTokens.colorTransparentBlack100) - public static let elevationBottom_5_200 = ElevationCompositeRawToken(x: 0, y: 12, blur: 12, color: ColorRawTokens.colorTransparentBlack200) - public static let elevationBottom_5_300 = ElevationCompositeRawToken(x: 0, y: 12, blur: 12, color: ColorRawTokens.colorTransparentBlack300) - public static let elevationBottom_5_400 = ElevationCompositeRawToken(x: 0, y: 12, blur: 12, color: ColorRawTokens.colorTransparentBlack400) - public static let elevationBottom_5_500 = ElevationCompositeRawToken(x: 0, y: 12, blur: 12, color: ColorRawTokens.colorTransparentBlack500) - public static let elevationBottom_5_600 = ElevationCompositeRawToken(x: 0, y: 12, blur: 12, color: ColorRawTokens.colorTransparentBlack600) - public static let elevationBottom_6_100 = ElevationCompositeRawToken(x: 0, y: 20, blur: 20, color: ColorRawTokens.colorTransparentBlack100) - public static let elevationBottom_6_200 = ElevationCompositeRawToken(x: 0, y: 20, blur: 20, color: ColorRawTokens.colorTransparentBlack200) - public static let elevationBottom_6_300 = ElevationCompositeRawToken(x: 0, y: 20, blur: 20, color: ColorRawTokens.colorTransparentBlack300) - public static let elevationBottom_6_400 = ElevationCompositeRawToken(x: 0, y: 20, blur: 20, color: ColorRawTokens.colorTransparentBlack400) - public static let elevationBottom_6_500 = ElevationCompositeRawToken(x: 0, y: 20, blur: 20, color: ColorRawTokens.colorTransparentBlack500) - public static let elevationBottom_6_600 = ElevationCompositeRawToken(x: 0, y: 20, blur: 20, color: ColorRawTokens.colorTransparentBlack600) } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Composites.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Composites.swift new file mode 100644 index 000000000..4dec4b57f --- /dev/null +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Composites.swift @@ -0,0 +1,65 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +// เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† +// [File to generate with the tokenator] + +/// Extracted in a separated file because the the *Figma* JSON to Swift parser is not abale to process such composite tokens, and the *Figma* tool is not able to. +/// +/// **Beware, may result in desynchronization between generated raw tokens values and theses composite raw tokens** +extension TypographyRawTokens { + + // MARK: Primitive token - Typography - Composite + + public static let typeRegular150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing150) + + public static let typeRegular175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing175) + + public static let typeRegular200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing200) + + public static let typeRegular250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight400, letterSpacing: fontLetterSpacing250) + + public static let typeBold150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing150) + + public static let typeBold175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing175) + + public static let typeBold200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing200) + + public static let typeBold250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight700, letterSpacing: fontLetterSpacing250) + + public static let typeBold300 = TypographyCompositeRawToken(size: fontSize300, lineHeight: fontLineHeight450, weight: fontWeight700, letterSpacing: fontLetterSpacing300) + + public static let typeBold350 = TypographyCompositeRawToken(size: fontSize350, lineHeight: fontLineHeight550, weight: fontWeight700, letterSpacing: fontLetterSpacing350) + + public static let typeBold450 = TypographyCompositeRawToken(size: fontSize450, lineHeight: fontLineHeight550, weight: fontWeight700, letterSpacing: fontLetterSpacing450) + + public static let typeBold550 = TypographyCompositeRawToken(size: fontSize550, lineHeight: fontLineHeight650, weight: fontWeight700, letterSpacing: fontLetterSpacing550) + + public static let typeBold650 = TypographyCompositeRawToken(size: fontSize650, lineHeight: fontLineHeight750, weight: fontWeight700, letterSpacing: fontLetterSpacing650) + + public static let typeBold750 = TypographyCompositeRawToken(size: fontSize750, lineHeight: fontLineHeight850, weight: fontWeight700, letterSpacing: fontLetterSpacing750) + + public static let typeBold850 = TypographyCompositeRawToken(size: fontSize850, lineHeight: fontLineHeight950, weight: fontWeight700, letterSpacing: fontLetterSpacing850) + + public static let typeBold950 = TypographyCompositeRawToken(size: fontSize950, lineHeight: fontLineHeight1050, weight: fontWeight700, letterSpacing: fontLetterSpacing950) + + public static let typeBold1050 = TypographyCompositeRawToken(size: fontSize1050, lineHeight: fontLineHeight1150, weight: fontWeight700, letterSpacing: fontLetterSpacing1050) + + public static let typeBold1150 = TypographyCompositeRawToken(size: fontSize1150, lineHeight: fontLineHeight1250, weight: fontWeight700, letterSpacing: fontLetterSpacing1150) + + public static let typeBold1250 = TypographyCompositeRawToken(size: fontSize1250, lineHeight: fontLineHeight1350, weight: fontWeight700, letterSpacing: fontLetterSpacing1250) + + public static let typeBold1450 = TypographyCompositeRawToken(size: fontSize1450, lineHeight: fontLineHeight1450, weight: fontWeight700, letterSpacing: fontLetterSpacing1450) + + public static let typeBold1850 = TypographyCompositeRawToken(size: fontSize1850, lineHeight: fontLineHeight1850, weight: fontWeight700, letterSpacing: fontLetterSpacing1850) +} diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift index 13b26b1ab..07df169a3 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift @@ -107,28 +107,4 @@ extension TypographyRawTokens { public static let fontWeight600: TypographyFontWeightRawToken = "semibold" public static let fontWeight700: TypographyFontWeightRawToken = "bold" public static let fontWeight900: TypographyFontWeightRawToken = "heavy" - - // MARK: Primitive token - Typography - Composite - - public static let typeRegular150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing150) - public static let typeRegular175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing175) - public static let typeRegular200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing200) - public static let typeRegular250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight400, letterSpacing: fontLetterSpacing250) - public static let typeBold150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing150) - public static let typeBold175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing175) - public static let typeBold200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing200) - public static let typeBold250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight700, letterSpacing: fontLetterSpacing250) - public static let typeBold300 = TypographyCompositeRawToken(size: fontSize300, lineHeight: fontLineHeight450, weight: fontWeight700, letterSpacing: fontLetterSpacing300) - public static let typeBold350 = TypographyCompositeRawToken(size: fontSize350, lineHeight: fontLineHeight550, weight: fontWeight700, letterSpacing: fontLetterSpacing350) - public static let typeBold450 = TypographyCompositeRawToken(size: fontSize450, lineHeight: fontLineHeight550, weight: fontWeight700, letterSpacing: fontLetterSpacing450) - public static let typeBold550 = TypographyCompositeRawToken(size: fontSize550, lineHeight: fontLineHeight650, weight: fontWeight700, letterSpacing: fontLetterSpacing550) - public static let typeBold650 = TypographyCompositeRawToken(size: fontSize650, lineHeight: fontLineHeight750, weight: fontWeight700, letterSpacing: fontLetterSpacing650) - public static let typeBold750 = TypographyCompositeRawToken(size: fontSize750, lineHeight: fontLineHeight850, weight: fontWeight700, letterSpacing: fontLetterSpacing750) - public static let typeBold850 = TypographyCompositeRawToken(size: fontSize850, lineHeight: fontLineHeight950, weight: fontWeight700, letterSpacing: fontLetterSpacing850) - public static let typeBold950 = TypographyCompositeRawToken(size: fontSize950, lineHeight: fontLineHeight1050, weight: fontWeight700, letterSpacing: fontLetterSpacing950) - public static let typeBold1050 = TypographyCompositeRawToken(size: fontSize1050, lineHeight: fontLineHeight1150, weight: fontWeight700, letterSpacing: fontLetterSpacing1050) - public static let typeBold1150 = TypographyCompositeRawToken(size: fontSize1150, lineHeight: fontLineHeight1250, weight: fontWeight700, letterSpacing: fontLetterSpacing1150) - public static let typeBold1250 = TypographyCompositeRawToken(size: fontSize1250, lineHeight: fontLineHeight1350, weight: fontWeight700, letterSpacing: fontLetterSpacing1250) - public static let typeBold1450 = TypographyCompositeRawToken(size: fontSize1450, lineHeight: fontLineHeight1450, weight: fontWeight700, letterSpacing: fontLetterSpacing1450) - public static let typeBold1850 = TypographyCompositeRawToken(size: fontSize1850, lineHeight: fontLineHeight1850, weight: fontWeight700, letterSpacing: fontLetterSpacing1850) } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md b/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md index 60a7dd009..60c1b3f22 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md +++ b/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md @@ -50,7 +50,7 @@ The *TypeAliases* folder contains all the *typealias* values used for the raw to Indeed these aliases are here to bring clarity and meanings in the library, and also to help users (i.e. developers) to know what kind of objects they handle with the same vocabulary as the one used in *Figma*, and in general, in the whole design system. They can be seen as a ligh level of abstraction with meanings, without having to define real types with `struct` or `class`. The *Values* folder is maybe the hotter one. -In fact all the raw tokens values are defined there, and if a JSON to Swift parser generate files, these files must be stored there. It contains only pure raw tokens Swift values, without any type aliases definitions or objects declarations. +In fact all the raw tokens values are defined there, and if a JSON to Swift parser generate files, these files must be stored there. It contains only pure raw tokens Swift values, without any type aliases definitions or objects declarations. Generated values are place din _+Values_ files, and composite raw tokens are in _+Composites_. In a nutshell, place the generated values somewhere, and the types and objects elsewhere. @@ -65,11 +65,14 @@ If you need to define Swift `typealias`, update the suitable file in the *TypeAl Please, respect the nomenclature of the files, e.g. for a new family "Awesome raw" tokens: - declaration of raw tokens family must be `AwesomeRawTokens.swift` -- values must be in `AwesomeRawTokens+Values.swift` +- generated values must be in `AwesomeRawTokens+Values.swift` +- composite tokens must be in `AwesomeRawTokens+Composites.swift` - type aliases must be in `AwesomeRawTokens+Aliases.swift` -- composites objects must be in `AwesomeRawTokens+Composites.swift` +- composites objects must be in `AwesomeCompositeRawTokens.swift` -*Composites* here are notions from *Figma* and are here to pack several raw tokens together to expose a plain, useful and usable object. +*Composites* here are notions from the *Figjam*, a bit, but *Figma* is not able to manage such gorup of raw tokens. This it cannot output composite raw tokens in the JSON for the parser. +As a consequence the composites are defined in a folder, and their values in the *Values* folder in dedicated files. +It may imply some synchornization issues between the raw tokens and the composite tokens using them, but we don't have any solution yet. Then, update the unit tests. We do not test the raw tokens values as they are, because these values will be generated and keeping up to date the unit tests may be time wasting. But we can however test the relationships between tokens, for exemple for colors if they go lighter and lighter, or for dimensions if they go smaller and smaller. If some raw tokens like font weights strongly rely on the values, we still test these values. diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/ColorSemanticTokens+Composites.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleColorTokens.swift similarity index 77% rename from OUDS/Core/Tokens/SemanticTokens/Sources/Composites/ColorSemanticTokens+Composites.swift rename to OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleColorTokens.swift index 483baa772..5f049bf46 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/ColorSemanticTokens+Composites.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleColorTokens.swift @@ -15,8 +15,10 @@ import Foundation import OUDSTokensRaw import OUDSFoundations -/// Composite semantic tokens which will wrap a combination of `ColorRawToken` depending to color scheme -public final class ColorCompositeSemanticToken: NSObject { +/// Kind of semantic tokens which will wrap a combination of `ColorRawToken` depending to color scheme. +/// Kind of composite token with multiple values, but not named "composite" because this word is already used in the design system. +/// Allows to gather the multiple-value tokens from Figma inside one object. +public final class MultipleColorTokens: NSObject { /// For **light** mode scheme public let light: ColorRawToken @@ -36,7 +38,7 @@ public final class ColorCompositeSemanticToken: NSObject { /// - Parameter value: The `ColorRawToken` to apply wether the device is in *light* and *dark* mode public convenience init?(_ value: ColorRawToken?) { guard let value = value else { - OUDSLogger.error("Tried to define a ColorCompositeSemanticToken with a nil unique value!") + OUDSLogger.error("Tried to define a MultipleColorTokens with a nil unique value!") return nil } self.init(value) @@ -57,17 +59,17 @@ public final class ColorCompositeSemanticToken: NSObject { /// - dark: The `ColorRawToken` to apply if device in *dark* mode public convenience init?(light: ColorRawToken?, dark: ColorRawToken?) { guard let light = light, let dark = dark else { - OUDSLogger.error("Tried to define a ColorCompositeSemanticToken with at least one nil value! (light = '\(light ?? "nil")', dark = '\(dark ?? "nil")')") + OUDSLogger.error("Tried to define a MultipleColorTokens with at least one nil value! (light = '\(light ?? "nil")', dark = '\(dark ?? "nil")')") return nil } self.init(light: light, dark: dark) } /// Returns `true` if `self` and `object` has the same `light` and `dark` values and with `object` - /// as a `ColorCompositeSemanticToken`. Otherwise returns `false`. + /// as a `MultipleColorRawToken`. Otherwise returns `false`. /// `isEqual` override is preferred for `NSObject`. public override func isEqual(_ object: Any?) -> Bool { - guard let other = object as? ColorCompositeSemanticToken else { return false } + guard let other = object as? MultipleColorTokens else { return false } return self.light == other.light && self.dark == other.dark } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleElevationTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleElevationTokens.swift new file mode 100644 index 000000000..4a4d88f6f --- /dev/null +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleElevationTokens.swift @@ -0,0 +1,52 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import Foundation +import OUDSTokensRaw +import OUDSFoundations + +/// Semantic tokens which will wrap a combination of `ElevationCompositeRawToken` depending to color scheme. +/// Kind of composite token with multiple values, but not named "composite" because this word is already used in the design system. +/// Allows to gather the multiple-value tokens from Figma inside one object. +public final class MultipleElevationTokens: NSObject { + + /// For **light** mode scheme + public let light: ElevationCompositeRawToken + + /// For **dark** mode scheme + public let dark: ElevationCompositeRawToken + + /// Initializes a new elevation composite raw token with the same value for light and dark modes + /// - Parameter value: The `ElevationCompositeRawToken` to apply wether the device is in *light* and *dark* mode + public init(_ value: ElevationCompositeRawToken) { + self.light = value + self.dark = value + } + + /// Initializes a new elevation composite raw token with two values + /// - Parameters: + /// - light: The `ElevationCompositeRawToken` to apply if device in *light* mode + /// - dark: The `ElevationCompositeRawToken` to apply if device in *dark* mode + public init(light: ElevationCompositeRawToken, dark: ElevationCompositeRawToken) { + self.light = light + self.dark = dark + } + + /// Returns `true` if `self` and `object` has the same `light` and `dark` values and with `object` + /// as a `MultipleElevationTokens`. Otherwise returns `false`. + /// `isEqual` override is preferred for `NSObject`. + public override func isEqual(_ object: Any?) -> Bool { + guard let other = object as? MultipleElevationTokens else { return false } + return self.light == other.light && self.dark == other.dark + } +} diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SizingSemanticTokens+Composites.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleSizingTokens.swift similarity index 72% rename from OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SizingSemanticTokens+Composites.swift rename to OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleSizingTokens.swift index e8e05cc7f..de8f1015d 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SizingSemanticTokens+Composites.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleSizingTokens.swift @@ -13,8 +13,10 @@ import Foundation -/// Composite semantic tokens which will wrap a combination of `SizingSemanticToken` depending to viewports / size classes. -public final class SizingCompositeSemanticToken: NSObject { +/// Kind of semantic tokens which will wrap a combination of `SizingSemanticToken` depending to viewports / size classes. +/// Kind of composite token with multiple values, but not named "composite" because this word is already used in the design system. +/// Allows to gather the multiple-value tokens from Figma inside one object. +public final class MultipleSizingTokens: NSObject { /// For **extra-compact** and **compact** viewports public let compact: SizingSemanticToken @@ -32,10 +34,10 @@ public final class SizingCompositeSemanticToken: NSObject { } /// Returns `true` if `self` and `object` has the same `compact` and `regular` values and with `object` - /// as a `SizingCompositeSemanticToken`. Otherwise returns `false`. + /// as a `MultipleSizingTokens`. Otherwise returns `false`. /// `isEqual` override is preferred for `NSObject`. public override func isEqual(_ object: Any?) -> Bool { - guard let other = object as? SizingCompositeSemanticToken else { return false } + guard let other = object as? MultipleSizingTokens else { return false } return self.compact == other.compact && self.regular == other.regular } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SpacingSemanticTokens+Composites.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleSpacingTokens.swift similarity index 72% rename from OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SpacingSemanticTokens+Composites.swift rename to OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleSpacingTokens.swift index 0696f5711..81588dcf5 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/SpacingSemanticTokens+Composites.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleSpacingTokens.swift @@ -14,8 +14,10 @@ import Foundation import OUDSTokensRaw -/// Composite semantic tokens which will wrap a combination of `DimensionRawToken` depending to viewports. -public final class SpacingCompositeSemanticToken: NSObject { +/// Kind of semantic tokens which will wrap a combination of `DimensionRawToken` depending to size classes. +/// Kind of composite token with multiple values, but not named "composite" because this word is already used in the design system. +/// Allows to gather the multiple-value tokens from Figma inside one object. +public final class MultipleSpacingTokens: NSObject { /// For **extra-compact** and **compact** viewports public let compact: DimensionRawToken @@ -33,10 +35,10 @@ public final class SpacingCompositeSemanticToken: NSObject { } /// Returns `true` if `self` and `object` has the same `compact` and `regular` values and with `object` - /// as a `SpacingCompositeSemanticToken`. Otherwise returns `false`. + /// as a `MultipleSpacingTokens`. Otherwise returns `false`. /// `isEqual` override is preferred for `NSObject`. public override func isEqual(_ object: Any?) -> Bool { - guard let other = object as? SpacingCompositeSemanticToken else { return false } + guard let other = object as? MultipleSpacingTokens else { return false } return self.compact == other.compact && self.regular == other.regular } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/TypographySemanticTokens+Composites.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleTypographyTokens.swift similarity index 72% rename from OUDS/Core/Tokens/SemanticTokens/Sources/Composites/TypographySemanticTokens+Composites.swift rename to OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleTypographyTokens.swift index d0373a422..d9f259d54 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Composites/TypographySemanticTokens+Composites.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleTypographyTokens.swift @@ -14,8 +14,10 @@ import Foundation import OUDSTokensRaw -/// Composite semantic tokens which will wrap a combination of `TypographyCompositeRawToken` depending to viewports. -public final class TypographyCompositeSemanticToken: NSObject { +/// Kind of semantic tokens which will wrap a combination of `TypographyCompositeRawToken` depending to size classes. +/// Kind of composite token with multiple values, but not named "composite" because this word is already used in the design system. +/// Allows to gather the multiple-value tokens from Figma inside one object. +public final class MultipleTypographyTokens: NSObject { /// For **extra-compact** and **compact** viewports public let compact: TypographyCompositeRawToken @@ -33,10 +35,10 @@ public final class TypographyCompositeSemanticToken: NSObject { } /// Returns `true` if `self` and `object` has the same `compact` and `regular` values and with `object` - /// as a `TypographyCompositeSemanticToken`. Otherwise returns `false`. + /// as a `MultipleTypographyTokens`. Otherwise returns `false`. /// `isEqual` override is preferred for `NSObject`. public override func isEqual(_ object: Any?) -> Bool { - guard let object = object as? TypographyCompositeSemanticToken else { return false } + guard let object = object as? MultipleTypographyTokens else { return false } return self.compact == object.compact && self.regular == object.regular } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ColorSemanticTokens+Aliases.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ColorSemanticTokens+Aliases.swift index beadc2e81..21f79d002 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ColorSemanticTokens+Aliases.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ColorSemanticTokens+Aliases.swift @@ -14,7 +14,7 @@ import OUDSTokensRaw /// Basically a semantic color token, which can be either a functional or a decorative token, is a `String`, to keep grammar clean and clear with design system grammar. -public typealias ColorSemanticToken = ColorCompositeSemanticToken +public typealias ColorSemanticToken = MultipleColorTokens /// The global design system tool defines aliases of semantic colors token as semantic color tokens, to keep grammar clean and clear with design system grammar. public typealias ColorAliasSemanticToken = ColorRawToken diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ElevationSemanticTokens+Aliases.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ElevationSemanticTokens+Aliases.swift index ed6685a04..9b6130329 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ElevationSemanticTokens+Aliases.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/ElevationSemanticTokens+Aliases.swift @@ -23,7 +23,7 @@ public typealias ElevationYSemanticToken = ElevationRawToken public typealias ElevationBlurSemanticToken = ElevationRawToken /// Basically an elevation semantic token for shadow colors is a raw token for colors, to keep grammar clean and clear with design system grammar. -public typealias ElevationColorSemanticToken = ColorRawToken +public typealias ElevationColorSemanticToken = MultipleColorTokens /// Basically an elevation semantic token for box shadow is a raw token for box shadow, with the same final type, to keep grammar clean and clear with design system grammar. -public typealias ElevationCompositeSemanticToken = ElevationCompositeRawToken +public typealias ElevationCompositeSemanticToken = MultipleElevationTokens diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift index a54967bb7..4f2e36065 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift @@ -124,225 +124,225 @@ public protocol ColorSemanticTokens { // MARK: Semantic token - Colors - Background - Default - Primary - var colorBackgroundDefaultPrimary: ColorCompositeSemanticToken? { get } + var colorBackgroundDefaultPrimary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Default - Secondary - var colorBackgroundDefaultSecondary: ColorCompositeSemanticToken? { get } + var colorBackgroundDefaultSecondary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Default - Tertiary - var colorBackgroundDefaultTertiary: ColorCompositeSemanticToken? { get } + var colorBackgroundDefaultTertiary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Emphasized - Primary - var colorBackgroundEmphasizedPrimary: ColorCompositeSemanticToken? { get } + var colorBackgroundEmphasizedPrimary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Emphasized - Secondary - var colorBackgroundEmphasizedSecondary: ColorCompositeSemanticToken? { get } + var colorBackgroundEmphasizedSecondary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Brand - Primary - var colorBackgroundBrandPrimary: ColorCompositeSemanticToken? { get } + var colorBackgroundBrandPrimary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Brand - Secondary - var colorBackgroundBrandSecondary: ColorCompositeSemanticToken? { get } + var colorBackgroundBrandSecondary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Brand - Tertiary - var colorBackgroundBrandTertiary: ColorCompositeSemanticToken? { get } + var colorBackgroundBrandTertiary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Attractive - Muted - var colorBackgroundStatusAttractiveMuted: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusAttractiveMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized - var colorBackgroundStatusAttractiveEmphasized: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusAttractiveEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Warning - Muted - var colorBackgroundStatusWarningMuted: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusWarningMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized - var colorBackgroundStatusWarningEmphasized: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusWarningEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Negative - Muted - var colorBackgroundStatusNegativeMuted: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusNegativeMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized - var colorBackgroundStatusNegativeEmphasized: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusNegativeEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Positive - Muted - var colorBackgroundStatusPositiveMuted: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusPositiveMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized - var colorBackgroundStatusPositiveEmphasized: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusPositiveEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Information - Muted - var colorBackgroundStatusInformationMuted: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusInformationMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Background - Status - Information - Emphasized - var colorBackgroundStatusInformationEmphasized: ColorCompositeSemanticToken? { get } + var colorBackgroundStatusInformationEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Default - var colorContentDefault: ColorCompositeSemanticToken? { get } + var colorContentDefault: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Default - On background emphasized - var colorContentDefaultOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } + var colorContentDefaultOnBackgroundEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Muted - var colorContentMuted: ColorCompositeSemanticToken? { get } + var colorContentMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Muted - On background emphasized - var colorContentMutedOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } + var colorContentMutedOnBackgroundEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Brand - Primary - var colorContentBrandPrimary: ColorCompositeSemanticToken? { get } + var colorContentBrandPrimary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized - var colorContentBrandPrimaryOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } + var colorContentBrandPrimaryOnBackgroundEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Brand - Secondary - var colorContentBrandSecondary: ColorCompositeSemanticToken? { get } + var colorContentBrandSecondary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Brand - Tertiary - var colorContentBrandTertiary: ColorCompositeSemanticToken? { get } + var colorContentBrandTertiary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Status - Attractive - var colorContentStatusAttractive: ColorCompositeSemanticToken? { get } + var colorContentStatusAttractive: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Status - Negative - var colorContentStatusNegative: ColorCompositeSemanticToken? { get } + var colorContentStatusNegative: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Status - Positive - var colorContentStatusPositive: ColorCompositeSemanticToken? { get } + var colorContentStatusPositive: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Content - Status - Information - var colorContentStatusInformation: ColorCompositeSemanticToken? { get } + var colorContentStatusInformation: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Default - var colorBorderDefault: ColorCompositeSemanticToken? { get } + var colorBorderDefault: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Default - On background emphasized - var colorBorderDefaultOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } + var colorBorderDefaultOnBackgroundEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Emphasized - var colorBorderEmphasized: ColorCompositeSemanticToken? { get } + var colorBorderEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized - var colorBorderEmphasizedOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } + var colorBorderEmphasizedOnBackgroundEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Brand - Primary - var colorBorderBrandPrimary: ColorCompositeSemanticToken? { get } + var colorBorderBrandPrimary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized - var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorCompositeSemanticToken? { get } + var colorBorderBrandPrimaryOnBackgroundEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Brand - Secondary - var colorBorderBrandSecondary: ColorCompositeSemanticToken? { get } + var colorBorderBrandSecondary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Brand - Tertiary - var colorBorderBrandTertiary: ColorCompositeSemanticToken? { get } + var colorBorderBrandTertiary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Status - Attractive - var colorBorderBrandStatusAttractive: ColorCompositeSemanticToken? { get } + var colorBorderBrandStatusAttractive: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Status - Warning - var colorBorderBrandStatusWarning: ColorCompositeSemanticToken? { get } + var colorBorderBrandStatusWarning: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Status - Negative - var colorBorderBrandStatusNegative: ColorCompositeSemanticToken? { get } + var colorBorderBrandStatusNegative: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Status - Positive - var colorBorderBrandStatusPositive: ColorCompositeSemanticToken? { get } + var colorBorderBrandStatusPositive: MultipleColorTokens? { get } // MARK: Semantic token - Colors - Border - Status - Information - var colorBorderBrandStatusInformation: ColorCompositeSemanticToken? { get } + var colorBorderBrandStatusInformation: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Primary - var colorOnBackgroundPrimary: ColorCompositeSemanticToken? { get } + var colorOnBackgroundPrimary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Secondary - var colorOnBackgroundSecondary: ColorCompositeSemanticToken? { get } + var colorOnBackgroundSecondary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Tertiary - var colorOnBackgroundTertiary: ColorCompositeSemanticToken? { get } + var colorOnBackgroundTertiary: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Attrative - Muted - var colorOnBackgroundStatusAttractiveMuted: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusAttractiveMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Attrative - Emphasized - var colorOnBackgroundStatusAttractiveEmphasized: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusAttractiveEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Warning - Muted - var colorOnBackgroundStatusWarningMuted: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusWarningMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized - var colorOnBackgroundStatusWarningEmphasized: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusWarningEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Negative - Muted - var colorOnBackgroundStatusNegativeMuted: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusNegativeMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized - var colorOnBackgroundStatusNegativeEmphasized: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusNegativeEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Positive - Muted - var colorOnBackgroundStatusPositiveMuted: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusPositiveMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized - var colorOnBackgroundStatusPositiveEmphasized: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusPositiveEmphasized: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Information - Muted - var colorOnBackgroundStatusInformationMuted: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusInformationMuted: MultipleColorTokens? { get } // MARK: Semantic token - Colors - On background - Status - Information - Emphasized - var colorOnBackgroundStatusInformationEmphasized: ColorCompositeSemanticToken? { get } + var colorOnBackgroundStatusInformationEmphasized: MultipleColorTokens? { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ElevationSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ElevationSemanticTokens.swift index 74986bf45..45f5a551d 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ElevationSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ElevationSemanticTokens.swift @@ -59,74 +59,57 @@ public protocol ElevationSemanticTokens { // MARK: Semantic token - Elevation - Color - None - var elevationColorNoneLight: ElevationColorSemanticToken { get } - var elevationColorNoneDark: ElevationColorSemanticToken { get } + var elevationColorNone: ElevationColorSemanticToken { get } // MARK: Semantic token - Elevation - Color - Raised - var elevationColorRaisedLight: ElevationColorSemanticToken { get } - var elevationColorRaisedDark: ElevationColorSemanticToken { get } + var elevationColorRaised: ElevationColorSemanticToken { get } // MARK: Semantic token - Elevation - Color - Drag - var elevationColorDragLight: ElevationColorSemanticToken { get } - var elevationColorDragDark: ElevationColorSemanticToken { get } + var elevationColorDrag: ElevationColorSemanticToken { get } // MARK: Semantic token - Elevation - Color - Overlay - Default - var elevationColorOverlayDefaultLight: ElevationColorSemanticToken { get } - var elevationColorOverlayDefaultDark: ElevationColorSemanticToken { get } + var elevationColorOverlayDefault: ElevationColorSemanticToken { get } // MARK: Semantic token - Elevation - Color - Overlay - Emphasized - var elevationColorOverlayEmphasizedLight: ElevationColorSemanticToken { get } - var elevationColorOverlayEmphasizedDark: ElevationColorSemanticToken { get } + var elevationColorOverlayEmphasized: ElevationColorSemanticToken { get } // MARK: Semantic token - Elevation - Color - Sticky - Default - var elevationColorStickyDefaultLight: ElevationColorSemanticToken { get } - var elevationColorStickyDefaultDark: ElevationColorSemanticToken { get } + var elevationColorStickyDefault: ElevationColorSemanticToken { get } // MARK: Semantic token - Elevation - Color - Sticky - Emphasized - var elevationColorStickyEmphasizedLight: ElevationColorSemanticToken { get } - var elevationColorStickyEmphasizedDark: ElevationColorSemanticToken { get } + var elevationColorStickyEmphasized: ElevationColorSemanticToken { get } // MARK: Semantic token - Elevation - Color - Sticky - Navigation scrolled - var elevationColorStickyNavigationScrolledLight: ElevationColorSemanticToken { get } - var elevationColorStickyNavigationScrolledDark: ElevationColorSemanticToken { get } + var elevationColorStickyNavigationScrolled: ElevationColorSemanticToken { get } // MARK: Semantic token - Elevation - Color - Focus - var elevationColorFocusLight: ElevationColorSemanticToken { get } - var elevationColorFocusDark: ElevationColorSemanticToken { get } + var elevationColorFocus: ElevationColorSemanticToken { get } - // MARK: Semantic token - Elevation - Bow shadow + // MARK: Semantic token - Elevation - Box shadow - // TODO: Missing elevationBoxShadowNoneLight semantic token + var elevationNone: ElevationCompositeSemanticToken { get } - var elevationRaisedLight: ElevationCompositeSemanticToken { get } - var elevationRaisedDark: ElevationCompositeSemanticToken { get } + var elevationRaised: ElevationCompositeSemanticToken { get } - var elevationDragLight: ElevationCompositeSemanticToken { get } - var elevationDragDark: ElevationCompositeSemanticToken { get } + var elevationDrag: ElevationCompositeSemanticToken { get } - var elevationOverlayDefaultLight: ElevationCompositeSemanticToken { get } - var elevationOverlayDefaultDark: ElevationCompositeSemanticToken { get } + var elevationOverlayDefault: ElevationCompositeSemanticToken { get } - var elevationOverlayEmphasizedLight: ElevationCompositeSemanticToken { get } - var elevationOverlayEmphasizedDark: ElevationCompositeSemanticToken { get } + var elevationOverlayEmphasized: ElevationCompositeSemanticToken { get } - var elevationStickyDefaultLight: ElevationCompositeSemanticToken { get } - var elevationStickyDefaultDark: ElevationCompositeSemanticToken { get } + var elevationStickyDefault: ElevationCompositeSemanticToken { get } - var elevationStickyEmphasizedLight: ElevationCompositeSemanticToken { get } - var elevationStickyEmphasizedDark: ElevationCompositeSemanticToken { get } + var elevationStickyEmphasized: ElevationCompositeSemanticToken { get } - var elevationStickyNavigationScrolledLight: ElevationCompositeSemanticToken { get } - var elevationStickyNavigationScrolledDark: ElevationCompositeSemanticToken { get } + var elevationStickyNavigationScrolled: ElevationCompositeSemanticToken { get } - var elevationFocusLight: ElevationCompositeSemanticToken { get } - var elevationFocusDark: ElevationCompositeSemanticToken { get } + var elevationFocus: ElevationCompositeSemanticToken { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift index b6003fae4..27e807f81 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift @@ -32,33 +32,33 @@ public protocol SizingSemanticTokens { // MARK: - Semantic token - Sizing - Icon with typography - var sizeIconWithTypeHeadingSmallShort: SizingCompositeSemanticToken { get } - var sizeIconWithTypeHeadingSmallMedium: SizingCompositeSemanticToken { get } - var sizeIconWithTypeHeadingSmallTall: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingSmallShort: MultipleSizingTokens { get } + var sizeIconWithTypeHeadingSmallMedium: MultipleSizingTokens { get } + var sizeIconWithTypeHeadingSmallTall: MultipleSizingTokens { get } - var sizeIconWithTypeHeadingMediumShort: SizingCompositeSemanticToken { get } - var sizeIconWithTypeHeadingMediumMedium: SizingCompositeSemanticToken { get } - var sizeIconWithTypeHeadingMediumTall: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingMediumShort: MultipleSizingTokens { get } + var sizeIconWithTypeHeadingMediumMedium: MultipleSizingTokens { get } + var sizeIconWithTypeHeadingMediumTall: MultipleSizingTokens { get } - var sizeIconWithTypeHeadingLargeShort: SizingCompositeSemanticToken { get } - var sizeIconWithTypeHeadingLargeMedium: SizingCompositeSemanticToken { get } - var sizeIconWithTypeHeadingLargeTall: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingLargeShort: MultipleSizingTokens { get } + var sizeIconWithTypeHeadingLargeMedium: MultipleSizingTokens { get } + var sizeIconWithTypeHeadingLargeTall: MultipleSizingTokens { get } - var sizeIconWithTypeHeadingXLargeShort: SizingCompositeSemanticToken { get } - var sizeIconWithTypeHeadingXLargeMedium: SizingCompositeSemanticToken { get } - var sizeIconWithTypeHeadingXLargeTall: SizingCompositeSemanticToken { get } + var sizeIconWithTypeHeadingXLargeShort: MultipleSizingTokens { get } + var sizeIconWithTypeHeadingXLargeMedium: MultipleSizingTokens { get } + var sizeIconWithTypeHeadingXLargeTall: MultipleSizingTokens { get } - var sizeIconWithTypeBodySmallShort: SizingCompositeSemanticToken { get } - var sizeIconWithTypeBodySmallMedium: SizingCompositeSemanticToken { get } - var sizeIconWithTypeBodySmallTall: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodySmallShort: MultipleSizingTokens { get } + var sizeIconWithTypeBodySmallMedium: MultipleSizingTokens { get } + var sizeIconWithTypeBodySmallTall: MultipleSizingTokens { get } - var sizeIconWithTypeBodyMediumShort: SizingCompositeSemanticToken { get } - var sizeIconWithTypeBodyMediumMedium: SizingCompositeSemanticToken { get } - var sizeIconWithTypeBodyMediumTall: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodyMediumShort: MultipleSizingTokens { get } + var sizeIconWithTypeBodyMediumMedium: MultipleSizingTokens { get } + var sizeIconWithTypeBodyMediumTall: MultipleSizingTokens { get } - var sizeIconWithTypeBodyLargeShort: SizingCompositeSemanticToken { get } - var sizeIconWithTypeBodyLargeMedium: SizingCompositeSemanticToken { get } - var sizeIconWithTypeBodyLargeTall: SizingCompositeSemanticToken { get } + var sizeIconWithTypeBodyLargeShort: MultipleSizingTokens { get } + var sizeIconWithTypeBodyLargeMedium: MultipleSizingTokens { get } + var sizeIconWithTypeBodyLargeTall: MultipleSizingTokens { get } var sizeIconWithTypeLabelSmallShort: SizingSemanticToken { get } var sizeIconWithTypeLabelSmallMedium: SizingSemanticToken { get } @@ -80,16 +80,16 @@ public protocol SizingSemanticTokens { // MARK: - Semantic token - Sizing - Max width typography - var sizeMaxWidthTypeDisplaySmall: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypeDisplayMedium: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypeDisplayLarge: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeDisplaySmall: MultipleSizingTokens { get } + var sizeMaxWidthTypeDisplayMedium: MultipleSizingTokens { get } + var sizeMaxWidthTypeDisplayLarge: MultipleSizingTokens { get } - var sizeMaxWidthTypeHeadingSmall: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypeHeadingMedium: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypeHeadingLarge: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypeHeadingXLarge: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeHeadingSmall: MultipleSizingTokens { get } + var sizeMaxWidthTypeHeadingMedium: MultipleSizingTokens { get } + var sizeMaxWidthTypeHeadingLarge: MultipleSizingTokens { get } + var sizeMaxWidthTypeHeadingXLarge: MultipleSizingTokens { get } - var sizeMaxWidthTypeBodySmall: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypeBodyMedium: SizingCompositeSemanticToken { get } - var sizeMaxWidthTypeBodyLarge: SizingCompositeSemanticToken { get } + var sizeMaxWidthTypeBodySmall: MultipleSizingTokens { get } + var sizeMaxWidthTypeBodyMedium: MultipleSizingTokens { get } + var sizeMaxWidthTypeBodyLarge: MultipleSizingTokens { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift index 2fa8d7fa5..32e00ca4c 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SpacingSemanticTokens.swift @@ -22,16 +22,16 @@ public protocol SpacingSemanticTokens { // MARK: Semantic token - Spacing - Scaled - var spaceScaledNone: SpacingCompositeSemanticToken { get } - var spaceScaledSmash: SpacingCompositeSemanticToken { get } - var spaceScaledShortest: SpacingCompositeSemanticToken { get } - var spaceScaledShorter: SpacingCompositeSemanticToken { get } - var spaceScaledShort: SpacingCompositeSemanticToken { get } - var spaceScaledMedium: SpacingCompositeSemanticToken { get } - var spaceScaledTall: SpacingCompositeSemanticToken { get } - var spaceScaledTaller: SpacingCompositeSemanticToken { get } - var spaceScaledTallest: SpacingCompositeSemanticToken { get } - var spaceScaledSpacious: SpacingCompositeSemanticToken { get } + var spaceScaledNone: MultipleSpacingTokens { get } + var spaceScaledSmash: MultipleSpacingTokens { get } + var spaceScaledShortest: MultipleSpacingTokens { get } + var spaceScaledShorter: MultipleSpacingTokens { get } + var spaceScaledShort: MultipleSpacingTokens { get } + var spaceScaledMedium: MultipleSpacingTokens { get } + var spaceScaledTall: MultipleSpacingTokens { get } + var spaceScaledTaller: MultipleSpacingTokens { get } + var spaceScaledTallest: MultipleSpacingTokens { get } + var spaceScaledSpacious: MultipleSpacingTokens { get } // MARK: Semantic token - Spacing - Fixed diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift index e4c045a56..f93993d49 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift @@ -121,39 +121,39 @@ public protocol TypographySemanticTokens { // MARK: - Semantic tokens - Typography - Composites - Display - var typeDisplayLarge: TypographyCompositeSemanticToken { get } - var typeDisplayMedium: TypographyCompositeSemanticToken { get } - var typeDisplaySmall: TypographyCompositeSemanticToken { get } + var typeDisplayLarge: MultipleTypographyTokens { get } + var typeDisplayMedium: MultipleTypographyTokens { get } + var typeDisplaySmall: MultipleTypographyTokens { get } // MARK: - Semantic tokens - Typography - Composites - Heading - var typeHeadingXLarge: TypographyCompositeSemanticToken { get } - var typeHeadingLarge: TypographyCompositeSemanticToken { get } - var typeHeadingMedium: TypographyCompositeSemanticToken { get } - var typeHeadingSmall: TypographyCompositeSemanticToken { get } + var typeHeadingXLarge: MultipleTypographyTokens { get } + var typeHeadingLarge: MultipleTypographyTokens { get } + var typeHeadingMedium: MultipleTypographyTokens { get } + var typeHeadingSmall: MultipleTypographyTokens { get } // MARK: - Semantic tokens - Typography - Composites - Body - var typeBodyDefaultLarge: TypographyCompositeSemanticToken { get } - var typeBodyDefaultMedium: TypographyCompositeSemanticToken { get } - var typeBodyDefaultSmall: TypographyCompositeSemanticToken { get } - var typeBodyStrongLarge: TypographyCompositeSemanticToken { get } - var typeBodyStrongMedium: TypographyCompositeSemanticToken { get } - var typeBodyStrongSmall: TypographyCompositeSemanticToken { get } + var typeBodyDefaultLarge: MultipleTypographyTokens { get } + var typeBodyDefaultMedium: MultipleTypographyTokens { get } + var typeBodyDefaultSmall: MultipleTypographyTokens { get } + var typeBodyStrongLarge: MultipleTypographyTokens { get } + var typeBodyStrongMedium: MultipleTypographyTokens { get } + var typeBodyStrongSmall: MultipleTypographyTokens { get } // MARK: - Semantic tokens - Typography - Composites - Label - var typeLabelDefaultXLarge: TypographyCompositeSemanticToken { get } - var typeLabelDefaultLarge: TypographyCompositeSemanticToken { get } - var typeLabelDefaultMedium: TypographyCompositeSemanticToken { get } - var typeLabelDefaultSmall: TypographyCompositeSemanticToken { get } - var typeLabelStrongXLarge: TypographyCompositeSemanticToken { get } - var typeLabelStrongLarge: TypographyCompositeSemanticToken { get } - var typeLabelStrongMedium: TypographyCompositeSemanticToken { get } - var typeLabelStrongSmall: TypographyCompositeSemanticToken { get } + var typeLabelDefaultXLarge: MultipleTypographyTokens { get } + var typeLabelDefaultLarge: MultipleTypographyTokens { get } + var typeLabelDefaultMedium: MultipleTypographyTokens { get } + var typeLabelDefaultSmall: MultipleTypographyTokens { get } + var typeLabelStrongXLarge: MultipleTypographyTokens { get } + var typeLabelStrongLarge: MultipleTypographyTokens { get } + var typeLabelStrongMedium: MultipleTypographyTokens { get } + var typeLabelStrongSmall: MultipleTypographyTokens { get } // MARK: - Semantic tokens - Typography - Composites - Code - var typeCodeMedium: TypographyCompositeSemanticToken { get } - var typeCodeSmall: TypographyCompositeSemanticToken { get } + var typeCodeMedium: MultipleTypographyTokens { get } + var typeCodeSmall: MultipleTypographyTokens { get } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md b/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md index 6bdb0f9c6..6c9a2c7e7 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md @@ -30,8 +30,9 @@ extension OUDSTheme: ColorSemanticTokens { ## Architecture -The *Composites* folder contains some _composite class_ defined to pack double values for dedicated needs, like size classes management (_regular_ or _compact_ device modes), and also for color schemes management (_light_ and _dark_ modes). -This *composites* are not the same as the ones defined in the *Figma* design systme, they are just utilities to handle tuple of values, without the syntaxe of tuples and with some helper functions. +The *Multiples* folder contains some _composite class_ defined to pack double values for dedicated needs, like size classes management (_regular_ or _compact_ device modes), and also for color schemes management (_light_ and _dark_ modes). +Such *composites* are not the same as the ones defined in the *Figma* design system, they are just utilities to handle tuple of values, without the syntaxe of tuples and with some helper functions. +We would like to define one class for all combinations of things depending to light and dark modes, and another for regular and compact modes. However, it implies to use _Swift generics_ and it is not compatible with Objective-C runtime (we use through `@objc` keyword). The *TypeAliases* folder contains all the *typealias* values used for the semantic tokens. Indeed these aliases are here to bring clarity and meanings in the library, and also to help users (i.e. developers) to know what kind of objects they handle with the same vocabulary as the one used in *Figma*, and in general, in the whole design system. They can be seen as a ligh level of abstraction with meanings, without having to define real types with `struct` or `class`. @@ -48,6 +49,7 @@ In a nutshell, declare the tokens somewhere in protocols, and define theme in th ### How to add semantic tokens First, you need to define which from family this semantic comes. We have today 9 families: *border*, *color*, *dimension*, *elevation*, *grid*, *opacity*, *sizing*, *spacing* and *typography*. + If your token is not from one of these groups, maybe you should redesign your token or create a new family. To do that, you will have to create a dedicated Swift `protocol`, with a useful name, and declare as a `var` the semantic token. If you already know the family, just update the matching files. If you need to define Swift `typealias`, update the suitable file in the *TypeAliases* folder. If you think users may handle your tokens with tuples, or pack of tokens, you can add your own *composite* object. @@ -55,7 +57,7 @@ If you need to define Swift `typealias`, update the suitable file in the *TypeAl Please, respect the nomenclature of the files, e.g. for a new family "Awesome semantic" tokens: - values must be in `AwesomeSemanticTokens.swift` - type aliases must be in `AwesomeSemanticTokens+Aliases.swift` -- composites objects must be in `AwesomeSemanticTokens+Composites.swift` +- mutiple objects must be in `MultipleAwesomeTokens.swift` Then, update the unit tests. For each semantic tokens we check if a subtheme can override the token, i.e. update the `MockTheme` by overring the property with a fake value, then compare it to the `OUDSTheme` containing a default value. If you have defined also composite objects, add unit tests to check if they do their job. @@ -66,7 +68,6 @@ But beware, if you change the name of the property or if you move it from a `pro If you update the value, keep also the CHANGELOG and/or RELEASE NOTE updated so as to let yout users know the variables have been changed. - ## Topics ### Group diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/ColorCompositeSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/ColorCompositeSemanticTokenTests.swift deleted file mode 100644 index 5f8eab068..000000000 --- a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/ColorCompositeSemanticTokenTests.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// Software Name: OUDS iOS -// SPDX-FileCopyrightText: Copyright (c) Orange SA -// SPDX-License-Identifier: MIT -// -// This software is distributed under the MIT license, -// the text of which is available at https://opensource.org/license/MIT/ -// or see the "LICENSE" file for more details. -// -// Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System -// - -import XCTest -import OUDSTokensRaw -import OUDSTokensSemantic - -/// To ensure the `ColorCompositeSemanticToken` is tested as a wrapper of semantic tokens for light and dark color schemes. -final class ColorCompositeSemanticTokenTests: XCTestCase { - - /// Tests if light and dark values are preserved when defined with two assigned non nil values - func testInitTwoNonNilValues() { - let light: ColorRawToken = ColorRawTokens.colorFunctionalMalachite300 - let dark: ColorRawToken = ColorRawTokens.colorFunctionalScarlet900 - let token = ColorCompositeSemanticToken(light: light, dark: dark) - - XCTAssertTrue(token.light == light) - XCTAssertTrue(token.dark == dark) - } - - /// Tests init of `ColorCompositeSemanticToken` with nil values in parameters - func testInitNilValues() { - let light: ColorRawToken = ColorRawTokens.colorFunctionalMalachite300 - let dark: ColorRawToken = ColorRawTokens.colorFunctionalScarlet900 - - XCTAssertNil(ColorCompositeSemanticToken(light: light, dark: nil)) - XCTAssertNil(ColorCompositeSemanticToken(light: nil, dark: dark)) - XCTAssertNil(ColorCompositeSemanticToken(light: nil, dark: nil)) - } - - /// Tests init of `ColorCompositeSemanticToken` with nil value in parameter - func testInitNilValue() { - XCTAssertNil(ColorCompositeSemanticToken(nil)) - } - - /// Tests comparisons between two `ColorCompositeSemanticToken` to ensure tokens are considered as equal - /// if an only if they have the same compact and regular values and have the same types. - func testIsEqual() { - let first = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalScarlet900) - let second = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalDarkGray80, dark: ColorRawTokens.colorFunctionalSun100) - let third = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalSun100) - let fourth = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalDarkGray80, dark: ColorRawTokens.colorFunctionalScarlet900) - let fifth = ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalScarlet900) - let sixth = SizingCompositeSemanticToken(compact: 12, regular: 12) - - XCTAssertTrue(first.isEqual(first)) - XCTAssertFalse(first.isEqual(second)) - XCTAssertFalse(first.isEqual(third)) - XCTAssertFalse(first.isEqual(fourth)) - XCTAssertTrue(first.isEqual(fifth)) - XCTAssertFalse(first.isEqual(sixth)) - } -} diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleColorSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleColorSemanticTokenTests.swift new file mode 100644 index 000000000..66d4aa80b --- /dev/null +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleColorSemanticTokenTests.swift @@ -0,0 +1,72 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import XCTest +import OUDSTokensRaw +import OUDSTokensSemantic + +/// To ensure the `MultipleColorRawToken` is tested as a wrapper of semantic tokens for light and dark color schemes. +final class MultipleColorRawTokenTests: XCTestCase { + + /// Tests if the unique value is applied for light and dark modes + func testInitWithOneValue() { + let unique: ColorRawToken = ColorRawTokens.colorFunctionalMalachite300 + let token = MultipleColorTokens(unique) + + XCTAssertTrue(token.light == unique) + XCTAssertTrue(token.dark == unique) + } + + /// Tests if light and dark values are preserved when defined with two assigned non nil values + func testInitTwoNonNilValues() { + let light: ColorRawToken = ColorRawTokens.colorFunctionalMalachite300 + let dark: ColorRawToken = ColorRawTokens.colorFunctionalScarlet900 + let token = MultipleColorTokens(light: light, dark: dark) + + XCTAssertTrue(token.light == light) + XCTAssertTrue(token.dark == dark) + } + + /// Tests init of `MultipleColorRawToken` with nil values in parameters + func testInitNilValues() { + let light: ColorRawToken = ColorRawTokens.colorFunctionalMalachite300 + let dark: ColorRawToken = ColorRawTokens.colorFunctionalScarlet900 + + XCTAssertNil(MultipleColorTokens(light: light, dark: nil)) + XCTAssertNil(MultipleColorTokens(light: nil, dark: dark)) + XCTAssertNil(MultipleColorTokens(light: nil, dark: nil)) + } + + /// Tests init of `MultipleColorRawToken` with nil value in parameter + func testInitNilValue() { + XCTAssertNil(MultipleColorTokens(nil)) + } + + /// Tests comparisons between two `MultipleColorRawToken` to ensure tokens are considered as equal + /// if an only if they have the same compact and regular values and have the same types. + func testIsEqual() { + let first = MultipleColorTokens(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalScarlet900) + let second = MultipleColorTokens(light: ColorRawTokens.colorFunctionalDarkGray80, dark: ColorRawTokens.colorFunctionalSun100) + let third = MultipleColorTokens(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalSun100) + let fourth = MultipleColorTokens(light: ColorRawTokens.colorFunctionalDarkGray80, dark: ColorRawTokens.colorFunctionalScarlet900) + let fifth = MultipleColorTokens(light: ColorRawTokens.colorFunctionalMalachite300, dark: ColorRawTokens.colorFunctionalScarlet900) + let sixth = MultipleSizingTokens(compact: 12, regular: 12) + + XCTAssertTrue(first.isEqual(first)) + XCTAssertFalse(first.isEqual(second)) + XCTAssertFalse(first.isEqual(third)) + XCTAssertFalse(first.isEqual(fourth)) + XCTAssertTrue(first.isEqual(fifth)) + XCTAssertFalse(first.isEqual(sixth)) + } +} diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleElevationTokensTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleElevationTokensTests.swift new file mode 100644 index 000000000..33ca46d52 --- /dev/null +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleElevationTokensTests.swift @@ -0,0 +1,57 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import XCTest +import OUDSTokensRaw +import OUDSTokensSemantic + +/// To ensure the `MultipleElevationTokens` is tested as a wrapper of semantic tokens for light and dark color schemes. +final class MultipleElevationTokensTests: XCTestCase { + + /// Tests if the unique value is applied for light and dark modes + func testInitWithOneValue() { + let unique: ElevationCompositeRawToken = ElevationRawTokens.elevationBottom_4_100 + let token = MultipleElevationTokens(unique) + + XCTAssertTrue(token.light == unique) + XCTAssertTrue(token.dark == unique) + } + + /// Tests if light and dark values are preserved when defined with two assigned non nil values + func testInitWithTwoValues() { + let light: ElevationCompositeRawToken = ElevationRawTokens.elevationBottom_1_200 + let dark: ElevationCompositeRawToken = ElevationRawTokens.elevationBottom_1_300 + let token = MultipleElevationTokens(light: light, dark: dark) + + XCTAssertTrue(token.light == light) + XCTAssertTrue(token.dark == dark) + } + + /// Tests comparisons between two `MultipleElevationTokens` to ensure tokens are considered as equal + /// if an only if they have the same light and dark values and have the same types. + func testIsEqual() { + let first = MultipleElevationTokens(light: ElevationRawTokens.elevationBottom_4_100, dark: ElevationRawTokens.elevationBottom_2_500) + let second = MultipleElevationTokens(light: ElevationRawTokens.elevationBottom_3_300, dark: ElevationRawTokens.elevationBottom_3_500) + let third = MultipleElevationTokens(light: ElevationRawTokens.elevationBottom_4_100, dark: ElevationRawTokens.elevationBottom_3_500) + let fourth = MultipleElevationTokens(light: ElevationRawTokens.elevationBottom_3_300, dark: ElevationRawTokens.elevationBottom_2_500) + let fifth = MultipleElevationTokens(light: ElevationRawTokens.elevationBottom_4_100, dark: ElevationRawTokens.elevationBottom_2_500) + let sixth = MultipleSizingTokens(compact: 12, regular: 12) + + XCTAssertTrue(first.isEqual(first)) + XCTAssertFalse(first.isEqual(second)) + XCTAssertFalse(first.isEqual(third)) + XCTAssertFalse(first.isEqual(fourth)) + XCTAssertTrue(first.isEqual(fifth)) + XCTAssertFalse(first.isEqual(sixth)) + } +} diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SizingCompositeSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleSizingSemanticTokenTests.swift similarity index 58% rename from OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SizingCompositeSemanticTokenTests.swift rename to OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleSizingSemanticTokenTests.swift index 39f956bf4..e2fb1352a 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SizingCompositeSemanticTokenTests.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleSizingSemanticTokenTests.swift @@ -14,28 +14,28 @@ import XCTest import OUDSTokensSemantic -/// To ensure the `SizingCompositeSemanticToken` is tested as a wrapper of semantic tokens for compact and regular size classes. -final class SizingCompositeSemanticTokenTests: XCTestCase { +/// To ensure the `MultipleSizingTokens` is tested as a wrapper of semantic tokens for compact and regular size classes. +final class MultipleSizingTokensTests: XCTestCase { /// Tests if compact and regular values are preserved when defined func testInit() { let compact: SizingSemanticToken = 123 let regular: SizingSemanticToken = 456 - let token = SizingCompositeSemanticToken(compact: compact, regular: regular) + let token = MultipleSizingTokens(compact: compact, regular: regular) XCTAssertTrue(token.compact == compact) XCTAssertTrue(token.regular == regular) } - /// Tests comparisons between two `SizingCompositeSemanticToken` to ensure tokens are considered as equal + /// Tests comparisons between two `MultipleSizingTokens` to ensure tokens are considered as equal /// if an only if they have the same compact and regular values and have the same types. func testIsEqual() { - let first = SizingCompositeSemanticToken(compact: 12, regular: 34) - let second = SizingCompositeSemanticToken(compact: 56, regular: 78) - let third = SizingCompositeSemanticToken(compact: 12, regular: 78) - let fourth = SizingCompositeSemanticToken(compact: 56, regular: 34) - let fifth = SizingCompositeSemanticToken(compact: 12, regular: 34) - let sixth = ColorCompositeSemanticToken("#000000") + let first = MultipleSizingTokens(compact: 12, regular: 34) + let second = MultipleSizingTokens(compact: 56, regular: 78) + let third = MultipleSizingTokens(compact: 12, regular: 78) + let fourth = MultipleSizingTokens(compact: 56, regular: 34) + let fifth = MultipleSizingTokens(compact: 12, regular: 34) + let sixth = MultipleColorTokens("#000000") XCTAssertTrue(first.isEqual(first)) XCTAssertFalse(first.isEqual(second)) diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SpacingCompositeSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleSpacingTokensTests.swift similarity index 58% rename from OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SpacingCompositeSemanticTokenTests.swift rename to OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleSpacingTokensTests.swift index 03383cf9f..f803d96a4 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/SpacingCompositeSemanticTokenTests.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleSpacingTokensTests.swift @@ -15,28 +15,28 @@ import XCTest import OUDSTokensRaw import OUDSTokensSemantic -/// To ensure the `SpacingCompositeSemanticToken` is tested as a wrapper of semantic tokens for compact and regular size classes. -final class SpacingCompositeSemanticTokenTests: XCTestCase { +/// To ensure the `MultipleSpacingTokens` is tested as a wrapper of semantic tokens for compact and regular size classes. +final class MultipleSpacingTokensTests: XCTestCase { /// Tests if compact and regular values are preserved when defined func testInit() { let compact: DimensionRawToken = 123 let regular: DimensionRawToken = 456 - let token = SpacingCompositeSemanticToken(compact: compact, regular: regular) + let token = MultipleSpacingTokens(compact: compact, regular: regular) XCTAssertTrue(token.compact == compact) XCTAssertTrue(token.regular == regular) } - /// Tests comparisons between two `SpacingCompositeSemanticToken` to ensure tokens are considered as equal + /// Tests comparisons between two `MultipleSpacingTokens` to ensure tokens are considered as equal /// if an only if they have the same compact and regular values and have the same types. func testIsEqual() { - let first = SpacingCompositeSemanticToken(compact: 12, regular: 34) - let second = SpacingCompositeSemanticToken(compact: 56, regular: 78) - let third = SpacingCompositeSemanticToken(compact: 12, regular: 78) - let fourth = SpacingCompositeSemanticToken(compact: 56, regular: 34) - let fifth = SpacingCompositeSemanticToken(compact: 12, regular: 34) - let sixth = SizingCompositeSemanticToken(compact: 0, regular: 00) + let first = MultipleSpacingTokens(compact: 12, regular: 34) + let second = MultipleSpacingTokens(compact: 56, regular: 78) + let third = MultipleSpacingTokens(compact: 12, regular: 78) + let fourth = MultipleSpacingTokens(compact: 56, regular: 34) + let fifth = MultipleSpacingTokens(compact: 12, regular: 34) + let sixth = MultipleSizingTokens(compact: 0, regular: 00) XCTAssertTrue(first.isEqual(first)) XCTAssertFalse(first.isEqual(second)) diff --git a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/TypographyCompositeSemanticTokenTests.swift b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleTypographyTokensTests.swift similarity index 50% rename from OUDS/Core/Tokens/SemanticTokens/Tests/Composites/TypographyCompositeSemanticTokenTests.swift rename to OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleTypographyTokensTests.swift index 4ea7d2d97..3be626674 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/TypographyCompositeSemanticTokenTests.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Tests/Composites/MultipleTypographyTokensTests.swift @@ -15,28 +15,28 @@ import XCTest import OUDSTokensRaw import OUDSTokensSemantic -/// To ensure the `TypographyCompositeSemanticToken` is tested as a wrapper of semantic tokens for compact and regular size classes. -final class TypographyCompositeSemanticTokenTests: XCTestCase { +/// To ensure the `MultipleTypographyTokens` is tested as a wrapper of semantic tokens for compact and regular size classes. +final class MultipleTypographyTokensTests: XCTestCase { /// Tests if compact and regular values are preserved when defined func testInit() { let compact = TypographyRawTokens.typeRegular150 let regular = TypographyRawTokens.typeBold550 - let token = TypographyCompositeSemanticToken(compact: compact, regular: regular) + let token = MultipleTypographyTokens(compact: compact, regular: regular) XCTAssertTrue(token.compact == compact) XCTAssertTrue(token.regular == regular) } - /// Tests comparisons between two `SpacingCompositeSemanticToken` to ensure tokens are considered as equal + /// Tests comparisons between two `MultipleTypographyTokens` to ensure tokens are considered as equal /// if an only if they have the same compact and regular values and have the same types. func testIsEqual() { - let first = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold550) - let second = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold750) - let third = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold750) - let fourth = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold550) - let fifth = TypographyCompositeSemanticToken(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold550) - let sixth = SizingCompositeSemanticToken(compact: 0, regular: 0) + let first = MultipleTypographyTokens(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold550) + let second = MultipleTypographyTokens(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold750) + let third = MultipleTypographyTokens(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold750) + let fourth = MultipleTypographyTokens(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold550) + let fifth = MultipleTypographyTokens(compact: TypographyRawTokens.typeRegular150, regular: TypographyRawTokens.typeBold550) + let sixth = MultipleSizingTokens(compact: 0, regular: 0) XCTAssertTrue(first.isEqual(first)) XCTAssertFalse(first.isEqual(second)) diff --git a/Showcase/Showcase.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Showcase/Showcase.xcworkspace/xcshareddata/swiftpm/Package.resolved index c9543bd84..24bc63787 100644 --- a/Showcase/Showcase.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Showcase/Showcase.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "c8222820bbb3bf0533ea3b098f2334f8188d74c09aee2fb50ff24b3cfb9227bd", + "originHash" : "a5dafe8eac933fcb82d3621146d26499c98e02cc27a69139d2b8440ccab12b2f", "pins" : [ { "identity" : "swift-docc-plugin", diff --git a/Showcase/Showcase/OrangeCustomTheme.swift b/Showcase/Showcase/OrangeCustomTheme.swift index 5f9d88247..021a99ac5 100644 --- a/Showcase/Showcase/OrangeCustomTheme.swift +++ b/Showcase/Showcase/OrangeCustomTheme.swift @@ -29,15 +29,15 @@ extension OrangeCustomTheme { // For FormsTextInputComponentTokens public override var ftiTitleFontWeight: TypographyFontWeightSemanticToken { fontWeightLabelStrong } public override var ftiTitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelXLarge } - public override var ftiTitleColor: ColorSemanticToken { ColorCompositeSemanticToken(ColorRawTokens.colorFunctionalDodgerBlue500) } + public override var ftiTitleColor: ColorSemanticToken { MultipleColorTokens(ColorRawTokens.colorFunctionalDodgerBlue500) } public override var ftiSubtitleFontWeight: TypographyFontWeightSemanticToken { fontWeightBodyDefault } public override var ftiSubtitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelMedium } - public override var ftiSubtitleColor: ColorSemanticToken { ColorCompositeSemanticToken(ColorRawTokens.colorFunctionalMalachite500) } + public override var ftiSubtitleColor: ColorSemanticToken { MultipleColorTokens(ColorRawTokens.colorFunctionalMalachite500) } public override var ftiBackgroundColor: ColorSemanticToken { colorBackgroundDefaultPrimary } - public override var ftiBorderColor: ColorSemanticToken { ColorCompositeSemanticToken(light: OrangeBrandColorRawTokens.colorDecorativeShockingPink800, dark: OrangeBrandColorRawTokens.colorDecorativeShockingPink200) } + public override var ftiBorderColor: ColorSemanticToken { MultipleColorTokens(light: OrangeBrandColorRawTokens.colorDecorativeShockingPink800, dark: OrangeBrandColorRawTokens.colorDecorativeShockingPink200) } public override var ftiBorderStyle: BorderStyleSemanticToken { borderStyleDrag } @@ -46,7 +46,7 @@ extension OrangeCustomTheme { // For FormsTextInputComponentTokens extension OrangeCustomTheme { // For ColorSemanticTokens - override var colorBackgroundDefaultPrimary: ColorSemanticToken! { ColorCompositeSemanticToken(light: ColorRawTokens.colorFunctionalSun500, dark: ColorRawTokens.colorFunctionalSun800) } + override var colorBackgroundDefaultPrimary: ColorSemanticToken! { MultipleColorTokens(light: ColorRawTokens.colorFunctionalSun500, dark: ColorRawTokens.colorFunctionalSun800) } } extension OrangeCustomTheme { // For ButtonsComponentTokens @@ -58,12 +58,12 @@ extension OrangeCustomTheme { // For ButtonsComponentTokens override var buttonBorderWidth: BorderWidthSemanticToken { borderWidthDefault } override var buttonBorderRadius: BorderRadiusSemanticToken { borderRadiusShort } - override var buttonForegroundColor: ColorSemanticToken { ColorCompositeSemanticToken(light: sysColorBrandNeutralMutedLower!, dark: sysColorBrandNeutralMutedWhite!) } - override var buttonBackgroundColor: ColorSemanticToken { ColorCompositeSemanticToken(light: sysColorBrandPositiveLowest!, dark: sysColorBrandPositiveHighest!) } + override var buttonForegroundColor: ColorSemanticToken { MultipleColorTokens(light: sysColorBrandNeutralMutedLower!, dark: sysColorBrandNeutralMutedWhite!) } + override var buttonBackgroundColor: ColorSemanticToken { MultipleColorTokens(light: sysColorBrandPositiveLowest!, dark: sysColorBrandPositiveHighest!) } override var buttonWidth: SizingSemanticToken { DimensionRawTokens.dimension2000 } override var buttonHeight: SizingSemanticToken { DimensionRawTokens.dimension800 } - override var buttonTypography: TypographyCompositeSemanticToken { typeDisplaySmall } + override var buttonTypography: MultipleTypographyTokens { typeDisplaySmall } } // swiftlint:enable line_length diff --git a/Showcase/Showcase/Pages/Components/Elevations/ElevationsList.swift b/Showcase/Showcase/Pages/Components/Elevations/ElevationsList.swift index 85bb715d7..239352715 100644 --- a/Showcase/Showcase/Pages/Components/Elevations/ElevationsList.swift +++ b/Showcase/Showcase/Pages/Components/Elevations/ElevationsList.swift @@ -75,11 +75,11 @@ public struct ElevationsList: View { public var body: some View { ScrollView { VStack(alignment: .leading, spacing: 40) { - ElevationRectangle(elevation: raised) - ElevationRectangle(elevation: overlayDefault) - ElevationRectangle(elevation: allSticky) - ElevationRectangle(elevation: drag) - ElevationRectangle(elevation: overlayEmphasized) + ElevationRectangle(elevation: ElevationCompositeSemanticToken(raised)) + ElevationRectangle(elevation: ElevationCompositeSemanticToken(overlayDefault)) + ElevationRectangle(elevation: ElevationCompositeSemanticToken(allSticky)) + ElevationRectangle(elevation: ElevationCompositeSemanticToken(drag)) + ElevationRectangle(elevation: ElevationCompositeSemanticToken(overlayEmphasized)) } .frame(maxWidth: .infinity) } From 37891afbf9eae677a7c1fa93a1622d446c46d6f0 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Wed, 25 Sep 2024 20:02:55 +0200 Subject: [PATCH 16/25] refactor: add factor base in raw tokens, code cleanup (#132) (#133) Ddd back factor base in raw tokens to be aligned with parser output, code cleanup Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 7 +- ...DSTheme+FormsTextInputComponentToken.swift | 1 + .../Tests/TestInverseThemeElevation.swift | 8 +++ .../Values/BorderRawTokens+Values.swift | 41 ++++++----- .../Values/DimensionRawTokens+Values.swift | 69 +++++++++--------- .../Sources/Values/GridRawTokens+Values.swift | 39 +++++----- .../Tests/BorderRawTokensTests.swift | 43 +++++------ .../Tests/DimensionRawTokensTests.swift | 71 +++++++++---------- .../RawTokens/Tests/GridRawTokensTests.swift | 35 ++++----- .../OUDSTokensSemantic.md | 2 + .../TestsUtils/XCTestCase+extensions.swift | 6 +- Showcase/Showcase/Pages/About/AboutPage.swift | 6 -- .../Resources/en.lproj/Localizable.strings | 4 -- .../Showcase/Utils/Bundle+extension.swift | 4 -- Showcase/Showcase/Utils/WebView.swift | 6 -- 15 files changed, 167 insertions(+), 175 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c7670bdd..c986c6130 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Library] Rename `SizingCompositeSemanticToken` to `MultipleSizingTokens` to keep "composite" word for *Figma* design system - [Library] Rename `ColorCompositeSemanticToken` to `MultipleColorTokens` to keep "composite" word for *Figma* design system - [Library] Elevation colors have been merged into "multiple" objects colors to have less variables and manage color schemes +- [Library] Rename `ColorCompositeSemanticToken` to `MultipleColorSemanticToken` to keep "composite" word for *Figma* design system +- [Library] Elevation colors have been merged into composite colors to have less variables and manage color schemes +- [Library] Rename `SpacingCompositeSemanticToken` to `MultipleSpacingTokens` to keep "composite" word for *Figma* design system +- [Library] Rename `SizingCompositeSemanticToken` to `MultipleSizingTokens` to keep "composite" word for *Figma* design system +- [Library] Rename `ColorCompositeSemanticToken` to `MultipleColorTokens` to keep "composite" word for *Figma* design system +- [Library] Elevation colors have been merged into "multiple" objects colors to have less variables and manage color schemes - [Library] Update color semantic tokens to better manage light and dark modes values - [Library] Update elevation colors focus light and dark - [Library] Rename space padding inline component tokens by removing "component" word @@ -38,7 +44,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -- [Library] Remove some base multiplier factor from raw tokens - [Library] Remove raw tokens `elevationZIndex` ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) ### Fixed diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift index 65826983a..27aa6491c 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift @@ -24,6 +24,7 @@ extension OUDSTheme: FormsTextInputComponentTokens { @objc open var ftiTitleFontWeight: TypographyFontWeightSemanticToken { fontWeightHeading } @objc open var ftiTitleFontSize: TypographyFontSizeSemanticToken { fontSizeLabelLarge } + @objc open var ftiTitleColor: ColorSemanticToken { MultipleColorTokens(light: ColorRawTokens.colorFunctionalLightGray80, dark: ColorRawTokens.colorFunctionalDarkGray640) } @objc open var ftiSubtitleFontWeight: TypographyFontWeightSemanticToken { fontWeightDisplay } diff --git a/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeElevation.swift b/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeElevation.swift index aba5f4bbd..c9f9e3e23 100644 --- a/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeElevation.swift +++ b/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeElevation.swift @@ -26,6 +26,14 @@ final class TestInverseThemeElevationColors: XCTestCase { } func testElevationColorsEquality() throws { + XCTAssertEqual(inverseTheme.elevationColorNone.light, inverseTheme.elevationColorNone.dark) + XCTAssertEqual(inverseTheme.elevationColorRaised.light, inverseTheme.elevationColorRaised.dark) + XCTAssertEqual(inverseTheme.elevationColorDrag.light, inverseTheme.elevationColorDrag.dark) + XCTAssertEqual(inverseTheme.elevationColorOverlayDefault.light, inverseTheme.elevationColorOverlayDefault.dark) + XCTAssertEqual(inverseTheme.elevationColorOverlayEmphasized.light, inverseTheme.elevationColorOverlayEmphasized.dark) + XCTAssertEqual(inverseTheme.elevationColorStickyDefault.light, inverseTheme.elevationColorStickyDefault.dark) + XCTAssertEqual(inverseTheme.elevationColorStickyEmphasized.light, inverseTheme.elevationColorStickyEmphasized.dark) + XCTAssertEqual(inverseTheme.elevationColorStickyNavigationScrolled.light, inverseTheme.elevationColorStickyNavigationScrolled.dark) XCTAssertEqual(inverseTheme.elevationColorFocus.light, inverseTheme.elevationColorFocus.dark) } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift index de1da47b3..f6ca8f694 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/BorderRawTokens+Values.swift @@ -17,30 +17,33 @@ /// Extracted in this separated file to help the *Figma* JSON to Swift parser to generate files to include easily. extension BorderRawTokens { + /// Double type because used below for computations with Double values, output of the parser + public static let borderBase: Double = 4 + // MARK: Primitive token - Border - Width - public static let borderWidth0: BorderWidthRawToken = 4 * 0 - public static let borderWidth25: BorderWidthRawToken = 4 * 0.25 - public static let borderWidth50: BorderWidthRawToken = 4 * 0.5 - public static let borderWidth75: BorderWidthRawToken = 4 * 0.75 - public static let borderWidth100: BorderWidthRawToken = 4 * 1 - public static let borderWidth150: BorderWidthRawToken = 4 * 1.5 - public static let borderWidth200: BorderWidthRawToken = 4 * 2 + public static let borderWidth0: BorderWidthRawToken = borderBase * 0 + public static let borderWidth25: BorderWidthRawToken = borderBase * 0.25 + public static let borderWidth50: BorderWidthRawToken = borderBase * 0.5 + public static let borderWidth75: BorderWidthRawToken = borderBase * 0.75 + public static let borderWidth100: BorderWidthRawToken = borderBase * 1 + public static let borderWidth150: BorderWidthRawToken = borderBase * 1.5 + public static let borderWidth200: BorderWidthRawToken = borderBase * 2 // MARK: Primitive token - Border - Radius - public static let borderRadius0: BorderRadiusRawToken = 4 * 0 - public static let borderRadius25: BorderRadiusRawToken = 4 * 0.25 - public static let borderRadius50: BorderRadiusRawToken = 4 * 0.5 - public static let borderRadius75: BorderRadiusRawToken = 4 * 0.75 - public static let borderRadius100: BorderRadiusRawToken = 4 * 1 - public static let borderRadius150: BorderRadiusRawToken = 4 * 1.5 - public static let borderRadius200: BorderRadiusRawToken = 4 * 2 - public static let borderRadius300: BorderRadiusRawToken = 4 * 3 - public static let borderRadius400: BorderRadiusRawToken = 4 * 4 - public static let borderRadius500: BorderRadiusRawToken = 4 * 5 - public static let borderRadius600: BorderRadiusRawToken = 4 * 6 - public static let borderRadius800: BorderRadiusRawToken = 4 * 8 + public static let borderRadius0: BorderRadiusRawToken = borderBase * 0 + public static let borderRadius25: BorderRadiusRawToken = borderBase * 0.25 + public static let borderRadius50: BorderRadiusRawToken = borderBase * 0.5 + public static let borderRadius75: BorderRadiusRawToken = borderBase * 0.75 + public static let borderRadius100: BorderRadiusRawToken = borderBase * 1 + public static let borderRadius150: BorderRadiusRawToken = borderBase * 1.5 + public static let borderRadius200: BorderRadiusRawToken = borderBase * 2 + public static let borderRadius300: BorderRadiusRawToken = borderBase * 3 + public static let borderRadius400: BorderRadiusRawToken = borderBase * 4 + public static let borderRadius500: BorderRadiusRawToken = borderBase * 5 + public static let borderRadius600: BorderRadiusRawToken = borderBase * 6 + public static let borderRadius800: BorderRadiusRawToken = borderBase * 8 // MARK: Primitive token - Border - Style diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift index ddc7558a7..0a009bbf3 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/DimensionRawTokens+Values.swift @@ -17,39 +17,42 @@ /// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. extension DimensionRawTokens { + /// Double type because used below for computations with Double values, output of the parser + public static let dimensionBase: Double = 4 + // MARK: Primitive token - Dimension - public static let dimension0: DimensionRawToken = 4 * 0 - public static let dimension25: DimensionRawToken = 4 * 0.5 - public static let dimension50: DimensionRawToken = 4 * 1 - public static let dimension75: DimensionRawToken = 4 * 1.5 - public static let dimension100: DimensionRawToken = 4 * 2 - public static let dimension150: DimensionRawToken = 4 * 3 - public static let dimension200: DimensionRawToken = 4 * 4 - public static let dimension250: DimensionRawToken = 4 * 5 - public static let dimension300: DimensionRawToken = 4 * 6 - public static let dimension350: DimensionRawToken = 4 * 7 - public static let dimension400: DimensionRawToken = 4 * 8 - public static let dimension450: DimensionRawToken = 4 * 9 - public static let dimension500: DimensionRawToken = 4 * 10 - public static let dimension550: DimensionRawToken = 4 * 11 - public static let dimension600: DimensionRawToken = 4 * 12 - public static let dimension650: DimensionRawToken = 4 * 13 - public static let dimension700: DimensionRawToken = 4 * 14 - public static let dimension750: DimensionRawToken = 4 * 15 - public static let dimension800: DimensionRawToken = 4 * 16 - public static let dimension900: DimensionRawToken = 4 * 18 - public static let dimension1000: DimensionRawToken = 4 * 20 - public static let dimension1200: DimensionRawToken = 4 * 24 - public static let dimension1400: DimensionRawToken = 4 * 28 - public static let dimension1600: DimensionRawToken = 4 * 32 - public static let dimension1800: DimensionRawToken = 4 * 36 - public static let dimension2000: DimensionRawToken = 4 * 40 - public static let dimension3000: DimensionRawToken = 4 * 80 - public static let dimension4000: DimensionRawToken = 4 * 120 - public static let dimension5000: DimensionRawToken = 4 * 140 - public static let dimension6000: DimensionRawToken = 4 * 160 - public static let dimension7000: DimensionRawToken = 4 * 180 - public static let dimension9000: DimensionRawToken = 4 * 220 - public static let dimension11000: DimensionRawToken = 4 * 260 + public static let dimension0: DimensionRawToken = dimensionBase * 0 + public static let dimension25: DimensionRawToken = dimensionBase * 0.5 + public static let dimension50: DimensionRawToken = dimensionBase * 1 + public static let dimension75: DimensionRawToken = dimensionBase * 1.5 + public static let dimension100: DimensionRawToken = dimensionBase * 2 + public static let dimension150: DimensionRawToken = dimensionBase * 3 + public static let dimension200: DimensionRawToken = dimensionBase * 4 + public static let dimension250: DimensionRawToken = dimensionBase * 5 + public static let dimension300: DimensionRawToken = dimensionBase * 6 + public static let dimension350: DimensionRawToken = dimensionBase * 7 + public static let dimension400: DimensionRawToken = dimensionBase * 8 + public static let dimension450: DimensionRawToken = dimensionBase * 9 + public static let dimension500: DimensionRawToken = dimensionBase * 10 + public static let dimension550: DimensionRawToken = dimensionBase * 11 + public static let dimension600: DimensionRawToken = dimensionBase * 12 + public static let dimension650: DimensionRawToken = dimensionBase * 13 + public static let dimension700: DimensionRawToken = dimensionBase * 14 + public static let dimension750: DimensionRawToken = dimensionBase * 15 + public static let dimension800: DimensionRawToken = dimensionBase * 16 + public static let dimension900: DimensionRawToken = dimensionBase * 18 + public static let dimension1000: DimensionRawToken = dimensionBase * 20 + public static let dimension1200: DimensionRawToken = dimensionBase * 24 + public static let dimension1400: DimensionRawToken = dimensionBase * 28 + public static let dimension1600: DimensionRawToken = dimensionBase * 32 + public static let dimension1800: DimensionRawToken = dimensionBase * 36 + public static let dimension2000: DimensionRawToken = dimensionBase * 40 + public static let dimension3000: DimensionRawToken = dimensionBase * 80 + public static let dimension4000: DimensionRawToken = dimensionBase * 120 + public static let dimension5000: DimensionRawToken = dimensionBase * 140 + public static let dimension6000: DimensionRawToken = dimensionBase * 160 + public static let dimension7000: DimensionRawToken = dimensionBase * 180 + public static let dimension9000: DimensionRawToken = dimensionBase * 220 + public static let dimension11000: DimensionRawToken = dimensionBase * 260 } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift index 614cdcd0e..a25883e0c 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift @@ -17,6 +17,9 @@ /// Extracted in a separated file to help the *Figma* JSON to Swift parser to generate files to include easily. extension GridRawTokens { + /// Double type because used below for computations with Double values, output of the parser + public static let dimensionBase: Double = 4 + // MARK: Primitive token - Grid - Design width public static let gridWidth100: GridRawToken = 320 @@ -59,27 +62,27 @@ extension GridRawTokens { // MARK: Primitive token - Grid - Margin - public static let gridMargin100: GridRawToken = 4 * 4 - public static let gridMargin300: GridRawToken = 4 * 6 - public static let gridMargin400: GridRawToken = 4 * 7 - public static let gridMargin500: GridRawToken = 4 * 8 - public static let gridMargin600: GridRawToken = 4 * 9 - public static let gridMargin700: GridRawToken = 4 * 10 - public static let gridMargin900: GridRawToken = 4 * 12 - public static let gridMargin1000: GridRawToken = 4 * 13 - public static let gridMargin1100: GridRawToken = 4 * 14 - public static let gridMargin1700: GridRawToken = 4 * 20 - public static let gridMargin2500: GridRawToken = 4 * 28 + public static let gridMargin100: GridRawToken = dimensionBase * 4 + public static let gridMargin300: GridRawToken = dimensionBase * 6 + public static let gridMargin400: GridRawToken = dimensionBase * 7 + public static let gridMargin500: GridRawToken = dimensionBase * 8 + public static let gridMargin600: GridRawToken = dimensionBase * 9 + public static let gridMargin700: GridRawToken = dimensionBase * 10 + public static let gridMargin900: GridRawToken = dimensionBase * 12 + public static let gridMargin1000: GridRawToken = dimensionBase * 13 + public static let gridMargin1100: GridRawToken = dimensionBase * 14 + public static let gridMargin1700: GridRawToken = dimensionBase * 20 + public static let gridMargin2500: GridRawToken = dimensionBase * 28 // MARK: Primitive token - Grid - Column gap - public static let gridColumnGap10: GridRawToken = 4 * 0.25 - public static let gridColumnGap100: GridRawToken = 4 * 2 - public static let gridColumnGap200: GridRawToken = 4 * 4 - public static let gridColumnGap300: GridRawToken = 4 * 5 - public static let gridColumnGap400: GridRawToken = 4 * 6 - public static let gridColumnGap600: GridRawToken = 4 * 8 - public static let gridColumnGap700: GridRawToken = 4 * 10 + public static let gridColumnGap10: GridRawToken = dimensionBase * 0.25 + public static let gridColumnGap100: GridRawToken = dimensionBase * 2 + public static let gridColumnGap200: GridRawToken = dimensionBase * 4 + public static let gridColumnGap300: GridRawToken = dimensionBase * 5 + public static let gridColumnGap400: GridRawToken = dimensionBase * 6 + public static let gridColumnGap600: GridRawToken = dimensionBase * 8 + public static let gridColumnGap700: GridRawToken = dimensionBase * 10 // MARK: Primitive token - Grid - Column count diff --git a/OUDS/Core/Tokens/RawTokens/Tests/BorderRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/BorderRawTokensTests.swift index 4678d486d..327f0b816 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/BorderRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/BorderRawTokensTests.swift @@ -21,11 +21,6 @@ import OUDSTokensRaw /// Thus this tests class just checks if such relationships are still here whatever the values at the end. final class BorderRawTokensTests: XCTestCase { - // In the global design system, there is a "border base" defined as 4 as a factor of any other token value. - // This value does not appear in the Swift code generated by the parser from Figma JSON. - // But we can still check this truth is still applied. - private static let borderRawTokensBorderBase = 4 - // MARK: - Primitive token - Border - Width func testBorderWidthRawToken0LessThan25() throws { @@ -33,7 +28,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderWidthRawToken0MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderWidth0, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderWidth0, factor: BorderRawTokens.borderBase) } func testBorderWidthRawToken25LessThan50() throws { @@ -41,7 +36,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderWidthRawToken25MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderWidth25, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderWidth25, factor: BorderRawTokens.borderBase) } func testBorderWidthRawToken50LessThan75() throws { @@ -49,7 +44,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderWidthRawToken50MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderWidth50, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderWidth50, factor: BorderRawTokens.borderBase) } func testBorderWidthRawToken75LessThan100() throws { @@ -57,7 +52,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderWidthRawToken75MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderWidth75, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderWidth75, factor: BorderRawTokens.borderBase) } func testBorderWidthRawToken100LessThan150() throws { @@ -65,7 +60,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderWidthRawToken100MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderWidth100, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderWidth100, factor: BorderRawTokens.borderBase) } func testBorderWidthRawToken150LessThan200() throws { @@ -73,11 +68,11 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderWidthRawToken150MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderWidth150, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderWidth150, factor: BorderRawTokens.borderBase) } func testBorderWidthRawToken200MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderWidth200, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderWidth200, factor: BorderRawTokens.borderBase) } // MARK: - Primitive token - Border - Radius @@ -87,7 +82,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken0MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius0, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius0, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken25LessThan50() throws { @@ -95,7 +90,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken25MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius25, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius25, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken50LessThan75() throws { @@ -103,7 +98,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken50MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius50, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius50, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken75LessThan100() throws { @@ -111,7 +106,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken75MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius75, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius75, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken100LessThan150() throws { @@ -119,7 +114,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken100MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius100, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius100, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken150LessThan200() throws { @@ -127,7 +122,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken150MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius150, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius150, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken200LessThan300() throws { @@ -135,7 +130,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken200MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius200, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius200, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken300LessThan400() throws { @@ -143,7 +138,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken300MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius300, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius300, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken400LessThan500() throws { @@ -151,7 +146,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken400MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius400, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius400, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken500LessThan600() throws { @@ -159,7 +154,7 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken500MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius500, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius500, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken600LessThan800() throws { @@ -167,11 +162,11 @@ final class BorderRawTokensTests: XCTestCase { } func testBorderRadiusRawToken600MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius600, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius600, factor: BorderRawTokens.borderBase) } func testBorderRadiusRawToken800MultipleOfBase() throws { - XCTAssertMultipleOf(BorderRawTokens.borderRadius800, factor: Self.borderRawTokensBorderBase) + XCTAssertMultipleOf(BorderRawTokens.borderRadius800, factor: BorderRawTokens.borderBase) } // MARK: - Primitive token - Border - Style diff --git a/OUDS/Core/Tokens/RawTokens/Tests/DimensionRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/DimensionRawTokensTests.swift index 68a9d52bc..8850c42c2 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/DimensionRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/DimensionRawTokensTests.swift @@ -21,17 +21,12 @@ import OUDSTokensRaw /// Thus this tests class just checks if such relationships are still here whatever the values at the end. final class DimensionRawTokensTests: XCTestCase { - // In the global design system, there is a "dimension base" defined as 4 as a factor of any other token value. - // This value does not appear in the Swift code generated by the parser from Figma JSON. - // But we can still check this truth is still applied. - private static let dimensionRawTokensDimensionBase = 4 - func testDimensionRawToken0LessThan25() throws { XCTAssertLessThan(DimensionRawTokens.dimension0, DimensionRawTokens.dimension25) } func testDimensionRawToken0MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension0, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension0, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken25LessThan50() throws { @@ -39,7 +34,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken25MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension25, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension25, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken50LessThan75() throws { @@ -47,7 +42,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken50MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension50, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension50, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken75LessThan100() throws { @@ -55,7 +50,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken75MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension75, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension75, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken100LessThan150() throws { @@ -63,7 +58,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken100MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension100, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension100, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken150LessThan200() throws { @@ -71,7 +66,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken150MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension150, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension150, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken200LessThan250() throws { @@ -79,7 +74,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken200MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension200, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension200, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken250LessThan300() throws { @@ -87,7 +82,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken250MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension250, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension250, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken300LessThan350() throws { @@ -95,7 +90,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken300MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension300, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension300, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken350LessThan400() throws { @@ -103,7 +98,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken350MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension350, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension350, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken400LessThan450() throws { @@ -111,7 +106,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken400MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension400, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension400, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken450LessThan500() throws { @@ -119,7 +114,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken450MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension450, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension450, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken500LessThan550() throws { @@ -127,7 +122,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken500MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension500, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension500, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken550LessThan600() throws { @@ -135,7 +130,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken550MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension550, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension550, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken600LessThan650() throws { @@ -143,7 +138,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken600MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension600, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension600, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken650LessThan700() throws { @@ -151,7 +146,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken650MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension650, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension650, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken700LessThan750() throws { @@ -159,7 +154,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken700MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension700, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension700, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken750LessThan800() throws { @@ -167,7 +162,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken750MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension750, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension750, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken800LessThan900() throws { @@ -175,7 +170,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken800MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension800, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension800, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken900LessThan1000() throws { @@ -183,7 +178,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken900MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension900, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension900, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken1000LessThan1200() throws { @@ -191,7 +186,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken1000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension1000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension1000, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken1200LessThan1400() throws { @@ -199,7 +194,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken1200MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension1200, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension1200, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken1400LessThan1600() throws { @@ -207,7 +202,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken1400MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension1400, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension1400, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken1600LessThan1800() throws { @@ -215,7 +210,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken1600MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension1600, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension1600, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken1800LessThan2000() throws { @@ -223,7 +218,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken1800MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension1800, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension1800, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken2000LessThan3000() throws { @@ -231,7 +226,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken2000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension2000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension2000, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken3000LessThan4000() throws { @@ -239,7 +234,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken3000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension3000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension3000, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken4000LessThan5000() throws { @@ -247,7 +242,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken4000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension4000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension4000, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken5000LessThan6000() throws { @@ -255,7 +250,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken5000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension5000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension5000, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken6000LessThan7000() throws { @@ -263,7 +258,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken6000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension6000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension6000, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken7000LessThan9000() throws { @@ -271,7 +266,7 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken7000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension7000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension7000, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken9000LessThan11000() throws { @@ -279,10 +274,10 @@ final class DimensionRawTokensTests: XCTestCase { } func testDimensionRawToken9000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension9000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension9000, factor: DimensionRawTokens.dimensionBase) } func testDimensionRawToken11000MultipleOfBase() throws { - XCTAssertMultipleOf(DimensionRawTokens.dimension11000, factor: Self.dimensionRawTokensDimensionBase) + XCTAssertMultipleOf(DimensionRawTokens.dimension11000, factor: DimensionRawTokens.dimensionBase) } } diff --git a/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift index 0d6cc7475..85a72ee26 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift @@ -21,11 +21,6 @@ import OUDSTokensRaw /// Thus this tests class just checks if such relationships are still here whatever the values at the end. final class GridRawTokensTests: XCTestCase { - // In the global design system, there is a "dimension base" defined as 4 as a factor of any other token value. - // This value does not appear in the Swift code generated by the parser from Figma JSON. - // But we can still check this truth is still applied. - private static let gridRawTokensDimensionBase = 4 - // MARK: - Primitive token - Grid - Design Width func testGridRawTokenGridDesignWidth100LessThanGridDesignWidth200() throws { @@ -175,7 +170,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin100MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin100, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin100, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin300LessThanGridMargin400() throws { @@ -183,7 +178,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin300MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin300, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin300, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin400LessThanGridMargin500() throws { @@ -191,7 +186,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin400MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin400, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin400, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin500LessThanGridMargin600() throws { @@ -199,7 +194,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin500MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin500, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin500, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin600LessThanGridMargin700() throws { @@ -207,7 +202,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin600MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin600, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin600, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin700LessThanGridMargin900() throws { @@ -215,7 +210,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin700MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin700, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin700, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin900LessThanGridMargin1000() throws { @@ -223,7 +218,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin900MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin900, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin900, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin1000LessThanGridMargin1100() throws { @@ -231,7 +226,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin1000MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin1000, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin1000, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin1100LessThanGridMargin1700() throws { @@ -239,7 +234,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin1700MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin1700, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin1700, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridMargin1700LessThanGridMargin2500() throws { @@ -247,7 +242,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenMargin2500MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridMargin2500, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridMargin2500, factor: GridRawTokens.dimensionBase) } // MARK: - Primitive token - Grid - Column gap @@ -257,7 +252,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenColumnGap10MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridColumnGap10, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridColumnGap10, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridColumnGap100LessThanGridColumnGap200() throws { @@ -265,7 +260,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenColumnGap100MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridColumnGap100, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridColumnGap100, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridColumnGap200LessThanGridColumnGap300() throws { @@ -273,7 +268,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenColumnGap200MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridColumnGap200, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridColumnGap200, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridColumnGap300LessThanGridColumnGap500() throws { @@ -281,7 +276,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenColumnGap300MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridColumnGap300, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridColumnGap300, factor: GridRawTokens.dimensionBase) } func testGridRawTokenGridColumnGap600LessThanGridColumnGap700() throws { @@ -289,7 +284,7 @@ final class GridRawTokensTests: XCTestCase { } func testGridRawTokenColumnGap700MultipleOfBase() throws { - XCTAssertMultipleOf(GridRawTokens.gridColumnGap700, factor: Self.gridRawTokensDimensionBase) + XCTAssertMultipleOf(GridRawTokens.gridColumnGap700, factor: GridRawTokens.dimensionBase) } // MARK: - Primitive token - Grid - Column count diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md b/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md index 6c9a2c7e7..425ca4437 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md @@ -34,6 +34,8 @@ The *Multiples* folder contains some _composite class_ defined to pack double va Such *composites* are not the same as the ones defined in the *Figma* design system, they are just utilities to handle tuple of values, without the syntaxe of tuples and with some helper functions. We would like to define one class for all combinations of things depending to light and dark modes, and another for regular and compact modes. However, it implies to use _Swift generics_ and it is not compatible with Objective-C runtime (we use through `@objc` keyword). +We would like to define one class for all combinations of things depending to light and dark modes, and another for regular and compact modes. However, it implies to use _Swift generics_ and it is not compatible with Objective-C runtime (we use through `@objc` keyword). + The *TypeAliases* folder contains all the *typealias* values used for the semantic tokens. Indeed these aliases are here to bring clarity and meanings in the library, and also to help users (i.e. developers) to know what kind of objects they handle with the same vocabulary as the one used in *Figma*, and in general, in the whole design system. They can be seen as a ligh level of abstraction with meanings, without having to define real types with `struct` or `class`. Type aliases here point to raw tokens aliases, thus by transition they point to real types. diff --git a/OUDS/Foundations/TestsUtils/XCTestCase+extensions.swift b/OUDS/Foundations/TestsUtils/XCTestCase+extensions.swift index bc1412038..e9310d46c 100644 --- a/OUDS/Foundations/TestsUtils/XCTestCase+extensions.swift +++ b/OUDS/Foundations/TestsUtils/XCTestCase+extensions.swift @@ -22,8 +22,10 @@ extension XCTestCase { } /// Checks if the `value` is a multiple of `factor` - public func XCTAssertMultipleOf(_ value: Double, factor: Int, file: StaticString = #file, line: UInt = #line) { - let remaining = Int(value) % factor + public func XCTAssertMultipleOf(_ value: Double, factor: Double, file: StaticString = #file, line: UInt = #line) { + let value = Int(value) + let factor = Int(factor) + let remaining = value % factor // If multiple, remaining will be 0 OR between 0 and factor if value less than factor XCTAssertTrue(remaining == 0 || remaining < factor, "Current value: \(value) % \(factor) = \(remaining)") } diff --git a/Showcase/Showcase/Pages/About/AboutPage.swift b/Showcase/Showcase/Pages/About/AboutPage.swift index dd9e8f15e..2d9706138 100644 --- a/Showcase/Showcase/Pages/About/AboutPage.swift +++ b/Showcase/Showcase/Pages/About/AboutPage.swift @@ -15,16 +15,12 @@ import SwiftUI struct AboutPage: View { - // ======================= // MARK: Stored properties - // ======================= let privacyPolicyUrl: URL let legalInformationUrl: URL - // ================= // MARK: Initializer - // ================= init() { guard let privacyNoticeUrl = Bundle.main.url(forResource: "about_privacy_policy", withExtension: "html") else { @@ -38,9 +34,7 @@ struct AboutPage: View { self.legalInformationUrl = legalInformationUrl } - // ========== // MARK: Body - // ========== var body: some View { NavigationView { diff --git a/Showcase/Showcase/Resources/en.lproj/Localizable.strings b/Showcase/Showcase/Resources/en.lproj/Localizable.strings index 529253196..eb5734d16 100644 --- a/Showcase/Showcase/Resources/en.lproj/Localizable.strings +++ b/Showcase/Showcase/Resources/en.lproj/Localizable.strings @@ -11,17 +11,13 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -// ================= // MARK: - bottomBar -// ================= "app_bottomBar_components" = "Components"; "app_bottomBar_guidelines" = "Guidelines"; "app_bottomBar_about" = "About"; -// ==================== // MARK: - About Screen -// ==================== "app_about_label_legalInformation" = "Legal information"; "app_about_label_privacyPolicy" = "Privacy policy"; diff --git a/Showcase/Showcase/Utils/Bundle+extension.swift b/Showcase/Showcase/Utils/Bundle+extension.swift index 7340cf679..756ed57e7 100644 --- a/Showcase/Showcase/Utils/Bundle+extension.swift +++ b/Showcase/Showcase/Utils/Bundle+extension.swift @@ -15,9 +15,7 @@ import Foundation extension Bundle { - // ========= // MARK: API - // ========= /// Marketing version in semantic versioning var marketingVersion: String { @@ -69,9 +67,7 @@ extension Bundle { return "\(type)\(tag)" } - // ============================ // MARK: Private Implementation - // ============================ private func string(forInfoDictionaryKey key: String) -> String? { object(forInfoDictionaryKey: key) as? String diff --git a/Showcase/Showcase/Utils/WebView.swift b/Showcase/Showcase/Utils/WebView.swift index cab77a735..7f5b5cc50 100644 --- a/Showcase/Showcase/Utils/WebView.swift +++ b/Showcase/Showcase/Utils/WebView.swift @@ -21,15 +21,11 @@ struct WebView: UIViewRepresentable { case html(String) } - // ======================= // MARK: Stored properties - // ======================= let source: ContentSource - // ================= // MARK: Initializer - // ================= init(from url: URL) { self.source = .url(url) @@ -39,9 +35,7 @@ struct WebView: UIViewRepresentable { self.source = .html(htmlContent) } - // ========================= // MARK: UIViewRepresentable - // ========================= @MainActor func makeUIView(context: Context) -> WKWebView { From fa7b8512ee1c74119f3a169e00bc00bfcf648931 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Wed, 2 Oct 2024 15:05:34 +0200 Subject: [PATCH 17/25] refactor: update typography font weight tokens and modifiers (#51) Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 2 + .../ViewModifiers/CustomFontModifier.swift | 4 +- .../ViewModifiers/TypographyModifier.swift | 17 ++- .../_OUDSComponents.docc/_OUDSComponents.md | 4 +- .../OUDSTheme+TypographySemanticTokens.swift | 53 +++++-- .../MockTheme+TypographySemanticTokens.swift | 38 ++++- ...meOverrideOfTypographySemanticTokens.swift | 134 ++++++++++++++++++ .../TypographyRawTokens+Aliases.swift | 4 +- .../TypographyRawTokens+Composites.swift | 42 +++--- .../Values/TypographyRawTokens+Values.swift | 20 +-- .../Tests/TypographyRawTokensTests.swift | 68 ++++----- .../TypographySemanticTokens+Aliases.swift | 3 + .../Sources/Values/SizingSemanticTokens.swift | 2 +- .../Values/TypographySemanticTokens.swift | 38 ++++- .../Sources/Extensions/Font+extensions.swift | 44 ++++++ .../Sources/Extensions/Int+SwiftUI.swift | 34 +++++ .../Sources/Extensions/String+SwiftUI.swift | 22 +-- .../Extensions/TestFont+extensions.swift | 44 ++++++ .../Tests/Extensions/TestInt+SwiftUI.swift | 62 ++++++++ .../Tests/Extensions/TestString+SwiftUI.swift | 67 +++++---- 20 files changed, 564 insertions(+), 138 deletions(-) create mode 100644 OUDS/Foundations/Sources/Extensions/Font+extensions.swift create mode 100644 OUDS/Foundations/Sources/Extensions/Int+SwiftUI.swift create mode 100644 OUDS/Foundations/Tests/Extensions/TestFont+extensions.swift create mode 100644 OUDS/Foundations/Tests/Extensions/TestInt+SwiftUI.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index c986c6130..2a0bff66a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [Library] Add typography semantic tokens for font letter spacing - [Library] Unit tests for multiple tokens - [Library] Add color semantic composite tokens embeding light and dark modes values - [Library] Add spacing semantic tokens "huge" and "jumbo" @@ -18,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- [Library] Rename of typography font weight raw tokens - [Library] Rename dimension semantic tokens to apply T-Shirt size rules ([#130](https://github.com/Orange-OpenSource/ouds-ios/issues/130)) - [Library] Rename `SizingCompositeSemanticToken` to `MultipleSizingSemanticToken` to keep "composite" word for *Figma* design system - [Library] Rename `ColorCompositeSemanticToken` to `MultipleColorRawToken` to keep "composite" word for *Figma* design system diff --git a/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift index 938bf501d..40bcb9e32 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift @@ -41,10 +41,10 @@ struct CustomFontModifier: ViewModifier { /// The weight to apply on the font, like "Bold" or "BoldItalic" private var weight: String { - sizeClass == .compact ? token.compact.weight : token.regular.weight + sizeClass == .compact ? "\(token.compact.weight.fontWeight)" : "\(token.regular.weight.fontWeight)" } - @Environment(\.horizontalSizeClass) private var sizeClass // TODO: reguar / comapct mode util + @Environment(\.horizontalSizeClass) private var sizeClass // TODO: regular / compact mode util // MARK: - Body diff --git a/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift index 98912a170..03e9772ec 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift @@ -54,7 +54,7 @@ struct TypographyModifier: ViewModifier { /// According to the current `OUDSTheme` and if a custom font is applied or not, returns the suitable `View` private func adaptiveFont() -> Font { if let fontFamilyName = customFontFamily { - let composedFontFamily = fontFamilyName.compose(withFont: adaptiveTypography.weight) + let composedFontFamily = fontFamilyName.compose(withFont: "\(adaptiveTypography.weight.fontWeight)") let customFont: Font = .custom(composedFontFamily, size: adaptiveTypography.size) return customFont } else { @@ -65,10 +65,17 @@ struct TypographyModifier: ViewModifier { /// Applies to the `Content` the *adaptive font* (i.e. *font family*, *font weight*, *font size* and the *line height* /// depending to the current `MultipleTypographyTokens` func body(content: Content) -> some View { - content - .font(adaptiveFont()) - .lineSpacing(adaptiveTypography.lineHeight) - // .tracking() for letter spacing + if #available(iOS 16.0, *) { + content + .font(adaptiveFont()) + .lineSpacing(adaptiveTypography.lineHeight) + .tracking(adaptiveTypography.letterSpacing) + } else { + content + .font(adaptiveFont()) + .lineSpacing(adaptiveTypography.lineHeight) + // tracking() and kerning() only available for iOS 16+ + } } } // swiftlint:enable line_length diff --git a/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md b/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md index e0e285eb3..cf8c010c1 100644 --- a/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md +++ b/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md @@ -47,9 +47,9 @@ MultipleTypographyTokens(compact: TypographyRawTokens.typeBold750, regular: Typo } // And here are the raw tokebs definitions: -public static let typeBold750 = TypographyCompositeRawToken(size: fontSize750, lineHeight: fontLineHeight850, weight: fontWeight700) +public static let typeBold750 = TypographyCompositeRawToken(size: fontSize750, lineHeight: fontLineHeight850, weight: fontWeightBold) -public static let typeBold1050 = TypographyCompositeRawToken(size: fontSize1050, lineHeight: fontLineHeight1150, weight: fontWeight700) +public static let typeBold1050 = TypographyCompositeRawToken(size: fontSize1050, lineHeight: fontLineHeight1150, weight: fontWeightBold) ``` However the _theme_ must know which _font family_ to apply, and this font family can be a _custom one_ or the _system one_. diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift index 168fb9598..b462a5b91 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+TypographySemanticTokens.swift @@ -33,15 +33,15 @@ extension OUDSTheme: TypographySemanticTokens { // MARK: Semantic token - Typography - Font - Weight - @objc open var fontWeightDefault: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight400 } - @objc open var fontWeightStrong: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight700 } - @objc open var fontWeightDisplay: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight700 } - @objc open var fontWeightHeading: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight700 } - @objc open var fontWeightBodyDefault: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight400 } - @objc open var fontWeightBodyStrong: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight700 } - @objc open var fontWeightLabelDefault: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight400 } - @objc open var fontWeightLabelStrong: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight700 } - @objc open var fontWeightCode: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeight400 } + @objc open var fontWeightDefault: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightRegular } + @objc open var fontWeightStrong: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightBold } + @objc open var fontWeightDisplay: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightBold } + @objc open var fontWeightHeading: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightBold } + @objc open var fontWeightBodyDefault: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightRegular } + @objc open var fontWeightBodyStrong: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightBold } + @objc open var fontWeightLabelDefault: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightRegular } + @objc open var fontWeightLabelStrong: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightBold } + @objc open var fontWeightCode: TypographyFontWeightSemanticToken { TypographyRawTokens.fontWeightRegular } // MARK: Semantic token - Typography - Font - Size - Mobile @@ -113,6 +113,41 @@ extension OUDSTheme: TypographySemanticTokens { @objc open var fontLineHeightCodeMedium: TypographyFontLineHeightSemanticToken { TypographyRawTokens.fontLineHeight350 } @objc open var fontLineHeightCodeSmall: TypographyFontLineHeightSemanticToken { TypographyRawTokens.fontLineHeight250 } + // MARK: - Semantic token - Typography - Font - Letter spacing - Mobile (extra-compact/compact) + + @objc open var fontLetterSpacingMobileDisplayLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing850 } + @objc open var fontLetterSpacingMobileDisplayMedium: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing750 } + @objc open var fontLetterSpacingMobileDisplaySmall: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing650 } + @objc open var fontLetterSpacingMobileHeadingXLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing550 } + @objc open var fontLetterSpacingMobileHeadingLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing450 } + @objc open var fontLetterSpacingMobileHeadingMedium: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing350 } + @objc open var fontLetterSpacingMobileHeadingSmall: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing300 } + @objc open var fontLetterSpacingMobileBodyLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing250 } + @objc open var fontLetterSpacingMobileBodyMedium: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing200 } + @objc open var fontLetterSpacingMobileBodySmall: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing150 } + + // MARK: - Semantic token - Typography - Font - Letter spacing - Tablet (regular/medium) + + @objc open var fontLetterSpacingTabletDisplayLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing1450 } + @objc open var fontLetterSpacingTabletDisplayMedium: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing1050 } + @objc open var fontLetterSpacingTabletDisplaySmall: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing850 } + @objc open var fontLetterSpacingTabletHeadingXLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing750 } + @objc open var fontLetterSpacingTabletHeadingLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing550 } + @objc open var fontLetterSpacingTabletHeadingMedium: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing450 } + @objc open var fontLetterSpacingTabletHeadingSmall: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing350 } + @objc open var fontLetterSpacingTabletBodyLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing250 } + @objc open var fontLetterSpacingTabletBodyMedium: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing200 } + @objc open var fontLetterSpacingTabletBodySmall: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing150 } + + // MARK: - Semantic token - Typography - Font - Letter spacing - Others + + @objc open var fontLetterSpacingLabelXLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing300 } + @objc open var fontLetterSpacingLabelLarge: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing250 } + @objc open var fontLetterSpacingLabelMedium: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing200 } + @objc open var fontLetterSpacingLabelSmall: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing150 } + @objc open var fontLetterSpacingCodeMedium: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing200 } + @objc open var fontLetterSpacingCodeSmall: TypographyFontLetterSpacingSemanticToken { TypographyRawTokens.fontLetterSpacing150 } + // MARK: - Semantic tokens - Typography - Composites - Display @objc open var typeDisplayLarge: MultipleTypographyTokens { MultipleTypographyTokens(compact: TypographyRawTokens.typeBold850, regular: TypographyRawTokens.typeBold1450) } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift index 0f0149e26..5f80bc9a9 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift @@ -19,9 +19,10 @@ import OUDSTokensSemantic extension MockTheme { static let mockThemeTypographyFontFamilyRawToken: TypographyFontFamilyRawToken = "oยฐxXSkyBl0GF0ntxXxยฐo" - static let mockThemeTypographyFontWeightRawToken: TypographyFontWeightRawToken = "stiicckkyyyy" + static let mockThemeTypographyFontWeightRawToken: TypographyFontWeightRawToken = 888 static let mockThemeTypographyFontSizeRawToken: TypographyFontSizeRawToken = 666 static let mockThemeTypographyFontLineHeightRawToken: TypographyFontLineHeightRawToken = 321 + static let mockThemeTypographyFontLetterSpacingRawToken: TypographyFontLetterSpacingRawToken = 21_092_024 static let mockThemeMultipleTypographyTokens: MultipleTypographyTokens = MultipleTypographyTokens(compact: TypographyRawTokens.typeBold1850, regular: TypographyRawTokens.typeBold1850) // MARK: Semantic token - Typography - Font - Family @@ -113,6 +114,41 @@ extension MockTheme { override var fontLineHeightCodeMedium: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } override var fontLineHeightCodeSmall: TypographyFontLineHeightSemanticToken { Self.mockThemeTypographyFontLineHeightRawToken } + // MARK: - Semantic token - Typography - Font - Letter spacing - Mobile (extra-compact/compact) + + override var fontLetterSpacingMobileDisplayLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileDisplayMedium: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileDisplaySmall: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileHeadingXLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileHeadingLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileHeadingMedium: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileHeadingSmall: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileBodyLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileBodyMedium: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingMobileBodySmall: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + + // MARK: - Semantic token - Typography - Font - Letter spacing - Tablet (regular/medium) + + override var fontLetterSpacingTabletDisplayLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletDisplayMedium: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletDisplaySmall: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletHeadingXLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletHeadingLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletHeadingMedium: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletHeadingSmall: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletBodyLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletBodyMedium: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingTabletBodySmall: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + + // MARK: - Semantic token - Typography - Font - Letter spacing - Others + + override var fontLetterSpacingLabelXLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingLabelLarge: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingLabelMedium: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingLabelSmall: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingCodeMedium: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + override var fontLetterSpacingCodeSmall: TypographyFontLetterSpacingSemanticToken { Self.mockThemeTypographyFontLetterSpacingRawToken } + // MARK: - Semantic tokens - Typography - Composites - Display override var typeDisplayLarge: MultipleTypographyTokens { Self.mockThemeMultipleTypographyTokens } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift index 7ba6abdc9..a8c6512b9 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift @@ -235,6 +235,140 @@ final class TestThemeOverrideOfTypographySemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.fontSizeCodeSmall == MockTheme.mockThemeTypographyFontSizeRawToken) } + // MARK: - Semantic token - Typography - Font - Letter spacing - Mobile + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileDisplayLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileDisplayLarge, abstractTheme.fontLetterSpacingMobileDisplayLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileDisplayLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileDisplayMedium() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileDisplayMedium, abstractTheme.fontLetterSpacingMobileDisplayMedium) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileDisplayMedium == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileDisplaySmall() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileDisplaySmall, abstractTheme.fontLetterSpacingMobileDisplaySmall) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileDisplaySmall == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileHeadingXLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileHeadingXLarge, abstractTheme.fontLetterSpacingMobileHeadingXLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileHeadingXLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileHeadingLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileHeadingLarge, abstractTheme.fontLetterSpacingMobileHeadingLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileHeadingLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileHeadingMedium() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileHeadingMedium, abstractTheme.fontLetterSpacingMobileHeadingMedium) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileHeadingMedium == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileHeadingSmall() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileHeadingSmall, abstractTheme.fontLetterSpacingMobileHeadingSmall) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileHeadingSmall == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileBodyLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileBodyLarge, abstractTheme.fontLetterSpacingMobileBodyLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileBodyLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileBodyMedium() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileBodyMedium, abstractTheme.fontLetterSpacingMobileBodyMedium) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileBodyMedium == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingMobileBodySmall() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingMobileBodySmall, abstractTheme.fontLetterSpacingMobileBodySmall) + XCTAssertTrue(inheritedTheme.fontLetterSpacingMobileBodySmall == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + // MARK: - Semantic token - Typography - Font - Letter spacing - Tablet + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletDisplayLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletDisplayLarge, abstractTheme.fontLetterSpacingTabletDisplayLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletDisplayLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletDisplayMedium() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletDisplayMedium, abstractTheme.fontLetterSpacingTabletDisplayMedium) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletDisplayMedium == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletDisplaySmall() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletDisplaySmall, abstractTheme.fontLetterSpacingTabletDisplaySmall) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletDisplaySmall == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletHeadingXLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletHeadingXLarge, abstractTheme.fontLetterSpacingTabletHeadingXLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletHeadingXLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletHeadingLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletHeadingLarge, abstractTheme.fontLetterSpacingTabletHeadingLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletHeadingLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletHeadingMedium() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletHeadingMedium, abstractTheme.fontLetterSpacingTabletHeadingMedium) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletHeadingMedium == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletHeadingSmall() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletHeadingSmall, abstractTheme.fontLetterSpacingTabletHeadingSmall) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletHeadingSmall == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletBodyLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletBodyLarge, abstractTheme.fontLetterSpacingTabletBodyLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletBodyLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletBodyMedium() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletBodyMedium, abstractTheme.fontLetterSpacingTabletBodyMedium) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletBodyMedium == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingTabletBodySmall() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingTabletBodySmall, abstractTheme.fontLetterSpacingTabletBodySmall) + XCTAssertTrue(inheritedTheme.fontLetterSpacingTabletBodySmall == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingLabelXLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingLabelXLarge, abstractTheme.fontLetterSpacingLabelXLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingLabelXLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingLabelLarge() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingLabelLarge, abstractTheme.fontLetterSpacingLabelLarge) + XCTAssertTrue(inheritedTheme.fontLetterSpacingLabelLarge == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingLabelMedium() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingLabelMedium, abstractTheme.fontLetterSpacingLabelMedium) + XCTAssertTrue(inheritedTheme.fontLetterSpacingLabelMedium == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingLabelSmall() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingLabelSmall, abstractTheme.fontLetterSpacingLabelSmall) + XCTAssertTrue(inheritedTheme.fontLetterSpacingLabelSmall == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingCodeMedium() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingCodeMedium, abstractTheme.fontLetterSpacingCodeMedium) + XCTAssertTrue(inheritedTheme.fontLetterSpacingCodeMedium == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenFontLetterSpacingCodeSmall() throws { + XCTAssertNotEqual(inheritedTheme.fontLetterSpacingCodeSmall, abstractTheme.fontLetterSpacingCodeSmall) + XCTAssertTrue(inheritedTheme.fontLetterSpacingCodeSmall == MockTheme.mockThemeTypographyFontLetterSpacingRawToken) + } + // MARK: - Semantic token - Typography - Font - Line height - Mobile func testInheritedThemeCanOverrideSemanticTokenFontLineHeightMobileDisplayLarge() throws { diff --git a/OUDS/Core/Tokens/RawTokens/Sources/TypeAliases/TypographyRawTokens+Aliases.swift b/OUDS/Core/Tokens/RawTokens/Sources/TypeAliases/TypographyRawTokens+Aliases.swift index 530bf1a69..855a57363 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/TypeAliases/TypographyRawTokens+Aliases.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/TypeAliases/TypographyRawTokens+Aliases.swift @@ -16,8 +16,8 @@ import Foundation /// In the global design system tool, *font family* raw tokens are basically `String` values, to keep grammar clean and clear with design system grammar. public typealias TypographyFontFamilyRawToken = String -/// In the global design system tool, *font weight* raw tokens are basically `String` values, to keep grammar clean and clear with design system grammar. -public typealias TypographyFontWeightRawToken = String +/// In the global design system tool, *font weight* raw tokens are basically `Int` values, to keep grammar clean and clear with design system grammar. +public typealias TypographyFontWeightRawToken = Int /// In the global design system tool, *font size* raw tokens are basically `CGFloat` values, to keep grammar clean and clear with design system grammar. public typealias TypographyFontSizeRawToken = CGFloat diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Composites.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Composites.swift index 4dec4b57f..2a907fbdd 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Composites.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Composites.swift @@ -21,45 +21,45 @@ extension TypographyRawTokens { // MARK: Primitive token - Typography - Composite - public static let typeRegular150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing150) + public static let typeRegular150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeightRegular, letterSpacing: fontLetterSpacing150) - public static let typeRegular175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing175) + public static let typeRegular175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeightRegular, letterSpacing: fontLetterSpacing175) - public static let typeRegular200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight400, letterSpacing: fontLetterSpacing200) + public static let typeRegular200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeightRegular, letterSpacing: fontLetterSpacing200) - public static let typeRegular250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight400, letterSpacing: fontLetterSpacing250) + public static let typeRegular250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeightRegular, letterSpacing: fontLetterSpacing250) - public static let typeBold150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing150) + public static let typeBold150 = TypographyCompositeRawToken(size: fontSize150, lineHeight: fontLineHeight250, weight: fontWeightBold, letterSpacing: fontLetterSpacing150) - public static let typeBold175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing175) + public static let typeBold175 = TypographyCompositeRawToken(size: fontSize175, lineHeight: fontLineHeight250, weight: fontWeightBold, letterSpacing: fontLetterSpacing175) - public static let typeBold200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeight700, letterSpacing: fontLetterSpacing200) + public static let typeBold200 = TypographyCompositeRawToken(size: fontSize200, lineHeight: fontLineHeight250, weight: fontWeightBold, letterSpacing: fontLetterSpacing200) - public static let typeBold250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeight700, letterSpacing: fontLetterSpacing250) + public static let typeBold250 = TypographyCompositeRawToken(size: fontSize250, lineHeight: fontLineHeight350, weight: fontWeightBold, letterSpacing: fontLetterSpacing250) - public static let typeBold300 = TypographyCompositeRawToken(size: fontSize300, lineHeight: fontLineHeight450, weight: fontWeight700, letterSpacing: fontLetterSpacing300) + public static let typeBold300 = TypographyCompositeRawToken(size: fontSize300, lineHeight: fontLineHeight450, weight: fontWeightBold, letterSpacing: fontLetterSpacing300) - public static let typeBold350 = TypographyCompositeRawToken(size: fontSize350, lineHeight: fontLineHeight550, weight: fontWeight700, letterSpacing: fontLetterSpacing350) + public static let typeBold350 = TypographyCompositeRawToken(size: fontSize350, lineHeight: fontLineHeight550, weight: fontWeightBold, letterSpacing: fontLetterSpacing350) - public static let typeBold450 = TypographyCompositeRawToken(size: fontSize450, lineHeight: fontLineHeight550, weight: fontWeight700, letterSpacing: fontLetterSpacing450) + public static let typeBold450 = TypographyCompositeRawToken(size: fontSize450, lineHeight: fontLineHeight550, weight: fontWeightBold, letterSpacing: fontLetterSpacing450) - public static let typeBold550 = TypographyCompositeRawToken(size: fontSize550, lineHeight: fontLineHeight650, weight: fontWeight700, letterSpacing: fontLetterSpacing550) + public static let typeBold550 = TypographyCompositeRawToken(size: fontSize550, lineHeight: fontLineHeight650, weight: fontWeightBold, letterSpacing: fontLetterSpacing550) - public static let typeBold650 = TypographyCompositeRawToken(size: fontSize650, lineHeight: fontLineHeight750, weight: fontWeight700, letterSpacing: fontLetterSpacing650) + public static let typeBold650 = TypographyCompositeRawToken(size: fontSize650, lineHeight: fontLineHeight750, weight: fontWeightBold, letterSpacing: fontLetterSpacing650) - public static let typeBold750 = TypographyCompositeRawToken(size: fontSize750, lineHeight: fontLineHeight850, weight: fontWeight700, letterSpacing: fontLetterSpacing750) + public static let typeBold750 = TypographyCompositeRawToken(size: fontSize750, lineHeight: fontLineHeight850, weight: fontWeightBold, letterSpacing: fontLetterSpacing750) - public static let typeBold850 = TypographyCompositeRawToken(size: fontSize850, lineHeight: fontLineHeight950, weight: fontWeight700, letterSpacing: fontLetterSpacing850) + public static let typeBold850 = TypographyCompositeRawToken(size: fontSize850, lineHeight: fontLineHeight950, weight: fontWeightBold, letterSpacing: fontLetterSpacing850) - public static let typeBold950 = TypographyCompositeRawToken(size: fontSize950, lineHeight: fontLineHeight1050, weight: fontWeight700, letterSpacing: fontLetterSpacing950) + public static let typeBold950 = TypographyCompositeRawToken(size: fontSize950, lineHeight: fontLineHeight1050, weight: fontWeightBold, letterSpacing: fontLetterSpacing950) - public static let typeBold1050 = TypographyCompositeRawToken(size: fontSize1050, lineHeight: fontLineHeight1150, weight: fontWeight700, letterSpacing: fontLetterSpacing1050) + public static let typeBold1050 = TypographyCompositeRawToken(size: fontSize1050, lineHeight: fontLineHeight1150, weight: fontWeightBold, letterSpacing: fontLetterSpacing1050) - public static let typeBold1150 = TypographyCompositeRawToken(size: fontSize1150, lineHeight: fontLineHeight1250, weight: fontWeight700, letterSpacing: fontLetterSpacing1150) + public static let typeBold1150 = TypographyCompositeRawToken(size: fontSize1150, lineHeight: fontLineHeight1250, weight: fontWeightBold, letterSpacing: fontLetterSpacing1150) - public static let typeBold1250 = TypographyCompositeRawToken(size: fontSize1250, lineHeight: fontLineHeight1350, weight: fontWeight700, letterSpacing: fontLetterSpacing1250) + public static let typeBold1250 = TypographyCompositeRawToken(size: fontSize1250, lineHeight: fontLineHeight1350, weight: fontWeightBold, letterSpacing: fontLetterSpacing1250) - public static let typeBold1450 = TypographyCompositeRawToken(size: fontSize1450, lineHeight: fontLineHeight1450, weight: fontWeight700, letterSpacing: fontLetterSpacing1450) + public static let typeBold1450 = TypographyCompositeRawToken(size: fontSize1450, lineHeight: fontLineHeight1450, weight: fontWeightBold, letterSpacing: fontLetterSpacing1450) - public static let typeBold1850 = TypographyCompositeRawToken(size: fontSize1850, lineHeight: fontLineHeight1850, weight: fontWeight700, letterSpacing: fontLetterSpacing1850) + public static let typeBold1850 = TypographyCompositeRawToken(size: fontSize1850, lineHeight: fontLineHeight1850, weight: fontWeightBold, letterSpacing: fontLetterSpacing1850) } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift index 07df169a3..4f3c119eb 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift @@ -99,12 +99,16 @@ extension TypographyRawTokens { // MARK: Primitive token - Typography - Font weight - public static let fontWeight100: TypographyFontWeightRawToken = "thin" - public static let fontWeight200: TypographyFontWeightRawToken = "ultraLight" - public static let fontWeight300: TypographyFontWeightRawToken = "light" - public static let fontWeight400: TypographyFontWeightRawToken = "regular" - public static let fontWeight500: TypographyFontWeightRawToken = "medium" - public static let fontWeight600: TypographyFontWeightRawToken = "semibold" - public static let fontWeight700: TypographyFontWeightRawToken = "bold" - public static let fontWeight900: TypographyFontWeightRawToken = "heavy" + // WARNING: Some tokens will be useless (extra light, extra bold, extra black) + // But need to keep the Figma logic and use our conversion algorithm + public static let fontWeightThin: TypographyFontWeightRawToken = 100 + public static let fontWeightExtraLight: TypographyFontWeightRawToken = 200 + public static let fontWeightLight: TypographyFontWeightRawToken = 300 + public static let fontWeightRegular: TypographyFontWeightRawToken = 400 + public static let fontWeightMedium: TypographyFontWeightRawToken = 500 + public static let fontWeightSemiBold: TypographyFontWeightRawToken = 600 + public static let fontWeightBold: TypographyFontWeightRawToken = 700 + public static let fontWeightExtraBold: TypographyFontWeightRawToken = 800 + public static let fontWeightBlack: TypographyFontWeightRawToken = 900 + public static let fontWeightExtraBlack: TypographyFontWeightRawToken = 950 } diff --git a/OUDS/Core/Tokens/RawTokens/Tests/TypographyRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/TypographyRawTokensTests.swift index f054990d0..fb84a4891 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/TypographyRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/TypographyRawTokensTests.swift @@ -272,40 +272,40 @@ final class TypographyRawTokensTests: XCTestCase { // MARK: - Primitive token - Typography - Font weight func testTypographyRawTokensFontWeightsAreAllDifferent() throws { - XCTAssertNotEqual(TypographyRawTokens.fontWeight100, TypographyRawTokens.fontWeight200) - XCTAssertNotEqual(TypographyRawTokens.fontWeight100, TypographyRawTokens.fontWeight300) - XCTAssertNotEqual(TypographyRawTokens.fontWeight100, TypographyRawTokens.fontWeight400) - XCTAssertNotEqual(TypographyRawTokens.fontWeight100, TypographyRawTokens.fontWeight500) - XCTAssertNotEqual(TypographyRawTokens.fontWeight100, TypographyRawTokens.fontWeight600) - XCTAssertNotEqual(TypographyRawTokens.fontWeight100, TypographyRawTokens.fontWeight700) - XCTAssertNotEqual(TypographyRawTokens.fontWeight100, TypographyRawTokens.fontWeight900) - - XCTAssertNotEqual(TypographyRawTokens.fontWeight200, TypographyRawTokens.fontWeight300) - XCTAssertNotEqual(TypographyRawTokens.fontWeight200, TypographyRawTokens.fontWeight400) - XCTAssertNotEqual(TypographyRawTokens.fontWeight200, TypographyRawTokens.fontWeight500) - XCTAssertNotEqual(TypographyRawTokens.fontWeight200, TypographyRawTokens.fontWeight600) - XCTAssertNotEqual(TypographyRawTokens.fontWeight200, TypographyRawTokens.fontWeight700) - XCTAssertNotEqual(TypographyRawTokens.fontWeight200, TypographyRawTokens.fontWeight900) - - XCTAssertNotEqual(TypographyRawTokens.fontWeight300, TypographyRawTokens.fontWeight400) - XCTAssertNotEqual(TypographyRawTokens.fontWeight300, TypographyRawTokens.fontWeight500) - XCTAssertNotEqual(TypographyRawTokens.fontWeight300, TypographyRawTokens.fontWeight600) - XCTAssertNotEqual(TypographyRawTokens.fontWeight300, TypographyRawTokens.fontWeight700) - XCTAssertNotEqual(TypographyRawTokens.fontWeight300, TypographyRawTokens.fontWeight900) - - XCTAssertNotEqual(TypographyRawTokens.fontWeight400, TypographyRawTokens.fontWeight500) - XCTAssertNotEqual(TypographyRawTokens.fontWeight400, TypographyRawTokens.fontWeight600) - XCTAssertNotEqual(TypographyRawTokens.fontWeight400, TypographyRawTokens.fontWeight700) - XCTAssertNotEqual(TypographyRawTokens.fontWeight400, TypographyRawTokens.fontWeight900) - - XCTAssertNotEqual(TypographyRawTokens.fontWeight500, TypographyRawTokens.fontWeight600) - XCTAssertNotEqual(TypographyRawTokens.fontWeight500, TypographyRawTokens.fontWeight700) - XCTAssertNotEqual(TypographyRawTokens.fontWeight500, TypographyRawTokens.fontWeight900) - - XCTAssertNotEqual(TypographyRawTokens.fontWeight600, TypographyRawTokens.fontWeight700) - XCTAssertNotEqual(TypographyRawTokens.fontWeight600, TypographyRawTokens.fontWeight900) - - XCTAssertNotEqual(TypographyRawTokens.fontWeight700, TypographyRawTokens.fontWeight900) + XCTAssertNotEqual(TypographyRawTokens.fontWeightThin, TypographyRawTokens.fontWeightExtraLight) + XCTAssertNotEqual(TypographyRawTokens.fontWeightThin, TypographyRawTokens.fontWeightLight) + XCTAssertNotEqual(TypographyRawTokens.fontWeightThin, TypographyRawTokens.fontWeightRegular) + XCTAssertNotEqual(TypographyRawTokens.fontWeightThin, TypographyRawTokens.fontWeightMedium) + XCTAssertNotEqual(TypographyRawTokens.fontWeightThin, TypographyRawTokens.fontWeightSemiBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightThin, TypographyRawTokens.fontWeightBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightThin, TypographyRawTokens.fontWeightExtraBold) + + XCTAssertNotEqual(TypographyRawTokens.fontWeightExtraLight, TypographyRawTokens.fontWeightLight) + XCTAssertNotEqual(TypographyRawTokens.fontWeightExtraLight, TypographyRawTokens.fontWeightRegular) + XCTAssertNotEqual(TypographyRawTokens.fontWeightExtraLight, TypographyRawTokens.fontWeightMedium) + XCTAssertNotEqual(TypographyRawTokens.fontWeightExtraLight, TypographyRawTokens.fontWeightSemiBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightExtraLight, TypographyRawTokens.fontWeightBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightExtraLight, TypographyRawTokens.fontWeightExtraBold) + + XCTAssertNotEqual(TypographyRawTokens.fontWeightLight, TypographyRawTokens.fontWeightRegular) + XCTAssertNotEqual(TypographyRawTokens.fontWeightLight, TypographyRawTokens.fontWeightMedium) + XCTAssertNotEqual(TypographyRawTokens.fontWeightLight, TypographyRawTokens.fontWeightSemiBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightLight, TypographyRawTokens.fontWeightBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightLight, TypographyRawTokens.fontWeightExtraBold) + + XCTAssertNotEqual(TypographyRawTokens.fontWeightRegular, TypographyRawTokens.fontWeightMedium) + XCTAssertNotEqual(TypographyRawTokens.fontWeightRegular, TypographyRawTokens.fontWeightSemiBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightRegular, TypographyRawTokens.fontWeightBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightRegular, TypographyRawTokens.fontWeightExtraBold) + + XCTAssertNotEqual(TypographyRawTokens.fontWeightMedium, TypographyRawTokens.fontWeightSemiBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightMedium, TypographyRawTokens.fontWeightBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightMedium, TypographyRawTokens.fontWeightExtraBold) + + XCTAssertNotEqual(TypographyRawTokens.fontWeightSemiBold, TypographyRawTokens.fontWeightBold) + XCTAssertNotEqual(TypographyRawTokens.fontWeightSemiBold, TypographyRawTokens.fontWeightExtraBold) + + XCTAssertNotEqual(TypographyRawTokens.fontWeightBold, TypographyRawTokens.fontWeightExtraBold) } // MARK: - Primitive token - Typography - Composite diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/TypographySemanticTokens+Aliases.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/TypographySemanticTokens+Aliases.swift index 88e7441a4..4b6b37038 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/TypographySemanticTokens+Aliases.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/TypeAliases/TypographySemanticTokens+Aliases.swift @@ -24,3 +24,6 @@ public typealias TypographyFontSizeSemanticToken = TypographyFontSizeRawToken /// The global design system tools uses verbs of semantic token for font line height, which is basically a raw token for font line height public typealias TypographyFontLineHeightSemanticToken = TypographyFontLineHeightRawToken + +/// The global design system tools uses verbs of semantic token for font letter spacing, which is basically a raw token for font letter spacing +public typealias TypographyFontLetterSpacingSemanticToken = TypographyFontLetterSpacingRawToken diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift index 27e807f81..698282f0a 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/SizingSemanticTokens.swift @@ -76,7 +76,7 @@ public protocol SizingSemanticTokens { var sizeIconWithTypeLabelXLargeShort: SizingSemanticToken { get } var sizeIconWithTypeLabelXLargeMedium: SizingSemanticToken { get } - var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { get } // TODO: #122: Unit test to add + var sizeIconWithTypeLabelXLargeTall: SizingSemanticToken { get } // MARK: - Semantic token - Sizing - Max width typography diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift index f93993d49..f46bf46b1 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/TypographySemanticTokens.swift @@ -25,8 +25,6 @@ public protocol TypographySemanticTokens { // MARK: - Semantic token - Typography - Font - Family - // TODO: Should we suffix our tokens names by "iOS"? - var fontFamily: TypographyFontFamilyRawToken { get } var fontFamilyDisplay: TypographyFontFamilySemanticToken { get } var fontFamilyHeading: TypographyFontFamilySemanticToken { get } @@ -116,8 +114,40 @@ public protocol TypographySemanticTokens { var fontLineHeightCodeMedium: TypographyFontLineHeightSemanticToken { get } var fontLineHeightCodeSmall: TypographyFontLineHeightSemanticToken { get } - // MARK: - Semantic token - Typography - Font - Letter spacing - // TODO: Missing details about the types of the associated raw tokens + // MARK: - Semantic token - Typography - Font - Letter spacing - Mobile (extra-compact/compact) + + var fontLetterSpacingMobileDisplayLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileDisplayMedium: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileDisplaySmall: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileHeadingXLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileHeadingLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileHeadingMedium: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileHeadingSmall: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileBodyLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileBodyMedium: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingMobileBodySmall: TypographyFontLetterSpacingSemanticToken { get } + + // MARK: - Semantic token - Typography - Font - Letter spacing - Tablet (regular/medium) + + var fontLetterSpacingTabletDisplayLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletDisplayMedium: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletDisplaySmall: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletHeadingXLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletHeadingLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletHeadingMedium: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletHeadingSmall: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletBodyLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletBodyMedium: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingTabletBodySmall: TypographyFontLetterSpacingSemanticToken { get } + + // MARK: - Semantic token - Typography - Font - Letter spacing - Others + + var fontLetterSpacingLabelXLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingLabelLarge: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingLabelMedium: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingLabelSmall: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingCodeMedium: TypographyFontLetterSpacingSemanticToken { get } + var fontLetterSpacingCodeSmall: TypographyFontLetterSpacingSemanticToken { get } // MARK: - Semantic tokens - Typography - Composites - Display diff --git a/OUDS/Foundations/Sources/Extensions/Font+extensions.swift b/OUDS/Foundations/Sources/Extensions/Font+extensions.swift new file mode 100644 index 000000000..2f5f01c55 --- /dev/null +++ b/OUDS/Foundations/Sources/Extensions/Font+extensions.swift @@ -0,0 +1,44 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +extension Font.Weight: CustomStringConvertible { + + /// Computes from the current `self` value a description of the object which can be used later + /// for example for font loading by appending this value to the font name. + public var description: String { + switch self { + case .ultraLight: + return "Ultra-Light" + case .thin: + return "Thin" + case .light: + return "Light" + case .regular: + return "Regular" + case .medium: + return "Medium" + case .semibold: + return "Semi-Bold" + case .bold: + return "Bold" + case .heavy: + return "Heavy" + case .black: + return "Black" + default: + return "" + } + } +} diff --git a/OUDS/Foundations/Sources/Extensions/Int+SwiftUI.swift b/OUDS/Foundations/Sources/Extensions/Int+SwiftUI.swift new file mode 100644 index 000000000..b32328952 --- /dev/null +++ b/OUDS/Foundations/Sources/Extensions/Int+SwiftUI.swift @@ -0,0 +1,34 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +extension Int { + + /// `Int` extension to get `Font.Weight` of *SwiftUI* from its integer representation. + public var fontWeight: Font.Weight { + if self < 0 { return Font.Weight.regular } + if self <= 100 { return Font.Weight.thin } + if self <= 200 { return Font.Weight.ultraLight } + if self <= 300 { return Font.Weight.light } + if self <= 400 { return Font.Weight.regular } + if self <= 500 { return Font.Weight.medium } + if self <= 600 { return Font.Weight.semibold } + if self <= 700 { return Font.Weight.bold } + // No Font.Weight.extraBold for 800 + // No Font.Weight.extraBlack for 950 + // From 701 to 950, assume it is the only higher value, i.e. black + if self <= 950 { return Font.Weight.black } + return Font.Weight.regular + } +} diff --git a/OUDS/Foundations/Sources/Extensions/String+SwiftUI.swift b/OUDS/Foundations/Sources/Extensions/String+SwiftUI.swift index 72a56e8cb..276ef3593 100644 --- a/OUDS/Foundations/Sources/Extensions/String+SwiftUI.swift +++ b/OUDS/Foundations/Sources/Extensions/String+SwiftUI.swift @@ -21,19 +21,6 @@ extension String { Color(hexadecimalCode: self) } - /// `String` extension to get `Font.Weight` of *SwiftUI* from its string representation. - public var fontWeight: Font.Weight { - if self == "thin" { return Font.Weight.thin } - if self == "ultraLight" { return Font.Weight.ultraLight } - if self == "light" { return Font.Weight.light } - if self == "regular" { return Font.Weight.regular } - if self == "medium" { return Font.Weight.medium } - if self == "semibold" { return Font.Weight.semibold } - if self == "bold" { return Font.Weight.bold } - if self == "heavy" { return Font.Weight.heavy } - return Font.Weight.regular - } - /// Forges the font name which is expected for the given weight. /// Beware, the function does not check if the font exists. /// - Parameters: @@ -45,14 +32,11 @@ extension String { OUDSLogger.error("No font family to compose with weight") return self } - var characters = Array(weight) - guard characters.count > 0, let formattedFirst = characters[0].uppercased().first else { - OUDSLogger.error("The given weight cannot be parsed to compose a font family") + if !weight.isEmpty { + return self + "-" + weight + } else { return self } - characters[0] = formattedFirst - let formattedWeight = String(characters) - return self + "-" + formattedWeight // TODO: String manipulation can be costly, add values in Cache } } diff --git a/OUDS/Foundations/Tests/Extensions/TestFont+extensions.swift b/OUDS/Foundations/Tests/Extensions/TestFont+extensions.swift new file mode 100644 index 000000000..3ffa25a78 --- /dev/null +++ b/OUDS/Foundations/Tests/Extensions/TestFont+extensions.swift @@ -0,0 +1,44 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import Foundation +import OUDSFoundations +import SwiftUI +import XCTest + +/// Class to test `Font` extensions related to `SwiftUI` +final class TestFont_SwiftUI: XCTestCase { + + /// Tests description values of font weight + func testFontWeightDescription() throws { + XCTAssertTrue(Font.Weight.ultraLight.description == "Ultra-Light") + XCTAssertTrue(Font.Weight.thin.description == "Thin") + XCTAssertTrue(Font.Weight.light.description == "Light") + XCTAssertTrue(Font.Weight.regular.description == "Regular") + XCTAssertTrue(Font.Weight.medium.description == "Medium") + XCTAssertTrue(Font.Weight.semibold.description == "Semi-Bold") + XCTAssertTrue(Font.Weight.bold.description == "Bold") + XCTAssertTrue(Font.Weight.heavy.description == "Heavy") + XCTAssertTrue(Font.Weight.black.description == "Black") + + XCTAssertTrue("\(Font.Weight.ultraLight)" == "Ultra-Light") + XCTAssertTrue("\(Font.Weight.thin)" == "Thin") + XCTAssertTrue("\(Font.Weight.light)" == "Light") + XCTAssertTrue("\(Font.Weight.regular)" == "Regular") + XCTAssertTrue("\(Font.Weight.medium)" == "Medium") + XCTAssertTrue("\(Font.Weight.semibold)" == "Semi-Bold") + XCTAssertTrue("\(Font.Weight.bold)" == "Bold") + XCTAssertTrue("\(Font.Weight.heavy)" == "Heavy") + XCTAssertTrue("\(Font.Weight.black)" == "Black") + } +} diff --git a/OUDS/Foundations/Tests/Extensions/TestInt+SwiftUI.swift b/OUDS/Foundations/Tests/Extensions/TestInt+SwiftUI.swift new file mode 100644 index 000000000..a55f08ec4 --- /dev/null +++ b/OUDS/Foundations/Tests/Extensions/TestInt+SwiftUI.swift @@ -0,0 +1,62 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import Foundation +import OUDSFoundations +import SwiftUI +import XCTest + +/// Class to test `Int` extensions related to `SwiftUI` +final class TestInt_SwiftUI: XCTestCase { + + /// Tests values of font weight + func testFontWeightValues() throws { + + // Expected values + XCTAssertTrue(0.fontWeight == Font.Weight.thin) + XCTAssertTrue(1.fontWeight == Font.Weight.thin) + XCTAssertTrue(99.fontWeight == Font.Weight.thin) + XCTAssertTrue(100.fontWeight == Font.Weight.thin) + + XCTAssertTrue(101.fontWeight == Font.Weight.ultraLight) + XCTAssertTrue(200.fontWeight == Font.Weight.ultraLight) + + XCTAssertTrue(201.fontWeight == Font.Weight.light) + XCTAssertTrue(300.fontWeight == Font.Weight.light) + + XCTAssertTrue(301.fontWeight == Font.Weight.regular) + XCTAssertTrue(400.fontWeight == Font.Weight.regular) + + XCTAssertTrue(401.fontWeight == Font.Weight.medium) + XCTAssertTrue(500.fontWeight == Font.Weight.medium) + + XCTAssertTrue(501.fontWeight == Font.Weight.semibold) + XCTAssertTrue(600.fontWeight == Font.Weight.semibold) + + XCTAssertTrue(601.fontWeight == Font.Weight.bold) + XCTAssertTrue(700.fontWeight == Font.Weight.bold) + + XCTAssertTrue(701.fontWeight == Font.Weight.black) + XCTAssertTrue(800.fontWeight == Font.Weight.black) + XCTAssertTrue(801.fontWeight == Font.Weight.black) + XCTAssertTrue(900.fontWeight == Font.Weight.black) + XCTAssertTrue(901.fontWeight == Font.Weight.black) + XCTAssertTrue(950.fontWeight == Font.Weight.black) + + XCTAssertTrue(951.fontWeight == Font.Weight.regular) + + // Other default cases + XCTAssertTrue(1000.fontWeight == Font.Weight.regular) + XCTAssertTrue((-1).fontWeight == Font.Weight.regular) + } +} diff --git a/OUDS/Foundations/Tests/Extensions/TestString+SwiftUI.swift b/OUDS/Foundations/Tests/Extensions/TestString+SwiftUI.swift index 5f5357034..6caedcd4b 100644 --- a/OUDS/Foundations/Tests/Extensions/TestString+SwiftUI.swift +++ b/OUDS/Foundations/Tests/Extensions/TestString+SwiftUI.swift @@ -12,62 +12,69 @@ // import Foundation -import XCTest -import SwiftUI import OUDSFoundations +import SwiftUI +import XCTest /// Class to test `String` extensions related to `SwiftUI` final class TestString_SwiftUI: XCTestCase { - /// Tests values of font weight - func testFontWeightValues() { - - // Expected values - XCTAssertTrue("thin".fontWeight == Font.Weight.thin) - XCTAssertTrue("ultraLight".fontWeight == Font.Weight.ultraLight) - XCTAssertTrue("light".fontWeight == Font.Weight.light) - XCTAssertTrue("regular".fontWeight == Font.Weight.regular) - XCTAssertTrue("medium".fontWeight == Font.Weight.medium) - XCTAssertTrue("semibold".fontWeight == Font.Weight.semibold) - XCTAssertTrue("bold".fontWeight == Font.Weight.bold) - XCTAssertTrue("heavy".fontWeight == Font.Weight.heavy) - - // Other default cases - XCTAssertTrue("".fontWeight == Font.Weight.regular) - XCTAssertTrue("42".fontWeight == Font.Weight.regular) - XCTAssertTrue("Yowzah!".fontWeight == Font.Weight.regular) - } - /// Tests the font family values created using a font amily name and a weight func testComposeWithFonts() { var result: String - // Expected values + // Expected values - use string scription of Font.Weight - result = "Menlo".compose(withFont: "thin") + result = "Menlo".compose(withFont: Font.Weight.thin.description) XCTAssertTrue(result == "Menlo-Thin", "Current value is '\(result)") + result = "Menlo".compose(withFont: Font.Weight.ultraLight.description) + XCTAssertTrue(result == "Menlo-Ultra-Light", "Current value is '\(result)") + + result = "Menlo".compose(withFont: Font.Weight.light.description) + XCTAssertTrue(result == "Menlo-Light", "Current value is '\(result)") + + result = "Menlo".compose(withFont: Font.Weight.regular.description) + XCTAssertTrue(result == "Menlo-Regular", "Current value is '\(result)") + + result = "Menlo".compose(withFont: Font.Weight.medium.description) + XCTAssertTrue(result == "Menlo-Medium", "Current value is '\(result)") + + result = "Menlo".compose(withFont: Font.Weight.semibold.description) + XCTAssertTrue(result == "Menlo-Semi-Bold", "Current value is '\(result)") + + result = "Menlo".compose(withFont: Font.Weight.bold.description) + XCTAssertTrue(result == "Menlo-Bold", "Current value is '\(result)") + + result = "Menlo".compose(withFont: Font.Weight.heavy.description) + XCTAssertTrue(result == "Menlo-Heavy", "Current value is '\(result)") + + // Expected values - no uper case if raw string given + + result = "Menlo".compose(withFont: "thin") + XCTAssertTrue(result == "Menlo-thin", "Current value is '\(result)") + result = "Menlo".compose(withFont: "ultraLight") - XCTAssertTrue(result == "Menlo-UltraLight", "Current value is '\(result)") + XCTAssertTrue(result == "Menlo-ultraLight", "Current value is '\(result)") result = "Menlo".compose(withFont: "light") - XCTAssertTrue(result == "Menlo-Light", "Current value is '\(result)") + XCTAssertTrue(result == "Menlo-light", "Current value is '\(result)") result = "Menlo".compose(withFont: "regular") - XCTAssertTrue(result == "Menlo-Regular", "Current value is '\(result)") + XCTAssertTrue(result == "Menlo-regular", "Current value is '\(result)") result = "Menlo".compose(withFont: "medium") - XCTAssertTrue(result == "Menlo-Medium", "Current value is '\(result)") + XCTAssertTrue(result == "Menlo-medium", "Current value is '\(result)") result = "Menlo".compose(withFont: "semibold") - XCTAssertTrue(result == "Menlo-Semibold", "Current value is '\(result)") + XCTAssertTrue(result == "Menlo-semibold", "Current value is '\(result)") result = "Menlo".compose(withFont: "bold") - XCTAssertTrue(result == "Menlo-Bold", "Current value is '\(result)") + XCTAssertTrue(result == "Menlo-bold", "Current value is '\(result)") result = "Menlo".compose(withFont: "heavy") - XCTAssertTrue(result == "Menlo-Heavy", "Current value is '\(result)") + XCTAssertTrue(result == "Menlo-heavy", "Current value is '\(result)") // Edge cases From 8707970ba9ed97c8b6e02fa55b25d179b656702c Mon Sep 17 00:00:00 2001 From: Tayeb Sedraia Date: Wed, 2 Oct 2024 16:07:11 +0200 Subject: [PATCH 18/25] refactor: remove web-specific grid raw tokens and non-max-min-width grid semantic tokens (#139) (#147) Remove grid tokens, both raw and semantic versions, not used for iOS Reviewed-by: Pierre-Yves Lapersonne Co-authored-by: Tayeb Sedraia Co-authored-by: Pierre-Yves Lapersonne Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 1 + .../OUDSTheme+GridSemanticTokens.swift | 3 - .../MockTheme+GridSemanticTokens.swift | 3 - ...estThemeOverrideOfGridSemanticTokens.swift | 15 --- .../Sources/Values/GridRawTokens+Values.swift | 29 ----- .../RawTokens/Tests/GridRawTokensTests.swift | 114 ------------------ .../Sources/Values/GridSemanticTokens.swift | 3 - 7 files changed, 1 insertion(+), 167 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a0bff66a..f872f6ca8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- [Library] Remove web-specific grid tokens, keep compact/regular widths ([#147](https://github.com/Orange-OpenSource/ouds-ios/pull/147)) - [Library] Rename of typography font weight raw tokens - [Library] Rename dimension semantic tokens to apply T-Shirt size rules ([#130](https://github.com/Orange-OpenSource/ouds-ios/issues/130)) - [Library] Rename `SizingCompositeSemanticToken` to `MultipleSizingSemanticToken` to keep "composite" word for *Figma* design system diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+GridSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+GridSemanticTokens.swift index e11b50910..bb4b16a06 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+GridSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+GridSemanticTokens.swift @@ -24,7 +24,6 @@ extension OUDSTheme: GridSemanticTokens { // MARK: Semantic token - Grid - iOS Extra compact - @objc open var gridExtraCompactWidth: GridExtraCompactSemanticToken { GridRawTokens.gridWidth100 } @objc open var gridExtraCompactMinWidth: GridExtraCompactSemanticToken { GridRawTokens.gridMinWidthExtraCompact } @objc open var gridExtraCompactMaxWidth: GridExtraCompactSemanticToken { GridRawTokens.gridMaxWidthExtraCompact } @objc open var gridExtraCompactMargin: GridExtraCompactSemanticToken { GridRawTokens.gridMargin100 } @@ -33,7 +32,6 @@ extension OUDSTheme: GridSemanticTokens { // MARK: Semantic token - Grid - iOS Compact - @objc open var gridCompactWidth: GridExtraCompactSemanticToken { GridRawTokens.gridWidth200 } @objc open var gridCompactMinWidth: GridCompactSemanticToken { GridRawTokens.gridMinWidthCompact } @objc open var gridCompactMaxWidth: GridCompactSemanticToken { GridRawTokens.gridMaxWidthCompact } @objc open var gridCompactMargin: GridCompactSemanticToken { GridRawTokens.gridMargin300 } @@ -42,7 +40,6 @@ extension OUDSTheme: GridSemanticTokens { // MARK: Semantic token - Grid - iOS Regular - @objc open var gridRegularWidth: GridExtraCompactSemanticToken { GridRawTokens.gridWidth400 } @objc open var gridRegularMinWidth: GridRegularSemanticToken { GridRawTokens.gridMinWidthRegular } @objc open var gridRegularMaxWidth: GridRegularSemanticToken { GridRawTokens.gridMaxWidthRegular } @objc open var gridRegularMargin: GridRegularSemanticToken { GridRawTokens.gridMargin500 } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+GridSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+GridSemanticTokens.swift index de11c5db0..eb782f8ad 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+GridSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+GridSemanticTokens.swift @@ -19,21 +19,18 @@ extension MockTheme { static let mockThemeGridRawToken: GridRawToken = 3630 - override var gridExtraCompactWidth: GridExtraCompactSemanticToken { Self.mockThemeGridRawToken } override var gridExtraCompactMinWidth: GridExtraCompactSemanticToken { Self.mockThemeGridRawToken } override var gridExtraCompactMaxWidth: GridExtraCompactSemanticToken { Self.mockThemeGridRawToken } override var gridExtraCompactMargin: GridExtraCompactSemanticToken { Self.mockThemeGridRawToken } override var gridExtraCompactColumnGap: GridExtraCompactSemanticToken { Self.mockThemeGridRawToken } override var gridExtraCompactColumnCount: GridExtraCompactSemanticToken { Self.mockThemeGridRawToken } - override var gridCompactWidth: GridExtraCompactSemanticToken { Self.mockThemeGridRawToken } override var gridCompactMinWidth: GridCompactSemanticToken { Self.mockThemeGridRawToken } override var gridCompactMaxWidth: GridCompactSemanticToken { Self.mockThemeGridRawToken } override var gridCompactMargin: GridCompactSemanticToken { Self.mockThemeGridRawToken } override var gridCompactColumnGap: GridCompactSemanticToken { Self.mockThemeGridRawToken } override var gridCompactColumnCount: GridCompactSemanticToken { Self.mockThemeGridRawToken } - override var gridRegularWidth: GridExtraCompactSemanticToken { Self.mockThemeGridRawToken } override var gridRegularMinWidth: GridRegularSemanticToken { Self.mockThemeGridRawToken } override var gridRegularMaxWidth: GridRegularSemanticToken { Self.mockThemeGridRawToken } override var gridRegularMargin: GridRegularSemanticToken { Self.mockThemeGridRawToken } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfGridSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfGridSemanticTokens.swift index ea0eb5e7b..7427eeb9b 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfGridSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfGridSemanticTokens.swift @@ -28,11 +28,6 @@ final class TestThemeOverrideOfGridSemanticTokens: XCTestCase { inheritedTheme = MockTheme() } - func testInheritedThemeCanOverrideSemanticTokenGridIOSExtraCompactDesignWidth() throws { - XCTAssertNotEqual(inheritedTheme.gridExtraCompactWidth, abstractTheme.gridExtraCompactWidth) - XCTAssertTrue(inheritedTheme.gridExtraCompactWidth == MockTheme.mockThemeGridRawToken) - } - func testInheritedThemeCanOverrideSemanticTokenGridIOSExtraCompactMinWidth() throws { XCTAssertNotEqual(inheritedTheme.gridExtraCompactMinWidth, abstractTheme.gridExtraCompactMinWidth) XCTAssertTrue(inheritedTheme.gridExtraCompactMinWidth == MockTheme.mockThemeGridRawToken) @@ -58,11 +53,6 @@ final class TestThemeOverrideOfGridSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.gridExtraCompactColumnCount == MockTheme.mockThemeGridRawToken) } - func testInheritedThemeCanOverrideSemanticTokenGridIOSCompactDesignWidth() throws { - XCTAssertNotEqual(inheritedTheme.gridCompactWidth, abstractTheme.gridCompactWidth) - XCTAssertTrue(inheritedTheme.gridCompactWidth == MockTheme.mockThemeGridRawToken) - } - func testInheritedThemeCanOverrideSemanticTokenGridIOSCompactMinWidth() throws { XCTAssertNotEqual(inheritedTheme.gridCompactMinWidth, abstractTheme.gridCompactMinWidth) XCTAssertTrue(inheritedTheme.gridCompactMinWidth == MockTheme.mockThemeGridRawToken) @@ -88,11 +78,6 @@ final class TestThemeOverrideOfGridSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.gridCompactColumnCount == MockTheme.mockThemeGridRawToken) } - func testInheritedThemeCanOverrideSemanticTokenGridIOSRegularDesignWidth() throws { - XCTAssertNotEqual(inheritedTheme.gridRegularWidth, abstractTheme.gridRegularWidth) - XCTAssertTrue(inheritedTheme.gridRegularWidth == MockTheme.mockThemeGridRawToken) - } - func testInheritedThemeCanOverrideSemanticTokenGridIOSRegularMinWidth() throws { XCTAssertNotEqual(inheritedTheme.gridRegularMinWidth, abstractTheme.gridRegularMinWidth) XCTAssertTrue(inheritedTheme.gridRegularMinWidth == MockTheme.mockThemeGridRawToken) diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift index a25883e0c..6114ac197 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/GridRawTokens+Values.swift @@ -20,42 +20,14 @@ extension GridRawTokens { /// Double type because used below for computations with Double values, output of the parser public static let dimensionBase: Double = 4 - // MARK: Primitive token - Grid - Design width - - public static let gridWidth100: GridRawToken = 320 - public static let gridWidth200: GridRawToken = 390 - public static let gridWidth300: GridRawToken = 480 - public static let gridWidth400: GridRawToken = 768 - public static let gridWidth500: GridRawToken = 1024 - public static let gridWidth600: GridRawToken = 1440 - public static let gridWidth700: GridRawToken = 1680 - public static let gridWidth800: GridRawToken = 1920 - // MARK: Primitive token - Grid - Min width - public static let gridMinWidth100: GridRawToken = 1 - public static let gridMinWidth200: GridRawToken = 390 - public static let gridMinWidth300: GridRawToken = 480 - public static let gridMinWidth400: GridRawToken = 736 - public static let gridMinWidth500: GridRawToken = 1024 - public static let gridMinWidth600: GridRawToken = 1320 - public static let gridMinWidth700: GridRawToken = 1640 - public static let gridMinWidth800: GridRawToken = 1880 public static let gridMinWidthExtraCompact: GridRawToken = 320 public static let gridMinWidthCompact: GridRawToken = 390 public static let gridMinWidthRegular: GridRawToken = 736 // MARK: Primitive token - Grid - Max width - public static let gridMaxWidth100: GridRawToken = 389 - public static let gridMaxWidth200: GridRawToken = 479 - public static let gridMaxWidth300: GridRawToken = 735 - public static let gridMaxWidth400: GridRawToken = 1023 - public static let gridMaxWidth500: GridRawToken = 1339 - public static let gridMaxWidth600: GridRawToken = 1639 - public static let gridMaxWidth650: GridRawToken = 1680 - public static let gridMaxWidth700: GridRawToken = 1879 - public static let gridMaxWidth800: GridRawToken = 1920 public static let gridMaxWidthExtraCompact: GridRawToken = 389 public static let gridMaxWidthCompact: GridRawToken = 852 public static let gridMaxWidthRegular: GridRawToken = 1336 @@ -110,7 +82,6 @@ extension GridRawTokens { // MARK: Primitive token - Grid - Composite - iOS Regular - public static let gridRegularWidth: GridRawToken = gridWidth400 public static let gridRegularMinWidth: GridRawToken = gridMinWidthCompact public static let gridRegularMaxWidth: GridRawToken = gridMaxWidthCompact public static let gridRegularMargin: GridRawToken = gridMargin500 diff --git a/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift index 85a72ee26..123865991 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/GridRawTokensTests.swift @@ -23,88 +23,6 @@ final class GridRawTokensTests: XCTestCase { // MARK: - Primitive token - Grid - Design Width - func testGridRawTokenGridDesignWidth100LessThanGridDesignWidth200() throws { - XCTAssertLessThan(GridRawTokens.gridWidth100, GridRawTokens.gridWidth200) - } - - func testGridRawTokenGridDesignWidth100LessThanGridDesignWidth300() throws { - XCTAssertLessThan(GridRawTokens.gridWidth100, GridRawTokens.gridWidth300) - } - - func testGridRawTokenGridDesignWidth100LessThanGridDesignWidth400() throws { - XCTAssertLessThan(GridRawTokens.gridWidth100, GridRawTokens.gridWidth400) - } - - func testGridRawTokenGridDesignWidth100LessThanGridDesignWidth500() throws { - XCTAssertLessThan(GridRawTokens.gridWidth100, GridRawTokens.gridWidth500) - } - - func testGridRawTokenGridDesignWidth100LessThanGridDesignWidth600() throws { - XCTAssertLessThan(GridRawTokens.gridWidth100, GridRawTokens.gridWidth600) - } - - func testGridRawTokenGridDesignWidth100LessThanGridDesignWidth700() throws { - XCTAssertLessThan(GridRawTokens.gridWidth100, GridRawTokens.gridWidth700) - } - - func testGridRawTokenGridDesignWidth100LessThanGridDesignWidth800() throws { - XCTAssertLessThan(GridRawTokens.gridWidth100, GridRawTokens.gridWidth800) - } - - func testGridRawTokenGridDesignWidth200LessThanGridDesignWidth300() throws { - XCTAssertLessThan(GridRawTokens.gridWidth200, GridRawTokens.gridWidth300) - } - - func testGridRawTokenGridDesignWidth200LessThanGridDesignWidth400() throws { - XCTAssertLessThan(GridRawTokens.gridWidth200, GridRawTokens.gridWidth400) - } - - func testGridRawTokenGridDesignWidth200LessThanGridDesignWidth500() throws { - XCTAssertLessThan(GridRawTokens.gridWidth200, GridRawTokens.gridWidth500) - } - - func testGridRawTokenGridDesignWidth200LessThanGridDesignWidth600() throws { - XCTAssertLessThan(GridRawTokens.gridWidth200, GridRawTokens.gridWidth600) - } - - func testGridRawTokenGridDesignWidth200LessThanGridDesignWidth700() throws { - XCTAssertLessThan(GridRawTokens.gridWidth200, GridRawTokens.gridWidth700) - } - - func testGridRawTokenGridDesignWidth200LessThanGridDesignWidth800() throws { - XCTAssertLessThan(GridRawTokens.gridWidth200, GridRawTokens.gridWidth800) - } - - // MARK: - Primitive token - Grid - Min width - - func testGridRawTokenGridMinWidth100LessThanGridMinWidth200() throws { - XCTAssertLessThan(GridRawTokens.gridMinWidth100, GridRawTokens.gridMinWidth200) - } - - func testGridRawTokenGridMinWidth200LessThanGridMinWidth300() throws { - XCTAssertLessThan(GridRawTokens.gridMinWidth200, GridRawTokens.gridMinWidth300) - } - - func testGridRawTokenGridMinWidth300LessThanGridMinWidth400() throws { - XCTAssertLessThan(GridRawTokens.gridMinWidth300, GridRawTokens.gridMinWidth400) - } - - func testGridRawTokenGridMinWidth400LessThanGridMinWidth500() throws { - XCTAssertLessThan(GridRawTokens.gridMinWidth400, GridRawTokens.gridMinWidth500) - } - - func testGridRawTokenGridMinWidth500LessThanGridMinWidth600() throws { - XCTAssertLessThan(GridRawTokens.gridMinWidth500, GridRawTokens.gridMinWidth600) - } - - func testGridRawTokenGridMinWidth600LessThanGridMinWidth700() throws { - XCTAssertLessThan(GridRawTokens.gridMinWidth600, GridRawTokens.gridMinWidth700) - } - - func testGridRawTokenGridMinWidth700LessThanGridMinWidth800() throws { - XCTAssertLessThan(GridRawTokens.gridMinWidth700, GridRawTokens.gridMinWidth800) - } - func testGridRawTokenGridMinWidthExtraCompactLessThanGridMinWidthCompact() throws { XCTAssertLessThan(GridRawTokens.gridMinWidthExtraCompact, GridRawTokens.gridMinWidthCompact) } @@ -119,38 +37,6 @@ final class GridRawTokensTests: XCTestCase { // MARK: - Primitive token - Grid - Max width - func testGridRawTokenGridMaxWidth100LessThanGridMaxWidth200() throws { - XCTAssertLessThan(GridRawTokens.gridMaxWidth100, GridRawTokens.gridMaxWidth200) - } - - func testGridRawTokenGridMaxWidth200LessThanGridMaxWidth300() throws { - XCTAssertLessThan(GridRawTokens.gridMaxWidth200, GridRawTokens.gridMaxWidth300) - } - - func testGridRawTokenGridMaxWidth300LessThanGridMaxWidth400() throws { - XCTAssertLessThan(GridRawTokens.gridMaxWidth300, GridRawTokens.gridMaxWidth400) - } - - func testGridRawTokenGridMaxWidth400LessThanGridMaxWidth500() throws { - XCTAssertLessThan(GridRawTokens.gridMaxWidth400, GridRawTokens.gridMaxWidth500) - } - - func testGridRawTokenGridMaxWidth500LessThanGridMaxWidth600() throws { - XCTAssertLessThan(GridRawTokens.gridMaxWidth500, GridRawTokens.gridMaxWidth600) - } - - func testGridRawTokenGridMaxWidth600LessThanGridMaxWidth650() throws { - XCTAssertLessThan(GridRawTokens.gridMaxWidth600, GridRawTokens.gridMaxWidth650) - } - - func testGridRawTokenGridMaxWidth650LessThanGridMaxWidth700() throws { - XCTAssertLessThan(GridRawTokens.gridMaxWidth650, GridRawTokens.gridMaxWidth700) - } - - func testGridRawTokenGridMaxWidth700LessThanGridMaxWidth800() throws { - XCTAssertLessThan(GridRawTokens.gridMaxWidth700, GridRawTokens.gridMaxWidth800) - } - func testGridRawTokenGridMaxWidthExtraCompactLessThanGridMaxWidthCompact() throws { XCTAssertLessThan(GridRawTokens.gridMaxWidthExtraCompact, GridRawTokens.gridMaxWidthCompact) } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/GridSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/GridSemanticTokens.swift index cc2516014..fe1212fa4 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/GridSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/GridSemanticTokens.swift @@ -22,7 +22,6 @@ public protocol GridSemanticTokens { // MARK: Semantic token - Grid - iOS Extra compact - var gridExtraCompactWidth: GridExtraCompactSemanticToken { get } var gridExtraCompactMinWidth: GridExtraCompactSemanticToken { get } var gridExtraCompactMaxWidth: GridExtraCompactSemanticToken { get } var gridExtraCompactMargin: GridExtraCompactSemanticToken { get } @@ -31,7 +30,6 @@ public protocol GridSemanticTokens { // MARK: Semantic token - Grid - iOS Compact - var gridCompactWidth: GridCompactSemanticToken { get } var gridCompactMinWidth: GridCompactSemanticToken { get } var gridCompactMaxWidth: GridCompactSemanticToken { get } var gridCompactMargin: GridCompactSemanticToken { get } @@ -40,7 +38,6 @@ public protocol GridSemanticTokens { // MARK: Semantic token - Grid - iOS Regular - var gridRegularWidth: GridRegularSemanticToken { get } var gridRegularMinWidth: GridRegularSemanticToken { get } var gridRegularMaxWidth: GridRegularSemanticToken { get } var gridRegularMargin: GridRegularSemanticToken { get } From 7407979f7e145b16888b7dbd4c6ee5e4dec2bd99 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Thu, 3 Oct 2024 17:09:28 +0200 Subject: [PATCH 19/25] refactor: update colors raw and semantic tokens (#124) (#153) Update some raw tokens and semantic tokens values for colors. Add also plenty of semantic tokens for color, even if some of them are not added yet (but TODO have been written). Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 3 + .../OUDSTheme+ColorSemanticTokens.swift | 266 +++++----- .../MockTheme+ColorSemanticTokens.swift | 230 ++++----- ...tThemeOverrideOfBorderSemanticTokens.swift | 2 + ...stThemeOverrideOfColorSemanticTokens.swift | 482 ++++++++++++++---- ...emeOverrideOfDimensionSemanticTokens.swift | 2 + ...emeOverrideOfElevationSemanticTokens.swift | 2 + ...estThemeOverrideOfGridSemanticTokens.swift | 2 + ...ThemeOverrideOfOpacitySemanticTokens.swift | 2 + ...tThemeOverrideOfSizingSemanticTokens.swift | 2 + ...ThemeOverrideOfSpacingSemanticTokens.swift | 2 + .../TestThemeOverrideOfThemeProperties.swift | 2 + ...meOverrideOfTypographySemanticTokens.swift | 2 + .../InverseTheme+ColorSemanticTokens.swift | 135 ++++- .../Tests/TestInverseThemeColors.swift | 323 ++++++++++-- .../OrangeBrandColorRawTokens+Values.swift | 72 --- .../OrangeBrandColorRawTokensTests.swift | 205 -------- .../SoshBrandColorRawTokens+Values.swift | 66 +-- .../Tests/SoshBrandColorRawTokensTests.swift | 120 ++--- .../Values/ColorRawTokens+Values.swift | 72 +++ .../RawTokens/Tests/ColorRawTokensTests.swift | 209 ++++++++ .../Sources/Values/ColorSemanticTokens.swift | 263 +++++----- .../Sources/Extensions/Font+extensions.swift | 1 + Showcase/Showcase/OrangeCustomTheme.swift | 2 +- ...sTextInput_InverseTheme-InverseTheme.1.png | Bin 93412 -> 93565 bytes ...sTextInput_InverseTheme-InverseTheme.2.png | Bin 86865 -> 88244 bytes 26 files changed, 1538 insertions(+), 929 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f872f6ca8..5bbb4805f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [Library] Add color semantic tokens `colorBackgroundStatusNeutral`, some `OnBackgroundEmphasized`, `colorBackgroundAction`, `colorBackgroundAlways`, `colorContent` variants - [Library] Add typography semantic tokens for font letter spacing - [Library] Unit tests for multiple tokens - [Library] Add color semantic composite tokens embeding light and dark modes values @@ -19,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- [Library] Rename and move color raw tokens for core, Orange brand and Sosh brand - [Library] Remove web-specific grid tokens, keep compact/regular widths ([#147](https://github.com/Orange-OpenSource/ouds-ios/pull/147)) - [Library] Rename of typography font weight raw tokens - [Library] Rename dimension semantic tokens to apply T-Shirt size rules ([#130](https://github.com/Orange-OpenSource/ouds-ios/issues/130)) @@ -47,6 +49,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed +- [Library] Color semantic token `colorBackgroundEmphasizedSecondary`, `colorOnBackground` variants - [Library] Remove raw tokens `elevationZIndex` ([#119](https://github.com/Orange-OpenSource/ouds-ios/issues/119)) ### Fixed diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift index 935b95a57..a075e6bff 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift @@ -18,6 +18,7 @@ import OUDSTokensSemantic // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // [File to generate with the tokenator] +// WARNING: Not synchronized anymore with the Figjam // swiftlint:disable line_length /// Defines basic values common to all themes for `ColorSemanticTokens`. @@ -26,10 +27,10 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - Alias - Primary - @objc open var sysColorBrandPrimaryLowest: ColorAliasSemanticToken? { nil } + @objc open var sysColorBrandPrimaryLowest: ColorAliasSemanticToken? { nil } // Defined in OrangeTheme+SemanticColorTokens.swift because uses an Orange brand color @objc open var sysColorBrandPrimaryLower: ColorAliasSemanticToken? { nil } @objc open var sysColorBrandPrimaryLow: ColorAliasSemanticToken? { nil } - @objc open var sysColorBrandPrimaryDefault: ColorAliasSemanticToken? { nil } + @objc open var sysColorBrandPrimaryDefault: ColorAliasSemanticToken? { nil } // Defined in OrangeTheme+SemanticColorTokens.swift because uses an Orange brand color @objc open var sysColorBrandPrimaryHigh: ColorAliasSemanticToken? { nil } @objc open var sysColorBrandPrimaryHigher: ColorAliasSemanticToken? { nil } @objc open var sysColorBrandPrimaryHighest: ColorAliasSemanticToken? { nil } @@ -63,7 +64,7 @@ extension OUDSTheme: ColorSemanticTokens { @objc open var sysColorBrandNeutralMutedMedium: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalLightGray400 } @objc open var sysColorBrandNeutralMutedHigh: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalLightGray560 } @objc open var sysColorBrandNeutralMutedHigher: ColorAliasSemanticToken? { nil } - @objc open var sysColorBrandNeutralMutedHighest: ColorAliasSemanticToken? { nil } + @objc open var sysColorBrandNeutralMutedHighest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalDarkGray160 } // MARK: Semantic token - Colors - Alias - Neutral - Emphasized @@ -88,13 +89,13 @@ extension OUDSTheme: ColorSemanticTokens { // MARK: Semantic token - Colors - Alias - Information - @objc open var sysColorBrandInformationLowest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalDodgerBlue100 } + @objc open var sysColorBrandInformationLowest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalMalachite100 } @objc open var sysColorBrandInformationLower: ColorAliasSemanticToken? { nil } @objc open var sysColorBrandInformationLow: ColorAliasSemanticToken? { nil } - @objc open var sysColorBrandInformationDefault: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalDodgerBlue500 } + @objc open var sysColorBrandInformationDefault: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalMalachite500 } @objc open var sysColorBrandInformationHigh: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalDodgerBlue600 } @objc open var sysColorBrandInformationHigher: ColorAliasSemanticToken? { nil } - @objc open var sysColorBrandInformationHighest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalDodgerBlue800 } + @objc open var sysColorBrandInformationHighest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalMalachite900 } // MARK: Semantic token - Colors - Alias - Warning @@ -104,250 +105,227 @@ extension OUDSTheme: ColorSemanticTokens { @objc open var sysColorBrandWarningDefault: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalSun500 } @objc open var sysColorBrandWarningHigh: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalSun600 } @objc open var sysColorBrandWarningHigher: ColorAliasSemanticToken? { nil } - @objc open var sysColorBrandWarningHighest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalSun800 } + @objc open var sysColorBrandWarningHighest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalSun900 } // MARK: Semantic token - Colors - Alias - Negative @objc open var sysColorBrandNegativeLowest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalScarlet100 } @objc open var sysColorBrandNegativeLower: ColorAliasSemanticToken? { nil } @objc open var sysColorBrandNegativeLow: ColorAliasSemanticToken? { nil } - @objc open var sysColorBrandNegativeDefault: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalScarlet500 } - @objc open var sysColorBrandNegativeHigh: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalScarlet600 } + @objc open var sysColorBrandNegativeDefault: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalScarlet600 } + @objc open var sysColorBrandNegativeHigh: ColorAliasSemanticToken? { nil } @objc open var sysColorBrandNegativeHigher: ColorAliasSemanticToken? { nil } - @objc open var sysColorBrandNegativeHighest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalScarlet800 } + @objc open var sysColorBrandNegativeHighest: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalScarlet900 } // MARK: Semantic token - Colors - Alias - Attractive - @objc open var sysColorBrandAttractiveLowest: ColorAliasSemanticToken? { nil } + @objc open var sysColorBrandAttractiveLowest: ColorAliasSemanticToken? { nil } // Defined in OrangeTheme+SemanticColorTokens.swift because uses an Orange brand color @objc open var sysColorBrandAttractiveLower: ColorAliasSemanticToken? { nil } @objc open var sysColorBrandAttractiveLow: ColorAliasSemanticToken? { nil } @objc open var sysColorBrandAttractiveMedium: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalSun500 } @objc open var sysColorBrandAttractiveHigh: ColorAliasSemanticToken? { ColorRawTokens.colorFunctionalSun600 } @objc open var sysColorBrandAttractiveHigher: ColorAliasSemanticToken? { nil } - @objc open var sysColorBrandAttractiveHighest: ColorAliasSemanticToken? { nil } + @objc open var sysColorBrandAttractiveHighest: ColorAliasSemanticToken? { nil } // Defined in OrangeTheme+SemanticColorTokens.swift because uses an Orange brand color - // MARK: Semantic token - Colors - Background - Default - Primary + // MARK: Semantic token - Colors - Background @objc open var colorBackgroundDefaultPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedHighest) } - // MARK: Semantic token - Colors - Background - Default - Secondary - @objc open var colorBackgroundDefaultSecondary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedLowest, dark: sysColorBrandNeutralEmphasizedHigher) } - // MARK: Semantic token - Colors - Background - Default - Tertiary - @objc open var colorBackgroundDefaultTertiary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } - // MARK: Semantic token - Colors - Background - Emphasized - Primary + @objc open var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedHighest, dark: sysColorBrandNeutralEmphasizedMedium) } - @objc open var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralEmphasizedMedium) } + @objc open var colorBackgroundBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } - // MARK: Semantic token - Colors - Background - Emphasized - Secondary + @objc open var colorBackgroundBrandSecondary: ColorSemanticToken? { nil } - @objc open var colorBackgroundEmphasizedSecondary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedMedium, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundBrandTertiary: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - Background - Brand - Primary + @objc open var colorBackgroundStatusNeutral: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedHigh) } - @objc open var colorBackgroundBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } + @objc open var colorBackgroundStatusNeutralOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedHigh, dark: sysColorBrandNeutralEmphasizedHigh) } - // MARK: Semantic token - Colors - Background - Brand - Secondary + @objc open var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } - @objc open var colorBackgroundBrandSecondary: ColorSemanticToken? { nil } + @objc open var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningDefault) } - // MARK: Semantic token - Colors - Background - Brand - Tertiary + @objc open var colorBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningLowest, dark: sysColorBrandWarningHighest) } - @objc open var colorBackgroundBrandTertiary: ColorSemanticToken? { nil } + @objc open var colorBackgroundStatusWarningMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningHighest, dark: sysColorBrandWarningHighest) } - // MARK: Semantic token - Colors - Background - Status - Attractive - Muted + @objc open var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningDefault) } - @objc open var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandAttractiveLowest, dark: sysColorBrandAttractiveHighest) } + @objc open var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeLowest, dark: sysColorBrandNeutralEmphasizedHighest) } - // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized + @objc open var colorBackgroundStatusNegativeMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeHighest) } - @objc open var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningHighest) } + @objc open var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeHighest) } - // MARK: Semantic token - Colors - Background - Status - Warning - Muted + @objc open var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveLowest, dark: sysColorBrandNeutralEmphasizedHigh) } - @objc open var colorBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundStatusPositiveMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveHighest) } - // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized + @objc open var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveHighest) } - @objc open var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandWarningDefault, dark: sysColorBrandWarningHighest) } + @objc open var colorBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandInformationLowest, dark: sysColorBrandNeutralEmphasizedHigh) } - // MARK: Semantic token - Colors - Background - Status - Negative - Muted + @objc open var colorBackgroundStatusInformationMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandInformationHighest) } - @objc open var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationHighest) } - // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized + // MARK: Semantic token - Colors - Background - Action - @objc open var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeHighest) } + @objc open var colorBackgroundActionEnabled: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - // MARK: Semantic token - Colors - Background - Status - Positive - Muted + @objc open var colorBackgroundActionEnabledOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedLower, dark: sysColorBrandNeutralMutedLower) } - @objc open var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundActionEnabledOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralEmphasizedBlack) } - // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized + @objc open var colorBackgroundActionEnabledOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedWhite) } - @objc open var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveHighest) } + @objc open var colorBackgroundActionPressed: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryLow) } - // MARK: Semantic token - Colors - Background - Status - Information - Muted + @objc open var colorBackgroundActionPressedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryLow) } - @objc open var colorBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandInformationLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundActionPressedOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault) } - // MARK: Semantic token - Colors - Background - Status - Information - Emphasized + @objc open var colorBackgroundActionPressedOnBackgroundStautsNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault) } - @objc open var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationHighest) } + @objc open var colorBackgroundActionDisabled: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralMutedLowest) } - // MARK: Semantic token - Colors - Content - Default + @objc open var colorBackgroundActionDisabledOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedLowest) } - @objc open var colorContentDefault: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorBackgroundActionDisabledOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium) } - // MARK: Semantic token - Colors - Content - Default - On background emphasized + @objc open var colorBackgroundActionDisabledOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest) } - @objc open var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorBackgroundActionFocus: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralMutedMedium) } - // MARK: Semantic token - Colors - Content - Muted + @objc open var colorBackgroundActionFocusOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium) } - @objc open var colorContentMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedHigh) } + @objc open var colorBackgroundActionFocusOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLow) } - // MARK: Semantic token - Colors - Content - Muted - On background emphasized + @objc open var colorBackgroundActionFocusOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } - @objc open var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralMutedHigh) } + // MARK: Semantic token - Colors - Background - Always - // MARK: Semantic token - Colors - Content - Brand - Primary + @objc open var colorBackgroundAlwaysBlack: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } - @objc open var colorContentBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } + @objc open var colorBackgroundAlwaysWhite: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite) } - // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized + @objc open var colorBackgroundAlwaysAttractive: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningDefault) } - @objc open var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } + @objc open var colorBackgroundAlwaysWarning: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningDefault) } - // MARK: Semantic token - Colors - Content - Brand - Secondary + @objc open var colorBackgroundAlwaysNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeDefault) } - @objc open var colorContentBrandSecondary: ColorSemanticToken? { nil } + @objc open var colorBackgroundAlwaysPositive: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveDefault) } - // MARK: Semantic token - Colors - Content - Brand - Tertiary + @objc open var colorBackgroundAlwaysInformation: ColorSemanticToken? { MultipleColorTokens(sysColorBrandInformationDefault) } - @objc open var colorContentBrandTertiary: ColorSemanticToken? { nil } + // MARK: Semantic token - Colors - Content - // MARK: Semantic token - Colors - Content - Status - Attractive + @objc open var colorContentDefault: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - @objc open var colorContentStatusAttractive: ColorSemanticToken? { nil } + @objc open var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedLower, dark: sysColorBrandNeutralMutedLower) } + + @objc open var colorContentMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedHigh) } - // MARK: Semantic token - Colors - Content - Status - Negative + @objc open var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralMutedHigh) } - @objc open var colorContentStatusNegative: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeDefault) } + @objc open var colorContentBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } + + @objc open var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } - // MARK: Semantic token - Colors - Content - Status - Positive + @objc open var colorContentBrandSecondary: ColorSemanticToken? { nil } - @objc open var colorContentStatusPositive: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveDefault) } + @objc open var colorContentBrandTertiary: ColorSemanticToken? { nil } + + @objc open var colorContentStatusAttractive: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - Content - Status - Information + @objc open var colorContentStatusNegative: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNegativeDefault, dark: sysColorBrandNegativeDefault) } + + @objc open var colorContentStatusPositive: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPositiveDefault, dark: sysColorBrandPositiveDefault) } @objc open var colorContentStatusInformation: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandInformationDefault, dark: sysColorBrandInformationDefault) } - // MARK: Semantic token - Colors - Border - Default + // MARK: Semantic token - Colors - Border @objc open var colorBorderDefault: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralEmphasizedLowest) } - // MARK: Semantic token - Colors - Border - Default - On background emphasized - @objc open var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralEmphasizedLowest) } - // MARK: Semantic token - Colors - Border - Emphasized + @objc open var colorContentDefaultOnBackgroundBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedBlack) } @objc open var colorBorderEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized - @objc open var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } - // MARK: Semantic token - Colors - Border - Brand - Primary + @objc open var colorContentDisabled: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedMedium, dark: sysColorBrandNeutralEmphasizedLowest) } - @objc open var colorBorderBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } + @objc open var colorContentDisabledOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest) } - // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized + @objc open var colorBorderBrandPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryDefault, dark: sysColorBrandPrimaryLow) } @objc open var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandPrimaryLow, dark: sysColorBrandPrimaryLow) } - // MARK: Semantic token - Colors - Border - Brand - Secondary - @objc open var colorBorderBrandSecondary: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - Border - Brand - Tertiary - @objc open var colorBorderBrandTertiary: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - Border - Status - Attractive - @objc open var colorBorderBrandStatusAttractive: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - Border - Status - Warning - @objc open var colorBorderBrandStatusWarning: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - Border - Status - Negative - @objc open var colorBorderBrandStatusNegative: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - Border - Status - Positive - @objc open var colorBorderBrandStatusPositive: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - Border - Status - Information - @objc open var colorBorderBrandStatusInformation: ColorSemanticToken? { nil } - // MARK: Semantic token - Colors - On background - Primary - - @objc open var colorOnBackgroundPrimary: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralEmphasizedHighest) } - - // MARK: Semantic token - Colors - On background - Secondary - - @objc open var colorOnBackgroundSecondary: ColorSemanticToken? { nil } - - // MARK: Semantic token - Colors - On background - Tertiary - - @objc open var colorOnBackgroundTertiary: ColorSemanticToken? { nil } - - // MARK: Semantic token - Colors - On background - Status - Attractive - Muted - - @objc open var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Attractive - Emphasized - - @objc open var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Warning - Muted - - @objc open var colorOnBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized - - @objc open var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Negative - Muted - - @objc open var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized - - @objc open var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralMutedWhite, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Positive - Muted - - @objc open var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized - - @objc open var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Information - Muted - - @objc open var colorOnBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } - - // MARK: Semantic token - Colors - On background - Status - Information - Emphasized - - @objc open var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + @objc open var colorContentActionEnabled: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedBlack, dark: sysColorBrandNeutralMutedLower) } + + @objc open var colorContentActionEnabledOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedLower) } + + @objc open var colorContentActionEnabledOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } + + @objc open var colorContentActionEnabledOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite) } + + @objc open var colorContentActionHover: ColorSemanticToken? { MultipleColorTokens(light: sysColorBrandNeutralEmphasizedLowest, dark: sysColorBrandNeutralMutedMedium) } + + @objc open var colorContentActionHoverOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium) } + + @objc open var colorContentActionHoverOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLow) } + + @objc open var colorContentActionHoverOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } + + // TODO: #124 - Add missing colorBorderActionEnabled* + // TODO: #124 - Add missing colorBorderActionHover* + // TODO: #124 - Add missing colorBorderActionPressed* + // TODO: #124 - Add missing colorBorderActionDisabled* + // TODO: #124 - Add missing colorBorderActionFocus* + // TODO: #124 - Add missing colorBorderSelectionSelected* + // TODO: #124 - Add missing colorBorderSelectionUnselected* + // TODO: #124 - Add missing colorBorderAlways* + // TODO: #124 - Add missing colorBorderOutside + // TODO: #124 - Add missing colorOnBackgroundStatusAttractive* + // TODO: #124 - Add missing colorOnBackgroundStatusWarning* + // TODO: #124 - Add missing colorOnBackgroundStatusNegative* + // TODO: #124 - Add missing colorOnBackgroundStatusPositive* + // TODO: #124 - Add missing colorOnBackgroundStatusInformation* + // TODO: #124 - Add missing colorOnBackgroundActionEnabled* + // TODO: #124 - Add missing colorOnBackgroundActionHover* + // TODO: #124 - Add missing colorOnBackgroundActionPressed* + // TODO: #124 - Add missing colorOnBackgroundActionDisabled* + // TODO: #124 - Add missing colorOnBackgroundActionFocus* + // TODO: #124 - Add missing colorOnBackgroundActionAlways* + // TODO: #124 - Add missing colorElevation* + // TODO: #124 - Add missing colorDecorativeBrand* + // TODO: #124 - Add missing colorDecorativeNeutral* + // TODO: #124 - Add missing colorDecorativeAccent* + // TODO: #124 - Add missing colorDecorativeSkin* + // TODO: #124 - Add missing colorChart* } // swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift index ee7e4ee1a..a68d48646 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+ColorSemanticTokens.swift @@ -18,7 +18,7 @@ import OUDSTokensSemantic extension MockTheme { static let mockThemeColorRawToken: ColorRawToken = "#68489D" - static let mockThemeMultipleColorTokens: MultipleColorTokens = MultipleColorTokens("#68489D") + static let mockThemeMultipleColorTokens: ColorSemanticToken = MultipleColorTokens("#68489D") // MARK: Semantic token - Colors - Alias - Primary @@ -122,227 +122,203 @@ extension MockTheme { override var sysColorBrandAttractiveHigher: ColorAliasSemanticToken! { Self.mockThemeColorRawToken } override var sysColorBrandAttractiveHighest: ColorAliasSemanticToken! { Self.mockThemeColorRawToken } - // MARK: Semantic token - Colors - Background - Default - Primary + // MARK: Semantic token - Colors - Background override var colorBackgroundDefaultPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Default - Secondary - override var colorBackgroundDefaultSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Default - Tertiary - override var colorBackgroundDefaultTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Emphasized - Primary - override var colorBackgroundEmphasizedPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Emphasized - Secondary - - override var colorBackgroundEmphasizedSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Background - Brand - Primary - override var colorBackgroundBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Brand - Secondary - override var colorBackgroundBrandSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Brand - Tertiary - override var colorBackgroundBrandTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Attractive - Muted + override var colorBackgroundStatusNeutral: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundStatusNeutralOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized + override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } override var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Warning - Muted - override var colorBackgroundStatusWarningMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized + override var colorBackgroundStatusWarningMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } override var colorBackgroundStatusWarningEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Negative - Muted - override var colorBackgroundStatusNegativeMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized + override var colorBackgroundStatusNegativeMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } override var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Positive - Muted - override var colorBackgroundStatusPositiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized + override var colorBackgroundStatusPositiveMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } override var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Information - Muted - override var colorBackgroundStatusInformationMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Background - Status - Information - Emphasized + override var colorBackgroundStatusInformationMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } override var colorBackgroundStatusInformationEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Content - Default - - override var colorContentDefault: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Default - On background emphasized - - override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Muted - - override var colorContentMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Muted - On background emphasized - - override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Brand - Primary - - override var colorContentBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized - - override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Brand - Secondary - - override var colorContentBrandSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Brand - Tertiary - - override var colorContentBrandTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Status - Attractive - - override var colorContentStatusAttractive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - - // MARK: Semantic token - Colors - Content - Status - Negative + // MARK: Semantic token - Colors - Background - Action - override var colorContentStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundActionEnabled: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Content - Status - Positive + override var colorBackgroundActionEnabledOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorContentStatusPositive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundActionEnabledOnBackgroundStatusExcNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Content - Status - Information + override var colorBackgroundActionEnabledOnBackgroundStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorContentStatusInformation: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundActionPressed: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Default + override var colorBackgroundActionPressedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderDefault: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundActionPressedOnBackgroundStatusExcNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Default - On background emphasized + override var colorBackgroundActionPressedOnBackgroundStautsNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundActionDisabled: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Emphasized + override var colorBackgroundActionDisabledOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundActionDisabledOnBackgroundStatusExcNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized + override var colorBackgroundActionDisabledOnBackgroundStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundActionFocus: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Brand - Primary + override var colorBackgroundActionFocusOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBackgroundActionFocusOnBackgroundStatusExcNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized + override var colorBackgroundActionFocusOnBackgroundStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + // MARK: Semantic token - Colors - Content - // MARK: Semantic token - Colors - Border - Brand - Secondary + override var colorContentDefault: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Brand - Tertiary + override var colorContentDefaultOnBackgroundBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Status - Attractive + override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandStatusAttractive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentDisabled: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Status - Warning + override var colorContentDisabledOnBackgroundEmphasized: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandStatusWarning: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Status - Negative + override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentBrandSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Status - Positive + override var colorContentBrandTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandStatusPositive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentStatusAttractive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - Border - Status - Information + override var colorContentStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorBorderBrandStatusInformation: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentStatusPositive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Primary + override var colorContentStatusInformation: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentActionEnabled: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Secondary + override var colorContentActionEnabledOnBackgroundEmphasized: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentActionEnabledOnBackgroundStatusExcNegative: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Tertiary + override var colorContentActionEnabledOnBackgroundStatusNegative: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentActionHover: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Status - Attractive - Muted + override var colorContentActionHoverOnBackgroundEmphasized: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorContentActionHoverOnBackgroundStatusExcNegative: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Status - Attractive - Emphasized + override var colorContentActionHoverOnBackgroundStatusNegative: ColorSemanticToken? { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + // TODO: #124 - Add missing colorContentActionPressed* tokens + // TODO: #124 - Add missing colorContentActionDisabled* tokens + // TODO: #124 - Add missing colorContentActionFocus* tokens + // TODO: #124 - Add missing colorContentVisited* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelected* tokens + // TODO: #124 - Add missing colorContentActionSelectionHover* tokens + // TODO: #124 - Add missing colorContentActionSelectionPressed* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelectedFocus* tokens + // TODO: #124 - Add missing colorContentActionSelectionUnselected* tokens + // TODO: #124 - Add missing colorContentActionAlways* tokens - // MARK: Semantic token - Colors - On background - Status - Warning - Muted + // MARK: Semantic token - Colors - Border - override var colorOnBackgroundStatusWarningMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBorderDefault: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized + override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandPrimary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandSecondary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandTertiary - // MARK: Semantic token - Colors - On background - Status - Negative - Muted + override var colorBorderEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized + override var colorBorderBrandPrimary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Status - Positive - Muted + override var colorBorderBrandSecondary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBorderBrandTertiary: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized + override var colorBorderBrandStatusAttractive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBorderBrandStatusWarning: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Status - Information - Muted + override var colorBorderBrandStatusNegative: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusInformationMuted: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + override var colorBorderBrandStatusPositive: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - // MARK: Semantic token - Colors - On background - Status - Information - Emphasized + override var colorBorderBrandStatusInformation: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } - override var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken! { Self.mockThemeMultipleColorTokens } + // TODO: #124 - Add missing colorBorderActionEnabled* + // TODO: #124 - Add missing colorBorderActionHover* + // TODO: #124 - Add missing colorBorderActionPressed* + // TODO: #124 - Add missing colorBorderActionDisabled* + // TODO: #124 - Add missing colorBorderActionFocus* + // TODO: #124 - Add missing colorBorderSelectionSelected* + // TODO: #124 - Add missing colorBorderSelectionUnselected* + // TODO: #124 - Add missing colorBorderAlways* + // TODO: #124 - Add missing colorBorderOutside + // TODO: #124 - Add missing colorOnBackgroundStatusAttractive* + // TODO: #124 - Add missing colorOnBackgroundStatusWarning* + // TODO: #124 - Add missing colorOnBackgroundStatusNegative* + // TODO: #124 - Add missing colorOnBackgroundStatusPositive* + // TODO: #124 - Add missing colorOnBackgroundStatusInformation* + // TODO: #124 - Add missing colorOnBackgroundActionEnabled* + // TODO: #124 - Add missing colorOnBackgroundActionHover* + // TODO: #124 - Add missing colorOnBackgroundActionPressed* + // TODO: #124 - Add missing colorOnBackgroundActionDisabled* + // TODO: #124 - Add missing colorOnBackgroundActionFocus* + // TODO: #124 - Add missing colorOnBackgroundActionAlways* + // TODO: #124 - Add missing colorElevation* + // TODO: #124 - Add missing colorDecorativeBrand* + // TODO: #124 - Add missing colorDecorativeNeutral* + // TODO: #124 - Add missing colorDecorativeAccent* + // TODO: #124 - Add missing colorDecorativeSkin* + // TODO: #124 - Add missing colorChart* } diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfBorderSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfBorderSemanticTokens.swift index 28705bc62..4999f584f 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfBorderSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfBorderSemanticTokens.swift @@ -14,6 +14,8 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. /// In fact the `OUDSTheme` object is a class, which can be seens as an _asbtract class_, exposing through its extensions and protocols _border semantic tokens_. /// These semantic tokens should be overriden by subclass like the `OrangeTheme` default theme. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfColorSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfColorSemanticTokens.swift index 0199add7f..67c4a1dac 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfColorSemanticTokens.swift @@ -14,7 +14,10 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + // swiftlint:disable type_body_length +// swiftlint:disable line_length // swiftlint:disable file_length /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. @@ -453,16 +456,6 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedPrimary?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorBackgroundEmphasizedSecondaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedSecondary?.light, abstractTheme.colorBackgroundEmphasizedSecondary?.light) - XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedSecondary?.light == MockTheme.mockThemeColorRawToken) - } - - func testInheritedThemeCanOverrideSemanticTokenColorBackgroundEmphasizedSecondaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorBackgroundEmphasizedSecondary?.dark, abstractTheme.colorBackgroundEmphasizedSecondary?.dark) - XCTAssertTrue(inheritedTheme.colorBackgroundEmphasizedSecondary?.dark == MockTheme.mockThemeColorRawToken) - } - func testInheritedThemeCanOverrideSemanticTokenColorBackgroundBrandPrimaryLight() throws { XCTAssertNotEqual(inheritedTheme.colorBackgroundBrandPrimary?.light, abstractTheme.colorBackgroundBrandPrimary?.light) XCTAssertTrue(inheritedTheme.colorBackgroundBrandPrimary?.light == MockTheme.mockThemeColorRawToken) @@ -493,6 +486,26 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorBackgroundBrandTertiary?.dark == MockTheme.mockThemeColorRawToken) } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNeutralLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNeutral?.light, abstractTheme.colorBackgroundStatusNeutral?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNeutral?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNeutralDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNeutral?.dark, abstractTheme.colorBackgroundStatusNeutral?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNeutral?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNeutralOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNeutralOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundStatusNeutralOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNeutralOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNeutralOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNeutralOnBackgroundEmphasized?.dark, abstractTheme.colorBackgroundStatusNeutralOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNeutralOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) + } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusAttractiveMutedLight() throws { XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusAttractiveMuted?.light, abstractTheme.colorBackgroundStatusAttractiveMuted?.light) XCTAssertTrue(inheritedTheme.colorBackgroundStatusAttractiveMuted?.light == MockTheme.mockThemeColorRawToken) @@ -523,6 +536,16 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningMuted?.dark == MockTheme.mockThemeColorRawToken) } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusWarningMutedOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningMutedOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundStatusWarningMutedOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningMuted?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusWarningMutedOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningMutedOnBackgroundEmphasized?.dark, abstractTheme.colorBackgroundStatusWarningMutedOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningMutedOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) + } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusWarningEmphasizedLight() throws { XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusWarningEmphasized?.light, abstractTheme.colorBackgroundStatusWarningEmphasized?.light) XCTAssertTrue(inheritedTheme.colorBackgroundStatusWarningEmphasized?.light == MockTheme.mockThemeColorRawToken) @@ -543,6 +566,16 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeMuted?.dark == MockTheme.mockThemeColorRawToken) } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNegativeMutedOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeMutedOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundStatusNegativeMutedOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeMutedOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNegativeMutedOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeMutedOnBackgroundEmphasized?.dark, abstractTheme.colorBackgroundStatusNegativeMutedOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeMutedOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) + } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusNegativeEmphasizedLight() throws { XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusNegativeEmphasized?.light, abstractTheme.colorBackgroundStatusNegativeEmphasized?.light) XCTAssertTrue(inheritedTheme.colorBackgroundStatusNegativeEmphasized?.light == MockTheme.mockThemeColorRawToken) @@ -563,6 +596,16 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveMuted?.dark == MockTheme.mockThemeColorRawToken) } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusPositiveMutedOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveMutedOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundStatusPositiveMutedOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveMutedOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusPositiveMutedOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveMutedOnBackgroundEmphasized?.dark, abstractTheme.colorBackgroundStatusPositiveMutedOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveMutedOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) + } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusPositiveEmphasizedLight() throws { XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusPositiveEmphasized?.light, abstractTheme.colorBackgroundStatusPositiveEmphasized?.light) XCTAssertTrue(inheritedTheme.colorBackgroundStatusPositiveEmphasized?.light == MockTheme.mockThemeColorRawToken) @@ -583,6 +626,16 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationMuted?.dark == MockTheme.mockThemeColorRawToken) } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusInformationMutedOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationMutedOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundStatusInformationMutedOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationMutedOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusInformationMutedOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationMutedOnBackgroundEmphasized?.dark, abstractTheme.colorBackgroundStatusInformationMutedOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationMutedOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) + } + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundStatusInformationEmphasizedLight() throws { XCTAssertNotEqual(inheritedTheme.colorBackgroundStatusInformationEmphasized?.light, abstractTheme.colorBackgroundStatusInformationEmphasized?.light) XCTAssertTrue(inheritedTheme.colorBackgroundStatusInformationEmphasized?.light == MockTheme.mockThemeColorRawToken) @@ -615,6 +668,16 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorContentDefaultOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } + func testInheritedThemeCanOverrideSemanticTokenColorContentDefaultOnBackgroundBrandPrimaryLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentDefaultOnBackgroundBrandPrimary?.light, abstractTheme.colorContentDefaultOnBackgroundBrandPrimary?.light) + XCTAssertTrue(inheritedTheme.colorContentDefaultOnBackgroundBrandPrimary?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentDefaultOnBackgroundBrandPrimaryDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentDefaultOnBackgroundBrandPrimary?.dark, abstractTheme.colorContentDefaultOnBackgroundBrandPrimary?.dark) + XCTAssertTrue(inheritedTheme.colorContentDefaultOnBackgroundBrandPrimary?.dark == MockTheme.mockThemeColorRawToken) + } + func testInheritedThemeCanOverrideSemanticTokenColorContentMutedLight() throws { XCTAssertNotEqual(inheritedTheme.colorContentMuted?.light, abstractTheme.colorContentMuted?.light) XCTAssertTrue(inheritedTheme.colorContentMuted?.light == MockTheme.mockThemeColorRawToken) @@ -635,6 +698,26 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorContentMutedOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } + func testInheritedThemeCanOverrideSemanticTokenColorContentDisabledLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentDisabled?.light, abstractTheme.colorContentDisabled?.light) + XCTAssertTrue(inheritedTheme.colorContentDisabled?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentDisabledDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentDisabled?.dark, abstractTheme.colorContentDisabled?.dark) + XCTAssertTrue(inheritedTheme.colorContentDisabled?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentDisabledOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentDisabledOnBackgroundEmphasized?.light, abstractTheme.colorContentDisabledOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorContentDisabledOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentDisabledOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentDisabledOnBackgroundEmphasized?.dark, abstractTheme.colorContentDisabledOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorContentDisabledOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) + } + func testInheritedThemeCanOverrideSemanticTokenColorContentBrandPrimaryLight() throws { XCTAssertNotEqual(inheritedTheme.colorContentBrandPrimary?.light, abstractTheme.colorContentBrandPrimary?.light) XCTAssertTrue(inheritedTheme.colorContentBrandPrimary?.light == MockTheme.mockThemeColorRawToken) @@ -715,6 +798,97 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorContentStatusInformation?.dark == MockTheme.mockThemeColorRawToken) } + func testInheritedThemeCanOverrideSemanticTokenColorContentActionEnabledLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionEnabled?.light, abstractTheme.colorContentActionEnabled?.light) + XCTAssertTrue(inheritedTheme.colorContentActionEnabled?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionEnabledDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionEnabled?.dark, abstractTheme.colorContentActionEnabled?.dark) + XCTAssertTrue(inheritedTheme.colorContentActionEnabled?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionEnabledOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionEnabledOnBackgroundEmphasized?.light, abstractTheme.colorContentActionEnabledOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorContentActionEnabledOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionEnabledOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionEnabledOnBackgroundEmphasized?.dark, abstractTheme.colorContentActionEnabledOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorContentActionEnabledOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionEnabledOnBackgroundStatusExcNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionEnabledOnBackgroundStatusExcNegative?.light, abstractTheme.colorContentActionEnabledOnBackgroundStatusExcNegative?.light) + XCTAssertTrue(inheritedTheme.colorContentActionEnabledOnBackgroundStatusExcNegative?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionEnabledOnBackgroundStatusExcNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionEnabledOnBackgroundStatusExcNegative?.dark, abstractTheme.colorContentActionEnabledOnBackgroundStatusExcNegative?.dark) + XCTAssertTrue(inheritedTheme.colorContentActionEnabledOnBackgroundStatusExcNegative?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionEnabledOnBackgroundStatusNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionEnabledOnBackgroundStatusNegative?.light, abstractTheme.colorContentActionEnabledOnBackgroundStatusNegative?.light) + XCTAssertTrue(inheritedTheme.colorContentActionEnabledOnBackgroundStatusNegative?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionEnabledOnBackgroundStatusNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionEnabledOnBackgroundStatusNegative?.dark, abstractTheme.colorContentActionEnabledOnBackgroundStatusNegative?.dark) + XCTAssertTrue(inheritedTheme.colorContentActionEnabledOnBackgroundStatusNegative?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionHoverLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionHover?.light, abstractTheme.colorContentActionHover?.light) + XCTAssertTrue(inheritedTheme.colorContentActionHover?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionHoverDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionHover?.dark, abstractTheme.colorContentActionHover?.dark) + XCTAssertTrue(inheritedTheme.colorContentActionHover?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionHoverOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionHoverOnBackgroundEmphasized?.light, abstractTheme.colorContentActionHoverOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorContentActionHoverOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionHoverOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionHoverOnBackgroundEmphasized?.dark, abstractTheme.colorContentActionHoverOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorContentActionHoverOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionHoverOnBackgroundStatusExcNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionHoverOnBackgroundStatusExcNegative?.light, abstractTheme.colorContentActionHoverOnBackgroundStatusExcNegative?.light) + XCTAssertTrue(inheritedTheme.colorContentActionHoverOnBackgroundStatusExcNegative?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionHoverOnBackgroundStatusExcNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionHoverOnBackgroundStatusExcNegative?.dark, abstractTheme.colorContentActionHoverOnBackgroundStatusExcNegative?.dark) + XCTAssertTrue(inheritedTheme.colorContentActionHoverOnBackgroundStatusExcNegative?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionHoverOnBackgroundStatusNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionHoverOnBackgroundStatusNegative?.light, abstractTheme.colorContentActionHoverOnBackgroundStatusNegative?.light) + XCTAssertTrue(inheritedTheme.colorContentActionHoverOnBackgroundStatusNegative?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorContentActionHoverOnBackgroundStatusNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorContentActionHoverOnBackgroundStatusNegative?.dark, abstractTheme.colorContentActionHoverOnBackgroundStatusNegative?.dark) + XCTAssertTrue(inheritedTheme.colorContentActionHoverOnBackgroundStatusNegative?.dark == MockTheme.mockThemeColorRawToken) + } + + // TODO: #124 - Add missing colorContentActionPressed* tokens + // TODO: #124 - Add missing colorContentActionDisabled* tokens + // TODO: #124 - Add missing colorContentActionFocus* tokens + // TODO: #124 - Add missing colorContentVisited* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelected* tokens + // TODO: #124 - Add missing colorContentActionSelectionHover* tokens + // TODO: #124 - Add missing colorContentActionSelectionPressed* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelectedFocus* tokens + // TODO: #124 - Add missing colorContentActionSelectionUnselected* tokens + // TODO: #124 - Add missing colorContentActionAlways* tokens + // MARK: - Semantic token - Colors - Border func testInheritedThemeCanOverrideSemanticTokenColorBorderDefaultLight() throws { @@ -737,6 +911,10 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorBorderDefaultOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandPrimary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandSecondary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandTertiary + func testInheritedThemeCanOverrideSemanticTokenColorBorderEmphasizedLight() throws { XCTAssertNotEqual(inheritedTheme.colorBorderEmphasized?.light, abstractTheme.colorBorderEmphasized?.light) XCTAssertTrue(inheritedTheme.colorBorderEmphasized?.light == MockTheme.mockThemeColorRawToken) @@ -847,137 +1025,263 @@ final class TestThemeOverrideOfColorSemanticTokens: XCTestCase { XCTAssertTrue(inheritedTheme.colorBorderBrandStatusInformation?.dark == MockTheme.mockThemeColorRawToken) } - // MARK: - Semantic token - Colors - On background + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionEnabledLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionEnabled?.light, abstractTheme.colorBackgroundActionEnabled?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionEnabled?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionEnabledDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionEnabled?.dark, abstractTheme.colorBackgroundActionEnabled?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionEnabled?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionEnabledOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionEnabledOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundActionEnabledOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionEnabledOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionEnabledOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionEnabled?.dark, abstractTheme.colorBackgroundActionEnabled?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionEnabled?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionEnabledOnBackgroundStatusExcNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionEnabledOnBackgroundStatusExcNegative?.light, abstractTheme.colorBackgroundActionEnabledOnBackgroundStatusExcNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionEnabledOnBackgroundStatusExcNegative?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionEnabledOnBackgroundStatusExcNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionEnabledOnBackgroundStatusExcNegative?.dark, abstractTheme.colorBackgroundActionEnabledOnBackgroundStatusExcNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionEnabledOnBackgroundStatusExcNegative?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionEnabledOnBackgroundStatusNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionEnabledOnBackgroundStatusNegative?.light, abstractTheme.colorBackgroundActionEnabledOnBackgroundStatusNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionEnabledOnBackgroundStatusNegative?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionEnabledOnBackgroundStatusNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionEnabledOnBackgroundStatusNegative?.dark, abstractTheme.colorBackgroundActionEnabledOnBackgroundStatusNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionEnabledOnBackgroundStatusNegative?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionPressedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionPressed?.light, abstractTheme.colorBackgroundActionPressed?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionPressed?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionPressedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionPressed?.dark, abstractTheme.colorBackgroundActionPressed?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionPressed?.dark == MockTheme.mockThemeColorRawToken) + } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundPrimaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundPrimary?.light, abstractTheme.colorOnBackgroundPrimary?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundPrimary?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionPressedOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionPressedOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundActionPressedOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionPressedOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundPrimaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundPrimary?.dark, abstractTheme.colorOnBackgroundPrimary?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundPrimary?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionPressedOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionPressedOnBackgroundEmphasized?.dark, abstractTheme.colorBackgroundActionPressedOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionPressedOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundSecondaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundSecondary?.light, abstractTheme.colorOnBackgroundSecondary?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundSecondary?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionPressedOnBackgroundStatusExcNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionPressedOnBackgroundStatusExcNegative?.light, abstractTheme.colorBackgroundActionPressedOnBackgroundStatusExcNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionPressedOnBackgroundStatusExcNegative?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundSecondaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundSecondary?.dark, abstractTheme.colorOnBackgroundSecondary?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundSecondary?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionPressedOnBackgroundStatusExcNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionPressedOnBackgroundStatusExcNegative?.dark, abstractTheme.colorBackgroundActionPressedOnBackgroundStatusExcNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionPressedOnBackgroundStatusExcNegative?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundTertiaryLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundTertiary?.light, abstractTheme.colorOnBackgroundTertiary?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundTertiary?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionPressedOnBackgroundStautsNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionPressedOnBackgroundStautsNegative?.light, abstractTheme.colorBackgroundActionPressedOnBackgroundStautsNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionPressedOnBackgroundStautsNegative?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundTertiaryDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundTertiary?.dark, abstractTheme.colorOnBackgroundTertiary?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundTertiary?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionPressedOnBackgroundStautsNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionPressedOnBackgroundStautsNegative?.dark, abstractTheme.colorBackgroundActionPressedOnBackgroundStautsNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionPressedOnBackgroundStautsNegative?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusAttractiveMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveMuted?.light, abstractTheme.colorOnBackgroundStatusAttractiveMuted?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveMuted?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionDisabledLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionDisabled?.light, abstractTheme.colorBackgroundActionDisabled?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionDisabled?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusAttractiveMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveMuted?.dark, abstractTheme.colorOnBackgroundStatusAttractiveMuted?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveMuted?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionDisabledDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionDisabled?.dark, abstractTheme.colorBackgroundActionDisabled?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionDisabled?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusAttractiveEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasized?.light, abstractTheme.colorOnBackgroundStatusAttractiveEmphasized?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasized?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionDisabledOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionDisabledOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundActionDisabledOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionDisabledOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusAttractiveEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasized?.dark, abstractTheme.colorOnBackgroundStatusAttractiveEmphasized?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusAttractiveEmphasized?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionDisabledOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionDisabledOnBackgroundEmphasized?.dark, abstractTheme.colorBackgroundActionDisabledOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionDisabledOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusWarningMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningMuted?.light, abstractTheme.colorOnBackgroundStatusWarningMuted?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningMuted?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionDisabledOnBackgroundStatusExcNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionDisabledOnBackgroundStatusExcNegative?.light, abstractTheme.colorBackgroundActionDisabledOnBackgroundStatusExcNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionDisabledOnBackgroundStatusExcNegative?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusWarningMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningMuted?.dark, abstractTheme.colorOnBackgroundStatusWarningMuted?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningMuted?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionDisabledOnBackgroundStatusExcNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionDisabledOnBackgroundStatusExcNegative?.dark, abstractTheme.colorBackgroundActionDisabledOnBackgroundStatusExcNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionDisabledOnBackgroundStatusExcNegative?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusWarningEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningEmphasized?.light, abstractTheme.colorOnBackgroundStatusWarningEmphasized?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningEmphasized?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionDisabledOnBackgroundStatusNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionDisabledOnBackgroundStatusNegative?.light, abstractTheme.colorBackgroundActionDisabledOnBackgroundStatusNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionDisabledOnBackgroundStatusNegative?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusWarningEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusWarningEmphasized?.dark, abstractTheme.colorOnBackgroundStatusWarningEmphasized?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusWarningEmphasized?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionDisabledOnBackgroundStatusNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionDisabledOnBackgroundStatusNegative?.dark, abstractTheme.colorBackgroundActionDisabledOnBackgroundStatusNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionDisabledOnBackgroundStatusNegative?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusNegativeMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeMuted?.light, abstractTheme.colorOnBackgroundStatusNegativeMuted?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeMuted?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionFocusLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionFocus?.light, abstractTheme.colorBackgroundActionFocus?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionFocus?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusNegativeMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeMuted?.dark, abstractTheme.colorOnBackgroundStatusNegativeMuted?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeMuted?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionFocusDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionFocus?.dark, abstractTheme.colorBackgroundActionFocus?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionFocus?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusNegativeEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeEmphasized?.light, abstractTheme.colorOnBackgroundStatusNegativeEmphasized?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeEmphasized?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionFocusOnBackgroundEmphasizedLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionFocusOnBackgroundEmphasized?.light, abstractTheme.colorBackgroundActionFocusOnBackgroundEmphasized?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionFocusOnBackgroundEmphasized?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusNegativeEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusNegativeEmphasized?.dark, abstractTheme.colorOnBackgroundStatusNegativeEmphasized?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusNegativeEmphasized?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionFocusOnBackgroundEmphasizedDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionFocusOnBackgroundEmphasized?.dark, abstractTheme.colorBackgroundActionFocusOnBackgroundEmphasized?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionFocusOnBackgroundEmphasized?.dark == MockTheme.mockThemeColorRawToken) } - func ttestInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusPositiveMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveMuted?.light, abstractTheme.colorOnBackgroundStatusPositiveMuted?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveMuted?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionFocusOnBackgroundStatusExcNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionFocusOnBackgroundStatusExcNegative?.light, abstractTheme.colorBackgroundActionFocusOnBackgroundStatusExcNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionFocusOnBackgroundStatusExcNegative?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusPositiveMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveMuted?.dark, abstractTheme.colorOnBackgroundStatusPositiveMuted?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveMuted?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionFocusOnBackgroundStatusExcNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionFocusOnBackgroundStatusExcNegative?.dark, abstractTheme.colorBackgroundActionFocusOnBackgroundStatusExcNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionFocusOnBackgroundStatusExcNegative?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusPositiveEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveEmphasized?.light, abstractTheme.colorOnBackgroundStatusPositiveEmphasized?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveEmphasized?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionFocusOnBackgroundStatusNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionFocusOnBackgroundStatusNegative?.light, abstractTheme.colorBackgroundActionFocusOnBackgroundStatusNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundActionFocusOnBackgroundStatusNegative?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusPositiveEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusPositiveEmphasized?.dark, abstractTheme.colorOnBackgroundStatusPositiveEmphasized?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusPositiveEmphasized?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundActionFocusOnBackgroundStatusNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundActionFocusOnBackgroundStatusNegative?.dark, abstractTheme.colorBackgroundActionFocusOnBackgroundStatusNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundActionFocusOnBackgroundStatusNegative?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusInformationMutedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationMuted?.light, abstractTheme.colorOnBackgroundStatusInformationMuted?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationMuted?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysBlackLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysBlack?.light, abstractTheme.colorBackgroundAlwaysBlack?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysBlack?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusInformationMutedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationMuted?.dark, abstractTheme.colorOnBackgroundStatusInformationMuted?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationMuted?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysBlackDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysBlack?.dark, abstractTheme.colorBackgroundAlwaysBlack?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysBlack?.dark == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusInformationEmphasizedLight() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationEmphasized?.light, abstractTheme.colorOnBackgroundStatusInformationEmphasized?.light) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationEmphasized?.light == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysWhiteLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysWhite?.light, abstractTheme.colorBackgroundAlwaysWhite?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysWhite?.light == MockTheme.mockThemeColorRawToken) } - func testInheritedThemeCanOverrideSemanticTokenColorOnBackgroundStatusInformationEmphasizedDark() throws { - XCTAssertNotEqual(inheritedTheme.colorOnBackgroundStatusInformationEmphasized?.dark, abstractTheme.colorOnBackgroundStatusInformationEmphasized?.dark) - XCTAssertTrue(inheritedTheme.colorOnBackgroundStatusInformationEmphasized?.dark == MockTheme.mockThemeColorRawToken) + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysWhiteDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysWhite?.dark, abstractTheme.colorBackgroundAlwaysWhite?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysWhite?.dark == MockTheme.mockThemeColorRawToken) } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysAttractiveLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysAttractive?.light, abstractTheme.colorBackgroundAlwaysAttractive?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysAttractive?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysAttractiveDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysAttractive?.dark, abstractTheme.colorBackgroundAlwaysAttractive?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysAttractive?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysWarningLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysWarning?.light, abstractTheme.colorBackgroundAlwaysWarning?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysWarning?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysWarningDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysWarning?.dark, abstractTheme.colorBackgroundAlwaysWarning?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysWarning?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysNegativeLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysNegative?.light, abstractTheme.colorBackgroundAlwaysNegative?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysNegative?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysNegativeDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysNegative?.dark, abstractTheme.colorBackgroundAlwaysNegative?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysNegative?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysPositiveLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysPositive?.light, abstractTheme.colorBackgroundAlwaysPositive?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysPositive?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysPositiveDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysPositive?.dark, abstractTheme.colorBackgroundAlwaysPositive?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysPositive?.dark == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysInformationLight() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysInformation?.light, abstractTheme.colorBackgroundAlwaysInformation?.light) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysInformation?.light == MockTheme.mockThemeColorRawToken) + } + + func testInheritedThemeCanOverrideSemanticTokenColorBackgroundAlwaysInformationDark() throws { + XCTAssertNotEqual(inheritedTheme.colorBackgroundAlwaysInformation?.dark, abstractTheme.colorBackgroundAlwaysInformation?.dark) + XCTAssertTrue(inheritedTheme.colorBackgroundAlwaysInformation?.dark == MockTheme.mockThemeColorRawToken) + } + + // TODO: #124 - Add missing colorBorderActionEnabled* + // TODO: #124 - Add missing colorBorderActionHover* + // TODO: #124 - Add missing colorBorderActionPressed* + // TODO: #124 - Add missing colorBorderActionDisabled* + // TODO: #124 - Add missing colorBorderActionFocus* + // TODO: #124 - Add missing colorBorderSelectionSelected* + // TODO: #124 - Add missing colorBorderSelectionUnselected* + // TODO: #124 - Add missing colorBorderAlways* + // TODO: #124 - Add missing colorBorderOutside + // TODO: #124 - Add missing colorOnBackgroundStatusAttractive* + // TODO: #124 - Add missing colorOnBackgroundStatusWarning* + // TODO: #124 - Add missing colorOnBackgroundStatusNegative* + // TODO: #124 - Add missing colorOnBackgroundStatusPositive* + // TODO: #124 - Add missing colorOnBackgroundStatusInformation* + // TODO: #124 - Add missing colorOnBackgroundActionEnabled* + // TODO: #124 - Add missing colorOnBackgroundActionHover* + // TODO: #124 - Add missing colorOnBackgroundActionPressed* + // TODO: #124 - Add missing colorOnBackgroundActionDisabled* + // TODO: #124 - Add missing colorOnBackgroundActionFocus* + // TODO: #124 - Add missing colorOnBackgroundActionAlways* + // TODO: #124 - Add missing colorElevation* + // TODO: #124 - Add missing colorDecorativeBrand* + // TODO: #124 - Add missing colorDecorativeNeutral* + // TODO: #124 - Add missing colorDecorativeAccent* + // TODO: #124 - Add missing colorDecorativeSkin* + // TODO: #124 - Add missing colorChart* } // swiftlint:enable type_body_length +// swiftlint:enable line_length diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift index 51211a21c..98506dfc8 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfDimensionSemanticTokens.swift @@ -14,6 +14,8 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. /// In fact the `OUDSTheme` object is a class, which can be seen as an _asbtract class_, exposing through its extensions and protocols _dimension semantic tokens_. /// These semantic tokens should be overriden by subclass like the `OrangeTheme` default theme. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift index 3585b0c3f..933b2bfc6 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfElevationSemanticTokens.swift @@ -14,6 +14,8 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. /// In fact, the `OUDSTheme` object is a class, which can be seen as an _asbtract class_, exposing through its extensions and protocols _elevation semantic tokens_. /// These semantic tokens should be overriden by subclass like the `OrangeTheme` default theme. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfGridSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfGridSemanticTokens.swift index 7427eeb9b..2c65ed789 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfGridSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfGridSemanticTokens.swift @@ -14,6 +14,8 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. /// In fact the `OUDSTheme` object is a class, which can be seen as an _asbtract class_, exposing through its extensions and protocols _grid semantic tokens_. /// These semantic tokens should be overriden by subclass like the `OrangeTheme` default theme. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfOpacitySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfOpacitySemanticTokens.swift index 36cbc916c..fae785e90 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfOpacitySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfOpacitySemanticTokens.swift @@ -14,6 +14,8 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. /// In factn the `OUDSTheme` object is a class, which can be seens as an _asbtract class_, exposing through its extensions and protocols _opacity semantic tokens_. /// These semantic tokens should be overriden by subclass like the `OrangeTheme` default theme. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSizingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSizingSemanticTokens.swift index e48843d31..6cc9af19c 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSizingSemanticTokens.swift @@ -14,6 +14,8 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. /// In fact the `OUDSTheme` object is a class, which can be seen as an _asbtract class_, exposing through its extensions and protocols _sizing semantic tokens_. /// These semantic tokens should be overriden by subclass like the `OrangeTheme` default theme. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift index b9d657c13..c660a6149 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfSpacingSemanticTokens.swift @@ -14,6 +14,8 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + // swiftlint:disable type_body_length /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfThemeProperties.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfThemeProperties.swift index 193dbfb04..28a18e25e 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfThemeProperties.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfThemeProperties.swift @@ -14,6 +14,8 @@ import OUDS import XCTest +// WARNING: Maybe removed in the future or needs to be updated with token generation + /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. /// In fact the `OUDSTheme` object is a class, which can be seen as an _asbtract class_, exposing through its extensions and protocols some properties. /// These properties should be overridable by subclasses like the `OrangeTheme` default theme. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift index a8c6512b9..121a7e031 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/TestThemeOverrideOfTypographySemanticTokens.swift @@ -14,6 +14,8 @@ import XCTest import OUDS +// WARNING: Maybe removed in the future or needs to be updated with token generation + // swiftlint:disable type_body_length /// The architecture of _OUDS iOS_ _Swift package_ library is based on _object oriented paradigm_ and overriding of classes. diff --git a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift index 9227d05a5..c038bc290 100644 --- a/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/Themes/Inverse/Sources/InverseTheme+ColorSemanticTokens.swift @@ -16,50 +16,67 @@ import OUDSTokensSemantic // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // [File to generate with the tokenator] +// WARNING: Not synchronized anymore with the Figjam /// Overrides some colors using values defined in extension of `ColorRawTokens` in this current module. extension InverseTheme { - public override var colorBackgroundDefaultPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundDefaultPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedHighest!) } - public override var colorBackgroundDefaultSecondary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedMedium!) } + public override var colorBackgroundDefaultSecondary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedHigh!) } public override var colorBackgroundDefaultTertiary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandAttractiveHighest!) } public override var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } - public override var colorBackgroundEmphasizedSecondary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedLowest!) } + public override var colorBackgroundBrandPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryLow!) } - public override var colorBackgroundBrandPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault!) } + public override var colorBackgroundStatusNeutral: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedHigh!) } + + public override var colorBackgroundStatusNeutralOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest) } public override var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandAttractiveLowest!) } public override var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningDefault!) } - public override var colorBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningLowest!) } + public override var colorBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningHighest!) } + + public override var colorBackgroundStatusWarningMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningLowest) } public override var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningDefault!) } - public override var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeLowest!) } + public override var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedHighest!) } + + public override var colorBackgroundStatusNegativeMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeLowest) } public override var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeDefault!) } - public override var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveLowest!) } + public override var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveHighest!) } + + public override var colorBackgroundStatusPositiveMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveLowest) } public override var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveDefault!) } public override var colorBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandInformationLowest!) } + public override var colorBackgroundStatusInformationMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandInformationLowest) } + public override var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveLowest!) } public override var colorContentDefault: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } public override var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorContentDefaultOnBackgroundBrandPrimary: ColorSemanticToken! { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorContentMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedMedium!) } public override var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest!) } + public override var colorContentDisabled: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest!) } + + public override var colorContentDisabledOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium!) } + public override var colorContentBrandPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryLow!) } public override var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault!) } @@ -76,8 +93,39 @@ extension InverseTheme { public override var colorContentStatusInformation: ColorSemanticToken? { MultipleColorTokens(sysColorBrandInformationDefault!) } + public override var colorContentActionEnabled: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedLower) } + + public override var colorContentActionEnabledOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } + + public override var colorContentActionEnabledOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } + + public override var colorContentActionEnabledOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite) } + + public override var colorContentActionHover: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium) } + + public override var colorContentActionHoverOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest) } + + public override var colorContentActionHoverOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLow) } + + public override var colorContentActionHoverOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } + + // TODO: #124 - Add missing colorContentActionPressed* tokens + // TODO: #124 - Add missing colorContentActionDisabled* tokens + // TODO: #124 - Add missing colorContentActionFocus* tokens + // TODO: #124 - Add missing colorContentVisited* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelected* tokens + // TODO: #124 - Add missing colorContentActionSelectionHover* tokens + // TODO: #124 - Add missing colorContentActionSelectionPressed* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelectedFocus* tokens + // TODO: #124 - Add missing colorContentActionSelectionUnselected* tokens + // TODO: #124 - Add missing colorContentActionAlways* tokens + public override var colorBorderDefault: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest!) } + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandPrimary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandSecondary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandTertiary + public override var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium!) } public override var colorBorderEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } @@ -102,29 +150,76 @@ extension InverseTheme { public override var colorBorderBrandStatusInformation: ColorSemanticToken? { nil } - public override var colorOnBackgroundPrimary: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } + public override var colorBackgroundActionEnabled: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedLower) } + + public override var colorBackgroundActionEnabledOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } + + public override var colorBackgroundActionEnabledOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } + + public override var colorBackgroundActionEnabledOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite) } + + public override var colorBackgroundActionPressed: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryLow) } + + public override var colorBackgroundActionPressedOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault) } + + public override var colorBackgroundActionPressedOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault) } + + public override var colorBackgroundActionPressedOnBackgroundStautsNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPrimaryDefault) } + + public override var colorBackgroundActionDisabled: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest) } + + public override var colorBackgroundActionDisabledOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium) } + + public override var colorBackgroundActionDisabledOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium) } + + public override var colorBackgroundActionDisabledOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLowest) } - public override var colorOnBackgroundSecondary: ColorSemanticToken? { nil } + public override var colorBackgroundActionFocus: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium) } - public override var colorOnBackgroundTertiary: ColorSemanticToken? { nil } + public override var colorBackgroundActionFocusOnBackgroundEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedMedium) } - public override var colorOnBackgroundStatusAttractiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundActionFocusOnBackgroundStatusExcNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedLow) } - public override var colorOnBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundActionFocusOnBackgroundStatusNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } - public override var colorOnBackgroundStatusWarningMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundAlwaysBlack: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack) } - public override var colorOnBackgroundStatusWarningEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundAlwaysWhite: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite) } - public override var colorOnBackgroundStatusNegativeMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundAlwaysAttractive: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningDefault) } - public override var colorOnBackgroundStatusNegativeEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralMutedWhite!) } + public override var colorBackgroundAlwaysWarning: ColorSemanticToken? { MultipleColorTokens(sysColorBrandWarningDefault) } - public override var colorOnBackgroundStatusPositiveMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundAlwaysNegative: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNegativeDefault) } - public override var colorOnBackgroundStatusPositiveEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundAlwaysPositive: ColorSemanticToken? { MultipleColorTokens(sysColorBrandPositiveDefault) } - public override var colorOnBackgroundStatusInformationMuted: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + public override var colorBackgroundAlwaysInformation: ColorSemanticToken? { MultipleColorTokens(sysColorBrandInformationDefault) } - public override var colorOnBackgroundStatusInformationEmphasized: ColorSemanticToken? { MultipleColorTokens(sysColorBrandNeutralEmphasizedBlack!) } + // TODO: #124 - Add missing colorBorderActionEnabled* + // TODO: #124 - Add missing colorBorderActionHover* + // TODO: #124 - Add missing colorBorderActionPressed* + // TODO: #124 - Add missing colorBorderActionDisabled* + // TODO: #124 - Add missing colorBorderActionFocus* + // TODO: #124 - Add missing colorBorderSelectionSelected* + // TODO: #124 - Add missing colorBorderSelectionUnselected* + // TODO: #124 - Add missing colorBorderAlways* + // TODO: #124 - Add missing colorBorderOutside + // TODO: #124 - Add missing colorOnBackgroundStatusAttractive* + // TODO: #124 - Add missing colorOnBackgroundStatusWarning* + // TODO: #124 - Add missing colorOnBackgroundStatusNegative* + // TODO: #124 - Add missing colorOnBackgroundStatusPositive* + // TODO: #124 - Add missing colorOnBackgroundStatusInformation* + // TODO: #124 - Add missing colorOnBackgroundActionEnabled* + // TODO: #124 - Add missing colorOnBackgroundActionHover* + // TODO: #124 - Add missing colorOnBackgroundActionPressed* + // TODO: #124 - Add missing colorOnBackgroundActionDisabled* + // TODO: #124 - Add missing colorOnBackgroundActionFocus* + // TODO: #124 - Add missing colorOnBackgroundActionAlways* + // TODO: #124 - Add missing colorElevation* + // TODO: #124 - Add missing colorDecorativeBrand* + // TODO: #124 - Add missing colorDecorativeNeutral* + // TODO: #124 - Add missing colorDecorativeAccent* + // TODO: #124 - Add missing colorDecorativeSkin* + // TODO: #124 - Add missing colorChart* } diff --git a/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeColors.swift b/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeColors.swift index fb8ac37c5..11d8cdf3c 100644 --- a/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeColors.swift +++ b/OUDS/Core/Themes/Inverse/Tests/TestInverseThemeColors.swift @@ -11,9 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import XCTest import OUDS import OUDSThemesInverse +import OUDSTokensSemantic +import XCTest /// `InverseTheme` is a quite particular theme with "inverse" color palette. Is it neuther a light mode theme nor a dark mode theme. /// This "inverse" mode as colors which, for a given semantic token, has the same value for both light and dark mode. @@ -25,89 +26,323 @@ final class TestInverseThemeColors: XCTestCase { inverseTheme = InverseTheme() } - func testColorsEquality() throws { - XCTAssertEqual(inverseTheme.colorBackgroundDefaultPrimary!.light, inverseTheme.colorBackgroundDefaultPrimary!.dark) + private func assertHomogeneity(_ value: ColorSemanticToken?) { + XCTAssertEqual(value!.light, value!.dark) + } + + // MARK: - Test cases + + func testColorsHomogeneityBackgroundDefaultPrimary() throws { + assertHomogeneity(inverseTheme.colorBackgroundDefaultPrimary) + } + + func testColorsHomogeneityBackgroundDefaultSecondary() throws { + assertHomogeneity(inverseTheme.colorBackgroundDefaultSecondary) + } + + func testColorsHomogeneityBackgroundDefaultTertiary() throws { + assertHomogeneity(inverseTheme.colorBackgroundDefaultTertiary) + } + + func testColorsHomogeneityBackgroundEmphasizedPrimary() throws { + assertHomogeneity(inverseTheme.colorBackgroundEmphasizedPrimary) + } + + func testColorsHomogeneityBackgroundBrandPrimary() throws { + assertHomogeneity(inverseTheme.colorBackgroundBrandPrimary) + } + + func testColorsHomogeneityBackgroundStatusNeutral() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusNeutral) + } + + func testColorsHomogeneityBackgroundStatusNeutralOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusNeutralOnBackgroundEmphasized) + } + + func testColorsHomogeneityBackgroundStatusAttractiveMuted() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusAttractiveMuted) + } + + func testColorsHomogeneityBackgroundStatusAttractiveEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusAttractiveEmphasized) + } + + func testColorsHomogeneityBackgroundStatusWarningMuted() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusWarningMuted) + } + + func testColorsHomogeneityBackgroundStatusWarningMutedOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusWarningMutedOnBackgroundEmphasized) + } + + func testColorsHomogeneityBackgroundStatusWarningEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusWarningEmphasized) + } + + func testColorsHomogeneityBackgroundStatusNegativeMuted() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusNegativeMuted) + } + + func testColorsHomogeneityBackgroundStatusNegativeMutedOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusNegativeMutedOnBackgroundEmphasized) + } + + func testColorsHomogeneityBackgroundStatusNegativeEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusNegativeEmphasized) + } + + func testColorsHomogeneityBackgroundStatusPositiveMuted() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusPositiveMuted) + } + + func testColorsHomogeneityBackgroundStatusPositiveEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusPositiveEmphasized) + } + + func testColorsHomogeneityBackgroundStatusInformationMuted() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusInformationMuted) + } + + func testColorsHomogeneityBackgroundStatusInformationEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundStatusInformationEmphasized) + } + + func testColorsHomogeneityContentDefault() throws { + assertHomogeneity(inverseTheme.colorContentDefault) + } + + func testColorsHomogeneityContentDefaultOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorContentDefaultOnBackgroundEmphasized) + } + + func testColorsHomogeneityContentDefaultOnBackgroundBrandPrimary() throws { + assertHomogeneity(inverseTheme.colorContentDefaultOnBackgroundBrandPrimary) + } + + func testColorsHomogeneityContentMuted() throws { + assertHomogeneity(inverseTheme.colorContentMuted) + } + + func testColorsHomogeneityContentMutedOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorContentMutedOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorBackgroundDefaultSecondary!.light, inverseTheme.colorBackgroundDefaultSecondary!.dark) + func testColorsHomogeneityContentDisabled() { + assertHomogeneity(inverseTheme.colorContentDisabled) + } - XCTAssertEqual(inverseTheme.colorBackgroundDefaultTertiary!.light, inverseTheme.colorBackgroundDefaultTertiary!.dark) + func testColorsHomogeneityContentDisabledOnBackgroundEmphasized() { + assertHomogeneity(inverseTheme.colorContentDisabledOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorBackgroundEmphasizedPrimary!.light, inverseTheme.colorBackgroundEmphasizedPrimary!.dark) + func testColorsHomogeneityContentBrandPrimary() throws { + assertHomogeneity(inverseTheme.colorContentBrandPrimary) + } - XCTAssertEqual(inverseTheme.colorBackgroundEmphasizedSecondary!.light, inverseTheme.colorBackgroundEmphasizedSecondary!.dark) + func testColorsHomogeneityContentBrandPrimaryOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorContentBrandPrimaryOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorBackgroundBrandPrimary!.light, inverseTheme.colorBackgroundBrandPrimary!.dark) + func testColorsHomogeneityContentStatusNegative() throws { + assertHomogeneity(inverseTheme.colorContentStatusNegative) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusAttractiveMuted!.light, inverseTheme.colorBackgroundStatusAttractiveMuted!.dark) + func testColorsHomogeneityContentStatusPositive() throws { + assertHomogeneity(inverseTheme.colorContentStatusPositive) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusAttractiveEmphasized!.light, inverseTheme.colorBackgroundStatusAttractiveEmphasized!.dark) + func testColorsHomogeneityContentStatusInformation() throws { + assertHomogeneity(inverseTheme.colorContentStatusInformation) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusWarningMuted!.light, inverseTheme.colorBackgroundStatusWarningMuted!.dark) + func testColorsHomogeneityContentActionEnabled() { + assertHomogeneity(inverseTheme.colorContentActionEnabled) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusWarningEmphasized!.light, inverseTheme.colorBackgroundStatusWarningEmphasized!.dark) + func testColorsHomogeneityContentActionEnabledOnBackgroundEmphasized() { + assertHomogeneity(inverseTheme.colorContentActionEnabledOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusNegativeMuted!.light, inverseTheme.colorBackgroundStatusNegativeMuted!.dark) + func testColorsHomogeneityContentActionEnabledOnBackgroundStatusExcNegative() { + assertHomogeneity(inverseTheme.colorContentActionEnabledOnBackgroundStatusExcNegative) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusNegativeEmphasized!.light, inverseTheme.colorBackgroundStatusNegativeEmphasized!.dark) + func testColorsHomogeneityContentActionEnabledOnBackgroundStatusNegative() { + assertHomogeneity(inverseTheme.colorContentActionEnabledOnBackgroundStatusNegative) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusPositiveMuted!.light, inverseTheme.colorBackgroundStatusPositiveMuted!.dark) + func testColorsHomogeneityContentActionHover() { + assertHomogeneity(inverseTheme.colorContentActionHover) + } + + func testColorsHomogeneityContentActionHoverOnBackgroundEmphasized() { + assertHomogeneity(inverseTheme.colorContentActionHoverOnBackgroundEmphasized) + } + + func testColorsHomogeneityContentActionHoverOnBackgroundStatusExcNegative() { + assertHomogeneity(inverseTheme.colorContentActionHoverOnBackgroundStatusExcNegative) + } + + func testColorsHomogeneityContentActionHoverOnBackgroundStatusNegative() { + assertHomogeneity(inverseTheme.colorContentActionHoverOnBackgroundStatusNegative) + } + + // TODO: #124 - Add missing colorContentActionPressed* tokens + // TODO: #124 - Add missing colorContentActionDisabled* tokens + // TODO: #124 - Add missing colorContentActionFocus* tokens + // TODO: #124 - Add missing colorContentVisited* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelected* tokens + // TODO: #124 - Add missing colorContentActionSelectionHover* tokens + // TODO: #124 - Add missing colorContentActionSelectionPressed* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelectedFocus* tokens + // TODO: #124 - Add missing colorContentActionSelectionUnselected* tokens + // TODO: #124 - Add missing colorContentActionAlways* tokens + + func testColorsHomogeneityBorderDefault() throws { + assertHomogeneity(inverseTheme.colorBorderDefault) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusPositiveEmphasized!.light, inverseTheme.colorBackgroundStatusPositiveEmphasized!.dark) + func testColorsHomogeneityBorderDefaultOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorBorderDefaultOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorBackgroundStatusInformationMuted!.light, inverseTheme.colorBackgroundStatusInformationMuted!.dark) + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandPrimary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandSecondary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandTertiary - XCTAssertEqual(inverseTheme.colorBackgroundStatusInformationEmphasized!.light, inverseTheme.colorBackgroundStatusInformationEmphasized!.dark) + func testColorsHomogeneityBorderEmphasized() throws { + assertHomogeneity(inverseTheme.colorBorderEmphasized) + } - XCTAssertEqual(inverseTheme.colorContentDefault!.light, inverseTheme.colorContentDefault!.dark) + func testColorsHomogeneityBorderEmphasizedOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorBorderEmphasizedOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorContentDefaultOnBackgroundEmphasized!.light, inverseTheme.colorContentDefaultOnBackgroundEmphasized!.dark) + func testColorsHomogeneityBorderBrandPrimary() throws { + assertHomogeneity(inverseTheme.colorBorderBrandPrimary) + } - XCTAssertEqual(inverseTheme.colorContentMuted!.light, inverseTheme.colorContentMuted!.dark) + func testColorsHomogeneityBorderBrandPrimaryOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorBorderBrandPrimaryOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorContentMutedOnBackgroundEmphasized!.light, inverseTheme.colorContentMutedOnBackgroundEmphasized!.dark) + func testColorsHomogeneityBackgroundActionEnabled() throws { + assertHomogeneity(inverseTheme.colorBackgroundActionEnabled) + } - XCTAssertEqual(inverseTheme.colorContentBrandPrimary!.light, inverseTheme.colorContentBrandPrimary!.dark) + func testColorsHomogeneityBackgroundActionEnabledOnBackgroundEmphasized() throws { + assertHomogeneity(inverseTheme.colorBackgroundActionEnabledOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorContentBrandPrimaryOnBackgroundEmphasized!.light, inverseTheme.colorContentBrandPrimaryOnBackgroundEmphasized!.dark) + func testColorsHomogeneityBackgroundActionEnabledOnBackgroundStatusExcNegative() throws { + assertHomogeneity(inverseTheme.colorBackgroundActionEnabledOnBackgroundStatusExcNegative) + } - XCTAssertEqual(inverseTheme.colorContentStatusNegative!.light, inverseTheme.colorContentStatusNegative!.dark) + func testColorsHomogeneityBackgroundActionEnabledOnBackgroundStatusNegative() throws { + assertHomogeneity(inverseTheme.colorBackgroundActionEnabledOnBackgroundStatusNegative) + } - XCTAssertEqual(inverseTheme.colorContentStatusPositive!.light, inverseTheme.colorContentStatusPositive!.dark) + func testColorsHomogeneityActionPressed() { + assertHomogeneity(inverseTheme.colorBackgroundActionPressed) + } - XCTAssertEqual(inverseTheme.colorContentStatusInformation!.light, inverseTheme.colorContentStatusInformation!.dark) + func testColorsHomogeneityActionPressedOnBackgroundEmphasized() { + assertHomogeneity(inverseTheme.colorBackgroundActionPressedOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorBorderDefault!.light, inverseTheme.colorBorderDefault!.dark) + func testColorsHomogeneityActionPressedOnBackgroundStatusExcNegative() { + assertHomogeneity(inverseTheme.colorBackgroundActionPressedOnBackgroundStatusExcNegative) + } - XCTAssertEqual(inverseTheme.colorBorderDefaultOnBackgroundEmphasized!.light, inverseTheme.colorBorderDefaultOnBackgroundEmphasized!.dark) + func testColorsHomogeneityActionPressedOnBackgroundStatusNegative() { + assertHomogeneity(inverseTheme.colorBackgroundActionPressedOnBackgroundStautsNegative) + } - XCTAssertEqual(inverseTheme.colorBorderEmphasized!.light, inverseTheme.colorBorderEmphasized!.dark) + func testColorsHomogeneityActionDisabled() { + assertHomogeneity(inverseTheme.colorBackgroundActionDisabled) + } - XCTAssertEqual(inverseTheme.colorBorderEmphasizedOnBackgroundEmphasized!.light, inverseTheme.colorBorderEmphasizedOnBackgroundEmphasized!.dark) + func testColorsHomogeneityActionDisabledOnBackgroundEmphasized() { + assertHomogeneity(inverseTheme.colorBackgroundActionDisabledOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorBorderBrandPrimary!.light, inverseTheme.colorBorderBrandPrimary!.dark) + func testColorsHomogeneityActionDisabledOnBackgroundStatusExcNegative() { + assertHomogeneity(inverseTheme.colorBackgroundActionDisabledOnBackgroundStatusExcNegative) + } - XCTAssertEqual(inverseTheme.colorBorderBrandPrimaryOnBackgroundEmphasized!.light, inverseTheme.colorBorderBrandPrimaryOnBackgroundEmphasized!.dark) + func testColorsHomogeneityActionDisabledOnBackgroundStatusNegative() { + assertHomogeneity(inverseTheme.colorBackgroundActionDisabledOnBackgroundStatusNegative) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundPrimary!.light, inverseTheme.colorOnBackgroundPrimary!.dark) + func testColorsHomogeneityActionFocus() { + assertHomogeneity(inverseTheme.colorBackgroundActionFocus) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusAttractiveMuted!.light, inverseTheme.colorOnBackgroundStatusAttractiveMuted!.dark) + func testColorsHomogeneityActionFocusOnBackgroundEmphasized() { + assertHomogeneity(inverseTheme.colorBackgroundActionFocusOnBackgroundEmphasized) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusAttractiveEmphasized!.light, inverseTheme.colorOnBackgroundStatusAttractiveEmphasized!.dark) + func testColorsHomogeneityActionFocusOnBackgroundStatusExcNegative() { + assertHomogeneity(inverseTheme.colorBackgroundActionFocusOnBackgroundStatusExcNegative) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusWarningMuted!.light, inverseTheme.colorOnBackgroundStatusWarningMuted!.dark) + func testColorsHomogeneityActionFocusOnBackgroundStatusNegative() { + assertHomogeneity(inverseTheme.colorBackgroundActionFocusOnBackgroundStatusNegative) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusWarningEmphasized!.light, inverseTheme.colorOnBackgroundStatusWarningEmphasized!.dark) + func testColorsHomogeneityBackgroundAlwaysBlack() { + assertHomogeneity(inverseTheme.colorBackgroundAlwaysBlack) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusNegativeMuted!.light, inverseTheme.colorOnBackgroundStatusNegativeMuted!.dark) + func testColorsHomogeneityBackgroundAlwaysWhite() { + assertHomogeneity(inverseTheme.colorBackgroundAlwaysWhite) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusNegativeEmphasized!.light, inverseTheme.colorOnBackgroundStatusNegativeEmphasized!.dark) + func testColorsHomogeneityBackgroundAlwaysAttractive() { + assertHomogeneity(inverseTheme.colorBackgroundAlwaysAttractive) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusPositiveMuted!.light, inverseTheme.colorOnBackgroundStatusPositiveMuted!.dark) + func testColorsHomogeneityBackgroundAlwaysWarning() { + assertHomogeneity(inverseTheme.colorBackgroundAlwaysWarning) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusPositiveEmphasized!.light, inverseTheme.colorOnBackgroundStatusPositiveEmphasized!.dark) + func testColorsHomogeneityBackgroundAlwaysNegative() { + assertHomogeneity(inverseTheme.colorBackgroundAlwaysNegative) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusInformationMuted!.light, inverseTheme.colorOnBackgroundStatusInformationMuted!.dark) + func testColorsHomogeneityBackgroundAlwaysPositive() { + assertHomogeneity(inverseTheme.colorBackgroundAlwaysPositive) + } - XCTAssertEqual(inverseTheme.colorOnBackgroundStatusInformationEmphasized!.light, inverseTheme.colorOnBackgroundStatusInformationEmphasized!.dark) + func testColorsHomogeneityBackgroundAlwaysInformation() { + assertHomogeneity(inverseTheme.colorBackgroundAlwaysInformation) } + + // TODO: #124 - Add missing colorBorderActionEnabled* + // TODO: #124 - Add missing colorBorderActionHover* + // TODO: #124 - Add missing colorBorderActionPressed* + // TODO: #124 - Add missing colorBorderActionDisabled* + // TODO: #124 - Add missing colorBorderActionFocus* + // TODO: #124 - Add missing colorBorderSelectionSelected* + // TODO: #124 - Add missing colorBorderSelectionUnselected* + // TODO: #124 - Add missing colorBorderAlways* + // TODO: #124 - Add missing colorBorderOutside + // TODO: #124 - Add missing colorOnBackgroundStatusAttractive* + // TODO: #124 - Add missing colorOnBackgroundStatusWarning* + // TODO: #124 - Add missing colorOnBackgroundStatusNegative* + // TODO: #124 - Add missing colorOnBackgroundStatusPositive* + // TODO: #124 - Add missing colorOnBackgroundStatusInformation* + // TODO: #124 - Add missing colorOnBackgroundActionEnabled* + // TODO: #124 - Add missing colorOnBackgroundActionHover* + // TODO: #124 - Add missing colorOnBackgroundActionPressed* + // TODO: #124 - Add missing colorOnBackgroundActionDisabled* + // TODO: #124 - Add missing colorOnBackgroundActionFocus* + // TODO: #124 - Add missing colorOnBackgroundActionAlways* + // TODO: #124 - Add missing colorElevation* + // TODO: #124 - Add missing colorDecorativeBrand* + // TODO: #124 - Add missing colorDecorativeNeutral* + // TODO: #124 - Add missing colorDecorativeAccent* + // TODO: #124 - Add missing colorDecorativeSkin* + // TODO: #124 - Add missing colorChart* } diff --git a/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift b/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift index 79363337a..5cdc46d76 100644 --- a/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift +++ b/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift @@ -45,76 +45,4 @@ extension OrangeBrandColorRawTokens { public static let colorBrandWarmGray700: ColorOrangeBrandRawToken = "#685D50" public static let colorBrandWarmGray800: ColorOrangeBrandRawToken = "#48433D" public static let colorBrandWarmGray900: ColorOrangeBrandRawToken = "#353228" - - // MARK: Primitive token - Colors - Orange - Emerald - - public static let colorDecorativeEmerald100: ColorOrangeDecorativeRawToken = "#E5F5ED" - public static let colorDecorativeEmerald200: ColorOrangeDecorativeRawToken = "#C0E8DA" - public static let colorDecorativeEmerald300: ColorOrangeDecorativeRawToken = "#9BDABA" - public static let colorDecorativeEmerald400: ColorOrangeDecorativeRawToken = "#75CCA1" - public static let colorDecorativeEmerald500: ColorOrangeDecorativeRawToken = "#50BE87" - public static let colorDecorativeEmerald600: ColorOrangeDecorativeRawToken = "#3BA06E" - public static let colorDecorativeEmerald700: ColorOrangeDecorativeRawToken = "#2E7B54" - public static let colorDecorativeEmerald800: ColorOrangeDecorativeRawToken = "#20563B" - public static let colorDecorativeEmerald900: ColorOrangeDecorativeRawToken = "#123021" - - // MARK: Primitive token - Colors - Orange - Sky - - public static let colorDecorativeSky100: ColorOrangeDecorativeRawToken = "#D2ECF9" - public static let colorDecorativeSky200: ColorOrangeDecorativeRawToken = "#A5DAF3" - public static let colorDecorativeSky300: ColorOrangeDecorativeRawToken = "#79C7EC" - public static let colorDecorativeSky400: ColorOrangeDecorativeRawToken = "#4AB4E6" - public static let colorDecorativeSky500: ColorOrangeDecorativeRawToken = "#1FA2E0" - public static let colorDecorativeSky600: ColorOrangeDecorativeRawToken = "#1982B3" - public static let colorDecorativeSky700: ColorOrangeDecorativeRawToken = "#136186" - public static let colorDecorativeSky800: ColorOrangeDecorativeRawToken = "#0C415A" - public static let colorDecorativeSky900: ColorOrangeDecorativeRawToken = "#06202D" - - // MARK: Primitive token - Colors - Orange - Amber - - public static let colorDecorativeAmber100: ColorOrangeDecorativeRawToken = "#FFF0CC" - public static let colorDecorativeAmber200: ColorOrangeDecorativeRawToken = "#FFE199" - public static let colorDecorativeAmber300: ColorOrangeDecorativeRawToken = "#FFD266" - public static let colorDecorativeAmber400: ColorOrangeDecorativeRawToken = "#FFC333" - public static let colorDecorativeAmber500: ColorOrangeDecorativeRawToken = "#FFB400" - public static let colorDecorativeAmber600: ColorOrangeDecorativeRawToken = "#CC9000" - public static let colorDecorativeAmber700: ColorOrangeDecorativeRawToken = "#996C00" - public static let colorDecorativeAmber800: ColorOrangeDecorativeRawToken = "#664800" - public static let colorDecorativeAmber900: ColorOrangeDecorativeRawToken = "#332400" - - // MARK: Primitive token - Colors - Orange - Amethyst - - public static let colorDecorativeAmethyst100: ColorOrangeDecorativeRawToken = "#F1ECF9" - public static let colorDecorativeAmethyst200: ColorOrangeDecorativeRawToken = "#E0D4F2" - public static let colorDecorativeAmethyst300: ColorOrangeDecorativeRawToken = "#C5ADE6" - public static let colorDecorativeAmethyst400: ColorOrangeDecorativeRawToken = "#A885D8" - public static let colorDecorativeAmethyst500: ColorOrangeDecorativeRawToken = "#8D60CD" - public static let colorDecorativeAmethyst600: ColorOrangeDecorativeRawToken = "#5B2F98" - public static let colorDecorativeAmethyst700: ColorOrangeDecorativeRawToken = "#432371" - public static let colorDecorativeAmethyst800: ColorOrangeDecorativeRawToken = "#2C174A" - public static let colorDecorativeAmethyst900: ColorOrangeDecorativeRawToken = "#150B23" - - // MARK: Primitive token - Colors - Orange - Shocking Pink - - public static let colorDecorativeShockingPink100: ColorOrangeDecorativeRawToken = "#FFE5F6" - public static let colorDecorativeShockingPink200: ColorOrangeDecorativeRawToken = "#FFB4E6" - public static let colorDecorativeShockingPink300: ColorOrangeDecorativeRawToken = "#FF80D4" - public static let colorDecorativeShockingPink400: ColorOrangeDecorativeRawToken = "#FF4DC3" - public static let colorDecorativeShockingPink500: ColorOrangeDecorativeRawToken = "#FF1AB2" - public static let colorDecorativeShockingPink600: ColorOrangeDecorativeRawToken = "#E50099" - public static let colorDecorativeShockingPink700: ColorOrangeDecorativeRawToken = "#B20077" - public static let colorDecorativeShockingPink800: ColorOrangeDecorativeRawToken = "#800055" - public static let colorDecorativeShockingPink900: ColorOrangeDecorativeRawToken = "#4D0033" - - // MARK: Primitive token - Colors - Orange - Deep Peach - - public static let colorDecorativeDeepPeach100: ColorOrangeDecorativeRawToken = "#FBEBDF" - public static let colorDecorativeDeepPeach200: ColorOrangeDecorativeRawToken = "#F4CFB2" - public static let colorDecorativeDeepPeach300: ColorOrangeDecorativeRawToken = "#E3B591" - public static let colorDecorativeDeepPeach400: ColorOrangeDecorativeRawToken = "#C19372" - public static let colorDecorativeDeepPeach500: ColorOrangeDecorativeRawToken = "#CF7E3F" - public static let colorDecorativeDeepPeach600: ColorOrangeDecorativeRawToken = "#AA6631" - public static let colorDecorativeDeepPeach700: ColorOrangeDecorativeRawToken = "#7E4F2A" - public static let colorDecorativeDeepPeach800: ColorOrangeDecorativeRawToken = "#553720" - public static let colorDecorativeDeepPeach900: ColorOrangeDecorativeRawToken = "#2E2014" } diff --git a/OUDS/Core/Themes/Orange/Tests/OrangeBrandColorRawTokensTests.swift b/OUDS/Core/Themes/Orange/Tests/OrangeBrandColorRawTokensTests.swift index f4852f0df..097b25a3a 100644 --- a/OUDS/Core/Themes/Orange/Tests/OrangeBrandColorRawTokensTests.swift +++ b/OUDS/Core/Themes/Orange/Tests/OrangeBrandColorRawTokensTests.swift @@ -97,209 +97,4 @@ final class OrangeBrandColorRawTokensTests: XCTestCase { func testOrangeBrandColorRawTokenColorBrandWarmGray800LighterThanWarmGray900() throws { XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorBrandWarmGray800, OrangeBrandColorRawTokens.colorBrandWarmGray900) } - - // MARK: Primitive token - Colors - Orange - Emerald - - func testOrangeBrandColorRawTokenColorDecorativeEmerald100LighterThanEmerald200() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeEmerald100, OrangeBrandColorRawTokens.colorDecorativeEmerald200) - } - - func testOrangeBrandColorRawTokenColorDecorativeEmerald200LighterThanEmerald300() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeEmerald200, OrangeBrandColorRawTokens.colorDecorativeEmerald300) - } - - func testOrangeBrandColorRawTokenColorDecorativeEmerald300LighterThanEmerald400() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeEmerald300, OrangeBrandColorRawTokens.colorDecorativeEmerald400) - } - - func testOrangeBrandColorRawTokenColorDecorativeEmerald400LighterThanEmerald500() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeEmerald400, OrangeBrandColorRawTokens.colorDecorativeEmerald500) - } - - func testOrangeBrandColorRawTokenColorDecorativeEmerald500LighterThanEmerald600() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeEmerald500, OrangeBrandColorRawTokens.colorDecorativeEmerald600) - } - - func testOrangeBrandColorRawTokenColorDecorativeEmerald600LighterThanEmerald700() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeEmerald600, OrangeBrandColorRawTokens.colorDecorativeEmerald700) - } - - func testOrangeBrandColorRawTokenColorDecorativeEmerald700LighterThanEmerald800() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeEmerald700, OrangeBrandColorRawTokens.colorDecorativeEmerald800) - } - - func testOrangeBrandColorRawTokenColorDecorativeEmerald800LighterThanEmerald900() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeEmerald800, OrangeBrandColorRawTokens.colorDecorativeEmerald900) - } - - // MARK: Primitive token - Colors - Orange - Sky - - func testOrangeBrandColorRawTokenColorDecorativeSky100LighterThanSky200() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeSky100, OrangeBrandColorRawTokens.colorDecorativeSky200) - } - - func testOrangeBrandColorRawTokenColorDecorativeSky200LighterThanSky300() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeSky200, OrangeBrandColorRawTokens.colorDecorativeSky300) - } - - func testOrangeBrandColorRawTokenColorDecorativeSky300LighterThanSky400() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeSky300, OrangeBrandColorRawTokens.colorDecorativeSky400) - } - - func testOrangeBrandColorRawTokenColorDecorativeSky400LighterThanSky500() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeSky400, OrangeBrandColorRawTokens.colorDecorativeSky500) - } - - func testOrangeBrandColorRawTokenColorDecorativeSky500LighterThanSky600() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeSky500, OrangeBrandColorRawTokens.colorDecorativeSky600) - } - - func testOrangeBrandColorRawTokenColorDecorativeSky600LighterThanSky700() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeSky600, OrangeBrandColorRawTokens.colorDecorativeSky700) - } - - func testOrangeBrandColorRawTokenColorDecorativeSky700LighterThanSky800() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeSky700, OrangeBrandColorRawTokens.colorDecorativeSky800) - } - - func testOrangeBrandColorRawTokenColorDecorativeSky800LighterThanSky900() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeSky800, OrangeBrandColorRawTokens.colorDecorativeSky900) - } - - // MARK: Primitive token - Colors - Orange - Amber - - func testOrangeBrandColorRawTokenColorDecorativeAmber100LighterThanAmber200() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmber100, OrangeBrandColorRawTokens.colorDecorativeAmber200) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmber200LighterThanAmber300() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmber200, OrangeBrandColorRawTokens.colorDecorativeAmber300) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmber300LighterThanAmber400() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmber300, OrangeBrandColorRawTokens.colorDecorativeAmber400) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmber400LighterThanAmber500() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmber400, OrangeBrandColorRawTokens.colorDecorativeAmber500) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmber500LighterThanAmber600() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmber500, OrangeBrandColorRawTokens.colorDecorativeAmber600) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmber600LighterThanAmber700() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmber600, OrangeBrandColorRawTokens.colorDecorativeAmber700) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmber700LighterThanAmber800() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmber700, OrangeBrandColorRawTokens.colorDecorativeAmber800) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmber800LighterThanAmber900() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmber800, OrangeBrandColorRawTokens.colorDecorativeAmber900) - } - - // MARK: Primitive token - Colors - Orange - Amethyst - - func testOrangeBrandColorRawTokenColorDecorativeAmethyst100LighterThanAmethyst200() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmethyst100, OrangeBrandColorRawTokens.colorDecorativeAmethyst200) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmethyst200LighterThanAmethyst300() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmethyst200, OrangeBrandColorRawTokens.colorDecorativeAmethyst300) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmethyst300LighterThanAmethyst400() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmethyst300, OrangeBrandColorRawTokens.colorDecorativeAmethyst400) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmethyst400LighterThanAmethyst500() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmethyst400, OrangeBrandColorRawTokens.colorDecorativeAmethyst500) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmethyst500LighterThanAmethyst600() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmethyst500, OrangeBrandColorRawTokens.colorDecorativeAmethyst600) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmethyst600LighterThanAmethyst700() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmethyst600, OrangeBrandColorRawTokens.colorDecorativeAmethyst700) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmethyst700LighterThanAmethyst800() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmethyst700, OrangeBrandColorRawTokens.colorDecorativeAmethyst800) - } - - func testOrangeBrandColorRawTokenColorDecorativeAmethyst800LighterThanAmethyst900() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeAmethyst800, OrangeBrandColorRawTokens.colorDecorativeAmethyst900) - } - - // MARK: Primitive token - Colors - Orange - Shocking Pink - - func testOrangeBrandColorRawTokenColorDecorativeShockingPink100LighterThan200() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeShockingPink100, OrangeBrandColorRawTokens.colorDecorativeShockingPink200) - } - - func testOrangeBrandColorRawTokenColorDecorativeShockingPink200LighterThan300() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeShockingPink200, OrangeBrandColorRawTokens.colorDecorativeShockingPink300) - } - - func testOrangeBrandColorRawTokenColorDecorativeShockingPink300LighterThan400() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeShockingPink300, OrangeBrandColorRawTokens.colorDecorativeShockingPink400) - } - - func testOrangeBrandColorRawTokenColorDecorativeShockingPink400LighterThan500() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeShockingPink400, OrangeBrandColorRawTokens.colorDecorativeShockingPink500) - } - - func testOrangeBrandColorRawTokenColorDecorativeShockingPink500LighterThan600() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeShockingPink500, OrangeBrandColorRawTokens.colorDecorativeShockingPink600) - } - - func testOrangeBrandColorRawTokenColorDecorativeShockingPink600LighterThan700() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeShockingPink600, OrangeBrandColorRawTokens.colorDecorativeShockingPink700) - } - - func testOrangeBrandColorRawTokenColorDecorativeShockingPink700LighterThan800() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeShockingPink700, OrangeBrandColorRawTokens.colorDecorativeShockingPink800) - } - - func testOrangeBrandColorRawTokenColorDecorativeShockingPink800LighterThan900() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeShockingPink800, OrangeBrandColorRawTokens.colorDecorativeShockingPink900) - } - - // MARK: Primitive token - Colors - Orange - Deep Peach - - func testOrangeBrandColorRawTokenColorDecorativeDeepPeach100LighterThan200() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeDeepPeach100, OrangeBrandColorRawTokens.colorDecorativeDeepPeach200) - } - - func testOrangeBrandColorRawTokenColorDecorativeDeepPeach200LighterThan300() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeDeepPeach200, OrangeBrandColorRawTokens.colorDecorativeDeepPeach300) - } - - func testOrangeBrandColorRawTokenColorDecorativeDeepPeach300LighterThan400() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeDeepPeach300, OrangeBrandColorRawTokens.colorDecorativeDeepPeach400) - } - - func testOrangeBrandColorRawTokenColorDecorativeDeepPeach400LighterThan500() throws { - XCTAssertColorDarkerThan(OrangeBrandColorRawTokens.colorDecorativeDeepPeach400, OrangeBrandColorRawTokens.colorDecorativeDeepPeach500) - // TODO: Why? Is the palette well defined in design team. This is the only case 400 is darker than 500 - } - - func testOrangeBrandColorRawTokenColorDecorativeDeepPeach500LighterThan600() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeDeepPeach500, OrangeBrandColorRawTokens.colorDecorativeDeepPeach600) - } - - func testOrangeBrandColorRawTokenColorDecorativeDeepPeach600LighterThan700() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeDeepPeach600, OrangeBrandColorRawTokens.colorDecorativeDeepPeach700) - } - - func testOrangeBrandColorRawTokenColorDecorativeDeepPeach700LighterThan800() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeDeepPeach700, OrangeBrandColorRawTokens.colorDecorativeDeepPeach800) - } - - func testOrangeBrandColorRawTokenColorDecorativeDeepPeach800LighterThan900() throws { - XCTAssertColorLighterThan(OrangeBrandColorRawTokens.colorDecorativeDeepPeach800, OrangeBrandColorRawTokens.colorDecorativeDeepPeach900) - } } diff --git a/OUDS/Core/Themes/Sosh/Sources/Values/SoshBrandColorRawTokens+Values.swift b/OUDS/Core/Themes/Sosh/Sources/Values/SoshBrandColorRawTokens+Values.swift index b516c1087..f9654ae3a 100644 --- a/OUDS/Core/Themes/Sosh/Sources/Values/SoshBrandColorRawTokens+Values.swift +++ b/OUDS/Core/Themes/Sosh/Sources/Values/SoshBrandColorRawTokens+Values.swift @@ -20,43 +20,43 @@ extension SoshBrandColorRawTokens { // MARK: Primitive token - Colors - Sosh - Magenta - public static let colorDecorativeMagenta50: ColorSoshPrimitiveToken = "#FCE9EE" - public static let colorDecorativeMagenta100: ColorSoshPrimitiveToken = "#F8D3DC" - public static let colorDecorativeMagenta200: ColorSoshPrimitiveToken = "#F2A6B9" - public static let colorDecorativeMagenta300: ColorSoshPrimitiveToken = "#EB7A96" - public static let colorDecorativeMagenta400: ColorSoshPrimitiveToken = "#E55277" - public static let colorDecorativeMagenta500: ColorSoshPrimitiveToken = "#DE2554" - public static let colorDecorativeMagenta600: ColorSoshPrimitiveToken = "#B61B42" - public static let colorDecorativeMagenta700: ColorSoshPrimitiveToken = "#851430" - public static let colorDecorativeMagenta800: ColorSoshPrimitiveToken = "#590D20" - public static let colorDecorativeMagenta900: ColorSoshPrimitiveToken = "#2C0710" - public static let colorDecorativeMagenta950: ColorSoshPrimitiveToken = "#160308" + public static let colorBrandMagenta50: ColorSoshPrimitiveToken = "#FCE9EE" + public static let colorBrandMagenta100: ColorSoshPrimitiveToken = "#F8D3DC" + public static let colorBrandMagenta200: ColorSoshPrimitiveToken = "#F2A6B9" + public static let colorBrandMagenta300: ColorSoshPrimitiveToken = "#EB7A96" + public static let colorBrandMagenta400: ColorSoshPrimitiveToken = "#E55277" + public static let colorBrandMagenta500: ColorSoshPrimitiveToken = "#DE2554" + public static let colorBrandMagenta600: ColorSoshPrimitiveToken = "#B61B42" + public static let colorBrandMagenta700: ColorSoshPrimitiveToken = "#851430" + public static let colorBrandMagenta800: ColorSoshPrimitiveToken = "#590D20" + public static let colorBrandMagenta900: ColorSoshPrimitiveToken = "#2C0710" + public static let colorBrandMagenta950: ColorSoshPrimitiveToken = "#160308" // MARK: Primitive token - Colors - Sosh - Citrine - public static let colorDecorativeCitrine50: ColorSoshPrimitiveToken = "#FFFAE5" - public static let colorDecorativeCitrine100: ColorSoshPrimitiveToken = "#FFF6CC" - public static let colorDecorativeCitrine200: ColorSoshPrimitiveToken = "#FFEC99" - public static let colorDecorativeCitrine300: ColorSoshPrimitiveToken = "#FFE366" - public static let colorDecorativeCitrine400: ColorSoshPrimitiveToken = "#FFD92E" - public static let colorDecorativeCitrine500: ColorSoshPrimitiveToken = "#FBCD00" - public static let colorDecorativeCitrine600: ColorSoshPrimitiveToken = "#C7A200" - public static let colorDecorativeCitrine700: ColorSoshPrimitiveToken = "#997D00" - public static let colorDecorativeCitrine800: ColorSoshPrimitiveToken = "#665300" - public static let colorDecorativeCitrine900: ColorSoshPrimitiveToken = "#332A00" - public static let colorDecorativeCitrine950: ColorSoshPrimitiveToken = "#191500" + public static let colorBrandCitrine50: ColorSoshPrimitiveToken = "#FFFAE5" + public static let colorBrandCitrine100: ColorSoshPrimitiveToken = "#FFF6CC" + public static let colorBrandCitrine200: ColorSoshPrimitiveToken = "#FFEC99" + public static let colorBrandCitrine300: ColorSoshPrimitiveToken = "#FFE366" + public static let colorBrandCitrine400: ColorSoshPrimitiveToken = "#FFD92E" + public static let colorBrandCitrine500: ColorSoshPrimitiveToken = "#FBCD00" + public static let colorBrandCitrine600: ColorSoshPrimitiveToken = "#C7A200" + public static let colorBrandCitrine700: ColorSoshPrimitiveToken = "#997D00" + public static let colorBrandCitrine800: ColorSoshPrimitiveToken = "#665300" + public static let colorBrandCitrine900: ColorSoshPrimitiveToken = "#332A00" + public static let colorBrandCitrine950: ColorSoshPrimitiveToken = "#191500" // MARK: Primitive token - Colors - Sosh - Blue Duck - public static let colorDecorativeBlueDuck50: ColorSoshPrimitiveToken = "#E7F6F9" - public static let colorDecorativeBlueDuck100: ColorSoshPrimitiveToken = "#CBEDF1" - public static let colorDecorativeBlueDuck200: ColorSoshPrimitiveToken = "#96DAE3" - public static let colorDecorativeBlueDuck300: ColorSoshPrimitiveToken = "#62C8D5" - public static let colorDecorativeBlueDuck400: ColorSoshPrimitiveToken = "#34B1C1" - public static let colorDecorativeBlueDuck500: ColorSoshPrimitiveToken = "#26828E" - public static let colorDecorativeBlueDuck600: ColorSoshPrimitiveToken = "#1E6771" - public static let colorDecorativeBlueDuck700: ColorSoshPrimitiveToken = "#174D55" - public static let colorDecorativeBlueDuck800: ColorSoshPrimitiveToken = "#0F3438" - public static let colorDecorativeBlueDuck900: ColorSoshPrimitiveToken = "#081A1C" - public static let colorDecorativeBlueDuck950: ColorSoshPrimitiveToken = "#040F10" + public static let colorBrandBlueDuck50: ColorSoshPrimitiveToken = "#E7F6F9" + public static let colorBrandBlueDuck100: ColorSoshPrimitiveToken = "#CBEDF1" + public static let colorBrandBlueDuck200: ColorSoshPrimitiveToken = "#96DAE3" + public static let colorBrandBlueDuck300: ColorSoshPrimitiveToken = "#62C8D5" + public static let colorBrandBlueDuck400: ColorSoshPrimitiveToken = "#34B1C1" + public static let colorBrandBlueDuck500: ColorSoshPrimitiveToken = "#26828E" + public static let colorBrandBlueDuck600: ColorSoshPrimitiveToken = "#1E6771" + public static let colorBrandBlueDuck700: ColorSoshPrimitiveToken = "#174D55" + public static let colorBrandBlueDuck800: ColorSoshPrimitiveToken = "#0F3438" + public static let colorBrandBlueDuck900: ColorSoshPrimitiveToken = "#081A1C" + public static let colorBrandBlueDuck950: ColorSoshPrimitiveToken = "#040F10" } diff --git a/OUDS/Core/Themes/Sosh/Tests/SoshBrandColorRawTokensTests.swift b/OUDS/Core/Themes/Sosh/Tests/SoshBrandColorRawTokensTests.swift index f6c96cf01..7df60332b 100644 --- a/OUDS/Core/Themes/Sosh/Tests/SoshBrandColorRawTokensTests.swift +++ b/OUDS/Core/Themes/Sosh/Tests/SoshBrandColorRawTokensTests.swift @@ -24,127 +24,127 @@ final class SoshBrandColorRawTokensTests: XCTestCase { // MARK: Primitive token - Colors - Sosh - Magenta - func testColorDecorativeMagenta50LighterThan100() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta50, SoshBrandColorRawTokens.colorDecorativeMagenta100) + func testColorBrandMagenta50LighterThan100() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta50, SoshBrandColorRawTokens.colorBrandMagenta100) } - func testColorDecorativeMagenta100LighterThan200() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta100, SoshBrandColorRawTokens.colorDecorativeMagenta200) + func testColorBrandMagenta100LighterThan200() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta100, SoshBrandColorRawTokens.colorBrandMagenta200) } - func testColorDecorativeMagenta200LighterThan300() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta200, SoshBrandColorRawTokens.colorDecorativeMagenta300) + func testColorBrandMagenta200LighterThan300() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta200, SoshBrandColorRawTokens.colorBrandMagenta300) } - func testColorDecorativeMagenta300LighterThan400() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta300, SoshBrandColorRawTokens.colorDecorativeMagenta400) + func testColorBrandMagenta300LighterThan400() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta300, SoshBrandColorRawTokens.colorBrandMagenta400) } - func testColorDecorativeMagenta400LighterThan500() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta400, SoshBrandColorRawTokens.colorDecorativeMagenta500) + func testColorBrandMagenta400LighterThan500() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta400, SoshBrandColorRawTokens.colorBrandMagenta500) } - func testColorDecorativeMagenta500LighterThan600() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta500, SoshBrandColorRawTokens.colorDecorativeMagenta600) + func testColorBrandMagenta500LighterThan600() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta500, SoshBrandColorRawTokens.colorBrandMagenta600) } - func testColorDecorativeMagenta600LighterThan700() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta600, SoshBrandColorRawTokens.colorDecorativeMagenta700) + func testColorBrandMagenta600LighterThan700() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta600, SoshBrandColorRawTokens.colorBrandMagenta700) } - func testColorDecorativeMagenta700LighterThan800() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta700, SoshBrandColorRawTokens.colorDecorativeMagenta800) + func testColorBrandMagenta700LighterThan800() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta700, SoshBrandColorRawTokens.colorBrandMagenta800) } - func testColorDecorativeMagenta800LighterThan900() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta800, SoshBrandColorRawTokens.colorDecorativeMagenta900) + func testColorBrandMagenta800LighterThan900() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta800, SoshBrandColorRawTokens.colorBrandMagenta900) } - func testColorDecorativeMagenta900LighterThan950() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeMagenta900, SoshBrandColorRawTokens.colorDecorativeMagenta950) + func testColorBrandMagenta900LighterThan950() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandMagenta900, SoshBrandColorRawTokens.colorBrandMagenta950) } // MARK: Primitive token - Colors - Sosh - Citrine - func testColorDecorativeCitrine50LighterThan100() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine50, SoshBrandColorRawTokens.colorDecorativeCitrine100) + func testColorBrandCitrine50LighterThan100() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine50, SoshBrandColorRawTokens.colorBrandCitrine100) } - func testColorDecorativeCitrine100LighterThan200() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine100, SoshBrandColorRawTokens.colorDecorativeCitrine200) + func testColorBrandCitrine100LighterThan200() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine100, SoshBrandColorRawTokens.colorBrandCitrine200) } - func testColorDecorativeCitrine200LighterThan300() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine200, SoshBrandColorRawTokens.colorDecorativeCitrine300) + func testColorBrandCitrine200LighterThan300() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine200, SoshBrandColorRawTokens.colorBrandCitrine300) } - func testColorDecorativeCitrine300LighterThan400() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine300, SoshBrandColorRawTokens.colorDecorativeCitrine400) + func testColorBrandCitrine300LighterThan400() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine300, SoshBrandColorRawTokens.colorBrandCitrine400) } - func testColorDecorativeCitrine400LighterThan500() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine400, SoshBrandColorRawTokens.colorDecorativeCitrine500) + func testColorBrandCitrine400LighterThan500() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine400, SoshBrandColorRawTokens.colorBrandCitrine500) } - func testColorDecorativeCitrine500LighterThan600() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine500, SoshBrandColorRawTokens.colorDecorativeCitrine600) + func testColorBrandCitrine500LighterThan600() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine500, SoshBrandColorRawTokens.colorBrandCitrine600) } - func testColorDecorativeCitrine600LighterThan700() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine600, SoshBrandColorRawTokens.colorDecorativeCitrine700) + func testColorBrandCitrine600LighterThan700() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine600, SoshBrandColorRawTokens.colorBrandCitrine700) } - func testColorDecorativeCitrine700LighterThan800() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine700, SoshBrandColorRawTokens.colorDecorativeCitrine800) + func testColorBrandCitrine700LighterThan800() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine700, SoshBrandColorRawTokens.colorBrandCitrine800) } - func testColorDecorativeCitrine800LighterThan900() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine800, SoshBrandColorRawTokens.colorDecorativeCitrine900) + func testColorBrandCitrine800LighterThan900() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine800, SoshBrandColorRawTokens.colorBrandCitrine900) } - func testColorDecorativeCitrine900LighterThan950() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeCitrine900, SoshBrandColorRawTokens.colorDecorativeCitrine950) + func testColorBrandCitrine900LighterThan950() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandCitrine900, SoshBrandColorRawTokens.colorBrandCitrine950) } // MARK: Primitive token - Colors - Sosh - Blue Duck - func testColorDecorativeBlueDuck50LighterThan100() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck50, SoshBrandColorRawTokens.colorDecorativeBlueDuck100) + func testColorBrandBlueDuck50LighterThan100() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck50, SoshBrandColorRawTokens.colorBrandBlueDuck100) } - func testColorDecorativeBlueDuck100LighterThan200() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck100, SoshBrandColorRawTokens.colorDecorativeBlueDuck200) + func testColorBrandBlueDuck100LighterThan200() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck100, SoshBrandColorRawTokens.colorBrandBlueDuck200) } - func testColorDecorativeBlueDuck200LighterThan300() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck200, SoshBrandColorRawTokens.colorDecorativeBlueDuck300) + func testColorBrandBlueDuck200LighterThan300() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck200, SoshBrandColorRawTokens.colorBrandBlueDuck300) } - func testColorDecorativeBlueDuck300LighterThan400() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck300, SoshBrandColorRawTokens.colorDecorativeBlueDuck400) + func testColorBrandBlueDuck300LighterThan400() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck300, SoshBrandColorRawTokens.colorBrandBlueDuck400) } - func testColorDecorativeBlueDuck400LighterThan500() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck400, SoshBrandColorRawTokens.colorDecorativeBlueDuck500) + func testColorBrandBlueDuck400LighterThan500() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck400, SoshBrandColorRawTokens.colorBrandBlueDuck500) } - func testColorDecorativeBlueDuck500LighterThan600() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck500, SoshBrandColorRawTokens.colorDecorativeBlueDuck600) + func testColorBrandBlueDuck500LighterThan600() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck500, SoshBrandColorRawTokens.colorBrandBlueDuck600) } - func testColorDecorativeBlueDuck600LighterThan700() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck600, SoshBrandColorRawTokens.colorDecorativeBlueDuck700) + func testColorBrandBlueDuck600LighterThan700() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck600, SoshBrandColorRawTokens.colorBrandBlueDuck700) } - func testColorDecorativeBlueDuck700LighterThan800() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck700, SoshBrandColorRawTokens.colorDecorativeBlueDuck800) + func testColorBrandBlueDuck700LighterThan800() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck700, SoshBrandColorRawTokens.colorBrandBlueDuck800) } - func testColorDecorativeBlueDuck800LighterThan900() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck800, SoshBrandColorRawTokens.colorDecorativeBlueDuck900) + func testColorBrandBlueDuck800LighterThan900() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck800, SoshBrandColorRawTokens.colorBrandBlueDuck900) } - func testColorDecorativeBlueDuck900LighterThan950() throws { - XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorDecorativeBlueDuck900, SoshBrandColorRawTokens.colorDecorativeBlueDuck950) + func testColorBrandBlueDuck900LighterThan950() throws { + XCTAssertColorLighterThan(SoshBrandColorRawTokens.colorBrandBlueDuck900, SoshBrandColorRawTokens.colorBrandBlueDuck950) } } diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/ColorRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/ColorRawTokens+Values.swift index 745faab86..eba7db316 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/ColorRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/ColorRawTokens+Values.swift @@ -100,6 +100,78 @@ extension ColorRawTokens { public static let colorFunctionalDodgerBlue800: ColorRawToken = "#00598A" public static let colorFunctionalDodgerBlue900: ColorRawToken = "#003857" + // MARK: Primitive token - Colors - Orange - Emerald + + public static let colorDecorativeEmerald100: ColorRawToken = "#E5F5ED" + public static let colorDecorativeEmerald200: ColorRawToken = "#C0E8DA" + public static let colorDecorativeEmerald300: ColorRawToken = "#9BDABA" + public static let colorDecorativeEmerald400: ColorRawToken = "#75CCA1" + public static let colorDecorativeEmerald500: ColorRawToken = "#50BE87" + public static let colorDecorativeEmerald600: ColorRawToken = "#3BA06E" + public static let colorDecorativeEmerald700: ColorRawToken = "#2E7B54" + public static let colorDecorativeEmerald800: ColorRawToken = "#20563B" + public static let colorDecorativeEmerald900: ColorRawToken = "#123021" + + // MARK: Primitive token - Colors - Orange - Sky + + public static let colorDecorativeSky100: ColorRawToken = "#D2ECF9" + public static let colorDecorativeSky200: ColorRawToken = "#A5DAF3" + public static let colorDecorativeSky300: ColorRawToken = "#79C7EC" + public static let colorDecorativeSky400: ColorRawToken = "#4AB4E6" + public static let colorDecorativeSky500: ColorRawToken = "#1FA2E0" + public static let colorDecorativeSky600: ColorRawToken = "#1982B3" + public static let colorDecorativeSky700: ColorRawToken = "#136186" + public static let colorDecorativeSky800: ColorRawToken = "#0C415A" + public static let colorDecorativeSky900: ColorRawToken = "#06202D" + + // MARK: Primitive token - Colors - Orange - Amber + + public static let colorDecorativeAmber100: ColorRawToken = "#FFF0CC" + public static let colorDecorativeAmber200: ColorRawToken = "#FFE199" + public static let colorDecorativeAmber300: ColorRawToken = "#FFD266" + public static let colorDecorativeAmber400: ColorRawToken = "#FFC333" + public static let colorDecorativeAmber500: ColorRawToken = "#FFB400" + public static let colorDecorativeAmber600: ColorRawToken = "#CC9000" + public static let colorDecorativeAmber700: ColorRawToken = "#996C00" + public static let colorDecorativeAmber800: ColorRawToken = "#664800" + public static let colorDecorativeAmber900: ColorRawToken = "#332400" + + // MARK: Primitive token - Colors - Orange - Amethyst + + public static let colorDecorativeAmethyst100: ColorRawToken = "#F1ECF9" + public static let colorDecorativeAmethyst200: ColorRawToken = "#E0D4F2" + public static let colorDecorativeAmethyst300: ColorRawToken = "#C5ADE6" + public static let colorDecorativeAmethyst400: ColorRawToken = "#A885D8" + public static let colorDecorativeAmethyst500: ColorRawToken = "#8D60CD" + public static let colorDecorativeAmethyst600: ColorRawToken = "#5B2F98" + public static let colorDecorativeAmethyst700: ColorRawToken = "#432371" + public static let colorDecorativeAmethyst800: ColorRawToken = "#2C174A" + public static let colorDecorativeAmethyst900: ColorRawToken = "#150B23" + + // MARK: Primitive token - Colors - Orange - Shocking Pink + + public static let colorDecorativeShockingPink100: ColorRawToken = "#FFE5F6" + public static let colorDecorativeShockingPink200: ColorRawToken = "#FFB4E6" + public static let colorDecorativeShockingPink300: ColorRawToken = "#FF80D4" + public static let colorDecorativeShockingPink400: ColorRawToken = "#FF4DC3" + public static let colorDecorativeShockingPink500: ColorRawToken = "#FF1AB2" + public static let colorDecorativeShockingPink600: ColorRawToken = "#E50099" + public static let colorDecorativeShockingPink700: ColorRawToken = "#B20077" + public static let colorDecorativeShockingPink800: ColorRawToken = "#800055" + public static let colorDecorativeShockingPink900: ColorRawToken = "#4D0033" + + // MARK: Primitive token - Colors - Orange - Deep Peach + + public static let colorDecorativeDeepPeach100: ColorRawToken = "#FBEBDF" + public static let colorDecorativeDeepPeach200: ColorRawToken = "#F4CFB2" + public static let colorDecorativeDeepPeach300: ColorRawToken = "#E3B591" + public static let colorDecorativeDeepPeach400: ColorRawToken = "#C19372" + public static let colorDecorativeDeepPeach500: ColorRawToken = "#CF7E3F" + public static let colorDecorativeDeepPeach600: ColorRawToken = "#AA6631" + public static let colorDecorativeDeepPeach700: ColorRawToken = "#7E4F2A" + public static let colorDecorativeDeepPeach800: ColorRawToken = "#553720" + public static let colorDecorativeDeepPeach900: ColorRawToken = "#2E2014" + // MARK: Primitive token - Colors - Transparent black public static let colorTransparentBlack0: ColorRawToken = apply(opacity: OpacityRawTokens.opacity0, on: colorFunctionalBlack) diff --git a/OUDS/Core/Tokens/RawTokens/Tests/ColorRawTokensTests.swift b/OUDS/Core/Tokens/RawTokens/Tests/ColorRawTokensTests.swift index a723fd56d..f15a0c57d 100644 --- a/OUDS/Core/Tokens/RawTokens/Tests/ColorRawTokensTests.swift +++ b/OUDS/Core/Tokens/RawTokens/Tests/ColorRawTokensTests.swift @@ -15,6 +15,8 @@ import XCTest import OUDSTokensRaw import TestsUtils +// swiftlint:disable type_body_length + /// The aim of this tests class is to look for regressions in **color raw tokens**. /// Because these values will be at least generated through an external tool, is it not relevant to test each token values. /// Indeed, each future generation of Swift code may break theses tests because there are new values. @@ -331,4 +333,211 @@ final class ColorRawTokensTests: XCTestCase { func testColorRawTokenColorTransparentWhite800LighterThanColorTransparentWhite900() throws { XCTAssertColorDarkerThan(ColorRawTokens.colorTransparentWhite800, ColorRawTokens.colorTransparentWhite900) } + + // MARK: Primitive token - Colors - Emerald + + func testOrangeBrandColorRawTokenColorDecorativeEmerald100LighterThanEmerald200() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeEmerald100, ColorRawTokens.colorDecorativeEmerald200) + } + + func testOrangeBrandColorRawTokenColorDecorativeEmerald200LighterThanEmerald300() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeEmerald200, ColorRawTokens.colorDecorativeEmerald300) + } + + func testOrangeBrandColorRawTokenColorDecorativeEmerald300LighterThanEmerald400() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeEmerald300, ColorRawTokens.colorDecorativeEmerald400) + } + + func testOrangeBrandColorRawTokenColorDecorativeEmerald400LighterThanEmerald500() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeEmerald400, ColorRawTokens.colorDecorativeEmerald500) + } + + func testOrangeBrandColorRawTokenColorDecorativeEmerald500LighterThanEmerald600() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeEmerald500, ColorRawTokens.colorDecorativeEmerald600) + } + + func testOrangeBrandColorRawTokenColorDecorativeEmerald600LighterThanEmerald700() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeEmerald600, ColorRawTokens.colorDecorativeEmerald700) + } + + func testOrangeBrandColorRawTokenColorDecorativeEmerald700LighterThanEmerald800() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeEmerald700, ColorRawTokens.colorDecorativeEmerald800) + } + + func testOrangeBrandColorRawTokenColorDecorativeEmerald800LighterThanEmerald900() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeEmerald800, ColorRawTokens.colorDecorativeEmerald900) + } + + // MARK: Primitive token - Colors - Sky + + func testOrangeBrandColorRawTokenColorDecorativeSky100LighterThanSky200() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeSky100, ColorRawTokens.colorDecorativeSky200) + } + + func testOrangeBrandColorRawTokenColorDecorativeSky200LighterThanSky300() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeSky200, ColorRawTokens.colorDecorativeSky300) + } + + func testOrangeBrandColorRawTokenColorDecorativeSky300LighterThanSky400() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeSky300, ColorRawTokens.colorDecorativeSky400) + } + + func testOrangeBrandColorRawTokenColorDecorativeSky400LighterThanSky500() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeSky400, ColorRawTokens.colorDecorativeSky500) + } + + func testOrangeBrandColorRawTokenColorDecorativeSky500LighterThanSky600() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeSky500, ColorRawTokens.colorDecorativeSky600) + } + + func testOrangeBrandColorRawTokenColorDecorativeSky600LighterThanSky700() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeSky600, ColorRawTokens.colorDecorativeSky700) + } + + func testOrangeBrandColorRawTokenColorDecorativeSky700LighterThanSky800() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeSky700, ColorRawTokens.colorDecorativeSky800) + } + + func testOrangeBrandColorRawTokenColorDecorativeSky800LighterThanSky900() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeSky800, ColorRawTokens.colorDecorativeSky900) + } + + // MARK: Primitive token - Colors - Amber + + func testOrangeBrandColorRawTokenColorDecorativeAmber100LighterThanAmber200() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmber100, ColorRawTokens.colorDecorativeAmber200) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmber200LighterThanAmber300() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmber200, ColorRawTokens.colorDecorativeAmber300) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmber300LighterThanAmber400() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmber300, ColorRawTokens.colorDecorativeAmber400) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmber400LighterThanAmber500() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmber400, ColorRawTokens.colorDecorativeAmber500) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmber500LighterThanAmber600() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmber500, ColorRawTokens.colorDecorativeAmber600) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmber600LighterThanAmber700() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmber600, ColorRawTokens.colorDecorativeAmber700) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmber700LighterThanAmber800() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmber700, ColorRawTokens.colorDecorativeAmber800) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmber800LighterThanAmber900() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmber800, ColorRawTokens.colorDecorativeAmber900) + } + + // MARK: Primitive token - Colors - Amethyst + + func testOrangeBrandColorRawTokenColorDecorativeAmethyst100LighterThanAmethyst200() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmethyst100, ColorRawTokens.colorDecorativeAmethyst200) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmethyst200LighterThanAmethyst300() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmethyst200, ColorRawTokens.colorDecorativeAmethyst300) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmethyst300LighterThanAmethyst400() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmethyst300, ColorRawTokens.colorDecorativeAmethyst400) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmethyst400LighterThanAmethyst500() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmethyst400, ColorRawTokens.colorDecorativeAmethyst500) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmethyst500LighterThanAmethyst600() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmethyst500, ColorRawTokens.colorDecorativeAmethyst600) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmethyst600LighterThanAmethyst700() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmethyst600, ColorRawTokens.colorDecorativeAmethyst700) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmethyst700LighterThanAmethyst800() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmethyst700, ColorRawTokens.colorDecorativeAmethyst800) + } + + func testOrangeBrandColorRawTokenColorDecorativeAmethyst800LighterThanAmethyst900() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeAmethyst800, ColorRawTokens.colorDecorativeAmethyst900) + } + + // MARK: Primitive token - Colors - Shocking Pink + + func testOrangeBrandColorRawTokenColorDecorativeShockingPink100LighterThan200() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeShockingPink100, ColorRawTokens.colorDecorativeShockingPink200) + } + + func testOrangeBrandColorRawTokenColorDecorativeShockingPink200LighterThan300() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeShockingPink200, ColorRawTokens.colorDecorativeShockingPink300) + } + + func testOrangeBrandColorRawTokenColorDecorativeShockingPink300LighterThan400() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeShockingPink300, ColorRawTokens.colorDecorativeShockingPink400) + } + + func testOrangeBrandColorRawTokenColorDecorativeShockingPink400LighterThan500() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeShockingPink400, ColorRawTokens.colorDecorativeShockingPink500) + } + + func testOrangeBrandColorRawTokenColorDecorativeShockingPink500LighterThan600() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeShockingPink500, ColorRawTokens.colorDecorativeShockingPink600) + } + + func testOrangeBrandColorRawTokenColorDecorativeShockingPink600LighterThan700() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeShockingPink600, ColorRawTokens.colorDecorativeShockingPink700) + } + + func testOrangeBrandColorRawTokenColorDecorativeShockingPink700LighterThan800() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeShockingPink700, ColorRawTokens.colorDecorativeShockingPink800) + } + + func testOrangeBrandColorRawTokenColorDecorativeShockingPink800LighterThan900() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeShockingPink800, ColorRawTokens.colorDecorativeShockingPink900) + } + + // MARK: Primitive token - Colors - Deep Peach + + func testOrangeBrandColorRawTokenColorDecorativeDeepPeach100LighterThan200() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeDeepPeach100, ColorRawTokens.colorDecorativeDeepPeach200) + } + + func testOrangeBrandColorRawTokenColorDecorativeDeepPeach200LighterThan300() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeDeepPeach200, ColorRawTokens.colorDecorativeDeepPeach300) + } + + func testOrangeBrandColorRawTokenColorDecorativeDeepPeach300LighterThan400() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeDeepPeach300, ColorRawTokens.colorDecorativeDeepPeach400) + } + + func testOrangeBrandColorRawTokenColorDecorativeDeepPeach400LighterThan500() throws { + XCTAssertColorDarkerThan(ColorRawTokens.colorDecorativeDeepPeach400, ColorRawTokens.colorDecorativeDeepPeach500) + // TODO: Why? Is the palette well defined in design team. This is the only case 400 is darker than 500 + } + + func testOrangeBrandColorRawTokenColorDecorativeDeepPeach500LighterThan600() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeDeepPeach500, ColorRawTokens.colorDecorativeDeepPeach600) + } + + func testOrangeBrandColorRawTokenColorDecorativeDeepPeach600LighterThan700() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeDeepPeach600, ColorRawTokens.colorDecorativeDeepPeach700) + } + + func testOrangeBrandColorRawTokenColorDecorativeDeepPeach700LighterThan800() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeDeepPeach700, ColorRawTokens.colorDecorativeDeepPeach800) + } + + func testOrangeBrandColorRawTokenColorDecorativeDeepPeach800LighterThan900() throws { + XCTAssertColorLighterThan(ColorRawTokens.colorDecorativeDeepPeach800, ColorRawTokens.colorDecorativeDeepPeach900) + } } + +// swiftlint:enable type_body_length diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift index 4f2e36065..7be19531e 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Values/ColorSemanticTokens.swift @@ -13,9 +13,12 @@ // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // [File to generate with the tokenator] +// WARNING: Not synchronized anymore with the Figjam /// This is a group of semantic tokens for **colors**. /// It defines all `ColorSemanticToken` and `ColorAliasSemanticToken` a theme must have. +/// Because `ColorSemanticToken` can be based on `ColorAliasSemanticToken` which are optional, the instanciation of such values can result to `nil`, +/// so semantic tokens are optional today. /// /// In the future this file should be generated by a parser converting Figma JSON to Swift code. public protocol ColorSemanticTokens { @@ -122,227 +125,219 @@ public protocol ColorSemanticTokens { var sysColorBrandAttractiveHigher: ColorAliasSemanticToken? { get } var sysColorBrandAttractiveHighest: ColorAliasSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Default - Primary + // MARK: Semantic token - Colors - Background - var colorBackgroundDefaultPrimary: MultipleColorTokens? { get } + var colorBackgroundDefaultPrimary: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Default - Secondary + var colorBackgroundDefaultSecondary: ColorSemanticToken? { get } - var colorBackgroundDefaultSecondary: MultipleColorTokens? { get } + var colorBackgroundDefaultTertiary: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Default - Tertiary + var colorBackgroundEmphasizedPrimary: ColorSemanticToken? { get } - var colorBackgroundDefaultTertiary: MultipleColorTokens? { get } + var colorBackgroundBrandPrimary: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Emphasized - Primary + var colorBackgroundBrandSecondary: ColorSemanticToken? { get } - var colorBackgroundEmphasizedPrimary: MultipleColorTokens? { get } + var colorBackgroundBrandTertiary: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Emphasized - Secondary + var colorBackgroundStatusNeutral: ColorSemanticToken? { get } - var colorBackgroundEmphasizedSecondary: MultipleColorTokens? { get } + var colorBackgroundStatusNeutralOnBackgroundEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Brand - Primary + var colorBackgroundStatusAttractiveMuted: ColorSemanticToken? { get } - var colorBackgroundBrandPrimary: MultipleColorTokens? { get } + var colorBackgroundStatusAttractiveEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Brand - Secondary + var colorBackgroundStatusWarningMuted: ColorSemanticToken? { get } - var colorBackgroundBrandSecondary: MultipleColorTokens? { get } + var colorBackgroundStatusWarningMutedOnBackgroundEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Brand - Tertiary + var colorBackgroundStatusWarningEmphasized: ColorSemanticToken? { get } - var colorBackgroundBrandTertiary: MultipleColorTokens? { get } + var colorBackgroundStatusNegativeMuted: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Attractive - Muted + var colorBackgroundStatusNegativeMutedOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorBackgroundStatusAttractiveMuted: MultipleColorTokens? { get } + var colorBackgroundStatusNegativeEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Attractive - Emphasized + var colorBackgroundStatusPositiveMuted: ColorSemanticToken? { get } - var colorBackgroundStatusAttractiveEmphasized: MultipleColorTokens? { get } + var colorBackgroundStatusPositiveMutedOnBackgroundEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Warning - Muted + var colorBackgroundStatusPositiveEmphasized: ColorSemanticToken? { get } - var colorBackgroundStatusWarningMuted: MultipleColorTokens? { get } + var colorBackgroundStatusInformationMuted: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Warning - Emphasized + var colorBackgroundStatusInformationMutedOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorBackgroundStatusWarningEmphasized: MultipleColorTokens? { get } + var colorBackgroundStatusInformationEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Negative - Muted + // MARK: Semantic token - Colors - Background - Action - var colorBackgroundStatusNegativeMuted: MultipleColorTokens? { get } + var colorBackgroundActionEnabled: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Negative - Emphasized + var colorBackgroundActionEnabledOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorBackgroundStatusNegativeEmphasized: MultipleColorTokens? { get } + var colorBackgroundActionEnabledOnBackgroundStatusExcNegative: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Positive - Muted + var colorBackgroundActionEnabledOnBackgroundStatusNegative: ColorSemanticToken? { get } - var colorBackgroundStatusPositiveMuted: MultipleColorTokens? { get } + var colorBackgroundActionPressed: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Positive - Emphasized + var colorBackgroundActionPressedOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorBackgroundStatusPositiveEmphasized: MultipleColorTokens? { get } + var colorBackgroundActionPressedOnBackgroundStatusExcNegative: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Information - Muted + var colorBackgroundActionPressedOnBackgroundStautsNegative: ColorSemanticToken? { get } - var colorBackgroundStatusInformationMuted: MultipleColorTokens? { get } + var colorBackgroundActionDisabled: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Background - Status - Information - Emphasized + var colorBackgroundActionDisabledOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorBackgroundStatusInformationEmphasized: MultipleColorTokens? { get } + var colorBackgroundActionDisabledOnBackgroundStatusExcNegative: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Default + var colorBackgroundActionDisabledOnBackgroundStatusNegative: ColorSemanticToken? { get } - var colorContentDefault: MultipleColorTokens? { get } + var colorBackgroundActionFocus: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Default - On background emphasized + var colorBackgroundActionFocusOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorContentDefaultOnBackgroundEmphasized: MultipleColorTokens? { get } + var colorBackgroundActionFocusOnBackgroundStatusExcNegative: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Muted + var colorBackgroundActionFocusOnBackgroundStatusNegative: ColorSemanticToken? { get } - var colorContentMuted: MultipleColorTokens? { get } + // MARK: Semantic token - Colors - Background - Always - // MARK: Semantic token - Colors - Content - Muted - On background emphasized + var colorBackgroundAlwaysBlack: ColorSemanticToken? { get } - var colorContentMutedOnBackgroundEmphasized: MultipleColorTokens? { get } + var colorBackgroundAlwaysWhite: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Brand - Primary + var colorBackgroundAlwaysAttractive: ColorSemanticToken? { get } - var colorContentBrandPrimary: MultipleColorTokens? { get } + var colorBackgroundAlwaysWarning: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Brand - Primary - On background emphasized + var colorBackgroundAlwaysNegative: ColorSemanticToken? { get } - var colorContentBrandPrimaryOnBackgroundEmphasized: MultipleColorTokens? { get } + var colorBackgroundAlwaysPositive: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Brand - Secondary + var colorBackgroundAlwaysInformation: ColorSemanticToken? { get } - var colorContentBrandSecondary: MultipleColorTokens? { get } + // MARK: Semantic token - Colors - Content - // MARK: Semantic token - Colors - Content - Brand - Tertiary + var colorContentDefault: ColorSemanticToken? { get } - var colorContentBrandTertiary: MultipleColorTokens? { get } + var colorContentDefaultOnBackgroundEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Status - Attractive + var colorContentDefaultOnBackgroundBrandPrimary: ColorSemanticToken? { get } - var colorContentStatusAttractive: MultipleColorTokens? { get } + var colorContentMuted: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Status - Negative + var colorContentMutedOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorContentStatusNegative: MultipleColorTokens? { get } + var colorContentDisabled: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Status - Positive + var colorContentDisabledOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorContentStatusPositive: MultipleColorTokens? { get } + var colorContentBrandPrimary: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Content - Status - Information + var colorContentBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorContentStatusInformation: MultipleColorTokens? { get } + var colorContentBrandSecondary: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Default + var colorContentBrandTertiary: ColorSemanticToken? { get } - var colorBorderDefault: MultipleColorTokens? { get } + var colorContentStatusAttractive: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Default - On background emphasized + var colorContentStatusNegative: ColorSemanticToken? { get } - var colorBorderDefaultOnBackgroundEmphasized: MultipleColorTokens? { get } + var colorContentStatusPositive: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Emphasized + var colorContentStatusInformation: ColorSemanticToken? { get } - var colorBorderEmphasized: MultipleColorTokens? { get } + var colorContentActionEnabled: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Emphasized - On background emphasized + var colorContentActionEnabledOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorBorderEmphasizedOnBackgroundEmphasized: MultipleColorTokens? { get } + var colorContentActionEnabledOnBackgroundStatusExcNegative: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Brand - Primary + var colorContentActionEnabledOnBackgroundStatusNegative: ColorSemanticToken? { get } - var colorBorderBrandPrimary: MultipleColorTokens? { get } + var colorContentActionHover: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Brand - Primary - On background emphasized + var colorContentActionHoverOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorBorderBrandPrimaryOnBackgroundEmphasized: MultipleColorTokens? { get } + var colorContentActionHoverOnBackgroundStatusExcNegative: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Brand - Secondary + var colorContentActionHoverOnBackgroundStatusNegative: ColorSemanticToken? { get } - var colorBorderBrandSecondary: MultipleColorTokens? { get } + // TODO: #124 - Add missing colorContentActionPressed* tokens + // TODO: #124 - Add missing colorContentActionDisabled* tokens + // TODO: #124 - Add missing colorContentActionFocus* tokens + // TODO: #124 - Add missing colorContentVisited* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelected* tokens + // TODO: #124 - Add missing colorContentActionSelectionHover* tokens + // TODO: #124 - Add missing colorContentActionSelectionPressed* tokens + // TODO: #124 - Add missing colorContentActionSelectionSelectedFocus* tokens + // TODO: #124 - Add missing colorContentActionSelectionUnselected* tokens + // TODO: #124 - Add missing colorContentActionAlways* tokens - // MARK: Semantic token - Colors - Border - Brand - Tertiary + // MARK: Semantic token - Colors - Border - var colorBorderBrandTertiary: MultipleColorTokens? { get } + var colorBorderDefault: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Status - Attractive + var colorBorderDefaultOnBackgroundEmphasized: ColorSemanticToken? { get } - var colorBorderBrandStatusAttractive: MultipleColorTokens? { get } + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandPrimary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandSecondary + // TODO: #124 - Add missing colorBorderDefaultOnBackgroundBrandTertiary - // MARK: Semantic token - Colors - Border - Status - Warning + var colorBorderEmphasized: ColorSemanticToken? { get } - var colorBorderBrandStatusWarning: MultipleColorTokens? { get } + var colorBorderEmphasizedOnBackgroundEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Status - Negative + var colorBorderBrandPrimary: ColorSemanticToken? { get } - var colorBorderBrandStatusNegative: MultipleColorTokens? { get } + var colorBorderBrandPrimaryOnBackgroundEmphasized: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Status - Positive + var colorBorderBrandSecondary: ColorSemanticToken? { get } - var colorBorderBrandStatusPositive: MultipleColorTokens? { get } + var colorBorderBrandTertiary: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - Border - Status - Information + var colorBorderBrandStatusAttractive: ColorSemanticToken? { get } - var colorBorderBrandStatusInformation: MultipleColorTokens? { get } + var colorBorderBrandStatusWarning: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - On background - Primary + var colorBorderBrandStatusNegative: ColorSemanticToken? { get } - var colorOnBackgroundPrimary: MultipleColorTokens? { get } + var colorBorderBrandStatusPositive: ColorSemanticToken? { get } - // MARK: Semantic token - Colors - On background - Secondary + var colorBorderBrandStatusInformation: ColorSemanticToken? { get } - var colorOnBackgroundSecondary: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Tertiary - - var colorOnBackgroundTertiary: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Attrative - Muted - - var colorOnBackgroundStatusAttractiveMuted: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Attrative - Emphasized - - var colorOnBackgroundStatusAttractiveEmphasized: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Warning - Muted - - var colorOnBackgroundStatusWarningMuted: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Warning - Emphasized - - var colorOnBackgroundStatusWarningEmphasized: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Negative - Muted - - var colorOnBackgroundStatusNegativeMuted: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Negative - Emphasized - - var colorOnBackgroundStatusNegativeEmphasized: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Positive - Muted - - var colorOnBackgroundStatusPositiveMuted: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Positive - Emphasized - - var colorOnBackgroundStatusPositiveEmphasized: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Information - Muted - - var colorOnBackgroundStatusInformationMuted: MultipleColorTokens? { get } - - // MARK: Semantic token - Colors - On background - Status - Information - Emphasized - - var colorOnBackgroundStatusInformationEmphasized: MultipleColorTokens? { get } + // TODO: #124 - Add missing colorBorderActionEnabled* + // TODO: #124 - Add missing colorBorderActionHover* + // TODO: #124 - Add missing colorBorderActionPressed* + // TODO: #124 - Add missing colorBorderActionDisabled* + // TODO: #124 - Add missing colorBorderActionFocus* + // TODO: #124 - Add missing colorBorderSelectionSelected* + // TODO: #124 - Add missing colorBorderSelectionUnselected* + // TODO: #124 - Add missing colorBorderAlways* + // TODO: #124 - Add missing colorBorderOutside + // TODO: #124 - Add missing colorOnBackgroundStatusAttractive* + // TODO: #124 - Add missing colorOnBackgroundStatusWarning* + // TODO: #124 - Add missing colorOnBackgroundStatusNegative* + // TODO: #124 - Add missing colorOnBackgroundStatusPositive* + // TODO: #124 - Add missing colorOnBackgroundStatusInformation* + // TODO: #124 - Add missing colorOnBackgroundActionEnabled* + // TODO: #124 - Add missing colorOnBackgroundActionHover* + // TODO: #124 - Add missing colorOnBackgroundActionPressed* + // TODO: #124 - Add missing colorOnBackgroundActionDisabled* + // TODO: #124 - Add missing colorOnBackgroundActionFocus* + // TODO: #124 - Add missing colorOnBackgroundActionAlways* + // TODO: #124 - Add missing colorElevation* + // TODO: #124 - Add missing colorDecorativeBrand* + // TODO: #124 - Add missing colorDecorativeNeutral* + // TODO: #124 - Add missing colorDecorativeAccent* + // TODO: #124 - Add missing colorDecorativeSkin* + // TODO: #124 - Add missing colorChart* } diff --git a/OUDS/Foundations/Sources/Extensions/Font+extensions.swift b/OUDS/Foundations/Sources/Extensions/Font+extensions.swift index 2f5f01c55..3baab8673 100644 --- a/OUDS/Foundations/Sources/Extensions/Font+extensions.swift +++ b/OUDS/Foundations/Sources/Extensions/Font+extensions.swift @@ -13,6 +13,7 @@ import SwiftUI +// TODO: Xcode 16 - Add @retroactive extension Font.Weight: CustomStringConvertible { /// Computes from the current `self` value a description of the object which can be used later diff --git a/Showcase/Showcase/OrangeCustomTheme.swift b/Showcase/Showcase/OrangeCustomTheme.swift index 021a99ac5..968016c60 100644 --- a/Showcase/Showcase/OrangeCustomTheme.swift +++ b/Showcase/Showcase/OrangeCustomTheme.swift @@ -37,7 +37,7 @@ extension OrangeCustomTheme { // For FormsTextInputComponentTokens public override var ftiBackgroundColor: ColorSemanticToken { colorBackgroundDefaultPrimary } - public override var ftiBorderColor: ColorSemanticToken { MultipleColorTokens(light: OrangeBrandColorRawTokens.colorDecorativeShockingPink800, dark: OrangeBrandColorRawTokens.colorDecorativeShockingPink200) } + public override var ftiBorderColor: ColorSemanticToken { MultipleColorTokens(light: ColorRawTokens.colorDecorativeShockingPink800, dark: ColorRawTokens.colorDecorativeShockingPink200) } public override var ftiBorderStyle: BorderStyleSemanticToken { borderStyleDrag } diff --git a/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_InverseTheme-InverseTheme.1.png b/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_InverseTheme-InverseTheme.1.png index 935903b6e42277f7458e45ae6f52240689394f11..5d3a5cc58c436d1bb6f3cc8c3fe53f4ea82cf65b 100644 GIT binary patch literal 93565 zcmeFaXIxWR`!0-vhzbH@0qM#pHUw0PbSus%pkqO#1VunffQX?dF<203`lz6EML{Wv zw1k>~Qd9&)N`L^N2nZpB76J)L&I+ib&Yb^qKD_UjbD}@OChY9J_FDIS-Phd~VJ9ri zBv#6;6cQ4W_~YoIzl4OAi3ka;><|+L@0{+FQU~9b`21ydKnPQ>FbsaU;dJf~XLEC* z?ci8UXxWnAgoOF0fd4{E3GIUJ+q0Nzw^ zJ!E+rdU^U2)V$NRC8Dwpzr2{vtvj^g*Ejj+9NlnKB2%bj=|3(9 zZqY0u7P30Xg#I~tAz`?1 zNXpXse|@sI*PKFQ?68zUzaF6k9oYdMC-WJzs|6VlZtlM($SUwcF7aEDq`Dv{_UZ~Z-}4s zz1+@VL6I^l|C};Y@il^F`(Z{+116tGGGs}!(G0jvCO zGX<{qPxvTE;{1${3)NwQOt&D@Ent!YCixRm3Yg^2NGSkG0Z0l!QUH9v~Mw{KUu{A6pW)!K&#rB9nm zpQ!!)KO(1ZZ~aZGLgkK`UNgyGByxGkR&=cYlLMQ7e|lp3QK`+hmv8L7V>ub0fz0&7 zm8844_y&biTrzRae!eXKBuctpAi+{u{Mqii89Bc>r2gynyX_KUBAfqxkJ{gNr?iFL zNi^cLB2`U)-7QYD{F>%*mG^&lSp9uux?T9C+>RwW|GFpc-L7ko zy~&HFyR`D}>wP;Cdn5AnpThvZ6+EC|1qCAdlWGWbPyjLl6#cm@SzsmvW

l1ZLtJ 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 V5mv$6xJv>3?QnM8#&jZG{5L7hjz0hZ literal 93412 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 JccVw-e*rUTY>)r| diff --git a/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_InverseTheme-InverseTheme.2.png b/Showcase/ShowcaseTests/__Snapshots__/OUDSFormsTextInputUITests/testOUDSFormsTextInput_InverseTheme-InverseTheme.2.png index 8a24e4d4e87a68f6c5743e8a0f9d1b5ed4aaca3a..0e9df0a7664f2db43f5820b2f0764d8ceebd63a6 100644 GIT binary patch literal 88244 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�v5h)T3 zc|}Bb5`{z}2{!)mdq?(s4Bcs- zkubPcjG?Jnn=;6gyaRC@tBDNqx>Xp8RlA?aE|QV6R+AJw@~30KpFrU8leXuLxbcQ zl4m&Az>yP&c!E5>krXw!^ z=lC_AD*}|T6ks<1s{!H(h$n#2z!LzT0EQ0%6b@k50J{c=Pe6PEP8zW~3v@xC3j&i9 zNVY(-1^zQo(+Tt@k^rdbpc(+x00=rjYlEpRfz}3OP@qr)g&K$lLDvboPNII51(I8k z+=3b!gz6wv2M+;44}iS`*gJsp1~_kkDGK=2fL{$*2@%y1;PM16PtUCZmx#nq^Z&YN TRb2`)IU}v{^7YJL865W~5&hlg literal 86865 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 From 70e992dee751260e4661fe7806b699aebfc1d005 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Fri, 4 Oct 2024 11:19:32 +0200 Subject: [PATCH 20/25] feat: add tokens section (border, elevation, opacity, typography) in demo app (#120) (#137) Co-authored-by: Ludovic PINEL Co-authored-by: Pierre-Yves Lapersonne Signed-off-by: Pierre-Yves Lapersonne --- .swiftlint.yml | 2 + CHANGELOG.md | 1 + NOTICE.txt | 8 +- .../Sources/Buttons/OUDSButton.swift | 10 +- .../Sources/Extensions/View+Font.swift | 1 - .../Sources/Extensions/View+Shadows.swift | 16 +- .../Sources/Extensions/View+Typography.swift | 5 +- .../Forms/TextInput/OUDSFormsTextInput.swift | 80 -------- .../AccessibleModifiers.swift | 86 ++++++++ .../AccessibleModifiers/View+extensions.swift | 57 ++++++ .../BorderModifier.swift} | 59 +++--- .../BorderModifiers/View+Border.swift | 34 ++++ .../CustomFontModifier.swift | 1 - .../FontModifier.swift | 1 - .../TypographyModifier.swift | 16 +- .../_OUDSComponents.docc/_OUDSComponents.md | 4 +- ...DSTheme+FormsTextInputComponentToken.swift | 2 +- .../OUDSTheme+ColorSemanticTokens.swift | 1 - .../OUDS/Sources/_OUDS.docc/Components.md | 9 - .../MockTheme+BorderSemanticTokens.swift | 2 +- .../MockTheme+DimensionSemanticTokens.swift | 1 - .../MockTheme+SizingSemanticTokens.swift | 1 - .../MockTheme+SpacingSemanticTokens.swift | 1 - .../MockTheme+TypographySemanticTokens.swift | 1 - .../Themes/Inverse/Sources/InverseTheme.swift | 1 - .../OrangeBrandColorRawTokens.swift | 4 - .../OrangeTheme+SemanticColorTokens.swift | 1 - .../Themes/Orange/Sources/OrangeTheme.swift | 1 - .../OrangeBrandColorRawTokens+Values.swift | 2 - OUDS/Core/Themes/Sosh/Sources/SoshTheme.swift | 1 - .../Values/ButtonsComponentTokens.swift | 1 - .../FormsTextInputComponentTokens.swift | 1 - .../Values/TypographyRawTokens+Values.swift | 36 ++-- .../Multiples/MultipleColorTokens.swift | 9 +- .../Multiples/MultipleElevationTokens.swift | 11 +- .../Sources/Extensions/Color+extensions.swift | 1 - Showcase/Showcase.xcodeproj/project.pbxproj | 172 +++++++++++++--- Showcase/Showcase/MainView.swift | 11 +- Showcase/Showcase/OrangeCustomTheme.swift | 3 +- .../Pages/Components/ComponentsPage.swift | 7 +- .../Elevations/ElevationsList.swift | 95 --------- .../Pages/Components/EmptyState.swift | 39 ++++ .../Pages/Guidelines/GuidelinesPage.swift | 57 ------ .../Pages/ThemeSelection/ThemeSelection.swift | 124 ++++++++++++ .../Tokens/Border/BorderTokenElement.swift | 28 +++ .../Pages/Tokens/Border/BorderTokenPage.swift | 159 +++++++++++++++ .../Elevation/ElevationTokenElement.swift | 28 +++ .../Tokens/Elevation/ElevationTokenPage.swift | 106 ++++++++++ .../Tokens/Opacity/OpacityTokenElement.swift | 28 +++ .../Tokens/Opacity/OpacityTokenPage.swift | 93 +++++++++ .../Showcase/Pages/Tokens/TokenElement.swift | 16 ++ .../Showcase/Pages/Tokens/TokensPage.swift | 28 +++ .../Typography/TypographyTokenElement.swift | 28 +++ .../Typography/TypographyTokenPage.swift | 188 ++++++++++++++++++ .../Showcase/Pages/Utils/Cards/Card.swift | 53 +++++ .../Pages/Utils/Cards/CardIllustration.swift | 42 ++++ .../Pages/Utils/ShowcaseElement.swift | 25 +++ .../Pages/Utils/ShowcaseElementPage.swift | 62 ++++++ .../Pages/Utils/ShowcaseElementsPage.swift | 54 +++++ .../Illustrations/Contents.json | 6 + .../il_empty_screen.imageset/Contents.json | 12 ++ .../il_empty_screen.svg | 79 ++++++++ .../Assets.xcassets/Tokens/Contents.json | 6 + .../Tokens/ic_border.imageset/Contents.json | 12 ++ .../Tokens/ic_border.imageset/ic_border.svg | 10 + .../ic_filter_effects.imageset/Contents.json | 12 ++ .../ic_filter_effects.svg | 5 + .../Tokens/ic_layers.imageset/Contents.json | 12 ++ .../Tokens/ic_layers.imageset/ic_layers.svg | 5 + .../ic_typography.imageset/Contents.json | 12 ++ .../ic_typography.imageset/ic_typography.svg | 5 + .../Tokens/ic_union.imageset/Contents.json | 12 ++ .../Tokens/ic_union.imageset/ic_union.svg | 3 + .../ic_guideline_dna.svg | 10 - .../Contents.json | 2 +- .../ic_token.imageset/ic_token.svg | 3 + .../Resources/Colors.xcassets/Contents.json | 6 + .../cardBackground.colorset/Contents.json | 38 ++++ .../Resources/en.lproj/Localizable.strings | 21 +- Showcase/Showcase/Showcase.swift | 7 +- .../ElevationsEffectsUITests.swift | 39 ---- .../OUDSFormsTextInputUITests.swift | 49 ----- 82 files changed, 1792 insertions(+), 488 deletions(-) delete mode 100644 OUDS/Core/Components/Sources/Forms/TextInput/OUDSFormsTextInput.swift create mode 100644 OUDS/Core/Components/Sources/ViewModifiers/AccessibleModifiers/AccessibleModifiers.swift create mode 100644 OUDS/Core/Components/Sources/ViewModifiers/AccessibleModifiers/View+extensions.swift rename OUDS/Core/Components/Sources/ViewModifiers/{BorderStyleModifier.swift => BorderModifiers/BorderModifier.swift} (59%) create mode 100644 OUDS/Core/Components/Sources/ViewModifiers/BorderModifiers/View+Border.swift rename OUDS/Core/Components/Sources/ViewModifiers/{ => TypographyModifiers}/CustomFontModifier.swift (99%) rename OUDS/Core/Components/Sources/ViewModifiers/{ => TypographyModifiers}/FontModifier.swift (98%) rename OUDS/Core/Components/Sources/ViewModifiers/{ => TypographyModifiers}/TypographyModifier.swift (84%) delete mode 100644 Showcase/Showcase/Pages/Components/Elevations/ElevationsList.swift create mode 100644 Showcase/Showcase/Pages/Components/EmptyState.swift delete mode 100644 Showcase/Showcase/Pages/Guidelines/GuidelinesPage.swift create mode 100644 Showcase/Showcase/Pages/ThemeSelection/ThemeSelection.swift create mode 100644 Showcase/Showcase/Pages/Tokens/Border/BorderTokenElement.swift create mode 100644 Showcase/Showcase/Pages/Tokens/Border/BorderTokenPage.swift create mode 100644 Showcase/Showcase/Pages/Tokens/Elevation/ElevationTokenElement.swift create mode 100644 Showcase/Showcase/Pages/Tokens/Elevation/ElevationTokenPage.swift create mode 100644 Showcase/Showcase/Pages/Tokens/Opacity/OpacityTokenElement.swift create mode 100644 Showcase/Showcase/Pages/Tokens/Opacity/OpacityTokenPage.swift create mode 100644 Showcase/Showcase/Pages/Tokens/TokenElement.swift create mode 100644 Showcase/Showcase/Pages/Tokens/TokensPage.swift create mode 100644 Showcase/Showcase/Pages/Tokens/Typography/TypographyTokenElement.swift create mode 100644 Showcase/Showcase/Pages/Tokens/Typography/TypographyTokenPage.swift create mode 100644 Showcase/Showcase/Pages/Utils/Cards/Card.swift create mode 100644 Showcase/Showcase/Pages/Utils/Cards/CardIllustration.swift create mode 100644 Showcase/Showcase/Pages/Utils/ShowcaseElement.swift create mode 100644 Showcase/Showcase/Pages/Utils/ShowcaseElementPage.swift create mode 100644 Showcase/Showcase/Pages/Utils/ShowcaseElementsPage.swift create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Illustrations/Contents.json create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/Contents.json create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/il_empty_screen.svg create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/Contents.json create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/Contents.json create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/ic_border.svg create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/Contents.json create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/ic_filter_effects.svg create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/Contents.json create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/ic_layers.svg create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/Contents.json create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/ic_typography.svg create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/Contents.json create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/ic_union.svg delete mode 100644 Showcase/Showcase/Resources/Assets.xcassets/ic_guideline_dna.imageset/ic_guideline_dna.svg rename Showcase/Showcase/Resources/Assets.xcassets/{ic_guideline_dna.imageset => ic_token.imageset}/Contents.json (81%) create mode 100644 Showcase/Showcase/Resources/Assets.xcassets/ic_token.imageset/ic_token.svg create mode 100644 Showcase/Showcase/Resources/Colors.xcassets/Contents.json create mode 100644 Showcase/Showcase/Resources/Colors.xcassets/cardBackground.colorset/Contents.json delete mode 100644 Showcase/ShowcaseTests/ElevationsEffectsUITests.swift delete mode 100644 Showcase/ShowcaseTests/OUDSFormsTextInputUITests.swift diff --git a/.swiftlint.yml b/.swiftlint.yml index 193cd1cb8..1ba81d288 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -31,6 +31,8 @@ excluded: - Showcase/Pods - Showcase/DerivedData +strict: true + # ============== # Disabled rules # ============== diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bbb4805f..8c4d72bd5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Library] Add color semantic tokens `colorBackgroundStatusNeutral`, some `OnBackgroundEmphasized`, `colorBackgroundAction`, `colorBackgroundAlways`, `colorContent` variants - [Library] Add typography semantic tokens for font letter spacing +- [DemoApp] Create token section (Border, Typography, Elevation, Opacity) ([#120](https://github.com/Orange-OpenSource/ouds-ios/issues/120)) - [Library] Unit tests for multiple tokens - [Library] Add color semantic composite tokens embeding light and dark modes values - [Library] Add spacing semantic tokens "huge" and "jumbo" diff --git a/NOTICE.txt b/NOTICE.txt index 544133c41..c81bab22e 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -66,8 +66,14 @@ Any use or displaying shall constitute an infringement under intellectual proper ./Showcase/Showcase/Resources/Assets.xcassets/AppIconQualif.appiconset/iPad-Notification-20@2x.png ./Showcase/Showcase/Resources/Assets.xcassets/AppIconQualif.appiconset/iPad-Settings-29@1x.png -./Showcase/Showcase/Resources/Assets.xcassets/ic_guideline_dna.imageset/ic_guideline_dna.svg +./Showcase/Showcase/Resources/Assets.xcassets/ic_token.imageset/ic_token.svg ./Showcase/Showcase/Resources/Assets.xcassets/ic_component_atom.imageset/ic_component_atom.svg ./Showcase/Showcase/Resources/Assets.xcassets/ic_info.imageset/ic_info.svg +./Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/il_empty_screen.svg +./Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/ic_border.svg +./Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/ic_filter_effects.svg +./Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/ic_layers.svg +./Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/ic_typography.svg +./Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/ic_union.svg End of the parts list under Orange SA Copyright diff --git a/OUDS/Core/Components/Sources/Buttons/OUDSButton.swift b/OUDS/Core/Components/Sources/Buttons/OUDSButton.swift index edc0864f7..9a7663065 100644 --- a/OUDS/Core/Components/Sources/Buttons/OUDSButton.swift +++ b/OUDS/Core/Components/Sources/Buttons/OUDSButton.swift @@ -11,7 +11,7 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation +import OUDS import OUDSFoundations import OUDSTokensSemantic import SwiftUI @@ -63,10 +63,10 @@ public struct OUDSButton: View { .foregroundColor(colorScheme == .light ? theme.buttonForegroundColor.light.color : theme.buttonForegroundColor.dark.color) - .modifier(BorderStyleModifier(theme.buttonBorderStyle, - theme.buttonBorderWidth, - theme.buttonBorderRadius, - theme.buttonBorderColor)) + .oudsBorder(style: theme.buttonBorderStyle, + width: theme.buttonBorderWidth, + radius: theme.buttonBorderRadius, + color: theme.buttonBorderColor) }.frame(width: theme.buttonWidth, height: theme.buttonHeight) } } diff --git a/OUDS/Core/Components/Sources/Extensions/View+Font.swift b/OUDS/Core/Components/Sources/Extensions/View+Font.swift index 4e0b2a7db..443b2f8c6 100644 --- a/OUDS/Core/Components/Sources/Extensions/View+Font.swift +++ b/OUDS/Core/Components/Sources/Extensions/View+Font.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensSemantic import SwiftUI diff --git a/OUDS/Core/Components/Sources/Extensions/View+Shadows.swift b/OUDS/Core/Components/Sources/Extensions/View+Shadows.swift index d00e5fd3a..0357bb784 100644 --- a/OUDS/Core/Components/Sources/Extensions/View+Shadows.swift +++ b/OUDS/Core/Components/Sources/Extensions/View+Shadows.swift @@ -11,22 +11,20 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation -import OUDSTokensSemantic +import OUDSTokensRaw import SwiftUI extension View { /// Wraps the *SwiftUI* `shadow(color:radius:x:y)` method so as to use as `radius` value - /// the computed `radius` value of the given `ElevationCompositeSemanticToken`. + /// the computed `radius` value of the given `ElevationCompositeRawToken`. /// - Parameter elevation: The token to give for the shadow / elevation effect /// - Returns `View`: The current `View` with the shadow / elevation effect - public func shadow(elevation: ElevationCompositeSemanticToken) -> some View { - // TODO: Manage light and dark color scheme + public func shadow(elevation: ElevationCompositeRawToken) -> some View { return self - .shadow(color: elevation.light.color.color, - radius: elevation.light.radius, - x: CGFloat(elevation.light.x), - y: CGFloat(elevation.light.y)) + .shadow(color: elevation.color.color, + radius: elevation.radius, + x: CGFloat(elevation.x), + y: CGFloat(elevation.y)) } } diff --git a/OUDS/Core/Components/Sources/Extensions/View+Typography.swift b/OUDS/Core/Components/Sources/Extensions/View+Typography.swift index d45982290..5d35d08d9 100644 --- a/OUDS/Core/Components/Sources/Extensions/View+Typography.swift +++ b/OUDS/Core/Components/Sources/Extensions/View+Typography.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDS import SwiftUI @@ -191,7 +190,7 @@ extension View { /// The current `OUDSTheme` must be given in parameter because `@Environment` property cannot be accessed through an extension or inside a method. /// - Parameter theme: The current `OUDSTheme` to use to load the current font family and the suitable typography semantic token. /// - Returns some View: The current `View` but with new typography applied - public func typeLabelCodeMedium(_ theme: OUDSTheme) -> some View { + public func typeCodeMedium(_ theme: OUDSTheme) -> some View { self.modifier(TypographyModifier(customFontFamily: theme.customFontFamily, typography: theme.typeCodeMedium)) } @@ -199,7 +198,7 @@ extension View { /// The current `OUDSTheme` must be given in parameter because `@Environment` property cannot be accessed through an extension or inside a method. /// - Parameter theme: The current `OUDSTheme` to use to load the current font family and the suitable typography semantic token. /// - Returns some View: The current `View` but with new typography applied - public func typeLabelCodeSmall(_ theme: OUDSTheme) -> some View { + public func typeCodeSmall(_ theme: OUDSTheme) -> some View { self.modifier(TypographyModifier(customFontFamily: theme.customFontFamily, typography: theme.typeCodeSmall)) } } diff --git a/OUDS/Core/Components/Sources/Forms/TextInput/OUDSFormsTextInput.swift b/OUDS/Core/Components/Sources/Forms/TextInput/OUDSFormsTextInput.swift deleted file mode 100644 index 88cebbee8..000000000 --- a/OUDS/Core/Components/Sources/Forms/TextInput/OUDSFormsTextInput.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// Software Name: OUDS iOS -// SPDX-FileCopyrightText: Copyright (c) Orange SA -// SPDX-License-Identifier: MIT -// -// This software is distributed under the MIT license, -// the text of which is available at https://opensource.org/license/MIT/ -// or see the "LICENSE" file for more details. -// -// Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System -// - -import OUDS -import SwiftUI - -/// An OUDS component for text input in formulars. -/// __Warning: This is a draft component__. -/// -/// This component is created to illustrate the mecanism of theme and tokens. -public struct OUDSFormsTextInput: View { - - // MARK: - Properties - - private let label: String - private let hint: String - private let placeholder: String - private let isEnabled: Bool - - @Binding var value: String - - @Environment(\.colorScheme) var colorScheme - @Environment(\.theme) var theme - - // MARK: - Initializer - - /// Use this initializer to create a text field that binds to a bound optional - /// value and propose a placeholder. - /// - /// - Parameters: - /// - label: The text to display in the top of the component - /// - hint: The text to display in above the input field - /// - placeholder: Text in placeholder - /// - value: Binding of the value - /// - isEnabled: Flag to indicate if input is enabled (_true_ by default) - public init(label: String, hint: String, placeholder: String, value: Binding, isEnabled: Bool = true) { - self.label = label - self.hint = hint - self.placeholder = placeholder - self._value = value - self.isEnabled = isEnabled - } - - // MARK: - Body - - public var body: some View { - VStack(spacing: theme.spacePaddingBlockTall) { - - Label( - title: { - Text(label) - .fontWeight(theme.ftiTitleFontWeight.fontWeight) - .font(.system(size: theme.ftiTitleFontSize)) - .foregroundColor(theme.ftiTitleColor.light.color) - }, - icon: { /*@START_MENU_TOKEN@*/Image(systemName: "42.circle")/*@END_MENU_TOKEN@*/ } - ) - - Text(hint) - .fontWeight(theme.ftiSubtitleFontWeight.fontWeight) - .font(.system(size: theme.ftiSubtitleFontSize)) - .foregroundColor(theme.ftiSubtitleColor.light.color) - - TextField(placeholder, text: $value) - } - .padding(theme.spacePaddingBlockTall) - .background(colorScheme == .light ? theme.ftiBackgroundColor.light.color : theme.ftiBackgroundColor.dark.color) - .border(theme.ftiBorderColor.light.color, width: theme.ftiBorderWidth) - } -} diff --git a/OUDS/Core/Components/Sources/ViewModifiers/AccessibleModifiers/AccessibleModifiers.swift b/OUDS/Core/Components/Sources/ViewModifiers/AccessibleModifiers/AccessibleModifiers.swift new file mode 100644 index 000000000..6d042f301 --- /dev/null +++ b/OUDS/Core/Components/Sources/ViewModifiers/AccessibleModifiers/AccessibleModifiers.swift @@ -0,0 +1,86 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +// MARK: - Accessible Navigation Title Modifier + +/// `ViewModifier` which defines a navigation title for the calling `View` and also uses `UIAccessibility` to notify for screen changed. +struct AccessibleNavigationTitleModifier: ViewModifier { + + /// The title used as a `LocalizedStringKey` to add as navigation title + let title: String + + /// Elapsed time to wait before sending an accessibility notification of a screen change with the `title` in argument + let deadline: DispatchTime + + func body(content: Content) -> some View { + content + .navigationTitle(LocalizedStringKey(title)) + .onAppear { + DispatchQueue.main.asyncAfter(deadline: deadline) { + UIAccessibility.post(notification: .screenChanged, argument: title) + } + } + } +} + +// MARK: - Request Accessible Focus Modifier + +/// `ViewModifier` to apply on a a `View` so as to request the focus after a given time. +struct RequestAccessibleFocusModifier: ViewModifier { + + /// Flag to listen saying wether or not the `View` got the focus + @AccessibilityFocusState var requestFocus: Bool + + /// Elapsed time to wait before requesting the focus + let deadline: DispatchTime + + func body(content: Content) -> some View { + content.onAppear { + DispatchQueue.main.asyncAfter(deadline: deadline) { + requestFocus = true + } + } + } +} + +// MARK: - Accessibility Focusable + +public enum AccessibilityFocusable: Hashable { + case none + case some(id: String) +} + +// MARK: - Restricted Request Accessible Focus Modifier + +/// `ViewModifier` to apply on a `View` to request the focus on that `View` after a given time +struct RestrictedRequestAccessibleFocusModifier: ViewModifier { + + /// Flag to listen saying wether or not the `View` got the focus + @AccessibilityFocusState var requestFocus: AccessibilityFocusable? + + /// The target to give the focus after the deadLine` delay + let target: AccessibilityFocusable + + /// Elapsed time to wait before requesting the focus + let deadline: DispatchTime + + func body(content: Content) -> some View { + content.onAppear { + DispatchQueue.main.asyncAfter(deadline: deadline) { + requestFocus = target + } + } + } +} diff --git a/OUDS/Core/Components/Sources/ViewModifiers/AccessibleModifiers/View+extensions.swift b/OUDS/Core/Components/Sources/ViewModifiers/AccessibleModifiers/View+extensions.swift new file mode 100644 index 000000000..5d08bf9aa --- /dev/null +++ b/OUDS/Core/Components/Sources/ViewModifiers/AccessibleModifiers/View+extensions.swift @@ -0,0 +1,57 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +// MARK: - Accessibility Delay + +/// Contains some delays to apply to view modifiers' deadlines for vocalizations or accessibility notifications +private enum AccessibilityDelay: Double { + // Must be lower than accesibleFocusRequestDelay to start before + case accessibleTitleNotificationDelay = 0.0 + // Must be greater than accessibleTitleNotificationDelay to start after + case accessibleFocusRequestDelay = 1.0 +} + +// MARK: - View extension + +extension View { + + /// Adds a modifier to the current `View` so as to define a navigation title using the current `title` + /// and also send a notification for accessibility layers for a change of screen when appeared. + /// - Parameter title: The navigation title + /// - Returns View: The view with a new modifier + public func oudsNavigationTitle(_ title: String) -> some View { + self.modifier(AccessibleNavigationTitleModifier(title: title, + deadline: .now() + AccessibilityDelay.accessibleTitleNotificationDelay.rawValue)) + } + + /// Adds a modifier to the current `View` so as to defer a focus request after the view is displayed + /// - Parameter requestFocus: The boolean binding (e.g. the `AccessibilityFocusState`) + /// - Returns View: The view with a new modifier + public func oudsRequestAccessibleFocus(_ requestFocus: AccessibilityFocusState) -> some View { + self.modifier(RequestAccessibleFocusModifier(requestFocus: requestFocus, + deadline: .now() + AccessibilityDelay.accessibleFocusRequestDelay.rawValue)) + } + + /// Adds a modifier to the current `View` so as to defer a focus request after the view is displayed for the given element + /// - Parameters: + /// - requestFocus: The boolean binding (e.g. the `AccessibilityFocusState`) + /// - target: The item which will get the focus + /// - Returns View: The view with a new modifier + public func oudsRequestAccessibleFocus(_ requestFocus: AccessibilityFocusState, for target: AccessibilityFocusable) -> some View { + self.modifier(RestrictedRequestAccessibleFocusModifier(requestFocus: requestFocus, + target: target, + deadline: .now() + AccessibilityDelay.accessibleFocusRequestDelay.rawValue)) + } +} diff --git a/OUDS/Core/Components/Sources/ViewModifiers/BorderStyleModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/BorderModifiers/BorderModifier.swift similarity index 59% rename from OUDS/Core/Components/Sources/ViewModifiers/BorderStyleModifier.swift rename to OUDS/Core/Components/Sources/ViewModifiers/BorderModifiers/BorderModifier.swift index 73d46d25a..470825d2c 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/BorderStyleModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/BorderModifiers/BorderModifier.swift @@ -11,18 +11,17 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation -import OUDSTokensSemantic import OUDSFoundations +import OUDSTokensSemantic import SwiftUI -/// A `ViewModifier` which will apply a specific border style to a `View` using several semantic tokens. -struct BorderStyleModifier: ViewModifier { +/// A `ViewModifier` which will apply a specific border to a `View` using several semantic tokens. +struct BorderModifier: ViewModifier { // MARK: - Properties /// The style to apply on the component - private let token: BorderStyleSemanticToken + private let style: BorderStyleSemanticToken /// The width of the border private let width: BorderWidthSemanticToken @@ -35,7 +34,7 @@ struct BorderStyleModifier: ViewModifier { /// Color to apply depending to the `colorScheme` private var colorToApply: Color { - colorScheme == .light ? color.light.color : color.dark.color + (colorScheme == .light ? color.light.color : color.dark.color) } /// To know if the device is in light mode or in dark mode @@ -43,16 +42,16 @@ struct BorderStyleModifier: ViewModifier { // MARK: - Initializer - init(_ token: BorderStyleSemanticToken, + init(_ style: BorderStyleSemanticToken, _ width: BorderWidthSemanticToken, _ radius: BorderRadiusSemanticToken, _ color: ColorSemanticToken) { - self.token = token + self.style = style self.width = width self.radius = radius self.color = color - if token != "solid" && token != "dashed" && token != "dotted" { - OUDSLogger.error("Unmanaged token: '\(token)'!") + if style != "solid" && style != "dashed" && style != "dotted" { + OUDSLogger.error("Unmanaged style: '\(style)'!") } } @@ -60,11 +59,11 @@ struct BorderStyleModifier: ViewModifier { @ViewBuilder func body(content: Content) -> some View { - if token == "solid" { + if style == "solid" { solid(content) - } else if token == "dashed" { + } else if style == "dashed" { dashed(content) - } else if token == "dotted" { + } else if style == "dotted" { dotted(content) } else { // if token == "none" and unmanaged cases none(content) @@ -76,34 +75,26 @@ struct BorderStyleModifier: ViewModifier { } private func solid(_ content: Content) -> some View { - content.background( - RoundedRectangle( - cornerRadius: radius, - style: .circular - ) - .border(colorToApply, width: width) - ) + content + .clipShape(RoundedRectangle(cornerRadius: radius)) + .overlay(RoundedRectangle(cornerRadius: radius).stroke(colorToApply, lineWidth: width)) } private func dashed(_ content: Content) -> some View { - content.background( - RoundedRectangle( - cornerRadius: radius, - style: .circular + content + .clipShape(RoundedRectangle(cornerRadius: radius)) + .overlay(RoundedRectangle(cornerRadius: radius) + .stroke(style: StrokeStyle(lineWidth: width, dash: [10, 5])) + .foregroundColor(colorToApply) ) - .stroke(style: StrokeStyle(lineWidth: width, dash: [10, 5])) - .foregroundColor(colorToApply) - ) } private func dotted(_ content: Content) -> some View { - content.background( - RoundedRectangle( - cornerRadius: radius, - style: .circular + content + .clipShape(RoundedRectangle(cornerRadius: radius)) + .overlay(RoundedRectangle(cornerRadius: radius) + .stroke(style: StrokeStyle(lineWidth: width, dash: [1, 5])) + .foregroundColor(colorToApply) ) - .stroke(style: StrokeStyle(lineWidth: width, dash: [1, 5])) - .foregroundColor(colorToApply) - ) } } diff --git a/OUDS/Core/Components/Sources/ViewModifiers/BorderModifiers/View+Border.swift b/OUDS/Core/Components/Sources/ViewModifiers/BorderModifiers/View+Border.swift new file mode 100644 index 000000000..7d5cb27ef --- /dev/null +++ b/OUDS/Core/Components/Sources/ViewModifiers/BorderModifiers/View+Border.swift @@ -0,0 +1,34 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import OUDSTokensSemantic +import SwiftUI + +extension View { + + /// Modifies the current `View` to apply a border. + /// + /// - Parameters + /// - style: The style to apply on the component + /// - width: The width of the border + /// - radius: The radius of the border to apply + /// - color: The colors of the border (depending to the `colorScheme`) + /// - Returns some View: The current `View` but with a border. + public func oudsBorder( + style: BorderStyleSemanticToken, + width: BorderWidthSemanticToken, + radius: BorderRadiusSemanticToken, + color: ColorSemanticToken) -> some View { + self.modifier(BorderModifier(style, width, radius, color)) + } +} diff --git a/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/CustomFontModifier.swift similarity index 99% rename from OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift rename to OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/CustomFontModifier.swift index 40bcb9e32..9ae27aac1 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/CustomFontModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/CustomFontModifier.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensSemantic import SwiftUI diff --git a/OUDS/Core/Components/Sources/ViewModifiers/FontModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/FontModifier.swift similarity index 98% rename from OUDS/Core/Components/Sources/ViewModifiers/FontModifier.swift rename to OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/FontModifier.swift index eb8efce5f..28f86e5a4 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/FontModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/FontModifier.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensSemantic import SwiftUI diff --git a/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/TypographyModifier.swift similarity index 84% rename from OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift rename to OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/TypographyModifier.swift index 03e9772ec..9032c668e 100644 --- a/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifier.swift +++ b/OUDS/Core/Components/Sources/ViewModifiers/TypographyModifiers/TypographyModifier.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDS import OUDSFoundations import OUDSTokensRaw @@ -62,19 +61,20 @@ struct TypographyModifier: ViewModifier { } } - /// Applies to the `Content` the *adaptive font* (i.e. *font family*, *font weight*, *font size* and the *line height* - /// depending to the current `MultipleTypographyTokens` + // TODO: #51 - Call lineSpacing() and tracking() functions when values usable in TypographyRawTokens + /// Applies to the `Content` the *adaptive font* (i.e. *font family*, *font weight* and *font size* + /// depending to the current `MultipleTypographyTokens`. + /// **Does not apply _letter spacing_ nor _line height_ because raw tokens values are not usable!** func body(content: Content) -> some View { if #available(iOS 16.0, *) { content .font(adaptiveFont()) - .lineSpacing(adaptiveTypography.lineHeight) - .tracking(adaptiveTypography.letterSpacing) - } else { +// .lineSpacing(adaptiveTypography.lineHeight) +// .tracking(adaptiveTypography.letterSpacing) + } else { // tracking() and kerning() only available for iOS 16+ content .font(adaptiveFont()) - .lineSpacing(adaptiveTypography.lineHeight) - // tracking() and kerning() only available for iOS 16+ +// .lineSpacing(adaptiveTypography.lineHeight) } } } diff --git a/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md b/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md index cf8c010c1..2a3106795 100644 --- a/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md +++ b/OUDS/Core/Components/Sources/_OUDSComponents.docc/_OUDSComponents.md @@ -1,6 +1,6 @@ # ``OUDSComponents`` -The catalog of all components provided by OUDS. +The catalog of all components provided by OUDS. It contains also `View` extensions and `ViewModifiers` to apply tokens and styles on components and higher-level views. @Metadata { @TechnologyRoot @@ -66,6 +66,6 @@ myView.typeLabelStrongXLarge(theme) // Etc. ``` + ### Group -- ``OUDSFormsTextInput`` diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift index 27aa6491c..7cf33ad1c 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+ComponentTokens/OUDSTheme+FormsTextInputComponentToken.swift @@ -12,9 +12,9 @@ // import Foundation +import OUDSTokensComponent import OUDSTokensRaw import OUDSTokensSemantic -import OUDSTokensComponent /// Defines for `FormsTextInputComponentTokens` the basic configuration which can be overriden in subthemes / subclasses of this theme. /// **Warning: These are random and dumb values** diff --git a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift index a075e6bff..0954957b5 100644 --- a/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift +++ b/OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme+SemanticTokens/OUDSTheme+ColorSemanticTokens.swift @@ -12,7 +12,6 @@ // import Foundation -import OUDSFoundations import OUDSTokensRaw import OUDSTokensSemantic diff --git a/OUDS/Core/OUDS/Sources/_OUDS.docc/Components.md b/OUDS/Core/OUDS/Sources/_OUDS.docc/Components.md index 4110613e8..3e21e9042 100644 --- a/OUDS/Core/OUDS/Sources/_OUDS.docc/Components.md +++ b/OUDS/Core/OUDS/Sources/_OUDS.docc/Components.md @@ -10,15 +10,6 @@ Import the target of components, and use the component you want: ```swift import OUDSComponents // To get the components - -struct YourView: View { - - @State private var writtenText: String = "" - - var body: some View { - OUDSFormsTextInput(placeholder: "Some placeholder to display", value: $writtenText) - } -} ``` Of course you must use in your root view the with the suitable theme: diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+BorderSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+BorderSemanticTokens.swift index 12bc89111..514ebf6f9 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+BorderSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+BorderSemanticTokens.swift @@ -12,8 +12,8 @@ // import Foundation -import OUDSTokensSemantic import OUDSTokensRaw +import OUDSTokensSemantic extension MockTheme { diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift index 5de4df69c..fd92e762e 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+DimensionSemanticTokens.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensSemantic /// Defines basic values common to all themes for `DimensionSemanticTokens`. diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift index ac4c698d8..3795a9de9 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SizingSemanticTokens.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensRaw import OUDSTokensSemantic diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift index 2e45b9bfc..6fa47cd13 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+SpacingSemanticTokens.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensRaw import OUDSTokensSemantic diff --git a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift index 5f80bc9a9..a9d3bf2dd 100644 --- a/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift +++ b/OUDS/Core/OUDS/Tests/OUDSTheme/MockTheme/MockTheme+TypographySemanticTokens.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensRaw import OUDSTokensSemantic diff --git a/OUDS/Core/Themes/Inverse/Sources/InverseTheme.swift b/OUDS/Core/Themes/Inverse/Sources/InverseTheme.swift index 5482486da..bb02464d6 100644 --- a/OUDS/Core/Themes/Inverse/Sources/InverseTheme.swift +++ b/OUDS/Core/Themes/Inverse/Sources/InverseTheme.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSThemesOrange /// This is an override of the default basic `OrangeTheme` with some inverted colors. diff --git a/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift b/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift index 479eefaff..e244caf0e 100644 --- a/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift +++ b/OUDS/Core/Themes/Orange/Sources/Declarations/OrangeBrandColorRawTokens.swift @@ -11,10 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation -import SwiftUI -import OUDSTokensRaw - /// This enum helps to add new raw tokens for this theme. /// Such tokens are packed in a _Swift enum_ so as to gather them in one object with the suitable namespace and avoid to have just constants in nothing else /// (i.e. publicly accessible from everywhere). More optimized than _struct_. diff --git a/OUDS/Core/Themes/Orange/Sources/OrangeTheme+SemanticColorTokens.swift b/OUDS/Core/Themes/Orange/Sources/OrangeTheme+SemanticColorTokens.swift index ad9a58c30..07863ade9 100644 --- a/OUDS/Core/Themes/Orange/Sources/OrangeTheme+SemanticColorTokens.swift +++ b/OUDS/Core/Themes/Orange/Sources/OrangeTheme+SemanticColorTokens.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensRaw import OUDSTokensSemantic diff --git a/OUDS/Core/Themes/Orange/Sources/OrangeTheme.swift b/OUDS/Core/Themes/Orange/Sources/OrangeTheme.swift index 912120c02..ab15e574a 100644 --- a/OUDS/Core/Themes/Orange/Sources/OrangeTheme.swift +++ b/OUDS/Core/Themes/Orange/Sources/OrangeTheme.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDS /// This is an override of the default basic `OUDSTheme` and should be seen as the default theme for the OUDS library. diff --git a/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift b/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift index 5cdc46d76..ca3f75582 100644 --- a/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift +++ b/OUDS/Core/Themes/Orange/Sources/Values/OrangeBrandColorRawTokens+Values.swift @@ -11,8 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation -import SwiftUI import OUDSTokensRaw // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† diff --git a/OUDS/Core/Themes/Sosh/Sources/SoshTheme.swift b/OUDS/Core/Themes/Sosh/Sources/SoshTheme.swift index 9180ecc4c..027265d4a 100644 --- a/OUDS/Core/Themes/Sosh/Sources/SoshTheme.swift +++ b/OUDS/Core/Themes/Sosh/Sources/SoshTheme.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDS /// Overrides some colors using values defined in extension of `ColorRawTokens` in this current module. diff --git a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift index d4b80226f..22800bb86 100644 --- a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift +++ b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/ButtonsComponentTokens.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensSemantic /// This is a component tokens list for buttons like `OUDSButton`. diff --git a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/FormsTextInputComponentTokens.swift b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/FormsTextInputComponentTokens.swift index 2902b5dcd..9eb5896d2 100644 --- a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/FormsTextInputComponentTokens.swift +++ b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/FormsTextInputComponentTokens.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensSemantic /// This is a component token for a text input in formulars. diff --git a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift index 4f3c119eb..02de48d9e 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift +++ b/OUDS/Core/Tokens/RawTokens/Sources/Values/TypographyRawTokens+Values.swift @@ -11,6 +11,8 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +import UIKit + // เฌ˜( ๏ฝฅฯ‰๏ฝฅ)_/๏พŸ๏ฝฅ:*:๏ฝฅ๏ฝกโ˜† // [File to generate with the tokenator] @@ -64,23 +66,23 @@ extension TypographyRawTokens { // WARNING: values in pixels and not in points, do not use as is! - public static let fontLetterSpacing150: TypographyFontLetterSpacingRawToken = 150 - public static let fontLetterSpacing175: TypographyFontLetterSpacingRawToken = 175 - public static let fontLetterSpacing200: TypographyFontLetterSpacingRawToken = 200 - public static let fontLetterSpacing250: TypographyFontLetterSpacingRawToken = 250 - public static let fontLetterSpacing300: TypographyFontLetterSpacingRawToken = 300 - public static let fontLetterSpacing350: TypographyFontLetterSpacingRawToken = 350 - public static let fontLetterSpacing450: TypographyFontLetterSpacingRawToken = 450 - public static let fontLetterSpacing550: TypographyFontLetterSpacingRawToken = 550 - public static let fontLetterSpacing650: TypographyFontLetterSpacingRawToken = 650 - public static let fontLetterSpacing750: TypographyFontLetterSpacingRawToken = 750 - public static let fontLetterSpacing850: TypographyFontLetterSpacingRawToken = 850 - public static let fontLetterSpacing950: TypographyFontLetterSpacingRawToken = 950 - public static let fontLetterSpacing1050: TypographyFontLetterSpacingRawToken = 1050 - public static let fontLetterSpacing1150: TypographyFontLetterSpacingRawToken = 1150 - public static let fontLetterSpacing1250: TypographyFontLetterSpacingRawToken = 1250 - public static let fontLetterSpacing1450: TypographyFontLetterSpacingRawToken = 1450 - public static let fontLetterSpacing1850: TypographyFontLetterSpacingRawToken = 1850 + public static let fontLetterSpacing150: TypographyFontLetterSpacingRawToken = 150 / UIScreen.main.scale + public static let fontLetterSpacing175: TypographyFontLetterSpacingRawToken = 175 / UIScreen.main.scale + public static let fontLetterSpacing200: TypographyFontLetterSpacingRawToken = 200 / UIScreen.main.scale + public static let fontLetterSpacing250: TypographyFontLetterSpacingRawToken = 250 / UIScreen.main.scale + public static let fontLetterSpacing300: TypographyFontLetterSpacingRawToken = 300 / UIScreen.main.scale + public static let fontLetterSpacing350: TypographyFontLetterSpacingRawToken = 350 / UIScreen.main.scale + public static let fontLetterSpacing450: TypographyFontLetterSpacingRawToken = 450 / UIScreen.main.scale + public static let fontLetterSpacing550: TypographyFontLetterSpacingRawToken = 550 / UIScreen.main.scale + public static let fontLetterSpacing650: TypographyFontLetterSpacingRawToken = 650 / UIScreen.main.scale + public static let fontLetterSpacing750: TypographyFontLetterSpacingRawToken = 750 / UIScreen.main.scale + public static let fontLetterSpacing850: TypographyFontLetterSpacingRawToken = 850 / UIScreen.main.scale + public static let fontLetterSpacing950: TypographyFontLetterSpacingRawToken = 950 / UIScreen.main.scale + public static let fontLetterSpacing1050: TypographyFontLetterSpacingRawToken = 1050 / UIScreen.main.scale + public static let fontLetterSpacing1150: TypographyFontLetterSpacingRawToken = 1150 / UIScreen.main.scale + public static let fontLetterSpacing1250: TypographyFontLetterSpacingRawToken = 1250 / UIScreen.main.scale + public static let fontLetterSpacing1450: TypographyFontLetterSpacingRawToken = 1450 / UIScreen.main.scale + public static let fontLetterSpacing1850: TypographyFontLetterSpacingRawToken = 1850 / UIScreen.main.scale // MARK: Primitive token - Typography - Font family diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleColorTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleColorTokens.swift index 5f049bf46..285940c2b 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleColorTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleColorTokens.swift @@ -11,9 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import OUDSTokensRaw import OUDSFoundations +import SwiftUI /// Kind of semantic tokens which will wrap a combination of `ColorRawToken` depending to color scheme. /// Kind of composite token with multiple values, but not named "composite" because this word is already used in the design system. @@ -72,4 +72,11 @@ public final class MultipleColorTokens: NSObject { guard let other = object as? MultipleColorTokens else { return false } return self.light == other.light && self.dark == other.dark } + + /// Returns the right color according to the `colorScheme`. + /// - Parameter colorScheme: The color scheme + /// - Returns: The right color raw token + public func color(for colorSheme: ColorScheme) -> Color { + (colorSheme == .light ? light : dark).color + } } diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleElevationTokens.swift b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleElevationTokens.swift index 4a4d88f6f..ca7968e35 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleElevationTokens.swift +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/Multiples/MultipleElevationTokens.swift @@ -11,9 +11,9 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation -import OUDSTokensRaw import OUDSFoundations +import OUDSTokensRaw +import SwiftUI /// Semantic tokens which will wrap a combination of `ElevationCompositeRawToken` depending to color scheme. /// Kind of composite token with multiple values, but not named "composite" because this word is already used in the design system. @@ -49,4 +49,11 @@ public final class MultipleElevationTokens: NSObject { guard let other = object as? MultipleElevationTokens else { return false } return self.light == other.light && self.dark == other.dark } + + /// Returns the right elevation according to the `colorScheme`. + /// - Parameter colorScheme: The color scheme + /// - Returns: The right elevation raw token + public func elevation(for colorSheme: ColorScheme) -> ElevationCompositeRawToken { + (colorSheme == .light ? light : dark) + } } diff --git a/OUDS/Foundations/Sources/Extensions/Color+extensions.swift b/OUDS/Foundations/Sources/Extensions/Color+extensions.swift index a445fabf8..4d805dd8b 100644 --- a/OUDS/Foundations/Sources/Extensions/Color+extensions.swift +++ b/OUDS/Foundations/Sources/Extensions/Color+extensions.swift @@ -11,7 +11,6 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import SwiftUI extension Color { diff --git a/Showcase/Showcase.xcodeproj/project.pbxproj b/Showcase/Showcase.xcodeproj/project.pbxproj index 09b48e66d..1a92f7531 100644 --- a/Showcase/Showcase.xcodeproj/project.pbxproj +++ b/Showcase/Showcase.xcodeproj/project.pbxproj @@ -25,30 +25,44 @@ 070C35642C773A0D0029C6A8 /* OUDSThemesInverse in Frameworks */ = {isa = PBXBuildFile; productRef = 070C35632C773A0D0029C6A8 /* OUDSThemesInverse */; }; 070C35662C7762B90029C6A8 /* OUDSModules in Frameworks */ = {isa = PBXBuildFile; productRef = 070C35652C7762B90029C6A8 /* OUDSModules */; }; 070C35682C7762B90029C6A8 /* OUDSThemesSosh in Frameworks */ = {isa = PBXBuildFile; productRef = 070C35672C7762B90029C6A8 /* OUDSThemesSosh */; }; - 0740A9982C9874160069D24A /* OUDSFormsTextInputUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074008182C942753006B8729 /* OUDSFormsTextInputUITests.swift */; }; + 073543112CA154DE001187EA /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073543102CA154DE001187EA /* Card.swift */; }; + 073543132CA1676C001187EA /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 073543122CA1676C001187EA /* Colors.xcassets */; }; + 073543162CA17275001187EA /* ShowcaseElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073543152CA17275001187EA /* ShowcaseElement.swift */; }; + 073543182CA172CA001187EA /* TypographyTokenElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073543172CA172CA001187EA /* TypographyTokenElement.swift */; }; + 0735431B2CA18C48001187EA /* TypographyTokenPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0735431A2CA18C48001187EA /* TypographyTokenPage.swift */; }; + 0735432A2CA192F9001187EA /* TokenElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073543222CA192F9001187EA /* TokenElement.swift */; }; 0740A99A2C9874670069D24A /* SnapshotTesting in Frameworks */ = {isa = PBXBuildFile; productRef = 0740A9992C9874670069D24A /* SnapshotTesting */; }; 0740A99B2C9874E70069D24A /* Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074008222C942810006B8729 /* Snapshot.swift */; }; + 0747947A2CAE882A0033C2D8 /* EmptyState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074794792CAE882A0033C2D8 /* EmptyState.swift */; }; + 07CF426B2CA30728000BD03E /* TokensPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF426A2CA30728000BD03E /* TokensPage.swift */; }; + 07CF42722CA31AC3000BD03E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 07CF42712CA31AC3000BD03E /* Assets.xcassets */; }; + 07CF42742CA3EC58000BD03E /* CardIllustration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF42732CA3EC58000BD03E /* CardIllustration.swift */; }; + 07CF42782CA3F4BE000BD03E /* ElevationTokenElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF42762CA3F4BE000BD03E /* ElevationTokenElement.swift */; }; + 07CF42792CA3F4BE000BD03E /* ElevationTokenPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF42772CA3F4BE000BD03E /* ElevationTokenPage.swift */; }; + 07CF427F2CA41325000BD03E /* OpacityTokenElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF427D2CA41325000BD03E /* OpacityTokenElement.swift */; }; + 07CF42802CA41325000BD03E /* OpacityTokenPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF427E2CA41325000BD03E /* OpacityTokenPage.swift */; }; + 07CF42842CA45DA9000BD03E /* BorderTokenElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF42812CA45DA9000BD03E /* BorderTokenElement.swift */; }; + 07CF42852CA45DA9000BD03E /* BorderTokenPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF42822CA45DA9000BD03E /* BorderTokenPage.swift */; }; + 07CF42892CA55BC8000BD03E /* ThemeSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CF42882CA55BC8000BD03E /* ThemeSelection.swift */; }; 51087A7B2C46DF9F00160CCF /* Bundle+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51087A7A2C46DF9F00160CCF /* Bundle+extension.swift */; }; 510A9CD02C5679A300430620 /* OUDSComponents in Frameworks */ = {isa = PBXBuildFile; productRef = 510A9CCF2C5679A300430620 /* OUDSComponents */; }; - 511B8EC12C99861600E7C2F1 /* ElevationsList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 511B8EC02C99861600E7C2F1 /* ElevationsList.swift */; }; 512364792C3D7B2D00572FD5 /* Podfile.lock in Resources */ = {isa = PBXBuildFile; fileRef = 512364782C3D7B2D00572FD5 /* Podfile.lock */; }; 5123647B2C3D7B3500572FD5 /* Gemfile.lock in Resources */ = {isa = PBXBuildFile; fileRef = 5123647A2C3D7B3500572FD5 /* Gemfile.lock */; }; 513AD9402C5AAADE0003253B /* OUDSTokensComponent in Frameworks */ = {isa = PBXBuildFile; productRef = 513AD93F2C5AAADE0003253B /* OUDSTokensComponent */; }; - 513D58C22C9B28E100614929 /* ElevationsEffectsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513D58C12C9B28E100614929 /* ElevationsEffectsUITests.swift */; }; 5149BADB2C3D6F4F000FA4BF /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = 5149BADA2C3D6F4F000FA4BF /* Podfile */; }; 51B4F7F42C5BEAB700312019 /* OrangeCustomTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B4F7F32C5BEAB700312019 /* OrangeCustomTheme.swift */; }; 51BC9DE72C6513F200EB2A11 /* OUDSFoundations in Frameworks */ = {isa = PBXBuildFile; productRef = 51BC9DE62C6513F200EB2A11 /* OUDSFoundations */; }; 51BD76212C466FCF0033365D /* AboutPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BD760B2C466FCF0033365D /* AboutPage.swift */; }; 51BD76222C466FCF0033365D /* ComponentsPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BD760D2C466FCF0033365D /* ComponentsPage.swift */; }; - 51BD76232C466FCF0033365D /* GuidelinesPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BD760F2C466FCF0033365D /* GuidelinesPage.swift */; }; + 51BD76232C466FCF0033365D /* ShowcaseElementsPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BD760F2C466FCF0033365D /* ShowcaseElementsPage.swift */; }; 51BD76242C466FCF0033365D /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 51BD76122C466FCF0033365D /* Preview Assets.xcassets */; }; 51BD76252C466FCF0033365D /* about_legal_information.html in Resources */ = {isa = PBXBuildFile; fileRef = 51BD76152C466FCF0033365D /* about_legal_information.html */; }; 51BD76262C466FCF0033365D /* about_privacy_policy.html in Resources */ = {isa = PBXBuildFile; fileRef = 51BD76172C466FCF0033365D /* about_privacy_policy.html */; }; - 51BD76272C466FCF0033365D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 51BD76182C466FCF0033365D /* Assets.xcassets */; }; 51BD76282C466FCF0033365D /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 51BD761A2C466FCF0033365D /* Localizable.strings */; }; 51BD76292C466FCF0033365D /* WebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BD761C2C466FCF0033365D /* WebView.swift */; }; 51BD762A2C466FCF0033365D /* Showcase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BD761E2C466FCF0033365D /* Showcase.swift */; }; 51BD762B2C466FCF0033365D /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BD761F2C466FCF0033365D /* MainView.swift */; }; + 51E3FF0B2CAFD9AE00F1BC59 /* ShowcaseElementPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E3FF0A2CAFD9AE00F1BC59 /* ShowcaseElementPage.swift */; }; 51EE2C682C5BF5DE00F634EC /* OUDSThemesOrange in Frameworks */ = {isa = PBXBuildFile; productRef = 51EE2C672C5BF5DE00F634EC /* OUDSThemesOrange */; }; E537B9B66A6466473179DEE8 /* Pods_Showcase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0D3017314DBC1733F8D0C79 /* Pods_Showcase.framework */; }; /* End PBXBuildFile section */ @@ -66,14 +80,31 @@ /* Begin PBXFileReference section */ 0707B6402C2C3C0400A911E7 /* .github */ = {isa = PBXFileReference; lastKnownFileType = folder; name = .github; path = ../.github; sourceTree = ""; }; 0707B6432C2C569500A911E7 /* Gemfile */ = {isa = PBXFileReference; lastKnownFileType = text; name = Gemfile; path = ../Gemfile; sourceTree = ""; }; - 074008182C942753006B8729 /* OUDSFormsTextInputUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OUDSFormsTextInputUITests.swift; sourceTree = ""; }; + 073543102CA154DE001187EA /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; + 073543122CA1676C001187EA /* Colors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Colors.xcassets; sourceTree = ""; }; + 073543152CA17275001187EA /* ShowcaseElement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowcaseElement.swift; sourceTree = ""; }; + 073543172CA172CA001187EA /* TypographyTokenElement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypographyTokenElement.swift; sourceTree = ""; }; + 0735431A2CA18C48001187EA /* TypographyTokenPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypographyTokenPage.swift; sourceTree = ""; }; + 073543222CA192F9001187EA /* TokenElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenElement.swift; sourceTree = ""; }; + 073543232CA192F9001187EA /* ShacaseElementPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShacaseElementPage.swift; sourceTree = ""; }; 074008222C942810006B8729 /* Snapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Snapshot.swift; sourceTree = ""; }; 0740A9872C9833670069D24A /* Appfile */ = {isa = PBXFileReference; lastKnownFileType = text; name = Appfile; path = fastlane/Appfile; sourceTree = ""; }; 0740A9882C9833670069D24A /* Fastfile */ = {isa = PBXFileReference; lastKnownFileType = text; name = Fastfile; path = fastlane/Fastfile; sourceTree = ""; }; 0740A9892C9833670069D24A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = fastlane/README.md; sourceTree = ""; }; 0740A98F2C9873500069D24A /* ShowcaseTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShowcaseTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 0740A99C2C9888CF0069D24A /* ShowcaseUITestPlan.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = ShowcaseUITestPlan.xctestplan; path = ../ShowcaseUITestPlan.xctestplan; sourceTree = ""; }; + 074794792CAE882A0033C2D8 /* EmptyState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyState.swift; sourceTree = ""; }; 07CEDD802C7DB921003E1885 /* generateDoc.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = generateDoc.sh; path = ../generateDoc.sh; sourceTree = ""; }; + 07CF426A2CA30728000BD03E /* TokensPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokensPage.swift; sourceTree = ""; }; + 07CF42712CA31AC3000BD03E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 07CF42732CA3EC58000BD03E /* CardIllustration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardIllustration.swift; sourceTree = ""; }; + 07CF42762CA3F4BE000BD03E /* ElevationTokenElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ElevationTokenElement.swift; sourceTree = ""; }; + 07CF42772CA3F4BE000BD03E /* ElevationTokenPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ElevationTokenPage.swift; sourceTree = ""; }; + 07CF427D2CA41325000BD03E /* OpacityTokenElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpacityTokenElement.swift; sourceTree = ""; }; + 07CF427E2CA41325000BD03E /* OpacityTokenPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpacityTokenPage.swift; sourceTree = ""; }; + 07CF42812CA45DA9000BD03E /* BorderTokenElement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BorderTokenElement.swift; sourceTree = ""; }; + 07CF42822CA45DA9000BD03E /* BorderTokenPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BorderTokenPage.swift; sourceTree = ""; }; + 07CF42882CA55BC8000BD03E /* ThemeSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeSelection.swift; sourceTree = ""; }; 07FDCD912C296A500009AA13 /* OUDS Showcase.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OUDS Showcase.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 07FDCDA52C296B4B0009AA13 /* .gitattributes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = .gitattributes; path = ../.gitattributes; sourceTree = ""; }; 07FDCDA72C296B7A0009AA13 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; @@ -86,24 +117,22 @@ 07FDCDB72C296C370009AA13 /* .swiftformat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = .swiftformat; path = ../.swiftformat; sourceTree = ""; }; 07FDCDB82C296C370009AA13 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = .gitignore; path = ../.gitignore; sourceTree = ""; }; 51087A7A2C46DF9F00160CCF /* Bundle+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+extension.swift"; sourceTree = ""; }; - 511B8EC02C99861600E7C2F1 /* ElevationsList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElevationsList.swift; sourceTree = ""; }; 512364782C3D7B2D00572FD5 /* Podfile.lock */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Podfile.lock; sourceTree = ""; }; 5123647A2C3D7B3500572FD5 /* Gemfile.lock */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Gemfile.lock; path = ../Gemfile.lock; sourceTree = ""; }; - 513D58C12C9B28E100614929 /* ElevationsEffectsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElevationsEffectsUITests.swift; sourceTree = ""; }; 5149BADA2C3D6F4F000FA4BF /* Podfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Podfile; sourceTree = ""; }; 51A7A9DA2C46E17F00EF7A77 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 51B4F7F32C5BEAB700312019 /* OrangeCustomTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrangeCustomTheme.swift; sourceTree = ""; }; 51BD760B2C466FCF0033365D /* AboutPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AboutPage.swift; sourceTree = ""; }; 51BD760D2C466FCF0033365D /* ComponentsPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComponentsPage.swift; sourceTree = ""; }; - 51BD760F2C466FCF0033365D /* GuidelinesPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GuidelinesPage.swift; sourceTree = ""; }; + 51BD760F2C466FCF0033365D /* ShowcaseElementsPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShowcaseElementsPage.swift; sourceTree = ""; }; 51BD76122C466FCF0033365D /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 51BD76142C466FCF0033365D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = en; path = en.lproj/about_legal_information.html; sourceTree = ""; }; 51BD76162C466FCF0033365D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = en; path = en.lproj/about_privacy_policy.html; sourceTree = ""; }; - 51BD76182C466FCF0033365D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 51BD76192C466FCF0033365D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 51BD761C2C466FCF0033365D /* WebView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebView.swift; sourceTree = ""; }; 51BD761E2C466FCF0033365D /* Showcase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Showcase.swift; sourceTree = ""; }; 51BD761F2C466FCF0033365D /* MainView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; }; + 51E3FF0A2CAFD9AE00F1BC59 /* ShowcaseElementPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ShowcaseElementPage.swift; path = Showcase/Pages/Utils/ShowcaseElementPage.swift; sourceTree = ""; }; 974E2EAB64D9123627CD7D29 /* Pods-DemoApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoApp.release.xcconfig"; path = "Target Support Files/Pods-DemoApp/Pods-DemoApp.release.xcconfig"; sourceTree = ""; }; BF4130905502F287757622E2 /* Pods-DemoApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DemoApp.debug.xcconfig"; path = "Target Support Files/Pods-DemoApp/Pods-DemoApp.debug.xcconfig"; sourceTree = ""; }; E0D3017314DBC1733F8D0C79 /* Pods_Showcase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Showcase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -139,6 +168,35 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0735430F2CA15440001187EA /* Cards */ = { + isa = PBXGroup; + children = ( + 073543102CA154DE001187EA /* Card.swift */, + 07CF42732CA3EC58000BD03E /* CardIllustration.swift */, + ); + path = Cards; + sourceTree = ""; + }; + 073543142CA17244001187EA /* Utils */ = { + isa = PBXGroup; + children = ( + 0735430F2CA15440001187EA /* Cards */, + 51BD760F2C466FCF0033365D /* ShowcaseElementsPage.swift */, + 073543152CA17275001187EA /* ShowcaseElement.swift */, + 073543232CA192F9001187EA /* ShacaseElementPage.swift */, + ); + path = Utils; + sourceTree = ""; + }; + 073543192CA17388001187EA /* Typography */ = { + isa = PBXGroup; + children = ( + 073543172CA172CA001187EA /* TypographyTokenElement.swift */, + 0735431A2CA18C48001187EA /* TypographyTokenPage.swift */, + ); + path = Typography; + sourceTree = ""; + }; 074008212C9427F8006B8729 /* Snapshots */ = { isa = PBXGroup; children = ( @@ -161,16 +219,50 @@ isa = PBXGroup; children = ( 074008212C9427F8006B8729 /* Snapshots */, - 074008182C942753006B8729 /* OUDSFormsTextInputUITests.swift */, - 513D58C12C9B28E100614929 /* ElevationsEffectsUITests.swift */, 0740A99C2C9888CF0069D24A /* ShowcaseUITestPlan.xctestplan */, ); path = ShowcaseTests; sourceTree = ""; }; + 07CF42752CA3F461000BD03E /* Elevation */ = { + isa = PBXGroup; + children = ( + 07CF42762CA3F4BE000BD03E /* ElevationTokenElement.swift */, + 07CF42772CA3F4BE000BD03E /* ElevationTokenPage.swift */, + ); + path = Elevation; + sourceTree = ""; + }; + 07CF427C2CA412F5000BD03E /* Opacity */ = { + isa = PBXGroup; + children = ( + 07CF427D2CA41325000BD03E /* OpacityTokenElement.swift */, + 07CF427E2CA41325000BD03E /* OpacityTokenPage.swift */, + ); + path = Opacity; + sourceTree = ""; + }; + 07CF42832CA45DA9000BD03E /* Border */ = { + isa = PBXGroup; + children = ( + 07CF42812CA45DA9000BD03E /* BorderTokenElement.swift */, + 07CF42822CA45DA9000BD03E /* BorderTokenPage.swift */, + ); + path = Border; + sourceTree = ""; + }; + 07CF42872CA55BB4000BD03E /* ThemeSelection */ = { + isa = PBXGroup; + children = ( + 07CF42882CA55BC8000BD03E /* ThemeSelection.swift */, + ); + path = ThemeSelection; + sourceTree = ""; + }; 07FDCD882C296A500009AA13 = { isa = PBXGroup; children = ( + 51E3FF0A2CAFD9AE00F1BC59 /* ShowcaseElementPage.swift */, 07FDCDA32C296B170009AA13 /* ๐Ÿ›  */, 51BD76202C466FCF0033365D /* Showcase */, 0740A9902C9873500069D24A /* ShowcaseTests */, @@ -221,14 +313,6 @@ name = Configuration; sourceTree = ""; }; - 511B8EBF2C9985C700E7C2F1 /* Elevations */ = { - isa = PBXGroup; - children = ( - 511B8EC02C99861600E7C2F1 /* ElevationsList.swift */, - ); - path = Elevations; - sourceTree = ""; - }; 51BD760C2C466FCF0033365D /* About */ = { isa = PBXGroup; children = ( @@ -240,26 +324,33 @@ 51BD760E2C466FCF0033365D /* Components */ = { isa = PBXGroup; children = ( - 511B8EBF2C9985C700E7C2F1 /* Elevations */, 51BD760D2C466FCF0033365D /* ComponentsPage.swift */, + 074794792CAE882A0033C2D8 /* EmptyState.swift */, ); path = Components; sourceTree = ""; }; - 51BD76102C466FCF0033365D /* Guidelines */ = { + 51BD76102C466FCF0033365D /* Tokens */ = { isa = PBXGroup; children = ( - 51BD760F2C466FCF0033365D /* GuidelinesPage.swift */, + 07CF42832CA45DA9000BD03E /* Border */, + 07CF427C2CA412F5000BD03E /* Opacity */, + 07CF42752CA3F461000BD03E /* Elevation */, + 073543192CA17388001187EA /* Typography */, + 073543222CA192F9001187EA /* TokenElement.swift */, + 07CF426A2CA30728000BD03E /* TokensPage.swift */, ); - path = Guidelines; + path = Tokens; sourceTree = ""; }; 51BD76112C466FCF0033365D /* Pages */ = { isa = PBXGroup; children = ( + 07CF42872CA55BB4000BD03E /* ThemeSelection */, + 073543142CA17244001187EA /* Utils */, 51BD760C2C466FCF0033365D /* About */, 51BD760E2C466FCF0033365D /* Components */, - 51BD76102C466FCF0033365D /* Guidelines */, + 51BD76102C466FCF0033365D /* Tokens */, ); path = Pages; sourceTree = ""; @@ -275,9 +366,10 @@ 51BD761B2C466FCF0033365D /* Resources */ = { isa = PBXGroup; children = ( + 07CF42712CA31AC3000BD03E /* Assets.xcassets */, + 073543122CA1676C001187EA /* Colors.xcassets */, 51BD76152C466FCF0033365D /* about_legal_information.html */, 51BD76172C466FCF0033365D /* about_privacy_policy.html */, - 51BD76182C466FCF0033365D /* Assets.xcassets */, 51BD761A2C466FCF0033365D /* Localizable.strings */, ); path = Resources; @@ -355,10 +447,10 @@ buildConfigurationList = 07FDCD9F2C296A540009AA13 /* Build configuration list for PBXNativeTarget "Showcase" */; buildPhases = ( 2A5B2E6765E57E6A6B13CBA1 /* [CP] Check Pods Manifest.lock */, + 0707B6412C2C414200A911E7 /* Run Swiftlint */, 07FDCD8D2C296A500009AA13 /* Sources */, 07FDCD8E2C296A500009AA13 /* Frameworks */, 07FDCD8F2C296A500009AA13 /* Resources */, - 0707B6412C2C414200A911E7 /* Run Swiftlint */, ); buildRules = ( ); @@ -436,13 +528,14 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 073543132CA1676C001187EA /* Colors.xcassets in Resources */, 5149BADB2C3D6F4F000FA4BF /* Podfile in Resources */, 51BD76242C466FCF0033365D /* Preview Assets.xcassets in Resources */, 51BD76252C466FCF0033365D /* about_legal_information.html in Resources */, 5123647B2C3D7B3500572FD5 /* Gemfile.lock in Resources */, 51BD76262C466FCF0033365D /* about_privacy_policy.html in Resources */, 51BD76282C466FCF0033365D /* Localizable.strings in Resources */, - 51BD76272C466FCF0033365D /* Assets.xcassets in Resources */, + 07CF42722CA31AC3000BD03E /* Assets.xcassets in Resources */, 512364792C3D7B2D00572FD5 /* Podfile.lock in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -467,7 +560,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "if which \"swiftlint\" >/dev/null; then\n swiftlint --config ../.swiftlint.yml OUDS/*\n swiftlint --config ../.swiftlint.yml Showcase/*\nelse\n echo \"warning: SwiftLint not installed, download from CocoaPods (see https://github.com/realm/SwiftLint)\"\nfi\n"; + shellScript = "if which \"swiftlint\" >/dev/null; then\n swiftlint --config ../.swiftlint.yml Showcase/*\n swiftlint --config ../.swiftlint.yml OUDS/*\nelse\n echo \"warning: SwiftLint not installed, download from CocoaPods (see https://github.com/realm/SwiftLint)\"\nfi\n"; }; 2A5B2E6765E57E6A6B13CBA1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; @@ -516,9 +609,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0740A9982C9874160069D24A /* OUDSFormsTextInputUITests.swift in Sources */, 0740A99B2C9874E70069D24A /* Snapshot.swift in Sources */, - 513D58C22C9B28E100614929 /* ElevationsEffectsUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -526,13 +617,28 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 07CF42852CA45DA9000BD03E /* BorderTokenPage.swift in Sources */, + 07CF42842CA45DA9000BD03E /* BorderTokenElement.swift in Sources */, + 07CF42802CA41325000BD03E /* OpacityTokenPage.swift in Sources */, + 0747947A2CAE882A0033C2D8 /* EmptyState.swift in Sources */, 51BD762B2C466FCF0033365D /* MainView.swift in Sources */, 51B4F7F42C5BEAB700312019 /* OrangeCustomTheme.swift in Sources */, + 07CF42742CA3EC58000BD03E /* CardIllustration.swift in Sources */, + 07CF42782CA3F4BE000BD03E /* ElevationTokenElement.swift in Sources */, + 07CF42792CA3F4BE000BD03E /* ElevationTokenPage.swift in Sources */, + 0735432A2CA192F9001187EA /* TokenElement.swift in Sources */, + 073543182CA172CA001187EA /* TypographyTokenElement.swift in Sources */, 51BD76292C466FCF0033365D /* WebView.swift in Sources */, - 51BD76232C466FCF0033365D /* GuidelinesPage.swift in Sources */, - 511B8EC12C99861600E7C2F1 /* ElevationsList.swift in Sources */, + 51BD76232C466FCF0033365D /* ShowcaseElementsPage.swift in Sources */, + 51E3FF0B2CAFD9AE00F1BC59 /* ShowcaseElementPage.swift in Sources */, + 073543162CA17275001187EA /* ShowcaseElement.swift in Sources */, 51087A7B2C46DF9F00160CCF /* Bundle+extension.swift in Sources */, + 0735431B2CA18C48001187EA /* TypographyTokenPage.swift in Sources */, 51BD76222C466FCF0033365D /* ComponentsPage.swift in Sources */, + 07CF42892CA55BC8000BD03E /* ThemeSelection.swift in Sources */, + 07CF427F2CA41325000BD03E /* OpacityTokenElement.swift in Sources */, + 07CF426B2CA30728000BD03E /* TokensPage.swift in Sources */, + 073543112CA154DE001187EA /* Card.swift in Sources */, 51BD76212C466FCF0033365D /* AboutPage.swift in Sources */, 51BD762A2C466FCF0033365D /* Showcase.swift in Sources */, ); diff --git a/Showcase/Showcase/MainView.swift b/Showcase/Showcase/MainView.swift index c9471fe47..023646e0e 100644 --- a/Showcase/Showcase/MainView.swift +++ b/Showcase/Showcase/MainView.swift @@ -11,14 +11,19 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +import OUDS +import OUDSThemesOrange import SwiftUI struct MainView: View { + + @Environment(\.theme) private var theme + var body: some View { TabView { - GuidelinesPage() + TokensPage() .tabItem { - Label("app_bottomBar_guidelines", image: "ic_guideline_dna") + Label("app_bottomBar_tokens", image: "ic_token") } ComponentsPage() .tabItem { @@ -28,8 +33,8 @@ struct MainView: View { .tabItem { Label("app_bottomBar_about", image: "ic_info") } - } + .accentColor(theme.sysColorBrandPrimaryDefault?.color) } } diff --git a/Showcase/Showcase/OrangeCustomTheme.swift b/Showcase/Showcase/OrangeCustomTheme.swift index 968016c60..271ddac6d 100644 --- a/Showcase/Showcase/OrangeCustomTheme.swift +++ b/Showcase/Showcase/OrangeCustomTheme.swift @@ -11,11 +11,10 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // -import Foundation import SwiftUI +import OUDSTokensComponent import OUDSTokensRaw import OUDSTokensSemantic -import OUDSTokensComponent import OUDSThemesOrange // swiftlint:disable line_length diff --git a/Showcase/Showcase/Pages/Components/ComponentsPage.swift b/Showcase/Showcase/Pages/Components/ComponentsPage.swift index 7b5154160..d688ca15b 100644 --- a/Showcase/Showcase/Pages/Components/ComponentsPage.swift +++ b/Showcase/Showcase/Pages/Components/ComponentsPage.swift @@ -12,8 +12,9 @@ // import SwiftUI -import OUDSTokensSemantic -import OUDSTokensRaw +import OUDS +import OUDSThemesOrange +import OUDSComponents // MARK: - View for display @@ -21,7 +22,7 @@ struct ComponentsPage: View { var body: some View { NavigationView { - ElevationsList().navigationTitle("app_bottomBar_components") + EmptyState() } } } diff --git a/Showcase/Showcase/Pages/Components/Elevations/ElevationsList.swift b/Showcase/Showcase/Pages/Components/Elevations/ElevationsList.swift deleted file mode 100644 index 239352715..000000000 --- a/Showcase/Showcase/Pages/Components/Elevations/ElevationsList.swift +++ /dev/null @@ -1,95 +0,0 @@ -// -// Software Name: OUDS iOS -// SPDX-FileCopyrightText: Copyright (c) Orange SA -// SPDX-License-Identifier: MIT -// -// This software is distributed under the MIT license, -// the text of which is available at https://opensource.org/license/MIT/ -// or see the "LICENSE" file for more details. -// -// Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System -// - -import Foundation -import OUDSTokensSemantic -import OUDSTokensRaw -import SwiftUI - -// MARK: - Raw tokens - -let raised = ElevationCompositeRawToken(x: 0, y: 1, blur: 2, color: ColorRawTokens.colorTransparentBlack500) -let overlayDefault = ElevationCompositeRawToken(x: 0, y: 2, blur: 3, color: ColorRawTokens.colorTransparentBlack400) -let allSticky = ElevationCompositeRawToken(x: 0, y: 4, blur: 4, color: ColorRawTokens.colorTransparentBlack300) -let drag = ElevationCompositeRawToken(x: 0, y: 4, blur: 4, color: ColorRawTokens.colorTransparentBlack500) -let overlayEmphasized = ElevationCompositeRawToken(x: 0, y: 12, blur: 12, color: ColorRawTokens.colorTransparentBlack300) - -// MARK: - Rectangle for elevation tests - -/// Simple rectangle -struct ElevationRectangle: View { - - @Environment(\.colorScheme) private var colorScheme - - var foregroundColor: Color { - switch colorScheme { - case .light: - .white - case .dark: - "#333333".color - @unknown default: - fatalError() - } - } - - let elevation: ElevationCompositeSemanticToken - var body: some View { - Rectangle() - .frame(width: 300, height: 80) - .foregroundColor(foregroundColor) - .shadow(elevation: elevation) - } -} - -// MARK: - List of rectangles for rendering tests - -/// Just a debug `View` to list the elevations effects and render them. -/// Set as public for UI tests purposes. -public struct ElevationsList: View { - - public init() {} - - @Environment(\.colorScheme) private var colorScheme - - var backgroundColor: Color { - switch colorScheme { - case .light: - "#f4f4f4".color - case .dark: - "#272727".color - @unknown default: - fatalError() - } - } - - public var body: some View { - ScrollView { - VStack(alignment: .leading, spacing: 40) { - ElevationRectangle(elevation: ElevationCompositeSemanticToken(raised)) - ElevationRectangle(elevation: ElevationCompositeSemanticToken(overlayDefault)) - ElevationRectangle(elevation: ElevationCompositeSemanticToken(allSticky)) - ElevationRectangle(elevation: ElevationCompositeSemanticToken(drag)) - ElevationRectangle(elevation: ElevationCompositeSemanticToken(overlayEmphasized)) - } - .frame(maxWidth: .infinity) - } - .background(backgroundColor) - } -} - -#Preview { - ElevationsList().preferredColorScheme(.dark) -} -#Preview { - ElevationsList().preferredColorScheme(.light) -} diff --git a/Showcase/Showcase/Pages/Components/EmptyState.swift b/Showcase/Showcase/Pages/Components/EmptyState.swift new file mode 100644 index 000000000..e68d4b9da --- /dev/null +++ b/Showcase/Showcase/Pages/Components/EmptyState.swift @@ -0,0 +1,39 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI +import OUDSTokensSemantic + +struct EmptyState: View { + + @Environment(\.theme) private var theme + + var body: some View { + ScrollView { + VStack(alignment: .center, spacing: theme.spaceFixedMedium) { + Image("il_empty_screen") + .frame(width: 160, height: 160, alignment: .center) + + VStack(alignment: .center, spacing: theme.spaceFixedShorter) { + Text("app_component_empty_content_text") + .typeHeadingMedium(theme) + Text("app_component_empty_content_description_text") + .typeBodyDefaultSmall(theme) + } + .padding(.vertical, theme.spaceFixedMedium) + } + .padding(.top, theme.spaceFixedJumbo) + .padding(.horizontal, theme.spaceFixedMedium) + } + } +} diff --git a/Showcase/Showcase/Pages/Guidelines/GuidelinesPage.swift b/Showcase/Showcase/Pages/Guidelines/GuidelinesPage.swift deleted file mode 100644 index 404bdf92e..000000000 --- a/Showcase/Showcase/Pages/Guidelines/GuidelinesPage.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// Software Name: OUDS iOS -// SPDX-FileCopyrightText: Copyright (c) Orange SA -// SPDX-License-Identifier: MIT -// -// This software is distributed under the MIT license, -// the text of which is available at https://opensource.org/license/MIT/ -// or see the "LICENSE" file for more details. -// -// Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System -// - -import SwiftUI -import OUDS -import OUDSComponents -import OUDSThemesOrange - -struct GuidelinesPage: View { - - @State private var writtenText: String = "" - @State private var selectedTheme: OUDSTheme - - init() { - writtenText = "" - selectedTheme = OrangeTheme() - } - - var body: some View { - OUDSThemeableView(theme: selectedTheme) { - NavigationView { - VStack(alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/, spacing: 30) { - - OUDSFormsTextInput(label: "Awesome form", - hint: "Type something", - placeholder: "Display large", - value: $writtenText) - - OUDSButton(text: "Some button") {} - - Button("Try OUDS Orange Theme") { - selectedTheme = OrangeTheme() - print("Showcase app - Selected OUDS Orange theme") - } - - Button("Try custom \"local\" theme") { - selectedTheme = OrangeCustomTheme() - print("Showcase app - Selected app custom theme") - } - - } - .padding(.horizontal, 20) - .navigationTitle("app_bottomBar_guidelines") - } - } - } -} diff --git a/Showcase/Showcase/Pages/ThemeSelection/ThemeSelection.swift b/Showcase/Showcase/Pages/ThemeSelection/ThemeSelection.swift new file mode 100644 index 000000000..87aa96adb --- /dev/null +++ b/Showcase/Showcase/Pages/ThemeSelection/ThemeSelection.swift @@ -0,0 +1,124 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import OUDS +import OUDSThemesInverse +import OUDSThemesOrange +import OUDSThemesSosh +import SwiftUI + +// MARK: - Extension of OUDSTheme + +/// Extension of the `OUDSTheme` to add both `Identifiable` and `Hashable`. +/// An `OUDSTheme` must be `Identifiable` to be enumerated like in `ForEach`(e.g. used to build the list of elements in picker). +/// It must be `Hashable` because it is used in a picker than need `Hashable` element. +extension OUDSTheme: Identifiable, Hashable { + + var name: String { + if self is InverseTheme { // Is also an OrangeTheme, should be checked before + return "Inverse" + } + + if self is OrangeTheme { + return "Orange" + } + + if self is SoshTheme { + return "Sosh" + } + + return String(describing: Self.self) + } + + // MARK: Identifiable + + public var id: String { + name + } + + // MARK: Hashable + + public static func == (lhs: OUDSTheme, rhs: OUDSTheme) -> Bool { + lhs.name == rhs.name + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(name) + } +} + +// MARK: - Theme Provider + +/// Theme provider that proposes all supported themes for the demo application. +/// It also stores the current theme, selected by user. +final class ThemeProvider: ObservableObject { + + let themes: [OUDSTheme] + + @Published + var currentTheme: OUDSTheme { + didSet { + UserDefaults.standard.set(currentTheme.name, forKey: "themeName") + } + } + + init() { + let orangeTheme = OrangeTheme() + let soshTheme = SoshTheme() + let inverseTheme = InverseTheme() + let defaultTheme = orangeTheme + themes = [orangeTheme, soshTheme, inverseTheme] + + if let themeName = UserDefaults.standard.value(forKey: "themeName") as? String, + let theme = themes.first(where: { $0.name == themeName }) { + currentTheme = theme + } else { + currentTheme = defaultTheme + } + } +} + +// MARK: - Theme Selection Button + +extension View { + + /// To add a `ThemeSelectionButton` in the toolbar + func navigationbarMenuForThemeSelection() -> some View { + toolbar { + ToolbarItemGroup(placement: .navigationBarTrailing) { + ThemeSelectionButton() + } + } + } +} + +/// Button to make the user change the current theme. +struct ThemeSelectionButton: View { + + @EnvironmentObject private var themeProvider: ThemeProvider + @Environment(\.colorScheme) private var colorScheme + + var body: some View { + Menu { + Picker(selection: $themeProvider.currentTheme, label: EmptyView()) { + ForEach(themeProvider.themes, id: \.id) { theme in + Text(theme.name).tag(theme) + } + } + .pickerStyle(.automatic) + } label: { + Image(systemName: "paintpalette") + } + .foregroundColor(themeProvider.currentTheme.colorContentBrandPrimary?.color(for: colorScheme)) + } +} diff --git a/Showcase/Showcase/Pages/Tokens/Border/BorderTokenElement.swift b/Showcase/Showcase/Pages/Tokens/Border/BorderTokenElement.swift new file mode 100644 index 000000000..2c52750b4 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/Border/BorderTokenElement.swift @@ -0,0 +1,28 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +struct BorderTokenElement: TokenElement { + let name: String + let imageName: String + let description: String + let pageDescription: AnyView + + init() { + name = "app_tokens_border_label" + imageName = "ic_border" + description = "app_tokens_border_description_text" + pageDescription = AnyView(BorderTokenPage()) + } +} diff --git a/Showcase/Showcase/Pages/Tokens/Border/BorderTokenPage.swift b/Showcase/Showcase/Pages/Tokens/Border/BorderTokenPage.swift new file mode 100644 index 000000000..5062dcbd5 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/Border/BorderTokenPage.swift @@ -0,0 +1,159 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI +import OUDS +import OUDSTokensSemantic +import OUDSComponents // for BorderStyleModifier + +// Remark: do we need to keep BorderStyleModifier in OUDSComponent or move it to OUDS or OUDSSementicToken ? + +struct BorderTokenPage: View { + + @Environment(\.theme) private var theme + @Environment(\.colorScheme) private var colorScheme + + // MARK: Body + + var body: some View { + VStack(alignment: .center, spacing: theme.spaceFixedMedium) { + groupOfIllustrations(name: "Width") { + ForEach(Width.allCases, id: \.rawValue) { width in + let token = width.token(from: theme) + + illustration(width: token, + radius: theme.borderRadiusNone, + style: theme.borderStyleDefault, + name: width.rawValue, + value: token) + } + } + + groupOfIllustrations(name: "Radius") { + ForEach(Radius.allCases, id: \.rawValue) { radius in + let token = radius.token(from: theme) + illustration(width: theme.borderWidthDefault, + radius: token, + style: theme.borderStyleDefault, + name: radius.rawValue, + value: token) + } + } + + groupOfIllustrations(name: "Style") { + illustration(width: theme.borderWidthMedium, + radius: theme.borderRadiusNone, + style: theme.borderStyleDefault, + name: "borderStyleDefault") + illustration(width: theme.borderWidthMedium, + radius: theme.borderRadiusNone, + style: theme.borderStyleDrag, + name: "borderStyleDrag") + } + } + .padding(.horizontal, theme.spaceFixedMedium) + } + + // MARK: Private helpers + + @ViewBuilder + private func groupOfIllustrations (name: String, @ViewBuilder illustrations: () -> Illustration) -> some View where Illustration: View { + VStack(alignment: .leading, spacing: theme.spaceFixedShorter) { + Text(name).typeHeadingLarge(theme) + + VStack(alignment: .leading, spacing: theme.spaceFixedNone) { + illustrations() + } + } + } + + private func illustration( + width: BorderWidthSemanticToken, + radius: BorderRadiusSemanticToken, + style: BorderStyleSemanticToken, + name: String, + value: Double? = nil) -> some View { + HStack(alignment: .center, spacing: theme.spaceFixedMedium) { + + Rectangle() + .fill(theme.colorBackgroundDefaultSecondary?.color(for: colorScheme) ?? Color(UIColor.systemGroupedBackground)) + .frame(width: 64, height: 64) + .oudsBorder(style: style, + width: width, + radius: radius, + color: theme.colorBorderDefault!) + + VStack(alignment: .leading, spacing: theme.spaceFixedNone) { + Text(name).bold() + if let value { + Text("\(value, specifier: "%.1f")") + } + } + .frame(maxWidth: .infinity, alignment: .leading) + } + .padding(.vertical, theme.spaceFixedShorter) + } +} + +private enum Radius: String, CaseIterable { + case borderRadiusNone + case borderRadiusDefault + case borderRadiusShort + case borderRadiusMedium + case borderRadiusTall + + func token(from theme: OUDSTheme) -> BorderRadiusSemanticToken { + switch self { + case .borderRadiusNone: + return theme.borderRadiusNone + case .borderRadiusDefault: + return theme.borderRadiusDefault + case .borderRadiusShort: + return theme.borderRadiusShort + case .borderRadiusMedium: + return theme.borderRadiusMedium + case .borderRadiusTall: + return theme.borderRadiusTall + } + } +} + +private enum Width: String, CaseIterable { + + case borderWidthNone + case borderWidthDefault + case borderWidthThin + case borderWidthMedium + case borderWidthThick + case borderWidthThicker + case borderWidthOutsideFocus + + func token(from theme: OUDSTheme) -> BorderWidthSemanticToken { + switch self { + case .borderWidthNone: + return theme.borderWidthNone + case .borderWidthDefault: + return theme.borderWidthDefault + case .borderWidthThin: + return theme.borderWidthThin + case .borderWidthMedium: + return theme.borderWidthMedium + case .borderWidthThick: + return theme.borderWidthThick + case .borderWidthThicker: + return theme.borderWidthThicker + case .borderWidthOutsideFocus: + return theme.borderWidthOutsideFocus + } + } +} diff --git a/Showcase/Showcase/Pages/Tokens/Elevation/ElevationTokenElement.swift b/Showcase/Showcase/Pages/Tokens/Elevation/ElevationTokenElement.swift new file mode 100644 index 000000000..46b85f8b9 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/Elevation/ElevationTokenElement.swift @@ -0,0 +1,28 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +struct ElevationTokenElement: TokenElement { + let name: String + let imageName: String + let description: String + let pageDescription: AnyView + + init() { + name = "app_tokens_elevation_label" + imageName = "ic_layers" + description = "app_tokens_elevation_description_text" + pageDescription = AnyView(ElevationTokenPage()) + } +} diff --git a/Showcase/Showcase/Pages/Tokens/Elevation/ElevationTokenPage.swift b/Showcase/Showcase/Pages/Tokens/Elevation/ElevationTokenPage.swift new file mode 100644 index 000000000..91b35a399 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/Elevation/ElevationTokenPage.swift @@ -0,0 +1,106 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI +import OUDS +import OUDSTokensRaw +import OUDSTokensSemantic + +// MARK: - Elevation Token Page + +struct ElevationTokenPage: View { + + @Environment(\.theme) private var theme + @Environment(\.colorScheme) private var colorScheme + + // MARK: Body + + var body: some View { + VStack(alignment: .leading, spacing: theme.spaceFixedNone) { + ForEach(NamedElevation.allCases, id: \.rawValue) { elevationName in + illustration(for: elevationName) + } + } + .frame(maxWidth: .infinity) + .padding(.horizontal, theme.spaceFixedMedium) + } + + // MARK: Helpers + + private func illustration(for elevation: NamedElevation) -> some View { + illustration(for: elevation.token(from: theme), named: elevation.rawValue) + } + + private func illustration(for elevationSementicToken: ElevationCompositeSemanticToken, named: String) -> some View { + + let elevationRawToken = elevationSementicToken.elevation(for: colorScheme) + return HStack(alignment: .center, spacing: theme.spaceFixedMedium) { + elevationRectangle(elevationRawToken: elevationRawToken) + + VStack(alignment: .leading) { + Text(named).bold() + Text("x: \(elevationRawToken.x, specifier: "%.2f"), ") + + Text("y: \(elevationRawToken.y, specifier: "%.2f"), ") + + Text("radius: \(elevationRawToken.radius, specifier: "%.2f")") + + Text("Color: \(elevationRawToken.color)") + } + .frame(maxWidth: .infinity, alignment: .leading) + } + .padding(.vertical, theme.spaceFixedShorter) + } + + private func elevationRectangle(elevationRawToken: ElevationCompositeRawToken) -> some View { + Rectangle() + .frame(width: theme.sizeIconDecorativeTallest, height: theme.sizeIconDecorativeTallest) + .foregroundColor(theme.colorBackgroundDefaultSecondary?.color(for: colorScheme)) + .shadow(elevation: elevationRawToken) + } +} + +// MARK: - Named Elevation + +private enum NamedElevation: String, CaseIterable { + case elevationNone + case elevationFocus + case elevationRaised + case elevationStickyNavigationScrolled + case elevationOverlayDefault + case elevationStickyDefault + case elevationStickyEmphasized + case elevationDrag + case elevationOverlayEmphasized + + func token(from theme: OUDSTheme) -> ElevationCompositeSemanticToken { + switch self { + case .elevationNone: + return theme.elevationNone + case .elevationFocus: + return theme.elevationFocus + case .elevationRaised: + return theme.elevationRaised + case .elevationStickyNavigationScrolled: + return theme.elevationStickyNavigationScrolled + case .elevationOverlayDefault: + return theme.elevationOverlayDefault + case .elevationStickyDefault: + return theme.elevationStickyDefault + case .elevationStickyEmphasized: + return theme.elevationStickyEmphasized + case .elevationDrag: + return theme.elevationDrag + case .elevationOverlayEmphasized: + return theme.elevationOverlayEmphasized + } + } +} diff --git a/Showcase/Showcase/Pages/Tokens/Opacity/OpacityTokenElement.swift b/Showcase/Showcase/Pages/Tokens/Opacity/OpacityTokenElement.swift new file mode 100644 index 000000000..be24735f9 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/Opacity/OpacityTokenElement.swift @@ -0,0 +1,28 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +struct OpacityTokenElement: TokenElement { + let name: String + let imageName: String + let description: String + let pageDescription: AnyView + + init() { + name = "app_tokens_opacity_label" + imageName = "ic_filter_effects" + description = "app_tokens_opacity_description_text" + pageDescription = AnyView(OpacityTokenPage()) + } +} diff --git a/Showcase/Showcase/Pages/Tokens/Opacity/OpacityTokenPage.swift b/Showcase/Showcase/Pages/Tokens/Opacity/OpacityTokenPage.swift new file mode 100644 index 000000000..b556e32f5 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/Opacity/OpacityTokenPage.swift @@ -0,0 +1,93 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import OUDS +import OUDSTokensSemantic +import SwiftUI + +// MARK: - Opacity Token Page + +struct OpacityTokenPage: View { + + @Environment(\.theme) private var theme + @Environment(\.colorScheme) private var colorScheme + + // MARK: Body + + var body: some View { + VStack(alignment: .leading, spacing: theme.spaceFixedNone) { + ForEach(NamedOpacity.allCases, id: \.rawValue) { opmacityName in + illustration(for: opmacityName) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, theme.spaceFixedMedium) + } + + // MARK: Helpers + + private func illustration(for opacityName: NamedOpacity) -> some View { + illustration(for: opacityName.token(from: theme), named: opacityName.rawValue) + } + + private func illustration(for opacityToken: OpacitySemanticToken, named name: String) -> some View { + HStack(alignment: .center, spacing: theme.spaceFixedMedium) { + ZStack { + Image("ic_union") + .resizable() + .frame(width: 44, height: 44) + + Rectangle().fill(colorScheme == .dark ? .white : .black) + .opacity(opacityToken) + .frame(width: 44, height: 44) + .transformEffect(CGAffineTransform(translationX: 10, y: 10)) + } + .frame(width: 54, height: 54, alignment: .leading) + + VStack(alignment: .leading, spacing: theme.spaceFixedNone) { + Text(name).bold() + Text("\(opacityToken, specifier: "%.2f")") + } + .frame(maxWidth: .infinity, alignment: .leading) + } + .padding(.vertical, theme.spaceFixedShorter) + } +} + +// MARK: - Named Opacity + +private enum NamedOpacity: String, CaseIterable { + case opacityTransparent + case opacityWeaker + case opacityWeak + case opacityMedium + case opacityStrong + case opacityOpaque + + func token(from theme: OUDSTheme) -> OpacitySemanticToken { + switch self { + case .opacityTransparent: + return theme.opacityTransparent + case .opacityWeaker: + return theme.opacityWeaker + case .opacityWeak: + return theme.opacityWeak + case .opacityMedium: + return theme.opacityMedium + case .opacityStrong: + return theme.opacityStrong + case .opacityOpaque: + return theme.opacityOpaque + } + } +} diff --git a/Showcase/Showcase/Pages/Tokens/TokenElement.swift b/Showcase/Showcase/Pages/Tokens/TokenElement.swift new file mode 100644 index 000000000..5f6190bc7 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/TokenElement.swift @@ -0,0 +1,16 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +typealias TokenElement = ShowcaseElement diff --git a/Showcase/Showcase/Pages/Tokens/TokensPage.swift b/Showcase/Showcase/Pages/Tokens/TokensPage.swift new file mode 100644 index 000000000..72e3a0d75 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/TokensPage.swift @@ -0,0 +1,28 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +struct TokensPage: View { + + let tokenElements: [TokenElement] = [ + BorderTokenElement(), + ElevationTokenElement(), + OpacityTokenElement(), + TypographyTokenElement(), + ] + + var body: some View { + ShowcaseElementsPage(elements: tokenElements) + } +} diff --git a/Showcase/Showcase/Pages/Tokens/Typography/TypographyTokenElement.swift b/Showcase/Showcase/Pages/Tokens/Typography/TypographyTokenElement.swift new file mode 100644 index 000000000..b5611fed2 --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/Typography/TypographyTokenElement.swift @@ -0,0 +1,28 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +struct TypographyTokenElement: TokenElement { + let name: String + let imageName: String + let description: String + let pageDescription: AnyView + + init() { + name = "app_tokens_typography_label" + imageName = "ic_typography" + description = "app_tokens_typography_description_text" + pageDescription = AnyView(TypographyTokenPage()) + } +} diff --git a/Showcase/Showcase/Pages/Tokens/Typography/TypographyTokenPage.swift b/Showcase/Showcase/Pages/Tokens/Typography/TypographyTokenPage.swift new file mode 100644 index 000000000..bfc82fa3d --- /dev/null +++ b/Showcase/Showcase/Pages/Tokens/Typography/TypographyTokenPage.swift @@ -0,0 +1,188 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import OUDS +import OUDSTokensSemantic +import SwiftUI + +// MARK: - Typography Token Page +struct TypographyTokenPage: View { + + @Environment(\.theme) private var theme + + // MARK: Body + + var body: some View { + VStack(alignment: .leading, spacing: theme.spaceFixedNone) { + ForEach(NamedTypography.allCases, id: \.rawValue) { typographyName in + illustration(from: typographyName) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, theme.spaceFixedShort) + .navigationTitle(LocalizedStringKey("app_tokens_typography_label")) + } + + // MARK: Helpers + + @ViewBuilder + private func illustration(from namedTypography: NamedTypography) -> some View { + let token = namedTypography.token(from: theme).compact + + VStack(alignment: .leading, spacing: theme.spaceFixedNone) { + typgraphyName(from: namedTypography) + Group { + Text("family (\(theme.customFontFamily ?? "system")), ") + + Text("weight (\(token.weight)), ") + + Text("size (\(token.size, specifier: "%.2f")), ") + + Text("lineHeight (\(token.lineHeight, specifier: "%.2f")), ") + + Text("letterSpacing \(token.letterSpacing, specifier: "%.2f"))") + } + .typeBodyDefaultSmall(theme) + .fixedSize(horizontal: false, vertical: true) + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.vertical, theme.spaceFixedShorter) + } + + @ViewBuilder + private func typgraphyName(from namedTypography: NamedTypography) -> some View { + switch namedTypography { + case .displayLarge: + Text(namedTypography.rawValue).typeDisplayLarge(theme) + case .displayMedium: + Text(namedTypography.rawValue).typeDisplayMedium(theme) + case .displaySmall: + Text(namedTypography.rawValue).typeDisplaySmall(theme) + case .headingXLarge: + Text(namedTypography.rawValue).typeHeadingXLarge(theme) + case .headingLarge: + Text(namedTypography.rawValue).typeHeadingLarge(theme) + case .headingMedium: + Text(namedTypography.rawValue).typeHeadingMedium(theme) + case .headingSmall: + Text(namedTypography.rawValue).typeHeadingSmall(theme) + case .bodyDefaultLarge: + Text(namedTypography.rawValue).typeBodyDefaultLarge(theme) + case .bodyDefaultMedium: + Text(namedTypography.rawValue).typeBodyDefaultMedium(theme) + case .bodyDefaultSmall: + Text(namedTypography.rawValue).typeBodyDefaultSmall(theme) + case .bodyStrongLarge: + Text(namedTypography.rawValue).typeBodyStrongLarge(theme) + case .bodyStrongMedium: + Text(namedTypography.rawValue).typeBodyStrongMedium(theme) + case .bodyStrongSmall: + Text(namedTypography.rawValue).typeBodyStrongSmall(theme) + case .labelDefaultXLarge: + Text(namedTypography.rawValue).typeLabelDefaultXLarge(theme) + case .labelDefaultLarge: + Text(namedTypography.rawValue).typeLabelDefaultLarge(theme) + case .labelDefaultMedium: + Text(namedTypography.rawValue).typeLabelDefaultMedium(theme) + case .labelDefaultSmall: + Text(namedTypography.rawValue).typeLabelDefaultSmall(theme) + case .labelStrongXLarge: + Text(namedTypography.rawValue).typeLabelStrongXLarge(theme) + case .labelStrongLarge: + Text(namedTypography.rawValue).typeLabelStrongLarge(theme) + case .labelStrongMedium: + Text(namedTypography.rawValue).typeLabelStrongMedium(theme) + case .labelStrongSmall: + Text(namedTypography.rawValue).typeLabelStrongSmall(theme) + case .codeSmall: + Text(namedTypography.rawValue).typeCodeMedium(theme) + case .codeMedium: + Text(namedTypography.rawValue).typeCodeMedium(theme) + } + } +} + +// MARK: - Named Typography + +private enum NamedTypography: String, CaseIterable { + case displayLarge + case displayMedium + case displaySmall + case headingXLarge + case headingLarge + case headingMedium + case headingSmall + case bodyDefaultLarge + case bodyDefaultMedium + case bodyDefaultSmall + case bodyStrongLarge + case bodyStrongMedium + case bodyStrongSmall + case labelDefaultXLarge + case labelDefaultLarge + case labelDefaultMedium + case labelDefaultSmall + case labelStrongXLarge + case labelStrongLarge + case labelStrongMedium + case labelStrongSmall + case codeMedium + case codeSmall + + func token(from theme: OUDSTheme) -> MultipleTypographyTokens { + switch self { + case .displayLarge: + return theme.typeDisplayLarge + case .displayMedium: + return theme.typeDisplayMedium + case .displaySmall: + return theme.typeDisplaySmall + case .headingXLarge: + return theme.typeHeadingXLarge + case .headingLarge: + return theme.typeHeadingLarge + case .headingMedium: + return theme.typeHeadingMedium + case .headingSmall: + return theme.typeHeadingSmall + case .bodyDefaultLarge: + return theme.typeBodyDefaultLarge + case .bodyDefaultMedium: + return theme.typeBodyDefaultMedium + case .bodyDefaultSmall: + return theme.typeBodyDefaultSmall + case .bodyStrongLarge: + return theme.typeBodyStrongLarge + case .bodyStrongMedium: + return theme.typeBodyStrongMedium + case .bodyStrongSmall: + return theme.typeBodyStrongSmall + case .labelDefaultXLarge: + return theme.typeLabelDefaultXLarge + case .labelDefaultLarge: + return theme.typeLabelDefaultLarge + case .labelDefaultMedium: + return theme.typeLabelDefaultMedium + case .labelDefaultSmall: + return theme.typeLabelDefaultSmall + case .labelStrongXLarge: + return theme.typeLabelStrongXLarge + case .labelStrongLarge: + return theme.typeLabelStrongLarge + case .labelStrongMedium: + return theme.typeLabelStrongMedium + case .labelStrongSmall: + return theme.typeLabelStrongSmall + case .codeSmall: + return theme.typeCodeSmall + case .codeMedium: + return theme.typeCodeMedium + } + } +} diff --git a/Showcase/Showcase/Pages/Utils/Cards/Card.swift b/Showcase/Showcase/Pages/Utils/Cards/Card.swift new file mode 100644 index 000000000..5e7cddcea --- /dev/null +++ b/Showcase/Showcase/Pages/Utils/Cards/Card.swift @@ -0,0 +1,53 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +// MARK: - Card + +struct Card: View { + + let title: Text + let icon: Image + + @Environment(\.theme) private var theme + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + CardIllustration(icon: icon) + title + .typeBodyDefaultMedium(theme) + .multilineTextAlignment(.leading) + .padding(.horizontal, 16) + .padding(.vertical, 16) + .frame(maxWidth: .infinity, alignment: .leading) + } + .foregroundColor(.primary) + .background(Color.cardBackground) + .cornerRadius(10) + .shadow(radius: 4) + .padding(.all, 4) + } +} + +// MARK: - Previews + +#Preview { + ScrollView { + VStack { + Card(title: Text("Border"), icon: Image("ic_border", bundle: .main)) + Card(title: Text("Typography"), icon: Image("ic_typography", bundle: .main)) + } + .padding(.horizontal, 16) + } +} diff --git a/Showcase/Showcase/Pages/Utils/Cards/CardIllustration.swift b/Showcase/Showcase/Pages/Utils/Cards/CardIllustration.swift new file mode 100644 index 000000000..6be7ff3eb --- /dev/null +++ b/Showcase/Showcase/Pages/Utils/Cards/CardIllustration.swift @@ -0,0 +1,42 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +struct CardIllustration: View { + + let icon: Image + + var body: some View { + HStack { + Spacer() + icon + .resizable() + .renderingMode(.template) + .foregroundColor(.white) + .aspectRatio(contentMode: .fit) + .frame(width: 88, height: 88, alignment: .center) + .clipped() + Spacer() + } + .padding(.vertical, 53) + .background(.black) + .accessibilityElement(children: .combine) + .accessibilityRemoveTraits(.isImage) + .accessibilityHidden(true) + } +} + +#Preview { + CardIllustration(icon: Image("ic_border", bundle: .main)) +} diff --git a/Showcase/Showcase/Pages/Utils/ShowcaseElement.swift b/Showcase/Showcase/Pages/Utils/ShowcaseElement.swift new file mode 100644 index 000000000..805126688 --- /dev/null +++ b/Showcase/Showcase/Pages/Utils/ShowcaseElement.swift @@ -0,0 +1,25 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI + +protocol ShowcaseElement { + var name: String { get } + var imageName: String { get } + var description: String { get } + var pageDescription: AnyView { get } +} + +extension ShowcaseElement { + var id: String { name } +} diff --git a/Showcase/Showcase/Pages/Utils/ShowcaseElementPage.swift b/Showcase/Showcase/Pages/Utils/ShowcaseElementPage.swift new file mode 100644 index 000000000..c99aaf4e3 --- /dev/null +++ b/Showcase/Showcase/Pages/Utils/ShowcaseElementPage.swift @@ -0,0 +1,62 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import SwiftUI +import OUDS +import OUDSTokensSemantic + +struct ShowcaseElementPage: View { + + @AccessibilityFocusState private var requestFocus: Bool + @Environment(\.theme) private var theme + @Environment(\.colorScheme) private var colorScheme + + // MARK: Stored Properties + + let element: ShowcaseElement + + // MARK: Body + + var body: some View { + List { + VStack(alignment: .leading, spacing: theme.spaceFixedMedium) { + CardIllustration(icon: Image(element.imageName)) + .accessibilityHidden(true) + + Text(LocalizedStringKey(element.description)) + .typeBodyDefaultMedium(theme) + .accessibilityFocused($requestFocus) + .padding(.horizontal, theme.spaceFixedMedium) + + } + .listRowInsets(EdgeInsets()) + .listRowSeparator(Visibility.hidden) + .padding(.horizontal, theme.spaceFixedNone) + .padding(.bottom, theme.spaceFixedMedium) + .background(theme.colorBackgroundDefaultPrimary?.color(for: colorScheme)) + + element.pageDescription + .listRowInsets(EdgeInsets()) + .listRowSeparator(Visibility.hidden) + .padding(.bottom, theme.spaceFixedMedium) + .background(theme.colorBackgroundDefaultPrimary?.color(for: colorScheme)) + } + .listStyle(.plain) + .padding(.top, theme.spaceFixedNone) + .padding(.horizontal, theme.spaceFixedNone) + .background(theme.colorBackgroundDefaultPrimary?.color(for: colorScheme)) + .navigationTitle(LocalizedStringKey(element.name)) + .navigationbarMenuForThemeSelection() + .oudsRequestAccessibleFocus(_requestFocus) + } +} diff --git a/Showcase/Showcase/Pages/Utils/ShowcaseElementsPage.swift b/Showcase/Showcase/Pages/Utils/ShowcaseElementsPage.swift new file mode 100644 index 000000000..ab87637fa --- /dev/null +++ b/Showcase/Showcase/Pages/Utils/ShowcaseElementsPage.swift @@ -0,0 +1,54 @@ +// +// Software Name: OUDS iOS +// SPDX-FileCopyrightText: Copyright (c) Orange SA +// SPDX-License-Identifier: MIT +// +// This software is distributed under the MIT license, +// the text of which is available at https://opensource.org/license/MIT/ +// or see the "LICENSE" file for more details. +// +// Authors: See CONTRIBUTORS.txt +// Software description: A SwiftUI components library with code examples for Orange Unified Design System +// + +import OUDS +import OUDSComponents +import SwiftUI + +struct ShowcaseElementsPage: View { + + @AccessibilityFocusState private var requestFocus: AccessibilityFocusable? + @Environment(\.theme) private var theme + @Environment(\.colorScheme) private var colorScheme + + // MARK: Stored properties + + let elements: [ShowcaseElement] + + // MARK: Body + + var body: some View { + NavigationView { + ScrollView { + LazyVGrid(columns: [GridItem(.flexible(), alignment: .topLeading)], spacing: theme.spaceFixedShortest) { + ForEach(elements, id: \.id) { element in + NavigationLink { + ShowcaseElementPage(element: element) + } label: { + Card( + title: Text(LocalizedStringKey(element.name)), + icon: Image(element.imageName)) + .accessibilityFocused($requestFocus, equals: .some(id: element.id)) + .oudsRequestAccessibleFocus(_requestFocus, for: .some(id: elements[0].id)) + } + } + } + .padding(.all, theme.spaceFixedMedium) + .navigationbarMenuForThemeSelection() + .oudsNavigationTitle("app_bottomBar_tokens") + } + .background(theme.colorBackgroundDefaultPrimary?.color(for: colorScheme)) + } + .navigationViewStyle(.stack) + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/Contents.json new file mode 100644 index 000000000..6a35cee84 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "il_empty_screen.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/il_empty_screen.svg b/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/il_empty_screen.svg new file mode 100644 index 000000000..212c7d033 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Illustrations/il_empty_screen.imageset/il_empty_screen.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/Contents.json new file mode 100644 index 000000000..ac9cc8a2e --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ic_border.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/ic_border.svg b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/ic_border.svg new file mode 100644 index 000000000..4bcbe859d --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_border.imageset/ic_border.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/Contents.json new file mode 100644 index 000000000..3cfa38033 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ic_filter_effects.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/ic_filter_effects.svg b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/ic_filter_effects.svg new file mode 100644 index 000000000..f72b7fd23 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_filter_effects.imageset/ic_filter_effects.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/Contents.json new file mode 100644 index 000000000..2f394be7c --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ic_layers.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/ic_layers.svg b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/ic_layers.svg new file mode 100644 index 000000000..a4f32eb15 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_layers.imageset/ic_layers.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/Contents.json new file mode 100644 index 000000000..b580a0754 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ic_typography.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/ic_typography.svg b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/ic_typography.svg new file mode 100644 index 000000000..1bf42c7f0 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_typography.imageset/ic_typography.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/Contents.json new file mode 100644 index 000000000..ff0c4fa40 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ic_union.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/ic_union.svg b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/ic_union.svg new file mode 100644 index 000000000..8ae136591 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/Tokens/ic_union.imageset/ic_union.svg @@ -0,0 +1,3 @@ + + + diff --git a/Showcase/Showcase/Resources/Assets.xcassets/ic_guideline_dna.imageset/ic_guideline_dna.svg b/Showcase/Showcase/Resources/Assets.xcassets/ic_guideline_dna.imageset/ic_guideline_dna.svg deleted file mode 100644 index 3af4f83e5..000000000 --- a/Showcase/Showcase/Resources/Assets.xcassets/ic_guideline_dna.imageset/ic_guideline_dna.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/Showcase/Showcase/Resources/Assets.xcassets/ic_guideline_dna.imageset/Contents.json b/Showcase/Showcase/Resources/Assets.xcassets/ic_token.imageset/Contents.json similarity index 81% rename from Showcase/Showcase/Resources/Assets.xcassets/ic_guideline_dna.imageset/Contents.json rename to Showcase/Showcase/Resources/Assets.xcassets/ic_token.imageset/Contents.json index 239af817d..c1c919126 100644 --- a/Showcase/Showcase/Resources/Assets.xcassets/ic_guideline_dna.imageset/Contents.json +++ b/Showcase/Showcase/Resources/Assets.xcassets/ic_token.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "ic_guideline_dna.svg", + "filename" : "ic_token.svg", "idiom" : "universal" } ], diff --git a/Showcase/Showcase/Resources/Assets.xcassets/ic_token.imageset/ic_token.svg b/Showcase/Showcase/Resources/Assets.xcassets/ic_token.imageset/ic_token.svg new file mode 100644 index 000000000..530f528b1 --- /dev/null +++ b/Showcase/Showcase/Resources/Assets.xcassets/ic_token.imageset/ic_token.svg @@ -0,0 +1,3 @@ + + + diff --git a/Showcase/Showcase/Resources/Colors.xcassets/Contents.json b/Showcase/Showcase/Resources/Colors.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/Showcase/Showcase/Resources/Colors.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/Colors.xcassets/cardBackground.colorset/Contents.json b/Showcase/Showcase/Resources/Colors.xcassets/cardBackground.colorset/Contents.json new file mode 100644 index 000000000..c84ed18f5 --- /dev/null +++ b/Showcase/Showcase/Resources/Colors.xcassets/cardBackground.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x1A", + "green" : "0x1C", + "red" : "0x1C" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Showcase/Showcase/Resources/en.lproj/Localizable.strings b/Showcase/Showcase/Resources/en.lproj/Localizable.strings index eb5734d16..e9ca13aef 100644 --- a/Showcase/Showcase/Resources/en.lproj/Localizable.strings +++ b/Showcase/Showcase/Resources/en.lproj/Localizable.strings @@ -14,10 +14,29 @@ // MARK: - bottomBar "app_bottomBar_components" = "Components"; -"app_bottomBar_guidelines" = "Guidelines"; +"app_bottomBar_tokens" = "Tokens"; "app_bottomBar_about" = "About"; // MARK: - About Screen "app_about_label_legalInformation" = "Legal information"; "app_about_label_privacyPolicy" = "Privacy policy"; + +// MARK: - Tokens Screen + +"app_tokens_border_label" = "Border"; +"app_tokens_border_description_text" = "Borders are used for the stroke colours on components and also for the colours of divider lines for components like tables"; + +"app_tokens_elevation_label" = "Elevation"; +"app_tokens_elevation_description_text" = "Shadows are used to give the impression of distance or elevation between surfaces, which adds depth to our designs"; + +"app_tokens_typography_label" = "Typogaphy"; +"app_tokens_typography_description_text" = "Typography is our system of fonts and text styles. They enhance communication and reinforce the brand style"; + +"app_tokens_opacity_label" = "Opacity"; +"app_tokens_opacity_description_text" = "Opacity can help distinguish foreground elements from background elements, making content easier to read and important actions more noticeable"; + + +// MARK: - Component Screen +"app_component_empty_content_text" = "No content"; +"app_component_empty_content_description_text" = "This content is under construction and will be available very soon"; diff --git a/Showcase/Showcase/Showcase.swift b/Showcase/Showcase/Showcase.swift index 80ac6f145..e3cd5ba8a 100644 --- a/Showcase/Showcase/Showcase.swift +++ b/Showcase/Showcase/Showcase.swift @@ -11,13 +11,18 @@ // Software description: A SwiftUI components library with code examples for Orange Unified Design System // +import OUDS import SwiftUI @main struct Showcase: App { + @StateObject var themeProvider = ThemeProvider() + var body: some Scene { WindowGroup { - MainView() + OUDSThemeableView(theme: themeProvider.currentTheme) { + MainView().environmentObject(themeProvider) + } } } } diff --git a/Showcase/ShowcaseTests/ElevationsEffectsUITests.swift b/Showcase/ShowcaseTests/ElevationsEffectsUITests.swift deleted file mode 100644 index 98b4c73fb..000000000 --- a/Showcase/ShowcaseTests/ElevationsEffectsUITests.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// Software Name: OUDS iOS -// SPDX-FileCopyrightText: Copyright (c) Orange SA -// SPDX-License-Identifier: MIT -// -// This software is distributed under the MIT license, -// the text of which is available at https://opensource.org/license/MIT/ -// or see the "LICENSE" file for more details. -// -// Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System -// - -import OUDS_Showcase -import OUDSComponents -import OUDSThemesOrange -import OUDSThemesSosh -import OUDSThemesInverse -import SwiftUI -import XCTest - -/// Class to make UI tests on elevations effects using the -/// [swift-snapshot-testing](https://github.com/pointfreeco/swift-snapshot-testing) library. -final class ElevationsEffectsUITests: XCTestCase { - - // MARK: - Tests - - func testElevationsEffects_OrangeTheme() { - Snapshot.assert(ElevationsList().environment(\.theme, OrangeTheme()), testName: "\(#function)OrangeTheme") - } - - func testElevationsEffects_SoshTheme() { - Snapshot.assert(ElevationsList().environment(\.theme, SoshTheme()), testName: "\(#function)SoshTheme") - } - - func testElevationsEffects_InverseTheme() { - Snapshot.assert(ElevationsList().environment(\.theme, InverseTheme()), testName: "\(#function)InverseTheme") - } -} diff --git a/Showcase/ShowcaseTests/OUDSFormsTextInputUITests.swift b/Showcase/ShowcaseTests/OUDSFormsTextInputUITests.swift deleted file mode 100644 index 4dade640f..000000000 --- a/Showcase/ShowcaseTests/OUDSFormsTextInputUITests.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// Software Name: OUDS iOS -// SPDX-FileCopyrightText: Copyright (c) Orange SA -// SPDX-License-Identifier: MIT -// -// This software is distributed under the MIT license, -// the text of which is available at https://opensource.org/license/MIT/ -// or see the "LICENSE" file for more details. -// -// Authors: See CONTRIBUTORS.txt -// Software description: A SwiftUI components library with code examples for Orange Unified Design System -// - -import OUDS_Showcase -import OUDSComponents -import OUDSThemesOrange -import OUDSThemesSosh -import OUDSThemesInverse -import SwiftUI -import XCTest - -/// Class to make UI tests on the fake component `OUDSFormsTextInput` using the -/// [swift-snapshot-testing](https://github.com/pointfreeco/swift-snapshot-testing) library. -final class OUDSFormsTextInputUITests: XCTestCase { - - // MARK: - Wrapper - - private struct TestFormsTextInput: View { - @State private var value: String = "" - - var body: some View { - OUDSFormsTextInput(label: "Some label", hint: "Some hint", placeholder: "Add text here", value: $value) - } - } - - // MARK: - Tests - - func testOUDSFormsTextInput_OrangeTheme() { - Snapshot.assert(TestFormsTextInput().environment(\.theme, OrangeTheme()), testName: "\(#function)OrangeTheme") - } - - func testOUDSFormsTextInput_SoshTheme() { - Snapshot.assert(TestFormsTextInput().environment(\.theme, SoshTheme()), testName: "\(#function)SoshTheme") - } - - func testOUDSFormsTextInput_InverseTheme() { - Snapshot.assert(TestFormsTextInput().environment(\.theme, InverseTheme()), testName: "\(#function)InverseTheme") - } -} From 66c65801dd6ff85b6b3de121521c82c6847abd6a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Fri, 4 Oct 2024 14:10:29 +0200 Subject: [PATCH 21/25] ci: update Fastlane Signed-off-by: Pierre-Yves Lapersonne --- Gemfile | 2 +- Gemfile.lock | 60 ++++++++++++++++++++++++++-------------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Gemfile b/Gemfile index e0b2f6a4d..19f1c0dd0 100644 --- a/Gemfile +++ b/Gemfile @@ -14,7 +14,7 @@ source "https://rubygems.org" gem 'cocoapods', '1.15.2' -gem 'fastlane', '2.222.0' +gem 'fastlane', '2.223.1' gem 'fastlane-plugin-changelog', '0.16.0' gem 'fastlane-plugin-mattermost', '1.3.2' gem 'json', '2.7.2' diff --git a/Gemfile.lock b/Gemfile.lock index fc6cbfc20..01926b47f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,16 +5,17 @@ GEM base64 nkf rexml - activesupport (7.1.3.4) + activesupport (7.2.1) base64 bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) + concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) algoliasearch (1.27.5) @@ -23,20 +24,20 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.962.0) - aws-sdk-core (3.201.3) + aws-partitions (1.984.0) + aws-sdk-core (3.209.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.8) + aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.88.0) - aws-sdk-core (~> 3, >= 3.201.0) + aws-sdk-kms (1.94.0) + aws-sdk-core (~> 3, >= 3.207.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.157.0) - aws-sdk-core (~> 3, >= 3.201.0) + aws-sdk-s3 (1.167.0) + aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.9.1) + aws-sigv4 (1.10.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) base64 (0.2.0) @@ -83,7 +84,7 @@ GEM colored2 (3.1.2) commander (4.6.0) highline (~> 2.0.0) - concurrent-ruby (1.3.3) + concurrent-ruby (1.3.4) connection_pool (2.4.1) declarative (0.0.20) digest-crc (0.6.5) @@ -95,8 +96,8 @@ GEM escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) - excon (0.111.0) - faraday (1.10.3) + excon (0.112.0) + faraday (1.10.4) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -122,10 +123,10 @@ GEM faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) - faraday_middleware (1.2.0) + faraday_middleware (1.2.1) faraday (~> 1.0) fastimage (2.3.1) - fastlane (2.222.0) + fastlane (2.223.1) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -219,22 +220,22 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.6) + http-cookie (1.0.7) domain_name (~> 0.5) httpclient (2.8.3) - i18n (1.14.5) + i18n (1.14.6) concurrent-ruby (~> 1.0) jmespath (1.6.2) json (2.7.2) - jwt (2.8.2) + jwt (2.9.3) base64 + logger (1.6.1) mini_magick (4.13.2) mini_mime (1.1.5) - minitest (5.24.1) + minitest (5.25.1) molinillo (0.8.0) multi_json (1.15.0) multipart-post (2.4.1) - mutex_m (0.2.0) nanaimo (0.3.0) nap (1.1.0) naturally (2.2.1) @@ -252,12 +253,12 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.3.4) - strscan + rexml (3.3.8) rouge (2.0.7) ruby-macho (2.5.1) ruby2_keywords (0.0.5) rubyzip (2.3.2) + securerandom (0.3.1) security (0.1.5) signet (0.19.0) addressable (~> 2.8) @@ -267,7 +268,6 @@ GEM simctl (1.6.10) CFPropertyList naturally - strscan (3.1.0) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -281,19 +281,19 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) - unicode-display_width (2.5.0) - uri (0.13.0) + unicode-display_width (2.6.0) + uri (0.13.1) word_wrap (1.0.0) xcode-install (2.8.1) claide (>= 0.9.1) fastlane (>= 2.1.0, < 3.0.0) - xcodeproj (1.25.0) + xcodeproj (1.25.1) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) - rexml (>= 3.3.2, < 4.0) + rexml (>= 3.3.6, < 4.0) xcpretty (0.3.0) rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) @@ -314,7 +314,7 @@ PLATFORMS DEPENDENCIES cocoapods (= 1.15.2) - fastlane (= 2.222.0) + fastlane (= 2.223.1) fastlane-plugin-changelog (= 0.16.0) fastlane-plugin-mattermost (= 1.3.2) json (= 2.7.2) From 625452263dd1face0f8588e24365dba51c8ffa60 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Fri, 4 Oct 2024 15:20:05 +0200 Subject: [PATCH 22/25] ci: improve GitHub notification from Fastlane commands Signed-off-by: Pierre-Yves Lapersonne --- Showcase/fastlane/Fastfile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Showcase/fastlane/Fastfile b/Showcase/fastlane/Fastfile index 1ea89c313..57f318b56 100644 --- a/Showcase/fastlane/Fastfile +++ b/Showcase/fastlane/Fastfile @@ -530,7 +530,7 @@ platform :ios do else comment_to_upload=<<-EOF -๐Ÿ“ฃ **New TestFlight ALPHA uploap available** ๐Ÿš€ +๐Ÿ“ฃ **New TestFlight ALPHA upload available** ๐Ÿš€ Please, get the new build from *TestFlight* app. @@ -541,6 +541,14 @@ Please, get the new build from *TestFlight* app. - Build type: **#{build_type}** - Build details (GitHub): **#{build_details}** + +cc @B3nz01d @pylapp @ludovic35 @Tayebsed93 @mccart77 _This is an automated message sent with love and *Fastlane* from our CI/CD pipeline ๐Ÿค˜_ EOF From fd3cb86968b4f85fc756dc1cf1338bac7b2368d1 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Fri, 4 Oct 2024 15:47:30 +0200 Subject: [PATCH 23/25] docs: add details about Ruby and `rbenv` uses Signed-off-by: Pierre-Yves Lapersonne --- .github/DEVELOP.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/DEVELOP.md b/.github/DEVELOP.md index 00914793d..8740f6303 100644 --- a/.github/DEVELOP.md +++ b/.github/DEVELOP.md @@ -21,7 +21,8 @@ ## Technical preconditions You should check wether or not you have the tools in use in the project like _Fastlane_, _SwiftLint_, _SwiftFormat_, etc. -You can have a look for example in thr **THIRD\_PARTY.md** file which lists any dependencies and tools we use are different levels (SDK, showcase app, projects). +You can have a look for example in the **THIRD\_PARTY.md** file which lists any dependencies and tools we use are different levels (SDK, showcase app, projects). +Have a look on the lociks file to know which versions we are using (*Podfile*, *Podfile.lock*, *Packages.swift*, *Package.resolved*, *Gemfile*, *Gemfile.lock*). If some tools are missing, pick the suitable command line below: ```bash @@ -38,7 +39,23 @@ brew install peripheryapp/periphery/periphery brew install gitleaks ``` +Ensure you have the suitable _Ruby_ version. We recommend the use of [rbenv](https://github.com/rbenv/rbenv) to load the suitable version of ruby. +We use here _Ruby 3_ (3.1.x). +If you are not used to this tool: + +```shell +# List available local version of Ruby +rbenv install --list + +# Apply the 3.1.2 version of Ruby (if listed previously) +rbenv global 3.1.2 + +# Check Ruby version +ruby --version +``` + We use also for our GitLab CI runners **Xcode 15.3**, we suggest you use this version or newer if you want but beware. +**Xcode 16** use will come. ## Build showcase demo app From 4a7aadc0b61f34e0910a3545f8ec6745b74eeaca Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Fri, 4 Oct 2024 16:12:12 +0200 Subject: [PATCH 24/25] ci: improve GitHub notification from Fastlane commands Signed-off-by: Pierre-Yves Lapersonne --- Showcase/fastlane/Fastfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Showcase/fastlane/Fastfile b/Showcase/fastlane/Fastfile index 57f318b56..136788084 100644 --- a/Showcase/fastlane/Fastfile +++ b/Showcase/fastlane/Fastfile @@ -532,7 +532,7 @@ platform :ios do comment_to_upload=<<-EOF ๐Ÿ“ฃ **New TestFlight ALPHA upload available** ๐Ÿš€ -Please, get the new build from *TestFlight* app. +Please, get the new build from *TestFlight* app, or contact the project maintainers if you don't have access. - Display name: **#{build_display_name}** - Version: **#{build_version}** @@ -549,6 +549,7 @@ Please, get the new build from *TestFlight* app. @mccart77 - Stephen McCARTHY - designer --> cc @B3nz01d @pylapp @ludovic35 @Tayebsed93 @mccart77 + _This is an automated message sent with love and *Fastlane* from our CI/CD pipeline ๐Ÿค˜_ EOF From 694c083a144d9c4d79a1f76bcd990c1a6f571334 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Fri, 4 Oct 2024 16:20:52 +0200 Subject: [PATCH 25/25] Prepare release 0.3.0 (#163) Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c4d72bd5..47b7be308 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased](https://github.com/Orange-OpenSource/ouds-ios/compare/0.2.0...develop) +## [0.3.0](https://github.com/Orange-OpenSource/ouds-ios/compare/0.2.0...0.3.0) - 2024-10-04 ### Added