react-native-screens 3.14.0 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +34 -1
  2. package/RNScreens.podspec +1 -4
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +0 -5
  5. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +50 -21
  6. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +22 -21
  7. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +7 -5
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +1 -2
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +9 -0
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +3 -6
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +4 -4
  12. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +4 -10
  13. package/ios/RNSScreen.h +1 -0
  14. package/ios/RNSScreen.mm +29 -10
  15. package/ios/RNSScreenStack.mm +61 -18
  16. package/ios/RNSScreenStackHeaderConfig.mm +2 -2
  17. package/ios/RNSScreenStackHeaderSubview.h +1 -1
  18. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
  19. package/lib/commonjs/index.js +4 -1
  20. package/lib/commonjs/index.js.map +1 -1
  21. package/lib/commonjs/index.native.js +60 -53
  22. package/lib/commonjs/index.native.js.map +1 -1
  23. package/lib/commonjs/native-stack/views/NativeStackView.js +3 -27
  24. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  25. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +4 -2
  26. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  27. package/lib/commonjs/reanimated/ReanimatedScreen.js +1 -1
  28. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  29. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  30. package/lib/module/index.js +1 -0
  31. package/lib/module/index.js.map +1 -1
  32. package/lib/module/index.native.js +61 -53
  33. package/lib/module/index.native.js.map +1 -1
  34. package/lib/module/native-stack/views/NativeStackView.js +3 -27
  35. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  36. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +5 -3
  37. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  38. package/lib/module/reanimated/ReanimatedScreen.js +2 -2
  39. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  40. package/lib/typescript/index.d.ts +1 -0
  41. package/lib/typescript/native-stack/types.d.ts +5 -0
  42. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
  43. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
  44. package/lib/typescript/types.d.ts +5 -0
  45. package/native-stack/README.md +6 -0
  46. package/package.json +1 -1
  47. package/src/fabric/ScreenNativeComponent.js +1 -1
  48. package/src/index.native.tsx +56 -56
  49. package/src/index.tsx +2 -0
  50. package/src/native-stack/types.tsx +5 -0
  51. package/src/native-stack/views/NativeStackView.tsx +2 -23
  52. package/src/reanimated/ReanimatedNativeStackScreen.tsx +5 -3
  53. package/src/reanimated/ReanimatedScreen.tsx +2 -2
  54. package/src/types.tsx +5 -0
  55. package/lib/commonjs/fabric/FullWindowOverlay.js +0 -26
  56. package/lib/commonjs/fabric/FullWindowOverlay.js.map +0 -1
  57. package/lib/commonjs/fabric/Screen.js +0 -29
  58. package/lib/commonjs/fabric/Screen.js.map +0 -1
  59. package/lib/commonjs/fabric/ScreenContainer.js +0 -28
  60. package/lib/commonjs/fabric/ScreenContainer.js.map +0 -1
  61. package/lib/commonjs/fabric/ScreenNavigationContainer.js +0 -28
  62. package/lib/commonjs/fabric/ScreenNavigationContainer.js.map +0 -1
  63. package/lib/commonjs/fabric/ScreenStack.js +0 -26
  64. package/lib/commonjs/fabric/ScreenStack.js.map +0 -1
  65. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js +0 -37
  66. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js.map +0 -1
  67. package/lib/commonjs/fabric/SearchBar.js +0 -37
  68. package/lib/commonjs/fabric/SearchBar.js.map +0 -1
  69. package/lib/commonjs/fabric/index.js +0 -72
  70. package/lib/commonjs/fabric/index.js.map +0 -1
  71. package/lib/module/fabric/FullWindowOverlay.js +0 -15
  72. package/lib/module/fabric/FullWindowOverlay.js.map +0 -1
  73. package/lib/module/fabric/Screen.js +0 -16
  74. package/lib/module/fabric/Screen.js.map +0 -1
  75. package/lib/module/fabric/ScreenContainer.js +0 -17
  76. package/lib/module/fabric/ScreenContainer.js.map +0 -1
  77. package/lib/module/fabric/ScreenNavigationContainer.js +0 -17
  78. package/lib/module/fabric/ScreenNavigationContainer.js.map +0 -1
  79. package/lib/module/fabric/ScreenStack.js +0 -15
  80. package/lib/module/fabric/ScreenStack.js.map +0 -1
  81. package/lib/module/fabric/ScreenStackHeaderSubview.js +0 -24
  82. package/lib/module/fabric/ScreenStackHeaderSubview.js.map +0 -1
  83. package/lib/module/fabric/SearchBar.js +0 -24
  84. package/lib/module/fabric/SearchBar.js.map +0 -1
  85. package/lib/module/fabric/index.js +0 -10
  86. package/lib/module/fabric/index.js.map +0 -1
  87. package/src/fabric/FullWindowOverlay.js +0 -13
  88. package/src/fabric/Screen.js +0 -15
  89. package/src/fabric/ScreenContainer.js +0 -16
  90. package/src/fabric/ScreenNavigationContainer.js +0 -16
  91. package/src/fabric/ScreenStack.js +0 -10
  92. package/src/fabric/ScreenStackHeaderSubview.js +0 -22
  93. package/src/fabric/SearchBar.js +0 -20
  94. package/src/fabric/index.js +0 -19
@@ -118,7 +118,7 @@
118
118
  }
119
119
 
120
120
  // we want updates sent to the VC below modal too since it is also visible
121
- BOOL isPresentingVC = vc.presentedViewController == nextVC;
121
+ BOOL isPresentingVC = nextVC != nil && vc.presentedViewController == nextVC;
122
122
 
123
123
  BOOL isInFullScreenModal = nav == nil && _screenView.stackPresentation == RNSScreenStackPresentationFullScreenModal;
124
124
  // if nav is nil, it means we can be in a fullScreen modal, so there is no nextVC, but we still want to update
@@ -580,7 +580,7 @@
580
580
  }
581
581
  case RNSScreenStackHeaderSubviewTypeBackButton: {
582
582
  #ifdef RN_FABRIC_ENABLED
583
- RCTLogWarn(@"Back button subivew is not yet Fabric compatible in react-native-screens");
583
+ RCTLogWarn(@"Back button subview is not yet Fabric compatible in react-native-screens");
584
584
  #endif
585
585
  break;
586
586
  }
@@ -4,7 +4,7 @@
4
4
  #endif
5
5
 
6
6
  #import <React/RCTConvert.h>
7
- #import <react/RCTViewManager.h>
7
+ #import <React/RCTViewManager.h>
8
8
  #import "RNSEnums.h"
9
9
 
10
10
  NS_ASSUME_NONNULL_BEGIN
@@ -1 +1 @@
1
- {"version":3,"sources":["ScreenNativeComponent.js"],"names":["interfaceOnly"],"mappings":";;;;;;;AAKA;;;;AALA;AACA;AACA;AACA;;AACA;eA0FgB,qCAAoC,WAApC,EAAiD;AAC/DA,EAAAA,aAAa,EAAE;AADgD,CAAjD,C","sourcesContent":["/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\nimport type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';\nimport type {\n BubblingEventHandler,\n WithDefault,\n Int32,\n} from 'react-native/Libraries/Types/CodegenTypes';\n\ntype ScreenEvent = $ReadOnly<{||}>;\n\ntype ScreenDismissedEvent = $ReadOnly<{|\n dismissCount: Int32,\n|}>;\n\ntype TransitionProgressEvent = $ReadOnly<{|\n progress: Double,\n closing: Int32,\n goingForward: Int32,\n|}>;\n\ntype GestureResponseDistanceType = $ReadOnly<{|\n start: Float,\n end: Float,\n top: Float,\n bottom: Float,\n|}>;\n\ntype StackPresentation =\n | 'push'\n | 'modal'\n | 'transparentModal'\n | 'fullScreenModal'\n | 'formSheet'\n | 'containedModal'\n | 'containedTransparentModal';\n\ntype StackAnimation =\n | 'default'\n | 'flip'\n | 'simple_push'\n | 'none'\n | 'fade'\n | 'slide_from_right'\n | 'slide_from_left'\n | 'slide_from_bottom'\n | 'fade_from_bottom';\n\ntype SwipeDirection = 'vertical' | 'horizontal';\n\ntype ReplaceAnimation = 'pop' | 'push';\n\nexport type NativeProps = $ReadOnly<{|\n ...ViewProps,\n onAppear?: ?BubblingEventHandler<ScreenEvent>,\n onDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onDismissed?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onNativeDismissCancelled?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onWillAppear?: ?BubblingEventHandler<ScreenEvent>,\n onWillDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onTransitionProgress?: ?BubblingEventHandler<TransitionProgressEvent>,\n customAnimationOnSwipe?: boolean,\n fullScreenSwipeEnabled?: boolean,\n homeIndicatorHidden?: boolean,\n preventNativeDismiss?: boolean,\n gestureEnabled?: WithDefault<boolean, true>,\n statusBarColor?: ColorValue,\n statusBarHidden?: boolean,\n screenOrientation?: string,\n statusBarAnimation?: string,\n statusBarStyle?: string,\n statusBarTranslucent?: boolean,\n gestureResponseDistance?: GestureResponseDistanceType,\n stackPresentation?: WithDefault<StackPresentation, 'push'>,\n stackAnimation?: WithDefault<StackAnimation, 'default'>,\n transitionDuration?: WithDefault<Int32, 350>,\n replaceAnimation?: WithDefault<ReplaceAnimation, 'pop'>,\n swipeDirection?: WithDefault<SwipeDirection, 'horizontal'>,\n hideKeyboardOnSwipe?: boolean,\n activityState?: WithDefault<Float, -1.0>,\n // TODO: implement these props on iOS\n navigationBarColor?: ColorValue,\n navigationBarHidden?: boolean,\n nativeBackButtonDismissalEnabled?: boolean,\n|}>;\n\ntype ComponentType = HostComponent<NativeProps>;\n\nexport default (codegenNativeComponent<NativeProps>('RNSScreen', {\n interfaceOnly: true,\n}): ComponentType);\n"]}
1
+ {"version":3,"sources":["ScreenNativeComponent.js"],"names":["interfaceOnly"],"mappings":";;;;;;;AAKA;;;;AALA;AACA;AACA;AACA;;AACA;eA0FgB,qCAAoC,WAApC,EAAiD;AAC/DA,EAAAA,aAAa,EAAE;AADgD,CAAjD,C","sourcesContent":["/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\nimport type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';\nimport type {\n BubblingEventHandler,\n WithDefault,\n Int32,\n} from 'react-native/Libraries/Types/CodegenTypes';\n\ntype ScreenEvent = $ReadOnly<{||}>;\n\ntype ScreenDismissedEvent = $ReadOnly<{|\n dismissCount: Int32,\n|}>;\n\ntype TransitionProgressEvent = $ReadOnly<{|\n progress: Double,\n closing: Int32,\n goingForward: Int32,\n|}>;\n\ntype GestureResponseDistanceType = $ReadOnly<{|\n start: Float,\n end: Float,\n top: Float,\n bottom: Float,\n|}>;\n\ntype StackPresentation =\n | 'push'\n | 'modal'\n | 'transparentModal'\n | 'fullScreenModal'\n | 'formSheet'\n | 'containedModal'\n | 'containedTransparentModal';\n\ntype StackAnimation =\n | 'default'\n | 'flip'\n | 'simple_push'\n | 'none'\n | 'fade'\n | 'slide_from_right'\n | 'slide_from_left'\n | 'slide_from_bottom'\n | 'fade_from_bottom';\n\ntype SwipeDirection = 'vertical' | 'horizontal';\n\ntype ReplaceAnimation = 'pop' | 'push';\n\nexport type NativeProps = $ReadOnly<{|\n ...ViewProps,\n onAppear?: ?BubblingEventHandler<ScreenEvent>,\n onDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onDismissed?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onNativeDismissCancelled?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onWillAppear?: ?BubblingEventHandler<ScreenEvent>,\n onWillDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onTransitionProgress?: ?BubblingEventHandler<TransitionProgressEvent>,\n customAnimationOnSwipe?: boolean,\n fullScreenSwipeEnabled?: boolean,\n homeIndicatorHidden?: boolean,\n preventNativeDismiss?: boolean,\n gestureEnabled?: WithDefault<boolean, true>,\n statusBarColor?: ColorValue,\n statusBarHidden?: boolean,\n screenOrientation?: string,\n statusBarAnimation?: string,\n statusBarStyle?: string,\n statusBarTranslucent?: boolean,\n gestureResponseDistance?: GestureResponseDistanceType,\n stackPresentation?: WithDefault<StackPresentation, 'push'>,\n stackAnimation?: WithDefault<StackAnimation, 'default'>,\n transitionDuration?: WithDefault<Int32, 350>,\n replaceAnimation?: WithDefault<ReplaceAnimation, 'pop'>,\n swipeDirection?: WithDefault<SwipeDirection, 'horizontal'>,\n hideKeyboardOnSwipe?: boolean,\n activityState?: WithDefault<Float, -1.0>,\n navigationBarColor?: ColorValue,\n navigationBarHidden?: boolean,\n nativeBackButtonDismissalEnabled?: boolean,\n onHeaderBackButtonClicked?: ?BubblingEventHandler<ScreenEvent>,\n|}>;\n\ntype ComponentType = HostComponent<NativeProps>;\n\nexport default (codegenNativeComponent<NativeProps>('RNSScreen', {\n interfaceOnly: true,\n}): ComponentType);\n"]}
@@ -9,6 +9,7 @@ var _exportNames = {
9
9
  enableFreeze: true,
10
10
  NativeScreen: true,
11
11
  Screen: true,
12
+ InnerScreen: true,
12
13
  ScreenContext: true,
13
14
  ScreenContainer: true,
14
15
  NativeScreenContainer: true,
@@ -49,7 +50,7 @@ Object.defineProperty(exports, "executeNativeBackPress", {
49
50
  return _utils.executeNativeBackPress;
50
51
  }
51
52
  });
52
- exports.shouldUseActivityState = exports.ScreenStackHeaderSubview = exports.SearchBar = exports.ScreenStackHeaderConfig = exports.ScreenStackHeaderSearchBarView = exports.ScreenStackHeaderCenterView = exports.ScreenStackHeaderLeftView = exports.ScreenStackHeaderRightView = exports.ScreenStackHeaderBackButtonImage = exports.FullWindowOverlay = exports.ScreenStack = exports.NativeScreenNavigationContainer = exports.NativeScreenContainer = exports.ScreenContainer = exports.ScreenContext = exports.Screen = exports.NativeScreen = void 0;
53
+ exports.shouldUseActivityState = exports.ScreenStackHeaderSubview = exports.SearchBar = exports.ScreenStackHeaderConfig = exports.ScreenStackHeaderSearchBarView = exports.ScreenStackHeaderCenterView = exports.ScreenStackHeaderLeftView = exports.ScreenStackHeaderRightView = exports.ScreenStackHeaderBackButtonImage = exports.FullWindowOverlay = exports.ScreenStack = exports.NativeScreenNavigationContainer = exports.NativeScreenContainer = exports.ScreenContainer = exports.ScreenContext = exports.InnerScreen = exports.Screen = exports.NativeScreen = void 0;
53
54
 
54
55
  var _react = _interopRequireDefault(require("react"));
55
56
 
@@ -126,6 +127,8 @@ exports.NativeScreen = NativeScreen;
126
127
  const Screen = _reactNative.Animated.createAnimatedComponent(NativeScreen);
127
128
 
128
129
  exports.Screen = Screen;
130
+ const InnerScreen = _reactNative.View;
131
+ exports.InnerScreen = InnerScreen;
129
132
 
130
133
  const ScreenContext = /*#__PURE__*/_react.default.createContext(Screen);
131
134
 
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","enableFreeze","shouldEnableReactFreeze","NativeScreen","React","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","Animated","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","View","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAUA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AACA;;;;;;AAKA,IAAIA,cAAc,GAAG,IAArB;;AAEO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;;AAEM,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD,C,CAED;AACA;;;AACO,SAASI,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D,CACjE;AACD;;AAEM,MAAMC,YAAN,SAA2BC,eAAMC,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGb,cAJR;AAKF,SAAGc;AALD,QAMA,KAAKC,KANT;;AAQA,QAAIF,OAAJ,EAAa;AACX,UAAIH,MAAM,KAAKM,SAAX,IAAwBL,aAAa,KAAKK,SAA9C,EAAyD;AACvDL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CADuD,CACjB;AACvC;;AACD,0BACE,6BAAC,iBAAD,CACE;AADF;AAEE,QAAA,MAAM,EAAEC,aAAa,KAAK,CAF5B;AAGE,QAAA,KAAK,EAAE,CAACC,KAAD,EAAQ;AAAEK,UAAAA,OAAO,EAAEN,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR;AAHT,SAIMG,IAJN,EADF;AAQD;;AAED,wBAAO,6BAAC,iBAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;;;;AA4BxD,MAAMI,MAAM,GAAGC,sBAASC,uBAAT,CAAiCd,YAAjC,CAAf;;;;AAEA,MAAMe,aAAa,gBAAGd,eAAMe,aAAN,CAAoBJ,MAApB,CAAtB;;;AAEA,MAAMK,eAA0D,GAAGC,iBAAnE;;AAEA,MAAMC,qBAAgE,GAAGD,iBAAzE;;AAEA,MAAME,+BAA0E,GAAGF,iBAAnF;;AAEA,MAAMG,WAAkD,GAAGH,iBAA3D;;AAEA,MAAMI,iBAAiB,GAAGJ,iBAA1B;;;AAEA,MAAMK,gCAAgC,GAC3Cd,KAD8C,iBAG9C,6BAAC,iBAAD,qBACE,6BAAC,kBAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;;;;AAQA,MAAMe,0BAA0B,GACrCf,KADwC,iBAExB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMgB,yBAAyB,GACpChB,KADuC,iBAEvB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMiB,2BAA2B,GACtCjB,KADyC,iBAEzB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMkB,8BAA8B,GACzClB,KAD4C,iBAE5B,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;AAIA,MAAMmB,uBAA0E,GAAGV,iBAAnF,C,CAEP;;;AACO,MAAMW,SAA8C,GAAGX,iBAAvD;;AAEA,MAAMY,wBAEX,GAAGZ,iBAFE;;AAIA,MAAMa,sBAAsB,GAAG,IAA/B","sourcesContent":["import React from 'react';\nimport { Animated, View, ViewProps, ImageProps, Image } from 'react-native';\nimport {\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n HeaderSubviewTypes,\n SearchBarProps,\n} from './types';\n\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\nexport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\nlet ENABLE_SCREENS = true;\n\nexport function enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = shouldEnableScreens;\n}\n\nexport function screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// @ts-ignore function stub, freezing logic is located in index.native.tsx\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function enableFreeze(shouldEnableReactFreeze = true): void {\n // noop\n}\n\nexport class NativeScreen extends React.Component<ScreenProps> {\n render(): JSX.Element {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n return (\n <View\n // @ts-expect-error: hidden exists on web, but not in React Native\n hidden={activityState === 0}\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n {...rest}\n />\n );\n }\n\n return <View {...rest} />;\n }\n}\n\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\n\nexport const ScreenContext = React.createContext(Screen);\n\nexport const ScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenNavigationContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const ScreenStack: React.ComponentType<ScreenStackProps> = View;\n\nexport const FullWindowOverlay = View;\n\nexport const ScreenStackHeaderBackButtonImage = (\n props: ImageProps\n): JSX.Element => (\n <View>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </View>\n);\n\nexport const ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps> = View;\n\n// @ts-expect-error: search bar props have no common props with View\nexport const SearchBar: React.ComponentType<SearchBarProps> = View;\n\nexport const ScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>> = View;\n\nexport const shouldUseActivityState = true;\n"]}
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","InnerScreen","View","ScreenContext","createContext","ScreenContainer","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAUA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AACA;;;;;;AAKA,IAAIA,cAAc,GAAG,IAArB;;AAEO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;;AAEM,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD,C,CAED;AACA;;;AACO,SAASI,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D,CACjE;AACD;;AAEM,MAAMC,YAAN,SAA2BC,eAAMC,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGb,cAJR;AAKF,SAAGc;AALD,QAMA,KAAKC,KANT;;AAQA,QAAIF,OAAJ,EAAa;AACX,UAAIH,MAAM,KAAKM,SAAX,IAAwBL,aAAa,KAAKK,SAA9C,EAAyD;AACvDL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CADuD,CACjB;AACvC;;AACD,0BACE,6BAAC,iBAAD,CACE;AADF;AAEE,QAAA,MAAM,EAAEC,aAAa,KAAK,CAF5B;AAGE,QAAA,KAAK,EAAE,CAACC,KAAD,EAAQ;AAAEK,UAAAA,OAAO,EAAEN,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR;AAHT,SAIMG,IAJN,EADF;AAQD;;AAED,wBAAO,6BAAC,iBAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;;;;AA4BxD,MAAMI,MAAM,GAAGC,sBAASC,uBAAT,CAAiCd,YAAjC,CAAf;;;AAEA,MAAMe,WAAW,GAAGC,iBAApB;;;AAEA,MAAMC,aAAa,gBAAGhB,eAAMiB,aAAN,CAAoBN,MAApB,CAAtB;;;AAEA,MAAMO,eAA0D,GAAGH,iBAAnE;;AAEA,MAAMI,qBAAgE,GAAGJ,iBAAzE;;AAEA,MAAMK,+BAA0E,GAAGL,iBAAnF;;AAEA,MAAMM,WAAkD,GAAGN,iBAA3D;;AAEA,MAAMO,iBAAiB,GAAGP,iBAA1B;;;AAEA,MAAMQ,gCAAgC,GAC3Cf,KAD8C,iBAG9C,6BAAC,iBAAD,qBACE,6BAAC,kBAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;;;;AAQA,MAAMgB,0BAA0B,GACrChB,KADwC,iBAExB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMiB,yBAAyB,GACpCjB,KADuC,iBAEvB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMkB,2BAA2B,GACtClB,KADyC,iBAEzB,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;;AAIA,MAAMmB,8BAA8B,GACzCnB,KAD4C,iBAE5B,6BAAC,iBAAD,EAAUA,KAAV,CAFX;;;AAIA,MAAMoB,uBAA0E,GAAGb,iBAAnF,C,CAEP;;;AACO,MAAMc,SAA8C,GAAGd,iBAAvD;;AAEA,MAAMe,wBAEX,GAAGf,iBAFE;;AAIA,MAAMgB,sBAAsB,GAAG,IAA/B","sourcesContent":["import React from 'react';\nimport { Animated, View, ViewProps, ImageProps, Image } from 'react-native';\nimport {\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n HeaderSubviewTypes,\n SearchBarProps,\n} from './types';\n\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\nexport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\nlet ENABLE_SCREENS = true;\n\nexport function enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = shouldEnableScreens;\n}\n\nexport function screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// @ts-ignore function stub, freezing logic is located in index.native.tsx\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function enableFreeze(shouldEnableReactFreeze = true): void {\n // noop\n}\n\nexport class NativeScreen extends React.Component<ScreenProps> {\n render(): JSX.Element {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n return (\n <View\n // @ts-expect-error: hidden exists on web, but not in React Native\n hidden={activityState === 0}\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n {...rest}\n />\n );\n }\n\n return <View {...rest} />;\n }\n}\n\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\n\nexport const InnerScreen = View;\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"]}
@@ -14,8 +14,6 @@ var _useTransitionProgress = _interopRequireDefault(require("./useTransitionProg
14
14
 
15
15
  var _utils = require("./utils");
16
16
 
17
- var _global;
18
-
19
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
18
 
21
19
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
@@ -24,10 +22,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
24
22
 
25
23
  // web implementation is taken from `index.tsx`
26
24
  const isPlatformSupported = _reactNative.Platform.OS === 'ios' || _reactNative.Platform.OS === 'android' || _reactNative.Platform.OS === 'windows';
27
- let ENABLE_SCREENS = isPlatformSupported; // @ts-expect-error nativeFabricUIManager is not yet included in the RN types
28
-
29
- const ENABLE_FABRIC = !!((_global = global) !== null && _global !== void 0 && _global.nativeFabricUIManager);
30
- const FabricComponents = ENABLE_FABRIC ? require('./fabric') : {};
25
+ let ENABLE_SCREENS = isPlatformSupported;
31
26
 
32
27
  function enableScreens(shouldEnableScreens = true) {
33
28
  ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;
@@ -70,42 +65,42 @@ let NativeSearchBar;
70
65
  let NativeFullWindowOverlay;
71
66
  const ScreensNativeModules = {
72
67
  get NativeScreen() {
73
- NativeScreenValue = NativeScreenValue || FabricComponents.Screen || (0, _reactNative.requireNativeComponent)('RNSScreen');
68
+ NativeScreenValue = NativeScreenValue || (0, _reactNative.requireNativeComponent)('RNSScreen');
74
69
  return NativeScreenValue;
75
70
  },
76
71
 
77
72
  get NativeScreenContainer() {
78
- NativeScreenContainerValue = NativeScreenContainerValue || FabricComponents.ScreenContainer || (0, _reactNative.requireNativeComponent)('RNSScreenContainer');
73
+ NativeScreenContainerValue = NativeScreenContainerValue || (0, _reactNative.requireNativeComponent)('RNSScreenContainer');
79
74
  return NativeScreenContainerValue;
80
75
  },
81
76
 
82
77
  get NativeScreenNavigationContainer() {
83
- NativeScreenNavigationContainerValue = NativeScreenNavigationContainerValue || (_reactNative.Platform.OS === 'ios' ? FabricComponents.ScreenNavigationContainer || (0, _reactNative.requireNativeComponent)('RNSScreenNavigationContainer') : this.NativeScreenContainer);
78
+ NativeScreenNavigationContainerValue = NativeScreenNavigationContainerValue || (_reactNative.Platform.OS === 'ios' ? (0, _reactNative.requireNativeComponent)('RNSScreenNavigationContainer') : this.NativeScreenContainer);
84
79
  return NativeScreenNavigationContainerValue;
85
80
  },
86
81
 
87
82
  get NativeScreenStack() {
88
- NativeScreenStack = NativeScreenStack || FabricComponents.ScreenStack || (0, _reactNative.requireNativeComponent)('RNSScreenStack');
83
+ NativeScreenStack = NativeScreenStack || (0, _reactNative.requireNativeComponent)('RNSScreenStack');
89
84
  return NativeScreenStack;
90
85
  },
91
86
 
92
87
  get NativeScreenStackHeaderConfig() {
93
- NativeScreenStackHeaderConfig = NativeScreenStackHeaderConfig || FabricComponents.ScreenStackHeaderConfig || (0, _reactNative.requireNativeComponent)('RNSScreenStackHeaderConfig');
88
+ NativeScreenStackHeaderConfig = NativeScreenStackHeaderConfig || (0, _reactNative.requireNativeComponent)('RNSScreenStackHeaderConfig');
94
89
  return NativeScreenStackHeaderConfig;
95
90
  },
96
91
 
97
92
  get NativeScreenStackHeaderSubview() {
98
- NativeScreenStackHeaderSubview = NativeScreenStackHeaderSubview || FabricComponents.ScreenStackHeaderSubview || (0, _reactNative.requireNativeComponent)('RNSScreenStackHeaderSubview');
93
+ NativeScreenStackHeaderSubview = NativeScreenStackHeaderSubview || (0, _reactNative.requireNativeComponent)('RNSScreenStackHeaderSubview');
99
94
  return NativeScreenStackHeaderSubview;
100
95
  },
101
96
 
102
97
  get NativeSearchBar() {
103
- NativeSearchBar = NativeSearchBar || FabricComponents.SearchBar || (0, _reactNative.requireNativeComponent)('RNSSearchBar');
98
+ NativeSearchBar = NativeSearchBar || (0, _reactNative.requireNativeComponent)('RNSSearchBar');
104
99
  return NativeSearchBar;
105
100
  },
106
101
 
107
102
  get NativeFullWindowOverlay() {
108
- NativeFullWindowOverlay = NativeFullWindowOverlay || FabricComponents.FullWindowOverlay || (0, _reactNative.requireNativeComponent)('RNSFullWindowOverlay');
103
+ NativeFullWindowOverlay = NativeFullWindowOverlay || (0, _reactNative.requireNativeComponent)('RNSFullWindowOverlay');
109
104
  return NativeFullWindowOverlay;
110
105
  }
111
106
 
@@ -133,42 +128,36 @@ function DelayedFreeze({
133
128
  }, children);
134
129
  }
135
130
 
136
- function MaybeFreeze({
137
- freeze,
138
- children
139
- }) {
140
- if (ENABLE_FREEZE) {
141
- return /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
142
- freeze: freeze
143
- }, children);
144
- } else {
145
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
146
- }
147
- }
148
-
149
131
  function ScreenStack(props) {
150
- if (ENABLE_FREEZE) {
151
- const {
152
- children,
153
- ...rest
154
- } = props;
132
+ const {
133
+ children,
134
+ ...rest
135
+ } = props;
155
136
 
156
- const size = _react.default.Children.count(children); // freezes all screens except the top one
137
+ const size = _react.default.Children.count(children); // freezes all screens except the top one
157
138
 
158
139
 
159
- const childrenWithFreeze = _react.default.Children.map(children, (child, index) => /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
160
- freeze: size - index > 1
161
- }, child));
140
+ const childrenWithFreeze = _react.default.Children.map(children, (child, index) => {
141
+ var _props$descriptor, _props$descriptors, _descriptor$options$f, _descriptor$options;
162
142
 
163
- return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithFreeze);
164
- }
143
+ // @ts-expect-error it's either SceneView in v6 or RouteView in v5
144
+ const {
145
+ props,
146
+ key
147
+ } = child;
148
+ const descriptor = (_props$descriptor = props === null || props === void 0 ? void 0 : props.descriptor) !== null && _props$descriptor !== void 0 ? _props$descriptor : props === null || props === void 0 ? void 0 : (_props$descriptors = props.descriptors) === null || _props$descriptors === void 0 ? void 0 : _props$descriptors[key];
149
+ const freezeEnabled = (_descriptor$options$f = descriptor === null || descriptor === void 0 ? void 0 : (_descriptor$options = descriptor.options) === null || _descriptor$options === void 0 ? void 0 : _descriptor$options.freezeOnBlur) !== null && _descriptor$options$f !== void 0 ? _descriptor$options$f : ENABLE_FREEZE;
150
+ return /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
151
+ freeze: freezeEnabled && size - index > 1
152
+ }, child);
153
+ });
165
154
 
166
- return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, props);
155
+ return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithFreeze);
167
156
  } // Incomplete type, all accessible properties available at:
168
157
  // react-native/Libraries/Components/View/ReactNativeViewViewConfig.js
169
158
 
170
159
 
171
- class Screen extends _react.default.Component {
160
+ class InnerScreen extends _react.default.Component {
172
161
  constructor(...args) {
173
162
  super(...args);
174
163
 
@@ -197,10 +186,13 @@ class Screen extends _react.default.Component {
197
186
  render() {
198
187
  const {
199
188
  enabled = ENABLE_SCREENS,
189
+ freezeOnBlur = ENABLE_FREEZE,
200
190
  ...rest
201
191
  } = this.props;
202
192
 
203
193
  if (enabled && isPlatformSupported) {
194
+ var _gestureResponseDista, _gestureResponseDista2, _gestureResponseDista3, _gestureResponseDista4;
195
+
204
196
  AnimatedNativeScreen = AnimatedNativeScreen || _reactNative.Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);
205
197
  let {
206
198
  // Filter out active prop in this case because it is unused and
@@ -210,6 +202,7 @@ class Screen extends _react.default.Component {
210
202
  activityState,
211
203
  children,
212
204
  isNativeStack,
205
+ gestureResponseDistance,
213
206
  ...props
214
207
  } = rest;
215
208
 
@@ -219,23 +212,26 @@ class Screen extends _react.default.Component {
219
212
  }
220
213
 
221
214
  const handleRef = ref => {
222
- if (!ENABLE_FABRIC) {
223
- var _ref$viewConfig, _ref$viewConfig$valid;
224
-
225
- if (ref !== null && ref !== void 0 && (_ref$viewConfig = ref.viewConfig) !== null && _ref$viewConfig !== void 0 && (_ref$viewConfig$valid = _ref$viewConfig.validAttributes) !== null && _ref$viewConfig$valid !== void 0 && _ref$viewConfig$valid.style) {
226
- ref.viewConfig.validAttributes.style = { ...ref.viewConfig.validAttributes.style,
227
- display: false
228
- };
229
- }
215
+ var _ref$viewConfig, _ref$viewConfig$valid;
230
216
 
217
+ if (ref !== null && ref !== void 0 && (_ref$viewConfig = ref.viewConfig) !== null && _ref$viewConfig !== void 0 && (_ref$viewConfig$valid = _ref$viewConfig.validAttributes) !== null && _ref$viewConfig$valid !== void 0 && _ref$viewConfig$valid.style) {
218
+ ref.viewConfig.validAttributes.style = { ...ref.viewConfig.validAttributes.style,
219
+ display: false
220
+ };
231
221
  this.setRef(ref);
232
222
  }
233
223
  };
234
224
 
235
- return /*#__PURE__*/_react.default.createElement(MaybeFreeze, {
236
- freeze: activityState === 0
225
+ return /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
226
+ freeze: freezeOnBlur && activityState === 0
237
227
  }, /*#__PURE__*/_react.default.createElement(AnimatedNativeScreen, _extends({}, props, {
238
- activityState: activityState // This prevents showing blank screen when navigating between multiple screens with freezing
228
+ activityState: activityState,
229
+ gestureResponseDistance: {
230
+ start: (_gestureResponseDista = gestureResponseDistance === null || gestureResponseDistance === void 0 ? void 0 : gestureResponseDistance.start) !== null && _gestureResponseDista !== void 0 ? _gestureResponseDista : -1,
231
+ end: (_gestureResponseDista2 = gestureResponseDistance === null || gestureResponseDistance === void 0 ? void 0 : gestureResponseDistance.end) !== null && _gestureResponseDista2 !== void 0 ? _gestureResponseDista2 : -1,
232
+ top: (_gestureResponseDista3 = gestureResponseDistance === null || gestureResponseDistance === void 0 ? void 0 : gestureResponseDistance.top) !== null && _gestureResponseDista3 !== void 0 ? _gestureResponseDista3 : -1,
233
+ bottom: (_gestureResponseDista4 = gestureResponseDistance === null || gestureResponseDistance === void 0 ? void 0 : gestureResponseDistance.bottom) !== null && _gestureResponseDista4 !== void 0 ? _gestureResponseDista4 : -1
234
+ } // This prevents showing blank screen when navigating between multiple screens with freezing
239
235
  // https://github.com/software-mansion/react-native-screens/pull/1208
240
236
  ,
241
237
  ref: handleRef,
@@ -340,8 +336,18 @@ const ScreenStackHeaderSearchBarView = props => /*#__PURE__*/_react.default.crea
340
336
  }));
341
337
 
342
338
  // context to be used when the user wants to use enhanced implementation
343
- // e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)
344
- const ScreenContext = /*#__PURE__*/_react.default.createContext(Screen);
339
+ // e.g. to use `useReanimatedTransitionProgress` (see `reanimated` folder in repo)
340
+ const ScreenContext = /*#__PURE__*/_react.default.createContext(InnerScreen);
341
+
342
+ class Screen extends _react.default.Component {
343
+ render() {
344
+ const ScreenWrapper = this.context || InnerScreen;
345
+ return /*#__PURE__*/_react.default.createElement(ScreenWrapper, this.props);
346
+ }
347
+
348
+ }
349
+
350
+ _defineProperty(Screen, "contextType", ScreenContext);
345
351
 
346
352
  module.exports = {
347
353
  // these are classes so they are not evaluated until used
@@ -350,6 +356,7 @@ module.exports = {
350
356
  ScreenContainer,
351
357
  ScreenContext,
352
358
  ScreenStack,
359
+ InnerScreen,
353
360
 
354
361
  get NativeScreen() {
355
362
  return ScreensNativeModules.NativeScreen;
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","ENABLE_FABRIC","global","nativeFabricUIManager","FabricComponents","require","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","version","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","Screen","NativeScreenContainer","ScreenContainer","NativeScreenNavigationContainer","ScreenNavigationContainer","ScreenStack","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay","DelayedFreeze","freeze","children","freezeState","setFreezeState","React","useState","setImmediate","MaybeFreeze","props","rest","size","Children","count","childrenWithFreeze","map","child","index","Component","Animated","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","undefined","handleRef","viewConfig","validAttributes","style","display","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","hasTwoStates","styles","StyleSheet","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","isSearchBarAvailableForCurrentPlatform","View","useTransitionProgress","executeNativeBackPress"],"mappings":";;AAAA;;AACA;;AAWA;;AACA;;AAEA;;AACA;;AAcA;;;;;;;;;;AAKA;AACA,MAAMA,mBAAmB,GACvBC,sBAASC,EAAT,KAAgB,KAAhB,IACAD,sBAASC,EAAT,KAAgB,SADhB,IAEAD,sBAASC,EAAT,KAAgB,SAHlB;AAKA,IAAIC,cAAc,GAAGH,mBAArB,C,CAEA;;AACA,MAAMI,aAAa,GAAG,CAAC,aAACC,MAAD,oCAAC,QAAQC,qBAAT,CAAvB;AAEA,MAAMC,gBAAgB,GAAGH,aAAa,GAAGI,OAAO,CAAC,UAAD,CAAV,GAAyB,EAA/D;;AAEA,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AACvDP,EAAAA,cAAc,GAAGH,mBAAmB,IAAIU,mBAAxC;;AACA,MAAIP,cAAc,IAAI,CAACQ,uBAAUC,oBAAV,CAA+B,WAA/B,CAAvB,EAAoE;AAClEC,IAAAA,OAAO,CAACC,KAAR,CACG,wGADH;AAGD;AACF;;AAED,IAAIC,aAAa,GAAG,KAApB;;AAEA,SAASC,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D;AAC1D,QAAMC,KAAK,GAAGC,QAAQ,CAACC,iBAAQC,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAD,CAAtB,CAD0D,CACX;AAE/C;;AACA,MAAI,EAAEH,KAAK,KAAK,CAAV,IAAeA,KAAK,IAAI,EAA1B,KAAiCD,uBAArC,EAA8D;AAC5DJ,IAAAA,OAAO,CAACS,IAAR,CACE,kIADF;AAGD;;AAEDP,EAAAA,aAAa,GAAGE,uBAAhB;AACD,C,CAED;;;AACA,MAAMM,sBAAsB,GAAG,IAA/B;;AAEA,SAASC,cAAT,GAAmC;AACjC,SAAOrB,cAAP;AACD,C,CAED;AACA;;;AACA,IAAIsB,iBAAJ;AACA,IAAIC,0BAAJ;AACA,IAAIC,oCAAJ;AACA,IAAIC,iBAAJ;AACA,IAAIC,6BAAJ;AACA,IAAIC,8BAAJ;AAGA,IAAIC,oBAAJ;AACA,IAAIC,eAAJ;AACA,IAAIC,uBAAJ;AAEA,MAAMC,oBAAoB,GAAG;AAC3B,MAAIC,YAAJ,GAAmB;AACjBV,IAAAA,iBAAiB,GACfA,iBAAiB,IACjBlB,gBAAgB,CAAC6B,MADjB,IAEA,yCAAuB,WAAvB,CAHF;AAIA,WAAOX,iBAAP;AACD,GAP0B;;AAS3B,MAAIY,qBAAJ,GAA4B;AAC1BX,IAAAA,0BAA0B,GACxBA,0BAA0B,IAC1BnB,gBAAgB,CAAC+B,eADjB,IAEA,yCAAuB,oBAAvB,CAHF;AAIA,WAAOZ,0BAAP;AACD,GAf0B;;AAiB3B,MAAIa,+BAAJ,GAAsC;AACpCZ,IAAAA,oCAAoC,GAClCA,oCAAoC,KACnC1B,sBAASC,EAAT,KAAgB,KAAhB,GACGK,gBAAgB,CAACiC,yBAAjB,IACA,yCAAuB,8BAAvB,CAFH,GAGG,KAAKH,qBAJ2B,CADtC;AAMA,WAAOV,oCAAP;AACD,GAzB0B;;AA2B3B,MAAIC,iBAAJ,GAAwB;AACtBA,IAAAA,iBAAiB,GACfA,iBAAiB,IACjBrB,gBAAgB,CAACkC,WADjB,IAEA,yCAAuB,gBAAvB,CAHF;AAIA,WAAOb,iBAAP;AACD,GAjC0B;;AAmC3B,MAAIC,6BAAJ,GAAoC;AAClCA,IAAAA,6BAA6B,GAC3BA,6BAA6B,IAC7BtB,gBAAgB,CAACmC,uBADjB,IAEA,yCAAuB,4BAAvB,CAHF;AAIA,WAAOb,6BAAP;AACD,GAzC0B;;AA2C3B,MAAIC,8BAAJ,GAAqC;AACnCA,IAAAA,8BAA8B,GAC5BA,8BAA8B,IAC9BvB,gBAAgB,CAACoC,wBADjB,IAEA,yCAAuB,6BAAvB,CAHF;AAIA,WAAOb,8BAAP;AACD,GAjD0B;;AAmD3B,MAAIE,eAAJ,GAAsB;AACpBA,IAAAA,eAAe,GACbA,eAAe,IACfzB,gBAAgB,CAACqC,SADjB,IAEA,yCAAuB,cAAvB,CAHF;AAIA,WAAOZ,eAAP;AACD,GAzD0B;;AA2D3B,MAAIC,uBAAJ,GAA8B;AAC5BA,IAAAA,uBAAuB,GACrBA,uBAAuB,IACvB1B,gBAAgB,CAACsC,iBADjB,IAEA,yCAAuB,sBAAvB,CAHF;AAIA,WAAOZ,uBAAP;AACD;;AAjE0B,CAA7B;;AAyEA;AACA;AACA,SAASa,aAAT,CAAuB;AAAEC,EAAAA,MAAF;AAAUC,EAAAA;AAAV,CAAvB,EAAiE;AAC/D;AACA,QAAM,CAACC,WAAD,EAAcC,cAAd,IAAgCC,eAAMC,QAAN,CAAe,KAAf,CAAtC;;AAEA,MAAIL,MAAM,KAAKE,WAAf,EAA4B;AAC1B;AACA;AACAI,IAAAA,YAAY,CAAC,MAAM;AACjBH,MAAAA,cAAc,CAACH,MAAD,CAAd;AACD,KAFW,CAAZ;AAGD;;AAED,sBAAO,6BAAC,mBAAD;AAAQ,IAAA,MAAM,EAAEA,MAAM,GAAGE,WAAH,GAAiB;AAAvC,KAA+CD,QAA/C,CAAP;AACD;;AAED,SAASM,WAAT,CAAqB;AAAEP,EAAAA,MAAF;AAAUC,EAAAA;AAAV,CAArB,EAA+D;AAC7D,MAAIjC,aAAJ,EAAmB;AACjB,wBAAO,6BAAC,aAAD;AAAe,MAAA,MAAM,EAAEgC;AAAvB,OAAgCC,QAAhC,CAAP;AACD,GAFD,MAEO;AACL,wBAAO,4DAAGA,QAAH,CAAP;AACD;AACF;;AAED,SAASP,WAAT,CAAqBc,KAArB,EAA8C;AAC5C,MAAIxC,aAAJ,EAAmB;AACjB,UAAM;AAAEiC,MAAAA,QAAF;AAAY,SAAGQ;AAAf,QAAwBD,KAA9B;;AACA,UAAME,IAAI,GAAGN,eAAMO,QAAN,CAAeC,KAAf,CAAqBX,QAArB,CAAb,CAFiB,CAGjB;;;AACA,UAAMY,kBAAkB,GAAGT,eAAMO,QAAN,CAAeG,GAAf,CAAmBb,QAAnB,EAA6B,CAACc,KAAD,EAAQC,KAAR,kBACtD,6BAAC,aAAD;AAAe,MAAA,MAAM,EAAEN,IAAI,GAAGM,KAAP,GAAe;AAAtC,OAA0CD,KAA1C,CADyB,CAA3B;;AAGA,wBACE,6BAAC,oBAAD,CAAsB,iBAAtB,EAA4CN,IAA5C,EACGI,kBADH,CADF;AAKD;;AACD,sBAAO,6BAAC,oBAAD,CAAsB,iBAAtB,EAA4CL,KAA5C,CAAP;AACD,C,CAED;AACA;;;AAWA,MAAMnB,MAAN,SAAqBe,eAAMa,SAA3B,CAAkD;AAAA;AAAA;;AAAA,iCACI,IADJ;;AAAA,qCAE9B,IAAIC,sBAASC,KAAb,CAAmB,CAAnB,CAF8B;;AAAA,sCAG7B,IAAID,sBAASC,KAAb,CAAmB,CAAnB,CAH6B;;AAAA,0CAIzB,IAAID,sBAASC,KAAb,CAAmB,CAAnB,CAJyB;;AAAA,oCAUtCC,GAAD,IAAqD;AAAA;;AAC5D,WAAKA,GAAL,GAAWA,GAAX;AACA,mDAAKZ,KAAL,EAAWa,cAAX,kGAA4BD,GAA5B;AACD,KAb+C;AAAA;;AAMhDE,EAAAA,cAAc,CAACd,KAAD,EAA2B;AAAA;;AACvC,sBAAKY,GAAL,wDAAUE,cAAV,CAAyBd,KAAzB;AACD;;AAODe,EAAAA,MAAM,GAAG;AACP,UAAM;AAAEC,MAAAA,OAAO,GAAGpE,cAAZ;AAA4B,SAAGqD;AAA/B,QAAwC,KAAKD,KAAnD;;AAEA,QAAIgB,OAAO,IAAIvE,mBAAf,EAAoC;AAClC+B,MAAAA,oBAAoB,GAClBA,oBAAoB,IACpBkC,sBAASO,uBAAT,CAAiCtC,oBAAoB,CAACC,YAAtD,CAFF;AAIA,UAAI;AACF;AACA;AACA;AACAsC,QAAAA,MAJE;AAKFC,QAAAA,aALE;AAMF1B,QAAAA,QANE;AAOF2B,QAAAA,aAPE;AAQF,WAAGpB;AARD,UASAC,IATJ;;AAWA,UAAIiB,MAAM,KAAKG,SAAX,IAAwBF,aAAa,KAAKE,SAA9C,EAAyD;AACvD/D,QAAAA,OAAO,CAACS,IAAR,CACE,+QADF;AAGAoD,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CAJuD,CAIjB;AACvC;;AAED,YAAMI,SAAS,GAAIV,GAAD,IAAqB;AACrC,YAAI,CAAC/D,aAAL,EAAoB;AAAA;;AAClB,cAAI+D,GAAJ,aAAIA,GAAJ,kCAAIA,GAAG,CAAEW,UAAT,qEAAI,gBAAiBC,eAArB,kDAAI,sBAAkCC,KAAtC,EAA6C;AAC3Cb,YAAAA,GAAG,CAACW,UAAJ,CAAeC,eAAf,CAA+BC,KAA/B,GAAuC,EACrC,GAAGb,GAAG,CAACW,UAAJ,CAAeC,eAAf,CAA+BC,KADG;AAErCC,cAAAA,OAAO,EAAE;AAF4B,aAAvC;AAID;;AACD,eAAKC,MAAL,CAAYf,GAAZ;AACD;AACF,OAVD;;AAYA,0BACE,6BAAC,WAAD;AAAa,QAAA,MAAM,EAAEO,aAAa,KAAK;AAAvC,sBACE,6BAAC,oBAAD,eACMnB,KADN;AAEE,QAAA,aAAa,EAAEmB,aAFjB,CAGE;AACA;AAJF;AAKE,QAAA,GAAG,EAAEG,SALP;AAME,QAAA,oBAAoB,EAClB,CAACF,aAAD,GACIC,SADJ,GAEIX,sBAASkB,KAAT,CACE,CACE;AACEC,UAAAA,WAAW,EAAE;AACXC,YAAAA,QAAQ,EAAE,KAAKA,QADJ;AAEXC,YAAAA,OAAO,EAAE,KAAKA,OAFH;AAGXC,YAAAA,YAAY,EAAE,KAAKA;AAHR;AADf,SADF,CADF,EAUE;AAAEC,UAAAA,eAAe,EAAE;AAAnB,SAVF;AATR,UAsBG,CAACb,aAAD,GAAmB;AAClB3B,MAAAA,QADD,gBAGC,6BAAC,kCAAD,CAA2B,QAA3B;AACE,QAAA,KAAK,EAAE;AACLqC,UAAAA,QAAQ,EAAE,KAAKA,QADV;AAELC,UAAAA,OAAO,EAAE,KAAKA,OAFT;AAGLC,UAAAA,YAAY,EAAE,KAAKA;AAHd;AADT,SAMGvC,QANH,CAzBJ,CADF,CADF;AAuCD,KA1ED,MA0EO;AACL;AACA,UAAI;AACFyB,QAAAA,MADE;AAEFC,QAAAA,aAFE;AAGFM,QAAAA,KAHE;AAIF;AACAZ,QAAAA,cALE;AAMF,WAAGb;AAND,UAOAC,IAPJ;;AASA,UAAIiB,MAAM,KAAKG,SAAX,IAAwBF,aAAa,KAAKE,SAA9C,EAAyD;AACvDF,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC;AACD;;AACD,0BACE,6BAAC,qBAAD,CAAU,IAAV;AACE,QAAA,KAAK,EAAE,CAACO,KAAD,EAAQ;AAAEC,UAAAA,OAAO,EAAEP,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR,CADT;AAEE,QAAA,GAAG,EAAE,KAAKQ;AAFZ,SAGM3B,KAHN,EADF;AAOD;AACF;;AAlH+C;;AAqHlD,SAASjB,eAAT,CAAyBiB,KAAzB,EAAsD;AACpD,QAAM;AAAEgB,IAAAA,OAAO,GAAGpE,cAAZ;AAA4BsF,IAAAA,YAA5B;AAA0C,OAAGjC;AAA7C,MAAsDD,KAA5D;;AAEA,MAAIgB,OAAO,IAAIvE,mBAAf,EAAoC;AAClC,QAAIyF,YAAJ,EAAkB;AAChB,0BAAO,6BAAC,oBAAD,CAAsB,+BAAtB,EAA0DjC,IAA1D,CAAP;AACD;;AACD,wBAAO,6BAAC,oBAAD,CAAsB,qBAAtB,EAAgDA,IAAhD,CAAP;AACD;;AACD,sBAAO,6BAAC,iBAAD,EAAUA,IAAV,CAAP;AACD;;AAED,MAAMkC,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,aAAa,EAAE;AACbC,IAAAA,QAAQ,EAAE,UADG;AAEbC,IAAAA,GAAG,EAAE,CAFQ;AAGbC,IAAAA,KAAK,EAAE,CAHM;AAIbC,IAAAA,aAAa,EAAE,KAJF;AAKbC,IAAAA,UAAU,EAAE,QALC;AAMbC,IAAAA,cAAc,EAAE;AANH;AADgB,CAAlB,CAAf;;AAWA,MAAMC,gCAAgC,GAAI7C,KAAD,iBACvC,6BAAC,oBAAD,CAAsB,8BAAtB;AACE,EAAA,IAAI,EAAC,MADP;AAEE,EAAA,KAAK,EAAEmC,MAAM,CAACG;AAFhB,gBAGE,6BAAC,kBAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDtC,KAAhD,EAHF,CADF;;AAQA,MAAM8C,0BAA0B,GAC9B9C,KADiC,iBAGjC,6BAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,OAFP;AAGE,EAAA,KAAK,EAAEmC,MAAM,CAACG;AAHhB,GAHF;;AAUA,MAAMS,yBAAyB,GAC7B/C,KADgC,iBAGhC,6BAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,MAFP;AAGE,EAAA,KAAK,EAAEmC,MAAM,CAACG;AAHhB,GAHF;;AAUA,MAAMU,2BAA2B,GAC/BhD,KADkC,iBAGlC,6BAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,QAFP;AAGE,EAAA,KAAK,EAAEmC,MAAM,CAACG;AAHhB,GAHF;;AAUA,MAAMW,8BAA8B,GAClCjD,KADqC,iBAGrC,6BAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,WAFP;AAGE,EAAA,KAAK,EAAEmC,MAAM,CAACG;AAHhB,GAHF;;AAwBA;AACA;AACA,MAAMY,aAAa,gBAAGtD,eAAMuD,aAAN,CAAoBtE,MAApB,CAAtB;;AAEAuE,MAAM,CAACC,OAAP,GAAiB;AACf;AACA;AACAxE,EAAAA,MAHe;AAIfE,EAAAA,eAJe;AAKfmE,EAAAA,aALe;AAMfhE,EAAAA,WANe;;AAQf,MAAIN,YAAJ,GAAmB;AACjB,WAAOD,oBAAoB,CAACC,YAA5B;AACD,GAVc;;AAYf,MAAIE,qBAAJ,GAA4B;AAC1B,WAAOH,oBAAoB,CAACG,qBAA5B;AACD,GAdc;;AAgBf,MAAIE,+BAAJ,GAAsC;AACpC,WAAOL,oBAAoB,CAACK,+BAA5B;AACD,GAlBc;;AAoBf,MAAIG,uBAAJ,GAA8B;AAC5B,WAAOR,oBAAoB,CAACL,6BAA5B;AACD,GAtBc;;AAuBf,MAAIc,wBAAJ,GAA+B;AAC7B,WAAOT,oBAAoB,CAACJ,8BAA5B;AACD,GAzBc;;AA0Bf,MAAIc,SAAJ,GAAgB;AACd,QAAI,CAACiE,6CAAL,EAA6C;AAC3ChG,MAAAA,OAAO,CAACS,IAAR,CACE,+DADF;AAGA,aAAOwF,iBAAP;AACD;;AAED,WAAO5E,oBAAoB,CAACF,eAA5B;AACD,GAnCc;;AAoCf,MAAIa,iBAAJ,GAAwB;AACtB,QAAI5C,sBAASC,EAAT,KAAgB,KAApB,EAA2B;AACzBW,MAAAA,OAAO,CAACS,IAAR,CAAa,2DAAb;AACA,aAAOwF,iBAAP;AACD;;AAED,WAAO5E,oBAAoB,CAACD,uBAA5B;AACD,GA3Cc;;AA4Cf;AACA;AACAmE,EAAAA,gCA9Ce;AA+CfC,EAAAA,0BA/Ce;AAgDfC,EAAAA,yBAhDe;AAiDfC,EAAAA,2BAjDe;AAkDfC,EAAAA,8BAlDe;AAoDf/F,EAAAA,aApDe;AAqDfO,EAAAA,YArDe;AAsDfQ,EAAAA,cAtDe;AAuDfD,EAAAA,sBAvDe;AAwDfwF,EAAAA,qBAAqB,EAArBA,8BAxDe;AA0DfF,EAAAA,sCAAsC,EAAtCA,6CA1De;AA2DfG,EAAAA,sBAAsB,EAAtBA;AA3De,CAAjB","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';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\n// @ts-expect-error nativeFabricUIManager is not yet included in the RN types\nconst ENABLE_FABRIC = !!global?.nativeFabricUIManager;\n\nconst FabricComponents = ENABLE_FABRIC ? require('./fabric') : {};\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue ||\n FabricComponents.Screen ||\n requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n FabricComponents.ScreenContainer ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? FabricComponents.ScreenNavigationContainer ||\n requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack ||\n FabricComponents.ScreenStack ||\n requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n FabricComponents.ScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n FabricComponents.ScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar =\n NativeSearchBar ||\n FabricComponents.SearchBar ||\n requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay ||\n FabricComponents.FullWindowOverlay ||\n requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction MaybeFreeze({ freeze, children }: FreezeWrapperProps) {\n if (ENABLE_FREEZE) {\n return <DelayedFreeze freeze={freeze}>{children}</DelayedFreeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => (\n <DelayedFreeze freeze={size - index > 1}>{child}</DelayedFreeze>\n ));\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n ...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 handleRef = (ref: ViewConfig) => {\n if (!ENABLE_FABRIC) {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n }\n this.setRef(ref);\n }\n };\n\n return (\n <MaybeFreeze freeze={activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n activityState={activityState}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={handleRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </MaybeFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
1
+ {"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","version","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","DelayedFreeze","freeze","children","freezeState","setFreezeState","React","useState","setImmediate","ScreenStack","props","rest","size","Children","count","childrenWithFreeze","map","child","index","key","descriptor","descriptors","freezeEnabled","options","freezeOnBlur","InnerScreen","Component","Animated","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","gestureResponseDistance","undefined","handleRef","viewConfig","validAttributes","style","display","setRef","start","end","top","bottom","event","nativeEvent","progress","closing","goingForward","useNativeDriver","ScreenContainer","hasTwoStates","styles","StyleSheet","create","headerSubview","position","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","Screen","ScreenWrapper","context","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","isSearchBarAvailableForCurrentPlatform","View","FullWindowOverlay","useTransitionProgress","executeNativeBackPress"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => {\n // @ts-expect-error it's either SceneView in v6 or RouteView in v5\n const { props, key } = child;\n const descriptor = props?.descriptor ?? props?.descriptors?.[key];\n const freezeEnabled = descriptor?.options?.freezeOnBlur ?? ENABLE_FREEZE;\n\n return (\n <DelayedFreeze freeze={freezeEnabled && size - index > 1}>\n {child}\n </DelayedFreeze>\n );\n });\n\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass InnerScreen 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 {\n enabled = ENABLE_SCREENS,\n freezeOnBlur = ENABLE_FREEZE,\n ...rest\n } = 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 gestureResponseDistance,\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 handleRef = (ref: ViewConfig) => {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n this.setRef(ref);\n }\n };\n\n return (\n <DelayedFreeze freeze={freezeOnBlur && activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n activityState={activityState}\n gestureResponseDistance={{\n start: gestureResponseDistance?.start ?? -1,\n end: gestureResponseDistance?.end ?? -1,\n top: gestureResponseDistance?.top ?? -1,\n bottom: gestureResponseDistance?.bottom ?? -1,\n }}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={handleRef}\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 </DelayedFreeze>\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 `useReanimatedTransitionProgress` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(InnerScreen);\n\nclass Screen extends React.Component<ScreenProps> {\n static contextType = ScreenContext;\n\n render() {\n const ScreenWrapper = this.context || InnerScreen;\n return <ScreenWrapper {...this.props} />;\n }\n}\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 InnerScreen,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
@@ -131,7 +131,8 @@ const RouteView = ({
131
131
  statusBarStyle,
132
132
  statusBarTranslucent,
133
133
  swipeDirection = 'horizontal',
134
- transitionDuration
134
+ transitionDuration,
135
+ freezeOnBlur
135
136
  } = options;
136
137
  let {
137
138
  customAnimationOnSwipe,
@@ -160,32 +161,6 @@ const RouteView = ({
160
161
  }
161
162
  }
162
163
 
163
- if (gestureResponseDistance === undefined) {
164
- // default values, required for unification of Fabric & Paper implementation
165
- gestureResponseDistance = {
166
- start: -1,
167
- end: -1,
168
- top: -1,
169
- bottom: -1
170
- };
171
- } else {
172
- if (gestureResponseDistance.start === undefined) {
173
- gestureResponseDistance.start = -1;
174
- }
175
-
176
- if (gestureResponseDistance.end === undefined) {
177
- gestureResponseDistance.end = -1;
178
- }
179
-
180
- if (gestureResponseDistance.top === undefined) {
181
- gestureResponseDistance.top = -1;
182
- }
183
-
184
- if (gestureResponseDistance.bottom === undefined) {
185
- gestureResponseDistance.bottom = -1;
186
- }
187
- }
188
-
189
164
  if (index === 0) {
190
165
  // first screen should always be treated as `push`, it resolves problems with no header animation
191
166
  // for navigator with first screen as `modal` and the next as `push`
@@ -204,6 +179,7 @@ const RouteView = ({
204
179
  isNativeStack: true,
205
180
  style: _reactNative.StyleSheet.absoluteFill,
206
181
  customAnimationOnSwipe: customAnimationOnSwipe,
182
+ freezeOnBlur: freezeOnBlur,
207
183
  fullScreenSwipeEnabled: fullScreenSwipeEnabled,
208
184
  hideKeyboardOnSwipe: hideKeyboardOnSwipe,
209
185
  homeIndicatorHidden: homeIndicatorHidden,
@@ -1 +1 @@
1
- {"version":3,"sources":["NativeStackView.tsx"],"names":["isAndroid","Platform","OS","Container","View","__DEV__","DebugContainer","props","stackPresentation","rest","MaybeNestedStack","options","route","children","colors","headerShown","contentStyle","Screen","React","useContext","ScreenContext","isHeaderInModal","headerShownPreviousRef","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","topInset","top","dimensions","headerHeight","StyleSheet","absoluteFill","RouteView","descriptors","index","navigation","stateKey","render","renderScene","key","gestureEnabled","hideKeyboardOnSwipe","homeIndicatorHidden","nativeBackButtonDismissalEnabled","navigationBarColor","navigationBarHidden","replaceAnimation","screenOrientation","statusBarAnimation","statusBarColor","statusBarHidden","statusBarStyle","statusBarTranslucent","swipeDirection","transitionDuration","customAnimationOnSwipe","fullScreenSwipeEnabled","gestureResponseDistance","stackAnimation","undefined","start","end","bottom","isHeaderInPush","parentHeaderHeight","HeaderHeightContext","dispatch","StackActions","pop","source","target","emit","type","data","closing","e","dismissCount","nativeEvent","NativeStackViewInner","state","routes","map","NativeStackView","create","flex"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport warnOnce from 'warn-once';\nimport {\n ScreenStack,\n StackPresentationTypes,\n ScreenContext,\n} from 'react-native-screens';\nimport {\n ParamListBase,\n StackActions,\n StackNavigationState,\n useTheme,\n Route,\n NavigationState,\n PartialState,\n} from '@react-navigation/native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\nimport SafeAreaProviderCompat from '../utils/SafeAreaProviderCompat';\nimport getDefaultHeaderHeight from '../utils/getDefaultHeaderHeight';\nimport HeaderHeightContext from '../utils/HeaderHeightContext';\n\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n const DebugContainer = (\n props: ViewProps & { stackPresentation: StackPresentationTypes }\n ) => {\n const { stackPresentation, ...rest } = props;\n if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n return (\n <AppContainer>\n <View {...rest} />\n </AppContainer>\n );\n }\n return <View {...rest} />;\n };\n // @ts-ignore Wrong props\n Container = DebugContainer;\n}\n\nconst MaybeNestedStack = ({\n options,\n route,\n stackPresentation,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n stackPresentation: StackPresentationTypes;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { headerShown = true, contentStyle } = options;\n\n const Screen = React.useContext(ScreenContext);\n\n const isHeaderInModal = isAndroid\n ? false\n : stackPresentation !== 'push' && headerShown === true;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n stackPresentation !== 'push' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, stackPresentation, route.name]);\n\n const content = (\n <Container\n style={[\n styles.container,\n stackPresentation !== 'transparentModal' &&\n stackPresentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n // @ts-ignore Wrong props passed to View\n stackPresentation={stackPresentation}>\n {children}\n </Container>\n );\n\n const topInset = useSafeAreaInsets().top;\n const dimensions = useSafeAreaFrame();\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled isNativeStack style={StyleSheet.absoluteFill}>\n <HeaderHeightContext.Provider value={headerHeight}>\n <HeaderConfig {...options} route={route} />\n {content}\n </HeaderHeightContext.Provider>\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype NavigationRoute<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList\n> = Route<Extract<RouteName, string>, ParamList[RouteName]> & {\n state?: NavigationState | PartialState<NavigationState>;\n};\n\nconst RouteView = ({\n descriptors,\n route,\n index,\n navigation,\n stateKey,\n}: {\n descriptors: NativeStackDescriptorMap;\n route: NavigationRoute<ParamListBase, string>;\n index: number;\n navigation: NativeStackNavigationHelpers;\n stateKey: string;\n}) => {\n const { options, render: renderScene } = descriptors[route.key];\n const {\n gestureEnabled,\n headerShown,\n hideKeyboardOnSwipe,\n homeIndicatorHidden,\n nativeBackButtonDismissalEnabled = false,\n navigationBarColor,\n navigationBarHidden,\n replaceAnimation = 'pop',\n screenOrientation,\n statusBarAnimation,\n statusBarColor,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n swipeDirection = 'horizontal',\n transitionDuration,\n } = options;\n\n let {\n customAnimationOnSwipe,\n fullScreenSwipeEnabled,\n gestureResponseDistance,\n stackAnimation,\n stackPresentation = 'push',\n } = options;\n\n if (swipeDirection === 'vertical') {\n // for `vertical` direction to work, we need to set `fullScreenSwipeEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `customAnimationOnSwipe` needs to be set to `true` so the `stackAnimation` set by user can be used,\n // otherwise `simple_push` will be used.\n // Also, the default animation for this direction seems to be `slide_from_bottom`.\n if (fullScreenSwipeEnabled === undefined) {\n fullScreenSwipeEnabled = true;\n }\n if (customAnimationOnSwipe === undefined) {\n customAnimationOnSwipe = true;\n }\n if (stackAnimation === undefined) {\n stackAnimation = 'slide_from_bottom';\n }\n }\n\n if (gestureResponseDistance === undefined) {\n // default values, required for unification of Fabric & Paper implementation\n gestureResponseDistance = {\n start: -1,\n end: -1,\n top: -1,\n bottom: -1,\n };\n } else {\n if (gestureResponseDistance.start === undefined) {\n gestureResponseDistance.start = -1;\n }\n if (gestureResponseDistance.end === undefined) {\n gestureResponseDistance.end = -1;\n }\n if (gestureResponseDistance.top === undefined) {\n gestureResponseDistance.top = -1;\n }\n if (gestureResponseDistance.bottom === undefined) {\n gestureResponseDistance.bottom = -1;\n }\n }\n\n if (index === 0) {\n // first screen should always be treated as `push`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `push`\n stackPresentation = 'push';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : stackPresentation === 'push' && headerShown !== false;\n\n const dimensions = useSafeAreaFrame();\n const topInset = useSafeAreaInsets().top;\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n const Screen = React.useContext(ScreenContext);\n\n return (\n <Screen\n key={route.key}\n enabled\n isNativeStack\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnSwipe}\n fullScreenSwipeEnabled={fullScreenSwipeEnabled}\n hideKeyboardOnSwipe={hideKeyboardOnSwipe}\n homeIndicatorHidden={homeIndicatorHidden}\n gestureEnabled={isAndroid ? false : gestureEnabled}\n gestureResponseDistance={gestureResponseDistance}\n nativeBackButtonDismissalEnabled={nativeBackButtonDismissalEnabled}\n navigationBarColor={navigationBarColor}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={replaceAnimation}\n screenOrientation={screenOrientation}\n stackAnimation={stackAnimation}\n stackPresentation={stackPresentation}\n statusBarAnimation={statusBarAnimation}\n statusBarColor={statusBarColor}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={swipeDirection}\n transitionDuration={transitionDuration}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: stateKey,\n });\n }}\n onWillAppear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: false },\n target: route.key,\n });\n }}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'appear',\n target: route.key,\n });\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(e) => {\n navigation.emit({\n type: 'dismiss',\n target: route.key,\n });\n\n const dismissCount =\n e.nativeEvent.dismissCount > 0 ? e.nativeEvent.dismissCount : 1;\n\n navigation.dispatch({\n ...StackActions.pop(dismissCount),\n source: route.key,\n target: stateKey,\n });\n }}>\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false ? headerHeight : parentHeaderHeight ?? 0\n }>\n <HeaderConfig {...options} route={route} headerShown={isHeaderInPush} />\n <MaybeNestedStack\n options={options}\n route={route}\n stackPresentation={stackPresentation}>\n {renderScene()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({\n state,\n navigation,\n descriptors,\n}: Props): JSX.Element {\n const { key, routes } = state;\n\n return (\n <ScreenStack style={styles.container}>\n {routes.map((route, index) => (\n <RouteView\n key={route.key}\n descriptors={descriptors}\n route={route}\n index={index}\n navigation={navigation}\n stateKey={key}\n />\n ))}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
1
+ {"version":3,"sources":["NativeStackView.tsx"],"names":["isAndroid","Platform","OS","Container","View","__DEV__","DebugContainer","props","stackPresentation","rest","MaybeNestedStack","options","route","children","colors","headerShown","contentStyle","Screen","React","useContext","ScreenContext","isHeaderInModal","headerShownPreviousRef","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","topInset","top","dimensions","headerHeight","StyleSheet","absoluteFill","RouteView","descriptors","index","navigation","stateKey","render","renderScene","key","gestureEnabled","hideKeyboardOnSwipe","homeIndicatorHidden","nativeBackButtonDismissalEnabled","navigationBarColor","navigationBarHidden","replaceAnimation","screenOrientation","statusBarAnimation","statusBarColor","statusBarHidden","statusBarStyle","statusBarTranslucent","swipeDirection","transitionDuration","freezeOnBlur","customAnimationOnSwipe","fullScreenSwipeEnabled","gestureResponseDistance","stackAnimation","undefined","isHeaderInPush","parentHeaderHeight","HeaderHeightContext","dispatch","StackActions","pop","source","target","emit","type","data","closing","e","dismissCount","nativeEvent","NativeStackViewInner","state","routes","map","NativeStackView","create","flex"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AAKA;;AASA;;AAUA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,MAAMA,SAAS,GAAGC,sBAASC,EAAT,KAAgB,SAAlC;AAEA,IAAIC,SAAS,GAAGC,iBAAhB;;AAEA,IAAIC,OAAJ,EAAa;AACX,QAAMC,cAAc,GAClBC,KADqB,IAElB;AACH,UAAM;AAAEC,MAAAA,iBAAF;AAAqB,SAAGC;AAAxB,QAAiCF,KAAvC;;AACA,QAAIN,sBAASC,EAAT,KAAgB,KAAhB,IAAyBM,iBAAiB,KAAK,MAAnD,EAA2D;AACzD,0BACE,oBAAC,qBAAD,qBACE,oBAAC,iBAAD,EAAUC,IAAV,CADF,CADF;AAKD;;AACD,wBAAO,oBAAC,iBAAD,EAAUA,IAAV,CAAP;AACD,GAZD,CADW,CAcX;;;AACAN,EAAAA,SAAS,GAAGG,cAAZ;AACD;;AAED,MAAMI,gBAAgB,GAAG,CAAC;AACxBC,EAAAA,OADwB;AAExBC,EAAAA,KAFwB;AAGxBJ,EAAAA,iBAHwB;AAIxBK,EAAAA;AAJwB,CAAD,KAUnB;AACJ,QAAM;AAAEC,IAAAA;AAAF,MAAa,uBAAnB;AACA,QAAM;AAAEC,IAAAA,WAAW,GAAG,IAAhB;AAAsBC,IAAAA;AAAtB,MAAuCL,OAA7C;AAEA,QAAMM,MAAM,GAAGC,KAAK,CAACC,UAAN,CAAiBC,iCAAjB,CAAf;AAEA,QAAMC,eAAe,GAAGrB,SAAS,GAC7B,KAD6B,GAE7BQ,iBAAiB,KAAK,MAAtB,IAAgCO,WAAW,KAAK,IAFpD;AAIA,QAAMO,sBAAsB,GAAGJ,KAAK,CAACK,MAAN,CAAaR,WAAb,CAA/B;AAEAG,EAAAA,KAAK,CAACM,SAAN,CAAgB,MAAM;AACpB,2BACE,CAACxB,SAAD,IACEQ,iBAAiB,KAAK,MADxB,IAEEc,sBAAsB,CAACG,OAAvB,KAAmCV,WAHvC,EAIG,6IAA4IH,KAAK,CAACc,IAAK,IAJ1J;AAOAJ,IAAAA,sBAAsB,CAACG,OAAvB,GAAiCV,WAAjC;AACD,GATD,EASG,CAACA,WAAD,EAAcP,iBAAd,EAAiCI,KAAK,CAACc,IAAvC,CATH;AAWA,QAAMC,OAAO,gBACX,oBAAC,SAAD;AACE,IAAA,KAAK,EAAE,CACLC,MAAM,CAACC,SADF,EAELrB,iBAAiB,KAAK,kBAAtB,IACEA,iBAAiB,KAAK,2BADxB,IACuD;AACnDsB,MAAAA,eAAe,EAAEhB,MAAM,CAACiB;AAD2B,KAHlD,EAMLf,YANK,CADT,CASE;AATF;AAUE,IAAA,iBAAiB,EAAER;AAVrB,KAWGK,QAXH,CADF;AAgBA,QAAMmB,QAAQ,GAAG,qDAAoBC,GAArC;AACA,QAAMC,UAAU,GAAG,mDAAnB;AACA,QAAMC,YAAY,GAAG,qCACnBD,UADmB,EAEnBF,QAFmB,EAGnBxB,iBAHmB,CAArB;;AAMA,MAAIa,eAAJ,EAAqB;AACnB,wBACE,oBAAC,+BAAD;AAAa,MAAA,KAAK,EAAEO,MAAM,CAACC;AAA3B,oBACE,oBAAC,MAAD;AAAQ,MAAA,OAAO,MAAf;AAAgB,MAAA,aAAa,MAA7B;AAA8B,MAAA,KAAK,EAAEO,wBAAWC;AAAhD,oBACE,oBAAC,4BAAD,CAAqB,QAArB;AAA8B,MAAA,KAAK,EAAEF;AAArC,oBACE,oBAAC,qBAAD,eAAkBxB,OAAlB;AAA2B,MAAA,KAAK,EAAEC;AAAlC,OADF,EAEGe,OAFH,CADF,CADF,CADF;AAUD;;AAED,SAAOA,OAAP;AACD,CAvED;;AAgFA,MAAMW,SAAS,GAAG,CAAC;AACjBC,EAAAA,WADiB;AAEjB3B,EAAAA,KAFiB;AAGjB4B,EAAAA,KAHiB;AAIjBC,EAAAA,UAJiB;AAKjBC,EAAAA;AALiB,CAAD,KAYZ;AACJ,QAAM;AAAE/B,IAAAA,OAAF;AAAWgC,IAAAA,MAAM,EAAEC;AAAnB,MAAmCL,WAAW,CAAC3B,KAAK,CAACiC,GAAP,CAApD;AACA,QAAM;AACJC,IAAAA,cADI;AAEJ/B,IAAAA,WAFI;AAGJgC,IAAAA,mBAHI;AAIJC,IAAAA,mBAJI;AAKJC,IAAAA,gCAAgC,GAAG,KAL/B;AAMJC,IAAAA,kBANI;AAOJC,IAAAA,mBAPI;AAQJC,IAAAA,gBAAgB,GAAG,KARf;AASJC,IAAAA,iBATI;AAUJC,IAAAA,kBAVI;AAWJC,IAAAA,cAXI;AAYJC,IAAAA,eAZI;AAaJC,IAAAA,cAbI;AAcJC,IAAAA,oBAdI;AAeJC,IAAAA,cAAc,GAAG,YAfb;AAgBJC,IAAAA,kBAhBI;AAiBJC,IAAAA;AAjBI,MAkBFlD,OAlBJ;AAoBA,MAAI;AACFmD,IAAAA,sBADE;AAEFC,IAAAA,sBAFE;AAGFC,IAAAA,uBAHE;AAIFC,IAAAA,cAJE;AAKFzD,IAAAA,iBAAiB,GAAG;AALlB,MAMAG,OANJ;;AAQA,MAAIgD,cAAc,KAAK,UAAvB,EAAmC;AACjC;AACA;AACA;AACA;AACA;AACA,QAAII,sBAAsB,KAAKG,SAA/B,EAA0C;AACxCH,MAAAA,sBAAsB,GAAG,IAAzB;AACD;;AACD,QAAID,sBAAsB,KAAKI,SAA/B,EAA0C;AACxCJ,MAAAA,sBAAsB,GAAG,IAAzB;AACD;;AACD,QAAIG,cAAc,KAAKC,SAAvB,EAAkC;AAChCD,MAAAA,cAAc,GAAG,mBAAjB;AACD;AACF;;AAED,MAAIzB,KAAK,KAAK,CAAd,EAAiB;AACf;AACA;AACAhC,IAAAA,iBAAiB,GAAG,MAApB;AACD;;AAED,QAAM2D,cAAc,GAAGnE,SAAS,GAC5Be,WAD4B,GAE5BP,iBAAiB,KAAK,MAAtB,IAAgCO,WAAW,KAAK,KAFpD;AAIA,QAAMmB,UAAU,GAAG,mDAAnB;AACA,QAAMF,QAAQ,GAAG,qDAAoBC,GAArC;AACA,QAAME,YAAY,GAAG,qCACnBD,UADmB,EAEnBF,QAFmB,EAGnBxB,iBAHmB,CAArB;AAKA,QAAM4D,kBAAkB,GAAGlD,KAAK,CAACC,UAAN,CAAiBkD,4BAAjB,CAA3B;AACA,QAAMpD,MAAM,GAAGC,KAAK,CAACC,UAAN,CAAiBC,iCAAjB,CAAf;AAEA,sBACE,oBAAC,MAAD;AACE,IAAA,GAAG,EAAER,KAAK,CAACiC,GADb;AAEE,IAAA,OAAO,MAFT;AAGE,IAAA,aAAa,MAHf;AAIE,IAAA,KAAK,EAAET,wBAAWC,YAJpB;AAKE,IAAA,sBAAsB,EAAEyB,sBAL1B;AAME,IAAA,YAAY,EAAED,YANhB;AAOE,IAAA,sBAAsB,EAAEE,sBAP1B;AAQE,IAAA,mBAAmB,EAAEhB,mBARvB;AASE,IAAA,mBAAmB,EAAEC,mBATvB;AAUE,IAAA,cAAc,EAAEhD,SAAS,GAAG,KAAH,GAAW8C,cAVtC;AAWE,IAAA,uBAAuB,EAAEkB,uBAX3B;AAYE,IAAA,gCAAgC,EAAEf,gCAZpC;AAaE,IAAA,kBAAkB,EAAEC,kBAbtB;AAcE,IAAA,mBAAmB,EAAEC,mBAdvB;AAeE,IAAA,gBAAgB,EAAEC,gBAfpB;AAgBE,IAAA,iBAAiB,EAAEC,iBAhBrB;AAiBE,IAAA,cAAc,EAAEY,cAjBlB;AAkBE,IAAA,iBAAiB,EAAEzD,iBAlBrB;AAmBE,IAAA,kBAAkB,EAAE8C,kBAnBtB;AAoBE,IAAA,cAAc,EAAEC,cApBlB;AAqBE,IAAA,eAAe,EAAEC,eArBnB;AAsBE,IAAA,cAAc,EAAEC,cAtBlB;AAuBE,IAAA,oBAAoB,EAAEC,oBAvBxB;AAwBE,IAAA,cAAc,EAAEC,cAxBlB;AAyBE,IAAA,kBAAkB,EAAEC,kBAzBtB;AA0BE,IAAA,yBAAyB,EAAE,MAAM;AAC/BnB,MAAAA,UAAU,CAAC6B,QAAX,CAAoB,EAClB,GAAGC,qBAAaC,GAAb,EADe;AAElBC,QAAAA,MAAM,EAAE7D,KAAK,CAACiC,GAFI;AAGlB6B,QAAAA,MAAM,EAAEhC;AAHU,OAApB;AAKD,KAhCH;AAiCE,IAAA,YAAY,EAAE,MAAM;AAClBD,MAAAA,UAAU,CAACkC,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,iBADQ;AAEdC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAFQ;AAGdJ,QAAAA,MAAM,EAAE9D,KAAK,CAACiC;AAHA,OAAhB;AAKD,KAvCH;AAwCE,IAAA,eAAe,EAAE,MAAM;AACrBJ,MAAAA,UAAU,CAACkC,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,iBADQ;AAEdC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAFQ;AAGdJ,QAAAA,MAAM,EAAE9D,KAAK,CAACiC;AAHA,OAAhB;AAKD,KA9CH;AA+CE,IAAA,QAAQ,EAAE,MAAM;AACdJ,MAAAA,UAAU,CAACkC,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,QADQ;AAEdF,QAAAA,MAAM,EAAE9D,KAAK,CAACiC;AAFA,OAAhB;AAIAJ,MAAAA,UAAU,CAACkC,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,eADQ;AAEdC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAFQ;AAGdJ,QAAAA,MAAM,EAAE9D,KAAK,CAACiC;AAHA,OAAhB;AAKD,KAzDH;AA0DE,IAAA,WAAW,EAAE,MAAM;AACjBJ,MAAAA,UAAU,CAACkC,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,eADQ;AAEdC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAFQ;AAGdJ,QAAAA,MAAM,EAAE9D,KAAK,CAACiC;AAHA,OAAhB;AAKD,KAhEH;AAiEE,IAAA,WAAW,EAAGkC,CAAD,IAAO;AAClBtC,MAAAA,UAAU,CAACkC,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,SADQ;AAEdF,QAAAA,MAAM,EAAE9D,KAAK,CAACiC;AAFA,OAAhB;AAKA,YAAMmC,YAAY,GAChBD,CAAC,CAACE,WAAF,CAAcD,YAAd,GAA6B,CAA7B,GAAiCD,CAAC,CAACE,WAAF,CAAcD,YAA/C,GAA8D,CADhE;AAGAvC,MAAAA,UAAU,CAAC6B,QAAX,CAAoB,EAClB,GAAGC,qBAAaC,GAAb,CAAiBQ,YAAjB,CADe;AAElBP,QAAAA,MAAM,EAAE7D,KAAK,CAACiC,GAFI;AAGlB6B,QAAAA,MAAM,EAAEhC;AAHU,OAApB;AAKD;AA/EH,kBAgFE,oBAAC,4BAAD,CAAqB,QAArB;AACE,IAAA,KAAK,EACHyB,cAAc,KAAK,KAAnB,GAA2BhC,YAA3B,GAA0CiC,kBAA1C,aAA0CA,kBAA1C,cAA0CA,kBAA1C,GAAgE;AAFpE,kBAIE,oBAAC,qBAAD,eAAkBzD,OAAlB;AAA2B,IAAA,KAAK,EAAEC,KAAlC;AAAyC,IAAA,WAAW,EAAEuD;AAAtD,KAJF,eAKE,oBAAC,gBAAD;AACE,IAAA,OAAO,EAAExD,OADX;AAEE,IAAA,KAAK,EAAEC,KAFT;AAGE,IAAA,iBAAiB,EAAEJ;AAHrB,KAIGoC,WAAW,EAJd,CALF,CAhFF,CADF;AA+FD,CA9KD;;AAsLA,SAASsC,oBAAT,CAA8B;AAC5BC,EAAAA,KAD4B;AAE5B1C,EAAAA,UAF4B;AAG5BF,EAAAA;AAH4B,CAA9B,EAIuB;AACrB,QAAM;AAAEM,IAAAA,GAAF;AAAOuC,IAAAA;AAAP,MAAkBD,KAAxB;AAEA,sBACE,oBAAC,+BAAD;AAAa,IAAA,KAAK,EAAEvD,MAAM,CAACC;AAA3B,KACGuD,MAAM,CAACC,GAAP,CAAW,CAACzE,KAAD,EAAQ4B,KAAR,kBACV,oBAAC,SAAD;AACE,IAAA,GAAG,EAAE5B,KAAK,CAACiC,GADb;AAEE,IAAA,WAAW,EAAEN,WAFf;AAGE,IAAA,KAAK,EAAE3B,KAHT;AAIE,IAAA,KAAK,EAAE4B,KAJT;AAKE,IAAA,UAAU,EAAEC,UALd;AAME,IAAA,QAAQ,EAAEI;AANZ,IADD,CADH,CADF;AAcD;;AAEc,SAASyC,eAAT,CAAyB/E,KAAzB,EAAuC;AACpD,sBACE,oBAAC,+BAAD,qBACE,oBAAC,oBAAD,EAA0BA,KAA1B,CADF,CADF;AAKD;;AAED,MAAMqB,MAAM,GAAGQ,wBAAWmD,MAAX,CAAkB;AAC/B1D,EAAAA,SAAS,EAAE;AACT2D,IAAAA,IAAI,EAAE;AADG;AADoB,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport warnOnce from 'warn-once';\nimport {\n ScreenStack,\n StackPresentationTypes,\n ScreenContext,\n} from 'react-native-screens';\nimport {\n ParamListBase,\n StackActions,\n StackNavigationState,\n useTheme,\n Route,\n NavigationState,\n PartialState,\n} from '@react-navigation/native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\nimport SafeAreaProviderCompat from '../utils/SafeAreaProviderCompat';\nimport getDefaultHeaderHeight from '../utils/getDefaultHeaderHeight';\nimport HeaderHeightContext from '../utils/HeaderHeightContext';\n\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n const DebugContainer = (\n props: ViewProps & { stackPresentation: StackPresentationTypes }\n ) => {\n const { stackPresentation, ...rest } = props;\n if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n return (\n <AppContainer>\n <View {...rest} />\n </AppContainer>\n );\n }\n return <View {...rest} />;\n };\n // @ts-ignore Wrong props\n Container = DebugContainer;\n}\n\nconst MaybeNestedStack = ({\n options,\n route,\n stackPresentation,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n stackPresentation: StackPresentationTypes;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { headerShown = true, contentStyle } = options;\n\n const Screen = React.useContext(ScreenContext);\n\n const isHeaderInModal = isAndroid\n ? false\n : stackPresentation !== 'push' && headerShown === true;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n stackPresentation !== 'push' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, stackPresentation, route.name]);\n\n const content = (\n <Container\n style={[\n styles.container,\n stackPresentation !== 'transparentModal' &&\n stackPresentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n // @ts-ignore Wrong props passed to View\n stackPresentation={stackPresentation}>\n {children}\n </Container>\n );\n\n const topInset = useSafeAreaInsets().top;\n const dimensions = useSafeAreaFrame();\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled isNativeStack style={StyleSheet.absoluteFill}>\n <HeaderHeightContext.Provider value={headerHeight}>\n <HeaderConfig {...options} route={route} />\n {content}\n </HeaderHeightContext.Provider>\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype NavigationRoute<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList\n> = Route<Extract<RouteName, string>, ParamList[RouteName]> & {\n state?: NavigationState | PartialState<NavigationState>;\n};\n\nconst RouteView = ({\n descriptors,\n route,\n index,\n navigation,\n stateKey,\n}: {\n descriptors: NativeStackDescriptorMap;\n route: NavigationRoute<ParamListBase, string>;\n index: number;\n navigation: NativeStackNavigationHelpers;\n stateKey: string;\n}) => {\n const { options, render: renderScene } = descriptors[route.key];\n const {\n gestureEnabled,\n headerShown,\n hideKeyboardOnSwipe,\n homeIndicatorHidden,\n nativeBackButtonDismissalEnabled = false,\n navigationBarColor,\n navigationBarHidden,\n replaceAnimation = 'pop',\n screenOrientation,\n statusBarAnimation,\n statusBarColor,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n swipeDirection = 'horizontal',\n transitionDuration,\n freezeOnBlur,\n } = options;\n\n let {\n customAnimationOnSwipe,\n fullScreenSwipeEnabled,\n gestureResponseDistance,\n stackAnimation,\n stackPresentation = 'push',\n } = options;\n\n if (swipeDirection === 'vertical') {\n // for `vertical` direction to work, we need to set `fullScreenSwipeEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `customAnimationOnSwipe` needs to be set to `true` so the `stackAnimation` set by user can be used,\n // otherwise `simple_push` will be used.\n // Also, the default animation for this direction seems to be `slide_from_bottom`.\n if (fullScreenSwipeEnabled === undefined) {\n fullScreenSwipeEnabled = true;\n }\n if (customAnimationOnSwipe === undefined) {\n customAnimationOnSwipe = true;\n }\n if (stackAnimation === undefined) {\n stackAnimation = 'slide_from_bottom';\n }\n }\n\n if (index === 0) {\n // first screen should always be treated as `push`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `push`\n stackPresentation = 'push';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : stackPresentation === 'push' && headerShown !== false;\n\n const dimensions = useSafeAreaFrame();\n const topInset = useSafeAreaInsets().top;\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n const Screen = React.useContext(ScreenContext);\n\n return (\n <Screen\n key={route.key}\n enabled\n isNativeStack\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnSwipe}\n freezeOnBlur={freezeOnBlur}\n fullScreenSwipeEnabled={fullScreenSwipeEnabled}\n hideKeyboardOnSwipe={hideKeyboardOnSwipe}\n homeIndicatorHidden={homeIndicatorHidden}\n gestureEnabled={isAndroid ? false : gestureEnabled}\n gestureResponseDistance={gestureResponseDistance}\n nativeBackButtonDismissalEnabled={nativeBackButtonDismissalEnabled}\n navigationBarColor={navigationBarColor}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={replaceAnimation}\n screenOrientation={screenOrientation}\n stackAnimation={stackAnimation}\n stackPresentation={stackPresentation}\n statusBarAnimation={statusBarAnimation}\n statusBarColor={statusBarColor}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={swipeDirection}\n transitionDuration={transitionDuration}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: stateKey,\n });\n }}\n onWillAppear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: false },\n target: route.key,\n });\n }}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'appear',\n target: route.key,\n });\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(e) => {\n navigation.emit({\n type: 'dismiss',\n target: route.key,\n });\n\n const dismissCount =\n e.nativeEvent.dismissCount > 0 ? e.nativeEvent.dismissCount : 1;\n\n navigation.dispatch({\n ...StackActions.pop(dismissCount),\n source: route.key,\n target: stateKey,\n });\n }}>\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false ? headerHeight : parentHeaderHeight ?? 0\n }>\n <HeaderConfig {...options} route={route} headerShown={isHeaderInPush} />\n <MaybeNestedStack\n options={options}\n route={route}\n stackPresentation={stackPresentation}>\n {renderScene()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({\n state,\n navigation,\n descriptors,\n}: Props): JSX.Element {\n const { key, routes } = state;\n\n return (\n <ScreenStack style={styles.container}>\n {routes.map((route, index) => (\n <RouteView\n key={route.key}\n descriptors={descriptors}\n route={route}\n index={index}\n navigation={navigation}\n stateKey={key}\n />\n ))}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}