diff --git a/.github/workflows/compound-ios.yml b/.github/workflows/compound-ios.yml index e6bba4f4c..c39269ec3 100644 --- a/.github/workflows/compound-ios.yml +++ b/.github/workflows/compound-ios.yml @@ -5,7 +5,7 @@ name: Compound on: push: - branches: [ main ] + branches: [ develop ] pull_request: diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index d5e6a0e0e..6632f1af0 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -719,7 +719,6 @@ 8015842CB4DE1BE414D2CDED /* AppLockSetupBiometricsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C62E07C1164F5120727A2A8 /* AppLockSetupBiometricsScreenCoordinator.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 */; }; - 80F1B442DB5E2C362ACDD8E2 /* ZoomTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018194CAFBE80720FECCEDEE /* ZoomTransition.swift */; }; 80F6C8EFCA4564B67F0D34B0 /* DeactivateAccountScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77F75B3E9F99864048A422A /* DeactivateAccountScreenViewModelTests.swift */; }; 81A7C020CB5F6232242A8414 /* UserSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36C0A6D59717193F49EA986 /* UserSessionTests.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 = ""; }; 011AFA4990C585D157829679 /* DeclineAndBlockScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeclineAndBlockScreenViewModel.swift; sourceTree = ""; }; 012A284622B32052015F1F89 /* ReadMarkerRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadMarkerRoomTimelineView.swift; sourceTree = ""; }; - 018194CAFBE80720FECCEDEE /* ZoomTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZoomTransition.swift; sourceTree = ""; }; 01B795AAAB7B8747FE2FF311 /* LogViewerScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogViewerScreenModels.swift; sourceTree = ""; }; 01C4C7DB37597D7D8379511A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 022E6BD64CB4610B9C95FC02 /* UserDetailsEditScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDetailsEditScreenViewModel.swift; sourceTree = ""; }; @@ -6139,7 +6137,6 @@ children = ( EF1593DD87F974F8509BB619 /* ElementAnimations.swift */, 97CE98208321C4D66E363612 /* ShimmerModifier.swift */, - 018194CAFBE80720FECCEDEE /* ZoomTransition.swift */, ); path = Animation; sourceTree = ""; @@ -8445,7 +8442,6 @@ B773ACD8881DB18E876D950C /* WaveformSource.swift in Sources */, 08CB4BD12CEEDE6AAE4A18DD /* WindowManager.swift in Sources */, AE5AAD9E32511544FDFA5560 /* WindowManagerProtocol.swift in Sources */, - 80F1B442DB5E2C362ACDD8E2 /* ZoomTransition.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift index 8f30be891..f7f7ab4ac 100644 --- a/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift @@ -280,6 +280,8 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol { switch context.toState { case .roomList(detailState: .room(let detailStateRoomID)): self?.selectedRoomSubject.send(detailStateRoomID) + case .roomList(detailState: nil): + self?.selectedRoomSubject.send(nil) default: break } diff --git a/ElementX/Sources/Other/SwiftUI/Animation/ZoomTransition.swift b/ElementX/Sources/Other/SwiftUI/Animation/ZoomTransition.swift deleted file mode 100644 index 364a87873..000000000 --- a/ElementX/Sources/Other/SwiftUI/Animation/ZoomTransition.swift +++ /dev/null @@ -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 - } - } -} diff --git a/ElementX/Sources/Other/SwiftUI/Backports.swift b/ElementX/Sources/Other/SwiftUI/Backports.swift index 4afcd0ef2..b7d498430 100644 --- a/ElementX/Sources/Other/SwiftUI/Backports.swift +++ b/ElementX/Sources/Other/SwiftUI/Backports.swift @@ -8,12 +8,68 @@ import SwiftUI extension View { - @ViewBuilder - func backportTabBarMinimizeBehaviorOnScrollDown() -> some View { + // MARK: iOS 18 + + /// 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, *) { tabBarMinimizeBehavior(.onScrollDown) } else { 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 + } + } } diff --git a/ElementX/Sources/Other/SwiftUI/Styles/ElementTextFieldStyle.swift b/ElementX/Sources/Other/SwiftUI/Styles/ElementTextFieldStyle.swift index 207d7da96..59431af3e 100644 --- a/ElementX/Sources/Other/SwiftUI/Styles/ElementTextFieldStyle.swift +++ b/ElementX/Sources/Other/SwiftUI/Styles/ElementTextFieldStyle.swift @@ -33,7 +33,7 @@ extension TextFieldStyle where Self == ElementTextFieldStyle { } /// The text field style used in authentication screens. -struct ElementTextFieldStyle: TextFieldStyle { +struct ElementTextFieldStyle: @MainActor TextFieldStyle { enum State { case success case error diff --git a/ElementX/Sources/Other/SwiftUI/Views/RoomHeaderView.swift b/ElementX/Sources/Other/SwiftUI/Views/RoomHeaderView.swift index b1b2d5536..b9259a842 100644 --- a/ElementX/Sources/Other/SwiftUI/Views/RoomHeaderView.swift +++ b/ElementX/Sources/Other/SwiftUI/Views/RoomHeaderView.swift @@ -18,8 +18,9 @@ struct RoomHeaderView: View { let mediaProvider: MediaProviderProtocol? var body: some View { - if ProcessInfo.isRunningAccessibilityTests { - // Accessibility tests scale up the dynamic size in real time which may break the view + if ProcessInfo.isRunningAccessibilityTests || ProcessInfo.processInfo.isiOSAppOnMac { + // 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 } else { content diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift index c0706a355..649f64d29 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -22,14 +22,7 @@ struct HomeScreen: View { actions: leaveRoomAlertActions, message: leaveRoomAlertMessage) .navigationTitle(L10n.screenRoomlistMainSpaceTitle) - .toolbar { - if #available(iOS 26, *) { - toolbar - .sharedBackgroundVisibility(.hidden) - } else { - toolbar - } - } + .toolbar { toolbar } .background(Color.compound.bgCanvasDefault.ignoresSafeArea()) .track(screen: .Home) .bloom() @@ -43,10 +36,12 @@ struct HomeScreen: View { ToolbarItem(placement: .navigationBarLeading) { settingsButton } + .backportSharedBackgroundVisibility(.hidden) ToolbarItem(placement: .primaryAction) { newRoomButton } + .backportSharedBackgroundVisibility(.hidden) } private var settingsButton: some View { diff --git a/ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift b/ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift index 04ebd0b46..2a3b1cc5a 100644 --- a/ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift +++ b/ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift @@ -47,15 +47,11 @@ struct MediaEventsTimelineScreen: View { if context.viewState.shouldShowEmptyState { emptyState } else { - if #available(iOS 26, *) { - scrollView - // Remove the glass effect of iOS 26+ - // A flipped table view will always trigger it - // since the nav bar thinks is always at the bottom. - .scrollEdgeEffectHidden() - } else { - scrollView - } + scrollView + // Remove the glass effect of iOS 26+ + // A flipped table view will always trigger it + // since the nav bar thinks is always at the bottom. + .backportScrollEdgeEffectHidden() } } diff --git a/ElementX/Sources/Screens/RoomScreen/ComposerToolbar/View/CompletionSuggestionView.swift b/ElementX/Sources/Screens/RoomScreen/ComposerToolbar/View/CompletionSuggestionView.swift index 28dce8003..83694ec82 100644 --- a/ElementX/Sources/Screens/RoomScreen/ComposerToolbar/View/CompletionSuggestionView.swift +++ b/ElementX/Sources/Screens/RoomScreen/ComposerToolbar/View/CompletionSuggestionView.swift @@ -99,7 +99,6 @@ private struct BackgroundView: View { .clipShape(RoundedCornerShape(radius: shadowRadius, corners: [.topLeft, .topRight])) .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))) - .edgesIgnoringSafeArea(.all) } } diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift b/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift index 4c119c31f..25bf55756 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift @@ -20,14 +20,7 @@ struct SpaceListScreen: View { } .navigationTitle(L10n.screenSpaceListTitle) .navigationBarTitleDisplayMode(.inline) - .toolbar { - if #available(iOS 26, *) { - toolbar - .sharedBackgroundVisibility(.hidden) - } else { - toolbar - } - } + .toolbar { toolbar } .background(Color.compound.bgCanvasDefault.ignoresSafeArea()) .bloom() } @@ -90,11 +83,13 @@ struct SpaceListScreen: View { } .accessibilityLabel(L10n.commonSettings) } + .backportSharedBackgroundVisibility(.hidden) ToolbarItem(placement: .principal) { // Hides the navigationTitle (which is set for the navigation stack label). Text("").accessibilityHidden(true) } + .backportSharedBackgroundVisibility(.hidden) } } diff --git a/ElementX/Sources/Screens/Timeline/View/ItemMenu/TimelineItemMenu.swift b/ElementX/Sources/Screens/Timeline/View/ItemMenu/TimelineItemMenu.swift index c1972c9a5..b6982bdfa 100644 --- a/ElementX/Sources/Screens/Timeline/View/ItemMenu/TimelineItemMenu.swift +++ b/ElementX/Sources/Screens/Timeline/View/ItemMenu/TimelineItemMenu.swift @@ -52,7 +52,7 @@ struct TimelineItemMenu: View { } } .accessibilityIdentifier(A11yIdentifiers.roomScreen.timelineItemActionMenu) - .presentationPage() + .backportPresentationSizingPage() .presentationDetents([.medium, .large]) .presentationBackground(Color.compound.bgCanvasDefault) .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 struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview { diff --git a/ElementX/Sources/Screens/Timeline/View/Polls/PollView.swift b/ElementX/Sources/Screens/Timeline/View/Polls/PollView.swift index df7165b3f..adfc2f3ef 100644 --- a/ElementX/Sources/Screens/Timeline/View/Polls/PollView.swift +++ b/ElementX/Sources/Screens/Timeline/View/Polls/PollView.swift @@ -92,13 +92,9 @@ struct PollView: View { private var optionsView: some View { ForEach(poll.options, id: \.id) { option in - if #available(iOS 18, *) { - pollOption(option: option) - .accessibilityHint(L10n.a11yPollsWillRemoveSelection, - isEnabled: isRemovePreviousSelectionHintEnabled(option: option)) - } else { - pollOption(option: option) - } + pollOption(option: option) + .backportAccessibilityHint(L10n.a11yPollsWillRemoveSelection, + isEnabled: isRemovePreviousSelectionHintEnabled(option: option)) } } diff --git a/ElementX/Sources/Services/Room/RoomSummary/RoomEventStringBuilder.swift b/ElementX/Sources/Services/Room/RoomSummary/RoomEventStringBuilder.swift index 7ccfbd728..71d00a65a 100644 --- a/ElementX/Sources/Services/Room/RoomSummary/RoomEventStringBuilder.swift +++ b/ElementX/Sources/Services/Room/RoomSummary/RoomEventStringBuilder.swift @@ -55,7 +55,7 @@ struct RoomEventStringBuilder { default: L10n.commonWaitingForDecryptionKey } 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. } case .failedToParseMessageLike, .failedToParseState: diff --git a/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineItemFactory.swift b/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineItemFactory.swift index 2cd162910..7a3267637 100644 --- a/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineItemFactory.swift +++ b/ElementX/Sources/Services/Timeline/TimelineItems/RoomTimelineItemFactory.swift @@ -40,7 +40,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol { return buildRedactedTimelineItem(eventItemProxy, messageLikeContent, isOutgoing) case .unableToDecrypt(let encryptedMessage): 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. } case .failedToParseMessageLike(let eventType, let error): diff --git a/ElementX/Sources/Services/Timeline/TimelineProxy.swift b/ElementX/Sources/Services/Timeline/TimelineProxy.swift index 877c56768..2d3b45db8 100644 --- a/ElementX/Sources/Services/Timeline/TimelineProxy.swift +++ b/ElementX/Sources/Services/Timeline/TimelineProxy.swift @@ -467,7 +467,7 @@ final class TimelineProxy: TimelineProxyProtocol { MXLog.info("Toggling reaction \(reaction) for event: \(eventOrTransactionID)") 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)") return .success(()) } catch { diff --git a/ElementX/Sources/Services/UserSession/RestorationToken.swift b/ElementX/Sources/Services/UserSession/RestorationToken.swift index 6f8ae0ab1..8d022ab54 100644 --- a/ElementX/Sources/Services/UserSession/RestorationToken.swift +++ b/ElementX/Sources/Services/UserSession/RestorationToken.swift @@ -57,7 +57,7 @@ extension RestorationToken: Codable { } } -extension MatrixRustSDK.Session: Codable { +extension MatrixRustSDK.Session: @retroactive Codable { public init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) diff --git a/ElementX/Sources/UITests/UITestsSignalling.swift b/ElementX/Sources/UITests/UITestsSignalling.swift index 8f707d306..6b389e51d 100644 --- a/ElementX/Sources/UITests/UITestsSignalling.swift +++ b/ElementX/Sources/UITests/UITestsSignalling.swift @@ -9,7 +9,7 @@ import Combine import KZFileWatchers import SwiftUI -extension Notification.Name: Codable { } +extension Notification.Name: @retroactive Codable { } enum UITestsSignal: Codable, Equatable { /// An internal signal used to indicate that one side of the connection is ready. diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-en-GB-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-en-GB-0.png index d19bb7280..5d7d0c51f 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-en-GB-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-en-GB-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:850872071e8b5915603490be276665b781c6cc3fc5f1620ae2fd6263b07d0b08 -size 99216 +oid sha256:0df4048601119a0808c12b35d6302c842b7e2cf7d25600d2dd2ae0b4f7ba2ede +size 99354 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-en-GB-1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-en-GB-1.png index fc28d0d1e..0bca93ca8 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-en-GB-1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-en-GB-1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1e7ca6b6b2965e992f5068273af35b4f2f5425326551674cc3b0bec7f49e013 -size 80689 +oid sha256:543ad54d777a9fd6f744b288c0c0235259d1c0e62cb3d1e26b492c18f726f842 +size 80874 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-pseudo-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-pseudo-0.png index d19bb7280..5d7d0c51f 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-pseudo-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-pseudo-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:850872071e8b5915603490be276665b781c6cc3fc5f1620ae2fd6263b07d0b08 -size 99216 +oid sha256:0df4048601119a0808c12b35d6302c842b7e2cf7d25600d2dd2ae0b4f7ba2ede +size 99354 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-pseudo-1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-pseudo-1.png index fc28d0d1e..0bca93ca8 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-pseudo-1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPad-pseudo-1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1e7ca6b6b2965e992f5068273af35b4f2f5425326551674cc3b0bec7f49e013 -size 80689 +oid sha256:543ad54d777a9fd6f744b288c0c0235259d1c0e62cb3d1e26b492c18f726f842 +size 80874 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-en-GB-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-en-GB-0.png index 0cc29eb5e..94a3bbb1d 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-en-GB-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-en-GB-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98e2b2cdab292a01ed1480a10e1e31d4ba634b48b132d3ebe4b23f93f31dabd3 -size 54559 +oid sha256:ea44d602dcab96041250a3ac2548936a3e1dfa77c2be234424383c73904b881a +size 54665 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-en-GB-1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-en-GB-1.png index 354f46086..b8734f973 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-en-GB-1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-en-GB-1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9c50c2096a9d5e5113d88541cf8e5b4d3045586414357ae096bea037db4739c -size 39716 +oid sha256:6d6588cafee096a7bf0f891047bd174c0da05eb110acc1eeebd082db5de1d196 +size 39813 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-pseudo-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-pseudo-0.png index 0cc29eb5e..94a3bbb1d 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-pseudo-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-pseudo-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98e2b2cdab292a01ed1480a10e1e31d4ba634b48b132d3ebe4b23f93f31dabd3 -size 54559 +oid sha256:ea44d602dcab96041250a3ac2548936a3e1dfa77c2be234424383c73904b881a +size 54665 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-pseudo-1.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-pseudo-1.png index 354f46086..b8734f973 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-pseudo-1.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/completionSuggestion.iPhone-16-pseudo-1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9c50c2096a9d5e5113d88541cf8e5b4d3045586414357ae096bea037db4739c -size 39716 +oid sha256:6d6588cafee096a7bf0f891047bd174c0da05eb110acc1eeebd082db5de1d196 +size 39813 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPad-en-GB.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPad-en-GB.png index 9099a648a..7f096c4ab 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPad-en-GB.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPad-en-GB.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1586c67413d70917cff66ec2e9a9805f5128d7adf9a462ae4a739ea9df7984d -size 108204 +oid sha256:7b900bb2a2da0750a6f4bf14e07b5ae0b884325844f7672417f05b91a6d07aeb +size 108348 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPad-pseudo.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPad-pseudo.png index 90e6a83e5..503bed84d 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPad-pseudo.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPad-pseudo.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:425ce93eb6169673298f7bf05f2125bf6fb86809abc46273861bec324e24c635 -size 108619 +oid sha256:46ba3c105adda9a91f1b6227b15455200b8b1f5b8e87d6826067cdfec5dca334 +size 108764 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPhone-16-en-GB.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPhone-16-en-GB.png index c7126ca79..9b9a8a299 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPhone-16-en-GB.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPhone-16-en-GB.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b5bcf8c408e25881df6b552614b8181bc71858a52894ce7354240c1f3f1b6fc -size 62582 +oid sha256:9a2a6c34e7e14ecee0dcc66f519f95344ce67a9029f21727d6325d195e3320d0 +size 62683 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPhone-16-pseudo.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPhone-16-pseudo.png index e3c38f141..4429f339f 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPhone-16-pseudo.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/composerToolbar.With-Suggestions-iPhone-16-pseudo.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8868848eeeb66d2b1bf2ce93e0c8c36f309e315c8edf3f26361ee1b91b68a1be -size 62995 +oid sha256:2120e2fc71bf507895247ed0443a0be8e031fb64918e298b0a8e567101e0c4f7 +size 63096 diff --git a/compound-ios/Sources/Compound/Icons/CompoundIcon.swift b/compound-ios/Sources/Compound/Icons/CompoundIcon.swift index 3b600a2ab..134bcd565 100644 --- a/compound-ios/Sources/Compound/Icons/CompoundIcon.swift +++ b/compound-ios/Sources/Compound/Icons/CompoundIcon.swift @@ -182,8 +182,7 @@ struct CompoundIcon_Previews: PreviewProvider, TestablePreview { static var accessibilityLabels: some View { Grid(alignment: .leading) { - ForEach(DynamicTypeSize.allCases, id: \.self) { - size in + ForEach(DynamicTypeSize.allCases, id: \.self) { size in GridRow { Label("Test XS", icon: \.userProfile, iconSize: .xSmall, relativeTo: .compound.bodyXS) .font(.compound.bodyXS)