From a9f2231bbf3327569086e3bbc1de22d9b1b3baa1 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Lapersonne Date: Tue, 4 Feb 2025 17:33:08 +0100 Subject: [PATCH] =?UTF-8?q?chore(=F0=9F=A4=96):=20update=20`CheckRadioComp?= =?UTF-8?q?onentTokens`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tokens library version v0.5.0 Signed-off-by: Pierre-Yves Lapersonne --- CHANGELOG.md | 4 + .../Themes/Orange/Sources/OrangeTheme.swift | 10 +- ...emeCheckRadioComponentTokensProvider.swift | 25 ++- ...rangeTheme+CheckRadioComponentTokens.swift | 35 +++- .../Orange/Tests/TestTokensProviders.swift | 5 +- ...ckTheme+AllCheckRadioComponentTokens.swift | 61 +++++- ...meOverrideOCheckRadioComponentTokens.swift | 173 ++++++++++++++++-- .../SemanticTokens/MockTheme/MockTheme.swift | 3 +- .../Values/CheckRadioComponentTokens.swift | 47 ++++- .../OUDSTokensComponent.md | 2 +- .../_OUDSTokensRaw.docc/OUDSTokensRaw.md | 2 +- .../OUDSTokensSemantic.md | 2 +- 12 files changed, 331 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4051ae12..c77083747 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 - [DesignToolbox] Add text field in component configuration to customize text ([#436](https://github.com/Orange-OpenSource/ouds-ios/issues/436)) - [Library] Link component ([#400](https://github.com/Orange-OpenSource/ouds-ios/issues/400)) +### Changed + +- [Library] Checkbox and radio button component tokens (tokens library v0.5.0) + ## [0.10.0](https://github.com/Orange-OpenSource/ouds-ios/compare/0.9.0...0.10.0) - 2025-01-30 ### Added diff --git a/OUDS/Core/Themes/Orange/Sources/OrangeTheme.swift b/OUDS/Core/Themes/Orange/Sources/OrangeTheme.swift index 785159567..78f0c8cda 100644 --- a/OUDS/Core/Themes/Orange/Sources/OrangeTheme.swift +++ b/OUDS/Core/Themes/Orange/Sources/OrangeTheme.swift @@ -96,6 +96,7 @@ open class OrangeTheme: OUDSTheme, @unchecked Sendable { let borders = OrangeThemeBorderSemanticTokensProvider() let sizes = OrangeThemeSizeSemanticTokensProvider() let spaces = OrangeThemeSpaceSemanticTokensProvider() + let opacities = OrangeThemeOpacitySemanticTokensProvider() let tokensProviders: TokensProviders = [ @@ -106,7 +107,7 @@ open class OrangeTheme: OUDSTheme, @unchecked Sendable { OrangeThemeElevationSemanticTokensProvider(), OrangeThemeFontSemanticTokensProvider(), OrangeThemeGridSemanticTokensProvider(), - OrangeThemeOpacitySemanticTokensProvider(), + opacities, sizes, spaces, @@ -124,7 +125,7 @@ open class OrangeTheme: OUDSTheme, @unchecked Sendable { OrangeThemeBulletListComponentTokensProvider(sizes: sizes, colors: colors, spaces: spaces), OrangeThemeInputTextComponentTokensProvider(sizes: sizes, colors: colors, spaces: spaces), OrangeThemeBadgeComponentTokensProvider(sizes: sizes), - OrangeThemeCheckRadioComponentTokensProvider(sizes: sizes), + OrangeThemeCheckRadioComponentTokensProvider(sizes: sizes, borders: borders, colors: colors, opacities: opacities), // NOTE: Add here new component tokens providers ] @@ -141,6 +142,7 @@ open class OrangeTheme: OUDSTheme, @unchecked Sendable { let colors = OrangeThemeColorSemanticTokensProvider() let sizes = OrangeThemeSizeSemanticTokensProvider() let spaces = OrangeThemeSpaceSemanticTokensProvider() + let opacities = OrangeThemeOpacitySemanticTokensProvider() let tokensProviders: TokensProviders = [ @@ -151,7 +153,7 @@ open class OrangeTheme: OUDSTheme, @unchecked Sendable { OrangeThemeElevationSemanticTokensProvider(), OrangeThemeFontSemanticTokensProvider(), OrangeThemeGridSemanticTokensProvider(), - OrangeThemeOpacitySemanticTokensProvider(), + opacities, sizes, spaces, @@ -169,7 +171,7 @@ open class OrangeTheme: OUDSTheme, @unchecked Sendable { OrangeThemeBulletListComponentTokensProvider(sizes: sizes, colors: colors, spaces: spaces), OrangeThemeInputTextComponentTokensProvider(sizes: sizes, colors: colors, spaces: spaces), OrangeThemeBadgeComponentTokensProvider(sizes: sizes), - OrangeThemeCheckRadioComponentTokensProvider(sizes: sizes), + OrangeThemeCheckRadioComponentTokensProvider(sizes: sizes, borders: borders, colors: colors, opacities: opacities), // NOTE: Add here new component tokens providers ] diff --git a/OUDS/Core/Themes/Orange/Sources/Providers/ComponentTokens/OrangeThemeCheckRadioComponentTokensProvider.swift b/OUDS/Core/Themes/Orange/Sources/Providers/ComponentTokens/OrangeThemeCheckRadioComponentTokensProvider.swift index b0da58e1e..9a006da10 100644 --- a/OUDS/Core/Themes/Orange/Sources/Providers/ComponentTokens/OrangeThemeCheckRadioComponentTokensProvider.swift +++ b/OUDS/Core/Themes/Orange/Sources/Providers/ComponentTokens/OrangeThemeCheckRadioComponentTokensProvider.swift @@ -73,11 +73,30 @@ open class OrangeThemeCheckRadioComponentTokensProvider: AllCheckRadioComponentT /// Provider of size semantic tokens to use for check / radio sizes public let sizes: AllSizeSemanticTokensProvider - /// Defines a provider of component tokens dedicated to `OUDSChip` - /// - Parameter sizes: Provider for size semantic tokens - public init(sizes: AllSizeSemanticTokensProvider) { + /// Provider of border semantic tokens to use for check / radio borders + public let borders: AllBorderSemanticTokensProvider + + /// Provider of color semantic tokens to use for check / radio colors + public let colors: AllColorSemanticTokensProvider + + /// Provider of opacity semantic tokens to use for check / radio opacities + public let opacities: AllOpacitySemanticTokensProvider + + /// Defines a provider of component tokens dedicated to `OUDSCheckbox` and `OUDSRadioButton` + /// - Parameters: + /// - sizes: Provider for size semantic tokens + /// - borders: Provider for border semantic tokens + /// - colors: Provider for color semantic tokens + /// - opacities: Provider for opacitiy semantic tokens + public init(sizes: AllSizeSemanticTokensProvider, + borders: AllBorderSemanticTokensProvider, + colors: AllColorSemanticTokensProvider, + opacities: AllOpacitySemanticTokensProvider) { OL.debug("Init of OrangeThemeCheckRadioComponentTokensProvider") self.sizes = sizes + self.borders = borders + self.colors = colors + self.opacities = opacities } deinit { } diff --git a/OUDS/Core/Themes/Orange/Sources/Values/ComponentTokens/OrangeTheme+CheckRadioComponentTokens.swift b/OUDS/Core/Themes/Orange/Sources/Values/ComponentTokens/OrangeTheme+CheckRadioComponentTokens.swift index ceaa3226f..f444052ac 100644 --- a/OUDS/Core/Themes/Orange/Sources/Values/ComponentTokens/OrangeTheme+CheckRadioComponentTokens.swift +++ b/OUDS/Core/Themes/Orange/Sources/Values/ComponentTokens/OrangeTheme+CheckRadioComponentTokens.swift @@ -16,10 +16,43 @@ import OUDSTokensComponent import OUDSTokensRaw import OUDSTokensSemantic +// swiftlint:disable identifier_name + extension OrangeThemeCheckRadioComponentTokensProvider: CheckRadioComponentTokens { @objc open var checkRadioSizeMaxHeightAssetsContainer: SizeSemanticToken { DimensionRawTokens.dimension1200 } @objc open var checkRadioSizeMaxHeightSelectorOnly: SizeSemanticToken { DimensionRawTokens.dimension600 } @objc open var checkRadioSizeMinHeightSelectorOnly: SizeSemanticToken { DimensionRawTokens.dimension600 } @objc open var checkRadioSizeMinWidthSelectorOnly: SizeSemanticToken { DimensionRawTokens.dimension600 } - @objc open var checkRadioSizeSelector: SizeSemanticToken { sizes.sizeIconWithLabelLargeSizeSm } + @objc open var checkRadioBorderRadiusCheckbox: BorderRadiusSemanticToken { borders.borderRadiusDefault } + @objc open var checkRadioBorderWidthSelected: BorderWidthSemanticToken { borders.borderWidthMedium } + @objc open var checkRadioBorderWidthSelectedFocus: BorderWidthSemanticToken { borders.borderWidthMedium } + @objc open var checkRadioBorderWidthSelectedHover: BorderWidthSemanticToken { borders.borderWidthMedium } + @objc open var checkRadioBorderWidthSelectedPressed: BorderWidthSemanticToken { borders.borderWidthMedium } + @objc open var checkRadioBorderWidthUnselected: BorderWidthSemanticToken { borders.borderWidthThin } + @objc open var checkRadioBorderWidthUnselectedFocus: BorderWidthSemanticToken { borders.borderWidthMedium } + @objc open var checkRadioBorderWidthUnselectedHover: BorderWidthSemanticToken { borders.borderWidthMedium } + @objc open var checkRadioBorderWidthUnselectedPressed: BorderWidthSemanticToken { borders.borderWidthMedium } + @objc open var checkRadioOpacitySelectorBgSelected: OpacitySemanticToken { opacities.opacityInvisible } + @objc open var checkRadioOpacitySelectorBgSelectedFocus: OpacitySemanticToken { opacities.opacityInvisible } + @objc open var checkRadioOpacitySelectorBgSelectedHover: OpacitySemanticToken { opacities.opacityInvisible } + @objc open var checkRadioOpacitySelectorBgSelectedPressed: OpacitySemanticToken { opacities.opacityInvisible } + @objc open var checkRadioOpacitySelectorBgUnselected: OpacitySemanticToken { opacities.opacityInvisible } + @objc open var checkRadioOpacitySelectorBgUnselectedFocus: OpacitySemanticToken { opacities.opacityInvisible } + @objc open var checkRadioOpacitySelectorBgUnselectedHover: OpacitySemanticToken { opacities.opacityInvisible } + @objc open var checkRadioOpacitySelectorBgUnselectedPressed: OpacitySemanticToken { opacities.opacityInvisible } + @objc open var checkRadioSizeCheckInnerAsset: SizeSemanticToken { sizes.sizeIconDecorative2xs } + @objc open var checkRadioSizeRadioInnerCircle: SizeSemanticToken { sizes.sizeIconDecorative2xs } + @objc open var checkRadioColorContentAssetDisabled: MultipleColorSemanticTokens { colors.colorActionDisabled } + @objc open var checkRadioColorContentAssetEnabled: MultipleColorSemanticTokens { colors.colorActionEnabled } + @objc open var checkRadioColorContentAssetErrorEnabled: MultipleColorSemanticTokens { colors.colorActionNegativeEnabled } + @objc open var checkRadioColorContentAssetErrorFocus: MultipleColorSemanticTokens { colors.colorActionNegativeFocus } + @objc open var checkRadioColorContentAssetErrorHover: MultipleColorSemanticTokens { colors.colorActionNegativeHover } + @objc open var checkRadioColorContentAssetErrorPressed: MultipleColorSemanticTokens { colors.colorActionNegativePressed } + @objc open var checkRadioColorContentAssetFocus: MultipleColorSemanticTokens { colors.colorActionFocus } + @objc open var checkRadioColorContentAssetHover: MultipleColorSemanticTokens { colors.colorActionHover } + @objc open var checkRadioColorContentAssetPressed: MultipleColorSemanticTokens { colors.colorActionPressed } + @objc open var checkRadioColorContentAssetSelected: MultipleColorSemanticTokens { colors.colorActionSelected } + @objc open var checkRadioSizeSelector: SizeSemanticToken { sizes.sizeIconWithLabelLargeSizeXs } } + +// swiftlint:enable identifier_name diff --git a/OUDS/Core/Themes/Orange/Tests/TestTokensProviders.swift b/OUDS/Core/Themes/Orange/Tests/TestTokensProviders.swift index 3d9bcf0ae..19339fa9c 100644 --- a/OUDS/Core/Themes/Orange/Tests/TestTokensProviders.swift +++ b/OUDS/Core/Themes/Orange/Tests/TestTokensProviders.swift @@ -80,6 +80,7 @@ final class TestTokensProviders: XCTestCase { let sizes = OrangeThemeSizeSemanticTokensProvider() let spaces = OrangeThemeSpaceSemanticTokensProvider() let colors = OrangeThemeColorSemanticTokensProvider() + let opacities = OrangeThemeOpacitySemanticTokensProvider() let allTokensProviders: TokensProviders = [ colors, @@ -87,7 +88,7 @@ final class TestTokensProviders: XCTestCase { OrangeThemeElevationSemanticTokensProvider(), OrangeThemeFontSemanticTokensProvider(), OrangeThemeGridSemanticTokensProvider(), - OrangeThemeOpacitySemanticTokensProvider(), + opacities, sizes, spaces, OrangeThemeButtonComponentTokensProvider(sizes: sizes, borders: borders, colors: colors, spaces: spaces), @@ -102,7 +103,7 @@ final class TestTokensProviders: XCTestCase { OrangeThemeBulletListComponentTokensProvider(sizes: sizes, colors: colors, spaces: spaces), OrangeThemeInputTextComponentTokensProvider(sizes: sizes, colors: colors, spaces: spaces), OrangeThemeBadgeComponentTokensProvider(sizes: sizes), - OrangeThemeCheckRadioComponentTokensProvider(sizes: sizes), + OrangeThemeCheckRadioComponentTokensProvider(sizes: sizes, borders: borders, colors: colors, opacities: opacities), // NOTE: Add new component tokens providers here ] diff --git a/OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/MockTheme/MockTheme+AllCheckRadioComponentTokens.swift b/OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/MockTheme/MockTheme+AllCheckRadioComponentTokens.swift index 571288c4c..608733dba 100644 --- a/OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/MockTheme/MockTheme+AllCheckRadioComponentTokens.swift +++ b/OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/MockTheme/MockTheme+AllCheckRadioComponentTokens.swift @@ -26,19 +26,66 @@ final class MockThemeCheckRadioComponentTokenProvider: OrangeThemeCheckRadioComp // MARK: - Mocks and setup static let mockThemeCheckRadioSize: SizeSemanticToken = 118_218 - static let mockThemeCheckRadioDimension: DimensionRawToken = 1_312 + static let mockThemeCheckRadioBorderRadius: BorderRadiusSemanticToken = 1_312 + static let mockThemeCheckRadioBorderWidth: BorderRadiusSemanticToken = 666 + static let mockThemeCheckRadioOpacity: OpacitySemanticToken = 0.007 + static let mockThemeCheckRadioColor = MultipleColorSemanticTokens("#FF0000") - override public init(sizes: AllSizeSemanticTokensProvider) { - super.init(sizes: sizes) + override public init(sizes: AllSizeSemanticTokensProvider, + borders: AllBorderSemanticTokensProvider, + colors: AllColorSemanticTokensProvider, + opacities: AllOpacitySemanticTokensProvider) { + super.init(sizes: sizes, + borders: borders, + colors: colors, + opacities: opacities) } // MARK: - Badge component tokens + override public var checkRadioSizeMaxHeightAssetsContainer: SizeSemanticToken { Self.mockThemeCheckRadioSize } + override public var checkRadioSizeMaxHeightSelectorOnly: SizeSemanticToken { Self.mockThemeCheckRadioSize } + override public var checkRadioSizeMinHeightSelectorOnly: SizeSemanticToken { Self.mockThemeCheckRadioSize } + override public var checkRadioSizeMinWidthSelectorOnly: SizeSemanticToken { Self.mockThemeCheckRadioSize } + override public var checkRadioSizeCheckInnerAsset: SizeSemanticToken { Self.mockThemeCheckRadioSize } + override public var checkRadioSizeRadioInnerCircle: SizeSemanticToken { Self.mockThemeCheckRadioSize } override public var checkRadioSizeSelector: SizeSemanticToken { Self.mockThemeCheckRadioSize } - override public var checkRadioSizeMinHeightSelectorOnly: DimensionRawToken { Self.mockThemeCheckRadioDimension } - override public var checkRadioSizeMinWidthSelectorOnly: DimensionRawToken { Self.mockThemeCheckRadioDimension } - override public var checkRadioSizeMaxHeightSelectorOnly: DimensionRawToken { Self.mockThemeCheckRadioDimension } - override public var checkRadioSizeMaxHeightAssetsContainer: DimensionRawToken { Self.mockThemeCheckRadioDimension } + + // MARK: - Borders + + override public var checkRadioBorderRadiusCheckbox: BorderRadiusSemanticToken { Self.mockThemeCheckRadioBorderRadius } + override public var checkRadioBorderWidthSelected: BorderWidthSemanticToken { Self.mockThemeCheckRadioBorderWidth } + override public var checkRadioBorderWidthSelectedFocus: BorderWidthSemanticToken { Self.mockThemeCheckRadioBorderWidth } + override public var checkRadioBorderWidthSelectedHover: BorderWidthSemanticToken { Self.mockThemeCheckRadioBorderWidth } + override public var checkRadioBorderWidthSelectedPressed: BorderWidthSemanticToken { Self.mockThemeCheckRadioBorderWidth } + override public var checkRadioBorderWidthUnselected: BorderWidthSemanticToken { Self.mockThemeCheckRadioBorderWidth } + override public var checkRadioBorderWidthUnselectedFocus: BorderWidthSemanticToken { Self.mockThemeCheckRadioBorderWidth } + override public var checkRadioBorderWidthUnselectedHover: BorderWidthSemanticToken { Self.mockThemeCheckRadioBorderWidth } + override public var checkRadioBorderWidthUnselectedPressed: BorderWidthSemanticToken { Self.mockThemeCheckRadioBorderWidth } + + // MARK: - Opacities + + override public var checkRadioOpacitySelectorBgSelected: OpacitySemanticToken { Self.mockThemeCheckRadioOpacity } + override public var checkRadioOpacitySelectorBgSelectedFocus: OpacitySemanticToken { Self.mockThemeCheckRadioOpacity } + override public var checkRadioOpacitySelectorBgSelectedHover: OpacitySemanticToken { Self.mockThemeCheckRadioOpacity } + override public var checkRadioOpacitySelectorBgSelectedPressed: OpacitySemanticToken { Self.mockThemeCheckRadioOpacity } + override public var checkRadioOpacitySelectorBgUnselected: OpacitySemanticToken { Self.mockThemeCheckRadioOpacity } + override public var checkRadioOpacitySelectorBgUnselectedFocus: OpacitySemanticToken { Self.mockThemeCheckRadioOpacity } + override public var checkRadioOpacitySelectorBgUnselectedHover: OpacitySemanticToken { Self.mockThemeCheckRadioOpacity } + override public var checkRadioOpacitySelectorBgUnselectedPressed: OpacitySemanticToken { Self.mockThemeCheckRadioOpacity } + + // MARK: - Colors + + override public var checkRadioColorContentAssetDisabled: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetEnabled: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetErrorEnabled: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetErrorFocus: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetErrorHover: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetErrorPressed: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetFocus: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetHover: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetPressed: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } + override public var checkRadioColorContentAssetSelected: MultipleColorSemanticTokens { Self.mockThemeCheckRadioColor } } // swiftlint:enable required_deinit diff --git a/OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/TestThemeOverrideOCheckRadioComponentTokens.swift b/OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/TestThemeOverrideOCheckRadioComponentTokens.swift index 9e9cebc82..c1fc8050a 100644 --- a/OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/TestThemeOverrideOCheckRadioComponentTokens.swift +++ b/OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/TestThemeOverrideOCheckRadioComponentTokens.swift @@ -31,31 +31,180 @@ final class TestThemeOverrideOfCheckRadioComponentTokens: XCTestCase { // MARK: - Sizes - func testInheritedThemeCanOverrideCheckRadioComponentTokenSize() throws { - XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeSelector, abstractTheme.checkRadio.checkRadioSizeSelector) - XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeSelector == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioSize) + func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeMaxHeightAssetsContainer() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeMaxHeightAssetsContainer, abstractTheme.checkRadio.checkRadioSizeMaxHeightAssetsContainer) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeMaxHeightAssetsContainer == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioSize) } - // MARK: - Dimensions + func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeMaxHeightSelectorOnly() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeMaxHeightSelectorOnly, abstractTheme.checkRadio.checkRadioSizeMaxHeightSelectorOnly) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeMaxHeightSelectorOnly == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioSize) + } func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeMinHeightSelectorOnly() throws { XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeMinHeightSelectorOnly, abstractTheme.checkRadio.checkRadioSizeMinHeightSelectorOnly) - XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeMinHeightSelectorOnly == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioDimension) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeMinHeightSelectorOnly == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioSize) } func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeMinWidthSelectorOnly() throws { XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeMinWidthSelectorOnly, abstractTheme.checkRadio.checkRadioSizeMinWidthSelectorOnly) - XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeMinWidthSelectorOnly == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioDimension) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeMinWidthSelectorOnly == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioSize) } - func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeMaxHeightSelectorOnly() throws { - XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeMaxHeightSelectorOnly, abstractTheme.checkRadio.checkRadioSizeMaxHeightSelectorOnly) - XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeMaxHeightSelectorOnly == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioDimension) + func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeCheckInnerAsset() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeCheckInnerAsset, abstractTheme.checkRadio.checkRadioSizeCheckInnerAsset) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeCheckInnerAsset == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioSize) } - func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeMaxHeightAssetsContainer() throws { - XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeMaxHeightAssetsContainer, abstractTheme.checkRadio.checkRadioSizeMaxHeightAssetsContainer) - XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeMaxHeightAssetsContainer == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioDimension) + func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeRadioInnerCircle() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeRadioInnerCircle, abstractTheme.checkRadio.checkRadioSizeRadioInnerCircle) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeRadioInnerCircle == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioSize) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenSizeSelector() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioSizeSelector, abstractTheme.checkRadio.checkRadioSizeSelector) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioSizeSelector == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioSize) + } + + // MARK: - Borders + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderRadiusCheckbox() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderRadiusCheckbox, abstractTheme.checkRadio.checkRadioBorderRadiusCheckbox) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderRadiusCheckbox == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderRadius) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderWidthSelected() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderWidthSelected, abstractTheme.checkRadio.checkRadioBorderWidthSelected) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderWidthSelected == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderWidth) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderWidthSelectedFocus() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderWidthSelectedFocus, abstractTheme.checkRadio.checkRadioBorderWidthSelectedFocus) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderWidthSelectedFocus == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderWidth) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderWidthSelectedHover() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderWidthSelectedHover, abstractTheme.checkRadio.checkRadioBorderWidthSelectedHover) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderWidthSelectedHover == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderWidth) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderWidthSelectedPressed() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderWidthSelectedPressed, abstractTheme.checkRadio.checkRadioBorderWidthSelectedPressed) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderWidthSelectedPressed == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderWidth) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderWidthUnselected() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderWidthUnselected, abstractTheme.checkRadio.checkRadioBorderWidthUnselected) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderWidthUnselected == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderWidth) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderWidthUnselectedFocus() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderWidthUnselectedFocus, abstractTheme.checkRadio.checkRadioBorderWidthUnselectedFocus) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderWidthUnselectedFocus == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderWidth) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderWidthUnselectedHover() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderWidthUnselectedHover, abstractTheme.checkRadio.checkRadioBorderWidthUnselectedHover) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderWidthUnselectedHover == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderWidth) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenBorderWidthUnselectedPressed() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioBorderWidthUnselectedPressed, abstractTheme.checkRadio.checkRadioBorderWidthUnselectedPressed) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioBorderWidthUnselectedPressed == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioBorderWidth) + } + + // MARK: - Opacities + + func testInheritedThemeCanOverrideCheckRadioComponentTokenOpacitySelectorBgSelected() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgSelected, abstractTheme.checkRadio.checkRadioOpacitySelectorBgSelected) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgSelected == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioOpacity) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenOpacitySelectorBgSelectedFocus() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgSelectedFocus, abstractTheme.checkRadio.checkRadioOpacitySelectorBgSelectedFocus) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgSelectedFocus == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioOpacity) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenOpacitySelectorBgSelectedHover() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgSelectedHover, abstractTheme.checkRadio.checkRadioOpacitySelectorBgSelectedHover) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgSelectedHover == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioOpacity) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenOpacitySelectorBgSelectedPressed() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgSelectedPressed, abstractTheme.checkRadio.checkRadioOpacitySelectorBgSelectedPressed) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgSelectedPressed == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioOpacity) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenOpacitySelectorBgUnselected() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgUnselected, abstractTheme.checkRadio.checkRadioOpacitySelectorBgUnselected) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgUnselected == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioOpacity) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenOpacitySelectorBgUnselectedFocus() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedFocus, abstractTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedFocus) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedFocus == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioOpacity) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenOpacitySelectorBgUnselectedHover() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedHover, abstractTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedHover) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedHover == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioOpacity) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenOpacitySelectorBgUnselectedPressed() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedPressed, abstractTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedPressed) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioOpacitySelectorBgUnselectedPressed == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioOpacity) + } + + // MARK: - Colors + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetDisabled() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetDisabled, abstractTheme.checkRadio.checkRadioColorContentAssetDisabled) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetDisabled == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetEnabled() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetEnabled, abstractTheme.checkRadio.checkRadioColorContentAssetEnabled) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetEnabled == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetErrorEnabled() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetErrorEnabled, abstractTheme.checkRadio.checkRadioColorContentAssetErrorEnabled) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetErrorEnabled == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetErrorFocus() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetErrorFocus, abstractTheme.checkRadio.checkRadioColorContentAssetErrorFocus) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetErrorFocus == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetErrorHover() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetErrorHover, abstractTheme.checkRadio.checkRadioColorContentAssetErrorHover) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetErrorHover == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetErrorPressed() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetErrorPressed, abstractTheme.checkRadio.checkRadioColorContentAssetErrorPressed) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetErrorPressed == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetFocus() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetFocus, abstractTheme.checkRadio.checkRadioColorContentAssetFocus) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetFocus == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetHover() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetHover, abstractTheme.checkRadio.checkRadioColorContentAssetHover) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetHover == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetPressed() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetPressed, abstractTheme.checkRadio.checkRadioColorContentAssetPressed) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetPressed == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) + } + + func testInheritedThemeCanOverrideCheckRadioComponentTokenColorContentAssetSelected() throws { + XCTAssertNotEqual(inheritedTheme.checkRadio.checkRadioColorContentAssetSelected, abstractTheme.checkRadio.checkRadioColorContentAssetSelected) + XCTAssertTrue(inheritedTheme.checkRadio.checkRadioColorContentAssetSelected == MockThemeCheckRadioComponentTokenProvider.mockThemeCheckRadioColor) } } diff --git a/OUDS/Core/Themes/Orange/Tests/Values/SemanticTokens/MockTheme/MockTheme.swift b/OUDS/Core/Themes/Orange/Tests/Values/SemanticTokens/MockTheme/MockTheme.swift index 407f5ba59..fd428c546 100644 --- a/OUDS/Core/Themes/Orange/Tests/Values/SemanticTokens/MockTheme/MockTheme.swift +++ b/OUDS/Core/Themes/Orange/Tests/Values/SemanticTokens/MockTheme/MockTheme.swift @@ -40,6 +40,7 @@ final class MockTheme: OUDSTheme, @unchecked Sendable { let sizes = MockThemeSizeSemanticTokensProvider() let borders = MockThemeBorderSemanticTokensProvider() let spaces = MockThemeSpaceSemanticTokensProvider() + let opacities = MockThemeOpacitySemanticTokensProvider() let providers: TokensProviders = [ colors, borders, @@ -61,7 +62,7 @@ final class MockTheme: OUDSTheme, @unchecked Sendable { MockThemeBulletListComponentTokenProvider(sizes: sizes, colors: colors, spaces: spaces), MockThemeInputTextComponentTokenProvider(sizes: sizes, colors: colors, spaces: spaces), MockThemeBadgeComponentTokenProvider(sizes: sizes), - MockThemeCheckRadioComponentTokenProvider(sizes: sizes), + MockThemeCheckRadioComponentTokenProvider(sizes: sizes, borders: borders, colors: colors, opacities: opacities), // NOTE: Add here new component tokens provider ] diff --git a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/CheckRadioComponentTokens.swift b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/CheckRadioComponentTokens.swift index 242a1f616..98db9a7fe 100644 --- a/OUDS/Core/Tokens/ComponentTokens/Sources/Values/CheckRadioComponentTokens.swift +++ b/OUDS/Core/Tokens/ComponentTokens/Sources/Values/CheckRadioComponentTokens.swift @@ -19,6 +19,7 @@ import OUDSTokensSemantic // Create an issue for update https://github.com/Orange-OpenSource/ouds-ios/issues/new?template=token_update.yml // swiftlint:disable missing_docs +// swiftlint:disable identifier_name /// Declares all component tokens for radio button and checkboxes components like `OUDSRadioButton` and `OUDSCheckbox`. /// Use for tokens providers like `OrangeThemeCheckRadioComponentTokensProvider`. @@ -28,14 +29,50 @@ public protocol CheckRadioComponentTokens { // MARK: - Sizes + var checkRadioSizeMaxHeightAssetsContainer: SizeSemanticToken { get } + var checkRadioSizeMaxHeightSelectorOnly: SizeSemanticToken { get } + var checkRadioSizeMinHeightSelectorOnly: SizeSemanticToken { get } + var checkRadioSizeMinWidthSelectorOnly: SizeSemanticToken { get } + var checkRadioSizeCheckInnerAsset: SizeSemanticToken { get } + var checkRadioSizeRadioInnerCircle: SizeSemanticToken { get } var checkRadioSizeSelector: SizeSemanticToken { get } - // MARK: - Dimensions + // MARK: - Borders - var checkRadioSizeMinHeightSelectorOnly: SizeSemanticToken { get } - var checkRadioSizeMinWidthSelectorOnly: SizeSemanticToken { get } - var checkRadioSizeMaxHeightSelectorOnly: SizeSemanticToken { get } - var checkRadioSizeMaxHeightAssetsContainer: SizeSemanticToken { get } + var checkRadioBorderRadiusCheckbox: BorderRadiusSemanticToken { get } + var checkRadioBorderWidthSelected: BorderWidthSemanticToken { get } + var checkRadioBorderWidthSelectedFocus: BorderWidthSemanticToken { get } + var checkRadioBorderWidthSelectedHover: BorderWidthSemanticToken { get } + var checkRadioBorderWidthSelectedPressed: BorderWidthSemanticToken { get } + var checkRadioBorderWidthUnselected: BorderWidthSemanticToken { get } + var checkRadioBorderWidthUnselectedFocus: BorderWidthSemanticToken { get } + var checkRadioBorderWidthUnselectedHover: BorderWidthSemanticToken { get } + var checkRadioBorderWidthUnselectedPressed: BorderWidthSemanticToken { get } + + // MARK: - Opacities + + var checkRadioOpacitySelectorBgSelected: OpacitySemanticToken { get } + var checkRadioOpacitySelectorBgSelectedFocus: OpacitySemanticToken { get } + var checkRadioOpacitySelectorBgSelectedHover: OpacitySemanticToken { get } + var checkRadioOpacitySelectorBgSelectedPressed: OpacitySemanticToken { get } + var checkRadioOpacitySelectorBgUnselected: OpacitySemanticToken { get } + var checkRadioOpacitySelectorBgUnselectedFocus: OpacitySemanticToken { get } + var checkRadioOpacitySelectorBgUnselectedHover: OpacitySemanticToken { get } + var checkRadioOpacitySelectorBgUnselectedPressed: OpacitySemanticToken { get } + + // MARK: - Colors + + var checkRadioColorContentAssetDisabled: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetEnabled: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetErrorEnabled: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetErrorFocus: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetErrorHover: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetErrorPressed: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetFocus: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetHover: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetPressed: MultipleColorSemanticTokens { get } + var checkRadioColorContentAssetSelected: MultipleColorSemanticTokens { get } } // swiftlint:enable missing_docs +// swiftlint:enable identifier_name diff --git a/OUDS/Core/Tokens/ComponentTokens/Sources/_OUDSTokensComponent.docc/OUDSTokensComponent.md b/OUDS/Core/Tokens/ComponentTokens/Sources/_OUDSTokensComponent.docc/OUDSTokensComponent.md index 69bf372b5..e8a9f9028 100644 --- a/OUDS/Core/Tokens/ComponentTokens/Sources/_OUDSTokensComponent.docc/OUDSTokensComponent.md +++ b/OUDS/Core/Tokens/ComponentTokens/Sources/_OUDSTokensComponent.docc/OUDSTokensComponent.md @@ -7,7 +7,7 @@ They can be seen as a kind of bridge between components and in the end primitive ``` -🧱 Tokens version: v0.4.1 +🧱 Tokens version: v0.5.0 ``` Thus if a component need to change for example its _background color_, and if a _component token_ is used for it, then only the value of this _token_ should be changed without any modification on the _component_ definition. diff --git a/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md b/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md index df2912eec..b11442fb4 100644 --- a/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md +++ b/OUDS/Core/Tokens/RawTokens/Sources/_OUDSTokensRaw.docc/OUDSTokensRaw.md @@ -6,7 +6,7 @@ _Raw tokens_ are smallest _tokens_ possible. They are associated to raw values a ``` -🧱 Tokens version: v0.4.1 +🧱 Tokens version: v0.5.0 ``` 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. Keeping primitive types helps today to expose objects using Objective-C runtime. diff --git a/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md b/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md index 283ba0266..6fa2d2165 100644 --- a/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md +++ b/OUDS/Core/Tokens/SemanticTokens/Sources/_OUDSTokensSemantic.docc/OUDSTokensSemantic.md @@ -7,7 +7,7 @@ They can be seen as an high level of usage with functional meanings. ``` -🧱 Tokens version: v0.4.1 +🧱 Tokens version: v0.5.0 ``` If we need for example to change a warning color for a button (which has its component tokens, see [OUDSTokensComponent](https://ios.unified-design-system.orange.com/documentation/oudstokenscomponent/)), supposing this color is defined as a _semantic token_, we only have to change its assigned value and all components using the _semantic token_ won't be impacted in their definition. In fact, semantic tokens are here to bring meaning, semantic, between raw values and components.