react-native-screens 3.8.0 → 3.9.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.
package/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  <img src="https://user-images.githubusercontent.com/16062886/117443651-c13d9500-af38-11eb-888d-b6a0b580760c.png" width="100%" alt="React Native Screens by Software Mansion" >
2
2
 
3
-
4
3
  This project aims to expose native navigation container components to React Native. It is not designed to be used as a standalone library but rather as a dependency of a [full-featured navigation library](https://github.com/react-navigation/react-navigation).
5
4
 
6
5
  ## Supported platforms
@@ -84,9 +83,10 @@ You can also disable the usage of native screens per navigator with [`detachInac
84
83
  ### Using `createNativeStackNavigator` with React Navigation
85
84
 
86
85
  To take advantage of the native stack navigator primitive for React Navigation that leverages `UINavigationController` on iOS and `Fragment` on Android, please refer:
86
+
87
87
  - for React Navigation >= v6 to the [Native Stack Navigator part of React Navigation documentation](https://reactnavigation.org/docs/native-stack-navigator)
88
- - for React Navigation v5 to the [README in react-native-screens/native-stack](https://github.com/software-mansion/react-native-screens/tree/master/native-stack)
89
- - for older versions to the [README in react-native-screens/createNativeStackNavigator](https://github.com/software-mansion/react-native-screens/tree/master/createNativeStackNavigator)
88
+ - for React Navigation v5 to the [README in react-native-screens/native-stack](https://github.com/software-mansion/react-native-screens/tree/master/native-stack)
89
+ - for older versions to the [README in react-native-screens/createNativeStackNavigator](https://github.com/software-mansion/react-native-screens/tree/master/createNativeStackNavigator)
90
90
 
91
91
  ## Interop with [react-native-navigation](https://github.com/wix/react-native-navigation)
92
92
 
@@ -101,6 +101,26 @@ This library should work out of the box with all existing react-native libraries
101
101
  If you are building a navigation library you may want to use `react-native-screens` to have control over which parts of the React component tree are attached to the native view hierarchy.
102
102
  To do that, `react-native-screens` provides you with the components documented [here](https://github.com/kmagiera/react-native-screens/tree/master/guides/GUIDE_FOR_LIBRARY_AUTHORS.md).
103
103
 
104
+ ## Common problems
105
+
106
+ ### Problems with header on iOS
107
+
108
+ - [Focused search bar causes new screens to have incorrect header](https://github.com/software-mansion/react-native-screens/issues/996)
109
+ - [Scrollable content gets cut off by the header with a search bar](https://github.com/software-mansion/react-native-screens/issues/1120)
110
+ - [RefreshControl does not work properly with NativeStackNavigator and largeTitle](https://github.com/software-mansion/react-native-screens/issues/395)
111
+
112
+ #### Solution
113
+
114
+ Use `ScrollView` with prop `contentInsetAdjustmentBehavior=“automatic”` as a main container of the screen and set `headerTranslucent: true` in screen options.
115
+
116
+ ### Other problems
117
+
118
+ | Problem | Solution |
119
+ | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
120
+ | [SVG component becomes transparent when goBack](https://github.com/software-mansion/react-native-screens/issues/773) | [related PRs](https://github.com/software-mansion/react-native-screens/issues/773#issuecomment-783469792) |
121
+ | [Memory leak while moving from one screen to another in the same stack](https://github.com/software-mansion/react-native-screens/issues/843) | [explanation](https://github.com/software-mansion/react-native-screens/issues/843#issuecomment-832034119) |
122
+ | [LargeHeader stays small after pop/goBack/swipe gesture on iOS 14+](https://github.com/software-mansion/react-native-screens/issues/649) | [potential fix](https://github.com/software-mansion/react-native-screens/issues/649#issuecomment-712199895) |
123
+
104
124
  ## Contributing
105
125
 
106
126
  There are many ways to contribute to this project. See [CONTRIBUTING](https://github.com/kmagiera/react-native-screens/tree/master/guides/CONTRIBUTING.md) guide for more information. Thank you for your interest in contributing!
@@ -11,6 +11,7 @@ import androidx.fragment.app.FragmentActivity
11
11
  import androidx.fragment.app.FragmentManager
12
12
  import androidx.fragment.app.FragmentTransaction
13
13
  import com.facebook.react.ReactRootView
14
+ import com.facebook.react.bridge.ReactContext
14
15
  import com.facebook.react.modules.core.ChoreographerCompat
15
16
  import com.facebook.react.modules.core.ReactChoreographer
16
17
  import com.swmansion.rnscreens.Screen.ActivityState
@@ -176,16 +177,12 @@ open class ScreenContainer<T : ScreenFragment>(context: Context?) : ViewGroup(co
176
177
  return transaction
177
178
  }
178
179
 
179
- private fun attachScreen(screenFragment: ScreenFragment) {
180
- createTransaction().add(id, screenFragment).commitNowAllowingStateLoss()
180
+ private fun attachScreen(transaction: FragmentTransaction, screenFragment: ScreenFragment) {
181
+ transaction.add(id, screenFragment)
181
182
  }
182
183
 
183
- private fun moveToFront(screenFragment: ScreenFragment) {
184
- createTransaction().remove(screenFragment).add(id, screenFragment).commitNowAllowingStateLoss()
185
- }
186
-
187
- private fun detachScreen(screenFragment: ScreenFragment) {
188
- createTransaction().remove(screenFragment).commitNowAllowingStateLoss()
184
+ private fun detachScreen(transaction: FragmentTransaction, screenFragment: ScreenFragment) {
185
+ transaction.remove(screenFragment)
189
186
  }
190
187
 
191
188
  private fun getActivityState(screenFragment: ScreenFragment): ActivityState? {
@@ -276,10 +273,18 @@ open class ScreenContainer<T : ScreenFragment>(context: Context?) : ViewGroup(co
276
273
  // The exception to this rule is `updateImmediately` which is triggered by actions
277
274
  // not connected to React view hierarchy changes, but rather internal events
278
275
  mNeedUpdate = true
276
+ (context as? ReactContext)?.runOnUiQueueThread {
277
+ // We schedule the update here because LayoutAnimations of `react-native-reanimated`
278
+ // sometimes attach/detach screens after the layout block of `ScreensShadowNode` has
279
+ // already run, and we want to update the container then too. In the other cases,
280
+ // this code will do nothing since it will run after the UIBlock when `mNeedUpdate`
281
+ // will already be false.
282
+ performUpdates()
283
+ }
279
284
  }
280
285
 
281
286
  protected fun performUpdatesNow() {
282
- // we want to update the immediately when the fragment manager is set or native back button
287
+ // we want to update immediately when the fragment manager is set or native back button
283
288
  // dismiss is dispatched or Screen's activityState changes since it is not connected to React
284
289
  // view hierarchy changes and will not trigger `onBeforeLayout` method of `ScreensShadowNode`
285
290
  mNeedUpdate = true
@@ -287,7 +292,7 @@ open class ScreenContainer<T : ScreenFragment>(context: Context?) : ViewGroup(co
287
292
  }
288
293
 
289
294
  fun performUpdates() {
290
- if (!mNeedUpdate || !mIsAttached || mFragmentManager == null) {
295
+ if (!mNeedUpdate || !mIsAttached || mFragmentManager == null || mFragmentManager?.isDestroyed == true) {
291
296
  return
292
297
  }
293
298
  mNeedUpdate = false
@@ -296,43 +301,53 @@ open class ScreenContainer<T : ScreenFragment>(context: Context?) : ViewGroup(co
296
301
  }
297
302
 
298
303
  open fun onUpdate() {
299
- // detach screens that are no longer active
300
- val orphaned: MutableSet<Fragment> = HashSet(requireNotNull(mFragmentManager, { "mFragmentManager is null when performing update in ScreenContainer" }).fragments)
301
- for (screenFragment in mScreenFragments) {
302
- if (getActivityState(screenFragment) === ActivityState.INACTIVE &&
303
- screenFragment.isAdded
304
- ) {
305
- detachScreen(screenFragment)
304
+ createTransaction().let {
305
+ // detach screens that are no longer active
306
+ val orphaned: MutableSet<Fragment> = HashSet(requireNotNull(mFragmentManager, { "mFragmentManager is null when performing update in ScreenContainer" }).fragments)
307
+ for (screenFragment in mScreenFragments) {
308
+ if (getActivityState(screenFragment) === ActivityState.INACTIVE &&
309
+ screenFragment.isAdded
310
+ ) {
311
+ detachScreen(it, screenFragment)
312
+ }
313
+ orphaned.remove(screenFragment)
306
314
  }
307
- orphaned.remove(screenFragment)
308
- }
309
- if (orphaned.isNotEmpty()) {
310
- val orphanedAry = orphaned.toTypedArray()
311
- for (fragment in orphanedAry) {
312
- if (fragment is ScreenFragment) {
313
- if (fragment.screen.container == null) {
314
- detachScreen(fragment)
315
+ if (orphaned.isNotEmpty()) {
316
+ val orphanedAry = orphaned.toTypedArray()
317
+ for (fragment in orphanedAry) {
318
+ if (fragment is ScreenFragment) {
319
+ if (fragment.screen.container == null) {
320
+ detachScreen(it, fragment)
321
+ }
315
322
  }
316
323
  }
317
324
  }
318
- }
319
- var transitioning = true
320
- if (topScreen != null) {
325
+
321
326
  // if there is an "onTop" screen it means the transition has ended
322
- transitioning = false
323
- }
327
+ val transitioning = topScreen == null
324
328
 
325
- // attach newly activated screens
326
- var addedBefore = false
327
- for (screenFragment in mScreenFragments) {
328
- val activityState = getActivityState(screenFragment)
329
- if (activityState !== ActivityState.INACTIVE && !screenFragment.isAdded) {
330
- addedBefore = true
331
- attachScreen(screenFragment)
332
- } else if (activityState !== ActivityState.INACTIVE && addedBefore) {
333
- moveToFront(screenFragment)
329
+ // attach newly activated screens
330
+ var addedBefore = false
331
+ val pendingFront: ArrayList<T> = ArrayList()
332
+
333
+ for (screenFragment in mScreenFragments) {
334
+ val activityState = getActivityState(screenFragment)
335
+ if (activityState !== ActivityState.INACTIVE && !screenFragment.isAdded) {
336
+ addedBefore = true
337
+ attachScreen(it, screenFragment)
338
+ } else if (activityState !== ActivityState.INACTIVE && addedBefore) {
339
+ // we detach the screen and then reattach it later to make it appear on front
340
+ detachScreen(it, screenFragment)
341
+ pendingFront.add(screenFragment)
342
+ }
343
+ screenFragment.screen.setTransitioning(transitioning)
344
+ }
345
+
346
+ for (screenFragment in pendingFront) {
347
+ attachScreen(it, screenFragment)
334
348
  }
335
- screenFragment.screen.setTransitioning(transitioning)
349
+
350
+ it.commitNowAllowingStateLoss()
336
351
  }
337
352
  }
338
353
 
@@ -120,10 +120,8 @@ class ScreenStack(context: Context?) : ScreenContainer<ScreenStackFragment>(cont
120
120
  // if the previous top screen does not exist anymore and the new top was not on the stack
121
121
  // before, probably replace or reset was called, so we play the "close animation".
122
122
  // Otherwise it's open animation
123
- shouldUseOpenAnimation = (
124
- mScreenFragments.contains(mTopScreen) ||
125
- newTop.screen.replaceAnimation !== Screen.ReplaceAnimation.POP
126
- )
123
+ val containsTopScreen = mTopScreen?.let { mScreenFragments.contains(it) } == true
124
+ shouldUseOpenAnimation = containsTopScreen || newTop.screen.replaceAnimation !== Screen.ReplaceAnimation.POP
127
125
  stackAnimation = newTop.screen.stackAnimation
128
126
  } else if (mTopScreen == null && newTop != null) {
129
127
  // mTopScreen was not present before so newTop is the first screen added to a stack
package/ios/RNSScreen.m CHANGED
@@ -564,6 +564,8 @@
564
564
  _shouldNotify = NO;
565
565
  }
566
566
 
567
+ [self hideHeaderIfNecessary];
568
+
567
569
  // as per documentation of these methods
568
570
  _goingForward = [self isBeingPresented] || [self isMovingToParentViewController];
569
571
 
@@ -575,6 +577,35 @@
575
577
  }
576
578
  }
577
579
 
580
+ - (void)hideHeaderIfNecessary
581
+ {
582
+ #if !TARGET_OS_TV
583
+ // On iOS >=13, there is a bug when user transitions from screen with active search bar to screen without header
584
+ // In that case default iOS header will be shown. To fix this we hide header when the screens that appears has header
585
+ // hidden and search bar was active on previous screen. We need to do it asynchronously, because default header is
586
+ // added after viewWillAppear.
587
+ if (@available(iOS 13.0, *)) {
588
+ NSUInteger currentIndex = [self.navigationController.viewControllers indexOfObject:self];
589
+
590
+ if (currentIndex > 0 && [self.view.reactSubviews[0] isKindOfClass:[RNSScreenStackHeaderConfig class]]) {
591
+ UINavigationItem *prevNavigationItem =
592
+ [self.navigationController.viewControllers objectAtIndex:currentIndex - 1].navigationItem;
593
+ RNSScreenStackHeaderConfig *config = ((RNSScreenStackHeaderConfig *)self.view.reactSubviews[0]);
594
+
595
+ BOOL wasSearchBarActive = prevNavigationItem.searchController.active;
596
+ BOOL shouldHideHeader = config.hide;
597
+
598
+ if (wasSearchBarActive && shouldHideHeader) {
599
+ dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0);
600
+ dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
601
+ [self.navigationController setNavigationBarHidden:YES animated:NO];
602
+ });
603
+ }
604
+ }
605
+ }
606
+ #endif
607
+ }
608
+
578
609
  - (void)viewWillDisappear:(BOOL)animated
579
610
  {
580
611
  [super viewWillDisappear:animated];
@@ -489,6 +489,23 @@
489
489
  [self setModalViewControllers:modalControllers];
490
490
  }
491
491
 
492
+ // By default, the header buttons that are not inside the native hit area
493
+ // cannot be clicked, so we check it by ourselves
494
+ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
495
+ {
496
+ if (CGRectContainsPoint(_controller.navigationBar.frame, point)) {
497
+ // headerConfig should be the first subview of the topmost screen
498
+ UIView *headerConfig = [[_reactSubviews.lastObject reactSubviews] firstObject];
499
+ if ([headerConfig isKindOfClass:[RNSScreenStackHeaderConfig class]]) {
500
+ UIView *headerHitTestResult = [headerConfig hitTest:point withEvent:event];
501
+ if (headerHitTestResult != nil) {
502
+ return headerHitTestResult;
503
+ }
504
+ }
505
+ }
506
+ return [super hitTest:point withEvent:event];
507
+ }
508
+
492
509
  - (void)layoutSubviews
493
510
  {
494
511
  [super layoutSubviews];
@@ -118,6 +118,27 @@
118
118
  _screenView = nil;
119
119
  }
120
120
 
121
+ // this method is never invoked by the system since this view
122
+ // is not added to native view hierarchy so we can apply our logic
123
+ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
124
+ {
125
+ for (RNSScreenStackHeaderSubview *subview in _reactSubviews) {
126
+ if (subview.type == RNSScreenStackHeaderSubviewTypeLeft || subview.type == RNSScreenStackHeaderSubviewTypeRight) {
127
+ // we wrap the headerLeft/Right component in a UIBarButtonItem
128
+ // so we need to use the only subview of it to retrieve the correct view
129
+ UIView *headerComponent = subview.subviews.firstObject;
130
+ // we convert the point to RNSScreenStackView since it always contains the header inside it
131
+ CGPoint convertedPoint = [_screenView.reactSuperview convertPoint:point toView:headerComponent];
132
+
133
+ UIView *hitTestResult = [headerComponent hitTest:convertedPoint withEvent:event];
134
+ if (hitTestResult != nil) {
135
+ return hitTestResult;
136
+ }
137
+ }
138
+ }
139
+ return nil;
140
+ }
141
+
121
142
  - (void)updateViewControllerIfNeeded
122
143
  {
123
144
  UIViewController *vc = _screenView.controller;
@@ -138,10 +159,23 @@
138
159
  }
139
160
  }
140
161
 
162
+ - (void)layoutNavigationControllerView
163
+ {
164
+ UIViewController *vc = _screenView.controller;
165
+ UINavigationController *navctr = vc.navigationController;
166
+ [navctr.view setNeedsLayout];
167
+ }
168
+
141
169
  - (void)didSetProps:(NSArray<NSString *> *)changedProps
142
170
  {
143
171
  [super didSetProps:changedProps];
144
172
  [self updateViewControllerIfNeeded];
173
+ // We need to layout navigation controller view after translucent prop changes, because otherwise
174
+ // frame of RNSScreen will not be changed and screen content will remain the same size.
175
+ // For more details look at https://github.com/software-mansion/react-native-screens/issues/1158
176
+ if ([changedProps containsObject:@"translucent"]) {
177
+ [self layoutNavigationControllerView];
178
+ }
145
179
  }
146
180
 
147
181
  - (void)didUpdateReactSubviews
@@ -556,6 +590,13 @@
556
590
  break;
557
591
  }
558
592
  case RNSScreenStackHeaderSubviewTypeSearchBar: {
593
+ if (subview.subviews == nil || [subview.subviews count] == 0) {
594
+ RCTLogWarn(
595
+ @"Failed to attach search bar to the header. We recommend using `useLayoutEffect` when managing "
596
+ "searchBar properties dynamically. \n\nSee: github.com/software-mansion/react-native-screens/issues/1188");
597
+ break;
598
+ }
599
+
559
600
  if ([subview.subviews[0] isKindOfClass:[RNSSearchBar class]]) {
560
601
  #if !TARGET_OS_TV
561
602
  if (@available(iOS 11.0, *)) {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  var _exportNames = {
7
7
  enableScreens: true,
8
8
  screensEnabled: true,
9
+ enableFreeze: true,
9
10
  NativeScreen: true,
10
11
  Screen: true,
11
12
  ScreenContext: true,
@@ -27,6 +28,7 @@ var _exportNames = {
27
28
  };
28
29
  exports.enableScreens = enableScreens;
29
30
  exports.screensEnabled = screensEnabled;
31
+ exports.enableFreeze = enableFreeze;
30
32
  Object.defineProperty(exports, "useTransitionProgress", {
31
33
  enumerable: true,
32
34
  get: function () {
@@ -67,6 +69,11 @@ function enableScreens(shouldEnableScreens = true) {
67
69
 
68
70
  function screensEnabled() {
69
71
  return ENABLE_SCREENS;
72
+ } // @ts-ignore function stub, freezing logic is located in index.native.tsx
73
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
+
75
+
76
+ function enableFreeze(shouldEnableReactFreeze = true) {// noop
70
77
  }
71
78
 
72
79
  class NativeScreen extends _react.default.Component {
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","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;;AAEM,MAAMI,YAAN,SAA2BC,eAAMC,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGX,cAJR;AAKF,SAAGY;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\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;;;;;;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"]}
@@ -4,6 +4,8 @@ var _react = _interopRequireDefault(require("react"));
4
4
 
5
5
  var _reactNative = require("react-native");
6
6
 
7
+ var _reactFreeze = require("react-freeze");
8
+
7
9
  var _processColor = _interopRequireDefault(require("react-native/Libraries/StyleSheet/processColor"));
8
10
 
9
11
  var _TransitionProgressContext = _interopRequireDefault(require("./TransitionProgressContext"));
@@ -26,6 +28,12 @@ function enableScreens(shouldEnableScreens = true) {
26
28
  if (ENABLE_SCREENS && !_reactNative.UIManager.getViewManagerConfig('RNSScreen')) {
27
29
  console.error(`Screen native module hasn't been linked. Please check the react-native-screens README for more details`);
28
30
  }
31
+ }
32
+
33
+ let ENABLE_FREEZE = false;
34
+
35
+ function enableFreeze(shouldEnableReactFreeze = true) {
36
+ ENABLE_FREEZE = shouldEnableReactFreeze;
29
37
  } // const that tells if the library should use new implementation, will be undefined for older versions
30
38
 
31
39
 
@@ -89,6 +97,40 @@ const ScreensNativeModules = {
89
97
 
90
98
  };
91
99
 
100
+ function MaybeFreeze({
101
+ freeze,
102
+ children
103
+ }) {
104
+ if (ENABLE_FREEZE) {
105
+ return /*#__PURE__*/_react.default.createElement(_reactFreeze.Freeze, {
106
+ freeze: freeze
107
+ }, children);
108
+ } else {
109
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
110
+ }
111
+ }
112
+
113
+ function ScreenStack(props) {
114
+ if (ENABLE_FREEZE) {
115
+ const {
116
+ children,
117
+ ...rest
118
+ } = props;
119
+
120
+ const count = _react.default.Children.count(children);
121
+
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
+
128
+ return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithProps);
129
+ }
130
+
131
+ return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, props);
132
+ }
133
+
92
134
  class Screen extends _react.default.Component {
93
135
  constructor(...args) {
94
136
  super(...args);
@@ -154,14 +196,16 @@ class Screen extends _react.default.Component {
154
196
  }], {
155
197
  useNativeDriver: true
156
198
  })
157
- }), !isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
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
158
202
  children : /*#__PURE__*/_react.default.createElement(_TransitionProgressContext.default.Provider, {
159
203
  value: {
160
204
  progress: this.progress,
161
205
  closing: this.closing,
162
206
  goingForward: this.goingForward
163
207
  }
164
- }, children));
208
+ }, children)));
165
209
  } else {
166
210
  // same reason as above
167
211
  let {
@@ -255,6 +299,7 @@ module.exports = {
255
299
  Screen,
256
300
  ScreenContainer,
257
301
  ScreenContext,
302
+ ScreenStack,
258
303
 
259
304
  get NativeScreen() {
260
305
  return ScreensNativeModules.NativeScreen;
@@ -268,10 +313,6 @@ module.exports = {
268
313
  return ScreensNativeModules.NativeScreenNavigationContainer;
269
314
  },
270
315
 
271
- get ScreenStack() {
272
- return ScreensNativeModules.NativeScreenStack;
273
- },
274
-
275
316
  get ScreenStackHeaderConfig() {
276
317
  return ScreensNativeModules.NativeScreenStackHeaderConfig;
277
318
  },
@@ -306,6 +347,7 @@ module.exports = {
306
347
  ScreenStackHeaderCenterView,
307
348
  ScreenStackHeaderSearchBarView,
308
349
  enableScreens,
350
+ enableFreeze,
309
351
  screensEnabled,
310
352
  shouldUseActivityState,
311
353
  useTransitionProgress: _useTransitionProgress.default
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","Screen","React","Component","Animated","Value","ref","props","onComponentRef","setNativeProps","render","enabled","rest","createAnimatedComponent","active","activityState","children","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","ScreenStack","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';\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\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\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 {!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 );\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\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 ScreenStack() {\n return ScreensNativeModules.NativeScreenStack;\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 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","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"]}
@@ -10,6 +10,10 @@ export function enableScreens(shouldEnableScreens = true) {
10
10
  }
11
11
  export function screensEnabled() {
12
12
  return ENABLE_SCREENS;
13
+ } // @ts-ignore function stub, freezing logic is located in index.native.tsx
14
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
15
+
16
+ export function enableFreeze(shouldEnableReactFreeze = true) {// noop
13
17
  }
14
18
  export class NativeScreen extends React.Component {
15
19
  render() {
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["React","Animated","View","Image","default","useTransitionProgress","ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","NativeScreen","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,EAAmBC,IAAnB,EAAgDC,KAAhD,QAA6D,cAA7D;AAUA,cAAc,SAAd;AACA,SAASC,OAAO,IAAIC,qBAApB,QAAiD,yBAAjD;AAEA,IAAIC,cAAc,GAAG,IAArB;AAEA,OAAO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;AAED,OAAO,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD;AAED,OAAO,MAAMI,YAAN,SAA2BV,KAAK,CAACW,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGV,cAJR;AAKF,SAAGW;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,oBAAC,IAAD,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,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;AA4B/D,OAAO,MAAMI,MAAM,GAAGpB,QAAQ,CAACqB,uBAAT,CAAiCZ,YAAjC,CAAf;AAEP,OAAO,MAAMa,aAAa,gBAAGvB,KAAK,CAACwB,aAAN,CAAoBH,MAApB,CAAtB;AAEP,OAAO,MAAMI,eAA0D,GAAGvB,IAAnE;AAEP,OAAO,MAAMwB,qBAAgE,GAAGxB,IAAzE;AAEP,OAAO,MAAMyB,+BAA0E,GAAGzB,IAAnF;AAEP,OAAO,MAAM0B,WAAkD,GAAG1B,IAA3D;AAEP,OAAO,MAAM2B,iBAAiB,GAAG3B,IAA1B;AAEP,OAAO,MAAM4B,gCAAgC,GAC3CZ,KAD8C,iBAG9C,oBAAC,IAAD,qBACE,oBAAC,KAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;AAQP,OAAO,MAAMa,0BAA0B,GACrCb,KADwC,iBAExB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMc,yBAAyB,GACpCd,KADuC,iBAEvB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMe,2BAA2B,GACtCf,KADyC,iBAEzB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMgB,8BAA8B,GACzChB,KAD4C,iBAE5B,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMiB,uBAA0E,GAAGjC,IAAnF,C,CAEP;;AACA,OAAO,MAAMkC,SAA8C,GAAGlC,IAAvD;AAEP,OAAO,MAAMmC,wBAEX,GAAGnC,IAFE;AAIP,OAAO,MAAMoC,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\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":["React","Animated","View","Image","default","useTransitionProgress","ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","enableFreeze","shouldEnableReactFreeze","NativeScreen","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,EAAmBC,IAAnB,EAAgDC,KAAhD,QAA6D,cAA7D;AAUA,cAAc,SAAd;AACA,SAASC,OAAO,IAAIC,qBAApB,QAAiD,yBAAjD;AAEA,IAAIC,cAAc,GAAG,IAArB;AAEA,OAAO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;AAED,OAAO,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD,C,CAED;AACA;;AACA,OAAO,SAASI,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D,CACjE;AACD;AAED,OAAO,MAAMC,YAAN,SAA2BZ,KAAK,CAACa,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGZ,cAJR;AAKF,SAAGa;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,oBAAC,IAAD,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,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;AA4B/D,OAAO,MAAMI,MAAM,GAAGtB,QAAQ,CAACuB,uBAAT,CAAiCZ,YAAjC,CAAf;AAEP,OAAO,MAAMa,aAAa,gBAAGzB,KAAK,CAAC0B,aAAN,CAAoBH,MAApB,CAAtB;AAEP,OAAO,MAAMI,eAA0D,GAAGzB,IAAnE;AAEP,OAAO,MAAM0B,qBAAgE,GAAG1B,IAAzE;AAEP,OAAO,MAAM2B,+BAA0E,GAAG3B,IAAnF;AAEP,OAAO,MAAM4B,WAAkD,GAAG5B,IAA3D;AAEP,OAAO,MAAM6B,iBAAiB,GAAG7B,IAA1B;AAEP,OAAO,MAAM8B,gCAAgC,GAC3CZ,KAD8C,iBAG9C,oBAAC,IAAD,qBACE,oBAAC,KAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;AAQP,OAAO,MAAMa,0BAA0B,GACrCb,KADwC,iBAExB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMc,yBAAyB,GACpCd,KADuC,iBAEvB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMe,2BAA2B,GACtCf,KADyC,iBAEzB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMgB,8BAA8B,GACzChB,KAD4C,iBAE5B,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMiB,uBAA0E,GAAGnC,IAAnF,C,CAEP;;AACA,OAAO,MAAMoC,SAA8C,GAAGpC,IAAvD;AAEP,OAAO,MAAMqC,wBAEX,GAAGrC,IAFE;AAIP,OAAO,MAAMsC,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"]}
@@ -3,7 +3,8 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
3
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
4
 
5
5
  import React from 'react';
6
- import { Animated, Image, Platform, requireNativeComponent, StyleSheet, UIManager, View } from 'react-native'; // @ts-ignore Getting private component
6
+ import { Animated, Image, Platform, requireNativeComponent, StyleSheet, UIManager, View } from 'react-native';
7
+ import { Freeze } from 'react-freeze'; // @ts-ignore Getting private component
7
8
  // eslint-disable-next-line import/default
8
9
 
9
10
  import processColor from 'react-native/Libraries/StyleSheet/processColor';
@@ -19,6 +20,12 @@ function enableScreens(shouldEnableScreens = true) {
19
20
  if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {
20
21
  console.error(`Screen native module hasn't been linked. Please check the react-native-screens README for more details`);
21
22
  }
23
+ }
24
+
25
+ let ENABLE_FREEZE = false;
26
+
27
+ function enableFreeze(shouldEnableReactFreeze = true) {
28
+ ENABLE_FREEZE = shouldEnableReactFreeze;
22
29
  } // const that tells if the library should use new implementation, will be undefined for older versions
23
30
 
24
31
 
@@ -82,6 +89,37 @@ const ScreensNativeModules = {
82
89
 
83
90
  };
84
91
 
92
+ function MaybeFreeze({
93
+ freeze,
94
+ children
95
+ }) {
96
+ if (ENABLE_FREEZE) {
97
+ return /*#__PURE__*/React.createElement(Freeze, {
98
+ freeze: freeze
99
+ }, children);
100
+ } else {
101
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
102
+ }
103
+ }
104
+
105
+ function ScreenStack(props) {
106
+ if (ENABLE_FREEZE) {
107
+ const {
108
+ children,
109
+ ...rest
110
+ } = props;
111
+ const count = React.Children.count(children);
112
+ const childrenWithProps = React.Children.map(children, (child, index) => {
113
+ return /*#__PURE__*/React.createElement(Freeze, {
114
+ freeze: count - index > 2
115
+ }, child);
116
+ });
117
+ return /*#__PURE__*/React.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithProps);
118
+ }
119
+
120
+ return /*#__PURE__*/React.createElement(ScreensNativeModules.NativeScreenStack, props);
121
+ }
122
+
85
123
  class Screen extends React.Component {
86
124
  constructor(...args) {
87
125
  super(...args);
@@ -147,14 +185,16 @@ class Screen extends React.Component {
147
185
  }], {
148
186
  useNativeDriver: true
149
187
  })
150
- }), !isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
188
+ }), /*#__PURE__*/React.createElement(MaybeFreeze, {
189
+ freeze: activityState === 0
190
+ }, !isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
151
191
  children : /*#__PURE__*/React.createElement(TransitionProgressContext.Provider, {
152
192
  value: {
153
193
  progress: this.progress,
154
194
  closing: this.closing,
155
195
  goingForward: this.goingForward
156
196
  }
157
- }, children));
197
+ }, children)));
158
198
  } else {
159
199
  // same reason as above
160
200
  let {
@@ -247,6 +287,7 @@ module.exports = {
247
287
  Screen,
248
288
  ScreenContainer,
249
289
  ScreenContext,
290
+ ScreenStack,
250
291
 
251
292
  get NativeScreen() {
252
293
  return ScreensNativeModules.NativeScreen;
@@ -260,10 +301,6 @@ module.exports = {
260
301
  return ScreensNativeModules.NativeScreenNavigationContainer;
261
302
  },
262
303
 
263
- get ScreenStack() {
264
- return ScreensNativeModules.NativeScreenStack;
265
- },
266
-
267
304
  get ScreenStackHeaderConfig() {
268
305
  return ScreensNativeModules.NativeScreenStackHeaderConfig;
269
306
  },
@@ -298,6 +335,7 @@ module.exports = {
298
335
  ScreenStackHeaderCenterView,
299
336
  ScreenStackHeaderSearchBarView,
300
337
  enableScreens,
338
+ enableFreeze,
301
339
  screensEnabled,
302
340
  shouldUseActivityState,
303
341
  useTransitionProgress
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","processColor","TransitionProgressContext","useTransitionProgress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","getViewManagerConfig","console","error","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","Screen","Component","Value","ref","props","onComponentRef","setNativeProps","render","enabled","rest","createAnimatedComponent","active","activityState","children","isNativeStack","statusBarColor","undefined","warn","processedColor","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","style","display","ScreenContainer","hasTwoStates","styles","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStack","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"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';\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\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\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 {!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 );\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\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 ScreenStack() {\n return ScreensNativeModules.NativeScreenStack;\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 screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n};\n"]}
1
+ {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","Freeze","processColor","TransitionProgressContext","useTransitionProgress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","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","Children","childrenWithProps","map","child","index","Screen","Component","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","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"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"]}
@@ -5,6 +5,7 @@ export * from './types';
5
5
  export { default as useTransitionProgress } from './useTransitionProgress';
6
6
  export declare function enableScreens(shouldEnableScreens?: boolean): void;
7
7
  export declare function screensEnabled(): boolean;
8
+ export declare function enableFreeze(shouldEnableReactFreeze?: boolean): void;
8
9
  export declare class NativeScreen extends React.Component<ScreenProps> {
9
10
  render(): JSX.Element;
10
11
  }
@@ -362,7 +362,7 @@ Search bar is only supported on iOS.
362
362
  Example:
363
363
 
364
364
  ```js
365
- React.useEffect(() => {
365
+ React.useLayoutEffect(() => {
366
366
  navigation.setOptions({
367
367
  searchBar: {
368
368
  // search bar options
@@ -371,6 +371,8 @@ React.useEffect(() => {
371
371
  }, [navigation]);
372
372
  ```
373
373
 
374
+ We advise using `useLayoutEffect` hook instead of `useEffect` when managing `searchBar` props to avoid unexpected layout issues.
375
+
374
376
  Supported properties are described below.
375
377
 
376
378
  #### `autoCapitalize`
@@ -430,7 +432,7 @@ Example:
430
432
  ```js
431
433
  const [search, setSearch] = React.useState('');
432
434
 
433
- React.useEffect(() => {
435
+ React.useLayoutEffect(() => {
434
436
  navigation.setOptions({
435
437
  searchBar: {
436
438
  onChangeText: (event) => setSearch(event.nativeEvent.text),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-screens",
3
- "version": "3.8.0",
3
+ "version": "3.9.0",
4
4
  "description": "Native navigation primitives for your React Native app.",
5
5
  "scripts": {
6
6
  "check-types": "tsc --noEmit",
@@ -35,7 +35,8 @@
35
35
  "windows/",
36
36
  "RNScreens.podspec",
37
37
  "README.md",
38
- "!**/__tests__"
38
+ "!**/__tests__",
39
+ "!android/src/main/java/com/swmansion/rnscreens/LifecycleHelper.kt"
39
40
  ],
40
41
  "repository": {
41
42
  "type": "git",
@@ -52,6 +53,7 @@
52
53
  },
53
54
  "homepage": "https://github.com/software-mansion/react-native-screens#readme",
54
55
  "dependencies": {
56
+ "react-freeze": "^1.0.0",
55
57
  "warn-once": "^0.1.0"
56
58
  },
57
59
  "peerDependencies": {
@@ -10,6 +10,7 @@ import {
10
10
  View,
11
11
  ViewProps,
12
12
  } from 'react-native';
13
+ import { Freeze } from 'react-freeze';
13
14
  // @ts-ignore Getting private component
14
15
  // eslint-disable-next-line import/default
15
16
  import processColor from 'react-native/Libraries/StyleSheet/processColor';
@@ -47,6 +48,12 @@ function enableScreens(shouldEnableScreens = true): void {
47
48
  }
48
49
  }
49
50
 
51
+ let ENABLE_FREEZE = false;
52
+
53
+ function enableFreeze(shouldEnableReactFreeze = true): void {
54
+ ENABLE_FREEZE = shouldEnableReactFreeze;
55
+ }
56
+
50
57
  // const that tells if the library should use new implementation, will be undefined for older versions
51
58
  const shouldUseActivityState = true;
52
59
 
@@ -123,6 +130,36 @@ const ScreensNativeModules = {
123
130
  },
124
131
  };
125
132
 
133
+ function MaybeFreeze({
134
+ freeze,
135
+ children,
136
+ }: {
137
+ freeze: boolean;
138
+ children: React.ReactNode;
139
+ }) {
140
+ if (ENABLE_FREEZE) {
141
+ return <Freeze freeze={freeze}>{children}</Freeze>;
142
+ } else {
143
+ return <>{children}</>;
144
+ }
145
+ }
146
+
147
+ function ScreenStack(props: ScreenStackProps) {
148
+ if (ENABLE_FREEZE) {
149
+ const { children, ...rest } = props;
150
+ const count = React.Children.count(children);
151
+ const childrenWithProps = React.Children.map(children, (child, index) => {
152
+ return <Freeze freeze={count - index > 2}>{child}</Freeze>;
153
+ });
154
+ return (
155
+ <ScreensNativeModules.NativeScreenStack {...rest}>
156
+ {childrenWithProps}
157
+ </ScreensNativeModules.NativeScreenStack>
158
+ );
159
+ }
160
+ return <ScreensNativeModules.NativeScreenStack {...props} />;
161
+ }
162
+
126
163
  class Screen extends React.Component<ScreenProps> {
127
164
  private ref: React.ElementRef<typeof View> | null = null;
128
165
  private closing = new Animated.Value(0);
@@ -189,18 +226,20 @@ class Screen extends React.Component<ScreenProps> {
189
226
  { useNativeDriver: true }
190
227
  )
191
228
  }>
192
- {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed
193
- children
194
- ) : (
195
- <TransitionProgressContext.Provider
196
- value={{
197
- progress: this.progress,
198
- closing: this.closing,
199
- goingForward: this.goingForward,
200
- }}>
201
- {children}
202
- </TransitionProgressContext.Provider>
203
- )}
229
+ <MaybeFreeze freeze={activityState === 0}>
230
+ {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed
231
+ children
232
+ ) : (
233
+ <TransitionProgressContext.Provider
234
+ value={{
235
+ progress: this.progress,
236
+ closing: this.closing,
237
+ goingForward: this.goingForward,
238
+ }}>
239
+ {children}
240
+ </TransitionProgressContext.Provider>
241
+ )}
242
+ </MaybeFreeze>
204
243
  </AnimatedNativeScreen>
205
244
  );
206
245
  } else {
@@ -323,6 +362,7 @@ module.exports = {
323
362
  Screen,
324
363
  ScreenContainer,
325
364
  ScreenContext,
365
+ ScreenStack,
326
366
 
327
367
  get NativeScreen() {
328
368
  return ScreensNativeModules.NativeScreen;
@@ -336,9 +376,6 @@ module.exports = {
336
376
  return ScreensNativeModules.NativeScreenNavigationContainer;
337
377
  },
338
378
 
339
- get ScreenStack() {
340
- return ScreensNativeModules.NativeScreenStack;
341
- },
342
379
  get ScreenStackHeaderConfig() {
343
380
  return ScreensNativeModules.NativeScreenStackHeaderConfig;
344
381
  },
@@ -370,6 +407,7 @@ module.exports = {
370
407
  ScreenStackHeaderSearchBarView,
371
408
 
372
409
  enableScreens,
410
+ enableFreeze,
373
411
  screensEnabled,
374
412
  shouldUseActivityState,
375
413
  useTransitionProgress,
package/src/index.tsx CHANGED
@@ -22,6 +22,12 @@ export function screensEnabled(): boolean {
22
22
  return ENABLE_SCREENS;
23
23
  }
24
24
 
25
+ // @ts-ignore function stub, freezing logic is located in index.native.tsx
26
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
+ export function enableFreeze(shouldEnableReactFreeze = true): void {
28
+ // noop
29
+ }
30
+
25
31
  export class NativeScreen extends React.Component<ScreenProps> {
26
32
  render(): JSX.Element {
27
33
  let {