Skip to content

Commit

Permalink
refactor: wrapping for semantic tokens of spaces (#79)
Browse files Browse the repository at this point in the history
Signed-off-by: Pierre-Yves Lapersonne <[email protected]>
  • Loading branch information
pylapp committed Dec 13, 2024
1 parent 2f13375 commit 5312e81
Show file tree
Hide file tree
Showing 37 changed files with 506 additions and 450 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ import OUDSTokensSemantic
// WARNING: Not synchronized anymore with the Figjam / Figma by developers team
// Create an issue for update https://github.com/Orange-OpenSource/ouds-ios/issues/new?template=token_update.yml

/// Defines wrapper objects for space semantic tokens (i.e. in the end ``DimensionRawToken`).
/// 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: SpaceMultipleSemanticTokens {
/// Defines wrapper objects for space semantic tokens (i.e. in the end ``DimensionRawToken``).
/// These values can be overriden inside ``OUDSSpaceSemanticTokensWrapper`` subclasses (in extensions or not, in the same module or not) thanks to the `@objc open` combination.
extension OUDSSpaceSemanticTokensWrapper: SpaceMultipleSemanticTokens {

// MARK: Semantic token - Spacing - Layout fluid

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import Foundation
import OUDSTokensRaw
import OUDSTokensSemantic

extension OUDSTheme: SpaceSemanticTokens {
extension OUDSSpaceSemanticTokensWrapper: SpaceSemanticTokens {
@objc open var spaceColumnGapMedium: SpaceSemanticToken { DimensionRawTokens.dimension150 }
@objc open var spaceColumnGapNone: SpaceSemanticToken { DimensionRawTokens.dimension0 }
@objc open var spaceColumnGapShort: SpaceSemanticToken { DimensionRawTokens.dimension100 }
Expand Down
15 changes: 11 additions & 4 deletions OUDS/Core/OUDS/Sources/OUDSTheme/OUDSTheme.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ open class OUDSTheme: @unchecked Sendable {
/// All size semantic tokens exposed in one object
public let sizes: AllSizeSemanticTokens

// TODO: Add space tokens
/// All size semantic tokens exposed in one object
public let spaces: AllSpaceSemanticTokens

// TODO: Add components tokens

Expand All @@ -69,13 +70,15 @@ open class OUDSTheme: @unchecked Sendable {
/// - grids: An object providing all the grid semantic tokens, by default `OUDSGridSemanticTokensWrapper`
/// - opacities: An object providing all the opacity semantic tokens, by default `OUDSOpacitySemanticTokensWrapper`
/// - sizes: An object providing all the size semantic tokens, by default `OUDSSizeSemanticTokensWrapper`
/// - spaces: An object providing all the space semantic tokens, by default `OUDSSpaceSemanticTokensWrapper`
public init(colors: AllColorSemanticTokens = OUDSColorSemanticTokensWrapper(),
borders: AllBorderSemanticTokens = OUDSBorderSemanticTokensWrapper(),
elevations: AllElevationSemanticTokens = OUDSElevationSemanticTokensWrapper(),
fonts: AllFontSemanticTokens = OUDSFontSemanticTokensWrapper(),
grids: AllGridSemanticTokens = OUDSGridSemanticTokensWrapper(),
opacities: AllOpacitySemanticTokens = OUDSOpacitySemanticTokensWrapper(),
sizes: AllSizeSemanticTokens = OUDSSizeSemanticTokensWrapper()) {
sizes: AllSizeSemanticTokens = OUDSSizeSemanticTokensWrapper(),
spaces: AllSpaceSemanticTokens = OUDSSpaceSemanticTokensWrapper()) {
self.colors = colors
self.borders = borders
self.elevations = elevations
Expand All @@ -84,6 +87,7 @@ open class OUDSTheme: @unchecked Sendable {
self.grids = grids
self.opacities = opacities
self.sizes = sizes
self.spaces = spaces
}

/// Defines a basic kind of abstract theme to subclass then.
Expand All @@ -95,15 +99,17 @@ open class OUDSTheme: @unchecked Sendable {
/// - fonts: An object providing all the font semantic tokens, by default `AllFontemanticTokens`
/// - grids: An object providing all the grid semantic tokens, by default `AllGridSemanticTokens`
/// - opacities: An object providing all the opacity semantic tokens, as `AllOpacitySemanticTokens` implementation
/// - sizes: An object providing all the opacity semantic tokens, as `AllSizeSemanticTokens` implementation
/// - sizes: An object providing all the size semantic tokens, as `AllSizeSemanticTokens` implementation
/// - spaces: An object providing all the space semantic tokens, as `AllSpaceSemanticTokens` implementation
public init(colors: AllColorSemanticTokens,
borders: AllBorderSemanticTokens,
elevations: AllElevationSemanticTokens,
fontFamily: FontFamilySemanticToken?,
fonts: AllFontSemanticTokens,
grids: AllGridSemanticTokens,
opacities: AllOpacitySemanticTokens,
sizes: AllSizeSemanticTokens) {
sizes: AllSizeSemanticTokens,
spaces: AllSpaceSemanticTokens) {
self.colors = colors
self.borders = borders
self.elevations = elevations
Expand All @@ -112,6 +118,7 @@ open class OUDSTheme: @unchecked Sendable {
self.grids = grids
self.opacities = opacities
self.sizes = sizes
self.spaces = spaces
}

deinit { }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
//
// 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
import OUDSTokensSemantic

// swiftlint:disable required_deinit

/// Overrides **all** the space semantic tokens (from its super class, i.e. `OUDSSpaceSemanticTokensWrapper` so as to test overriding of them (unit tests)
/// and to act like smoke tests with crashing tests if some tokens disappeared.
final class MockThemeSpaceSemanticTokensWrapper: OUDSSpaceSemanticTokensWrapper {

static let mockThemeSpaceRawToken: DimensionRawToken = 911
static let mockThemeSpaceSemanticToken = MultipleSpaceSemanticTokens(compact: 1, regular: 151)

// MARK: Semantic token - Spacing - Layout fluid (multiple)

override public var spaceScaledNone: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledSmash: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledShortest: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledShorter: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledShort: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledMedium: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledTall: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledTaller: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledTallest: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }
override public var spaceScaledSpacious: MultipleSpaceSemanticTokens { Self.mockThemeSpaceSemanticToken }

// MARK: Semantic token - Spacing - Layout fluid (pure semantic)

override public var spaceScaledNoneMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledNoneTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledSmashMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledSmashTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledShortestMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledShortestTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledShorterMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledShorterTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledShortMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledShortTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledMediumMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledMediumTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledTallMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledTallTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledTallerMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledTallerTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledTallestMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledTallestTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledSpaciousMobile: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceScaledSpaciousTablet: SpaceSemanticToken { Self.mockThemeSpaceRawToken }

// MARK: Semantic token - Spacing - Layout fix

override public var spaceFixedNone: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedSmash: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedShortest: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedShorter: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedShort: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedMedium: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedTall: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedTaller: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedTallest: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedSpacious: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedHuge: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceFixedJumbo: SpaceSemanticToken { Self.mockThemeSpaceRawToken }

// MARK: Semantic token - Spacing - Padding - Padding inline

override public var spacePaddingInlineNone: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineSmash: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineShortest: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineShorter: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineShort: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineMedium: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineTall: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineTaller: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineTallest: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineSpacious: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingInlineHuge: SpaceSemanticToken { Self.mockThemeSpaceRawToken }

// MARK: Semantic token - Padding - Padding stack

override public var spacePaddingBlockNone: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingBlockShorter: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingBlockShort: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingBlockMedium: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingBlockTall: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingBlockTaller: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spacePaddingBlockTallest: SpaceSemanticToken { Self.mockThemeSpaceRawToken }

// MARK: Semantic token - Padding - Padding inset

override public var spaceInsetNone: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetSmash: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetShortest: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetShorter: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetShort: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetMedium: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetTall: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetTaller: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetTallest: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceInsetSpacious: SpaceSemanticToken { Self.mockThemeSpaceRawToken }

// MARK: Semantic token - Padding - Gap inline

override public var spaceColumnGapNone: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceColumnGapShorter: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceColumnGapShort: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceColumnGapMedium: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceColumnGapTall: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceColumnGapTaller: SpaceSemanticToken { Self.mockThemeSpaceRawToken }

// MARK: Semantic token - Padding - Gap stack

override public var spaceRowGapNone: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceRowGapShortest: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceRowGapShorter: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceRowGapShort: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceRowGapMedium: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
override public var spaceRowGapTall: SpaceSemanticToken { Self.mockThemeSpaceRawToken }
}

// swiftlint:enable required_deinit
Loading

0 comments on commit 5312e81

Please sign in to comment.