From 5d4cccb6504b00712f2a15cefeb23b604879a6d0 Mon Sep 17 00:00:00 2001 From: Yash Singh Date: Sun, 23 Aug 2026 17:30:40 -0500 Subject: [PATCH 1/6] feat: support ios 16 for swiftui --- .../App/Cloud/T3ConnectCapability.swift | 15 +- .../App/Platform/PlatformIncomingShare.swift | 9 +- .../App/Platform/PlatformRootView.swift | 16 +- apps/swift-ios/App/T3CodeApp.swift | 4 +- apps/swift-ios/DesignSystem/T3Theme.swift | 186 ++++++++++++++++++ .../Widgets/RecentTasksWidget.swift | 24 ++- .../Chat/FeatureComposerRequestViews.swift | 4 +- .../Features/Chat/FeatureComposerView.swift | 2 +- .../Features/Chat/MarkdownMessageView.swift | 11 ++ .../Features/Chat/ThreadDetailView.swift | 16 +- .../Connection/ConnectionOnboardingView.swift | 10 +- .../Features/Connection/T3ConnectView.swift | 20 +- .../Features/Devices/DevicesView.swift | 4 +- .../Features/Files/FeatureFilesView.swift | 6 +- .../PullRequests/PullRequestsView.swift | 108 +++++----- .../Features/Review/FeatureReviewView.swift | 8 +- .../Features/Root/FeatureRootModel.swift | 29 ++- .../Features/Root/FeatureRootView.swift | 6 +- .../Features/Settings/ConnectionsView.swift | 6 +- .../Features/Settings/SettingsView.swift | 6 +- .../FeatureSourceControlView.swift | 2 +- .../Terminal/FeatureTerminalView.swift | 2 +- .../Terminal/TerminalSurfaceView.swift | 12 +- apps/swift-ios/Features/Usage/UsageView.swift | 6 +- .../Workspace/HomeThreadCollectionView.swift | 2 +- .../Features/Workspace/NewThreadView.swift | 34 ++-- .../Workspace/ProjectAndArchiveViews.swift | 10 +- .../Workspace/ProviderModelPicker.swift | 39 ++-- .../Features/Workspace/WorkspaceView.swift | 79 ++++++-- apps/swift-ios/README.md | 4 +- .../T3Code.xcodeproj/project.pbxproj | 22 +-- .../FeatureTests/FeatureRootModelTests.swift | 82 +++----- 32 files changed, 512 insertions(+), 272 deletions(-) diff --git a/apps/swift-ios/App/Cloud/T3ConnectCapability.swift b/apps/swift-ios/App/Cloud/T3ConnectCapability.swift index 353df8937720..8acec46b4ddb 100644 --- a/apps/swift-ios/App/Cloud/T3ConnectCapability.swift +++ b/apps/swift-ios/App/Cloud/T3ConnectCapability.swift @@ -1,6 +1,6 @@ +import Combine import ClerkKit import Foundation -import Observation import OSLog public extension Notification.Name { @@ -50,8 +50,7 @@ protocol T3ConnectDeviceManaging: AnyObject { } @MainActor -@Observable -public final class T3ConnectController: T3ConnectDeviceManaging { +public final class T3ConnectController: ObservableObject, T3ConnectDeviceManaging { private static let logger = Logger( subsystem: "codes.t3.swift-ios", category: "T3Connect" @@ -59,7 +58,7 @@ public final class T3ConnectController: T3ConnectDeviceManaging { public let resolution: T3ConnectConfigurationResolution public let managedAuthorizer: T3ConnectManagedEnvironmentAuthorizer - public private(set) var account: T3ConnectAccount? { + @Published public private(set) var account: T3ConnectAccount? { didSet { guard oldValue != account else { return } var accountIDs: [String: String] = [:] @@ -76,10 +75,10 @@ public final class T3ConnectController: T3ConnectDeviceManaging { ) } } - public private(set) var environments: [T3ConnectCloudEnvironment] = [] - public private(set) var isRefreshing = false - public private(set) var busyEnvironmentID: String? - public var errorMessage: String? + @Published public private(set) var environments: [T3ConnectCloudEnvironment] = [] + @Published public private(set) var isRefreshing = false + @Published public private(set) var busyEnvironmentID: String? + @Published public var errorMessage: String? private let auth: T3ConnectClerkSession? private let relay: T3ConnectRelayClient? diff --git a/apps/swift-ios/App/Platform/PlatformIncomingShare.swift b/apps/swift-ios/App/Platform/PlatformIncomingShare.swift index e4ae2f836aed..032103e18086 100644 --- a/apps/swift-ios/App/Platform/PlatformIncomingShare.swift +++ b/apps/swift-ios/App/Platform/PlatformIncomingShare.swift @@ -1,5 +1,5 @@ +import Combine import Foundation -import Observation import SwiftUI enum PlatformIncomingShareError: LocalizedError, Equatable { @@ -161,10 +161,9 @@ struct PlatformIncomingSharePipeline: Sendable { } @MainActor -@Observable -final class PlatformIncomingShareCoordinator { - private(set) var pendingEnvelope: T3IncomingShareEnvelope? - private(set) var isImporting = false +final class PlatformIncomingShareCoordinator: ObservableObject { + @Published private(set) var pendingEnvelope: T3IncomingShareEnvelope? + @Published private(set) var isImporting = false private let pipeline: PlatformIncomingSharePipeline private var isRefreshing = false diff --git a/apps/swift-ios/App/Platform/PlatformRootView.swift b/apps/swift-ios/App/Platform/PlatformRootView.swift index b4fe3ab1223f..992b7ec37c57 100644 --- a/apps/swift-ios/App/Platform/PlatformRootView.swift +++ b/apps/swift-ios/App/Platform/PlatformRootView.swift @@ -2,13 +2,13 @@ import SwiftUI struct PlatformRootView: View { @SwiftUI.Environment(\.scenePhase) private var scenePhase - @Bindable private var model: FeatureRootModel + @ObservedObject private var model: FeatureRootModel @State private var navigationRequest: FeatureWorkspaceNavigationRequest? @State private var pendingRoute: PlatformRoute? @State private var previousThreadStates: [String: FeatureThreadState]? @State private var lastNotificationPreference: Bool? - @State private var incomingShareCoordinator = PlatformIncomingShareCoordinator() + @StateObject private var incomingShareCoordinator = PlatformIncomingShareCoordinator() @State private var incomingShareNeedsProject = false @State private var importedShareProjectID: String? @State private var recentThreadsPersistenceTask: Task? @@ -64,7 +64,7 @@ struct PlatformRootView: View { await model.removeManagedEnvironmentsAfterAccountChange() } } - .onChange(of: model.isLoading, initial: true) { _, isLoading in + .t3OnChange(of: model.isLoading, initial: true) { _, isLoading in guard !isLoading else { return } processThreadChanges() synchronizeNotificationPreference() @@ -73,10 +73,10 @@ struct PlatformRootView: View { consumeMailboxRouteIfAvailable() refreshIncomingShares() } - .onChange(of: model.homePresentationRevision) { _, _ in + .t3OnChange(of: model.homePresentationRevision) { _, _ in processThreadChanges() } - .onChange(of: scenePhase) { _, phase in + .t3OnChange(of: scenePhase) { _, phase in if phase == .active { consumeMailboxRouteIfAvailable() synchronizeNotificationPreference() @@ -86,15 +86,15 @@ struct PlatformRootView: View { PlatformBackgroundRefreshCoordinator.shared.schedule() } } - .onChange(of: model.snapshot.settings.notificationsEnabled) { _, _ in + .t3OnChange(of: model.snapshot.settings.notificationsEnabled) { _, _ in synchronizeNotificationPreference() synchronizeCloudDelivery() } - .onChange(of: model.snapshot.settings.liveActivitiesEnabled) { _, _ in + .t3OnChange(of: model.snapshot.settings.liveActivitiesEnabled) { _, _ in synchronizeAgentAwareness() synchronizeCloudDelivery() } - .onChange(of: model.snapshot.projects.map(\.id)) { _, _ in + .t3OnChange(of: model.snapshot.projects.map(\.id)) { _, _ in refreshIncomingShares() } .sheet(item: presentedIncomingShare, onDismiss: openImportedShareDraft) { envelope in diff --git a/apps/swift-ios/App/T3CodeApp.swift b/apps/swift-ios/App/T3CodeApp.swift index d2854016003a..1463837a828d 100644 --- a/apps/swift-ios/App/T3CodeApp.swift +++ b/apps/swift-ios/App/T3CodeApp.swift @@ -4,12 +4,12 @@ import SwiftUI @MainActor struct T3CodeApp: App { @UIApplicationDelegateAdaptor(T3PlatformAppDelegate.self) private var appDelegate - @State private var model: FeatureRootModel + @StateObject private var model: FeatureRootModel init() { let client = NativeFeatureClient() let model = FeatureRootModel(client: client) - _model = State(initialValue: model) + _model = StateObject(wrappedValue: model) PlatformCloudDeliveryCoordinator.shared.install( controller: client.t3ConnectController ) diff --git a/apps/swift-ios/DesignSystem/T3Theme.swift b/apps/swift-ios/DesignSystem/T3Theme.swift index 1c52485650de..4cf25b51a843 100644 --- a/apps/swift-ios/DesignSystem/T3Theme.swift +++ b/apps/swift-ios/DesignSystem/T3Theme.swift @@ -99,9 +99,195 @@ enum T3Metrics { static let readingWidth: CGFloat = 760 } +/// Back-deploys the standard iOS 17 empty-state presentation to iOS 16. +struct T3ContentUnavailableView: View { + private let label: AnyView + private let description: AnyView + private let actions: AnyView + private let searchText: String? + + init( + _ title: String, + systemImage: String, + description: Text? = nil + ) { + label = AnyView(Label(title, systemImage: systemImage)) + self.description = description.map { AnyView($0) } ?? AnyView(EmptyView()) + actions = AnyView(EmptyView()) + searchText = nil + } + + init( + @ViewBuilder label: () -> LabelContent, + @ViewBuilder description: () -> DescriptionContent + ) { + self.label = AnyView(label()) + self.description = AnyView(description()) + actions = AnyView(EmptyView()) + searchText = nil + } + + init( + @ViewBuilder label: () -> LabelContent, + @ViewBuilder description: () -> DescriptionContent, + @ViewBuilder actions: () -> ActionsContent + ) { + self.label = AnyView(label()) + self.description = AnyView(description()) + self.actions = AnyView(actions()) + searchText = nil + } + + @ViewBuilder + var body: some View { + if #available(iOS 17.0, *) { + if let searchText { + ContentUnavailableView.search(text: searchText) + } else { + ContentUnavailableView { + label + } description: { + description + } actions: { + actions + } + } + } else { + fallback + } + } + + private var fallback: some View { + VStack(spacing: 12) { + label + .font(.title3.weight(.semibold)) + .foregroundStyle(T3Colors.textPrimary) + description + .font(T3Typography.threadBody) + .foregroundStyle(T3Colors.textSecondary) + .multilineTextAlignment(.center) + actions + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .padding(24) + } + + static func search(text: String) -> Self { + Self( + text.isEmpty ? "No results" : "No results for “\(text)”", + systemImage: "magnifyingglass", + searchText: text + ) + } + + private init( + _ title: String, + systemImage: String, + searchText: String + ) { + label = AnyView(Label(title, systemImage: systemImage)) + description = AnyView(EmptyView()) + actions = AnyView(EmptyView()) + self.searchText = searchText + } +} + extension View { func t3NavigationChrome() -> some View { toolbarBackground(T3Colors.sheet, for: .navigationBar) .toolbarBackground(.visible, for: .navigationBar) } + + @ViewBuilder + func t3PresentationBackground(_ color: Color) -> some View { + if #available(iOS 16.4, *) { + presentationBackground(color) + } else { + background(color) + } + } + + @ViewBuilder + func t3ListSectionSpacing(_ spacing: CGFloat) -> some View { + if #available(iOS 17.0, *) { + listSectionSpacing(spacing) + } else { + self + } + } + + @ViewBuilder + func t3ScrollBounceBasedOnSize() -> some View { + if #available(iOS 16.4, *) { + scrollBounceBehavior(.basedOnSize) + } else { + self + } + } + + /// iOS 16-compatible form of the two-value `onChange` API introduced in iOS 17. + /// Uses the native modifier on iOS 17; the manual tracking below exists only for iOS 16. + @ViewBuilder + func t3OnChange( + of value: Value, + initial: Bool = false, + perform action: @escaping (_ oldValue: Value, _ newValue: Value) -> Void + ) -> some View { + if #available(iOS 17.0, *) { + onChange(of: value, initial: initial, action) + } else { + modifier(T3OnChangeModifier(value: value, initial: initial, action: action)) + } + } + + func t3OnChange( + of value: Value, + initial: Bool = false, + perform action: @escaping (_ newValue: Value) -> Void + ) -> some View { + t3OnChange(of: value, initial: initial) { _, newValue in action(newValue) } + } + + func t3OnChange( + of value: Value, + initial: Bool = false, + perform action: @escaping () -> Void + ) -> some View { + t3OnChange(of: value, initial: initial) { _, _ in action() } + } +} + +private struct T3OnChangeModifier: ViewModifier { + let value: Value + let initial: Bool + let action: (_ oldValue: Value, _ newValue: Value) -> Void + + @State private var previous: Value + @State private var didAppear = false + + init( + value: Value, + initial: Bool, + action: @escaping (_ oldValue: Value, _ newValue: Value) -> Void + ) { + self.value = value + self.initial = initial + self.action = action + _previous = State(initialValue: value) + } + + func body(content: Content) -> some View { + content + .onAppear { + guard !didAppear else { return } + didAppear = true + previous = value + if initial { action(value, value) } + } + .onChange(of: value) { newValue in + let oldValue = previous + previous = newValue + action(oldValue, newValue) + } + } } diff --git a/apps/swift-ios/Extensions/Widgets/RecentTasksWidget.swift b/apps/swift-ios/Extensions/Widgets/RecentTasksWidget.swift index c1ced6e9ca7c..be7d8d14b002 100644 --- a/apps/swift-ios/Extensions/Widgets/RecentTasksWidget.swift +++ b/apps/swift-ios/Extensions/Widgets/RecentTasksWidget.swift @@ -29,7 +29,7 @@ struct T3RecentTasksWidget: Widget { var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: T3TaskWidgetProvider()) { entry in T3TaskWidgetView(entry: entry) - .containerBackground(Color(uiColor: .systemBackground), for: .widget) + .t3WidgetBackground() } .configurationDisplayName("T3 Code Tasks") .description("See active and recent T3 Code tasks at a glance.") @@ -37,6 +37,26 @@ struct T3RecentTasksWidget: Widget { } } +private extension View { + @ViewBuilder + func t3LegacyWidgetContentMargins() -> some View { + if #available(iOSApplicationExtension 17.0, *) { + self + } else { + padding() + } + } + + @ViewBuilder + func t3WidgetBackground() -> some View { + if #available(iOSApplicationExtension 17.0, *) { + containerBackground(Color(uiColor: .systemBackground), for: .widget) + } else { + background(Color(uiColor: .systemBackground)) + } + } +} + private struct T3TaskWidgetView: View { @Environment(\.widgetFamily) private var family let entry: T3TaskWidgetEntry @@ -88,6 +108,7 @@ private struct T3TaskWidgetView: View { } } .widgetURL(orderedTasks.first?.nativeDeepLinkURL ?? T3WidgetURLs.newTask) + .t3LegacyWidgetContentMargins() } private var mediumView: some View { @@ -128,6 +149,7 @@ private struct T3TaskWidgetView: View { } } } + .t3LegacyWidgetContentMargins() } private var accessoryView: some View { diff --git a/apps/swift-ios/Features/Chat/FeatureComposerRequestViews.swift b/apps/swift-ios/Features/Chat/FeatureComposerRequestViews.swift index 14723557edd9..6e94dedf8a09 100644 --- a/apps/swift-ios/Features/Chat/FeatureComposerRequestViews.swift +++ b/apps/swift-ios/Features/Chat/FeatureComposerRequestViews.swift @@ -263,11 +263,11 @@ struct FeatureComposerUserInputPanel: View { .opacity(isResponding ? 0.56 : 1) } } - .onChange(of: input.id) { + .t3OnChange(of: input.id) { answers = [:] questionIndex = 0 } - .onChange(of: questionIDs) { previousIDs, currentIDs in + .t3OnChange(of: questionIDs) { previousIDs, currentIDs in questionIndex = FeatureComposerQuestionReconciliation.index( current: questionIndex, previousQuestionIDs: previousIDs, diff --git a/apps/swift-ios/Features/Chat/FeatureComposerView.swift b/apps/swift-ios/Features/Chat/FeatureComposerView.swift index 7b32f9bc2b0c..08a2cda3d726 100644 --- a/apps/swift-ios/Features/Chat/FeatureComposerView.swift +++ b/apps/swift-ios/Features/Chat/FeatureComposerView.swift @@ -117,7 +117,7 @@ struct FeatureComposerView: View { ) .ignoresSafeArea() } - .onChange(of: focused) { + .t3OnChange(of: focused) { if FeatureComposerCollapsePolicy.shouldCollapse( isFocused: focused, textIsEmpty: textIsEmpty, diff --git a/apps/swift-ios/Features/Chat/MarkdownMessageView.swift b/apps/swift-ios/Features/Chat/MarkdownMessageView.swift index 9b8adca4d82b..1c8b4d3cbb5a 100644 --- a/apps/swift-ios/Features/Chat/MarkdownMessageView.swift +++ b/apps/swift-ios/Features/Chat/MarkdownMessageView.swift @@ -801,6 +801,7 @@ private struct MarkdownInlineText: UIViewRepresentable { return UIMenu(children: suggestedActions + [copyMessage]) } + @available(iOS 17.0, *) func textView( _ textView: UITextView, primaryActionFor textItem: UITextItem, @@ -812,6 +813,16 @@ private struct MarkdownInlineText: UIViewRepresentable { } } + func textView( + _ textView: UITextView, + shouldInteractWith url: URL, + in characterRange: NSRange, + interaction: UITextItemInteraction + ) -> Bool { + onOpenURL?(url) + return false + } + private func copyMessage() { UIPasteboard.general.string = selectionContext.source.text } diff --git a/apps/swift-ios/Features/Chat/ThreadDetailView.swift b/apps/swift-ios/Features/Chat/ThreadDetailView.swift index 19661c54ab3d..79c3941756ef 100644 --- a/apps/swift-ios/Features/Chat/ThreadDetailView.swift +++ b/apps/swift-ios/Features/Chat/ThreadDetailView.swift @@ -7,7 +7,7 @@ public struct ThreadDetailView: View { @SwiftUI.Environment(\.horizontalSizeClass) private var horizontalSizeClass @SwiftUI.Environment(\.scenePhase) private var scenePhase - @Bindable var model: FeatureRootModel + @ObservedObject var model: FeatureRootModel let thread: FeatureThread let submitMessage: (FeatureMessageSubmission) async -> Bool let onNavigateBack: () -> Void @@ -48,7 +48,7 @@ public struct ThreadDetailView: View { } else if isLoading { FeatureThreadOpeningView() } else { - ContentUnavailableView { + T3ContentUnavailableView { Label("Thread unavailable", systemImage: "exclamationmark.bubble") } description: { Text("The thread could not be loaded.") @@ -77,10 +77,10 @@ public struct ThreadDetailView: View { await restoreDraft(from: restoreBaseline, key: restoreKey) isLoading = false } - .onChange(of: draft) { scheduleDraftSave() } - .onChange(of: attachments) { scheduleDraftSave() } - .onChange(of: selection) { scheduleDraftSave() } - .onChange(of: scenePhase) { _, phase in + .t3OnChange(of: draft) { scheduleDraftSave() } + .t3OnChange(of: attachments) { scheduleDraftSave() } + .t3OnChange(of: selection) { scheduleDraftSave() } + .t3OnChange(of: scenePhase) { _, phase in if phase != .active { persistDraftBeforeLeaving() } @@ -353,7 +353,7 @@ public struct ThreadDetailView: View { || detail.thread.state == .monitoring return Group { if detail.messages.isEmpty, !isWorking { - ContentUnavailableView( + T3ContentUnavailableView( "Ready for a task", systemImage: "sparkles", description: Text("Tell the agent what you want to build.") @@ -1986,7 +1986,7 @@ private struct FeatureAttachmentPreview: View { .resizable() .scaledToFit() case .failure: - ContentUnavailableView( + T3ContentUnavailableView( "Image unavailable", systemImage: "exclamationmark.triangle" ) diff --git a/apps/swift-ios/Features/Connection/ConnectionOnboardingView.swift b/apps/swift-ios/Features/Connection/ConnectionOnboardingView.swift index 46f0bcf60bf7..3fa98e7714ae 100644 --- a/apps/swift-ios/Features/Connection/ConnectionOnboardingView.swift +++ b/apps/swift-ios/Features/Connection/ConnectionOnboardingView.swift @@ -3,7 +3,7 @@ import UIKit public struct ConnectionOnboardingView: View { @SwiftUI.Environment(\.scenePhase) private var scenePhase - @Bindable private var model: FeatureRootModel + @ObservedObject private var model: FeatureRootModel private let readinessChecker: any ConnectionReadinessChecking private let onConnected: @MainActor () -> Void @@ -108,7 +108,7 @@ public struct ConnectionOnboardingView: View { .onOpenURL { url in applyConnectionString(url.absoluteString, heading: "Confirm connection") } - .onChange(of: scenePhase) { _, newPhase in + .t3OnChange(of: scenePhase) { _, newPhase in if newPhase == .active, showsPermissionAction { showsPermissionAction = false errorMessage = nil @@ -289,7 +289,7 @@ public struct ConnectionOnboardingView: View { "Server address", text: $endpoint, prompt: Text("http://192.168.1.5:3773") - .foregroundStyle(T3Colors.placeholder) + .foregroundColor(T3Colors.placeholder) ) .textInputAutocapitalization(.never) .keyboardType(.URL) @@ -300,7 +300,7 @@ public struct ConnectionOnboardingView: View { .accessibilityIdentifier("connection-onboarding-address") .submitLabel(.next) .onSubmit { focusedField = .pairingCode } - .onChange(of: endpoint) { _, value in + .t3OnChange(of: endpoint) { _, value in autofillIfPairingLink(value) } } @@ -314,7 +314,7 @@ public struct ConnectionOnboardingView: View { "Pairing code", text: $pairingCode, prompt: Text("Enter pairing code") - .foregroundStyle(T3Colors.placeholder) + .foregroundColor(T3Colors.placeholder) ) .textInputAutocapitalization(.never) .textContentType(.oneTimeCode) diff --git a/apps/swift-ios/Features/Connection/T3ConnectView.swift b/apps/swift-ios/Features/Connection/T3ConnectView.swift index d4c28399b285..b3519218ba13 100644 --- a/apps/swift-ios/Features/Connection/T3ConnectView.swift +++ b/apps/swift-ios/Features/Connection/T3ConnectView.swift @@ -9,7 +9,7 @@ public struct T3ConnectView: View { } @SwiftUI.Environment(\.dismiss) private var dismiss - @Bindable private var controller: T3ConnectController + @ObservedObject private var controller: T3ConnectController @State private var isAuthPresented = false @State private var didFinishInitialRefresh = false @State private var connectingEnvironmentID: String? @@ -28,7 +28,7 @@ public struct T3ConnectView: View { onConnected: @escaping @MainActor () async -> Void = {}, onUnlinked: @escaping @MainActor (String) async -> Void = { _ in } ) { - controller = capability.t3ConnectController + _controller = ObservedObject(wrappedValue: capability.t3ConnectController) connectEnvironment = capability.connectT3Environment signOut = if let model { model.signOutT3Connect @@ -55,7 +55,7 @@ public struct T3ConnectView: View { didFinishInitialRefresh = true presentAuthenticationIfNeeded() } - .onChange(of: controller.account?.id) { _, accountID in + .t3OnChange(of: controller.account?.id) { _, accountID in guard didFinishInitialRefresh, !isSigningOut, accountID == nil, @@ -108,7 +108,7 @@ public struct T3ConnectView: View { content() } .listStyle(.plain) - .listSectionSpacing(28) + .t3ListSectionSpacing(28) .scrollContentBackground(.hidden) .background(T3Colors.background.ignoresSafeArea()) } @@ -160,8 +160,8 @@ public struct T3ConnectView: View { } return false } - .environment(\.clerkTheme, T3ConnectClerkAppearance.theme) - .environment(clerk) + .environment(\.clerkTheme, T3ConnectClerkAppearance.theme) + .environmentObject(clerk) } else { loadingView("Loading sign-in") } @@ -393,7 +393,7 @@ public struct T3ConnectView: View { @MainActor private struct T3ConnectAuthenticationView: View { @SwiftUI.Environment(\.dismiss) private var dismiss - @SwiftUI.Environment(Clerk.self) private var clerk + @EnvironmentObject private var clerk: Clerk @State private var activeProvider: OAuthProvider? @State private var errorMessage: String? @State private var isEmailPresented = false @@ -441,7 +441,7 @@ private struct T3ConnectAuthenticationView: View { .padding(.bottom, 40) .frame(maxWidth: .infinity) } - .scrollBounceBehavior(.basedOnSize) + .t3ScrollBounceBasedOnSize() .background(T3Colors.background.ignoresSafeArea()) .toolbar { ToolbarItem(placement: .topBarTrailing) { @@ -469,7 +469,7 @@ private struct T3ConnectAuthenticationView: View { AuthView(mode: .signInOrUp) .prefetchClerkImages() .environment(\.clerkTheme, T3ConnectClerkAppearance.theme) - .environment(clerk) + .environmentObject(clerk) } .alert( "Couldn’t sign in", @@ -624,8 +624,10 @@ private struct T3ConnectAuthProviderIcon: View { .foregroundStyle(T3Colors.textPrimary) case .github: Image("AuthGitHub") + .renderingMode(.template) .resizable() .scaledToFit() + .foregroundStyle(T3Colors.textPrimary) case .google: Image("AuthGoogle") .resizable() diff --git a/apps/swift-ios/Features/Devices/DevicesView.swift b/apps/swift-ios/Features/Devices/DevicesView.swift index 59a2a80a612e..914d71193f92 100644 --- a/apps/swift-ios/Features/Devices/DevicesView.swift +++ b/apps/swift-ios/Features/Devices/DevicesView.swift @@ -24,7 +24,7 @@ public struct DevicesView: View { .foregroundStyle(T3Colors.textSecondary) } } else if let errorMessage, sessions.isEmpty { - ContentUnavailableView { + T3ContentUnavailableView { Label("Couldn’t load devices", systemImage: "exclamationmark.circle") } description: { Text(errorMessage) @@ -35,7 +35,7 @@ public struct DevicesView: View { .buttonStyle(.borderedProminent) } } else if sessions.isEmpty { - ContentUnavailableView { + T3ContentUnavailableView { Label("No devices found", systemImage: "laptopcomputer.and.iphone") } description: { Text("Device sessions will appear here when this server supports access management.") diff --git a/apps/swift-ios/Features/Files/FeatureFilesView.swift b/apps/swift-ios/Features/Files/FeatureFilesView.swift index c18d62bce57f..3e2fec82c82f 100644 --- a/apps/swift-ios/Features/Files/FeatureFilesView.swift +++ b/apps/swift-ios/Features/Files/FeatureFilesView.swift @@ -35,13 +35,13 @@ private struct FeatureFileDirectoryView: View { ProgressView("Loading files…") .frame(maxWidth: .infinity, maxHeight: .infinity) } else if let errorMessage, entries.isEmpty { - ContentUnavailableView( + T3ContentUnavailableView( "Files unavailable", systemImage: "folder.badge.questionmark", description: Text(errorMessage) ) } else if filteredEntries.isEmpty { - ContentUnavailableView( + T3ContentUnavailableView( searchText.isEmpty ? "Empty folder" : "No matches", systemImage: "folder", description: Text(searchText.isEmpty ? "This folder has no visible files." : "Try another search.") @@ -204,7 +204,7 @@ private struct FeatureFilePreviewView: View { } } } else { - ContentUnavailableView( + T3ContentUnavailableView( previewKind == .image ? "Image unavailable" : "File unavailable", systemImage: previewKind == .image ? "photo.badge.exclamationmark" : "doc.badge.ellipsis", description: Text(errorMessage ?? "The file could not be read.") diff --git a/apps/swift-ios/Features/PullRequests/PullRequestsView.swift b/apps/swift-ios/Features/PullRequests/PullRequestsView.swift index 2d4da9d9bfe1..decfba58d17a 100644 --- a/apps/swift-ios/Features/PullRequests/PullRequestsView.swift +++ b/apps/swift-ios/Features/PullRequests/PullRequestsView.swift @@ -1,4 +1,4 @@ -import Observation +import Combine import SwiftUI struct FeaturePullRequestRow: Identifiable, Equatable { @@ -21,22 +21,21 @@ struct FeaturePullRequestRow: Identifiable, Equatable { } @MainActor -@Observable -private final class PullRequestsModel { - var rows: [FeaturePullRequestRow] = [] +private final class PullRequestsModel: ObservableObject { + @Published var rows: [FeaturePullRequestRow] = [] private var allRows: [FeaturePullRequestRow] = [] - var environments: [FeaturePullRequestEnvironmentList] = [] - var state: PullRequestListState = .open - var involvement: PullRequestInvolvement = .all - var query = "" - var draftFilter: String? - var reviewFilter: String? - var checksFilter: String? - var environmentFilter: String? - var hostFilter: String? - var projectFilter: String? - var isLoading = false - var errorMessage: String? + @Published var environments: [FeaturePullRequestEnvironmentList] = [] + @Published var state: PullRequestListState = .open + @Published var involvement: PullRequestInvolvement = .all + @Published var query = "" + @Published var draftFilter: String? + @Published var reviewFilter: String? + @Published var checksFilter: String? + @Published var environmentFilter: String? + @Published var hostFilter: String? + @Published var projectFilter: String? + @Published var isLoading = false + @Published var errorMessage: String? private let client: any FeatureClient private var loadGeneration: UInt64 = 0 @@ -123,13 +122,13 @@ private final class PullRequestsModel { } public struct PullRequestsView: View { - @Bindable private var rootModel: FeatureRootModel - @State private var model: PullRequestsModel + @ObservedObject private var rootModel: FeatureRootModel + @StateObject private var model: PullRequestsModel @State private var searchTask: Task? public init(model: FeatureRootModel) { rootModel = model - _model = State(initialValue: PullRequestsModel(client: model.client)) + _model = StateObject(wrappedValue: PullRequestsModel(client: model.client)) } public var body: some View { @@ -151,15 +150,15 @@ public struct PullRequestsView: View { } .t3NavigationChrome() .task { await model.load() } - .onChange(of: model.state) { reload() } - .onChange(of: model.involvement) { reload() } - .onChange(of: model.draftFilter) { reload() } - .onChange(of: model.reviewFilter) { reload() } - .onChange(of: model.checksFilter) { reload() } - .onChange(of: model.environmentFilter) { model.applyLocalFilters() } - .onChange(of: model.hostFilter) { model.applyLocalFilters() } - .onChange(of: model.projectFilter) { model.applyLocalFilters() } - .onChange(of: model.query) { + .t3OnChange(of: model.state) { reload() } + .t3OnChange(of: model.involvement) { reload() } + .t3OnChange(of: model.draftFilter) { reload() } + .t3OnChange(of: model.reviewFilter) { reload() } + .t3OnChange(of: model.checksFilter) { reload() } + .t3OnChange(of: model.environmentFilter) { model.applyLocalFilters() } + .t3OnChange(of: model.hostFilter) { model.applyLocalFilters() } + .t3OnChange(of: model.projectFilter) { model.applyLocalFilters() } + .t3OnChange(of: model.query) { searchTask?.cancel() searchTask = Task { try? await Task.sleep(for: .milliseconds(300)) @@ -298,7 +297,7 @@ public struct PullRequestsView: View { ProgressView("Loading pull requests…") .frame(maxWidth: .infinity, maxHeight: .infinity) } else if let error = model.errorMessage, model.rows.isEmpty { - ContentUnavailableView("Couldn’t load pull requests", systemImage: "exclamationmark.triangle", description: Text(error)) + T3ContentUnavailableView("Couldn’t load pull requests", systemImage: "exclamationmark.triangle", description: Text(error)) } else { List { ForEach(model.environments.filter { $0.errorMessage != nil }) { environment in @@ -325,7 +324,7 @@ public struct PullRequestsView: View { } if model.rows.isEmpty { - ContentUnavailableView( + T3ContentUnavailableView( "No pull requests", systemImage: "arrow.triangle.pull", description: Text("Try another state, involvement, or search.") @@ -381,19 +380,18 @@ private struct PullRequestRowView: View { } @MainActor -@Observable -private final class PullRequestDetailModel { - var detail: PullRequestDetail? - var activity: PullRequestActivity? - var diffFiles: [PullRequestDiffFile] = [] - var isDiffIncomplete = false - var isLoading = true - var isLoadingDiff = false - var isActing = false - var errorMessage: String? - var reviewDrafts: [PullRequestReviewCommentDraft] = [] - var reviewerCandidates: [PullRequestReviewerCandidate] = [] - var isLoadingReviewers = false +private final class PullRequestDetailModel: ObservableObject { + @Published var detail: PullRequestDetail? + @Published var activity: PullRequestActivity? + @Published var diffFiles: [PullRequestDiffFile] = [] + @Published var isDiffIncomplete = false + @Published var isLoading = true + @Published var isLoadingDiff = false + @Published var isActing = false + @Published var errorMessage: String? + @Published var reviewDrafts: [PullRequestReviewCommentDraft] = [] + @Published var reviewerCandidates: [PullRequestReviewerCandidate] = [] + @Published var isLoadingReviewers = false private let client: any FeatureClient let target: FeaturePullRequestTarget @@ -548,9 +546,9 @@ private struct PullRequestDetailView: View { var updateMethod: PullRequestUpdateMethod? } - @Bindable var rootModel: FeatureRootModel + @ObservedObject var rootModel: FeatureRootModel let row: FeaturePullRequestRow - @State private var model: PullRequestDetailModel + @StateObject private var model: PullRequestDetailModel @State private var tab: PullRequestDetailTab = .summary @State private var editor: PullRequestEditor? @State private var reviewSheet = false @@ -561,7 +559,7 @@ private struct PullRequestDetailView: View { init(rootModel: FeatureRootModel, row: FeaturePullRequestRow) { self.rootModel = rootModel self.row = row - _model = State(initialValue: PullRequestDetailModel(client: rootModel.client, target: row.target)) + _model = StateObject(wrappedValue: PullRequestDetailModel(client: rootModel.client, target: row.target)) } var body: some View { @@ -582,7 +580,7 @@ private struct PullRequestDetailView: View { tabContent(detail) } } else { - ContentUnavailableView( + T3ContentUnavailableView( "Couldn’t load pull request", systemImage: "exclamationmark.triangle", description: Text(model.errorMessage ?? "Try again.") @@ -597,7 +595,7 @@ private struct PullRequestDetailView: View { } .t3NavigationChrome() .task { await model.load() } - .onChange(of: tab) { _, value in + .t3OnChange(of: tab) { _, value in if value == .files { Task { await model.loadDiff() } } } .sheet(item: $editor) { editor in @@ -807,7 +805,7 @@ private struct PullRequestDetailView: View { private struct PullRequestSummaryView: View { let detail: PullRequestDetail let activity: PullRequestActivity? - @Bindable var model: PullRequestDetailModel + @ObservedObject var model: PullRequestDetailModel let onUpdateBranch: (PullRequestUpdateMethod) -> Void var body: some View { @@ -897,7 +895,7 @@ private struct PullRequestSummaryView: View { private struct PullRequestActivityView: View { let activity: PullRequestActivity? - @Bindable var model: PullRequestDetailModel + @ObservedObject var model: PullRequestDetailModel @State private var replyThread: PullRequestReviewThread? var body: some View { @@ -960,7 +958,7 @@ private struct PullRequestActivityView: View { .font(T3Typography.supporting) } if activity.comments.isEmpty && activity.reviewThreads.isEmpty && activity.commits.isEmpty { - ContentUnavailableView("No activity", systemImage: "text.bubble") + T3ContentUnavailableView("No activity", systemImage: "text.bubble") } } else { ProgressView("Loading activity…") @@ -978,7 +976,7 @@ private struct PullRequestActivityView: View { private struct PullRequestCommentView: View { let comment: PullRequestComment - @Bindable var model: PullRequestDetailModel + @ObservedObject var model: PullRequestDetailModel var body: some View { VStack(alignment: .leading, spacing: 9) { @@ -1067,7 +1065,7 @@ private struct PullRequestFilesView: View { .frame(maxWidth: .infinity) .padding(.top, 50) } else if files.isEmpty { - ContentUnavailableView("No diff available", systemImage: "doc.text.magnifyingglass") + T3ContentUnavailableView("No diff available", systemImage: "doc.text.magnifyingglass") } else { ForEach(files) { file in VStack(alignment: .leading, spacing: 0) { @@ -1131,7 +1129,7 @@ private struct PullRequestFilesView: View { private struct PullRequestReviewSheet: View { @SwiftUI.Environment(\.dismiss) private var dismiss - @Bindable var model: PullRequestDetailModel + @ObservedObject var model: PullRequestDetailModel @State private var verdict: PullRequestReviewVerdict = .comment @State private var reviewBody = "" @@ -1182,7 +1180,7 @@ private struct PullRequestReviewSheet: View { private struct PullRequestReviewerSheet: View { @SwiftUI.Environment(\.dismiss) private var dismiss - @Bindable var model: PullRequestDetailModel + @ObservedObject var model: PullRequestDetailModel var body: some View { NavigationStack { diff --git a/apps/swift-ios/Features/Review/FeatureReviewView.swift b/apps/swift-ios/Features/Review/FeatureReviewView.swift index a6e6db343c68..40482ce9107e 100644 --- a/apps/swift-ios/Features/Review/FeatureReviewView.swift +++ b/apps/swift-ios/Features/Review/FeatureReviewView.swift @@ -23,7 +23,7 @@ public struct FeatureReviewView: View { } else if let review { reviewList(review) } else { - ContentUnavailableView( + T3ContentUnavailableView( "Review unavailable", systemImage: "doc.text.magnifyingglass", description: Text(errorMessage ?? "Changes could not be loaded.") @@ -44,7 +44,7 @@ public struct FeatureReviewView: View { } } .task { await load() } - .onChange(of: scenePhase) { _, phase in + .t3OnChange(of: scenePhase) { _, phase in guard phase == .active, review != nil, !isLoading else { return } Task { await load() } } @@ -77,7 +77,7 @@ public struct FeatureReviewView: View { Section("\(review.files.count) changed \(review.files.count == 1 ? "file" : "files")") { if review.files.isEmpty { - ContentUnavailableView( + T3ContentUnavailableView( "No changes", systemImage: "checkmark.circle", description: Text("The working tree is clean.") @@ -212,7 +212,7 @@ private struct FeatureDiffView: View { ProgressView("Loading full diff…") .frame(maxWidth: .infinity, maxHeight: .infinity) } else if renderedLines.isEmpty { - ContentUnavailableView( + T3ContentUnavailableView( file.change == .binary ? "Binary file" : "Diff unavailable", systemImage: file.change == .binary ? "doc.richtext" : "doc.text.magnifyingglass", description: Text("No line-level preview is available.") diff --git a/apps/swift-ios/Features/Root/FeatureRootModel.swift b/apps/swift-ios/Features/Root/FeatureRootModel.swift index 6f440ba6cf1d..7882430e07d7 100644 --- a/apps/swift-ios/Features/Root/FeatureRootModel.swift +++ b/apps/swift-ios/Features/Root/FeatureRootModel.swift @@ -1,5 +1,5 @@ +import Combine import Foundation -import Observation private struct FeatureConnectionUnavailableError: LocalizedError { var errorDescription: String? { @@ -19,26 +19,25 @@ struct FeatureDetailRenderUpdate: Equatable { } @MainActor -@Observable -public final class FeatureRootModel { +public final class FeatureRootModel: ObservableObject { private static let maximumRetainedThreadDetails = 6 - public private(set) var snapshot = FeatureSnapshot() - public private(set) var details: [String: FeatureThreadDetail] = [:] + @Published public private(set) var snapshot = FeatureSnapshot() + @Published public private(set) var details: [String: FeatureThreadDetail] = [:] /// Advances whenever a Home presentation input changes. - public private(set) var homePresentationRevision: UInt64 = 0 + @Published public private(set) var homePresentationRevision: UInt64 = 0 /// Advances when a Home-visible thread is inserted, removed, or changed. - public private(set) var threadCollectionRevision: UInt64 = 0 + @Published public private(set) var threadCollectionRevision: UInt64 = 0 /// Advances for any selected-thread metadata, message, approval, or input change. - public private(set) var detailRevision: UInt64 = 0 + @Published public private(set) var detailRevision: UInt64 = 0 /// The latest detail revision for each loaded thread. - public private(set) var detailRevisions: [String: UInt64] = [:] - private(set) var detailRenderUpdates: [String: FeatureDetailRenderUpdate] = [:] - public private(set) var isLoading = true - public private(set) var isPerformingAction = false - public private(set) var isManagingConnections = false - private(set) var isSigningOutT3Connect = false - public var errorMessage: String? + @Published public private(set) var detailRevisions: [String: UInt64] = [:] + @Published private(set) var detailRenderUpdates: [String: FeatureDetailRenderUpdate] = [:] + @Published public private(set) var isLoading = true + @Published public private(set) var isPerformingAction = false + @Published public private(set) var isManagingConnections = false + @Published private(set) var isSigningOutT3Connect = false + @Published public var errorMessage: String? let client: any FeatureClient private let outboxStore: FeatureOutboxStore diff --git a/apps/swift-ios/Features/Root/FeatureRootView.swift b/apps/swift-ios/Features/Root/FeatureRootView.swift index 3505dca51577..7fbade3137fc 100644 --- a/apps/swift-ios/Features/Root/FeatureRootView.swift +++ b/apps/swift-ios/Features/Root/FeatureRootView.swift @@ -1,12 +1,12 @@ import SwiftUI public struct FeatureRootView: View { - @State private var model: FeatureRootModel + @StateObject private var model: FeatureRootModel private let navigationRequest: FeatureWorkspaceNavigationRequest? private let onNavigationRequestConsumed: @MainActor (UUID) -> Void public init(client: any FeatureClient) { - _model = State(initialValue: FeatureRootModel(client: client)) + _model = StateObject(wrappedValue: FeatureRootModel(client: client)) navigationRequest = nil onNavigationRequestConsumed = { _ in } } @@ -16,7 +16,7 @@ public struct FeatureRootView: View { navigationRequest: FeatureWorkspaceNavigationRequest? = nil, onNavigationRequestConsumed: @escaping @MainActor (UUID) -> Void = { _ in } ) { - _model = State(initialValue: model) + _model = StateObject(wrappedValue: model) self.navigationRequest = navigationRequest self.onNavigationRequestConsumed = onNavigationRequestConsumed } diff --git a/apps/swift-ios/Features/Settings/ConnectionsView.swift b/apps/swift-ios/Features/Settings/ConnectionsView.swift index d7e21816caa3..a55334f3a524 100644 --- a/apps/swift-ios/Features/Settings/ConnectionsView.swift +++ b/apps/swift-ios/Features/Settings/ConnectionsView.swift @@ -1,7 +1,7 @@ import SwiftUI struct ConnectionsView: View { - @Bindable var model: FeatureRootModel + @ObservedObject var model: FeatureRootModel @State private var pendingEnabledValues: [String: Bool] = [:] @State private var showingAddConnection = false @@ -500,7 +500,7 @@ struct ConnectionsView: View { private struct ConnectionDetailView: View { @SwiftUI.Environment(\.dismiss) private var dismiss - @Bindable var model: FeatureRootModel + @ObservedObject var model: FeatureRootModel let environmentID: String @Binding var pendingEnabledValues: [String: Bool] let onRemove: () -> Void @@ -536,7 +536,7 @@ private struct ConnectionDetailView: View { } } } else { - ContentUnavailableView("Connection removed", systemImage: "network.slash") + T3ContentUnavailableView("Connection removed", systemImage: "network.slash") } } .scrollContentBackground(.hidden) diff --git a/apps/swift-ios/Features/Settings/SettingsView.swift b/apps/swift-ios/Features/Settings/SettingsView.swift index ab39c3990cf3..cfbd961341af 100644 --- a/apps/swift-ios/Features/Settings/SettingsView.swift +++ b/apps/swift-ios/Features/Settings/SettingsView.swift @@ -2,7 +2,7 @@ import SwiftUI public struct SettingsView: View { @SwiftUI.Environment(\.dismiss) private var dismiss - @Bindable private var model: FeatureRootModel + @ObservedObject private var model: FeatureRootModel @State private var settings: FeatureSettings @State private var isSaving = false @State private var appearanceSaveTask: Task? @@ -79,12 +79,12 @@ public struct SettingsView: View { .onDisappear { model.setConnectionManagementPresented(false) } - .onChange(of: settings.appearance) { _, appearance in + .t3OnChange(of: settings.appearance) { _, appearance in saveAppearance(appearance) } } .interactiveDismissDisabled(isSaving || hasUnsavedChanges) - .presentationBackground(T3Colors.background) + .t3PresentationBackground(T3Colors.background) .presentationDragIndicator(.visible) } diff --git a/apps/swift-ios/Features/SourceControl/FeatureSourceControlView.swift b/apps/swift-ios/Features/SourceControl/FeatureSourceControlView.swift index 1182485c2b0a..598d73a20784 100644 --- a/apps/swift-ios/Features/SourceControl/FeatureSourceControlView.swift +++ b/apps/swift-ios/Features/SourceControl/FeatureSourceControlView.swift @@ -24,7 +24,7 @@ public struct FeatureSourceControlView: View { } else if let status, status.isRepository { statusList(status) } else { - ContentUnavailableView( + T3ContentUnavailableView( "Source control unavailable", systemImage: "arrow.triangle.branch", description: Text( diff --git a/apps/swift-ios/Features/Terminal/FeatureTerminalView.swift b/apps/swift-ios/Features/Terminal/FeatureTerminalView.swift index 21d503bd6436..c4c28c7b9e80 100644 --- a/apps/swift-ios/Features/Terminal/FeatureTerminalView.swift +++ b/apps/swift-ios/Features/Terminal/FeatureTerminalView.swift @@ -111,7 +111,7 @@ public struct FeatureTerminalView: View { .tint(T3Colors.textPrimary) .foregroundStyle(T3Colors.textPrimary) } else if let errorMessage, terminal == nil { - ContentUnavailableView( + T3ContentUnavailableView( "Terminal unavailable", systemImage: "terminal", description: Text(errorMessage) diff --git a/apps/swift-ios/Features/Terminal/TerminalSurfaceView.swift b/apps/swift-ios/Features/Terminal/TerminalSurfaceView.swift index 6f58399affde..d11db9b8df0e 100644 --- a/apps/swift-ios/Features/Terminal/TerminalSurfaceView.swift +++ b/apps/swift-ios/Features/Terminal/TerminalSurfaceView.swift @@ -355,15 +355,19 @@ private final class TerminalAccessoryView: UIInputView { stackView.heightAnchor.constraint(equalTo: scrollView.frameLayoutGuide.heightAnchor), ]) refreshAppearance() - registerForTraitChanges([UITraitUserInterfaceStyle.self]) { - (self: Self, _: UITraitCollection) in - self.refreshAppearance() - } } @available(*, unavailable) required init?(coder _: NSCoder) { nil } + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + guard traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) else { + return + } + refreshAppearance() + } + func setRunning(_ running: Bool) { for (action, button) in actionButtons { button.isEnabled = running || action == .clear diff --git a/apps/swift-ios/Features/Usage/UsageView.swift b/apps/swift-ios/Features/Usage/UsageView.swift index 0231aa7f5230..87fc7d1b32ee 100644 --- a/apps/swift-ios/Features/Usage/UsageView.swift +++ b/apps/swift-ios/Features/Usage/UsageView.swift @@ -60,7 +60,7 @@ public struct UsageView: View { .frame(maxWidth: .infinity) .padding(.vertical, 64) } else if let errorMessage, environments.isEmpty { - ContentUnavailableView { + T3ContentUnavailableView { Label("Couldn’t load usage", systemImage: "exclamationmark.circle") } description: { Text(errorMessage) @@ -68,13 +68,13 @@ public struct UsageView: View { Button("Try again") { Task { await load() } } } } else if environments.isEmpty { - ContentUnavailableView { + T3ContentUnavailableView { Label("No environments", systemImage: "chart.bar.xaxis") } description: { Text("Connect an environment to see usage.") } } else if !hasCompatibleSummary { - ContentUnavailableView { + T3ContentUnavailableView { Label("Couldn’t load usage", systemImage: "exclamationmark.circle") } description: { Text("No compatible usage data is available.") diff --git a/apps/swift-ios/Features/Workspace/HomeThreadCollectionView.swift b/apps/swift-ios/Features/Workspace/HomeThreadCollectionView.swift index c1083440305a..0b471ef8a15f 100644 --- a/apps/swift-ios/Features/Workspace/HomeThreadCollectionView.swift +++ b/apps/swift-ios/Features/Workspace/HomeThreadCollectionView.swift @@ -921,7 +921,7 @@ private struct HomeCollectionCellContent: View { .padding(.horizontal, 34) .frame(minHeight: T3Metrics.minimumTapTarget) case .searchEmpty: - ContentUnavailableView("No matching tasks", systemImage: "magnifyingglass") + T3ContentUnavailableView("No matching tasks", systemImage: "magnifyingglass") .foregroundStyle(T3Colors.textSecondary) .frame(maxWidth: .infinity, minHeight: 160) case .pinnedDivider: diff --git a/apps/swift-ios/Features/Workspace/NewThreadView.swift b/apps/swift-ios/Features/Workspace/NewThreadView.swift index 76cfe9cf5f3f..8c92f7203492 100644 --- a/apps/swift-ios/Features/Workspace/NewThreadView.swift +++ b/apps/swift-ios/Features/Workspace/NewThreadView.swift @@ -3,7 +3,7 @@ import SwiftUI public struct NewThreadView: View { @SwiftUI.Environment(\.dismiss) private var dismiss @SwiftUI.Environment(\.scenePhase) private var scenePhase - @Bindable var model: FeatureRootModel + @ObservedObject var model: FeatureRootModel let submit: (NewTaskRequest) async -> FeatureThread? let onCreated: (FeatureThread) -> Void let onCreateProject: @MainActor () -> Void @@ -118,8 +118,8 @@ public struct NewThreadView: View { selectInitialProject(initialID) } } - .onChange(of: projectID) { prepareProjectIfNeeded(projectID) } - .onChange(of: creationProjectIDs) { _, ids in + .t3OnChange(of: projectID) { prepareProjectIfNeeded(projectID) } + .t3OnChange(of: creationProjectIDs) { _, ids in guard !ids.contains(projectID) else { return } if projectID.isEmpty { let recentProject = DailyUXCreationContext.recentProjects( @@ -143,19 +143,19 @@ public struct NewThreadView: View { ?? creationProjectGroups.first?.projects.first selectInitialProject(replacement?.id ?? "") } - .onChange(of: model.homePresentationRevision) { _, _ in + .t3OnChange(of: model.homePresentationRevision) { _, _ in refreshAutomaticProjectIfNeeded() } - .onChange(of: prompt) { scheduleDraftSave() } - .onChange(of: selection) { scheduleDraftSave() } - .onChange(of: attachments) { scheduleDraftSave() } - .onChange(of: workspaceMode) { scheduleDraftSave() } - .onChange(of: selectedBranch) { scheduleDraftSave() } - .onChange(of: startFromOrigin) { scheduleDraftSave() } - .onChange(of: submissionValidationMessage) { _, _ in + .t3OnChange(of: prompt) { scheduleDraftSave() } + .t3OnChange(of: selection) { scheduleDraftSave() } + .t3OnChange(of: attachments) { scheduleDraftSave() } + .t3OnChange(of: workspaceMode) { scheduleDraftSave() } + .t3OnChange(of: selectedBranch) { scheduleDraftSave() } + .t3OnChange(of: startFromOrigin) { scheduleDraftSave() } + .t3OnChange(of: submissionValidationMessage) { _, _ in submissionValidationError = nil } - .onChange(of: scenePhase) { _, phase in + .t3OnChange(of: scenePhase) { _, phase in if phase != .active, !submittedSuccessfully { persistCurrentDraftImmediately() } @@ -1115,12 +1115,12 @@ private struct NewTaskProjectPicker: View { NavigationStack { Group { if groups.isEmpty { - ContentUnavailableView( + T3ContentUnavailableView( "No projects", systemImage: "folder" ) } else if filteredGroups.isEmpty { - ContentUnavailableView( + T3ContentUnavailableView( "No matching projects", systemImage: "magnifyingglass" ) @@ -1166,7 +1166,7 @@ private struct NewTaskProjectPicker: View { } } .presentationDetents([.medium, .large]) - .presentationBackground(T3Colors.background) + .t3PresentationBackground(T3Colors.background) } private func projectRow(_ group: DailyUXProjectGroup) -> some View { @@ -1250,7 +1250,7 @@ private struct NewTaskBranchPicker: View { .foregroundStyle(T3Colors.textSecondary) .frame(maxWidth: .infinity, maxHeight: .infinity) } else if filteredBranches.isEmpty { - ContentUnavailableView { + T3ContentUnavailableView { Label( loadFailed ? "Could not load branches" @@ -1331,7 +1331,7 @@ private struct NewTaskBranchPicker: View { } } .presentationDetents([.medium, .large]) - .presentationBackground(T3Colors.background) + .t3PresentationBackground(T3Colors.background) } private var filteredBranches: [FeatureWorkspaceBranch] { diff --git a/apps/swift-ios/Features/Workspace/ProjectAndArchiveViews.swift b/apps/swift-ios/Features/Workspace/ProjectAndArchiveViews.swift index 78681b71d68b..e793b413dd39 100644 --- a/apps/swift-ios/Features/Workspace/ProjectAndArchiveViews.swift +++ b/apps/swift-ios/Features/Workspace/ProjectAndArchiveViews.swift @@ -24,7 +24,7 @@ public struct AddProjectView: View { } @SwiftUI.Environment(\.dismiss) private var dismiss - @Bindable var model: FeatureRootModel + @ObservedObject var model: FeatureRootModel @State private var selectedEnvironmentID: String? @State private var mode = ProjectMode.folder @@ -86,7 +86,7 @@ public struct AddProjectView: View { } .scrollDismissesKeyboard(.interactively) } else { - ContentUnavailableView( + T3ContentUnavailableView( "Environment unavailable", systemImage: "server.rack", description: Text("Reconnect a T3 environment before adding a project.") @@ -104,17 +104,17 @@ public struct AddProjectView: View { } } .onAppear(perform: selectEnvironmentIfNeeded) - .onChange(of: model.snapshot.environments) { + .t3OnChange(of: model.snapshot.environments) { selectEnvironmentIfNeeded() } - .onChange(of: source) { + .t3OnChange(of: source) { resolvedRepository = nil pendingCloneRegistration = nil cloneRequestID = nil updateSuggestedDestination() errorMessage = nil } - .onChange(of: repositoryInput) { + .t3OnChange(of: repositoryInput) { resolvedRepository = nil pendingCloneRegistration = nil cloneRequestID = nil diff --git a/apps/swift-ios/Features/Workspace/ProviderModelPicker.swift b/apps/swift-ios/Features/Workspace/ProviderModelPicker.swift index ff321378597b..5545be28d5d9 100644 --- a/apps/swift-ios/Features/Workspace/ProviderModelPicker.swift +++ b/apps/swift-ios/Features/Workspace/ProviderModelPicker.swift @@ -93,8 +93,8 @@ public struct ProviderModelPicker: View { ) } .onAppear(perform: materializeSelection) - .onChange(of: providers) { materializeSelection() } - .onChange(of: selection) { materializeSelection() } + .t3OnChange(of: providers) { materializeSelection() } + .t3OnChange(of: selection) { materializeSelection() } } private var selectedOption: DailyUXModelOption? { @@ -212,7 +212,7 @@ private struct ModelPickerSheet: View { } .frame(maxWidth: .infinity, maxHeight: .infinity) } else if availableModelCount == 0 { - ContentUnavailableView( + T3ContentUnavailableView( emptyStateTitle, systemImage: emptyStateSymbol, description: Text(emptyStateMessage) @@ -230,14 +230,18 @@ private struct ModelPickerSheet: View { Button("Cancel") { dismiss() } } } - .navigationDestination(item: $configuring) { option in - ModelConfigurationView( - option: option, - currentSelection: selection - ) { configuredSelection in - selection = configuredSelection - recordRecent(option.id) - dismiss() + // `navigationDestination(item:)` needs iOS 17; the `isPresented:` form + // covers every supported OS with one code path. + .navigationDestination(isPresented: configuringPresented) { + if let option = configuring { + ModelConfigurationView( + option: option, + currentSelection: selection + ) { configuredSelection in + selection = configuredSelection + recordRecent(option.id) + dismiss() + } } } .t3NavigationChrome() @@ -245,8 +249,15 @@ private struct ModelPickerSheet: View { .presentationDetents([.large]) .presentationDragIndicator(.visible) .onAppear(perform: revealSelectedLegacyModel) - .onChange(of: selection) { revealSelectedLegacyModel() } - .onChange(of: providers) { revealSelectedLegacyModel() } + .t3OnChange(of: selection) { revealSelectedLegacyModel() } + .t3OnChange(of: providers) { revealSelectedLegacyModel() } + } + + private var configuringPresented: Binding { + Binding( + get: { configuring != nil }, + set: { if !$0 { configuring = nil } } + ) } private var modelList: some View { @@ -334,7 +345,7 @@ private struct ModelPickerSheet: View { } if catalog.all.isEmpty { - ContentUnavailableView.search(text: query) + T3ContentUnavailableView.search(text: query) .listRowBackground(Color.clear) } } diff --git a/apps/swift-ios/Features/Workspace/WorkspaceView.swift b/apps/swift-ios/Features/Workspace/WorkspaceView.swift index 262e974db59a..24343f330846 100644 --- a/apps/swift-ios/Features/Workspace/WorkspaceView.swift +++ b/apps/swift-ios/Features/Workspace/WorkspaceView.swift @@ -19,8 +19,9 @@ struct FeatureWorkspaceNavigationRequest: Equatable, Sendable { public struct WorkspaceView: View { @SwiftUI.Environment(\.dynamicTypeSize) private var dynamicTypeSize + @SwiftUI.Environment(\.horizontalSizeClass) private var horizontalSizeClass - @Bindable var model: FeatureRootModel + @ObservedObject var model: FeatureRootModel private let navigationRequest: FeatureWorkspaceNavigationRequest? private let onNavigationRequestConsumed: @MainActor (UUID) -> Void private let submitNewTask: (NewTaskRequest) async -> FeatureThread? @@ -43,7 +44,7 @@ public struct WorkspaceView: View { @State private var deletingThread: FeatureThread? @State private var renameTitle = "" @State private var sidebarBoundaryNow = Date.now - @State private var preferredCompactColumn = NavigationSplitViewColumn.sidebar + @State private var prefersCompactDetail = false @State private var homePresentationCache = HomePresentationCache() @FocusState private var isSearchFocused: Bool @@ -115,15 +116,37 @@ public struct WorkspaceView: View { } public var body: some View { - NavigationSplitView(preferredCompactColumn: $preferredCompactColumn) { - sidebar - .navigationSplitViewColumnWidth( - min: T3Metrics.minimumSidebarWidth, - ideal: T3Metrics.sidebarWidth, - max: T3Metrics.maximumSidebarWidth - ) - } detail: { - detail + Group { + if #available(iOS 17.0, *) { + NavigationSplitView(preferredCompactColumn: preferredCompactColumn) { + sidebar + .navigationSplitViewColumnWidth( + min: T3Metrics.minimumSidebarWidth, + ideal: T3Metrics.sidebarWidth, + max: T3Metrics.maximumSidebarWidth + ) + } detail: { + detail + } + } else if horizontalSizeClass == .compact { + NavigationStack { + sidebar + .navigationDestination(isPresented: selectedThreadPresented) { + detail + } + } + } else { + NavigationSplitView { + sidebar + .navigationSplitViewColumnWidth( + min: T3Metrics.minimumSidebarWidth, + ideal: T3Metrics.sidebarWidth, + max: T3Metrics.maximumSidebarWidth + ) + } detail: { + detail + } + } } .navigationSplitViewStyle(.balanced) .sheet(isPresented: $showingNewTask) { @@ -190,22 +213,19 @@ public struct WorkspaceView: View { } message: { thread in Text("\"\(thread.title)\" and its terminal history will be permanently deleted.") } - .onChange(of: selectedThreadIsAvailable) { _, isAvailable in + .t3OnChange(of: selectedThreadIsAvailable) { _, isAvailable in if !isAvailable { closeSelectedThread() } } - .onChange(of: selectedThreadID) { _, newValue in - preferredCompactColumn = newValue == nil ? .sidebar : .detail - } - .onChange(of: selectedProjectIsAvailable) { _, isAvailable in + .t3OnChange(of: selectedProjectIsAvailable) { _, isAvailable in if !isAvailable { selectedProjectID = nil } } - .onChange(of: navigationRequest?.id, initial: true) { _, _ in + .t3OnChange(of: navigationRequest?.id, initial: true) { _, _ in consumeNavigationRequest() } // A request that arrives before its thread or project exists in the // snapshot stays pending; retry it as data lands so cold-start deep // links are not silently stranded. - .onChange(of: model.homePresentationRevision) { _, _ in + .t3OnChange(of: model.homePresentationRevision) { _, _ in if navigationRequest != nil { consumeNavigationRequest() } } .task(id: nextSidebarBoundary) { @@ -236,7 +256,7 @@ public struct WorkspaceView: View { } .background(T3Colors.background) .toolbar(.hidden, for: .navigationBar) - .onChange(of: selectedProjectID) { + .t3OnChange(of: selectedProjectID) { settledLimit = 12 } } @@ -586,6 +606,23 @@ public struct WorkspaceView: View { return model.snapshot.threads.contains { $0.id == selectedThreadID } } + private var selectedThreadPresented: Binding { + Binding( + get: { selectedThreadID != nil }, + set: { if !$0 { closeSelectedThread() } } + ) + } + + // Stored as a Bool because `NavigationSplitViewColumn` is an iOS 17 type and + // cannot appear in this view's stored state while iOS 16 is supported. + @available(iOS 17.0, *) + private var preferredCompactColumn: Binding { + Binding( + get: { prefersCompactDetail ? .detail : .sidebar }, + set: { prefersCompactDetail = $0 == .detail } + ) + } + private var selectedProjectIsAvailable: Bool { guard let selectedProjectID else { return true } return model.snapshot.projects.contains { $0.id == selectedProjectID } @@ -593,12 +630,12 @@ public struct WorkspaceView: View { private func openThread(_ id: String) { selectedThreadID = id - preferredCompactColumn = .detail + prefersCompactDetail = true } private func closeSelectedThread() { selectedThreadID = nil - preferredCompactColumn = .sidebar + prefersCompactDetail = false } @MainActor diff --git a/apps/swift-ios/README.md b/apps/swift-ios/README.md index 379ed70ca0c5..7d048f93a5df 100644 --- a/apps/swift-ios/README.md +++ b/apps/swift-ios/README.md @@ -1,13 +1,13 @@ # T3 Code (SwiftUI) -A native SwiftUI client for T3 Code. The project targets iOS 17 and later on +A native SwiftUI client for T3 Code. The project targets iOS 16.2 and later on iPhone and iPad. It has its own bundle identifier and can be installed beside the React Native T3 Code app. ## Requirements - A current Xcode release with an iOS Simulator runtime. -- iOS 17 or later for physical-device builds. +- iOS 16.2 or later for physical-device builds. - A T3 pairing URL for direct connections. T3 Connect builds additionally need the cloud settings below. diff --git a/apps/swift-ios/T3Code.xcodeproj/project.pbxproj b/apps/swift-ios/T3Code.xcodeproj/project.pbxproj index 9ef0f2dc3386..13429d712505 100644 --- a/apps/swift-ios/T3Code.xcodeproj/project.pbxproj +++ b/apps/swift-ios/T3Code.xcodeproj/project.pbxproj @@ -634,7 +634,7 @@ INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -690,7 +690,7 @@ INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -730,7 +730,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; PRODUCT_BUNDLE_IDENTIFIER = com.t3tools.t3code.swiftui.tests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -747,7 +747,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; PRODUCT_BUNDLE_IDENTIFIER = com.t3tools.t3code.swiftui.tests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -768,7 +768,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Extensions/Widgets/Info.plist; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -799,7 +799,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Extensions/Widgets/Info.plist; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -832,7 +832,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Extensions/Share/Info.plist; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -863,7 +863,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Extensions/Share/Info.plist; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -939,10 +939,10 @@ /* Begin XCRemoteSwiftPackageReference section */ B20000000000000000000001 /* XCRemoteSwiftPackageReference "clerk-ios" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/clerk/clerk-ios.git"; + repositoryURL = "https://github.com/Yash-Singh1/clerk-ios.git"; requirement = { - kind = exactVersion; - version = 1.2.0; + kind = revision; + revision = e66998a138be2106cf7eb0e671155ae8d3cf797d; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/apps/swift-ios/Tests/FeatureTests/FeatureRootModelTests.swift b/apps/swift-ios/Tests/FeatureTests/FeatureRootModelTests.swift index d4cd0e294a11..0d0c1f2a475c 100644 --- a/apps/swift-ios/Tests/FeatureTests/FeatureRootModelTests.swift +++ b/apps/swift-ios/Tests/FeatureTests/FeatureRootModelTests.swift @@ -1,10 +1,27 @@ +import Combine import Foundation -import Observation import SwiftUI import Testing import UIKit @testable import T3Code +@MainActor +private func waitForChange( + _ publisher: P, + while operation: () -> Void +) async where P.Output: Equatable, P.Failure == Never { + var cancellable: AnyCancellable? + await withCheckedContinuation { continuation in + cancellable = publisher + .removeDuplicates() + .dropFirst() + .first() + .sink { _ in continuation.resume() } + operation() + } + withExtendedLifetime(cancellable) {} +} + @MainActor @Suite("Feature root model") struct FeatureRootModelTests { @@ -1544,12 +1561,7 @@ struct FeatureRootModelTests { let model = testRootModel(client: client) let run = Task { await model.start() } client.beforeLoadThreadReturn = { - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.details[thread.id] - } onChange: { - continuation.resume() - } + await waitForChange(model.$details.map { $0[thread.id] }) { client.emit(.detail(live)) } } @@ -1688,12 +1700,7 @@ struct FeatureRootModelTests { let model = testRootModel(client: client) let run = Task { await model.start() } client.beforeLoadThreadReturn = { - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.detailRevisions[thread.id] - } onChange: { - continuation.resume() - } + await waitForChange(model.$detailRevisions.map { $0[thread.id] }) { client.emit(.threadRemoved(id: thread.id)) } } @@ -1731,20 +1738,10 @@ struct FeatureRootModelTests { client.threadDetail = refreshed let run = Task { await model.start() } client.beforeLoadThreadReturn = { - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.details[thread.id]?.thread - } onChange: { - continuation.resume() - } + await waitForChange(model.$details.map { $0[thread.id]?.thread }) { client.emit(.thread(intermediateThread)) } - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.details[thread.id]?.thread - } onChange: { - continuation.resume() - } + await waitForChange(model.$details.map { $0[thread.id]?.thread }) { client.emit(.thread(thread)) } } @@ -1772,12 +1769,7 @@ struct FeatureRootModelTests { let run = Task { await model.start() } client.createdThread = created client.beforeLoadThreadReturn = { - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.details[original.id]?.thread - } onChange: { - continuation.resume() - } + await waitForChange(model.$details.map { $0[original.id]?.thread }) { client.emit(.thread(live)) } _ = await model.createThread(projectID: original.projectID, title: nil, selection: nil) @@ -1804,12 +1796,7 @@ struct FeatureRootModelTests { client.threadDetail = FeatureThreadDetail(thread: refreshed) let run = Task { await model.start() } client.beforeLoadThreadReturn = { - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.snapshot.connection - } onChange: { - continuation.resume() - } + await waitForChange(model.$snapshot.map(\.connection)) { client.emit(.thread(original)) client.emit(.connection(.init(state: .connected))) } @@ -1861,12 +1848,7 @@ struct FeatureRootModelTests { let model = testRootModel(client: client) let run = Task { await model.start() } client.beforeLoadThreadReturn = { - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.detailRevisions[thread.id] - } onChange: { - continuation.resume() - } + await waitForChange(model.$detailRevisions.map { $0[thread.id] }) { client.emit(.snapshot(FeatureSnapshot())) } } @@ -1904,20 +1886,10 @@ struct FeatureRootModelTests { client.threadDetail = refreshed let run = Task { await model.start() } client.beforeLoadThreadReturn = { - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.details[thread.id]?.thread - } onChange: { - continuation.resume() - } + await waitForChange(model.$details.map { $0[thread.id]?.thread }) { client.emit(.snapshot(FeatureSnapshot(threads: [intermediateThread]))) } - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.details[thread.id]?.thread - } onChange: { - continuation.resume() - } + await waitForChange(model.$details.map { $0[thread.id]?.thread }) { client.emit(.snapshot(FeatureSnapshot(threads: [thread]))) } } From bd75a775c1df56addadadb7875a322f0676cfacf Mon Sep 17 00:00:00 2001 From: Yash Singh Date: Sun, 23 Aug 2026 17:41:56 -0500 Subject: [PATCH 2/6] fix(swift-ios): use Combine in root model test --- .../Tests/FeatureTests/FeatureRootModelTests.swift | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/swift-ios/Tests/FeatureTests/FeatureRootModelTests.swift b/apps/swift-ios/Tests/FeatureTests/FeatureRootModelTests.swift index 0d0c1f2a475c..4a09eb106772 100644 --- a/apps/swift-ios/Tests/FeatureTests/FeatureRootModelTests.swift +++ b/apps/swift-ios/Tests/FeatureTests/FeatureRootModelTests.swift @@ -508,12 +508,11 @@ struct FeatureRootModelTests { var acknowledged = try #require(model.snapshot.threads.first) acknowledged.title = "Accepted on the server" acknowledged.state = .working - await withCheckedContinuation { continuation in - withObservationTracking { - _ = model.snapshot.threads.first(where: { $0.id == acknowledged.id })?.state - } onChange: { - continuation.resume() + await waitForChange( + model.$snapshot.map { snapshot in + snapshot.threads.first(where: { $0.id == acknowledged.id })?.state } + ) { client.emit(.thread(acknowledged)) } } From 9430bab41889db386414160f0a231c85226acdf0 Mon Sep 17 00:00:00 2001 From: Yash Singh Date: Mon, 24 Aug 2026 13:40:25 -0500 Subject: [PATCH 3/6] fix: live activity bg wrong --- .../Extensions/Widgets/AgentActivityWidget.swift | 1 - .../xcshareddata/swiftpm/Package.resolved | 13 ++++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/swift-ios/Extensions/Widgets/AgentActivityWidget.swift b/apps/swift-ios/Extensions/Widgets/AgentActivityWidget.swift index fe077760ee91..e5138d8ae6b5 100644 --- a/apps/swift-ios/Extensions/Widgets/AgentActivityWidget.swift +++ b/apps/swift-ios/Extensions/Widgets/AgentActivityWidget.swift @@ -6,7 +6,6 @@ struct T3TaskLiveActivity: Widget { var body: some WidgetConfiguration { ActivityConfiguration(for: LiveActivityAttributes.self) { context in T3LiveActivityLockScreenView(context: context) - .activityBackgroundTint(Color(uiColor: .systemBackground)) .activitySystemActionForegroundColor(Color(uiColor: .label)) .widgetURL(T3ActivityPresentation(state: context.state).deepLinkURL) } dynamicIsland: { context in diff --git a/apps/swift-ios/T3Code.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/apps/swift-ios/T3Code.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 828e8e704d0a..383c10a03bfe 100644 --- a/apps/swift-ios/T3Code.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/apps/swift-ios/T3Code.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,13 +1,12 @@ { - "originHash" : "0da9fa23290c75a06cf2d88ffeab37061a648ea0656f8262ec633d415fa7466a", + "originHash" : "b9b9bb158004bf007a3029927116953fe619f5e2dafb129e0577a3c7c177e38b", "pins" : [ { "identity" : "clerk-ios", "kind" : "remoteSourceControl", - "location" : "https://github.com/clerk/clerk-ios.git", + "location" : "https://github.com/Yash-Singh1/clerk-ios.git", "state" : { - "revision" : "d0a5f2231dcb4b66e091a514ce2d0bead9056404", - "version" : "1.2.0" + "revision" : "e66998a138be2106cf7eb0e671155ae8d3cf797d" } }, { @@ -22,10 +21,10 @@ { "identity" : "phonenumberkit", "kind" : "remoteSourceControl", - "location" : "https://github.com/marmelroy/PhoneNumberKit", + "location" : "https://github.com/PhoneNumberKit/PhoneNumberKit", "state" : { - "revision" : "169ab10234347fb19b37441f2867ace896a284b0", - "version" : "4.3.0" + "revision" : "754d0d5597593ba8bcdc2b4ddf5f85fc3a4e799f", + "version" : "5.0.7" } } ], From 57e5dc3b9724368d13ebd8c6af05fd2dfe87c39f Mon Sep 17 00:00:00 2001 From: Yash Singh Date: Mon, 24 Aug 2026 15:41:10 -0500 Subject: [PATCH 4/6] fix(swift-ios): wait for published swipe model updates - replace observation tracking with a Combine-based change waiter - make `PullRequestsModel` file-visible so tests can observe updates --- .../PullRequests/PullRequestsView.swift | 2 +- .../HomeThreadSwipeActionTests.swift | 53 +++++++++++------- artifacts/live-activity-fixed-dark.jpg | Bin 0 -> 48554 bytes artifacts/live-activity-fixed.jpg | Bin 0 -> 48287 bytes 4 files changed, 33 insertions(+), 22 deletions(-) create mode 100644 artifacts/live-activity-fixed-dark.jpg create mode 100644 artifacts/live-activity-fixed.jpg diff --git a/apps/swift-ios/Features/PullRequests/PullRequestsView.swift b/apps/swift-ios/Features/PullRequests/PullRequestsView.swift index 22d5c456fc8e..2bf1425189ac 100644 --- a/apps/swift-ios/Features/PullRequests/PullRequestsView.swift +++ b/apps/swift-ios/Features/PullRequests/PullRequestsView.swift @@ -21,7 +21,7 @@ struct FeaturePullRequestRow: Identifiable, Equatable { } @MainActor -private final class PullRequestsModel: ObservableObject { +final class PullRequestsModel: ObservableObject { @Published var rows: [FeaturePullRequestRow] = [] private var allRows: [FeaturePullRequestRow] = [] @Published var environments: [FeaturePullRequestEnvironmentList] = [] diff --git a/apps/swift-ios/Tests/FeatureTests/HomeThreadSwipeActionTests.swift b/apps/swift-ios/Tests/FeatureTests/HomeThreadSwipeActionTests.swift index 61d3473665bb..33178a9a68a5 100644 --- a/apps/swift-ios/Tests/FeatureTests/HomeThreadSwipeActionTests.swift +++ b/apps/swift-ios/Tests/FeatureTests/HomeThreadSwipeActionTests.swift @@ -1,9 +1,26 @@ +import Combine import Foundation -import Observation import Testing import UIKit @testable import T3Code +@MainActor +private func waitForSwipeModelChange( + _ publisher: P, + while operation: () -> Void +) async where P.Output: Equatable, P.Failure == Never { + var cancellable: AnyCancellable? + await withCheckedContinuation { continuation in + cancellable = publisher + .removeDuplicates() + .dropFirst() + .first() + .sink { _ in continuation.resume() } + operation() + } + withExtendedLifetime(cancellable) {} +} + @MainActor @Suite("Home row trailing swipe actions") struct HomeThreadSwipeActionTests { @@ -359,28 +376,22 @@ struct HomeThreadSwipeActionTests { var authoritative = active authoritative.title = "Updated on the server" - let changed = AsyncStream.makeStream() - withObservationTracking { - _ = model.snapshot.threads.first?.title - } onChange: { - changed.continuation.yield() - } - - switch event { - case .thread: - client.emit(.thread(authoritative)) - case .detail: - client.emit(.detail(FeatureThreadDetail(thread: authoritative))) - case .detailDelta: - client.emit(.detailDelta( - FeatureThreadDetail(thread: authoritative), - FeatureDetailDelta(changedMessages: []) - )) + await waitForSwipeModelChange( + model.$snapshot.map { $0.threads.first?.title } + ) { + switch event { + case .thread: + client.emit(.thread(authoritative)) + case .detail: + client.emit(.detail(FeatureThreadDetail(thread: authoritative))) + case .detailDelta: + client.emit(.detailDelta( + FeatureThreadDetail(thread: authoritative), + FeatureDetailDelta(changedMessages: []) + )) + } } - var changes = changed.stream.makeAsyncIterator() - await changes.next() - let updated = model.snapshot.threads.first #expect(updated?.title == "Updated on the server") #expect(updated?.isSettled == true) diff --git a/artifacts/live-activity-fixed-dark.jpg b/artifacts/live-activity-fixed-dark.jpg new file mode 100644 index 0000000000000000000000000000000000000000..159646be5c54c0e7856e1aac04a7ebbdd3b1df64 GIT binary patch literal 48554 zcmbTdWn5c9_bwU=6e&_#+*@dIDDGBTw73L^LJP&AxR=sG3GR?m+#v*ahhQxZ2`+)+ z79}U3@wb!im?EAUeNB`m_2PYS|h^UyjgrtxT^t4h@e?P0!525p(kk z>&T7GzgycoyL+h9v-1n|Kg{LTe{f+(<$qvd_y3Q$D6qI5;Njuo5&Q=i&I8~70H?si zezz>9e4ZqxW*1q1f%*@$|04T;2kh(rFJ%7* z*#C`d5ugNk@L$1w@BkMd7Z(@*AwE_f5FA^ES6{YS|EkKAKB!NK-{ zhlfXi{XTv~^yu;bXSrX-PA;bV1po;y4t6r(QUK%uC|=*6GdOXnI?tinEIV-+qc~~g2~BN^TzGwWg{ZH1E;B1^9~)$ zIh&ym*W3lm=w{0JjRz1uZEf=}ye|(r?*ZwYu)t?5L;T}g) zWs(G-?Xs-Nk|HPA0=jOe>H?^}>8&^9G~1Tvz_YMh)K=@`;~>5=_~+af^iLCa9nshI z*c6j&5!v4aU!aM6)|k4THY{_wV1nmd_GCn1EaY9&^&F(`W`I{*d4kYft%V!7X!WS0THg*ik7;qz)rZs z>Wc1h!+DpLCUA_l5LzIkcA})!IN>Uzv>w=DWERYS^vGvK6Yn1>Zd z3C_djRnQ9INo3!x<3{g-Sd(YvUgOh@BMmcNv7I7cKzv7L)(6*1g>z9qXXJMWPJNfA zka!KVV3B3FrE!`>8_u_5i)&ul`zf{4{KBJ?>+!}XGQZRtYsoE{l>apJV zwc?FnIbWmj76Vt~20}UjI2~Fi&`-+IHwldhqFQSUHbW|xx$7Zxx-#F^dr%~WxMdP= z9F_3xFLc6*uHW7RJ~61u@n9^stt_=-(W<@MRiiyO$Ib_%K?B~f2KR<#epQ&jR&txg zRLsYZ+dM2*eK${)=pqd}3JX_N-m#cgC1;wh zIZ7MCG59iK&kY=AwlyH&OOXprX9V)4^pt*$Zq1?PSDD|0+K%t0bPeCnan;vP1x~A4 zI~0F)ASxzQ(#!?F7okpg3VW43QwWX$zbpLqGQ&fO-l1}l>sjFjL|o*lrs%k2TEe$2 zuxf5jfU8qn;crzU*t6Vh$zlYl8n`riAt^bpU{!S6Fw+5_?uheWL5IJ$BN#?3rHcT` z)i-R-mO3Wrfz&Otz-whXvv17lEx#tvn*H&z&8O{*EvD!J)ld|YC`-*c(r@{>T$i*4Nl}eAgbVw?s(1qme5q- z4$yZG=tsofwlELwTA_%XLdRz@_kdH5v*p0`(NN8AOMCR*uy&=d#|-!^u{K*>R-sN- z-{r|xQ%Dm!N|{N7%wD8{sZ&bKiFPf3*EHwk5)Rkbn);VjJB#^JH-Be0%Z^l zZ68@9@b|c0$s8ki&~Pj#g>ktced44kuA4;4pf*##jPQLV+dmpWsAj1Ym-(B-W5TZU zJ&ezNoV8Egd{n*z{r9Hp&-r@)T=QU}s0-TSvdty*bnaM29C@ut-Xq6-QV&1XkpIEf zpjxQ+Kn3lerqs-=rO*xYv1G;!a(u6Br?^eF8#wFrrKuhHV9oZ6AN>FX+|qAQEuR-Sv5f!W|6x*ERoD)OZd7+h>HiM z+i38>6i~kZyk}sVA`ol@?dTeQMEBFMD$CwUEIW!1dgpeflnZt;NkT3tM;H%%^m<{U zx}(VWm1pTFgzZK;^t<~fv21cx8TaJlV3&^xYE9DZYuEoW)z-=`1FwPKZDNcvDjB(( zTUJ$q8LWbvEVY$*U%uD-n)JQnuZvzFx^?mr^4f$w8wj=+VEq>>@|XIjvctCt zJw>b?c>3<;*A#^_-DGu5WhY6YsRxci!43l%PDDc$gqq3@+8rX`&8!jCcbmEk$s)g; zA__;Je;?j);1tP(iZy63aE1*REW}~3`kz`3W@m}TrL>2~_&~*qUL(I3Fiveu7jZIQ zY|mzvD{3GXVmx3}eUfS44`H|n%3O58Ldy%GFLvp>DosV47ymH@)!R+#_$=zA)^o;! zDs=gv(b^;$`R`1e8x8zqPGSQrrdKp;_5*EQ-=qoy#(r%+YS#PY;mw$&$g7`fL!P2k z@lf|G4lOhrweZu#pt!i@W6f;Xph4fPVVSfVOY!Q-i2zmTcrjMHL!el_iO2ZSfIRO3 z%wU$=tFC(h@y*C673}t>O3nE_VE@kH9w4vX&?y))yU+v+CSFyWof?p+Ec7pk8)5h| z&Z9i}^;im^J;SSWozj~3{`#*+WseSzyRGGWf3(F zVZ55mIRgvdd77SP``=HZDs@5Tx>gI3m*^L?MfqQzfJ`}YxVX+!04X+UAb{;F9g|k# zKS{5TjL%D!wObkm6b-|wS`7}W#>&0U+g^do=W(>*UW zs)M&G_>m&~%lMvC>QgNV|EgkS`R#qY)=ST%qroALf*|**t$4+0maOU4X`Dl?%DIk= zde65H>zrjXN+=`ZJk*kPHbvhl9cz|M2k+CV7OBQeJHD2lCOkA&{}?D333)XW0d`6% zdfkypQ4CI}{6pel?#-QdO2IOc;poztN;m31>qMRq-^uk>nk81e$bZ%`_6?W9gD?%y znd6Lzs$5D+d$JmK{NAVE~B6DNEK=>zM=rLq?8 zt15Y{#4w&|7i|?)zX?>^oZ5K)D_jwsYwMvb6q2&XiSvrHyXf-v)8(zh5^w1JH0nTC z<8A1tob9=kdR+w~h5t;-_yAL==c}*JZ?6s67i$@xZ(i#DEY)slPu-Eab&|2mOzKaQ z0sArS&wm%CooCU|ARVTnK<2zFDs%4opi0KI8v9DWf=)1yZLX6vNFW+%*XB)D;^%eC zrv7bdhbu(oZUD_e9r9K;h^0WS(g8SK16sLTpXojISt4S^J*vO}<8Gc~ ziu_ONEPv{niOy6C6uh!n6dcT?JC|UkIC|x@$Xl;HABoJ)ZQh!1c0iSE~xA9wxe z+9!=jUi^Fw9NF@$ps!6?O5v^Cm~M0O{bvd*=NPr*IdLspkALbILeK4%qxl)a*P8jb z#QxIr%Ue%sbQAEizgWVsOvc#UOq<6+F8JDW?H=&;LLhR59h1DSsinvZ4=@XR?#}+2 z$OyMl#qmsjUWWqZD8m?@7XceZlmr4I??HUT{zw9?&ZCCbgNEwK2$WVqU zdG$zi%gyqk6Du6@81!nI>rIq(MxQD(>==_EmR264L=oY4#D3dWwGon4hYgwUm_HM| zNoeUilzGxoXOc~d8voJxDu@-e@)PyIdzO95nudB>=2KPdVKwJQ6V;Oeiz8G{0i{%509kiC+ls$B^m; z!xv=d946}IiiP&Z|D>v>_~oHEY_cclKyK%>TWI?fN^+ZfW8Eo;$tgEC6WiyLiI#Sk z!i)U7fvS9#5vW3$ws-vd_t|xn*EqRcL}vwt=tQ`;i$dhlZRo&1{dpz!eS2%01ZC#W zMBChpEr+n6CQ6}kZY9EH_81Cj&d+N6M&#uK!MPt2Z7yaT!osaDOEW`(SQrVXAK3 z7NOy zAd5Tr@W!Q0DBC1aS(o?#eF9@B;%57J%~C7F*futb_M+VzBSt)=V=C=9&Im6a#Ux@3 z-Rj1-Z!_L(IUml~ACDKWw4h-j>6oa5JGk7FPwBsvN?y+1?aX)I@NDw9T}q_N-UFJ* z?_#Rl+}!P>L{m@AZ=(*2%#u9*($1+RFS-g}8A6oa!bM`c7T`40miEhM>wb0TOAnpS z=~kiJ3%vY7EHi_ zo5gE7BfEN5)N?%IZt^@_c*_f;bCj=++q?oS4K)@aY}ZVvI+YT_<6-gKKfp zmhUoerNz(LjLn>}>XgW*dpmOUL9CdM>#{5sn7)^JWqYmXAwgnNfq2IGvX5$blJ5Zz zZg|o$O()P^De>v7FB3a=jpY1czZF#azX1{b~`VX5)k^B_{ zC2!cD!VE|rlS$NCAlb$4Dnq;Xdef9w&bLlnH)+L_`R5wgt_8$p=_0RL@4Ul58ZT)_ zuHxM>__?WdVIUr%l}=KBUVGO~TTrpaoUhC?-UGV3h_^azO^5GOVY z4HBM^(Kxv~Vq1H}ar(Sg6-)=&mU$|+6@0kJ8eb9+F%aY%b~zOmH`6@IIS#M+%=b`o zyok}K1V?K@VXMyBR%$Ztg4Nu+#Dxx-+S@OIF0qX<$Qb39ENi}0ZOlGzeps}4tY9?~ z_x>~yXC;BN3>{aWr(MJopAz{X#uuht*T5jlxkaYOs0*s8*R9v}IL*1AL0xg?chzg3 z?QrIU0RP!|a%MQr?B=?><$pO_Xm0kJwX6Y!gtG&{$31%2&i_6KaR_^}4CzSgcjuC; zyW;_!3xf%2X;!icD1SMu`N$YON#K6)MN0om5iZD&rO0#SV<7Il9C?u1R1kh>s4X&< z*KvWmjwacgmiVLYe6nw-b37yMd@KlmH^Dn{1 zccQ0SOZvSal!q~)K{7ZQxH5*gYp>MH4VGRPSa`6)0+L#dk+HBoF7g9WH)hkS+Jl&* znd-<{MOzeofk<{*n2NSiv z`Vb>OU`k!fAue@M9kDnPA8^F7DoM-o%P)@Wm0xK#a}IC8WZMnaUw?M}bT^dXMib)! zy%BH1*rR+N4XsZtb;KSfkg{9f1BeJpN?wyUIGYCF6_cu*{T+5{$6-RZf(*@54I zN$cY){^|)&Cje5w5e8-9cdUq?W<*+t%g2FM8b{3iSK!beIRqiB7;=S)&KIGM4y}<9 z1*gf^vbr0;k?izkPH4Ji_|v0O_KM^f%YX-OL<6`$FsLJ9$yE z(TjVg^yVfGo?67xknRPshdqPqR>Ca!evT|*Q#XpUQzoK^O1ffb$X3En#otN4h^n*) zawvm>QTWf|VOQzUVwp(5;vE@*OW8BL8?BAj~Q!D-2)xFy2-c0dwvioq2d?}2(yQo8HAYCgq zav1lr*{eHS8*7`BsZst==Ao4LiiXa(`<6Dq9Mktq@Bw^J2bz&-wO+5#DEqX+rQUJY~)p~4&+dD*~kA#7YmU@iB>^bey~P}f(MqK_ec*& zkUkruk?kR1s@TZyoLRZpn$hi;%z1Xv6(=W95_`wtCv1r^u@^u`q(6C`Hq99$l5;k! zW<#7fpv414G1r}3oeiEirgxDv_}%#OP9D|y+yfMaljH+>h*k(J0R$aEvXpgZf6^aI zf{f>cYLn#YSlXnf>NC+aYXC-Li%;SINs)*%BGRaSlxY>yZ=ja}AW zOC2&9le-2xZB9tjTVzz4DUJjSuCYY1ka1u%{ZC4eQmdwY=wxp<&kvyOP#s$4tZVwq z+I1H=QumWdF4^KE@{B6Kp^HINJJ~=TStl;l!ph*L+#tQ%?DO#mk05y!gh-E9`NB82 zu5z8ZT6~5`jB(207XqsFI|-{V?mM0KeGUzca3ce50r)er?hv8H^CEjN$sPfFHZ zVn;i}T?BGOVe8CZr(^+SS*L1)6TmSXm13@L+oF$LDY?Qf@+_&UPjZ?-!$WNpIJ@dJ zjojARDfa+gG!>bW?z6dIE}u2SFOj?26m~^JMNb;XEgfEy%+@fevT>A_dGe$bvPtY} z{LQ*DJm$`Nwi7V5&81NASO1&+G*#g6Mwr&AJGc4Zko~2_Zcrr|kAl*!_Nga~-{X|7 z(~#NF;qsA6LVe)t7V`Vq|84va{>S*|gB2OyZC4kko-?v;&KMmG&b&BdKkZqU|D`)f zTQqFjd?9keGZ){+z>>f2?wCbMqX;Mi9BMt%egqycBx_Jm;99cck=zc+X2EynUMd#F(&8CR*aEU^L4L&om`bnNk?Rzxe-KF@G& zqJgPD279GPR$pD!Aiql!J1AM8+fMceEot@cSSJLWDFWIP8hb9@Cte}wsuL3@5R9mF z)5j-&pJWtMfSM;~KFUjNl>M02Cz|9+9T(~Cob|MSn9sA&%<)6A=v}EYSCNXo5%ERo zCDpKAO-w$J6{Wdob|oJvdQ72>wjj`Ip0T?-Y}b6oVv&pNcuqe5Z$q{}6(pbUN~&?`^l5j*oVx_Uhqh?ypf(ahuF_qMWAxL<9emT-4dA6Ah+!lcWe5@JKF z-Tv|zaL*q~Enim$v5?g1&|U$g)fJv)=$cH6MB+i{* zO22ojRRHt0U0r^Q!v7xd$O(`9TyawC4|qQhwP zOM(Ph&QpRSFL`^p`rxdqX>=c&;~suWtj-BNWV^X0=FI;>U3)0m0vp7)8B@T$ zUQG=OlkXS!Auj&#$nD9VfY@iVLm{$|u!`=IG%cs>LP+S(=f<|^VpTnZPsIv5efY*7 zD2_;jYEa>5%M)m0~Y~xvuiehi_?K%d5Ra1g{fI}CRU#L;jl#I8} zRcE~WNQ8qwnB;^Z)W}LFl=znKtFdct+}3=5qI%wB0J%nhTJ6dgct~Ak|Q?1d4{kC5se-thtNTa+;P8l=%NNxO81RuwN>q!~<;A+J?Mmlq* z0|4W7h3LU*m_sTQgiZCuFX-!>L==gCmBAZojbWn!#^7GE-vjWhH(f6{ih|ezQNl>M zJTEu?8_hDAKb|=as?Bme#yA)tH^LL_br7;fiAUwCxJMeafwD(CpJ?|>n?UQ^KApRG zJT-2CcAl#!+flL8U)HuY-{+_9 zQk8chf3UFhsnsp+u;9Vof})Ew&Tr*=fUmrg)vst~B+fDHP5Fbukl`ELsrOSM6d2bP z+WwG_)rr-DEm@mbPq44CMLx1oe*O-B!nr1%dxRpsJp9&aOMW39IUak*>%%qMK~SJ>m{sBi8jM*9z+i*zFCg~-49M@cI7FPelXdX6 zO%a<;Gmt8^9L|9>LsRboPWzvVFna7>_#5q!PLG9zvo`jvSVH?WZk+D{dEwX&a_<2f z-b0u{R14Ar zT{d0e=f4mBxe#9$XoOhgyH)wC^54BhD2lM=9&m=1kG~{n4!uYGj{|}Yl5-Xn7UJo5 z4hgi2~S#)PkiNf zh8V+*>{RSykq}vAJSK5yWF&|0pX$MR5J4MeGyJa%{wxbzov>YGVmw%)jV(TR91kQJKM<=95*WI53;zfSsKxvJ{IY>5z2HrIl8O}2^H zURhnRkt~{x-&-dCy-Tra%loZPa+srxqpUD)c~c_lQ4U(s?XOj-JgNLg0RoH zCe}^g`q7(v0P65*0REj!Koj%qc}IMt2p|88aLs85#8&aUao!t12ml!Dyd_>c6SY3x zYvQuc+oDUJs9trXFWZkXF@y>_?xw7?8GN)If zjnE=9%QqYNAHOq(7|@}=+|mZDOddduLFJ1Rc?p)eDsp` z3K$hw4pqo=%%V0u5G2|Ht(*-qD&6jt?k1sq0V6Cc%8q_e<8HYp841=Lq6j z%juJ>)C4Necv-yOP@BySG;1^BVt0Kt(pOWN9?eu1{LyrfNuA&*?oy~d6m-Xo(S|w(ME>C2ZU$Z9 z$C?6)5-RKy`ajTL)t;gMU_Pf!i5CAV9hT6qF_oC19;B1T&_PH0sHOE~DrcoSv?SLD zomykZ+8|a=Kog!$?OYER@l~1V9e(y_s z1YS|?J{sx{$?tMM*Cy~Y>+{)n%H5@Iq{!{2cvBwwG$v=Dv81-KMTx1Oi<>!b=G9H? zhg&s2&l7)J(xEaq#U*e*G_K1Y8p$m7RfRslK`Q)#(bni2d*5qSIU^R`oPe7h?9#NU z--@K6u4rFvOOao*V}yM9PeJoJTl1l@mga-paeiYDcqKbWIB<$$kkK$Dyt>N4kWZIO zgWkIj(oo=t^A`|hV*Xp7oL6Bk^l8sZyy(4 zyEPkcu|$0Ply9x_A^pn8H~nL$u8!q|y}FikJ=_kv-{mA1RZlFe7?0L`D(Ag@_Q6+R z|KOO*%oVvZ#MX9$Zm=2CnK?VSDl}U3*UL(Oi@B;HYniVH=X9dl%KHXmW#b&l<|N>n zyMLzT3#A-TbHp3>XCna|==5vl_(K77tUm%>c6SfhRr#NTX|QTg=$Jdbd2W2wKcx``hygE4;`00{=xj3W8Uvf_fc&`cR|cltGWB#Q5O{sguC!| z8D(*cu{}SV+P*NOC%nW>jFP)XNhG){*b2G953h<|#N1Jp6!**5Lx^^_RdTL(bgI#^ z_$FWch1mls}~&xum9vv!#+F zSWGL{AN9}5@Dw^yWJMj?xZQZ!)!e<@_r%zDn{G8Z`;59c|0OSA#<_L+`%Cl9Ny)es zt-M3D{6nkJ^)7AQDScxwktrqMzc+;5!_E7ov0C%&ubr*V} zrYNVEVu&s!-eV&C_&z~}HGHLuTs`L=U>E|u8_#~$iW2Bu=H9w!ABOmv)%nWl zc8{;?)9=yZqIMLC?v36;;;w05E^aj zY+BM6`gnd!oX1o(ECPTMQLSrJvqr?+O^X z}4jM2qMp0#Dw<2k&lcCZip7!1dlWw zw2Cf-uQD}yRvt~`SziakIXz`Hnx0@4g!-cfvD*Xs`x%Wib^lE$;I`|bHchD zPG%XzId1illhua6fF{p+Tm~H8=Gw5BD))wNNFg*%TS1!a;xZ8GxX={U;1ug--t1KI zJB{~fP!i4j#fQpJkn7WTUcNZ3%cBN{7U=P&!x6uEd)(lQ%s4gC)gabtv-qe^hOiSV zDBDO-$^33rpXS@CyvrZu&QQ!K>bE-PJ>fJj zn}v#b=I838-Z#=B8QVKj;F}9(Nz~DDK|c`77K3KW544!2wRB`2L0>p*d8YXj+1Vax zi`Lf!e0o>CqEfuiQcnZBwOKE|TS)2c8GKC0=S_SWF==SlbhWm~+1eL}He_OZ1l_ecR5hw%&`= zW}+8_xg%QKcmv2Z9eC3k!znoNe2*{TOe@tmG6+6@2qQ%s=(dY>?Hx7oRLP^?m)X!e zf{{Vq{kq!b*)QV~m5+XX!1?0zy&0~hMw&BF&F}q{@L9$2r@sUIn!ok>XYkp)|S z)&LU7RV^hsJ-09y4;|?+H3rlyk5@h*Gp*f%lS#U!_GnZ*(H8y5UpluBZ!24i)|JMZ zZt3b(c->z(ncRi@)Sl+ttk{g&h75Qwf~4qaV=|Eari98!Q+Ig1BFbsYc6e7;bf4nu z67Y?CX&Y0)o(e7B)vU@)T)>%mRJ&Y#pN}>G9!(|;y>`Qz@kVSi(JAg){|Y2GbC(aD zBOAmrg8rK?IttBcBvzVAi+QT6XB2H;k+^$vIR3I9d^gy*$HU;ttq>GA2pLC5w9TX#jxU^nfk8l#0YF3|Sdb|NeY z%|jcI;@&Z&M-hi_uIfKnq?NF_&BVPhK(uQm88t9>!S!B!*DY*lRIA1|F4e(?iMuy% zN14=*Hp_G7FoLr5IoxNJkkgTCb>wc>!Ea;=il)!ZiHLpK zyHK#n`-rBTr5{*Yg;+q>NI7qpjV{Z)ToW^bawVW(`mDYn_HP0y;#@ot5}xX)@sl0Jr#=! z^c5V6d8NeF^RTquf2&JRjz44!%+fENj_`6osKc#pZ4Z|z`@L2Q5<(ZS-cp0W!7r4i zD+w2xCjKtqwgC5ZF=wjfqeWJ#d*p9seL*7HrNJ)*`iEAPT@Tv1yw_PG0*rnIwej2O zdpzI3f7iZtN3|{g2z#~50=>Q``**KeG>xtvFmtl$vBnO1W}C;&0|J4wAKiIO4G$|M zxZjhrViqg=a&KNCpf9XR(ze*geUrcNoJp@gOvNhwlOXxxy>8LU^hYgb1umPo7{r8p zgLwaS=wmC`ng!W=zT)ibqhDHvTTGO;RV#NFr}#y)@L#^97b&r%{bbDI`d=$cSV2wE zGbboN7uWbjcMymIV5s|r0DvC=QFeIrvC_Vr+G9=KPZYk_(O&StkgR zGBt6_#;H7@$TLE0xf|J`zi!pbXOFb2ZbYv`&VPR<9UW%jjz5A{uxQN^^yc7>qj+HM zpB`wx1QeTW9@Rk21G8tZa@M;@ckZ4}u}+*zdp9*S(E_|Vunz@oPxUOOi@8>bABOQF zz?HY_R>YsONhhr*ydGg&eX)(JT%M2r90)$W2gKyii5y4L2O2y4#oGVxw=))R6z&0x zITOCnk2A;_`|0gSwO@Qy%c^lEl&yKP=&!=@kf7wUkdcMXx?s7Ia=*GmaUidy8uL<8 zKQ_R-AJFh2H9s~_Q+E7^cl4olKYhwoXU*q-;=cSAo1RH(cM3jKN(W1}Ogu-=uAgB; zZ%W*uYl8Oxcmz1$kGKZ zbD+sN6)$qGQW%8OH7P^>vSg!+Vtlhd@n@jlmp{ovOVzqN(%D}tZj><_NC7&Lw1k%F z`p&O}i|H)qlWn(Bz^^NN7+qS|$JQh#_#RDHD@*HLQg_ko@?@oJQ)OnWWvlt;R?y9$ zF%IUxgt?wa@^h<=wVNk&i|>h`b`?p28fWgQJuMR`=b+LoJ_|hF~L$F?>GywoPzi>jA`17F-;|-HFM~Ox$#w2{rp8cmC8>RntAc7kfLUwEcdy` z+VpcR2?%HYMzIsJ#yI((vn)?stQ4cW(`(M5wMmj-BB}yP1<&|hE5R7p+`no};5S{e zuk~#4xiDT2=HjY>jv6bz=mF+s63!?ZTzDm~O`&Ql^XzAdHsB}{)oEX%L99@nBs?+u z{fF0prm5}Z?Hg^%&Q{N{u&XX43rLD%nTMl|0 zWAydL9OJ0)9?A2X{M!D82UW{31sSfYP)E=|B)$g-g?ils)DJ(W6kK+ zU64g+8zMGCnz64uM6}!k5<$~B=y;4l0dloZ`-=8Z{hh=E$;z7-P1fCa)>no# zu7X1k+cUSGXiXW(zv-L!hAhznYTE@LqG*umeb=jaj%YFZ85&>lS0WyRbi98?r(=NI zevLa4kX5#7+Tu&vJsu*PtR~Sk>TRo&Z6xr=9iwI4?%*M{P|nK2kk-IImSr~&3}T^^ z7K1uD>(_xUK$Vj{Js|KN z0I@RZm5~LFI$d+qzYWq0d~p|?xUto|;3wg!9TMGgaSs?+T~J-VyrVtAyR&HGlHEI* z3aC`U4s*k5Ly&OkK3>|3)4?RQyW^2>DMEB0;{ z<@pDXn+Z^}wDzEL?E#v5Pc-bN=AE;Svk* zsgMrzqFk;F454D4n^lM;g~vSAcacD5JiqmxTZ z&}BLqD>!b7xpC$BbM;P?VzQWAy^GPGu4hz8Vu)@ZG!ZK#}0#Y;yi?fUBPr zQGnKe*=m0=pmHrp*TReT=MRV9~ry*`KL54)OqdxkTei@araRI6*@SjYDJ)VM8 zsWqc_LsE&Bzqm_AZFbO-y9t|HwZ*T=oI=(~ZM8BVcF=pu1yZOEIS^;p@3_&?GR}zO zQY8!5o{R2GLhOQ$qzULMgr~h+Ld?|ge#{T*&cz3yWBIQZjT)bJD~Cn}hFiT<3bB2k z3_5C;Mw*;or!L7~cD13*9jA}i|$SKxX zT^)|eIfd?joVg7Z9&?`y;)Zc~as`R)-+CVyp?ssMceBTO(2IFJZpS$%P_{0(Sr*(V zuRJV?%qgmK#@9Y89un$uf*@T#y%BMr^P3mw=sf;&!z1{o+{UrBff;%tB5K-?#0~;IvtvJl z8N5$Y*n(0Wz7r(zf}|Qa(Wa;(e^!Ir{$A}u?6p}Jyg=;2cZ5+V41q?Pw0Wk zFs0vvrh1uIv&RC==l<5@dX5&h`II9#1o9AOlZVht64T|DYko&2&wP;>6q7)jFudy0z~65})46t}-c8D5YrmDixEKBIRTdH_|de~Orx z{0q&i_$k|^E*2P)a$6xV&w?fUEl5x40nzVo@T5DueF#b0{m-k^+gv2o8l$s<8qUnM zV!*b>EJrOOUz5Z;M1&)ER7hmh;Vm;@G^kkMX@zVnWkjLhjpKq! z7KvVd*dUby%~U)0>`?$k;d2h!0Y`7eMXuJ0<8xcz37b#1VYs9{~*hPDC1oMe(GFidN+g zxocBtZO-y|`EM^s=nl)x9{f$=hF8#wr2ggj;3sjz`;mHn&xcuH21`*x*5-_ur7p~! zqyPPb%FT%Kd$hgG^#7detW=M42^95|+lWD2Y!kU(@V1ea!7Q~+J^0V(9NrKe*aFy^Hdkw0g2J+%9(&pE<&O`kL8gKcH0)8S+p)0~7EdOunQu&q<) zCTy$*iV#xoaV7d4?yMv#I&}x1$MfEDTVSW{h@HH;!)yPFMPaZmjjc)R_B)4^pt|fV zJ=!oC;z_{|`fq~Ys= ObOq#qd@x95~6v3v)lD(&)|7T(hb$T>d-{xp1Ze}rv!Ng zL(CC5@JDDBEPtt$OIQtj_ecHW=nzauxDjv@mLaJQ?5 zN=-+J-2<|)liC9)7f-HG^JMM4WxchxJ;n`&;Z}=e;sN&~a*;w~mW1&3vQ`Re;xn;Z_qN z)F*pIN82amu@vLayIhJ) z2jf!zM8tf+8SpPZBt!Z^(qe3(+lC9gUR6UjMD9W|Nkn`)_0nJ1AWoM`cw`NPF(hR> zJjD`U{t9O^3V7&H4iWR1OwWOT^oO8e4)j~)FKq_MRM$X?G^HC;^?%r?XyY#`&|9de zY+I%X;r~U{o5w@_MgQZXQYum=OLi4AwAjivmh6*t79&KKEF+aQ#+DE!Ye>Y{jj=|? zmL7cHT41q?x#P%ClDtpW!la zij{_mE{He78b6Z+O$&WPi@3T~t!Ht@k`=`>DneM5$``B_edeJBT-~B~DRN(AsZ}Rc zrr0z&W+d-LDdp;AiOzC`a}2TdZ+zul0;_zE-r6ENuCp3|xdJMV+H~Km)nb4od)*WS zBmC$1kIa7~>!JGEprfQ8ho?b{g51hg)05}5{Ti{{p&tXQ212_(sbvJ%2!44&O>u1Q zVW{b?mHG7M3eCT@DgWb>ki`<(>)aZKPc0O+^0YANU_Vhl|IK`Keo2aB~@eIgYSPKOx8FqsBIyf$-LInMve2 zP8$4H_7WL2$fHrT5eWH4Mh6A6QPUYJKMmx-wY^T=(u`7Zp2c3%BnK?II3i*5135cE zW<-Vl%H7hFU3#KoLGX3sp;TOar&dcXzaWG12uss-pQ!6;(l7T2RkZ|NP6cE%wZ7-> zDX)|WULLZ2WDWD^LbdC1t-XZrPo(ov#w3A}z40T%8}>2fr+ttD-d*+YAet5$G`9EG3Gy@Cx`3JBD5I9BEYY zeSOoOGiMCzxj2^Xd!!C3zZSTUJT1i^D_IHZ%_YVU*f-0cjo_94wC+u@9=2*rNJkq; zv%HX1X#kI#eCYF-G_`1g$L8cnFNp1#b=SE^y|ku24iousq#p%+;vBCM9e*ltK2@ToM!Ci`}% z=W!-btVW*I(avxMH27p?wal&;7u?!vGU>nq@BUzW!YL%TDrHY=wBA^!U{2aoD||!C zxV{4k4=VOtv)lowX+b6Go_Auqz>5NtjV>XJyPnY~;4W9V#~oH!?+p6~ICyzG*NJ4k zkuu20?Y1!!E?+CneJVN>+@AW#qn66pco;Rh( zc5K&VAN}cX89EYoY<9d7tV!SH;3{0;acQ1^usXf^5K1 z>fT)eAnY~*NP>L7fB;t-xm5I=&*1|v*+4-Bd7`ctR=ZET4(nKtx@WCSWfam%RcjYa z2DGg3NrOg$^RdBfJ?VY!Vxrl$3Apr~LK|v5_yMB3JtzHjVb6+%%*&EJtUvAZ8>jE~ z26bOT%~J%{EoIYj^)c5!+)>$p!dZ#RmMRpMJ|$dXI|Wy3u6LW zm39b@d0M4%kz~~w8oOJzYj^8fbVQ^*F06x9zQB$}43D`I?W7<-$k(yR8)O!|&*0Ta zT(yV}R}S*F=@BT-0Z@T#v^t9^&u0H)v&{GIWSyQNz5(>TXoJnmY|aL;m^~xK1-XxR z6jn6Lyaxeedu@RvVgqab9ZJEdheUpz&!;JiTvj2cpCI2(G75xjfAwG@3qIsGdw$Vp zFhon_j}ADX!9xjEah2U=!ls6~GTE~-olQgO;vE-*fX$X-ygB`lI4cRoeu2+xLLuwX2}T=l6qeMKT4s!D;j#@OblrF; zV9bN-oi`{uhPO*T8`}i~lmjXQdd}s`?}JaCL(AcZNpwmI(aV*)oSLtT@Ka4bMikA==wq$ZCyNl?`4iW|y+8hh;o%?wK`Gu*ouGUNZy)uA~uS z8)q>^G+!k!_dgwMSw*!FBN{#GJCTo#&Ju@)UtmzsURy{9?t1u4J}a#e&6>_2BL52^ zNV{eZ3(~$%NPD3|Q%=?TO7)iOckvuccd#|l+#51b9tscarr=Z@AvIr+~1C zSAHemGRqtNYt1vkv8f+l{L;m?)jf42l?j#0Q>?xXp{cex0X}#AKhQiL^KX^xy4Bpv z5I3GKbs+hT_quPyhK`gpJU;(82(+Jac5bZ1@X4QMn+>&l6wh-LNve+g3733lh!4)t zV@cKPp?FAfhv#6(qD|32S%6oTtv+`l8UF4TLB8f%P)<>gkXWqbaBh@z()oK)>fegW zg-mooU!-8ZYWZ;AlmZ#oq5Mc`cNu{@_fDi04!o9O6(!9@MNu$i1E1t4VRh^`q&53D zO&a{ZLW@!HbF+-16<${A7kl%OGri7HTZID9Qy95`;g@k+rPJoWwE9N%x6~|b-|~u= zI?KE~PUbYW#xp8QT+bw_G(ok+Q_#_Vf=QE7+f#7w*fDpBBqpbkkH2ezB-IP$e%0}S zRDUiLm=mH;e9h8LPe(OI@Z^tb+d~!t6}S#76?0vnkcIb3X}+4nz9rWqD<+LnHGBF_ zgHHy`f&z4-_tVr<7rVBBJIaex@Sg92U~5XxIXb$U>4mcC+-zd6=Yz{X{}QzF5aRi2 z-8_PCO84v)>Bbw8P)WRRVm%j5&;o1vn~-m{!AcTT-!9yzq&8Qo0Y_|n|C!qN!Kch6 z@>XH4V3~JN&uP-}pE9|56(W1?=$h*=z+CZct)RfG@!5pOi&!7Ef#SvMVuka~Zv&op z3v%4^o@pE_PQ{iA{W*5p?hHvC>u~4}%WTx&IK&qpHfaO$Ce)XOK-{)C)XBHsu0=>m zI^mKH%~(eWr)w9G%VAF+BGOU~QLNEv2^Mv~k$<$a;h_`7lFZWZH{{1l$ZMaFo#Hpm#8VW-(z@_EKCMrpW}4zywW||0c;8&V*3B&w>yEUq z@(*n?4TFA3`}u&02O1L9sk?8}AG7;?U&3{Z{8{g?F@MjsU|NRZlVR?0j zRRbj`i&rT16I+eO?hpG!0`ZzT@M8O!y!zBj+ASq}Vo>gUw{I7DS5bV@(Ltm|lQLTg zo=RQ3G%^E<9hpm*Ej9H$*k8BK=bM)ai5&*YE|m|Ei9HM4?E(}NtQ{CcFLYl7yH@=Sx5?$g&}HJ#_F6R z|6t{aATyQdP2Kmpu-eOVzu|R^GW{9g0ns!v-Du+#RNAc7Db#q>pC-31?gi%B7T<9m z&HPntjldo!`5Dsp&4SGxkK6xI*Y=@>y{DTiA0F~P&d-}0d{yG`DBR%nnH3woT?B%! zI_Bhe&ujMfN7?~%Z+o%guSm~7VQlP^D?l{y5302Y&(Y z@aL%ou76C9^W7P`81FzDecNV|@O_7==}kV{Xs@tP2CR-By?$@lUhKf^Vc7Ki4GwI) zAV!<8j2NrHBgEIb+$mE{3P-Ih6Zi|l;l`TA8#WcEYcaol!>gYE@u5;)R37*+_)8I| z8AS)zg<72_bWfr`nkDNUnmTW}%q&u--UUThU!`Vzxlwc$3J&NdTh%<|4xPzt#${bw zpc`#^lD%44K^DJ{w%!;x7Wxqs_y^n390SI)WbCdA2o~G_HYg$@_WR->I{h8Pfg-Vj z%>T$LfSDPsn@4}$0zJ8z6ZbbZ(D+8vxMjin>0WbR-F=Pwf=_4OQ`c^rFaN#-aW(6BeawG)i`@bP@-l zW>u4a84=TG?0W?Ddm6&5I|12g>a?uyElSTbti)FQ-ha-GNBi`#RfukcDZGKRoOQNs%(@21cf=Ojm z7>>uv;%ZGeDKO_a_v@GpM12y>Qg%GehqB67B}UijQ(QIguKNQoK#b!jW0+O#I@W}$Yb+o6t~La&Oc6@eScjr zT} zsgl9lu-v0%xs*(ofc?FnslLRdbha>Lv5kOH!WL=$WNU#%m}4Gd;>)6`3T`x~HSNRW zgJEw4A~J0yoaK8lu0leu>l={2VS19a#4enuv1(b;l++|4zM(7k*W0%^5H-y=%B22*eH!o@8LyVV(`PMSEPs9@_CB2va(CRMM< zLu6K<_+iTewMYr?A#0rsDUgXu6y5m)NssCzxhetp*H%{-s3}_4u8axh?%doFcVk5s$pc{@Uv({9H&sOQqw%9N5R7U7~bDI0U_F5^mq zBxebJ?7;8M-WQaM*eW8ZHF5B@ix20JyV-k{V2j}74#_vZiG#UXg@r*mc<%X515{RM zRz7e7>fst&AiM>p3jg{m@#`<7@9II7ZS$9h{+@*Y@g2Vaw_wy$$uQzBZCfh!P|P;6 z5zd`v>1aYWM?B`7s=jCPT&}jcP6X6aDp%#@&I_&2Ip; znJa~=irJDtg@Rl7=bMyqGD?cESIjY!;y-qd>xCY)`K>(t0^--^Uiwm2xD&6&<~vgt z%t063mM7IeHOgiB$K=aFe`K5s4S!N}i1wZfHkkT6X5I~HA3%Lam5>w7c< zaC%~q3O^j@JU3WeB(3<9Jk|dKY|NEhdA-YNBu#f3enRI2|48KP&+Hw!lDH~eY0Wo~(*c#RFvxv=byQ5m8^ zyhX7eSfQ@^v~+t>0Ct$KTgNEnn9BZ;HK|`%M5nrUV#4Fu=rIWMuYHnq1Moho!)hwl zCER}&R6|lGY7u`g+(<*z+$eMVs#pLL&~~H?#z3At{)qL|uMr2?J6a0cQ(s-MRU!~| zQct(gsCaH#q8ami(rx1)5*c2%Y?6m&>!rX{nlY6~_Md#%Le-AiA~PsP4%c1FKlIT( z7886s7TEF$!KR8I36l7tc~VpJ4>M^KuokBLz|IE$(T^iBO3&TD=vWGlTl813kFGwQ9~a;2)?i|ujw*0Cyf z$zm%0!$WTiT)&me7NiNVRXr78A7K^7Z9&D%EwesZ@xzn^d;c-f$^^t1#R+9+#G=t1 z?(7eA1&rV43_sm3-(?+gc-Z?CWQ2LHTmR=D(-a(AuuBbj*h zCv$=`&3qkmj2EBh3Y!9X_p7-T2~iQydmBsP%y`8-7XHC?^Nx5UqQvPuK?V;QrZlpY z+PCzMJ!$H~9dDv8s3_{~heoh&nFLwIk))^iirJa0aDKq>f^-CQ-xTK~@l|Z3#K8gi zG&cbueWJ`Jp}bOGUQYQd2> zR-~uUX|Wg<-fd#Lf+GrlV-)|*b1eR}Ro3k(>n_Xdw}{G6P;p1k2{6qRC9GJ7D}~ka z_9+&9S1c7bO-Jb>#=a~L^M$CFDac>GT`r6QJnpGQ%bCCC>t~T;7s1K=e33*}D29HU zA8Dyem_@G`jUl`91GR6oHtI4HAVIl}HwN*(g~^&jxdyKwJ6RoP=LtXh+>J&R7-cRa zPz$a|kg+Y!XOgx-Y>me{;<*F?S{GD_zZ@7eECcm4K6f+?+^U{BKy0ToDU_?032#db zh;c@5_DV!2ZVVmU(2dW<^}X|r1ps&?$~6T9u+hq1R@ z_dC2frmuB>6ADVU73s8QJl5>PP}`xB@4VTf*tE^wL6YrP%-*R=TL)s^REU~yb`?i~ zprVUrBT5^^-IOYQP=yhb3g z9(gZpt;M^rq^#w>cjrD3co1*4ihTu?XmW3(IY&q$bqO!7&I^?Wn91Jw{W5QBIq(_x zy?L`jSGM>dZ)?TeL>>is2lnAPSmN8yx&%JrQiKG9s9wMp5C3Fk+N&l&%tCxEurjZL z&&oC6llVjm67!WCL3-J5a^=B=W5g4jAeKN`GfVlirJQDx0KW}OId8EzwYWw;$F9P3 zKM<3D3pcJK(ZV`}Bx|TyJZe~PDIp*k&T!!$Z@OmEmDUl< zQ?Z1RM3?=UI&t%D2~*KC()F32gq|Wpj1*@ws~h%76im#eiw%rkwI>fgIp&=s`;lDn zWWH;#FkF)Eq`WARB^L6;;K;SNI1-AJ)4O}g6J8_)OL3B8Xm%*mGR>MI0ONI~&(r8^ zXeR6faAqlMH0qB&PsfKVX{kOuUJ(R-9&U7&3Ys%Yj_L-NQ~%L=%!|BmrBdE9oryL> z@WNo$RQQSiI@iauKjV5+DxiW+-KJ ziiMN6oal9PR6ep8_M!Yn0|l0(aj7I{vsbhX(_QKZn#0P)&sluRNh?Ma(Gsk6^I>Ac zSXAw=A$JprVzvu@$t62bHp9}l;M+Ul4|Ncen?A9pO{4Y} z;mn@61+QhF``Ky&i_*RKZY22+d3@~9=qwc|q~u?}B6sP7w#qDsS6+|vDqAFeSd1?w zLO$nK`+3M|ve6IGtN>J&Udhx3rg#l9c!1LFQW0vcdMjrtsfH~Zwq2)<6sxhaq)o^O ziLk`A7ImHWmG>~-9>Q3gq-IEG(Ru`h+96<6VIw$X^~eYQ==2s9na z8KO=B5V=r3R71cWaq5u%z1V!)87_J*1dtG10wVgQys&1-BxnIuhTU@E45J8p6Cyi# ziJyE4CmD;@fffq{SkxJ-!7yI|zv2_Ryj)XFuWJcb0IU+-pa3WQ45CVf?t4j&r_Yxu z|N5&%JLT`hZ>1LrwVnlys4^a3H@MsgyUbj-U@{^RW8z3SYm8h$6um6t zBe55`^Sm_!fl-*&+o1W8)Iab@$k3mvB9aog98yKmNzz6YpJ}QZ2HB!Pzef`OP$P?E zdyQD_^>X=#avF-hZ@FZvZxLzK1Z`Mu+UAmMb(&yqJ}g(j{v<-SB#eG@MS*tMbkuN43|y~=&B%i0T)$AN5)8L zb>c!QwPEe{s>u&4{TRg%X<-k4yJE#oo|fX9(VVD{d&4)LW~q1L0jRtVEajU+C?BCC zEJ;k8nY+VRp2cgPpu!iP#J`a5T;Rs%a6T7soE*5DS&pYgkvkO-}JS6en z08YMiv2+n0ez@4;*_jXHriEI`7Yp_YMhX6$a?Cs1B@jV}@7b>+iGo4azg&BYt+oqI z#ePup&nBkD-{KH}m|XbJU^KE_gQad0nZA-?+yq;A5qnO<*f7N`<`R=4S-)m1|13pb zv~vjH6h)R{lZY3?IvXWS7s=-1`-tj=5GzF4%lipeMi{xS*r6s%Y*3P)+v2{N_3+EP z+t#}O29{3x(cxiabIvs1I5E)CnI)k%w(D-m5^=E@cL9~_o_)j;mjr-E1Epq>bQ5-| zb_uBr{%TiFGAf2$DL|Dgl~C>{oj?NjolOxCTB?~-E{r9~9RZ z4`mA^+!yk1^W+sAN#2c(%*Il^XX0o1sXkqx8&PMlgB<0WFym64cCSB}n0K6?O)BQo zjSRIIdIMTf6=PXIsJ@sW<_dJN+KuO8-QiN5ILV+h7Q-?q=PAG$a*lH%OKg)k9+$5^ z3a!iiFd^4vDNuAtVILJ5Z4Wxf(HiSnz!hmMpja45kyjL~Y6GIh2yRMRQjjYqhUNj= zh286`y4A{yrXmnbDtfbCJ{0vC`zu29lg@gLftZi(=m#$PJ+^J=o0wyCY}T!-YL&aD_B zi>+<2%w}-lh)YWZqfU~D#d9;)K~PG>K^|^gJe#jY{4LklrHH0v>7oW?cWu^f66_Sf z0qNUNCN0u!lV)NZ2C}^57)53k~&oKjRzn%F9;!v`n}3qW%{3sqy@pc zrNRWXN^Gr2+gM1P1tg{|j;!ep&--KU*LQbogdYXTA5pR2e_!1T-yqQ->0xkKC$Q}BIiCv=7h@7_Y({G z_gJ##%$@;m_>dD^9Rd^#DKtGTx*U#0)^}#>gq&8!SveM*Q66j+Bt`!>?iXy}r9D$@>;*&ftpR!29tvXuIv z{s$G8herWHk$loj2S71NcTZRdZ342qQL=dse| zTt`X9g88um67~gr|Aqf>M%5QJzHXFZu2yNyCgBuu+li#?+zFc}B9{ny5zoNgq#I+2 zJY{^z>|=mr5l+BQ7?WQN6}}wIlh=lEkGujO50l}*!PzS!laPhF>_{eVE-AJP;O4=? zUw$Q=cdYv@mUHpM>VpLRl?Uc`y>*zWmo;n+#i`jD7hhFfj;+GaHp<0c&~(yz%=?XQ z_|z^wol*ErSP1r}FLLlQ?!J1iXs&o1EJZ9wt|O7GHL7Oe_l$J*X*3e%qy^^84DQRa z@57jh7Z!db$S0-_vuPRVK*VUJdZQq2ATl(BafR)a{EUr+ zbE}y4yBpHesdF=xo=WxxXA3TQ(r`XHvZjeY&7L_KfTQBUVIh4Is*J1hj`Lm}AFj-N z=oIklRoE(w17#`>vT5o=_mR32c~4&!en{&^u@}O5CXz3E8Y|H0hGK(+d|L?NiPAOQ z&4S1K$UMOe@Ewa!$%x8~OQN;=a67^nmc1%mUHE9)idy!Pnx)RQ@0eM`B7fs&KesC5 z+kbd2gq_tk?SAbXD!wu1-g5z0)=0pZvK^SG`I;^w+<1CVD9nGt3vW61i~JarI|`-4 z!&#!?g$h&NWqxR=67tOU;Opp3xEs`ES_yrPj?aLcv<)m$uM>j3uwoFI0Wg(JfhTj~ z@_>uMVT`swRJl^AJ>cX8WFQ$WcS>FuG14$bGS*3!&O)@V!%s2U;aP31K$3!C;DqpA zJuWt1Q(Vv_Y?^4k5-t+rpJqamu-4IrYI_(FX>3mdOmTJ9F{I3DxjD6e!~5q8bDsg> z(5DP_G&*4iHcx|P8x+|moI3%mnpG|URw6@AUiZr*8v>6|ln4gS38%Q+zV_OJE?=o&fq ziY%mk8&VR}Gs=mFuP?%6B*l@7F(Ntf38PeeBe}*i;#Oe~qJFD@vGTAUfL9l; z32Mt^Qmm7HVn=TMCvr}LRaEd1m>|AZ@&ri_za*9x9V>mf1bEA+S-6E{`${g}D|ZwM zK#Wy{8%vr=1|9F+*X?!Y^^vnA9dVIq5%-KWh|vq_47f9As{^hjo1eoylkJeTN-V?5 zeQFnW!Z!`A)Xoik)U{RTrCTMI6DN(r6F6DoV9)yfh}#39cs0I-_rhB)wq5FC3B3v& zBl!y?gIjbnlliWx z2SQA0r(P1=W|{G)PfJ_LOA2N{L?P?ApaJ7^329isDdh@y!ZcC-IA0CpbMO;@Hd`!Y z8^wQBM!X`-cnO6`U`yYE=ASvuDP75mA8t zz|prk{SALutYU#jFx!XOtO8Ct*|WQD{Ji27HHZsOF_Xi(p=8=TUU-=hAq;G=CaHu@ z(h1iz-_WM_{2?g_GI|DI->lVZ%DvqvzsFcw77mOa3j0TP~M9s7FfU&tR5z?0m*}S`s_7@CS}eQzn{- zjgL~pmNDw-p72wO07H&vKS4e6HrF9C#N|E^W(lkuVoYR}6GKBGE?@0xm(c&gu~+VC zzFcbrd0~sGV&LeMD#o10<}w{f?3V76e3NfqogtD9G0YVJENUy@MIS2h87z?30m#5S z2(yTsmu32ZR&k2OmT6yc8PLX)2&bB6q-{hGxef4Kp*|lS20;!@iJO6a^%|w>sXl z$jq4a=#hj9h~6o;Q22t^T6-_SIq}hq*L@^cc#8m;cV+*pgQW&> ztv;)=pQt04FA~(9ZX~jlKEN5)mFb%)i>OE9U?1It5!AZhR`hUY(Yjn#g-%$~Z8ezH z%aZF>OKmUp$+Fmy6ePeZ`Zug zg;)|WgFntopB4D5GnN!R5C@ybUt1-Fi;Slk*q0iIPUZ`S`>Z-#xz+~Z=E zTNiPgx+1`eo%g2P2Vg=haByK*wbDdND$c0-G-n&A4JkVXJEiPQH-B*PB_c~V8XgW9 zS}4H3Q06zHOf==;t_DvBx=g!F>(i~?mAt$k->=N}f@`g6Dw(X*>87N43dSv$#XnS( zOokI_X8?SF^4lLA)*UHeNMsKXrx+@c))bV4VW zxj8Qn6A&@|_VCg4WOx(z$M$2<7tArA?sKe)r|^r$&HJ-4HUbKoWE$@5`YIY3eY-jC z)aR5s%zvHNtn@k$`BBZlRh!Y$qXFG*$zU%agLZA~Sn3~B)~S?vfObXq@NV;4wLd4G z>^1Mw{${S80DWvm|(jGjcG8eoFWFAe)0HG59`uAnGZFa+e`ZBNW*ZRtD zEy~e0IHP_eH&VBuYHT}=_Il2#v67qTrdV;op90*kWGK5;4|o0;7iUsKs$~kr1mT@k zg=3d*MU_dM+lH;iC3nKrtNLF@7M06I!Nb~yZ3S2XnH_rz3Q`};Q z)7BD3zPty^Qr@4az4NgX+y*#Z}GsJq{$83zP?${y6K)M*74y;F7Qk7ykVxg+`B z+oWB?bW^bPhfUMDXBic9JrXp_+#oe9J7%&Nz?MHu3oZF3d^R->; z_ejrpXIULE;fL>U8A!%#nnt6>1J52B&e&Wylw12bA-=9PBVorAD;+1}BHb$d*LZP= z_WL&37>E7GL^kI9R*G5qZP}Sjs)h&DiY+rSpcGGo-Q0CVdnPDAeZQklJmtBd+1N10 z->JAyEOm@$1q~GW;}~DXso#P^ITgNN9$da&ym;!cV)O6*a@FLnIGKY>(#iV~+l7wT z*jtr>lPOO&u`A+oo~8pf^_lVJ{|5Fj6El_%BL8MxcL)z93TPk_Yzl)wG?8^es2t_e z{UE;?W}EFNMnVkU@*V@)Xl7;e+s-k0A!chm_ZO;zPdN+#Rh8T^ zdCh(i0h8OaR2!dnd$Q}9=VY6U<^@}y{~{84-S*2!fR9a64)30+jZcJQh1*Aa+P zo?Uu`)^#48LdVe4{EI6(F8HXPU*CFqxorZl{eRm$el>z98)_NB=hk#1jnYTX3EYagTGHfUWKu$}Lj@bI$bY*smZXv-t@2`_8Bt^ryInu>TWxdZbZ8m1%? zUn%?$?!Xk^50orO8z1|e7b@UtT*`9<>ku)frhdjt>d&Z5p?u;5b1LxHYNwTwaA{|V z-TOmN3_Xo6d25~kU%35_L!Y9(G%|h`;9u|dG%2tnfKAq+RvBLHIgvQ4q2=uh<|z z_5Lkt{bIMiM4RQ*sQ*k=6+bjz%WNqX>m7=07;%ETm6#m<1+p)hyjh8J+vVLr8KOh=b+z^w ztj$GV{9LcBJHLHow$V4fZ5GC=)dZ<*>G;~vU-?q(-v@Mh!LMtT)$?{ijjUPxY(2ff zImg_-`XSTZD)h-RTB8~jnliJ$^D?+%3|})+U9K!^_@p5!-LM)f%fkH-zBLzn%y8eeu2BuHXNF z1NSmQcQ`l=dcG5ExY>g7?;U=tqer$gbOWLRSLJTLY->`iyoZ%)ZZtjU5@I%|)c%Eb zg5U=*=Wlyh^xx5^-9VWNBecQZLik80UjGDdSCR2qe)J>xY^yo5r|&zLthN9`u{(T&r^UB^N_#&si2bUZG)bNTc1Nf>FfNrL^dG=iNZVh3dY)x@{P}8XFX1C6YbiNoyky|6(kfuia zl>Bo2*b%~M@u+bhS(`tGfz}Q3NxT(IS|Qz~SeP_;6>fKGxm-N?*Ow4ZY`ug*MGkcn zt6Y*%901kia6Yaik9P^8_!m%1S8f=I|JrtO)H6eC-1t};`UXnMH1<3`IU7_V9%6Cl z;gvs<`JV>z0IeLUcQNt6@`KhBUJtdA2FLE-k$r^p@v(SPY_sHfoz!6Ux$f&fCI;>O zq3-VFlu$TiKj8B%Vp+(>5B0A}&}hm4Yt6)Vc{HOr+FD|LzTmbuJ?0bfXt*j^N}A

`@f6NS{z}k^)k8@J7MmIC9*0v15cty{z)-%KQhao8OX+r8b5&>L z-@ktkFHC*7(O<>rHuRcx>+Qy?8U%JxD!vJH!gfDObxL^vIfYHG%RMWS>g#_$NXaLS zLs;g1itl$(Xtj*fO;6T?L%b=ce(hOA2R$i?*g>ED?!i%RzjPtkckPB|%5UE%uUil% zs}sgw{A>2S`j3@n4IGuPM*21&f6|NwHfoG%WrXXxjd!DIf82Fj72E3$EGJk(j2d)#cP2PuLU~X{CpsW3UiU@rZgygXP>N{tLx$@E z{{y|%lFEr{YjVt=-Vozm8tL8PI6QgS zoE&`dNV-8`f5gUEHCqUq@uQ_%_csC6zgF?%B{HslRn9x%WdFtW+V0AD4c6?FFSI>qe6AwGxV_+3fQ$z{<#cgO zf4fml(e+^z_#YD!6nUhuU0$dHUKeY@E2FAkKVLr5i*<7nG0)t-nj6G_fL?iM!(~Fg zmI!#3``3q%kMit$T$iMg*GNF-tK0UQKgK;)L;IfDD(G^h|6DNd{P~gZcZ+&iJs%lV z<4230yILhn3V5w`%Jd(26^=pv2#${xk?Qu*7hs)F?{tVnFF?Uxl+#9>AuMON%3Nql z_HSfiaJS-P{Q{n1yl-d@kAvwC{VH6&UBTX?b*sd70GX1ZVg3W31u!FRBZ-dxE&l~P zc4ciER`un-Apnz$*yF1J8#tW>Kz8**fBPIcSPR(4o>(j@Yqas%Wa*<$0{Ssmw&z&snHW8h{Jv+zq*fuA zZ{${S>t%R};Okg>Z7!$CMhxohklE{&L_}$gJZ!dJ2h(PDg~h_fZ4g)ezPZ%mtwT5Q z{rjJ&(G}0JYSD_D(QIQR>NO8lizPzD)7jGK=$B5=3#m^ZoBb|GycQNfvbPy-xIP61 zGbp@E@AnPUm|y->fR8S}-T81JaifWSxA@?tCSPxE0RP}8BlLk0Lvf$Xx^ep-Qvhvp zEi=OJy_-D$P06xKtaiXZCheDV0o<3|kI$XpUU4daQhd-%(foTGv|HRFbbc#yrI{ZS zzxXMbx$b*qrrxZOtWefIZ6S`FIexDlFL~Kn?ZR|0$KuT-*LNC?sezF*!n#ks?UdtG zv}Y)ne0$7N9s%*~s>ERFo(IbB)ii#nFP}bT61CnNZ1aLUBsIut)`s_Bthjy$okL$b zo(oo7*Nqze?!7n=5Wn$jzX>0?vQnP+&J6G5;^0~LBTA~B0T8E_Ef@{KlK0(v{S2$x z(fUrlXch%>u*N{^wJNnc$wq{Ji(9q*$&Rysu(S%7v5t%q^XlZ1_8OnT^C}(zK=q=M zz%%nrMuQBQJpRqGMixDq01xLlQ2cH9YXK6o<2FA&M zW3fI`N=Tc3Td!)C&#STV?P1)W^PWrUcCPBMnOM@lp*_L>s#w;^9~B0J&8p|PZew7?JAmtissSzD#?u6rNJHkZINV6*N! zpWuXRvv(Or`|?7Yt2IFKa%;NWw1VAIbzTP5rhHGx)U}y(FIxWL)nz`z7~JKrw%2;& zJRSm05ol+pvEUuNY0dLNzcf{W@-LJTtXK1u z05|Dx^-)3bgk6-*Zt~2YDuXI?U@x?bX1bs(KR-MjT`$Bgc<%U@%^Y^>|Xfqo~clr+GXQMu-k{Hfd-<=1#f&XWP3V{&h)_^1iak+5Iir&eaxZ>5Pc7F zbUu%AD$D)fOIkcoaJ0(I&bKJ@`|&1?(rFxJv&H!q=mfyRIfGH#wa&a0aoBDLaB?{} z@1|{B8s^3PfWQ57yKLA}|7hWpP;Bs};6ML0t_?IkIKz)U|Q^fFM zR7AmXxA?*R%7f>t&{v0EyNQ{5|Mv;Gw)Mdoo z*c_ewzmD7PZm!E#=l|cgj{ZEPO)uiL7Wl{1L)sAqh%f+OX63<;71r6w_JKk8e*=*H z-vG$2AI$gylkk57Z7oGvHTir%d!mxbwv#VZ$I}BPm+$%CZv4lTy5e@A9$+dUuh6{4 zCvtZOU9<<{omyCZ=jssH7cnnzYgA*SKDO+JX-GqbYp;SZvbPLxrhG~ z>2x9rcoo9rASo;);K_2d{ySbwNfq zIspaQ3!XAQq+p+qxz4g}4Fg~NtDf2}E~FVF6x~)(&T)LA1!xfcsv%i_uH2rZHPv(S z0>|O0;Di=5&XZ&ROy==PfO2jBLNg{f=E2tyVc>b?;A7FO=VQ&Y*sT#jJHJW-*G(^d ziahRF?7TP>Np4&NhUBaLv2G?Bw|RU2?Ef|)-Rv3{TfF04ds=O=d-5MsWZ^%i=}%3n z;=gD&|1qtd9{-@oOi*`=_=E;GXK> zm2=!bX{8ZIZ7adMztoPezTHlUf$7djKIsw@Ga_~E3*BlmaV#nUT6*ye-aLOP^Z10& zhD!aR;fDtS0Kxd0__5QIndT@}h4pG6VePGV6vLJFkLi8Ng@%wnS!=nYOp@=FCUTVY z)K(LYLFt`oAu)l+Y>;#$_)m&S z4mr^3bQ)-5PW;(|omwgn%gXg>$GbLb#KDeZ(YQQ1P!*SUD48TTXdSMCGM;xdI#)44 zUccHtAb2gRf-bbnX<2Q<)9?T@o%ebIwKdjr_<{BgXS({xlst57=O;G0|G6!gf9neo ze!=nH;Am!Z#`?k%lh`_Ft2$;TIqe#rH()fM#Z{7-qgJ%}b}_X{$oF`&HHGNnDH3?s zv5ly<^zHciaZdfBonKYztt+EPI>1)c)&J=>AMX0EhAh@tjXFKmj)u+l=962c53LVc zUNTed6Sp6Jl+JVrD&A5QWVE^9MK18E7_rr!TM8M6=T!^ z0e93^4EE^6OWRL&T4d0SP6e2ZYvAZvD%NPRaht3~Yq?Kov*E%5r zSx(__{q6GGpp>=@%}npW=BZ2#ot_7oLSR;WNBTqElQWG6+v%SMyny^ZQbA}=Q~0wh zqWx7jPQHVy`q{-*Jq!A)0Ck;gaGBLOklR)M+9a@c`Yk~}xNLEeh(Xu9FLuA)5)a;J zd4{`ZANrNwUVf8QN$y49eWLIAG+R1XL2>eYq_~g}uBH7>!?hZqeipEXR4%FVRtBG3 zyi)JiG_nm*x|RSG40IlfXGwg;VN^>uaTQ`#;hlNT<}z___jc*Tl2Tv?;YzaSX#$(B z3jF*3*VI=>HTnMU+q^*(5kVRS1Zjy;5~46lnh~QU2TVYEJoebXF_#YpCdNk62^PUkRB_%L?3w=+eW3rIRkI5R3a)FC5L82iNT5@jE>go?FgdKW(<7bd`Y>ic?`1IFj&HWNHspmh za7VmeOwT5j zwzwQ4vH?-syetSg!}%otS{@9|u-%rd=>y?{q2H$5RMi#>ZI#v^c9`OJ;B8jdu1UEm zU*MbUkdeZhSd(I$-vi!fEZZ}0rGT-hbYj7i;r_lU61>5sdcG_P|`G1}if#&()CN%`!3ytJ8c*fg-2DS43f;TLzU9VcY_@ zqvHMhDc^-=(0pgQS|d}~vq=5fBR$%!rWUr#zT-8&P&bk1*X*UGM?AaYfIwEK*yeg> z_Pon$Hs@#iw*nz3%O{@ra&v`alg9FnId(78qv46jW35kX3)k_jnkMRgjUJZ*YoAR! ztJ$0C$>5*(jx)N1&*~VBLYQV|ocwCq^$wW>C4P;0CbpK7npxR0#u?A(YXP~Zu%@K-1ub+$NIhvP<0}NxBQ#nA(GKDmDEPM{$?ie)45^ zT;};lnTIbl+{W+&58OhZN)8JYw(%J&9he1tRg-RZsS8W1-qLXfB}FGyo6KOnn>I@( zPxrsHg-oQAGixe<0dib0JflsN96OJHr2H&|8uvH%-M_HIxXa;9o zKaT09Ug)=e1kj$d%*L2yFzp{d9&f=5h*>v;lMA@Y=RtmTH4|o5S4-Ismi0~Ce0^j+ z;hJZK2!T6Idn^dG_3sPMTL|-mS*~?Y%F<>VnVof&t%H9YRlGu-MY9TK`s$RcE{LcW z&CAB=hS*Pjc2t-Lc?2*KM!Kn7a|QATjdz&d9nD^V{&+zv-&!`X*6#OpMHNP_?ei~* zlm*8ET7CYP&nOBhisWH ze;zcB{KcNayB1in{)S~UB)_g>j1LmA%n@@(mAmoqX0hxw4Ejpg|IzprC5f-g0P~~? z=gDK^H{Efn0HKc*zMSI5xDN&75N+S7TGOf-PG9!8v}nbNwf(xE){9+O zSd~8vaAhSTd$#dh6BBARHFdGW`TTThBSa(cN^)D`!L^zt>Ky%+P( z+;*xQy#;UYaqsq@eHo5?y_-{rn@4`$YYUrVSIW(=4dtpU zFNH@ol$eEAEUQ+v`PDp2!yM z=n+P=h?#rc>TF?2Z}2RRQ%mg`7Pb=7P68CPovT3&S+0GpKDdxJITGyZ!ArJl7jMQq z`L>RNON)Pd>5;oob2N{xR!nDrSqr5^)d6L~xM$1hP+_O@$pfh;eFg#6n3G#Zi zmK=o2f#smS*;Q=8I170kLr`f$km>Ew{8-h&gsg9{9x$*n5XHAj3roSY{bXN_ymbH) zd$*_ZXktB8jkoUjM&zT7w{dwlV?BZXd2kKzm@WBpv^^Tsr;A?qEgRABIw|?H)>LrQ19#Tu)eZ7+}XQQes*$p*4rK;X!4HbOuOHz%R;slSW2peNl^O{039 zS2SY+7ob9)pRT-J97Fu$MRP*@8S$;5d~Vw-A{xg-cC%fhCZufbTJfYUb-GtQ@?s3PggZT<2QNs4BMnpykm8`dVN^@wNj z7vEJr?&{4^o2xj~P75-3s6Okj!@6lWF2uYnH<@j%8!fgW*_Hn!)ttB}2Y_7m{y4!= zWzgYLxxCvMP=DQwvIo1<^eor-Rps@tRSuuB&37nVi)jD(6T6|H^t?P_hQz9Y`g}!< zTQ|qB^xi|91pkUr(>hy2reQRc`_#?`%da+8%Pv>EcjTdR6Gvqhz=|S4ISu&(qn;dV z{TFvBGFhwm$_Eo94~JuF3xl}aE7#c4$j%I>80%`lyFQp`z~8sM&f&~7I5X*A?ybVM zRPnfTG2Bt(#YBn~COYhBESs-X|7%HZt?_5F6zbTU52*0)17>}#$&IPH!rIW35=Vuv zS~XvO8y3ghy-o_!?q|mCi;4D*{b-?mryqv~9dT?iT7=YWn~5)oHs-RvF3C{4aLwL( z=zds1g%8YJiMTJPxqlpQjNS1P#bW&P0 zbgtVOJ9eokiZ1T|UV7psG2@YY@AZtjF$1J?AcVfujsDKHrP#1m*z3hst&^|=OhLP2 z@gskwiR+fxe^`Wy|6VHu4TX0tWRzII1103WI)4!64ZE6lgK0mX4Mo?vZheS~GKhbt zK`yz_HeL1+zGFfadUXTqEW@!3-OdJ|^Ps|%{3oO)DbvJG?k)ErZhHOUJn`;wrD@T z48BIc{tK(cp4o_>D*K9S((u^!6B4cc;+vH4LvVQ0t-vOHZ9nJHB`e~8oaOZ9`#?@V@B zKNeVRFEu6A#=PpzA_HyuzDC@IkaBMM{s`dfq}jTq!Y;T&TeuQU)7WIqon)bb=;{b0 zC+y}dFESupI-pL+LHDa~-9_eayPF%2Ff~vYOgi`47w+{=aYq|S@>fBud5ZbCo!bMW zTqLaEhB^*n{@l-Po|)2GPErRO9L6vi5$W<+6TVIVL|bTN#(xi4b;{$WkdkD^EiO_Y z#)ToNkq%T0h=+hx#ONb0Jx*8X1CUc>6>3uU~3 z!OZEs?hejKk)GG+0Cd3U4ZkGQqxFw+4@f5+=3Fim2&W4HG{VHZcH+yy&iLHdG(kJz zBwp2hJ|U-XemH$M2PhHlRNFizF+MB$1u_zr-iT%>J&dIaWxFX9$bslumI=Jk@X6wi z!(%^2d96n;KUXWoN8WY&`VUJu=oD=djh!NhDs5m zjd-4S+aAo>_@WN&EnRR0!)i$~x3fyCapiD1MnWX~Awpd%^h^LegQsWQnYIZ!iKnl! z^sgNG**~Q2y@a83w7SB*er#aKsPu=2yfM-sV-<+~ddy=3u?GJtr`U5?27I0k;- zl^|_V)Y;>6?k;V6R-w_F=Yr*HwJ0oB)!EF(kjt$3J4Lh96?4{09B9Sm7UGS<#L++R zF=L(r!g*$e`%+me-iw30-+E#fh4HPCMg}Rvyos==ms57`Dto{*XFTU-q&qF})T6+p zsC2sP`$|Sf#w6vWs6OS?jwRl87+4@vIv7pz17dTpx%tJka51Ic}`K=o04o?1op}35V`M zH$mM25XiB=Jk`#xqTB4drQaq%5DF5zr*4Mb+i`Y&ucsH=%k)ypKLVKGY)&86Q?otq&nhhiltqo{mI2@sby-L^dT_LEJF}_no}}ba(QmH6E*Pg zC!eG$R;u~AnSv7S3>b92U-tn`v5Iy=H`QiLH1>Yx;?9W+KP|X)@%*wC7-!UfYs!ZU zeZ%^V6-B*Ga!EOe#668sjM8Pa?OVM&_fjk~=;&|7rnA6PFeRN<)&?1leRi0Nucxd% zyaV}|HwTX~6RI^c+7UUc4NZ-~%_N)B64a`Npj0_?v0GCOoMEvhNQ)i?1s@ zlJyMEfqkF4!LE8yO)$)cJgrd8EPa_LlUO_53U#AX#kI|>`>xyA#&#M+vkp;XK-KG( zc2Bn8vyH|rRavc8SKcY|0W|UTob* z@}Av4IsQUQDcRgEa!jy4iTv`@p7X0}ZKCT#!5&ul)AvE6Yi-_odOR4`TH}d!&T{ud z8U7JfWW<$7k~RTbdfcOqA@5<9cF%V#6pN`xzYjRbS}!+mB{i>HzQL1S@Sl2$vW3_4 zk*_EzT{pB>pl9-OTB>;A=8kP?)OcIi=1vn{dNJa+H}!rbr%TK?E~bs2)ZB;Fc7XQ% z+Tj;ib?B+fhTTgR5dC1|83A5D0l_*g7+O4++NtV8J$%Y-CjjB2n(kDu_<1HDVw^Y) zZ)Hs7oMG}rv#(*835%J&=c7dlzb(IHOS*FFneujfp@c6yA*+H8bv# zEgPcPiHW{naP#?wGAPx7*oB9r#t8Z&S@RROaPeOq{C}|{7%8m>_9;&Nt}Q)hHcV!o zxc6ZM)V+D$m)Euz2*3yD!yBVvHeSAq-SRZsGq*9JF8Lv1+f2nSPb2Ad1(M#nb<^Iw zyU|MK*t|j&l_f(Qx{4|$p)Q?^2xpvLHj3y6Uuq@ut!N=3>O2H52h?YZL*B}; zez{8UdxP_|poG);UWG{2wpGTfQhvNM(>3|xNt`zLo_F92((=k4{V$~g3su{q={~pm z7`m^vwS|NEG+}Bc7}kC4jdcnVBDAT69YP1Y`uu3NY0JZAHS0HR~)`|=K zic`|u`k+9E;tyzh4^>X@Z! z?iSkz5gWtxVAd%hc!mJG96>d2`O?* zk+mhHgC0~*#Dph{((ihwg75m^c+9+rG#b|D)Q#isEtRU+qJ0K8T`uN8PqujChje>o z#m{vUO%MYamXNffdH$`N;tR78JrJynE56lj=B0*~ZlZneyQOPrbGvWc-zd>8-cem}kf*uu`?eXsaVA&!th}JX@?ox0qeMm> z?zyQ=){rquDAwO(dAb5N4w8E6*SjdbR2Am>!;OQCGhOzA@Ns`CXqw9ilrpb8g#? zaUgn>jO}A*JFtUw)usvEF+qp4zpQerYhrt`FOB*Jf`Q!k$_`9nmtTU8%;~`HiZGbR z70id35q3oW9jkZsP#NyUNkg!{DjjP%SXvy8X$ z*c6QS#i_1Qb+(||ST+3&EW9shW^(Y%9DlC~S^(JOwX)Wdci#b0obe(DM`U#_;?rK2 z?@(5=b?sVJij984n>;6Z&y=8BtYM(vR{qb+pVw1tUD9T+yU%ozGF8P2lxA^P*OuAY z@NAhcegFFo{DEKvxNbdcw~P>dN@Hb@%($j=P3+w%w@*fw{aCZQ4K$0F{$8W%?G{Y3 zC%g0maItP2afB8TqQ~E@buYZL&Au+Xb;>_(BRY;hR500byrgUj8@4Kbctt3DthGlq z+^**=BauTHR0xebw`2pbbE63a@(qjFti?I;zfFs0Z1gQ6vhs{0_krt{ zEC@GDMV}o5&rIT8JCHt$Ec?^GKzk-C7?y_|m0P^J0LU2R9vW_Uy?SSKRP>0iXvib}E4WBEQRQHFCCpCCJNW;wA${w^~xt(ZC^N9JXr17S&>G+fZ#IJ3AQb@W||Xc5Y$J!1GhDub^s zxk-klZ@L|k2fr@?oS2HY!dP&hgupzHFn}tb*f4SwsJM33E81+qq(Zh+kI%^2 zXFwI74YJX6T38chA`hW*yxuIL5aY1&fNy7-nTdh@d@$K>c}HZt?w5^=OrG6L<;~@W0cAwASh3|6W_H{jUIKaoFS01K#1j zANNMzq6%f&}elk=vhI{_Wk3r|2teUrs9MIRO$ zD9R`&9C#_0Kee;~e`OLnJ&wB~u`TP=hQ!Mg_ZR@q1yHO%FS}e-Gn=%HU25bR{V!mq zJ<@_a=>&eI=pTcR7yp9gmu_D0)!ie<%fw~B&{EJ;oIe~2g_BhIUjF36yVvO+4g<2l0LC8W-WeX|L)bxLB9hxX6= z^sS{Ul-zheTNUwXa9~@X>x(|^ILaf#7R&_L&ji3->>mRn3~QXpkp-NM+^9&^@3&Y} zRM$pK0rN3%+^UTR=Q=Y*9%pNb6xYr;x}}Jl`w2Dyq~cMPu_8l}zwfHy-KU2t;7s3x z7CL@X_4A!#cvjR*4922W`o3+ND4@DkpRHp3A4A;bT4pE%2(lfs|h2$ zZxpe=`@(A1jEY87Y&R0)UWtYtW2S~&G>z|&2m@Wb%2H%GE44_uSQX6F$n@P6E5t#U z@^XFn`h10bB{H{})mgx>&aVb}Mm64^9GDpRnBR_JT~g(IjD+(Xw-Crq$p#0WEK@N` z(;8Snq4Ht4l1rU!-;f+bDcT`ZC2T9)Wa0)a@}T(#MWV39+7%xaFDCVup&3P(=~xJ-jU8Ggv(#DfsBBZ)3*V}yC+RpLT%a%nQ)~Re z0jg#92EEq*BaJIigC&`#hwul6R@-W7xTw<)*$oukVuerSY45{zU)X92N3T_LMF)-7 z7etlA)ahjm%fUG-hWYOMPcL|*ayGO;&0@y1>Fm~0%(&K1Jw`;~M{m7NZ6M?i4om=z zyaatSVQjm?K;?<@2p&y8Uc?L`r(r%RZ`6~L6*k`QeMxa%c3(&lVHC+FR-B+e|I(nQ zSU>-bg~jLYERZi)F#jI8)+IPZ7|dc0vMW&1FgQlGMQ>wvr9b-#HJ4Q-<(npZDnQ~yGgb{#PJ?MOquh_m(qbZzBZ27L9u_2(OZlxEWF z2N&s>3xS&pJx5EQt7-}ky$?LQkR}D?`dbs8rACXnq^w#9Zc$_JhOkLfZ)Pd%@`jcd zwP=2iy!iJrwN0|VgRP)p2;8E}e{sQ;g4rz<9?%ieyRm(eB$xq!r_2)uQ&Ec!j7$1SNVcIu)}qd`3-yMCf1zarMkMh5%7KXQXRJP|HpG~_$!NF!#c z7F?j60FZ$TG~sgkv|GAppQ+-ss=i6AM?$QtNg{e(7A~zaEIZ_@@5l=AwR?n?8qqOM z?8~YhRr^%+JG$~1c=>Pox^-U^YO0h?YX?HwMeet1*#2bIl!Z^_=o2d+MXS=3YbS{Q z09EsQzE=5V*H*;eYrKmvLUAdEzgj~#84M;&G3a~jSp=k7>&ftIFag@tL3{f7rUu=` zNk=8Rm~{)6Pdy8LVde>O>>nMIBTODXIV=$j8*eKmkC5@5j1DvJibQWhD>9~(OtrGrv$w4y-6#@!>fJ+BQgRasNlp@8MW3;V+FUTC$c&PH@Pp!jY&l$%aVBSh=; zC6|MCbG+h>((495Hh|Wq91Mn!{dc$+8eI@r#6Z8+yotS0 zO*uhvU_e29%WuyJ3pPE9W&OcW0n!X*-9Dt10vzC$Ew*?U-*MIP?DJpJ@#o7QXfc5!Wd;))on zm^WGZ&Q@wg4MRF9!Wr1XViMM)a@88!%Bv?cGdXB%Embz1lqK2Y{F9YTZR87Rm~Xs5 zd!KLoMZufJTA12LSmZoPdL&Vf@4p_NPgm+x`><@&5aYOrdOD0Kn+DVreM!D`GLDBp zGiPy(jwHv|*(hMqKeFce{`Q!cM?)t;L<(PLrcmP6w}WjvxgPzCQ2FSs zF^w#5asswHA!ABPFDsMp&kMv*99=61%gP0Bbi^>+TyecXKjB(`PXL(akq>B-L5TiF ziL^m!QTcy=m^Y!_S+-C+(})e;>Zj%6YGoUIi(PnWX3!J6suPe|VvX4c-sb0hYR71+ z`#j%A__S$D|D@dH1}wth8T%2h3c&jK3hJ30TMRVD{Z6C}jgH7vFD*IraMM849<7%J z$WzgND1ZH5?;UPmqFf6$+%J9Gmcjr%>xv@A& zead*bK!8QJyd=UpzL<*=x}%=e;_q!St4csl-Twrz0sG7MND7~C) zCtJK2`2{8fR+g!=JBXLNjqU&970x~huaLJOz`_rohxC>f^}En8lRXhxpWs!YJ;a2_ z{lwq9aRwkVIC6k!_a5US_FlZH{Yfb8$ehDT8#5sg1H;2pl6F1{wA|4WuJ?`Al&83& zEM695l%&V=_U79x>uLt>RR;$r>Lj|h{w48St-kb=)*Dso5#P&iJx% z4c!+te%LoGY@vzxsY!7DSm*0h7|GQ(>6CZ5qSC<*`#$$LBLlnbFEuXK|L0JPq|{z3 zP@r_Kac=g{s)1|2;+&*KfsdpRxp1v8?Tg9nPR(rIRNi7iWA){z8m1}7`9`aHhYdek z$uEhY?Urz$oj{03y>B~7D2JF|xguAa&2Qswp>L0*l97d%BBHd;WuR+CMGbUb?pmv5 zXrK9bFkaf%kgb&D-ldE9sWeer{&1z!)wE75wb=Lb6XMhhhr$=(nJW zA66?n$#{RC3)Px|aeA*lT&(FVtfdr~iK*QqIr|eiktrsl{-VW*BIDrKw|+i!QCcO# z#4qR?`qS0DDI+&CIrq0Oj>)4ww+Q}`M>>jGUwyO7eGis+dYVSN-~1}zTHk}pROvWWnA`1+ zkBRO1{o3EMBR{X8`l=zeg_%1w*C$)3&W}slv3UQ6(Ehz12!W&=#Y9|vC(2e2V%=U! zByUMw54soETe1Nq112Z5J^0K=By)A@9y2st@&Q=oS~-)sA2!p5=0GNEN{yam^8BlaMAxz#h{(zAW-qzVR5Z2mEpMV zf`;w@T)#z2ghuTBC&jCMn&>!JGhDR4yu*?UtA%|M@0J(Jc8rN3oCbXV^%rxn@~y}- z_v4^RF&39M1g;?X@(+RCqbNzG@*gO$xXSo7Ylw{Gda1j4o${9h-EQd=0cisRoZ*mj z#L*b?OHoQh=!~;J4LgMA!Ae2EO4+9TEq|(&0Ey-MMN5l2uyo7F1BhQb-LhRqz{aG1 z1KH*w<_iGNv&fJW$qWbqHHC<>^=X=V-ME4EIT-CRNMv(4cXh1*Hn0=$tTl7|La+vy z;8ghVN9g~KYglXBB;HRTxG&8D0Pz(&!Hra;GgY3`(B6t#Q$an;rhic4y1zcVZT6P! zMj$Q8!hrPAU)fr)AkP66(3WQ%!QjjuYuWtn-7D@oBUWIjNmnx2FD@-VnE)S6{46+< znQ1T>8GigG1ER_y3*Sk<5G9o2ah=Eqh|~^qI)In0Y)U8w^QH>9vUCf&9;99g`Frk} z*E$fWUJ+8l!aN`($1E|%los7B-?Ev=SsAW(%B{Jp#FmjBC3w@2^EbhCJ?+&I$`)$*+9l%1InyI^=98`YpMe_wdWCG#lcyG)Ckq z%*Vaqm?eLMen=)lLRa9;f#8kyVpy!!8ma zMP`OyY_WI7*Mc>DaieT~#X(ZrI+ZMF?(tl%@<(Y8dAa0j%G`A-X>-NiTCTD|KcCrU z_2#`ln5hSk+9)sNzCSEhMVk}><0GPqYdu(-F(Wdh5#RLALm~b}AA4yn^qusiz+pLl zIJ~NIB{C#LvkUbx7G6lX6(tXrw?fXu{`?*#-|50OuYQ?Q(h#Sa`LA_t!pQSK0A#!Q z@fGOItlWX3Yfz_wRe|}_%Xhc~$G$e#LkyPf*Y+_=>yh#7#ZywSXN=};@c^cA>K~GBxw9m9pJ|y6JwlrCT91gKTg}@vP{puN})9kfMJ| zE6mDfeD}~l?^$<*!dG#JTo2~tNUQ^|6KCUgEA|!Gpp|%waA|S$nRo_DZ^8ad4(aX3 z<4}07V{SXzb%OSXX~(2hCG4~QyM_ZM%9mYT3Ec47f6NL5;j$ppndvj9oJBp}0-oaL z&9%ev8TjnQiL7wjQ-t!Xv04+MJDa#M^-{2v{qDM9eTbHY02$|*UCYn!<{b3|?n;ca$7Ik-`NmZ<_Fpv~CHPR4!J=NuZ?Qb` z4vU3_J;Q?7gHHJeVt=pQBUKv{Zx7{9C>1NYGP2XowRwHeRAGjpzG{$ym+z@}Vi%}M zVFjiOCYx1aUy`PO6!VrcC%*%TZYG@OwXaqBKwIx57g@j*$xzpmiVQui%);HQvwR%f z-X|@iBqJMCJArYEgCk?aZ}ve2>*-RTwS|3qJ!%34cNENkMFu~Jz#|Fm-5L^I_2vQ% z4K*lB{BzsLCn4?(UYw8nSzAkoZK6H)^q>p7?)qRes0b4FPgL6+Vu`)){sIYe)u8Wf||X>D<+5L$ABh#P}jctuH#NoCUPc zcIzgpO-ft+|BMJxe~g*k(!tu*x3xF6)YiuKGMH8=(0PH2azAw^lC}DtL|ySBtb4L3 zNBMWfzLp{%A>1VKbXknbv!qz;> zw-nl!65hqVFPHIk#iBFQ#dzW(0KZ7SXo{%Uj3L|QhE!*%gi_D3rTMO~W%`e;SUhqx zmmq?3@IzYUo=Befkd3^mxNl`RO`j4s9!$&MYfvJ619}SX*UVXQ++6pE2)8T?;0hGJ z;3qm2h6NDyx*p?ZPQvgid8l3wl?q*<1}=jq(bgHrqteMhmJ6NKUM!N<-?L)Vb;O?k zslq#>KXm>3;U}@~u~)T(;Jyr0`I;7^v@#!iJLSy>^nO9uwsSuG*_N7K^*tkC%~nz)A*>G? z80SND?_x~ZZOwi4rPEAqnLTv>`4xVUZOvTrB~otcz_0HYgj>t;_}}SEV_7FS6l-uE z$6IQDVn(&X7ILV;fxnYvz1&r3LaMv{X?S7mM9J|Hu{GamC~MWbLQk3WwO|u@3p5gv zIIVfoRB&jh`k}x-#i;LT(95cT5FhnIDv*KVw)p~^*w^hbOuPGFDNkUidI7`+STR*> zo3~P`uIdM+^+VGAut`OLi4WgQ7ydqD@*vjqgCiHTZNP`6X5WemrTiAOM?XUpGqae(eJ8;nUP0*1d4VQ=;G zU3FODi0WKUen~VFSD83q?Qzxk-yk5;tS^vtWErC9YW4v3*4X$XS%E<7)KJWzVVzqI z&G(KK4@nzasaw>ekp{h*j(0|!`Era)MN1ya!;!Y~GrG7H!OvNDiJ$u)M|o^~|M@^} z{vmPg`4#EvDG4_QU5ly?oa#YJp9waWB49=}xI@08s`knR+fe&q1~V-dd7XuJw|2X| z84e}V$#V9eOO3o*qH`wwxmm-~+q^jGr*o_;m6&CV{Kr8Fxkaeoqn8t;#B(6~H31ns z0cRV_Vj`XwzvtpIKLg_I5*KWP?Pw!0n`lEJSC?p_`ErH**SqiRT86K>i)9Q6&O+oe zvdRo>V`*=p#Y}lYSGKQq$I;Y+jqy*pya&&rE)+ zR!7i%-q9C@aj{C;2~y>a*4sP!Hs=2e32f`Vu#01Z=J10OKJbaFG%Oh^aQeF&kN3&~;R5}A_}GhrsD?Fk3u485A(FXY%RVS@z>ZFkJe8Q1y0>DZzf zG|X)e(Z+mJ1*V-k&r|TZd_WUl(tidY|8ECR)tSDMt06^(zLM|}2Atw99+~gn12)8# z(-zVKK3f#4ze@j4I5Ju%a&h({U}Sk}ltB?Eqq{oc_P>VBOx2r?lHKIV$tjX8E-H{j z!5pU;bHWY^*~YW_*z;sO%dOyaU`O%q#TsDc6=%q!QNMu%5~ixyIToV+i!R@UYUnQ3|lwE1eQ`ip1y#RrJT-3Ea? zgw~Z`TjKXwr5>Dl8n8?rJ~=8AX-gp=a?nlYRhU3mWW~s$V782jQM!QN#9sS%s<<|$ z%WwVyE$^#|0+H7Ptg|jZo~pi%>EVtJa&?j5mn>AKMt2HNYY4v6I$<)J?)K{l zBicSOBmSfuNp1CSb=SxjmCKX6Q86m>q9d^2J5|5K-Gj`WhU(^`4a5k3h8h$n(%eiL zgT*_><2^e)9-?m+3t+0OqUN={MYo}Lw<2b-#j31I&gzfRcyvFTj0XmssW()r^8Jh4 zH;SP|j+rKg-0jHWFVcq_Q!*J!G&hWV@ztwwoItyWp+->h3g#({eF^3fA)GK7uM*AA zs|JG+!NK}AZx4ZXALARwDG5<)ozN5b& zuP|Q6sa8nz#{3KPNOQ#PG2wYKXdy9UrQp3P{dzRMq$!a0kYsAPI+bf9<5M!urQ|4m z41%lxVctsRuLco`{XMTXq0VU~!zsI?-C3SM+?R{Dx!j=%;;k(S`lH>Q;a+H0wGtVQ zskM0Scn45CJ+jB&chGxYWevJ3=y=Y(teuQe`|@NxnSwIYU8l-D!O)mjTnlCxpauq`#b&r03lR(;Q#;t literal 0 HcmV?d00001 diff --git a/artifacts/live-activity-fixed.jpg b/artifacts/live-activity-fixed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2d8e4646229a2497667d54dd3f5f4c73eb04bff GIT binary patch literal 48287 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≶%&JxlpA6r1$Psz5=*-jCg_r#2g}L_E6zm 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 Date: Mon, 24 Aug 2026 16:05:09 -0500 Subject: [PATCH 5/6] fix(swift-ios): gate markdown link taps by iOS version - Use `invokeDefaultAction` only on iOS 16 and earlier - Add coverage for the legacy link interaction policy --- .../Features/Chat/MarkdownMessageView.swift | 12 ++++++++++++ .../FeatureTests/MarkdownDocumentTests.swift | 15 +++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/apps/swift-ios/Features/Chat/MarkdownMessageView.swift b/apps/swift-ios/Features/Chat/MarkdownMessageView.swift index 45bc29142d83..4ab31236c511 100644 --- a/apps/swift-ios/Features/Chat/MarkdownMessageView.swift +++ b/apps/swift-ios/Features/Chat/MarkdownMessageView.swift @@ -687,6 +687,15 @@ enum MarkdownCodeBlockWrapping { } } +enum MarkdownLinkInteractionPolicy { + static func shouldOpenURL(for interaction: UITextItemInteraction) -> Bool { + if #available(iOS 17.0, *) { + return false + } + return interaction == .invokeDefaultAction + } +} + private struct MarkdownInlineText: UIViewRepresentable { @SwiftUI.Environment(\.dynamicTypeSize) private var dynamicTypeSize @SwiftUI.Environment(\.openURL) private var openURL @@ -961,6 +970,9 @@ private struct MarkdownInlineText: UIViewRepresentable { in characterRange: NSRange, interaction: UITextItemInteraction ) -> Bool { + guard MarkdownLinkInteractionPolicy.shouldOpenURL(for: interaction) else { + return true + } onOpenURL?(url) return false } diff --git a/apps/swift-ios/Tests/FeatureTests/MarkdownDocumentTests.swift b/apps/swift-ios/Tests/FeatureTests/MarkdownDocumentTests.swift index e09d9863bf1d..05dcfa7f8003 100644 --- a/apps/swift-ios/Tests/FeatureTests/MarkdownDocumentTests.swift +++ b/apps/swift-ios/Tests/FeatureTests/MarkdownDocumentTests.swift @@ -324,6 +324,21 @@ struct MarkdownDocumentTests { #expect(runs.contains { $0.link == URL(string: "https://example.com") }) } + @Test + func legacyLinkInteractionOnlyHandlesDefaultActionBeforeIOS17() { + let handlesDefaultAction = MarkdownLinkInteractionPolicy.shouldOpenURL( + for: .invokeDefaultAction + ) + + if #available(iOS 17.0, *) { + #expect(!handlesDefaultAction) + } else { + #expect(handlesDefaultAction) + } + #expect(!MarkdownLinkInteractionPolicy.shouldOpenURL(for: .presentActions)) + #expect(!MarkdownLinkInteractionPolicy.shouldOpenURL(for: .preview)) + } + @Test @MainActor func selectableTextAttributesPreserveInlineFormatting() throws { let revision = MarkdownContentRevision( From 2d2c6a124e9a123798a567befdaaa1f9860178bf Mon Sep 17 00:00:00 2001 From: Yash Singh Date: Tue, 25 Aug 2026 00:24:04 -0500 Subject: [PATCH 6/6] cleanup --- artifacts/live-activity-fixed-dark.jpg | Bin 48554 -> 0 bytes artifacts/live-activity-fixed.jpg | Bin 48287 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 artifacts/live-activity-fixed-dark.jpg delete mode 100644 artifacts/live-activity-fixed.jpg diff --git a/artifacts/live-activity-fixed-dark.jpg b/artifacts/live-activity-fixed-dark.jpg deleted file mode 100644 index 159646be5c54c0e7856e1aac04a7ebbdd3b1df64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48554 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 diff --git a/artifacts/live-activity-fixed.jpg b/artifacts/live-activity-fixed.jpg deleted file mode 100644 index e2d8e4646229a2497667d54dd3f5f4c73eb04bff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48287 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≶%&JxlpA6r1$Psz5=*-jCg_r#2g}L_E6zm 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