···11+diff --git a/node_modules/react-native-screens/ios/RNSScreen.mm b/node_modules/react-native-screens/ios/RNSScreen.mm
22+index b62a2e2..cb469db 100644
33+--- a/node_modules/react-native-screens/ios/RNSScreen.mm
44++++ b/node_modules/react-native-screens/ios/RNSScreen.mm
55+@@ -729,9 +729,26 @@ - (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingFor
66+ #endif
77+ }
88+99+-#if !RCT_NEW_ARCH_ENABLED
1010++- (void)willMoveToWindow:(UIWindow *)newWindow
1111++{
1212++ if (@available(iOS 26, *)) {
1313++ // In iOS 26, as soon as another screen appears in transition, it is interactable
1414++ // To avoid glitches resulting from clicking buttons mid transition, we temporarily disable all interactions
1515++ // Disabling interactions for parent navigation controller won't be enough in case of nested stack
1616++ // Furthermore, a stack put inside a modal will exist in an entirely different hierarchy
1717++ // To be sure, we block interactions on the whole window.
1818++ // Note that newWindows is nil when moving from instead of moving to, and Obj-C handles nil correctly
1919++ newWindow.userInteractionEnabled = false;
2020++ }
2121++}
2222++
2323+ - (void)presentationControllerWillDismiss:(UIPresentationController *)presentationController
2424+ {
2525++ if (@available(iOS 26, *)) {
2626++ // Disable interactions to disallow multiple modals dismissed at once; see willMoveToWindow
2727++ presentationController.containerView.window.userInteractionEnabled = false;
2828++ }
2929++#if !RCT_NEW_ARCH_ENABLED
3030+ // On Paper, we need to call both "cancel" and "reset" here because RN's gesture
3131+ // recognizer does not handle the scenario when it gets cancelled by other top
3232+ // level gesture recognizer. In this case by the modal dismiss gesture.
3333+@@ -744,8 +761,8 @@ - (void)presentationControllerWillDismiss:(UIPresentationController *)presentati
3434+ // down.
3535+ [_touchHandler cancel];
3636+ [_touchHandler reset];
3737+-}
3838+ #endif // !RCT_NEW_ARCH_ENABLED
3939++}
4040+4141+ - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presentationController
4242+ {
4343+@@ -757,6 +774,10 @@ - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presenta
4444+4545+ - (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)presentationController
4646+ {
4747++ if (@available(iOS 26, *)) {
4848++ // Reenable interactions; see presentationControllerWillDismiss
4949++ presentationController.containerView.window.userInteractionEnabled = true;
5050++ }
5151+ // NOTE(kkafar): We should consider depracating the use of gesture cancel here & align
5252+ // with usePreventRemove API of react-navigation v7.
5353+ [self notifyGestureCancel];
5454+@@ -767,6 +788,11 @@ - (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)pr
5555+5656+ - (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
5757+ {
5858++ if (@available(iOS 26, *)) {
5959++ // Reenable interactions; see presentationControllerWillDismiss
6060++ // Dismissed screen doesn't hold a reference to window, but presentingViewController.view does
6161++ presentationController.presentingViewController.view.window.userInteractionEnabled = true;
6262++ }
6363+ if ([_reactSuperview respondsToSelector:@selector(presentationControllerDidDismiss:)]) {
6464+ [_reactSuperview performSelector:@selector(presentationControllerDidDismiss:) withObject:presentationController];
6565+ }
6666+@@ -1518,6 +1544,10 @@ - (void)viewWillDisappear:(BOOL)animated
6767+6868+ - (void)viewDidAppear:(BOOL)animated
6969+ {
7070++ if (@available(iOS 26, *)) {
7171++ // Reenable interactions, see willMoveToWindow
7272++ self.view.window.userInteractionEnabled = true;
7373++ }
7474+ [super viewDidAppear:animated];
7575+ if (!_isSwiping || _shouldNotify) {
7676+ // we are going forward or dismissing without swipe
7777+diff --git a/node_modules/react-native-screens/ios/RNSScreenStack.mm b/node_modules/react-native-screens/ios/RNSScreenStack.mm
7878+index 229dc58..10b365b 100644
7979+--- a/node_modules/react-native-screens/ios/RNSScreenStack.mm
8080++++ b/node_modules/react-native-screens/ios/RNSScreenStack.mm
8181+@@ -62,26 +62,6 @@ @interface RNSScreenStackView () <
8282+8383+ @implementation RNSNavigationController
8484+8585+-#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
8686+-- (void)viewDidLoad
8787+-{
8888+- // iOS 26 introduces new gesture recognizer which replaces our RNSPanGestureRecognizer.
8989+- // The problem is that we are not able to handle it here for various reasons:
9090+- // - the new recognizer comes with its own delegate and our current approach is to wire
9191+- // all recognizers to RNSScreenStackView; to be 100% sure we don't break the logic,
9292+- // we would have to decorate its delegate and call it after our code, which would
9393+- // break other recognizers that the stack view is the delegate for
9494+- // - when RNSScreenStackView.setupGestureHandler method is called, the recognizer hasn't been
9595+- // loaded yet and there is no other place to configure in a not "hacky" way
9696+- // - the official docs warn us to not use it for anything other than "setting up failure requirements with it"
9797+- // - we expose fullScreenGestureEnabled prop to enable/disable the feature,
9898+- // so we need control over the delegate
9999+- if (@available(iOS 26.0, *)) {
100100+- self.interactiveContentPopGestureRecognizer.enabled = NO;
101101+- }
102102+-}
103103+-#endif // iOS 26
104104+-
105105+ #if !TARGET_OS_TV
106106+ - (UIViewController *)childViewControllerForStatusBarStyle
107107+ {
108108+@@ -219,50 +199,6 @@ - (bool)onRepeatedTabSelectionOfTabScreenController:(RNSTabsScreenViewController
109109+ return false;
110110+ }
111111+112112+-#pragma mark - UINavigationBarDelegate
113113+-
114114+-#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
115115+-- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
116116+-{
117117+- if (@available(iOS 26, *)) {
118118+- // To prevent popping multiple screens when back button is pressed repeatedly,
119119+- // We allow for pop operation to proceed only if no transition is in progress,
120120+- // which we check indirectly by checking if transitionCoordinator is set.
121121+- // If it's not, we are safe to proceed.
122122+- if (self.transitionCoordinator == nil) {
123123+- // We still need to disable interactions for back button so click effects are not applied,
124124+- // and there is unfortunately no better place for it currently
125125+- UIView *button = [navigationBar rnscreens_findBackButtonWrapperView];
126126+- if (button != nil) {
127127+- button.userInteractionEnabled = false;
128128+- }
129129+-
130130+- return true;
131131+- }
132132+-
133133+- return false;
134134+- }
135135+-
136136+- return true;
137137+-}
138138+-
139139+-- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
140140+-{
141141+- if (@available(iOS 26, *)) {
142142+- // Reset interactions on back button -> see navigationBar:shouldPopItem
143143+- // IMPORTANT: This reset won't execute when preventNativeDismiss is on.
144144+- // However, on iOS 26, unlike in previous versions, the back button instance changes
145145+- // when handling preventNativeDismiss and userIteractionEnabled is reset.
146146+- // The instance also changes when regular screen pop happens, but in that case
147147+- // the value of userInteractionEnabled is carried on, and we reset it here.
148148+- UIView *button = [navigationBar rnscreens_findBackButtonWrapperView];
149149+- if (button != nil) {
150150+- button.userInteractionEnabled = true;
151151+- }
152152+- }
153153+-}
154154+-#endif // Check for iOS >= 26
155155+-
156156+ #pragma mark - RNSFrameCorrectionProvider
157157+158158+ #ifdef RNS_GAMMA_ENABLED
159159+@@ -327,7 +263,7 @@ @implementation RNSScreenStackView {
160160+ UINavigationController *_controller;
161161+ NSMutableArray<RNSScreenView *> *_reactSubviews;
162162+ BOOL _invalidated;
163163+- BOOL _isFullWidthSwiping;
164164++ BOOL _isFullWidthSwipingWithPanGesture; // used only for content swipe with RNSPanGestureRecognizer
165165+ RNSPercentDrivenInteractiveTransition *_interactionController;
166166+ __weak RNSScreenStackManager *_manager;
167167+ BOOL _updateScheduled;
168168+@@ -522,6 +458,11 @@ - (void)reactAddControllerToClosestParent:(UIViewController *)controller
169169+ [self addSubview:controller.view];
170170+ #if !TARGET_OS_TV
171171+ _controller.interactivePopGestureRecognizer.delegate = self;
172172++ #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
173173++ if (@available(iOS 26, *)) {
174174++ _controller.interactiveContentPopGestureRecognizer.delegate = self;
175175++ }
176176++#endif // Check for iOS >= 26.0
177177+ #endif
178178+ [controller didMoveToParentViewController:parentView.reactViewController];
179179+ // On iOS pre 12 we observed that `willShowViewController` delegate method does not always
180180+@@ -943,7 +884,7 @@ - (void)dismissOnReload
181181+ // when preventing the native dismiss with back button, we have to return the animator.
182182+ // Also, we need to return the animator when full width swiping even if the animation is not custom,
183183+ // otherwise the screen will be just popped immediately due to no animation
184184+- ((operation == UINavigationControllerOperationPop && shouldCancelDismiss) || _isFullWidthSwiping ||
185185++ ((operation == UINavigationControllerOperationPop && shouldCancelDismiss) || _isFullWidthSwipingWithPanGesture ||
186186+ [RNSScreenStackAnimator isCustomAnimation:screen.stackAnimation] || _customAnimation)) {
187187+ return [[RNSScreenStackAnimator alloc] initWithOperation:operation];
188188+ }
189189+@@ -967,23 +908,39 @@ - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
190190+ }
191191+ RNSScreenView *topScreen = _reactSubviews.lastObject;
192192+193193++ BOOL customAnimationOnSwipePropSetAndSelectedAnimationIsCustom =
194194++ topScreen.customAnimationOnSwipe && [RNSScreenStackAnimator isCustomAnimation:topScreen.stackAnimation];
195195++
196196+ #if TARGET_OS_TV || TARGET_OS_VISION
197197+ [self cancelTouchesInParent];
198198+ return YES;
199199+ #else
200200+- // RNSPanGestureRecognizer will receive events iff topScreen.fullScreenSwipeEnabled == YES;
201201+- // Events are filtered in gestureRecognizer:shouldReceivePressOrTouchEvent: method
202202+ if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
203203+- if ([self isInGestureResponseDistance:gestureRecognizer topScreen:topScreen]) {
204204+- _isFullWidthSwiping = YES;
205205+- [self cancelTouchesInParent];
206206+- return YES;
207207++ // On iOS < 26, we have a custom full screen swipe recognizer that functions similarily
208208++ // to interactiveContentPopGestureRecognizer introduced in iOS 26.
209209++ // On iOS >= 26, we want to use the native one, but we are unable to handle custom animations
210210++ // with native interactiveContentPopGestureRecognizer, so we have to fallback to the old implementation.
211211++ // In this case, the old one should behave as close as the new native one, having only the difference
212212++ // in animation, and without any customization that is exclusive for it (e.g. gestureResponseDistance).
213213++ if (@available(iOS 26, *)) {
214214++ if (customAnimationOnSwipePropSetAndSelectedAnimationIsCustom) {
215215++ _isFullWidthSwipingWithPanGesture = YES;
216216++ [self cancelTouchesInParent];
217217++ return YES;
218218++ }
219219++ return NO;
220220++ } else {
221221++ if ([self isInGestureResponseDistance:gestureRecognizer topScreen:topScreen]) {
222222++ _isFullWidthSwipingWithPanGesture = YES;
223223++ [self cancelTouchesInParent];
224224++ return YES;
225225++ }
226226++ return NO;
227227+ }
228228+- return NO;
229229+ }
230230+231231+ // Now we're dealing with RNSScreenEdgeGestureRecognizer (or _UIParallaxTransitionPanGestureRecognizer)
232232+- if (topScreen.customAnimationOnSwipe && [RNSScreenStackAnimator isCustomAnimation:topScreen.stackAnimation]) {
233233++ if (customAnimationOnSwipePropSetAndSelectedAnimationIsCustom) {
234234+ if ([gestureRecognizer isKindOfClass:[RNSScreenEdgeGestureRecognizer class]]) {
235235+ UIRectEdge edges = ((RNSScreenEdgeGestureRecognizer *)gestureRecognizer).edges;
236236+ BOOL isRTL = _controller.view.semanticContentAttribute == UISemanticContentAttributeForceRightToLeft;
237237+@@ -1028,7 +985,9 @@ - (void)setupGestureHandlers
238238+ rightEdgeSwipeGestureRecognizer.delegate = self;
239239+ [self addGestureRecognizer:rightEdgeSwipeGestureRecognizer];
240240+241241+- // gesture recognizer for full width swipe gesture
242242++ // Starting from iOS 26, RNSPanGestureRecognizer has been mostly replaced by native
243243++ // interactiveContentPopGestureRecognizer. It still needs to handle custom dismiss animations,
244244++ // which we are not able to handle with the latter.
245245+ RNSPanGestureRecognizer *panRecognizer = [[RNSPanGestureRecognizer alloc] initWithTarget:self
246246+ action:@selector(handleSwipe:)];
247247+ panRecognizer.delegate = self;
248248+@@ -1091,7 +1050,7 @@ - (void)handleSwipe:(UIPanGestureRecognizer *)gestureRecognizer
249249+ [_interactionController cancelInteractiveTransition];
250250+ }
251251+ _interactionController = nil;
252252+- _isFullWidthSwiping = NO;
253253++ _isFullWidthSwipingWithPanGesture = NO;
254254+ }
255255+ default: {
256256+ break;
257257+@@ -1225,14 +1184,6 @@ - (BOOL)isScrollViewPanGestureRecognizer:(UIGestureRecognizer *)gestureRecognize
258258+ // Be careful when adding another type of gesture recognizer.
259259+ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivePressOrTouchEvent:(NSObject *)event
260260+ {
261261+- if (@available(iOS 26, *)) {
262262+- // in iOS 26, you can swipe to pop screen before the previous one finished transitioning;
263263+- // this prevents from registering the second gesture
264264+- if ([self isTransitionInProgress]) {
265265+- return NO;
266266+- }
267267+- }
268268+-
269269+ RNSScreenView *topScreen = _reactSubviews.lastObject;
270270+271271+ for (RNSScreenView *s in _reactSubviews.reverseObjectEnumerator) {
272272+@@ -1249,10 +1200,30 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceive
273273+ return NO;
274274+ }
275275+276276++ BOOL customAnimationOnSwipePropSetAndSelectedAnimationIsCustom =
277277++ topScreen.customAnimationOnSwipe && [RNSScreenStackAnimator isCustomAnimation:topScreen.stackAnimation];
278278++#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
279279++ if (@available(iOS 26, *)) {
280280++ // On iOS 26, fullScreenSwipeEnabled takes no effect, and depending on whether custom animations are on,
281281++ // we select either interactiveContentPopGestureRecognizer or RNSPanGestureRecognizer
282282++ if (([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]] &&
283283++ !customAnimationOnSwipePropSetAndSelectedAnimationIsCustom) ||
284284++ (gestureRecognizer == _controller.interactiveContentPopGestureRecognizer &&
285285++ customAnimationOnSwipePropSetAndSelectedAnimationIsCustom)) {
286286++ return NO;
287287++ }
288288++ } else {
289289++ // We want to pass events to RNSPanGestureRecognizer iff full screen swipe is enabled.
290290++ if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
291291++ return topScreen.fullScreenSwipeEnabled;
292292++ }
293293++ }
294294++#else // check for iOS >= 26
295295+ // We want to pass events to RNSPanGestureRecognizer iff full screen swipe is enabled.
296296+ if ([gestureRecognizer isKindOfClass:[RNSPanGestureRecognizer class]]) {
297297+ return topScreen.fullScreenSwipeEnabled;
298298+ }
299299++#endif // check for iOS >= 26
300300+301301+ // RNSScreenEdgeGestureRecognizer || _UIParallaxTransitionPanGestureRecognizer
302302+ return YES;
303303+@@ -1268,15 +1239,6 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceive
304304+ return [self gestureRecognizer:gestureRecognizer shouldReceivePressOrTouchEvent:touch];
305305+ }
306306+307307+-- (BOOL)isTransitionInProgress
308308+-{
309309+- if (_controller.transitionCoordinator != nil) {
310310+- return YES;
311311+- }
312312+-
313313+- return NO;
314314+-}
315315+-
316316+ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
317317+ shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
318318+ {
319319+@@ -1289,7 +1251,6 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
320320+ if (gestureRecognizer.state == UIGestureRecognizerStateBegan || isBackGesture) {
321321+ return NO;
322322+ }
323323+-
324324+ return YES;
325325+ }
326326+ return NO;