Skip to content

Commit 864aabc

Browse files
authored
refactor: update link component to v2.3.0 (#1589) (#1637)
Manage screen size class / density for link component to compute some dimensions. Use also suitable tokens for default / small sizes. Add missing link component tokens in declarations. Closes #1589 Assisted-by: Claude Haiku 4.5 (OpenCode, LLMProxy) Reviewed-by: Copilot <198982749+Copilot@users.noreply.github.com> Reviewed-by: Pierre-Yves Lapersonne <pierreyves.lapersonne@orange.com> Signed-off-by: Pierre-Yves Lapersonne <pierreyves.lapersonne@orange.com>
1 parent b02aed3 commit 864aabc

6 files changed

Lines changed: 25 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2020

2121
### Changed
2222

23+
- `link` component to v2.3.0 (Orange-OpenSource/ouds-ios#1589)
2324
- Detection of forced legacy layout for navigation elements
2425
- **BREAKING**: `.neutral` and `.accent` `badge icon status` signatures
2526
- **BREAKING**: `.neutral` and `.accent` `alert status` parameter name

OUDS/Core/Components/Sources/Navigations/Link/Internal/LinkButtonStyle.swift

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ struct LinkButtonStyle: ButtonStyle {
2626
let isFullWidth: Bool
2727

2828
@State private var isHover: Bool
29+
2930
@Environment(\.theme) private var theme
3031
@Environment(\.isEnabled) private var isEnabled
32+
@Environment(\.oudsHorizontalSizeClass) private var oudsHorizontalSizeClass
3133

3234
// MARK: Initializer
3335

@@ -56,7 +58,7 @@ struct LinkButtonStyle: ButtonStyle {
5658
}
5759
}
5860
.padding(.horizontal, theme.link.spacePaddingInline)
59-
.padding(.vertical, theme.link.spacePaddingBlockDefault)
61+
.padding(.vertical, verticalPadding)
6062
.frame(minWidth: minWidth, minHeight: minHeight)
6163
.frame(maxWidth: isFullWidth ? .infinity : nil)
6264
.contentShape(Rectangle())
@@ -74,7 +76,19 @@ struct LinkButtonStyle: ButtonStyle {
7476
}
7577

7678
private var minHeight: Double {
77-
size == .small ? theme.link.sizeMinHeightSmall : theme.link.sizeMinHeightDefault
79+
if oudsHorizontalSizeClass == .regular {
80+
size == .small ? theme.link.sizeMinHeightSmall : theme.link.sizeMinHeightDefault
81+
} else { // .compact, .extraCompact
82+
theme.link.sizeMinHeightCompactDensity
83+
}
84+
}
85+
86+
private var verticalPadding: Double {
87+
if oudsHorizontalSizeClass == .regular {
88+
size == .small ? theme.link.spacePaddingBlockSmall : theme.link.spacePaddingBlockDefault
89+
} else { // .compact, .extraCompact
90+
size == .small ? theme.link.spacePaddingBlockCompactDensitySmall : theme.link.spacePaddingBlockCompactDensityDefault
91+
}
7892
}
7993
}
8094

OUDS/Core/Components/Sources/Navigations/Link/OUDSLink.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ import SwiftUI
7979
///
8080
/// ![A link component in light and dark modes with Wireframe theme](component_link_Wireframe)
8181
///
82-
/// - Version: 2.2.0 (Figma component design version)
82+
/// - Version: 2.3.0 (Figma component design version)
8383
/// - Since: 0.11.0
8484
@available(iOS 15, macOS 13, visionOS 1, watchOS 11, tvOS 16, *)
8585
public struct OUDSLink: View {

OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/MockTheme/MockTheme+AllLinkComponentTokens.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ final class MockThemeLinkComponentTokenProvider: OrangeThemeLinkComponentTokensP
5858
override var spaceColumnGapChevronSmall: SpaceSemanticToken { Self.mockThemeLinkSpace }
5959
override var sizeIconDefault: SizeSemanticToken { Self.mockThemeLinkSize }
6060
override var sizeIconSmall: SizeSemanticToken { Self.mockThemeLinkSize }
61+
override var sizeMinHeightCompactDensity: SizeSemanticToken { Self.mockThemeLinkSize }
6162
override var colorContentEnabled: MultipleColorSemanticToken { Self.mockThemeLinkColor }
6263
override var colorContentHover: MultipleColorSemanticToken { Self.mockThemeLinkColor }
6364
override var colorContentPressed: MultipleColorSemanticToken { Self.mockThemeLinkColor }

OUDS/Core/Themes/Orange/Tests/Values/ComponentTokens/ThemeOverrideOfLinkComponentTokensTests.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ struct ThemeOverrideOfLinkComponentTokensTests {
5757
#expect(inheritedTheme.link.sizeIconSmall == MockThemeLinkComponentTokenProvider.mockThemeLinkSize)
5858
}
5959

60+
@Test func inheritedThemeCanOverrideLinkComponentTokenSizeMinHeightCompactDensity() throws {
61+
#expect(inheritedTheme.link.sizeMinHeightCompactDensity != abstractTheme.link.sizeMinHeightCompactDensity)
62+
#expect(inheritedTheme.link.sizeMinHeightCompactDensity == MockThemeLinkComponentTokenProvider.mockThemeLinkSize)
63+
}
64+
6065
// MARK: - Colors
6166

6267
@Test func inheritedThemeCanOverrideLinkMonoComponentTokenColorContentEnabled() throws {

OUDS/Core/Tokens/ComponentTokens/Sources/Values/LinkComponentTokens.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public protocol LinkComponentTokens {
2929

3030
var sizeMinHeightSmall: SizeSemanticToken { get }
3131
var sizeMinHeightDefault: SizeSemanticToken { get }
32+
var sizeMinHeightCompactDensity: SizeSemanticToken { get }
3233
var sizeMinWidthSmall: SizeSemanticToken { get }
3334
var sizeMinWidth: SizeSemanticToken { get }
3435
var sizeIconSmall: SizeSemanticToken { get }

0 commit comments

Comments
 (0)