react-native-screens 3.9.0 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +47 -7
  3. package/android/build.gradle +1 -2
  4. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +71 -0
  5. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
  7. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -1
  8. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +35 -52
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +1 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +83 -34
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +38 -33
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +77 -42
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +25 -9
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +8 -0
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +7 -1
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +1 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +10 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +72 -11
  19. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +107 -0
  20. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +155 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +67 -0
  22. package/android/src/main/res/anim/rns_default_enter_in.xml +18 -0
  23. package/android/src/main/res/anim/rns_default_enter_out.xml +19 -0
  24. package/android/src/main/res/anim/rns_default_exit_in.xml +17 -0
  25. package/android/src/main/res/anim/rns_default_exit_out.xml +18 -0
  26. package/android/src/main/res/anim/rns_fade_in.xml +7 -0
  27. package/android/src/main/res/anim/rns_fade_out.xml +7 -0
  28. package/android/src/main/res/anim/rns_no_animation_20.xml +6 -0
  29. package/createNativeStackNavigator/README.md +12 -0
  30. package/ios/RNSScreen.h +10 -0
  31. package/ios/RNSScreen.m +38 -0
  32. package/ios/RNSScreenContainer.m +5 -0
  33. package/ios/RNSScreenStack.m +29 -13
  34. package/ios/RNSScreenStackAnimator.m +45 -14
  35. package/ios/RNSScreenStackHeaderConfig.m +4 -1
  36. package/ios/RNSScreenWindowTraits.h +1 -0
  37. package/ios/RNSScreenWindowTraits.m +20 -0
  38. package/ios/UIViewController+RNScreens.m +10 -0
  39. package/lib/commonjs/index.js +17 -1
  40. package/lib/commonjs/index.js.map +1 -1
  41. package/lib/commonjs/index.native.js +66 -18
  42. package/lib/commonjs/index.native.js.map +1 -1
  43. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +67 -0
  44. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
  45. package/lib/commonjs/native-stack/views/HeaderConfig.js +46 -4
  46. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  47. package/lib/commonjs/native-stack/views/NativeStackView.js +33 -4
  48. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  49. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +60 -0
  50. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  51. package/lib/commonjs/reanimated/ReanimatedScreen.js +7 -79
  52. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  53. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +61 -0
  54. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
  55. package/lib/commonjs/reanimated/index.js +2 -2
  56. package/lib/commonjs/reanimated/index.js.map +1 -1
  57. package/lib/commonjs/utils.js +20 -0
  58. package/lib/commonjs/utils.js.map +1 -0
  59. package/lib/module/index.js +1 -0
  60. package/lib/module/index.js.map +1 -1
  61. package/lib/module/index.native.js +65 -19
  62. package/lib/module/index.native.js.map +1 -1
  63. package/lib/module/native-stack/utils/useBackPressSubscription.js +50 -0
  64. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
  65. package/lib/module/native-stack/views/HeaderConfig.js +46 -5
  66. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  67. package/lib/module/native-stack/views/NativeStackView.js +33 -4
  68. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  69. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +40 -0
  70. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  71. package/lib/module/reanimated/ReanimatedScreen.js +6 -73
  72. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  73. package/lib/module/reanimated/ReanimatedScreenProvider.js +49 -0
  74. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
  75. package/lib/module/reanimated/index.js +1 -1
  76. package/lib/module/reanimated/index.js.map +1 -1
  77. package/lib/module/utils.js +8 -0
  78. package/lib/module/utils.js.map +1 -0
  79. package/lib/typescript/index.d.ts +1 -0
  80. package/lib/typescript/native-stack/types.d.ts +34 -2
  81. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
  82. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
  83. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -2
  84. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
  85. package/lib/typescript/reanimated/index.d.ts +1 -1
  86. package/lib/typescript/types.d.ts +101 -1
  87. package/lib/typescript/utils.d.ts +2 -0
  88. package/native-stack/README.md +70 -8
  89. package/package.json +2 -1
  90. package/reanimated/package.json +6 -0
  91. package/src/index.native.tsx +94 -36
  92. package/src/index.tsx +4 -0
  93. package/src/native-stack/types.tsx +34 -2
  94. package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
  95. package/src/native-stack/views/HeaderConfig.tsx +46 -3
  96. package/src/native-stack/views/NativeStackView.tsx +33 -4
  97. package/src/reanimated/ReanimatedNativeStackScreen.tsx +61 -0
  98. package/src/reanimated/ReanimatedScreen.tsx +6 -84
  99. package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
  100. package/src/reanimated/index.tsx +1 -1
  101. package/src/types.tsx +101 -1
  102. package/src/utils.ts +12 -0
@@ -45,6 +45,11 @@
45
45
  {
46
46
  return [self topViewController].supportedInterfaceOrientations;
47
47
  }
48
+
49
+ - (UIViewController *)childViewControllerForHomeIndicatorAutoHidden
50
+ {
51
+ return [self topViewController];
52
+ }
48
53
  #endif
49
54
 
50
55
  @end
@@ -425,12 +430,12 @@
425
430
  // controller is still there
426
431
  BOOL firstTimePush = ![lastTop isKindOfClass:[RNSScreen class]];
427
432
 
428
- BOOL shouldAnimate = !firstTimePush && ((RNSScreenView *)lastTop.view).stackAnimation != RNSScreenStackAnimationNone;
429
-
430
433
  if (firstTimePush) {
431
434
  // nothing pushed yet
432
435
  [_controller setViewControllers:controllers animated:NO];
433
436
  } else if (top != lastTop) {
437
+ // we always provide `animated:YES` since, if the user does not want the animation, he will provide
438
+ // `stackAnimation: 'none'`, which will resolve in no animation anyways.
434
439
  if (![controllers containsObject:lastTop]) {
435
440
  // if the previous top screen does not exist anymore and the new top was not on the stack before, probably replace
436
441
  // was called, so we check the animation
@@ -445,7 +450,7 @@
445
450
  NSMutableArray *newControllers = [NSMutableArray arrayWithArray:controllers];
446
451
  [newControllers addObject:lastTop];
447
452
  [_controller setViewControllers:newControllers animated:NO];
448
- [_controller popViewControllerAnimated:shouldAnimate];
453
+ [_controller popViewControllerAnimated:YES];
449
454
  }
450
455
  } else if (![_controller.viewControllers containsObject:top]) {
451
456
  // new top controller is not on the stack
@@ -454,11 +459,11 @@
454
459
  NSMutableArray *newControllers = [NSMutableArray arrayWithArray:controllers];
455
460
  [newControllers removeLastObject];
456
461
  [_controller setViewControllers:newControllers animated:NO];
457
- [_controller pushViewController:top animated:shouldAnimate];
462
+ [_controller pushViewController:top animated:YES];
458
463
  } else {
459
464
  // don't really know what this case could be, but may need to handle it
460
465
  // somehow
461
- [_controller setViewControllers:controllers animated:shouldAnimate];
466
+ [_controller setViewControllers:controllers animated:NO];
462
467
  }
463
468
  } else {
464
469
  // change wasn't on the top of the stack. We don't need animation.
@@ -572,7 +577,8 @@
572
577
  {
573
578
  RNSScreenView *topScreen = (RNSScreenView *)_controller.viewControllers.lastObject.view;
574
579
 
575
- if (!topScreen.gestureEnabled || _controller.viewControllers.count < 2) {
580
+ if (![topScreen isKindOfClass:[RNSScreenView class]] || !topScreen.gestureEnabled ||
581
+ _controller.viewControllers.count < 2) {
576
582
  return NO;
577
583
  }
578
584
 
@@ -644,13 +650,23 @@
644
650
 
645
651
  - (void)handleSwipe:(UIPanGestureRecognizer *)gestureRecognizer
646
652
  {
647
- float translation = [gestureRecognizer translationInView:gestureRecognizer.view].x;
648
- float velocity = [gestureRecognizer velocityInView:gestureRecognizer.view].x;
649
- float distance = gestureRecognizer.view.bounds.size.width;
650
- BOOL isRTL = _controller.view.semanticContentAttribute == UISemanticContentAttributeForceRightToLeft;
651
- if (isRTL) {
652
- translation = -translation;
653
- velocity = -velocity;
653
+ RNSScreenView *topScreen = (RNSScreenView *)_controller.viewControllers.lastObject.view;
654
+ float translation;
655
+ float velocity;
656
+ float distance;
657
+ if (topScreen.swipeDirection == RNSScreenSwipeDirectionVertical) {
658
+ translation = [gestureRecognizer translationInView:gestureRecognizer.view].y;
659
+ velocity = [gestureRecognizer velocityInView:gestureRecognizer.view].y;
660
+ distance = gestureRecognizer.view.bounds.size.height;
661
+ } else {
662
+ translation = [gestureRecognizer translationInView:gestureRecognizer.view].x;
663
+ velocity = [gestureRecognizer velocityInView:gestureRecognizer.view].x;
664
+ distance = gestureRecognizer.view.bounds.size.width;
665
+ BOOL isRTL = _controller.view.semanticContentAttribute == UISemanticContentAttributeForceRightToLeft;
666
+ if (isRTL) {
667
+ translation = -translation;
668
+ velocity = -velocity;
669
+ }
654
670
  }
655
671
 
656
672
  float transitionProgress = (translation / distance);
@@ -2,6 +2,13 @@
2
2
  #import "RNSScreen.h"
3
3
  #import "RNSScreenStack.h"
4
4
 
5
+ // proportions to default transition duration
6
+ static const float RNSSlideOpenTransitionDurationProportion = 1;
7
+ static const float RNSFadeOpenTransitionDurationProportion = 0.2 / 0.35;
8
+ static const float RNSSlideCloseTransitionDurationProportion = 0.25 / 0.35;
9
+ static const float RNSFadeCloseTransitionDurationProportion = 0.15 / 0.35;
10
+ static const float RNSFadeCloseDelayTransitionDurationProportion = 0.1 / 0.35;
11
+
5
12
  @implementation RNSScreenStackAnimator {
6
13
  UINavigationControllerOperation _operation;
7
14
  NSTimeInterval _transitionDuration;
@@ -11,7 +18,7 @@
11
18
  {
12
19
  if (self = [super init]) {
13
20
  _operation = operation;
14
- _transitionDuration = 0.35; // default duration
21
+ _transitionDuration = 0.35; // default duration in seconds
15
22
  }
16
23
  return self;
17
24
  }
@@ -32,6 +39,12 @@
32
39
  if (screen != nil && screen.stackAnimation == RNSScreenStackAnimationNone) {
33
40
  return 0;
34
41
  }
42
+
43
+ if (screen != nil && screen.transitionDuration != nil && [screen.transitionDuration floatValue] >= 0) {
44
+ float durationInSeconds = [screen.transitionDuration floatValue] / 1000.0;
45
+ return durationInSeconds;
46
+ }
47
+
35
48
  return _transitionDuration;
36
49
  }
37
50
 
@@ -184,14 +197,30 @@
184
197
  } else if (_operation == UINavigationControllerOperationPop) {
185
198
  toViewController.view.transform = CGAffineTransformIdentity;
186
199
  [[transitionContext containerView] insertSubview:toViewController.view belowSubview:fromViewController.view];
187
- [UIView animateWithDuration:[self transitionDuration:transitionContext]
188
- animations:^{
189
- toViewController.view.transform = CGAffineTransformIdentity;
190
- fromViewController.view.transform = topBottomTransform;
191
- }
192
- completion:^(BOOL finished) {
193
- [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
194
- }];
200
+
201
+ void (^animationBlock)(void) = ^{
202
+ toViewController.view.transform = CGAffineTransformIdentity;
203
+ fromViewController.view.transform = topBottomTransform;
204
+ };
205
+ void (^completionBlock)(BOOL) = ^(BOOL finished) {
206
+ if (transitionContext.transitionWasCancelled) {
207
+ toViewController.view.transform = CGAffineTransformIdentity;
208
+ }
209
+ [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
210
+ };
211
+
212
+ if (!transitionContext.isInteractive) {
213
+ [UIView animateWithDuration:[self transitionDuration:transitionContext]
214
+ animations:animationBlock
215
+ completion:completionBlock];
216
+ } else {
217
+ // we don't want the EaseInOut option when swiping to dismiss the view, it is the same in default animation option
218
+ [UIView animateWithDuration:[self transitionDuration:transitionContext]
219
+ delay:0.0
220
+ options:UIViewAnimationOptionCurveLinear
221
+ animations:animationBlock
222
+ completion:completionBlock];
223
+ }
195
224
  }
196
225
  }
197
226
 
@@ -202,6 +231,8 @@
202
231
  CGAffineTransform topBottomTransform =
203
232
  CGAffineTransformMakeTranslation(0, 0.08 * transitionContext.containerView.bounds.size.height);
204
233
 
234
+ const float transitionDuration = [self transitionDuration:transitionContext];
235
+
205
236
  if (_operation == UINavigationControllerOperationPush) {
206
237
  toViewController.view.transform = topBottomTransform;
207
238
  toViewController.view.alpha = 0.0;
@@ -209,7 +240,7 @@
209
240
 
210
241
  // Android Nougat open animation
211
242
  // http://aosp.opersys.com/xref/android-7.1.2_r37/xref/frameworks/base/core/res/res/anim/activity_open_enter.xml
212
- [UIView animateWithDuration:0.35
243
+ [UIView animateWithDuration:transitionDuration * RNSSlideOpenTransitionDurationProportion // defaults to 0.35 s
213
244
  delay:0
214
245
  options:UIViewAnimationOptionCurveEaseOut
215
246
  animations:^{
@@ -220,7 +251,7 @@
220
251
  fromViewController.view.transform = CGAffineTransformIdentity;
221
252
  [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
222
253
  }];
223
- [UIView animateWithDuration:0.2
254
+ [UIView animateWithDuration:transitionDuration * RNSFadeOpenTransitionDurationProportion // defaults to 0.2 s
224
255
  delay:0
225
256
  options:UIViewAnimationOptionCurveEaseOut
226
257
  animations:^{
@@ -234,7 +265,7 @@
234
265
 
235
266
  // Android Nougat exit animation
236
267
  // http://aosp.opersys.com/xref/android-7.1.2_r37/xref/frameworks/base/core/res/res/anim/activity_close_exit.xml
237
- [UIView animateWithDuration:0.25
268
+ [UIView animateWithDuration:transitionDuration * RNSSlideCloseTransitionDurationProportion // defaults to 0.25 s
238
269
  delay:0
239
270
  options:UIViewAnimationOptionCurveEaseIn
240
271
  animations:^{
@@ -244,8 +275,8 @@
244
275
  completion:^(BOOL finished) {
245
276
  [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
246
277
  }];
247
- [UIView animateWithDuration:0.15
248
- delay:0.1
278
+ [UIView animateWithDuration:transitionDuration * RNSFadeCloseTransitionDurationProportion // defaults to 0.15 s
279
+ delay:transitionDuration * RNSFadeCloseDelayTransitionDurationProportion // defaults to 0.1 s
249
280
  options:UIViewAnimationOptionCurveLinear
250
281
  animations:^{
251
282
  fromViewController.view.alpha = 0.0;
@@ -152,9 +152,12 @@
152
152
  nextVC = nav.topViewController;
153
153
  }
154
154
 
155
+ // we want updates sent to the VC below modal too since it is also visible
156
+ BOOL isPresentingVC = vc.presentedViewController == nextVC;
157
+
155
158
  BOOL isInFullScreenModal = nav == nil && _screenView.stackPresentation == RNSScreenStackPresentationFullScreenModal;
156
159
  // if nav is nil, it means we can be in a fullScreen modal, so there is no nextVC, but we still want to update
157
- if (vc != nil && (nextVC == vc || isInFullScreenModal)) {
160
+ if (vc != nil && (nextVC == vc || isInFullScreenModal || isPresentingVC)) {
158
161
  [RNSScreenStackHeaderConfig updateViewController:self.screenView.controller withConfig:self animated:YES];
159
162
  }
160
163
  }
@@ -9,6 +9,7 @@
9
9
  #endif
10
10
  + (void)updateStatusBarAppearance;
11
11
  + (void)enforceDesiredDeviceOrientation;
12
+ + (void)updateHomeIndicatorAutoHidden;
12
13
 
13
14
  #if !TARGET_OS_TV
14
15
  + (UIStatusBarStyle)statusBarStyleForRNSStatusBarStyle:(RNSStatusBarStyle)statusBarStyle;
@@ -42,6 +42,25 @@
42
42
  #endif
43
43
  }
44
44
 
45
+ + (void)updateHomeIndicatorAutoHidden
46
+ {
47
+ #if !TARGET_OS_TV
48
+
49
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
50
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
51
+ if (@available(iOS 13, *)) {
52
+ UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
53
+ if (firstWindow != nil) {
54
+ [[firstWindow rootViewController] setNeedsUpdateOfHomeIndicatorAutoHidden];
55
+ }
56
+ } else
57
+ #endif
58
+ {
59
+ [UIApplication.sharedApplication.keyWindow.rootViewController setNeedsUpdateOfHomeIndicatorAutoHidden];
60
+ }
61
+ #endif
62
+ }
63
+
45
64
  #if !TARGET_OS_TV
46
65
  + (UIStatusBarStyle)statusBarStyleForRNSStatusBarStyle:(RNSStatusBarStyle)statusBarStyle
47
66
  {
@@ -165,6 +184,7 @@
165
184
  {
166
185
  [RNSScreenWindowTraits updateStatusBarAppearance];
167
186
  [RNSScreenWindowTraits enforceDesiredDeviceOrientation];
187
+ [RNSScreenWindowTraits updateHomeIndicatorAutoHidden];
168
188
  }
169
189
 
170
190
  #if !TARGET_OS_TV
@@ -31,6 +31,12 @@
31
31
  return childVC ? childVC.supportedInterfaceOrientations : [self reactNativeScreensSupportedInterfaceOrientations];
32
32
  }
33
33
 
34
+ - (UIViewController *)reactNativeScreensChildViewControllerForHomeIndicatorAutoHidden
35
+ {
36
+ UIViewController *childVC = [self findChildRNScreensViewController];
37
+ return childVC ?: [self reactNativeScreensChildViewControllerForHomeIndicatorAutoHidden];
38
+ }
39
+
34
40
  - (UIViewController *)findChildRNScreensViewController
35
41
  {
36
42
  UIViewController *lastViewController = [[self childViewControllers] lastObject];
@@ -61,6 +67,10 @@
61
67
  method_exchangeImplementations(
62
68
  class_getInstanceMethod(uiVCClass, @selector(supportedInterfaceOrientations)),
63
69
  class_getInstanceMethod(uiVCClass, @selector(reactNativeScreensSupportedInterfaceOrientations)));
70
+
71
+ method_exchangeImplementations(
72
+ class_getInstanceMethod(uiVCClass, @selector(childViewControllerForHomeIndicatorAutoHidden)),
73
+ class_getInstanceMethod(uiVCClass, @selector(reactNativeScreensChildViewControllerForHomeIndicatorAutoHidden)));
64
74
  });
65
75
  }
66
76
  #endif
@@ -24,7 +24,9 @@ var _exportNames = {
24
24
  SearchBar: true,
25
25
  ScreenStackHeaderSubview: true,
26
26
  shouldUseActivityState: true,
27
- useTransitionProgress: true
27
+ useTransitionProgress: true,
28
+ isSearchBarAvailableForCurrentPlatform: true,
29
+ executeNativeBackPress: true
28
30
  };
29
31
  exports.enableScreens = enableScreens;
30
32
  exports.screensEnabled = screensEnabled;
@@ -35,6 +37,18 @@ Object.defineProperty(exports, "useTransitionProgress", {
35
37
  return _useTransitionProgress.default;
36
38
  }
37
39
  });
40
+ Object.defineProperty(exports, "isSearchBarAvailableForCurrentPlatform", {
41
+ enumerable: true,
42
+ get: function () {
43
+ return _utils.isSearchBarAvailableForCurrentPlatform;
44
+ }
45
+ });
46
+ Object.defineProperty(exports, "executeNativeBackPress", {
47
+ enumerable: true,
48
+ get: function () {
49
+ return _utils.executeNativeBackPress;
50
+ }
51
+ });
38
52
  exports.shouldUseActivityState = exports.ScreenStackHeaderSubview = exports.SearchBar = exports.ScreenStackHeaderConfig = exports.ScreenStackHeaderSearchBarView = exports.ScreenStackHeaderCenterView = exports.ScreenStackHeaderLeftView = exports.ScreenStackHeaderRightView = exports.ScreenStackHeaderBackButtonImage = exports.FullWindowOverlay = exports.ScreenStack = exports.NativeScreenNavigationContainer = exports.NativeScreenContainer = exports.ScreenContainer = exports.ScreenContext = exports.Screen = exports.NativeScreen = void 0;
39
53
 
40
54
  var _react = _interopRequireDefault(require("react"));
@@ -57,6 +71,8 @@ Object.keys(_types).forEach(function (key) {
57
71
 
58
72
  var _useTransitionProgress = _interopRequireDefault(require("./useTransitionProgress"));
59
73
 
74
+ var _utils = require("./utils");
75
+
60
76
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
61
77
 
62
78
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","enableFreeze","shouldEnableReactFreeze","NativeScreen","React","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","Animated","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","View","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAUA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;;;;;AAEA,IAAIA,cAAc,GAAG,IAArB;;AAEO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;;AAEM,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD,C,CAED;AACA;;;AACO,SAASI,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D,CACjE;AACD;;AAEM,MAAMC,YAAN,SAA2BC,eAAMC,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGb,cAJR;AAKF,SAAGc;AALD,QAMA,KAAKC,KANT;;AAQA,QAAIF,OAAJ,EAAa;AACX,UAAIH,MAAM,KAAKM,SAAX,IAAwBL,aAAa,KAAKK,SAA9C,EAAyD;AACvDL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CADuD,CACjB;AACvC;;AACD,0BACE,6BAAC,iBAAD,CACE;AADF;AAEE,QAAA,MAAM,EAAEC,aAAa,KAAK,CAF5B;AAGE,QAAA,KAAK,EAAE,CAACC,KAAD,EAAQ;AAAEK,UAAAA,OAAO,EAAEN,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR;AAHT,SAIMG,IAJN,EADF;AAQD;;AAED,wBAAO,6BAAC,iBAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;;;;AA4BxD,MAAMI,MAAM,GAAGC,sBAASC,uBAAT,CAAiCd,YAAjC,CAAf;;;;AAEA,MAAMe,aAAa,gBAAGd,eAAMe,aAAN,CAAoBJ,MAApB,CAAtB;;;AAEA,MAAMK,eAA0D,GAAGC,iBAAnE;;AAEA,MAAMC,qBAAgE,GAAGD,iBAAzE;;AAEA,MAAME,+BAA0E,GAAGF,iBAAnF;;AAEA,MAAMG,WAAkD,GAAGH,iBAA3D;;AAEA,MAAMI,iBAAiB,GAAGJ,iBAA1B;;;AAEA,MAAMK,gCAAgC,GAC3Cd,KAD8C,iBAG9C,6BAAC,iBAAD,qBACE,6BAAC,kBAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;;;;AAQA,MAAMe,0BAA0B,GACrCf,KADwC,iBAExB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMgB,yBAAyB,GACpChB,KADuC,iBAEvB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMiB,2BAA2B,GACtCjB,KADyC,iBAEzB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMkB,8BAA8B,GACzClB,KAD4C,iBAE5B,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;AAIA,MAAMmB,uBAA0E,GAAGV,iBAAnF,C,CAEP;;;AACO,MAAMW,SAA8C,GAAGX,iBAAvD;;AAEA,MAAMY,wBAEX,GAAGZ,iBAFE;;AAIA,MAAMa,sBAAsB,GAAG,IAA/B","sourcesContent":["import React from 'react';\nimport { Animated, View, ViewProps, ImageProps, Image } from 'react-native';\nimport {\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n HeaderSubviewTypes,\n SearchBarProps,\n} from './types';\n\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\n\nlet ENABLE_SCREENS = true;\n\nexport function enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = shouldEnableScreens;\n}\n\nexport function screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// @ts-ignore function stub, freezing logic is located in index.native.tsx\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function enableFreeze(shouldEnableReactFreeze = true): void {\n // noop\n}\n\nexport class NativeScreen extends React.Component<ScreenProps> {\n render(): JSX.Element {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n return (\n <View\n // @ts-expect-error: hidden exists on web, but not in React Native\n hidden={activityState === 0}\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n {...rest}\n />\n );\n }\n\n return <View {...rest} />;\n }\n}\n\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\n\nexport const ScreenContext = React.createContext(Screen);\n\nexport const ScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenNavigationContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const ScreenStack: React.ComponentType<ScreenStackProps> = View;\n\nexport const FullWindowOverlay = View;\n\nexport const ScreenStackHeaderBackButtonImage = (\n props: ImageProps\n): JSX.Element => (\n <View>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </View>\n);\n\nexport const ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps> = View;\n\n// @ts-expect-error: search bar props have no common props with View\nexport const SearchBar: React.ComponentType<SearchBarProps> = View;\n\nexport const ScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>> = View;\n\nexport const shouldUseActivityState = true;\n"]}
1
+ {"version":3,"sources":["index.tsx"],"names":["ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","enableFreeze","shouldEnableReactFreeze","NativeScreen","React","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","Animated","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","View","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAUA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AACA;;;;;;AAKA,IAAIA,cAAc,GAAG,IAArB;;AAEO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;;AAEM,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD,C,CAED;AACA;;;AACO,SAASI,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D,CACjE;AACD;;AAEM,MAAMC,YAAN,SAA2BC,eAAMC,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGb,cAJR;AAKF,SAAGc;AALD,QAMA,KAAKC,KANT;;AAQA,QAAIF,OAAJ,EAAa;AACX,UAAIH,MAAM,KAAKM,SAAX,IAAwBL,aAAa,KAAKK,SAA9C,EAAyD;AACvDL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CADuD,CACjB;AACvC;;AACD,0BACE,6BAAC,iBAAD,CACE;AADF;AAEE,QAAA,MAAM,EAAEC,aAAa,KAAK,CAF5B;AAGE,QAAA,KAAK,EAAE,CAACC,KAAD,EAAQ;AAAEK,UAAAA,OAAO,EAAEN,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR;AAHT,SAIMG,IAJN,EADF;AAQD;;AAED,wBAAO,6BAAC,iBAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;;;;AA4BxD,MAAMI,MAAM,GAAGC,sBAASC,uBAAT,CAAiCd,YAAjC,CAAf;;;;AAEA,MAAMe,aAAa,gBAAGd,eAAMe,aAAN,CAAoBJ,MAApB,CAAtB;;;AAEA,MAAMK,eAA0D,GAAGC,iBAAnE;;AAEA,MAAMC,qBAAgE,GAAGD,iBAAzE;;AAEA,MAAME,+BAA0E,GAAGF,iBAAnF;;AAEA,MAAMG,WAAkD,GAAGH,iBAA3D;;AAEA,MAAMI,iBAAiB,GAAGJ,iBAA1B;;;AAEA,MAAMK,gCAAgC,GAC3Cd,KAD8C,iBAG9C,6BAAC,iBAAD,qBACE,6BAAC,kBAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;;;;AAQA,MAAMe,0BAA0B,GACrCf,KADwC,iBAExB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMgB,yBAAyB,GACpChB,KADuC,iBAEvB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMiB,2BAA2B,GACtCjB,KADyC,iBAEzB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMkB,8BAA8B,GACzClB,KAD4C,iBAE5B,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;AAIA,MAAMmB,uBAA0E,GAAGV,iBAAnF,C,CAEP;;;AACO,MAAMW,SAA8C,GAAGX,iBAAvD;;AAEA,MAAMY,wBAEX,GAAGZ,iBAFE;;AAIA,MAAMa,sBAAsB,GAAG,IAA/B","sourcesContent":["import React from 'react';\nimport { Animated, View, ViewProps, ImageProps, Image } from 'react-native';\nimport {\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n HeaderSubviewTypes,\n SearchBarProps,\n} from './types';\n\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\nexport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\nlet ENABLE_SCREENS = true;\n\nexport function enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = shouldEnableScreens;\n}\n\nexport function screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// @ts-ignore function stub, freezing logic is located in index.native.tsx\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function enableFreeze(shouldEnableReactFreeze = true): void {\n // noop\n}\n\nexport class NativeScreen extends React.Component<ScreenProps> {\n render(): JSX.Element {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n return (\n <View\n // @ts-expect-error: hidden exists on web, but not in React Native\n hidden={activityState === 0}\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n {...rest}\n />\n );\n }\n\n return <View {...rest} />;\n }\n}\n\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\n\nexport const ScreenContext = React.createContext(Screen);\n\nexport const ScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenNavigationContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const ScreenStack: React.ComponentType<ScreenStackProps> = View;\n\nexport const FullWindowOverlay = View;\n\nexport const ScreenStackHeaderBackButtonImage = (\n props: ImageProps\n): JSX.Element => (\n <View>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </View>\n);\n\nexport const ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps> = View;\n\n// @ts-expect-error: search bar props have no common props with View\nexport const SearchBar: React.ComponentType<SearchBarProps> = View;\n\nexport const ScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>> = View;\n\nexport const shouldUseActivityState = true;\n"]}
@@ -8,10 +8,14 @@ var _reactFreeze = require("react-freeze");
8
8
 
9
9
  var _processColor = _interopRequireDefault(require("react-native/Libraries/StyleSheet/processColor"));
10
10
 
11
+ var _package = require("react-native/package.json");
12
+
11
13
  var _TransitionProgressContext = _interopRequireDefault(require("./TransitionProgressContext"));
12
14
 
13
15
  var _useTransitionProgress = _interopRequireDefault(require("./useTransitionProgress"));
14
16
 
17
+ var _utils = require("./utils");
18
+
15
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
20
 
17
21
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
@@ -33,6 +37,13 @@ function enableScreens(shouldEnableScreens = true) {
33
37
  let ENABLE_FREEZE = false;
34
38
 
35
39
  function enableFreeze(shouldEnableReactFreeze = true) {
40
+ const minor = parseInt(_package.version.split('.')[1]); // eg. takes 66 from '0.66.0'
41
+ // react-freeze requires react-native >=0.64, react-native from main is 0.0.0
42
+
43
+ if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {
44
+ console.warn('react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.');
45
+ }
46
+
36
47
  ENABLE_FREEZE = shouldEnableReactFreeze;
37
48
  } // const that tells if the library should use new implementation, will be undefined for older versions
38
49
 
@@ -97,12 +108,34 @@ const ScreensNativeModules = {
97
108
 
98
109
  };
99
110
 
111
+ // This component allows one more render before freezing the screen.
112
+ // Allows activityState to reach the native side and useIsFocused to work correctly.
113
+ function DelayedFreeze({
114
+ freeze,
115
+ children
116
+ }) {
117
+ // flag used for determining whether freeze should be enabled
118
+ const [freezeState, setFreezeState] = _react.default.useState(false);
119
+
120
+ if (freeze !== freezeState) {
121
+ // setImmediate is executed at the end of the JS execution block.
122
+ // Used here for changing the state right after the render.
123
+ setImmediate(() => {
124
+ setFreezeState(freeze);
125
+ });
126
+ }
127
+
128
+ return /*#__PURE__*/_react.default.createElement(_reactFreeze.Freeze, {
129
+ freeze: freeze ? freezeState : false
130
+ }, children);
131
+ }
132
+
100
133
  function MaybeFreeze({
101
134
  freeze,
102
135
  children
103
136
  }) {
104
137
  if (ENABLE_FREEZE) {
105
- return /*#__PURE__*/_react.default.createElement(_reactFreeze.Freeze, {
138
+ return /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
106
139
  freeze: freeze
107
140
  }, children);
108
141
  } else {
@@ -117,19 +150,20 @@ function ScreenStack(props) {
117
150
  ...rest
118
151
  } = props;
119
152
 
120
- const count = _react.default.Children.count(children);
153
+ const size = _react.default.Children.count(children); // freezes all screens except the top one
121
154
 
122
- const childrenWithProps = _react.default.Children.map(children, (child, index) => {
123
- return /*#__PURE__*/_react.default.createElement(_reactFreeze.Freeze, {
124
- freeze: count - index > 2
125
- }, child);
126
- });
127
155
 
128
- return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithProps);
156
+ const childrenWithFreeze = _react.default.Children.map(children, (child, index) => /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
157
+ freeze: size - index > 1
158
+ }, child));
159
+
160
+ return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithFreeze);
129
161
  }
130
162
 
131
163
  return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, props);
132
- }
164
+ } // Incomplete type, all accessible properties available at:
165
+ // react-native/Libraries/Components/View/ReactNativeViewViewConfig.js
166
+
133
167
 
134
168
  class Screen extends _react.default.Component {
135
169
  constructor(...args) {
@@ -183,10 +217,24 @@ class Screen extends _react.default.Component {
183
217
  }
184
218
 
185
219
  const processedColor = (0, _processColor.default)(statusBarColor);
186
- return /*#__PURE__*/_react.default.createElement(AnimatedNativeScreen, _extends({}, props, {
220
+ return /*#__PURE__*/_react.default.createElement(MaybeFreeze, {
221
+ freeze: activityState === 0
222
+ }, /*#__PURE__*/_react.default.createElement(AnimatedNativeScreen, _extends({}, props, {
187
223
  statusBarColor: processedColor,
188
- activityState: activityState,
189
- ref: this.setRef,
224
+ activityState: activityState // This prevents showing blank screen when navigating between multiple screens with freezing
225
+ // https://github.com/software-mansion/react-native-screens/pull/1208
226
+ ,
227
+ ref: ref => {
228
+ var _ref$viewConfig, _ref$viewConfig$valid;
229
+
230
+ if (ref !== null && ref !== void 0 && (_ref$viewConfig = ref.viewConfig) !== null && _ref$viewConfig !== void 0 && (_ref$viewConfig$valid = _ref$viewConfig.validAttributes) !== null && _ref$viewConfig$valid !== void 0 && _ref$viewConfig$valid.style) {
231
+ ref.viewConfig.validAttributes.style = { ...ref.viewConfig.validAttributes.style,
232
+ display: false
233
+ };
234
+ }
235
+
236
+ this.setRef(ref);
237
+ },
190
238
  onTransitionProgress: !isNativeStack ? undefined : _reactNative.Animated.event([{
191
239
  nativeEvent: {
192
240
  progress: this.progress,
@@ -196,9 +244,7 @@ class Screen extends _react.default.Component {
196
244
  }], {
197
245
  useNativeDriver: true
198
246
  })
199
- }), /*#__PURE__*/_react.default.createElement(MaybeFreeze, {
200
- freeze: activityState === 0
201
- }, !isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
247
+ }), !isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
202
248
  children : /*#__PURE__*/_react.default.createElement(_TransitionProgressContext.default.Provider, {
203
249
  value: {
204
250
  progress: this.progress,
@@ -322,8 +368,8 @@ module.exports = {
322
368
  },
323
369
 
324
370
  get SearchBar() {
325
- if (_reactNative.Platform.OS !== 'ios') {
326
- console.warn('Importing SearchBar is only valid on iOS devices.');
371
+ if (!_utils.isSearchBarAvailableForCurrentPlatform) {
372
+ console.warn('Importing SearchBar is only valid on iOS and Android devices.');
327
373
  return _reactNative.View;
328
374
  }
329
375
 
@@ -350,6 +396,8 @@ module.exports = {
350
396
  enableFreeze,
351
397
  screensEnabled,
352
398
  shouldUseActivityState,
353
- useTransitionProgress: _useTransitionProgress.default
399
+ useTransitionProgress: _useTransitionProgress.default,
400
+ isSearchBarAvailableForCurrentPlatform: _utils.isSearchBarAvailableForCurrentPlatform,
401
+ executeNativeBackPress: _utils.executeNativeBackPress
354
402
  };
355
403
  //# sourceMappingURL=index.native.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","MaybeFreeze","freeze","children","ScreenStack","props","rest","count","React","Children","childrenWithProps","map","child","index","Screen","Component","Animated","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","statusBarColor","undefined","warn","processedColor","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","style","display","ScreenContainer","hasTwoStates","styles","StyleSheet","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","View","FullWindowOverlay","useTransitionProgress"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\nfunction MaybeFreeze({\n freeze,\n children,\n}: {\n freeze: boolean;\n children: React.ReactNode;\n}) {\n if (ENABLE_FREEZE) {\n return <Freeze freeze={freeze}>{children}</Freeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const count = React.Children.count(children);\n const childrenWithProps = React.Children.map(children, (child, index) => {\n return <Freeze freeze={count - index > 2}>{child}</Freeze>;\n });\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithProps}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n statusBarColor,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const processedColor = processColor(statusBarColor);\n\n return (\n <AnimatedNativeScreen\n {...props}\n statusBarColor={processedColor}\n activityState={activityState}\n ref={this.setRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n <MaybeFreeze freeze={activityState === 0}>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </MaybeFreeze>\n </AnimatedNativeScreen>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing SearchBar is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n};\n"]}
1
+ {"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","version","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","DelayedFreeze","freeze","children","freezeState","setFreezeState","React","useState","setImmediate","MaybeFreeze","ScreenStack","props","rest","size","Children","count","childrenWithFreeze","map","child","index","Screen","Component","Animated","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","statusBarColor","undefined","processedColor","viewConfig","validAttributes","style","display","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","ScreenContainer","hasTwoStates","styles","StyleSheet","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","isSearchBarAvailableForCurrentPlatform","View","FullWindowOverlay","useTransitionProgress","executeNativeBackPress"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction MaybeFreeze({ freeze, children }: FreezeWrapperProps) {\n if (ENABLE_FREEZE) {\n return <DelayedFreeze freeze={freeze}>{children}</DelayedFreeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => (\n <DelayedFreeze freeze={size - index > 1}>{child}</DelayedFreeze>\n ));\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n statusBarColor,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const processedColor = processColor(statusBarColor);\n\n return (\n <MaybeFreeze freeze={activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n statusBarColor={processedColor}\n activityState={activityState}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={(ref: ViewConfig) => {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n }\n this.setRef(ref);\n }}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </MaybeFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}