A couple of small tweaks. (#4569)

* Stop ignoring the safe area with the suggestions view.

They weren't visible on iPad (hidden behind the sidebar) and I can't find any instance when they're shown where the safe area comes into play.

* Make sure the room list deselects the cell when dismissed a room.

* Use the backports pattern in more places.

* Fix the annoying header on macOS.

* Silence some warnings

* Fix compound CI branch name.
This commit is contained in:
Doug
2025-10-03 12:09:17 +01:00
committed by GitHub
parent c4aebc47ee
commit 6377d9be67
31 changed files with 110 additions and 116 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ name: Compound
on: on:
push: push:
branches: [ main ] branches: [ develop ]
pull_request: pull_request:
-4
View File
@@ -719,7 +719,6 @@
8015842CB4DE1BE414D2CDED /* AppLockSetupBiometricsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C62E07C1164F5120727A2A8 /* AppLockSetupBiometricsScreenCoordinator.swift */; }; 8015842CB4DE1BE414D2CDED /* AppLockSetupBiometricsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C62E07C1164F5120727A2A8 /* AppLockSetupBiometricsScreenCoordinator.swift */; };
804C15D8ADE0EA7A5268F58A /* OverridableAvatarImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648DD1C10E4957CB791FE0B8 /* OverridableAvatarImage.swift */; }; 804C15D8ADE0EA7A5268F58A /* OverridableAvatarImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648DD1C10E4957CB791FE0B8 /* OverridableAvatarImage.swift */; };
80DEA2A4B20F9E279EAE6B2B /* UserProfile+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD01F7FC2BBAC7351948595 /* UserProfile+Mock.swift */; }; 80DEA2A4B20F9E279EAE6B2B /* UserProfile+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD01F7FC2BBAC7351948595 /* UserProfile+Mock.swift */; };
80F1B442DB5E2C362ACDD8E2 /* ZoomTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018194CAFBE80720FECCEDEE /* ZoomTransition.swift */; };
80F6C8EFCA4564B67F0D34B0 /* DeactivateAccountScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77F75B3E9F99864048A422A /* DeactivateAccountScreenViewModelTests.swift */; }; 80F6C8EFCA4564B67F0D34B0 /* DeactivateAccountScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77F75B3E9F99864048A422A /* DeactivateAccountScreenViewModelTests.swift */; };
81A7C020CB5F6232242A8414 /* UserSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36C0A6D59717193F49EA986 /* UserSessionTests.swift */; }; 81A7C020CB5F6232242A8414 /* UserSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36C0A6D59717193F49EA986 /* UserSessionTests.swift */; };
8285FF4B2C2331758C437FF7 /* ReportContentScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 713B48DBF65DE4B0DD445D66 /* ReportContentScreenViewModelProtocol.swift */; }; 8285FF4B2C2331758C437FF7 /* ReportContentScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 713B48DBF65DE4B0DD445D66 /* ReportContentScreenViewModelProtocol.swift */; };
@@ -1495,7 +1494,6 @@
00E5B2CBEF8F96424F095508 /* RoomDetailsEditScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenViewModelTests.swift; sourceTree = "<group>"; }; 00E5B2CBEF8F96424F095508 /* RoomDetailsEditScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenViewModelTests.swift; sourceTree = "<group>"; };
011AFA4990C585D157829679 /* DeclineAndBlockScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeclineAndBlockScreenViewModel.swift; sourceTree = "<group>"; }; 011AFA4990C585D157829679 /* DeclineAndBlockScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeclineAndBlockScreenViewModel.swift; sourceTree = "<group>"; };
012A284622B32052015F1F89 /* ReadMarkerRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadMarkerRoomTimelineView.swift; sourceTree = "<group>"; }; 012A284622B32052015F1F89 /* ReadMarkerRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadMarkerRoomTimelineView.swift; sourceTree = "<group>"; };
018194CAFBE80720FECCEDEE /* ZoomTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZoomTransition.swift; sourceTree = "<group>"; };
01B795AAAB7B8747FE2FF311 /* LogViewerScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogViewerScreenModels.swift; sourceTree = "<group>"; }; 01B795AAAB7B8747FE2FF311 /* LogViewerScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogViewerScreenModels.swift; sourceTree = "<group>"; };
01C4C7DB37597D7D8379511A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 01C4C7DB37597D7D8379511A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
022E6BD64CB4610B9C95FC02 /* UserDetailsEditScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDetailsEditScreenViewModel.swift; sourceTree = "<group>"; }; 022E6BD64CB4610B9C95FC02 /* UserDetailsEditScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDetailsEditScreenViewModel.swift; sourceTree = "<group>"; };
@@ -6139,7 +6137,6 @@
children = ( children = (
EF1593DD87F974F8509BB619 /* ElementAnimations.swift */, EF1593DD87F974F8509BB619 /* ElementAnimations.swift */,
97CE98208321C4D66E363612 /* ShimmerModifier.swift */, 97CE98208321C4D66E363612 /* ShimmerModifier.swift */,
018194CAFBE80720FECCEDEE /* ZoomTransition.swift */,
); );
path = Animation; path = Animation;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -8445,7 +8442,6 @@
B773ACD8881DB18E876D950C /* WaveformSource.swift in Sources */, B773ACD8881DB18E876D950C /* WaveformSource.swift in Sources */,
08CB4BD12CEEDE6AAE4A18DD /* WindowManager.swift in Sources */, 08CB4BD12CEEDE6AAE4A18DD /* WindowManager.swift in Sources */,
AE5AAD9E32511544FDFA5560 /* WindowManagerProtocol.swift in Sources */, AE5AAD9E32511544FDFA5560 /* WindowManagerProtocol.swift in Sources */,
80F1B442DB5E2C362ACDD8E2 /* ZoomTransition.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -280,6 +280,8 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol {
switch context.toState { switch context.toState {
case .roomList(detailState: .room(let detailStateRoomID)): case .roomList(detailState: .room(let detailStateRoomID)):
self?.selectedRoomSubject.send(detailStateRoomID) self?.selectedRoomSubject.send(detailStateRoomID)
case .roomList(detailState: nil):
self?.selectedRoomSubject.send(nil)
default: default:
break break
} }
@@ -1,30 +0,0 @@
//
// Copyright 2024 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
// Please see LICENSE files in the repository root for full details.
//
import SwiftUI
extension View {
/// A convenience modifier to conditionally apply `.navigationTransition(.zoom(…))` when available.
@ViewBuilder
func zoomTransition(sourceID: some Hashable, in namespace: Namespace.ID) -> some View {
if #available(iOS 18.0, *) {
navigationTransition(.zoom(sourceID: sourceID, in: namespace))
} else {
self
}
}
/// A convenience modifier to conditionally apply `.matchedTransitionSource(…)` when available.
@ViewBuilder
func zoomTransitionSource(id: some Hashable, in namespace: Namespace.ID) -> some View {
if #available(iOS 18.0, *) {
matchedTransitionSource(id: id, in: namespace)
} else {
self
}
}
}
+58 -2
View File
@@ -8,12 +8,68 @@
import SwiftUI import SwiftUI
extension View { extension View {
@ViewBuilder // MARK: iOS 18
func backportTabBarMinimizeBehaviorOnScrollDown() -> some View {
/// Uses the old page style modal so that on iPadOS 18 the presentation detents have no effect.
@ViewBuilder func backportPresentationSizingPage() -> some View {
if #available(iOS 18.0, *) {
presentationSizing(.page)
} else {
self
}
}
/// A convenience modifier to conditionally apply `.navigationTransition(.zoom(…))` when available.
@ViewBuilder func backportNavigationTransitionZoom(sourceID: some Hashable, in namespace: Namespace.ID) -> some View {
if #available(iOS 18.0, *) {
navigationTransition(.zoom(sourceID: sourceID, in: namespace))
} else {
self
}
}
/// A convenience modifier to conditionally apply `.matchedTransitionSource(…)` when available.
@ViewBuilder func backportMatchedTransitionSource(id: some Hashable, in namespace: Namespace.ID) -> some View {
if #available(iOS 18.0, *) {
matchedTransitionSource(id: id, in: namespace)
} else {
self
}
}
@ViewBuilder func backportAccessibilityHint(_ hint: String, isEnabled: Bool) -> some View {
if #available(iOS 18, *) {
accessibilityHint(hint, isEnabled: isEnabled)
} else {
self
}
}
// MARK: iOS 26
@ViewBuilder func backportTabBarMinimizeBehaviorOnScrollDown() -> some View {
if #available(iOS 26.0, *) { if #available(iOS 26.0, *) {
tabBarMinimizeBehavior(.onScrollDown) tabBarMinimizeBehavior(.onScrollDown)
} else { } else {
self self
} }
} }
@ViewBuilder func backportScrollEdgeEffectHidden() -> some View {
if #available(iOS 26, *) {
scrollEdgeEffectHidden()
} else {
self
}
}
}
extension ToolbarContent {
@ToolbarContentBuilder func backportSharedBackgroundVisibility(_ visibility: Visibility) -> some ToolbarContent {
if #available(iOS 26.0, *) {
sharedBackgroundVisibility(visibility)
} else {
self
}
}
} }
@@ -33,7 +33,7 @@ extension TextFieldStyle where Self == ElementTextFieldStyle {
} }
/// The text field style used in authentication screens. /// The text field style used in authentication screens.
struct ElementTextFieldStyle: TextFieldStyle { struct ElementTextFieldStyle: @MainActor TextFieldStyle {
enum State { enum State {
case success case success
case error case error
@@ -18,8 +18,9 @@ struct RoomHeaderView: View {
let mediaProvider: MediaProviderProtocol? let mediaProvider: MediaProviderProtocol?
var body: some View { var body: some View {
if ProcessInfo.isRunningAccessibilityTests { if ProcessInfo.isRunningAccessibilityTests || ProcessInfo.processInfo.isiOSAppOnMac {
// Accessibility tests scale up the dynamic size in real time which may break the view // Accessibility tests scale up the dynamic size in real time which may break the view.
// macOS really doesn't like the greedy size and does weird things to it.
content content
} else { } else {
content content
@@ -22,14 +22,7 @@ struct HomeScreen: View {
actions: leaveRoomAlertActions, actions: leaveRoomAlertActions,
message: leaveRoomAlertMessage) message: leaveRoomAlertMessage)
.navigationTitle(L10n.screenRoomlistMainSpaceTitle) .navigationTitle(L10n.screenRoomlistMainSpaceTitle)
.toolbar { .toolbar { toolbar }
if #available(iOS 26, *) {
toolbar
.sharedBackgroundVisibility(.hidden)
} else {
toolbar
}
}
.background(Color.compound.bgCanvasDefault.ignoresSafeArea()) .background(Color.compound.bgCanvasDefault.ignoresSafeArea())
.track(screen: .Home) .track(screen: .Home)
.bloom() .bloom()
@@ -43,10 +36,12 @@ struct HomeScreen: View {
ToolbarItem(placement: .navigationBarLeading) { ToolbarItem(placement: .navigationBarLeading) {
settingsButton settingsButton
} }
.backportSharedBackgroundVisibility(.hidden)
ToolbarItem(placement: .primaryAction) { ToolbarItem(placement: .primaryAction) {
newRoomButton newRoomButton
} }
.backportSharedBackgroundVisibility(.hidden)
} }
private var settingsButton: some View { private var settingsButton: some View {
@@ -47,15 +47,11 @@ struct MediaEventsTimelineScreen: View {
if context.viewState.shouldShowEmptyState { if context.viewState.shouldShowEmptyState {
emptyState emptyState
} else { } else {
if #available(iOS 26, *) { scrollView
scrollView // Remove the glass effect of iOS 26+
// Remove the glass effect of iOS 26+ // A flipped table view will always trigger it
// A flipped table view will always trigger it // since the nav bar thinks is always at the bottom.
// since the nav bar thinks is always at the bottom. .backportScrollEdgeEffectHidden()
.scrollEdgeEffectHidden()
} else {
scrollView
}
} }
} }
@@ -99,7 +99,6 @@ private struct BackgroundView<Content: View>: View {
.clipShape(RoundedCornerShape(radius: shadowRadius, corners: [.topLeft, .topRight])) .clipShape(RoundedCornerShape(radius: shadowRadius, corners: [.topLeft, .topRight]))
.shadow(color: .black.opacity(0.20), radius: 20.0, x: 0.0, y: 3.0) .shadow(color: .black.opacity(0.20), radius: 20.0, x: 0.0, y: 3.0)
.mask(Rectangle().padding(.init(top: -(shadowRadius * 2), leading: 0.0, bottom: 0.0, trailing: 0.0))) .mask(Rectangle().padding(.init(top: -(shadowRadius * 2), leading: 0.0, bottom: 0.0, trailing: 0.0)))
.edgesIgnoringSafeArea(.all)
} }
} }
@@ -20,14 +20,7 @@ struct SpaceListScreen: View {
} }
.navigationTitle(L10n.screenSpaceListTitle) .navigationTitle(L10n.screenSpaceListTitle)
.navigationBarTitleDisplayMode(.inline) .navigationBarTitleDisplayMode(.inline)
.toolbar { .toolbar { toolbar }
if #available(iOS 26, *) {
toolbar
.sharedBackgroundVisibility(.hidden)
} else {
toolbar
}
}
.background(Color.compound.bgCanvasDefault.ignoresSafeArea()) .background(Color.compound.bgCanvasDefault.ignoresSafeArea())
.bloom() .bloom()
} }
@@ -90,11 +83,13 @@ struct SpaceListScreen: View {
} }
.accessibilityLabel(L10n.commonSettings) .accessibilityLabel(L10n.commonSettings)
} }
.backportSharedBackgroundVisibility(.hidden)
ToolbarItem(placement: .principal) { ToolbarItem(placement: .principal) {
// Hides the navigationTitle (which is set for the navigation stack label). // Hides the navigationTitle (which is set for the navigation stack label).
Text("").accessibilityHidden(true) Text("").accessibilityHidden(true)
} }
.backportSharedBackgroundVisibility(.hidden)
} }
} }
@@ -52,7 +52,7 @@ struct TimelineItemMenu: View {
} }
} }
.accessibilityIdentifier(A11yIdentifiers.roomScreen.timelineItemActionMenu) .accessibilityIdentifier(A11yIdentifiers.roomScreen.timelineItemActionMenu)
.presentationPage() .backportPresentationSizingPage()
.presentationDetents([.medium, .large]) .presentationDetents([.medium, .large])
.presentationBackground(Color.compound.bgCanvasDefault) .presentationBackground(Color.compound.bgCanvasDefault)
.presentationDragIndicator(.visible) .presentationDragIndicator(.visible)
@@ -251,17 +251,6 @@ private extension EncryptionAuthenticity {
} }
} }
private extension View {
/// Uses the old page style modal so that on iPadOS 18 the presentation detents have no effect.
@ViewBuilder func presentationPage() -> some View {
if #available(iOS 18.0, *) {
presentationSizing(.page)
} else {
self
}
}
}
// MARK: - Previews // MARK: - Previews
struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview { struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview {
@@ -92,13 +92,9 @@ struct PollView: View {
private var optionsView: some View { private var optionsView: some View {
ForEach(poll.options, id: \.id) { option in ForEach(poll.options, id: \.id) { option in
if #available(iOS 18, *) { pollOption(option: option)
pollOption(option: option) .backportAccessibilityHint(L10n.a11yPollsWillRemoveSelection,
.accessibilityHint(L10n.a11yPollsWillRemoveSelection, isEnabled: isRemovePreviousSelectionHintEnabled(option: option))
isEnabled: isRemovePreviousSelectionHintEnabled(option: option))
} else {
pollOption(option: option)
}
} }
} }
@@ -55,7 +55,7 @@ struct RoomEventStringBuilder {
default: L10n.commonWaitingForDecryptionKey default: L10n.commonWaitingForDecryptionKey
} }
return prefix(errorMessage, with: displayName, isOutgoing: isOutgoing) return prefix(errorMessage, with: displayName, isOutgoing: isOutgoing)
case .other(eventType: let eventType): case .other:
return nil // We shouldn't receive these without asking for custom event types. return nil // We shouldn't receive these without asking for custom event types.
} }
case .failedToParseMessageLike, .failedToParseState: case .failedToParseMessageLike, .failedToParseState:
@@ -40,7 +40,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
return buildRedactedTimelineItem(eventItemProxy, messageLikeContent, isOutgoing) return buildRedactedTimelineItem(eventItemProxy, messageLikeContent, isOutgoing)
case .unableToDecrypt(let encryptedMessage): case .unableToDecrypt(let encryptedMessage):
return buildEncryptedTimelineItem(eventItemProxy, messageLikeContent, encryptedMessage, isOutgoing) return buildEncryptedTimelineItem(eventItemProxy, messageLikeContent, encryptedMessage, isOutgoing)
case .other(eventType: let eventType): case .other:
return nil // We shouldn't receive these without asking for custom event types. return nil // We shouldn't receive these without asking for custom event types.
} }
case .failedToParseMessageLike(let eventType, let error): case .failedToParseMessageLike(let eventType, let error):
@@ -467,7 +467,7 @@ final class TimelineProxy: TimelineProxyProtocol {
MXLog.info("Toggling reaction \(reaction) for event: \(eventOrTransactionID)") MXLog.info("Toggling reaction \(reaction) for event: \(eventOrTransactionID)")
do { do {
try await timeline.toggleReaction(itemId: eventOrTransactionID.rustValue, key: reaction) _ = try await timeline.toggleReaction(itemId: eventOrTransactionID.rustValue, key: reaction)
MXLog.info("Finished toggling reaction for event: \(eventOrTransactionID)") MXLog.info("Finished toggling reaction for event: \(eventOrTransactionID)")
return .success(()) return .success(())
} catch { } catch {
@@ -57,7 +57,7 @@ extension RestorationToken: Codable {
} }
} }
extension MatrixRustSDK.Session: Codable { extension MatrixRustSDK.Session: @retroactive Codable {
public init(from decoder: Decoder) throws { public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self) let container = try decoder.container(keyedBy: CodingKeys.self)
@@ -9,7 +9,7 @@ import Combine
import KZFileWatchers import KZFileWatchers
import SwiftUI import SwiftUI
extension Notification.Name: Codable { } extension Notification.Name: @retroactive Codable { }
enum UITestsSignal: Codable, Equatable { enum UITestsSignal: Codable, Equatable {
/// An internal signal used to indicate that one side of the connection is ready. /// An internal signal used to indicate that one side of the connection is ready.
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:850872071e8b5915603490be276665b781c6cc3fc5f1620ae2fd6263b07d0b08 oid sha256:0df4048601119a0808c12b35d6302c842b7e2cf7d25600d2dd2ae0b4f7ba2ede
size 99216 size 99354
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a1e7ca6b6b2965e992f5068273af35b4f2f5425326551674cc3b0bec7f49e013 oid sha256:543ad54d777a9fd6f744b288c0c0235259d1c0e62cb3d1e26b492c18f726f842
size 80689 size 80874
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:850872071e8b5915603490be276665b781c6cc3fc5f1620ae2fd6263b07d0b08 oid sha256:0df4048601119a0808c12b35d6302c842b7e2cf7d25600d2dd2ae0b4f7ba2ede
size 99216 size 99354
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a1e7ca6b6b2965e992f5068273af35b4f2f5425326551674cc3b0bec7f49e013 oid sha256:543ad54d777a9fd6f744b288c0c0235259d1c0e62cb3d1e26b492c18f726f842
size 80689 size 80874
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:98e2b2cdab292a01ed1480a10e1e31d4ba634b48b132d3ebe4b23f93f31dabd3 oid sha256:ea44d602dcab96041250a3ac2548936a3e1dfa77c2be234424383c73904b881a
size 54559 size 54665
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a9c50c2096a9d5e5113d88541cf8e5b4d3045586414357ae096bea037db4739c oid sha256:6d6588cafee096a7bf0f891047bd174c0da05eb110acc1eeebd082db5de1d196
size 39716 size 39813
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:98e2b2cdab292a01ed1480a10e1e31d4ba634b48b132d3ebe4b23f93f31dabd3 oid sha256:ea44d602dcab96041250a3ac2548936a3e1dfa77c2be234424383c73904b881a
size 54559 size 54665
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a9c50c2096a9d5e5113d88541cf8e5b4d3045586414357ae096bea037db4739c oid sha256:6d6588cafee096a7bf0f891047bd174c0da05eb110acc1eeebd082db5de1d196
size 39716 size 39813
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c1586c67413d70917cff66ec2e9a9805f5128d7adf9a462ae4a739ea9df7984d oid sha256:7b900bb2a2da0750a6f4bf14e07b5ae0b884325844f7672417f05b91a6d07aeb
size 108204 size 108348
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:425ce93eb6169673298f7bf05f2125bf6fb86809abc46273861bec324e24c635 oid sha256:46ba3c105adda9a91f1b6227b15455200b8b1f5b8e87d6826067cdfec5dca334
size 108619 size 108764
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:4b5bcf8c408e25881df6b552614b8181bc71858a52894ce7354240c1f3f1b6fc oid sha256:9a2a6c34e7e14ecee0dcc66f519f95344ce67a9029f21727d6325d195e3320d0
size 62582 size 62683
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:8868848eeeb66d2b1bf2ce93e0c8c36f309e315c8edf3f26361ee1b91b68a1be oid sha256:2120e2fc71bf507895247ed0443a0be8e031fb64918e298b0a8e567101e0c4f7
size 62995 size 63096
@@ -182,8 +182,7 @@ struct CompoundIcon_Previews: PreviewProvider, TestablePreview {
static var accessibilityLabels: some View { static var accessibilityLabels: some View {
Grid(alignment: .leading) { Grid(alignment: .leading) {
ForEach(DynamicTypeSize.allCases, id: \.self) { ForEach(DynamicTypeSize.allCases, id: \.self) { size in
size in
GridRow { GridRow {
Label("Test XS", icon: \.userProfile, iconSize: .xSmall, relativeTo: .compound.bodyXS) Label("Test XS", icon: \.userProfile, iconSize: .xSmall, relativeTo: .compound.bodyXS)
.font(.compound.bodyXS) .font(.compound.bodyXS)