react-native-screens 3.9.0 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +47 -7
  3. package/android/build.gradle +1 -2
  4. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +71 -0
  5. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
  7. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -1
  8. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +35 -52
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +1 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +83 -34
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +38 -33
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +77 -42
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +25 -9
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +8 -0
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +7 -1
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +1 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +10 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +72 -11
  19. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +107 -0
  20. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +155 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +67 -0
  22. package/android/src/main/res/anim/rns_default_enter_in.xml +18 -0
  23. package/android/src/main/res/anim/rns_default_enter_out.xml +19 -0
  24. package/android/src/main/res/anim/rns_default_exit_in.xml +17 -0
  25. package/android/src/main/res/anim/rns_default_exit_out.xml +18 -0
  26. package/android/src/main/res/anim/rns_fade_in.xml +7 -0
  27. package/android/src/main/res/anim/rns_fade_out.xml +7 -0
  28. package/android/src/main/res/anim/rns_no_animation_20.xml +6 -0
  29. package/createNativeStackNavigator/README.md +12 -0
  30. package/ios/RNSScreen.h +10 -0
  31. package/ios/RNSScreen.m +38 -0
  32. package/ios/RNSScreenContainer.m +5 -0
  33. package/ios/RNSScreenStack.m +29 -13
  34. package/ios/RNSScreenStackAnimator.m +45 -14
  35. package/ios/RNSScreenStackHeaderConfig.m +4 -1
  36. package/ios/RNSScreenWindowTraits.h +1 -0
  37. package/ios/RNSScreenWindowTraits.m +20 -0
  38. package/ios/UIViewController+RNScreens.m +10 -0
  39. package/lib/commonjs/index.js +17 -1
  40. package/lib/commonjs/index.js.map +1 -1
  41. package/lib/commonjs/index.native.js +66 -18
  42. package/lib/commonjs/index.native.js.map +1 -1
  43. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +67 -0
  44. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
  45. package/lib/commonjs/native-stack/views/HeaderConfig.js +46 -4
  46. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  47. package/lib/commonjs/native-stack/views/NativeStackView.js +33 -4
  48. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  49. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +60 -0
  50. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  51. package/lib/commonjs/reanimated/ReanimatedScreen.js +7 -79
  52. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  53. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +61 -0
  54. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
  55. package/lib/commonjs/reanimated/index.js +2 -2
  56. package/lib/commonjs/reanimated/index.js.map +1 -1
  57. package/lib/commonjs/utils.js +20 -0
  58. package/lib/commonjs/utils.js.map +1 -0
  59. package/lib/module/index.js +1 -0
  60. package/lib/module/index.js.map +1 -1
  61. package/lib/module/index.native.js +65 -19
  62. package/lib/module/index.native.js.map +1 -1
  63. package/lib/module/native-stack/utils/useBackPressSubscription.js +50 -0
  64. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
  65. package/lib/module/native-stack/views/HeaderConfig.js +46 -5
  66. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  67. package/lib/module/native-stack/views/NativeStackView.js +33 -4
  68. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  69. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +40 -0
  70. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  71. package/lib/module/reanimated/ReanimatedScreen.js +6 -73
  72. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  73. package/lib/module/reanimated/ReanimatedScreenProvider.js +49 -0
  74. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
  75. package/lib/module/reanimated/index.js +1 -1
  76. package/lib/module/reanimated/index.js.map +1 -1
  77. package/lib/module/utils.js +8 -0
  78. package/lib/module/utils.js.map +1 -0
  79. package/lib/typescript/index.d.ts +1 -0
  80. package/lib/typescript/native-stack/types.d.ts +34 -2
  81. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
  82. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
  83. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -2
  84. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
  85. package/lib/typescript/reanimated/index.d.ts +1 -1
  86. package/lib/typescript/types.d.ts +101 -1
  87. package/lib/typescript/utils.d.ts +2 -0
  88. package/native-stack/README.md +70 -8
  89. package/package.json +2 -1
  90. package/reanimated/package.json +6 -0
  91. package/src/index.native.tsx +94 -36
  92. package/src/index.tsx +4 -0
  93. package/src/native-stack/types.tsx +34 -2
  94. package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
  95. package/src/native-stack/views/HeaderConfig.tsx +46 -3
  96. package/src/native-stack/views/NativeStackView.tsx +33 -4
  97. package/src/reanimated/ReanimatedNativeStackScreen.tsx +61 -0
  98. package/src/reanimated/ReanimatedScreen.tsx +6 -84
  99. package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
  100. package/src/reanimated/index.tsx +1 -1
  101. package/src/types.tsx +101 -1
  102. package/src/utils.ts +12 -0
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  Object.defineProperty(exports, "ReanimatedScreenProvider", {
7
7
  enumerable: true,
8
8
  get: function () {
9
- return _ReanimatedScreen.default;
9
+ return _ReanimatedScreenProvider.default;
10
10
  }
11
11
  });
12
12
  Object.defineProperty(exports, "useReanimatedTransitionProgress", {
@@ -16,7 +16,7 @@ Object.defineProperty(exports, "useReanimatedTransitionProgress", {
16
16
  }
17
17
  });
18
18
 
19
- var _ReanimatedScreen = _interopRequireDefault(require("./ReanimatedScreen"));
19
+ var _ReanimatedScreenProvider = _interopRequireDefault(require("./ReanimatedScreenProvider"));
20
20
 
21
21
  var _useReanimatedTransitionProgress = _interopRequireDefault(require("./useReanimatedTransitionProgress"));
22
22
 
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AACA","sourcesContent":["export { default as ReanimatedScreenProvider } from './ReanimatedScreen';\nexport { default as useReanimatedTransitionProgress } from './useReanimatedTransitionProgress';\n"]}
1
+ {"version":3,"sources":["index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AACA","sourcesContent":["export { default as ReanimatedScreenProvider } from './ReanimatedScreenProvider';\nexport { default as useReanimatedTransitionProgress } from './useReanimatedTransitionProgress';\n"]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.executeNativeBackPress = executeNativeBackPress;
7
+ exports.isSearchBarAvailableForCurrentPlatform = void 0;
8
+
9
+ var _reactNative = require("react-native");
10
+
11
+ const isSearchBarAvailableForCurrentPlatform = ['ios', 'android'].includes(_reactNative.Platform.OS);
12
+ exports.isSearchBarAvailableForCurrentPlatform = isSearchBarAvailableForCurrentPlatform;
13
+
14
+ function executeNativeBackPress() {
15
+ // This function invokes the native back press event
16
+ _reactNative.BackHandler.exitApp();
17
+
18
+ return true;
19
+ }
20
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils.ts"],"names":["isSearchBarAvailableForCurrentPlatform","includes","Platform","OS","executeNativeBackPress","BackHandler","exitApp"],"mappings":";;;;;;;;AAAA;;AAEO,MAAMA,sCAAsC,GAAG,CACpD,KADoD,EAEpD,SAFoD,EAGpDC,QAHoD,CAG3CC,sBAASC,EAHkC,CAA/C;;;AAKA,SAASC,sBAAT,GAAkC;AACvC;AACAC,2BAAYC,OAAZ;;AACA,SAAO,IAAP;AACD","sourcesContent":["import { BackHandler, Platform } from 'react-native';\n\nexport const isSearchBarAvailableForCurrentPlatform = [\n 'ios',\n 'android',\n].includes(Platform.OS);\n\nexport function executeNativeBackPress() {\n // This function invokes the native back press event\n BackHandler.exitApp();\n return true;\n}\n"]}
@@ -4,6 +4,7 @@ import React from 'react';
4
4
  import { Animated, View, Image } from 'react-native';
5
5
  export * from './types';
6
6
  export { default as useTransitionProgress } from './useTransitionProgress';
7
+ export { isSearchBarAvailableForCurrentPlatform, executeNativeBackPress } from './utils';
7
8
  let ENABLE_SCREENS = true;
8
9
  export function enableScreens(shouldEnableScreens = true) {
9
10
  ENABLE_SCREENS = shouldEnableScreens;
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["React","Animated","View","Image","default","useTransitionProgress","ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","enableFreeze","shouldEnableReactFreeze","NativeScreen","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,EAAmBC,IAAnB,EAAgDC,KAAhD,QAA6D,cAA7D;AAUA,cAAc,SAAd;AACA,SAASC,OAAO,IAAIC,qBAApB,QAAiD,yBAAjD;AAEA,IAAIC,cAAc,GAAG,IAArB;AAEA,OAAO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;AAED,OAAO,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD,C,CAED;AACA;;AACA,OAAO,SAASI,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D,CACjE;AACD;AAED,OAAO,MAAMC,YAAN,SAA2BZ,KAAK,CAACa,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGZ,cAJR;AAKF,SAAGa;AALD,QAMA,KAAKC,KANT;;AAQA,QAAIF,OAAJ,EAAa;AACX,UAAIH,MAAM,KAAKM,SAAX,IAAwBL,aAAa,KAAKK,SAA9C,EAAyD;AACvDL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CADuD,CACjB;AACvC;;AACD,0BACE,oBAAC,IAAD,CACE;AADF;AAEE,QAAA,MAAM,EAAEC,aAAa,KAAK,CAF5B;AAGE,QAAA,KAAK,EAAE,CAACC,KAAD,EAAQ;AAAEK,UAAAA,OAAO,EAAEN,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR;AAHT,SAIMG,IAJN,EADF;AAQD;;AAED,wBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;AA4B/D,OAAO,MAAMI,MAAM,GAAGtB,QAAQ,CAACuB,uBAAT,CAAiCZ,YAAjC,CAAf;AAEP,OAAO,MAAMa,aAAa,gBAAGzB,KAAK,CAAC0B,aAAN,CAAoBH,MAApB,CAAtB;AAEP,OAAO,MAAMI,eAA0D,GAAGzB,IAAnE;AAEP,OAAO,MAAM0B,qBAAgE,GAAG1B,IAAzE;AAEP,OAAO,MAAM2B,+BAA0E,GAAG3B,IAAnF;AAEP,OAAO,MAAM4B,WAAkD,GAAG5B,IAA3D;AAEP,OAAO,MAAM6B,iBAAiB,GAAG7B,IAA1B;AAEP,OAAO,MAAM8B,gCAAgC,GAC3CZ,KAD8C,iBAG9C,oBAAC,IAAD,qBACE,oBAAC,KAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;AAQP,OAAO,MAAMa,0BAA0B,GACrCb,KADwC,iBAExB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMc,yBAAyB,GACpCd,KADuC,iBAEvB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMe,2BAA2B,GACtCf,KADyC,iBAEzB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMgB,8BAA8B,GACzChB,KAD4C,iBAE5B,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMiB,uBAA0E,GAAGnC,IAAnF,C,CAEP;;AACA,OAAO,MAAMoC,SAA8C,GAAGpC,IAAvD;AAEP,OAAO,MAAMqC,wBAEX,GAAGrC,IAFE;AAIP,OAAO,MAAMsC,sBAAsB,GAAG,IAA/B","sourcesContent":["import React from 'react';\nimport { Animated, View, ViewProps, ImageProps, Image } from 'react-native';\nimport {\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n HeaderSubviewTypes,\n SearchBarProps,\n} from './types';\n\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\n\nlet ENABLE_SCREENS = true;\n\nexport function enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = shouldEnableScreens;\n}\n\nexport function screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// @ts-ignore function stub, freezing logic is located in index.native.tsx\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function enableFreeze(shouldEnableReactFreeze = true): void {\n // noop\n}\n\nexport class NativeScreen extends React.Component<ScreenProps> {\n render(): JSX.Element {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n return (\n <View\n // @ts-expect-error: hidden exists on web, but not in React Native\n hidden={activityState === 0}\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n {...rest}\n />\n );\n }\n\n return <View {...rest} />;\n }\n}\n\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\n\nexport const ScreenContext = React.createContext(Screen);\n\nexport const ScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenNavigationContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const ScreenStack: React.ComponentType<ScreenStackProps> = View;\n\nexport const FullWindowOverlay = View;\n\nexport const ScreenStackHeaderBackButtonImage = (\n props: ImageProps\n): JSX.Element => (\n <View>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </View>\n);\n\nexport const ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps> = View;\n\n// @ts-expect-error: search bar props have no common props with View\nexport const SearchBar: React.ComponentType<SearchBarProps> = View;\n\nexport const ScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>> = View;\n\nexport const shouldUseActivityState = true;\n"]}
1
+ {"version":3,"sources":["index.tsx"],"names":["React","Animated","View","Image","default","useTransitionProgress","isSearchBarAvailableForCurrentPlatform","executeNativeBackPress","ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","enableFreeze","shouldEnableReactFreeze","NativeScreen","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,EAAmBC,IAAnB,EAAgDC,KAAhD,QAA6D,cAA7D;AAUA,cAAc,SAAd;AACA,SAASC,OAAO,IAAIC,qBAApB,QAAiD,yBAAjD;AACA,SACEC,sCADF,EAEEC,sBAFF,QAGO,SAHP;AAKA,IAAIC,cAAc,GAAG,IAArB;AAEA,OAAO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;AAED,OAAO,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD,C,CAED;AACA;;AACA,OAAO,SAASI,YAAT,CAAsBC,uBAAuB,GAAG,IAAhD,EAA4D,CACjE;AACD;AAED,OAAO,MAAMC,YAAN,SAA2Bd,KAAK,CAACe,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGZ,cAJR;AAKF,SAAGa;AALD,QAMA,KAAKC,KANT;;AAQA,QAAIF,OAAJ,EAAa;AACX,UAAIH,MAAM,KAAKM,SAAX,IAAwBL,aAAa,KAAKK,SAA9C,EAAyD;AACvDL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CADuD,CACjB;AACvC;;AACD,0BACE,oBAAC,IAAD,CACE;AADF;AAEE,QAAA,MAAM,EAAEC,aAAa,KAAK,CAF5B;AAGE,QAAA,KAAK,EAAE,CAACC,KAAD,EAAQ;AAAEK,UAAAA,OAAO,EAAEN,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR;AAHT,SAIMG,IAJN,EADF;AAQD;;AAED,wBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;AA4B/D,OAAO,MAAMI,MAAM,GAAGxB,QAAQ,CAACyB,uBAAT,CAAiCZ,YAAjC,CAAf;AAEP,OAAO,MAAMa,aAAa,gBAAG3B,KAAK,CAAC4B,aAAN,CAAoBH,MAApB,CAAtB;AAEP,OAAO,MAAMI,eAA0D,GAAG3B,IAAnE;AAEP,OAAO,MAAM4B,qBAAgE,GAAG5B,IAAzE;AAEP,OAAO,MAAM6B,+BAA0E,GAAG7B,IAAnF;AAEP,OAAO,MAAM8B,WAAkD,GAAG9B,IAA3D;AAEP,OAAO,MAAM+B,iBAAiB,GAAG/B,IAA1B;AAEP,OAAO,MAAMgC,gCAAgC,GAC3CZ,KAD8C,iBAG9C,oBAAC,IAAD,qBACE,oBAAC,KAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;AAQP,OAAO,MAAMa,0BAA0B,GACrCb,KADwC,iBAExB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMc,yBAAyB,GACpCd,KADuC,iBAEvB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMe,2BAA2B,GACtCf,KADyC,iBAEzB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMgB,8BAA8B,GACzChB,KAD4C,iBAE5B,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMiB,uBAA0E,GAAGrC,IAAnF,C,CAEP;;AACA,OAAO,MAAMsC,SAA8C,GAAGtC,IAAvD;AAEP,OAAO,MAAMuC,wBAEX,GAAGvC,IAFE;AAIP,OAAO,MAAMwC,sBAAsB,GAAG,IAA/B","sourcesContent":["import React from 'react';\nimport { Animated, View, ViewProps, ImageProps, Image } from 'react-native';\nimport {\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n HeaderSubviewTypes,\n SearchBarProps,\n} from './types';\n\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\nexport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\nlet ENABLE_SCREENS = true;\n\nexport function enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = shouldEnableScreens;\n}\n\nexport function screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// @ts-ignore function stub, freezing logic is located in index.native.tsx\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function enableFreeze(shouldEnableReactFreeze = true): void {\n // noop\n}\n\nexport class NativeScreen extends React.Component<ScreenProps> {\n render(): JSX.Element {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n return (\n <View\n // @ts-expect-error: hidden exists on web, but not in React Native\n hidden={activityState === 0}\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n {...rest}\n />\n );\n }\n\n return <View {...rest} />;\n }\n}\n\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\n\nexport const ScreenContext = React.createContext(Screen);\n\nexport const ScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenNavigationContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const ScreenStack: React.ComponentType<ScreenStackProps> = View;\n\nexport const FullWindowOverlay = View;\n\nexport const ScreenStackHeaderBackButtonImage = (\n props: ImageProps\n): JSX.Element => (\n <View>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </View>\n);\n\nexport const ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps> = View;\n\n// @ts-expect-error: search bar props have no common props with View\nexport const SearchBar: React.ComponentType<SearchBarProps> = View;\n\nexport const ScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>> = View;\n\nexport const shouldUseActivityState = true;\n"]}
@@ -8,9 +8,11 @@ import { Freeze } from 'react-freeze'; // @ts-ignore Getting private component
8
8
  // eslint-disable-next-line import/default
9
9
 
10
10
  import processColor from 'react-native/Libraries/StyleSheet/processColor';
11
+ import { version } from 'react-native/package.json';
11
12
  import TransitionProgressContext from './TransitionProgressContext';
12
13
  import useTransitionProgress from './useTransitionProgress';
13
- // web implementation is taken from `index.tsx`
14
+ import { isSearchBarAvailableForCurrentPlatform, executeNativeBackPress } from './utils'; // web implementation is taken from `index.tsx`
15
+
14
16
  const isPlatformSupported = Platform.OS === 'ios' || Platform.OS === 'android' || Platform.OS === 'windows';
15
17
  let ENABLE_SCREENS = isPlatformSupported;
16
18
 
@@ -25,6 +27,13 @@ function enableScreens(shouldEnableScreens = true) {
25
27
  let ENABLE_FREEZE = false;
26
28
 
27
29
  function enableFreeze(shouldEnableReactFreeze = true) {
30
+ const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'
31
+ // react-freeze requires react-native >=0.64, react-native from main is 0.0.0
32
+
33
+ if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {
34
+ console.warn('react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.');
35
+ }
36
+
28
37
  ENABLE_FREEZE = shouldEnableReactFreeze;
29
38
  } // const that tells if the library should use new implementation, will be undefined for older versions
30
39
 
@@ -89,12 +98,34 @@ const ScreensNativeModules = {
89
98
 
90
99
  };
91
100
 
101
+ // This component allows one more render before freezing the screen.
102
+ // Allows activityState to reach the native side and useIsFocused to work correctly.
103
+ function DelayedFreeze({
104
+ freeze,
105
+ children
106
+ }) {
107
+ // flag used for determining whether freeze should be enabled
108
+ const [freezeState, setFreezeState] = React.useState(false);
109
+
110
+ if (freeze !== freezeState) {
111
+ // setImmediate is executed at the end of the JS execution block.
112
+ // Used here for changing the state right after the render.
113
+ setImmediate(() => {
114
+ setFreezeState(freeze);
115
+ });
116
+ }
117
+
118
+ return /*#__PURE__*/React.createElement(Freeze, {
119
+ freeze: freeze ? freezeState : false
120
+ }, children);
121
+ }
122
+
92
123
  function MaybeFreeze({
93
124
  freeze,
94
125
  children
95
126
  }) {
96
127
  if (ENABLE_FREEZE) {
97
- return /*#__PURE__*/React.createElement(Freeze, {
128
+ return /*#__PURE__*/React.createElement(DelayedFreeze, {
98
129
  freeze: freeze
99
130
  }, children);
100
131
  } else {
@@ -108,17 +139,18 @@ function ScreenStack(props) {
108
139
  children,
109
140
  ...rest
110
141
  } = props;
111
- const count = React.Children.count(children);
112
- const childrenWithProps = React.Children.map(children, (child, index) => {
113
- return /*#__PURE__*/React.createElement(Freeze, {
114
- freeze: count - index > 2
115
- }, child);
116
- });
117
- return /*#__PURE__*/React.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithProps);
142
+ const size = React.Children.count(children); // freezes all screens except the top one
143
+
144
+ const childrenWithFreeze = React.Children.map(children, (child, index) => /*#__PURE__*/React.createElement(DelayedFreeze, {
145
+ freeze: size - index > 1
146
+ }, child));
147
+ return /*#__PURE__*/React.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithFreeze);
118
148
  }
119
149
 
120
150
  return /*#__PURE__*/React.createElement(ScreensNativeModules.NativeScreenStack, props);
121
- }
151
+ } // Incomplete type, all accessible properties available at:
152
+ // react-native/Libraries/Components/View/ReactNativeViewViewConfig.js
153
+
122
154
 
123
155
  class Screen extends React.Component {
124
156
  constructor(...args) {
@@ -172,10 +204,24 @@ class Screen extends React.Component {
172
204
  }
173
205
 
174
206
  const processedColor = processColor(statusBarColor);
175
- return /*#__PURE__*/React.createElement(AnimatedNativeScreen, _extends({}, props, {
207
+ return /*#__PURE__*/React.createElement(MaybeFreeze, {
208
+ freeze: activityState === 0
209
+ }, /*#__PURE__*/React.createElement(AnimatedNativeScreen, _extends({}, props, {
176
210
  statusBarColor: processedColor,
177
- activityState: activityState,
178
- ref: this.setRef,
211
+ activityState: activityState // This prevents showing blank screen when navigating between multiple screens with freezing
212
+ // https://github.com/software-mansion/react-native-screens/pull/1208
213
+ ,
214
+ ref: ref => {
215
+ var _ref$viewConfig, _ref$viewConfig$valid;
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
+ };
221
+ }
222
+
223
+ this.setRef(ref);
224
+ },
179
225
  onTransitionProgress: !isNativeStack ? undefined : Animated.event([{
180
226
  nativeEvent: {
181
227
  progress: this.progress,
@@ -185,9 +231,7 @@ class Screen extends React.Component {
185
231
  }], {
186
232
  useNativeDriver: true
187
233
  })
188
- }), /*#__PURE__*/React.createElement(MaybeFreeze, {
189
- freeze: activityState === 0
190
- }, !isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
234
+ }), !isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
191
235
  children : /*#__PURE__*/React.createElement(TransitionProgressContext.Provider, {
192
236
  value: {
193
237
  progress: this.progress,
@@ -310,8 +354,8 @@ module.exports = {
310
354
  },
311
355
 
312
356
  get SearchBar() {
313
- if (Platform.OS !== 'ios') {
314
- console.warn('Importing SearchBar is only valid on iOS devices.');
357
+ if (!isSearchBarAvailableForCurrentPlatform) {
358
+ console.warn('Importing SearchBar is only valid on iOS and Android devices.');
315
359
  return View;
316
360
  }
317
361
 
@@ -338,6 +382,8 @@ module.exports = {
338
382
  enableFreeze,
339
383
  screensEnabled,
340
384
  shouldUseActivityState,
341
- useTransitionProgress
385
+ useTransitionProgress,
386
+ isSearchBarAvailableForCurrentPlatform,
387
+ executeNativeBackPress
342
388
  };
343
389
  //# sourceMappingURL=index.native.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","Freeze","processColor","TransitionProgressContext","useTransitionProgress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","MaybeFreeze","freeze","children","ScreenStack","props","rest","count","Children","childrenWithProps","map","child","index","Screen","Component","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","statusBarColor","undefined","warn","processedColor","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","style","display","ScreenContainer","hasTwoStates","styles","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\nfunction MaybeFreeze({\n freeze,\n children,\n}: {\n freeze: boolean;\n children: React.ReactNode;\n}) {\n if (ENABLE_FREEZE) {\n return <Freeze freeze={freeze}>{children}</Freeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const count = React.Children.count(children);\n const childrenWithProps = React.Children.map(children, (child, index) => {\n return <Freeze freeze={count - index > 2}>{child}</Freeze>;\n });\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithProps}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n statusBarColor,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const processedColor = processColor(statusBarColor);\n\n return (\n <AnimatedNativeScreen\n {...props}\n statusBarColor={processedColor}\n activityState={activityState}\n ref={this.setRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n <MaybeFreeze freeze={activityState === 0}>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </MaybeFreeze>\n </AnimatedNativeScreen>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing SearchBar is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n};\n"]}
1
+ {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","Freeze","processColor","version","TransitionProgressContext","useTransitionProgress","isSearchBarAvailableForCurrentPlatform","executeNativeBackPress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","DelayedFreeze","freeze","children","freezeState","setFreezeState","useState","setImmediate","MaybeFreeze","ScreenStack","props","rest","size","Children","count","childrenWithFreeze","map","child","index","Screen","Component","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","statusBarColor","undefined","processedColor","viewConfig","validAttributes","style","display","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","ScreenContainer","hasTwoStates","styles","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SACEC,QADF,EAEEC,KAFF,EAIEC,QAJF,EAKEC,sBALF,EAMEC,UANF,EAOEC,SAPF,EAQEC,IARF,QAUO,cAVP;AAWA,SAASC,MAAT,QAAuB,cAAvB,C,CACA;AACA;;AACA,OAAOC,YAAP,MAAyB,gDAAzB;AACA,SAASC,OAAT,QAAwB,2BAAxB;AAEA,OAAOC,yBAAP,MAAsC,6BAAtC;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AAcA,SACEC,sCADF,EAEEC,sBAFF,QAGO,SAHP,C,CAKA;;AACA,MAAMC,mBAAmB,GACvBZ,QAAQ,CAACa,EAAT,KAAgB,KAAhB,IACAb,QAAQ,CAACa,EAAT,KAAgB,SADhB,IAEAb,QAAQ,CAACa,EAAT,KAAgB,SAHlB;AAKA,IAAIC,cAAc,GAAGF,mBAArB;;AAEA,SAASG,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AACvDF,EAAAA,cAAc,GAAGF,mBAAmB,IAAII,mBAAxC;;AACA,MAAIF,cAAc,IAAI,CAACX,SAAS,CAACc,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,CAACjB,OAAO,CAACkB,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAD,CAAtB,CAD0D,CACX;AAE/C;;AACA,MAAI,EAAEF,KAAK,KAAK,CAAV,IAAeA,KAAK,IAAI,EAA1B,KAAiCD,uBAArC,EAA8D;AAC5DJ,IAAAA,OAAO,CAACQ,IAAR,CACE,kIADF;AAGD;;AAEDN,EAAAA,aAAa,GAAGE,uBAAhB;AACD,C,CAED;;;AACA,MAAMK,sBAAsB,GAAG,IAA/B;;AAEA,SAASC,cAAT,GAAmC;AACjC,SAAOd,cAAP;AACD,C,CAED;AACA;;;AACA,IAAIe,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,IAAI5B,sBAAsB,CAAC,WAAD,CAD7C;AAEA,WAAO4B,iBAAP;AACD,GAL0B;;AAO3B,MAAIW,qBAAJ,GAA4B;AAC1BV,IAAAA,0BAA0B,GACxBA,0BAA0B,IAC1B7B,sBAAsB,CAAC,oBAAD,CAFxB;AAGA,WAAO6B,0BAAP;AACD,GAZ0B;;AAc3B,MAAIW,+BAAJ,GAAsC;AACpCV,IAAAA,oCAAoC,GAClCA,oCAAoC,KACnC/B,QAAQ,CAACa,EAAT,KAAgB,KAAhB,GACGZ,sBAAsB,CAAC,8BAAD,CADzB,GAEG,KAAKuC,qBAH2B,CADtC;AAKA,WAAOT,oCAAP;AACD,GArB0B;;AAuB3B,MAAIC,iBAAJ,GAAwB;AACtBA,IAAAA,iBAAiB,GACfA,iBAAiB,IAAI/B,sBAAsB,CAAC,gBAAD,CAD7C;AAEA,WAAO+B,iBAAP;AACD,GA3B0B;;AA6B3B,MAAIC,6BAAJ,GAAoC;AAClCA,IAAAA,6BAA6B,GAC3BA,6BAA6B,IAC7BhC,sBAAsB,CAAC,4BAAD,CAFxB;AAGA,WAAOgC,6BAAP;AACD,GAlC0B;;AAoC3B,MAAIC,8BAAJ,GAAqC;AACnCA,IAAAA,8BAA8B,GAC5BA,8BAA8B,IAC9BjC,sBAAsB,CAAC,6BAAD,CAFxB;AAGA,WAAOiC,8BAAP;AACD,GAzC0B;;AA2C3B,MAAIE,eAAJ,GAAsB;AACpBA,IAAAA,eAAe,GAAGA,eAAe,IAAInC,sBAAsB,CAAC,cAAD,CAA3D;AACA,WAAOmC,eAAP;AACD,GA9C0B;;AAgD3B,MAAIC,uBAAJ,GAA8B;AAC5BA,IAAAA,uBAAuB,GACrBA,uBAAuB,IAAIpC,sBAAsB,CAAC,sBAAD,CADnD;AAEA,WAAOoC,uBAAP;AACD;;AApD0B,CAA7B;;AA4DA;AACA;AACA,SAASK,aAAT,CAAuB;AAAEC,EAAAA,MAAF;AAAUC,EAAAA;AAAV,CAAvB,EAAiE;AAC/D;AACA,QAAM,CAACC,WAAD,EAAcC,cAAd,IAAgCjD,KAAK,CAACkD,QAAN,CAAe,KAAf,CAAtC;;AAEA,MAAIJ,MAAM,KAAKE,WAAf,EAA4B;AAC1B;AACA;AACAG,IAAAA,YAAY,CAAC,MAAM;AACjBF,MAAAA,cAAc,CAACH,MAAD,CAAd;AACD,KAFW,CAAZ;AAGD;;AAED,sBAAO,oBAAC,MAAD;AAAQ,IAAA,MAAM,EAAEA,MAAM,GAAGE,WAAH,GAAiB;AAAvC,KAA+CD,QAA/C,CAAP;AACD;;AAED,SAASK,WAAT,CAAqB;AAAEN,EAAAA,MAAF;AAAUC,EAAAA;AAAV,CAArB,EAA+D;AAC7D,MAAIxB,aAAJ,EAAmB;AACjB,wBAAO,oBAAC,aAAD;AAAe,MAAA,MAAM,EAAEuB;AAAvB,OAAgCC,QAAhC,CAAP;AACD,GAFD,MAEO;AACL,wBAAO,0CAAGA,QAAH,CAAP;AACD;AACF;;AAED,SAASM,WAAT,CAAqBC,KAArB,EAA8C;AAC5C,MAAI/B,aAAJ,EAAmB;AACjB,UAAM;AAAEwB,MAAAA,QAAF;AAAY,SAAGQ;AAAf,QAAwBD,KAA9B;AACA,UAAME,IAAI,GAAGxD,KAAK,CAACyD,QAAN,CAAeC,KAAf,CAAqBX,QAArB,CAAb,CAFiB,CAGjB;;AACA,UAAMY,kBAAkB,GAAG3D,KAAK,CAACyD,QAAN,CAAeG,GAAf,CAAmBb,QAAnB,EAA6B,CAACc,KAAD,EAAQC,KAAR,kBACtD,oBAAC,aAAD;AAAe,MAAA,MAAM,EAAEN,IAAI,GAAGM,KAAP,GAAe;AAAtC,OAA0CD,KAA1C,CADyB,CAA3B;AAGA,wBACE,oBAAC,oBAAD,CAAsB,iBAAtB,EAA4CN,IAA5C,EACGI,kBADH,CADF;AAKD;;AACD,sBAAO,oBAAC,oBAAD,CAAsB,iBAAtB,EAA4CL,KAA5C,CAAP;AACD,C,CAED;AACA;;;AAWA,MAAMS,MAAN,SAAqB/D,KAAK,CAACgE,SAA3B,CAAkD;AAAA;AAAA;;AAAA,iCACI,IADJ;;AAAA,qCAE9B,IAAI/D,QAAQ,CAACgE,KAAb,CAAmB,CAAnB,CAF8B;;AAAA,sCAG7B,IAAIhE,QAAQ,CAACgE,KAAb,CAAmB,CAAnB,CAH6B;;AAAA,0CAIzB,IAAIhE,QAAQ,CAACgE,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,GAAGrD,cAAZ;AAA4B,SAAGsC;AAA/B,QAAwC,KAAKD,KAAnD;;AAEA,QAAIgB,OAAO,IAAIvD,mBAAf,EAAoC;AAClCuB,MAAAA,oBAAoB,GAClBA,oBAAoB,IACpBrC,QAAQ,CAACsE,uBAAT,CAAiC9B,oBAAoB,CAACC,YAAtD,CAFF;AAIA,UAAI;AACF;AACA;AACA;AACA8B,QAAAA,MAJE;AAKFC,QAAAA,aALE;AAMF1B,QAAAA,QANE;AAOF2B,QAAAA,aAPE;AAQFC,QAAAA,cARE;AASF,WAAGrB;AATD,UAUAC,IAVJ;;AAYA,UAAIiB,MAAM,KAAKI,SAAX,IAAwBH,aAAa,KAAKG,SAA9C,EAAyD;AACvDvD,QAAAA,OAAO,CAACQ,IAAR,CACE,+QADF;AAGA4C,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CAJuD,CAIjB;AACvC;;AAED,YAAMK,cAAc,GAAGpE,YAAY,CAACkE,cAAD,CAAnC;AAEA,0BACE,oBAAC,WAAD;AAAa,QAAA,MAAM,EAAEF,aAAa,KAAK;AAAvC,sBACE,oBAAC,oBAAD,eACMnB,KADN;AAEE,QAAA,cAAc,EAAEuB,cAFlB;AAGE,QAAA,aAAa,EAAEJ,aAHjB,CAIE;AACA;AALF;AAME,QAAA,GAAG,EAAGP,GAAD,IAAqB;AAAA;;AACxB,cAAIA,GAAJ,aAAIA,GAAJ,kCAAIA,GAAG,CAAEY,UAAT,qEAAI,gBAAiBC,eAArB,kDAAI,sBAAkCC,KAAtC,EAA6C;AAC3Cd,YAAAA,GAAG,CAACY,UAAJ,CAAeC,eAAf,CAA+BC,KAA/B,GAAuC,EACrC,GAAGd,GAAG,CAACY,UAAJ,CAAeC,eAAf,CAA+BC,KADG;AAErCC,cAAAA,OAAO,EAAE;AAF4B,aAAvC;AAID;;AACD,eAAKC,MAAL,CAAYhB,GAAZ;AACD,SAdH;AAeE,QAAA,oBAAoB,EAClB,CAACQ,aAAD,GACIE,SADJ,GAEI3E,QAAQ,CAACkF,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;AAlBR,UA+BG,CAACd,aAAD,GAAmB;AAClB3B,MAAAA,QADD,gBAGC,oBAAC,yBAAD,CAA2B,QAA3B;AACE,QAAA,KAAK,EAAE;AACLsC,UAAAA,QAAQ,EAAE,KAAKA,QADV;AAELC,UAAAA,OAAO,EAAE,KAAKA,OAFT;AAGLC,UAAAA,YAAY,EAAE,KAAKA;AAHd;AADT,SAMGxC,QANH,CAlCJ,CADF,CADF;AAgDD,KA1ED,MA0EO;AACL;AACA,UAAI;AACFyB,QAAAA,MADE;AAEFC,QAAAA,aAFE;AAGFO,QAAAA,KAHE;AAIF;AACAb,QAAAA,cALE;AAMF,WAAGb;AAND,UAOAC,IAPJ;;AASA,UAAIiB,MAAM,KAAKI,SAAX,IAAwBH,aAAa,KAAKG,SAA9C,EAAyD;AACvDH,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC;AACD;;AACD,0BACE,oBAAC,QAAD,CAAU,IAAV;AACE,QAAA,KAAK,EAAE,CAACQ,KAAD,EAAQ;AAAEC,UAAAA,OAAO,EAAER,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR,CADT;AAEE,QAAA,GAAG,EAAE,KAAKS;AAFZ,SAGM5B,KAHN,EADF;AAOD;AACF;;AAlH+C;;AAqHlD,SAASmC,eAAT,CAAyBnC,KAAzB,EAAsD;AACpD,QAAM;AAAEgB,IAAAA,OAAO,GAAGrD,cAAZ;AAA4ByE,IAAAA,YAA5B;AAA0C,OAAGnC;AAA7C,MAAsDD,KAA5D;;AAEA,MAAIgB,OAAO,IAAIvD,mBAAf,EAAoC;AAClC,QAAI2E,YAAJ,EAAkB;AAChB,0BAAO,oBAAC,oBAAD,CAAsB,+BAAtB,EAA0DnC,IAA1D,CAAP;AACD;;AACD,wBAAO,oBAAC,oBAAD,CAAsB,qBAAtB,EAAgDA,IAAhD,CAAP;AACD;;AACD,sBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD;;AAED,MAAMoC,MAAM,GAAGtF,UAAU,CAACuF,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,GAAI9C,KAAD,iBACvC,oBAAC,oBAAD,CAAsB,8BAAtB;AACE,EAAA,IAAI,EAAC,MADP;AAEE,EAAA,KAAK,EAAEqC,MAAM,CAACE;AAFhB,gBAGE,oBAAC,KAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDvC,KAAhD,EAHF,CADF;;AAQA,MAAM+C,0BAA0B,GAC9B/C,KADiC,iBAGjC,oBAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,OAFP;AAGE,EAAA,KAAK,EAAEqC,MAAM,CAACE;AAHhB,GAHF;;AAUA,MAAMS,yBAAyB,GAC7BhD,KADgC,iBAGhC,oBAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,MAFP;AAGE,EAAA,KAAK,EAAEqC,MAAM,CAACE;AAHhB,GAHF;;AAUA,MAAMU,2BAA2B,GAC/BjD,KADkC,iBAGlC,oBAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,QAFP;AAGE,EAAA,KAAK,EAAEqC,MAAM,CAACE;AAHhB,GAHF;;AAUA,MAAMW,8BAA8B,GAClClD,KADqC,iBAGrC,oBAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,WAFP;AAGE,EAAA,KAAK,EAAEqC,MAAM,CAACE;AAHhB,GAHF;;AAwBA;AACA;AACA,MAAMY,aAAa,gBAAGzG,KAAK,CAAC0G,aAAN,CAAoB3C,MAApB,CAAtB;AAEA4C,MAAM,CAACC,OAAP,GAAiB;AACf;AACA;AACA7C,EAAAA,MAHe;AAIf0B,EAAAA,eAJe;AAKfgB,EAAAA,aALe;AAMfpD,EAAAA,WANe;;AAQf,MAAIX,YAAJ,GAAmB;AACjB,WAAOD,oBAAoB,CAACC,YAA5B;AACD,GAVc;;AAYf,MAAIC,qBAAJ,GAA4B;AAC1B,WAAOF,oBAAoB,CAACE,qBAA5B;AACD,GAdc;;AAgBf,MAAIC,+BAAJ,GAAsC;AACpC,WAAOH,oBAAoB,CAACG,+BAA5B;AACD,GAlBc;;AAoBf,MAAIiE,uBAAJ,GAA8B;AAC5B,WAAOpE,oBAAoB,CAACL,6BAA5B;AACD,GAtBc;;AAuBf,MAAI0E,wBAAJ,GAA+B;AAC7B,WAAOrE,oBAAoB,CAACJ,8BAA5B;AACD,GAzBc;;AA0Bf,MAAI0E,SAAJ,GAAgB;AACd,QAAI,CAAClG,sCAAL,EAA6C;AAC3CQ,MAAAA,OAAO,CAACQ,IAAR,CACE,+DADF;AAGA,aAAOtB,IAAP;AACD;;AAED,WAAOkC,oBAAoB,CAACF,eAA5B;AACD,GAnCc;;AAoCf,MAAIyE,iBAAJ,GAAwB;AACtB,QAAI7G,QAAQ,CAACa,EAAT,KAAgB,KAApB,EAA2B;AACzBK,MAAAA,OAAO,CAACQ,IAAR,CAAa,2DAAb;AACA,aAAOtB,IAAP;AACD;;AAED,WAAOkC,oBAAoB,CAACD,uBAA5B;AACD,GA3Cc;;AA4Cf;AACA;AACA4D,EAAAA,gCA9Ce;AA+CfC,EAAAA,0BA/Ce;AAgDfC,EAAAA,yBAhDe;AAiDfC,EAAAA,2BAjDe;AAkDfC,EAAAA,8BAlDe;AAoDftF,EAAAA,aApDe;AAqDfM,EAAAA,YArDe;AAsDfO,EAAAA,cAtDe;AAuDfD,EAAAA,sBAvDe;AAwDflB,EAAAA,qBAxDe;AA0DfC,EAAAA,sCA1De;AA2DfC,EAAAA;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';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction MaybeFreeze({ freeze, children }: FreezeWrapperProps) {\n if (ENABLE_FREEZE) {\n return <DelayedFreeze freeze={freeze}>{children}</DelayedFreeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => (\n <DelayedFreeze freeze={size - index > 1}>{child}</DelayedFreeze>\n ));\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n statusBarColor,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const processedColor = processColor(statusBarColor);\n\n return (\n <MaybeFreeze freeze={activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n statusBarColor={processedColor}\n activityState={activityState}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={(ref: ViewConfig) => {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n }\n this.setRef(ref);\n }}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </MaybeFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import { BackHandler } from 'react-native';
3
+
4
+ /**
5
+ * This hook is an abstraction for keeping back press subscription
6
+ * logic in one place.
7
+ */
8
+ export function useBackPressSubscription({
9
+ onBackPress,
10
+ isDisabled
11
+ }) {
12
+ const [isActive, setIsActive] = React.useState(false);
13
+ const subscription = React.useRef();
14
+ const clearSubscription = React.useCallback((shouldSetActive = true) => {
15
+ var _subscription$current;
16
+
17
+ (_subscription$current = subscription.current) === null || _subscription$current === void 0 ? void 0 : _subscription$current.remove();
18
+ subscription.current = undefined;
19
+ if (shouldSetActive) setIsActive(false);
20
+ }, []);
21
+ const createSubscription = React.useCallback(() => {
22
+ if (!isDisabled) {
23
+ var _subscription$current2;
24
+
25
+ (_subscription$current2 = subscription.current) === null || _subscription$current2 === void 0 ? void 0 : _subscription$current2.remove();
26
+ subscription.current = BackHandler.addEventListener('hardwareBackPress', onBackPress);
27
+ setIsActive(true);
28
+ }
29
+ }, [isDisabled, onBackPress]);
30
+ const handleAttached = React.useCallback(() => {
31
+ if (isActive) {
32
+ createSubscription();
33
+ }
34
+ }, [createSubscription, isActive]);
35
+ const handleDetached = React.useCallback(() => {
36
+ clearSubscription(false);
37
+ }, [clearSubscription]);
38
+ React.useEffect(() => {
39
+ if (isDisabled) {
40
+ clearSubscription();
41
+ }
42
+ }, [isDisabled, clearSubscription]);
43
+ return {
44
+ handleAttached,
45
+ handleDetached,
46
+ createSubscription,
47
+ clearSubscription
48
+ };
49
+ }
50
+ //# sourceMappingURL=useBackPressSubscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useBackPressSubscription.tsx"],"names":["React","BackHandler","useBackPressSubscription","onBackPress","isDisabled","isActive","setIsActive","useState","subscription","useRef","clearSubscription","useCallback","shouldSetActive","current","remove","undefined","createSubscription","addEventListener","handleAttached","handleDetached","useEffect"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,WAAT,QAAqD,cAArD;;AAcA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAT,CAAkC;AACvCC,EAAAA,WADuC;AAEvCC,EAAAA;AAFuC,CAAlC,EAG4B;AACjC,QAAM,CAACC,QAAD,EAAWC,WAAX,IAA0BN,KAAK,CAACO,QAAN,CAAe,KAAf,CAAhC;AACA,QAAMC,YAAY,GAAGR,KAAK,CAACS,MAAN,EAArB;AAEA,QAAMC,iBAAiB,GAAGV,KAAK,CAACW,WAAN,CAAkB,CAACC,eAAe,GAAG,IAAnB,KAA4B;AAAA;;AACtE,6BAAAJ,YAAY,CAACK,OAAb,gFAAsBC,MAAtB;AACAN,IAAAA,YAAY,CAACK,OAAb,GAAuBE,SAAvB;AACA,QAAIH,eAAJ,EAAqBN,WAAW,CAAC,KAAD,CAAX;AACtB,GAJyB,EAIvB,EAJuB,CAA1B;AAMA,QAAMU,kBAAkB,GAAGhB,KAAK,CAACW,WAAN,CAAkB,MAAM;AACjD,QAAI,CAACP,UAAL,EAAiB;AAAA;;AACf,gCAAAI,YAAY,CAACK,OAAb,kFAAsBC,MAAtB;AACAN,MAAAA,YAAY,CAACK,OAAb,GAAuBZ,WAAW,CAACgB,gBAAZ,CACrB,mBADqB,EAErBd,WAFqB,CAAvB;AAIAG,MAAAA,WAAW,CAAC,IAAD,CAAX;AACD;AACF,GAT0B,EASxB,CAACF,UAAD,EAAaD,WAAb,CATwB,CAA3B;AAWA,QAAMe,cAAc,GAAGlB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAC7C,QAAIN,QAAJ,EAAc;AACZW,MAAAA,kBAAkB;AACnB;AACF,GAJsB,EAIpB,CAACA,kBAAD,EAAqBX,QAArB,CAJoB,CAAvB;AAMA,QAAMc,cAAc,GAAGnB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAC7CD,IAAAA,iBAAiB,CAAC,KAAD,CAAjB;AACD,GAFsB,EAEpB,CAACA,iBAAD,CAFoB,CAAvB;AAIAV,EAAAA,KAAK,CAACoB,SAAN,CAAgB,MAAM;AACpB,QAAIhB,UAAJ,EAAgB;AACdM,MAAAA,iBAAiB;AAClB;AACF,GAJD,EAIG,CAACN,UAAD,EAAaM,iBAAb,CAJH;AAMA,SAAO;AACLQ,IAAAA,cADK;AAELC,IAAAA,cAFK;AAGLH,IAAAA,kBAHK;AAILN,IAAAA;AAJK,GAAP;AAMD","sourcesContent":["import React from 'react';\nimport { BackHandler, NativeEventSubscription } from 'react-native';\n\ninterface Args {\n onBackPress: () => boolean;\n isDisabled: boolean;\n}\n\ninterface UseBackPressSubscription {\n handleAttached: () => void;\n handleDetached: () => void;\n createSubscription: () => void;\n clearSubscription: () => void;\n}\n\n/**\n * This hook is an abstraction for keeping back press subscription\n * logic in one place.\n */\nexport function useBackPressSubscription({\n onBackPress,\n isDisabled,\n}: Args): UseBackPressSubscription {\n const [isActive, setIsActive] = React.useState(false);\n const subscription = React.useRef<NativeEventSubscription | undefined>();\n\n const clearSubscription = React.useCallback((shouldSetActive = true) => {\n subscription.current?.remove();\n subscription.current = undefined;\n if (shouldSetActive) setIsActive(false);\n }, []);\n\n const createSubscription = React.useCallback(() => {\n if (!isDisabled) {\n subscription.current?.remove();\n subscription.current = BackHandler.addEventListener(\n 'hardwareBackPress',\n onBackPress\n );\n setIsActive(true);\n }\n }, [isDisabled, onBackPress]);\n\n const handleAttached = React.useCallback(() => {\n if (isActive) {\n createSubscription();\n }\n }, [createSubscription, isActive]);\n\n const handleDetached = React.useCallback(() => {\n clearSubscription(false);\n }, [clearSubscription]);\n\n React.useEffect(() => {\n if (isDisabled) {\n clearSubscription();\n }\n }, [isDisabled, clearSubscription]);\n\n return {\n handleAttached,\n handleDetached,\n createSubscription,\n clearSubscription,\n };\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { useTheme } from '@react-navigation/native';
2
2
  import * as React from 'react';
3
3
  import { Platform } from 'react-native';
4
- import { ScreenStackHeaderBackButtonImage, ScreenStackHeaderCenterView, ScreenStackHeaderConfig, ScreenStackHeaderLeftView, ScreenStackHeaderRightView, ScreenStackHeaderSearchBarView, SearchBar } from 'react-native-screens';
4
+ import { ScreenStackHeaderBackButtonImage, ScreenStackHeaderCenterView, ScreenStackHeaderConfig, ScreenStackHeaderLeftView, ScreenStackHeaderRightView, ScreenStackHeaderSearchBarView, SearchBar, isSearchBarAvailableForCurrentPlatform, executeNativeBackPress } from 'react-native-screens';
5
+ import { useBackPressSubscription } from '../utils/useBackPressSubscription';
5
6
  import { processFonts } from './FontProcessor';
6
7
  export default function HeaderConfig({
7
8
  backButtonImage,
@@ -34,8 +35,46 @@ export default function HeaderConfig({
34
35
  const {
35
36
  colors
36
37
  } = useTheme();
37
- const tintColor = headerTintColor !== null && headerTintColor !== void 0 ? headerTintColor : colors.primary;
38
- const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = processFonts([headerBackTitleStyle.fontFamily, headerLargeTitleStyle.fontFamily, headerTitleStyle.fontFamily]);
38
+ const tintColor = headerTintColor !== null && headerTintColor !== void 0 ? headerTintColor : colors.primary; // We need to use back press subscription here to override back button behavior on JS side.
39
+ // Because screens are usually used with react-navigation and this library overrides back button
40
+ // we need to handle it first in case when search bar is open
41
+
42
+ const {
43
+ handleAttached,
44
+ handleDetached,
45
+ clearSubscription,
46
+ createSubscription
47
+ } = useBackPressSubscription({
48
+ onBackPress: executeNativeBackPress,
49
+ isDisabled: !searchBar || !!searchBar.disableBackButtonOverride
50
+ });
51
+ const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = processFonts([headerBackTitleStyle.fontFamily, headerLargeTitleStyle.fontFamily, headerTitleStyle.fontFamily]); // We want to clear clearSubscription only when components unmounts or search bar changes
52
+
53
+ React.useEffect(() => clearSubscription, [searchBar]);
54
+ const processedSearchBarOptions = React.useMemo(() => {
55
+ if (Platform.OS === 'android' && searchBar && !searchBar.disableBackButtonOverride) {
56
+ const onFocus = (...args) => {
57
+ var _searchBar$onFocus;
58
+
59
+ createSubscription();
60
+ (_searchBar$onFocus = searchBar.onFocus) === null || _searchBar$onFocus === void 0 ? void 0 : _searchBar$onFocus.call(searchBar, ...args);
61
+ };
62
+
63
+ const onClose = (...args) => {
64
+ var _searchBar$onClose;
65
+
66
+ clearSubscription();
67
+ (_searchBar$onClose = searchBar.onClose) === null || _searchBar$onClose === void 0 ? void 0 : _searchBar$onClose.call(searchBar, ...args);
68
+ };
69
+
70
+ return { ...searchBar,
71
+ onFocus,
72
+ onClose
73
+ };
74
+ }
75
+
76
+ return searchBar;
77
+ }, [searchBar, createSubscription, clearSubscription]);
39
78
  return /*#__PURE__*/React.createElement(ScreenStackHeaderConfig, {
40
79
  backButtonInCustomView: backButtonInCustomView,
41
80
  backgroundColor: headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card,
@@ -62,7 +101,9 @@ export default function HeaderConfig({
62
101
  titleFontSize: headerTitleStyle.fontSize,
63
102
  titleFontWeight: headerTitleStyle.fontWeight,
64
103
  topInsetEnabled: headerTopInsetEnabled,
65
- translucent: headerTranslucent === true
104
+ translucent: headerTranslucent === true,
105
+ onAttached: handleAttached,
106
+ onDetached: handleDetached
66
107
  }, headerRight !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderRightView, null, headerRight({
67
108
  tintColor
68
109
  })) : null, backButtonImage !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderBackButtonImage, {
@@ -72,6 +113,6 @@ export default function HeaderConfig({
72
113
  tintColor
73
114
  })) : null, headerCenter !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderCenterView, null, headerCenter({
74
115
  tintColor
75
- })) : null, Platform.OS === 'ios' && searchBar !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderSearchBarView, null, /*#__PURE__*/React.createElement(SearchBar, searchBar)) : null);
116
+ })) : null, isSearchBarAvailableForCurrentPlatform && processedSearchBarOptions !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderSearchBarView, null, /*#__PURE__*/React.createElement(SearchBar, processedSearchBarOptions)) : null);
76
117
  }
77
118
  //# sourceMappingURL=HeaderConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["HeaderConfig.tsx"],"names":["useTheme","React","Platform","ScreenStackHeaderBackButtonImage","ScreenStackHeaderCenterView","ScreenStackHeaderConfig","ScreenStackHeaderLeftView","ScreenStackHeaderRightView","ScreenStackHeaderSearchBarView","SearchBar","processFonts","HeaderConfig","backButtonImage","backButtonInCustomView","direction","disableBackButtonMenu","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerCenter","headerHideBackButton","headerHideShadow","headerLargeStyle","headerLargeTitle","headerLargeTitleHideShadow","headerLargeTitleStyle","headerLeft","headerRight","headerShown","headerStyle","headerTintColor","headerTitle","headerTitleStyle","headerTopInsetEnabled","headerTranslucent","route","searchBar","title","colors","tintColor","primary","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","backgroundColor","card","fontSize","blurEffect","color","fontWeight","undefined","name","text","OS"],"mappings":"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","sourcesContent":["import { Route, useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport {\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderConfig,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\nimport { NativeStackNavigationOptions } from '../types';\nimport { processFonts } from './FontProcessor';\n\ntype Props = NativeStackNavigationOptions & {\n route: Route<string>;\n};\n\nexport default function HeaderConfig({\n backButtonImage,\n backButtonInCustomView,\n direction,\n disableBackButtonMenu,\n headerBackTitle,\n headerBackTitleStyle = {},\n headerBackTitleVisible = true,\n headerCenter,\n headerHideBackButton,\n headerHideShadow,\n headerLargeStyle = {},\n headerLargeTitle,\n headerLargeTitleHideShadow,\n headerLargeTitleStyle = {},\n headerLeft,\n headerRight,\n headerShown,\n headerStyle = {},\n headerTintColor,\n headerTitle,\n headerTitleStyle = {},\n headerTopInsetEnabled = true,\n headerTranslucent,\n route,\n searchBar,\n title,\n}: Props): JSX.Element {\n const { colors } = useTheme();\n const tintColor = headerTintColor ?? colors.primary;\n\n const [\n backTitleFontFamily,\n largeTitleFontFamily,\n titleFontFamily,\n ] = processFonts([\n headerBackTitleStyle.fontFamily,\n headerLargeTitleStyle.fontFamily,\n headerTitleStyle.fontFamily,\n ]);\n\n return (\n <ScreenStackHeaderConfig\n backButtonInCustomView={backButtonInCustomView}\n backgroundColor={\n headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card\n }\n backTitle={headerBackTitleVisible ? headerBackTitle : ' '}\n backTitleFontFamily={backTitleFontFamily}\n backTitleFontSize={headerBackTitleStyle.fontSize}\n blurEffect={headerStyle.blurEffect}\n color={tintColor}\n direction={direction}\n disableBackButtonMenu={disableBackButtonMenu}\n hidden={headerShown === false}\n hideBackButton={headerHideBackButton}\n hideShadow={headerHideShadow}\n largeTitle={headerLargeTitle}\n largeTitleBackgroundColor={headerLargeStyle.backgroundColor}\n largeTitleColor={headerLargeTitleStyle.color}\n largeTitleFontFamily={largeTitleFontFamily}\n largeTitleFontSize={headerLargeTitleStyle.fontSize}\n largeTitleFontWeight={headerLargeTitleStyle.fontWeight}\n largeTitleHideShadow={headerLargeTitleHideShadow}\n title={\n headerTitle !== undefined\n ? headerTitle\n : title !== undefined\n ? title\n : route.name\n }\n titleColor={\n headerTitleStyle.color !== undefined\n ? headerTitleStyle.color\n : headerTintColor !== undefined\n ? headerTintColor\n : colors.text\n }\n titleFontFamily={titleFontFamily}\n titleFontSize={headerTitleStyle.fontSize}\n titleFontWeight={headerTitleStyle.fontWeight}\n topInsetEnabled={headerTopInsetEnabled}\n translucent={headerTranslucent === true}>\n {headerRight !== undefined ? (\n <ScreenStackHeaderRightView>\n {headerRight({ tintColor })}\n </ScreenStackHeaderRightView>\n ) : null}\n {backButtonImage !== undefined ? (\n <ScreenStackHeaderBackButtonImage\n key=\"backImage\"\n source={backButtonImage}\n />\n ) : null}\n {headerLeft !== undefined ? (\n <ScreenStackHeaderLeftView>\n {headerLeft({ tintColor })}\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerCenter !== undefined ? (\n <ScreenStackHeaderCenterView>\n {headerCenter({ tintColor })}\n </ScreenStackHeaderCenterView>\n ) : null}\n {Platform.OS === 'ios' && searchBar !== undefined ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...searchBar} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </ScreenStackHeaderConfig>\n );\n}\n"]}
1
+ {"version":3,"sources":["HeaderConfig.tsx"],"names":["useTheme","React","Platform","ScreenStackHeaderBackButtonImage","ScreenStackHeaderCenterView","ScreenStackHeaderConfig","ScreenStackHeaderLeftView","ScreenStackHeaderRightView","ScreenStackHeaderSearchBarView","SearchBar","isSearchBarAvailableForCurrentPlatform","executeNativeBackPress","useBackPressSubscription","processFonts","HeaderConfig","backButtonImage","backButtonInCustomView","direction","disableBackButtonMenu","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerCenter","headerHideBackButton","headerHideShadow","headerLargeStyle","headerLargeTitle","headerLargeTitleHideShadow","headerLargeTitleStyle","headerLeft","headerRight","headerShown","headerStyle","headerTintColor","headerTitle","headerTitleStyle","headerTopInsetEnabled","headerTranslucent","route","searchBar","title","colors","tintColor","primary","handleAttached","handleDetached","clearSubscription","createSubscription","onBackPress","isDisabled","disableBackButtonOverride","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","useEffect","processedSearchBarOptions","useMemo","OS","onFocus","args","onClose","backgroundColor","card","fontSize","blurEffect","color","fontWeight","undefined","name","text"],"mappings":"AAAA,SAAgBA,QAAhB,QAAgC,0BAAhC;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,QAAyB,cAAzB;AACA,SACEC,gCADF,EAEEC,2BAFF,EAGEC,uBAHF,EAIEC,yBAJF,EAKEC,0BALF,EAMEC,8BANF,EAOEC,SAPF,EASEC,sCATF,EAUEC,sBAVF,QAWO,sBAXP;AAaA,SAASC,wBAAT,QAAyC,mCAAzC;AACA,SAASC,YAAT,QAA6B,iBAA7B;AAMA,eAAe,SAASC,YAAT,CAAsB;AACnCC,EAAAA,eADmC;AAEnCC,EAAAA,sBAFmC;AAGnCC,EAAAA,SAHmC;AAInCC,EAAAA,qBAJmC;AAKnCC,EAAAA,eALmC;AAMnCC,EAAAA,oBAAoB,GAAG,EANY;AAOnCC,EAAAA,sBAAsB,GAAG,IAPU;AAQnCC,EAAAA,YARmC;AASnCC,EAAAA,oBATmC;AAUnCC,EAAAA,gBAVmC;AAWnCC,EAAAA,gBAAgB,GAAG,EAXgB;AAYnCC,EAAAA,gBAZmC;AAanCC,EAAAA,0BAbmC;AAcnCC,EAAAA,qBAAqB,GAAG,EAdW;AAenCC,EAAAA,UAfmC;AAgBnCC,EAAAA,WAhBmC;AAiBnCC,EAAAA,WAjBmC;AAkBnCC,EAAAA,WAAW,GAAG,EAlBqB;AAmBnCC,EAAAA,eAnBmC;AAoBnCC,EAAAA,WApBmC;AAqBnCC,EAAAA,gBAAgB,GAAG,EArBgB;AAsBnCC,EAAAA,qBAAqB,GAAG,IAtBW;AAuBnCC,EAAAA,iBAvBmC;AAwBnCC,EAAAA,KAxBmC;AAyBnCC,EAAAA,SAzBmC;AA0BnCC,EAAAA;AA1BmC,CAAtB,EA2BQ;AACrB,QAAM;AAAEC,IAAAA;AAAF,MAAazC,QAAQ,EAA3B;AACA,QAAM0C,SAAS,GAAGT,eAAH,aAAGA,eAAH,cAAGA,eAAH,GAAsBQ,MAAM,CAACE,OAA5C,CAFqB,CAIrB;AACA;AACA;;AACA,QAAM;AACJC,IAAAA,cADI;AAEJC,IAAAA,cAFI;AAGJC,IAAAA,iBAHI;AAIJC,IAAAA;AAJI,MAKFnC,wBAAwB,CAAC;AAC3BoC,IAAAA,WAAW,EAAErC,sBADc;AAE3BsC,IAAAA,UAAU,EAAE,CAACV,SAAD,IAAc,CAAC,CAACA,SAAS,CAACW;AAFX,GAAD,CAL5B;AAUA,QAAM,CACJC,mBADI,EAEJC,oBAFI,EAGJC,eAHI,IAIFxC,YAAY,CAAC,CACfO,oBAAoB,CAACkC,UADN,EAEf1B,qBAAqB,CAAC0B,UAFP,EAGfnB,gBAAgB,CAACmB,UAHF,CAAD,CAJhB,CAjBqB,CA2BrB;;AACArD,EAAAA,KAAK,CAACsD,SAAN,CAAgB,MAAMT,iBAAtB,EAAyC,CAACP,SAAD,CAAzC;AAEA,QAAMiB,yBAAyB,GAAGvD,KAAK,CAACwD,OAAN,CAAc,MAAM;AACpD,QACEvD,QAAQ,CAACwD,EAAT,KAAgB,SAAhB,IACAnB,SADA,IAEA,CAACA,SAAS,CAACW,yBAHb,EAIE;AACA,YAAMS,OAAkC,GAAG,CAAC,GAAGC,IAAJ,KAAa;AAAA;;AACtDb,QAAAA,kBAAkB;AAClB,8BAAAR,SAAS,CAACoB,OAAV,+EAAApB,SAAS,EAAW,GAAGqB,IAAd,CAAT;AACD,OAHD;;AAIA,YAAMC,OAAkC,GAAG,CAAC,GAAGD,IAAJ,KAAa;AAAA;;AACtDd,QAAAA,iBAAiB;AACjB,8BAAAP,SAAS,CAACsB,OAAV,+EAAAtB,SAAS,EAAW,GAAGqB,IAAd,CAAT;AACD,OAHD;;AAKA,aAAO,EAAE,GAAGrB,SAAL;AAAgBoB,QAAAA,OAAhB;AAAyBE,QAAAA;AAAzB,OAAP;AACD;;AACD,WAAOtB,SAAP;AACD,GAlBiC,EAkB/B,CAACA,SAAD,EAAYQ,kBAAZ,EAAgCD,iBAAhC,CAlB+B,CAAlC;AAoBA,sBACE,oBAAC,uBAAD;AACE,IAAA,sBAAsB,EAAE9B,sBAD1B;AAEE,IAAA,eAAe,EACbgB,WAAW,CAAC8B,eAAZ,GAA8B9B,WAAW,CAAC8B,eAA1C,GAA4DrB,MAAM,CAACsB,IAHvE;AAKE,IAAA,SAAS,EAAE1C,sBAAsB,GAAGF,eAAH,GAAqB,GALxD;AAME,IAAA,mBAAmB,EAAEgC,mBANvB;AAOE,IAAA,iBAAiB,EAAE/B,oBAAoB,CAAC4C,QAP1C;AAQE,IAAA,UAAU,EAAEhC,WAAW,CAACiC,UAR1B;AASE,IAAA,KAAK,EAAEvB,SATT;AAUE,IAAA,SAAS,EAAEzB,SAVb;AAWE,IAAA,qBAAqB,EAAEC,qBAXzB;AAYE,IAAA,MAAM,EAAEa,WAAW,KAAK,KAZ1B;AAaE,IAAA,cAAc,EAAER,oBAblB;AAcE,IAAA,UAAU,EAAEC,gBAdd;AAeE,IAAA,UAAU,EAAEE,gBAfd;AAgBE,IAAA,yBAAyB,EAAED,gBAAgB,CAACqC,eAhB9C;AAiBE,IAAA,eAAe,EAAElC,qBAAqB,CAACsC,KAjBzC;AAkBE,IAAA,oBAAoB,EAAEd,oBAlBxB;AAmBE,IAAA,kBAAkB,EAAExB,qBAAqB,CAACoC,QAnB5C;AAoBE,IAAA,oBAAoB,EAAEpC,qBAAqB,CAACuC,UApB9C;AAqBE,IAAA,oBAAoB,EAAExC,0BArBxB;AAsBE,IAAA,KAAK,EACHO,WAAW,KAAKkC,SAAhB,GACIlC,WADJ,GAEIM,KAAK,KAAK4B,SAAV,GACA5B,KADA,GAEAF,KAAK,CAAC+B,IA3Bd;AA6BE,IAAA,UAAU,EACRlC,gBAAgB,CAAC+B,KAAjB,KAA2BE,SAA3B,GACIjC,gBAAgB,CAAC+B,KADrB,GAEIjC,eAAe,KAAKmC,SAApB,GACAnC,eADA,GAEAQ,MAAM,CAAC6B,IAlCf;AAoCE,IAAA,eAAe,EAAEjB,eApCnB;AAqCE,IAAA,aAAa,EAAElB,gBAAgB,CAAC6B,QArClC;AAsCE,IAAA,eAAe,EAAE7B,gBAAgB,CAACgC,UAtCpC;AAuCE,IAAA,eAAe,EAAE/B,qBAvCnB;AAwCE,IAAA,WAAW,EAAEC,iBAAiB,KAAK,IAxCrC;AAyCE,IAAA,UAAU,EAAEO,cAzCd;AA0CE,IAAA,UAAU,EAAEC;AA1Cd,KA2CGf,WAAW,KAAKsC,SAAhB,gBACC,oBAAC,0BAAD,QACGtC,WAAW,CAAC;AAAEY,IAAAA;AAAF,GAAD,CADd,CADD,GAIG,IA/CN,EAgDG3B,eAAe,KAAKqD,SAApB,gBACC,oBAAC,gCAAD;AACE,IAAA,GAAG,EAAC,WADN;AAEE,IAAA,MAAM,EAAErD;AAFV,IADD,GAKG,IArDN,EAsDGc,UAAU,KAAKuC,SAAf,gBACC,oBAAC,yBAAD,QACGvC,UAAU,CAAC;AAAEa,IAAAA;AAAF,GAAD,CADb,CADD,GAIG,IA1DN,EA2DGpB,YAAY,KAAK8C,SAAjB,gBACC,oBAAC,2BAAD,QACG9C,YAAY,CAAC;AAAEoB,IAAAA;AAAF,GAAD,CADf,CADD,GAIG,IA/DN,EAgEGhC,sCAAsC,IACvC8C,yBAAyB,KAAKY,SAD7B,gBAEC,oBAAC,8BAAD,qBACE,oBAAC,SAAD,EAAeZ,yBAAf,CADF,CAFD,GAKG,IArEN,CADF;AAyED","sourcesContent":["import { Route, useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport {\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderConfig,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n SearchBarProps,\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from 'react-native-screens';\nimport { NativeStackNavigationOptions } from '../types';\nimport { useBackPressSubscription } from '../utils/useBackPressSubscription';\nimport { processFonts } from './FontProcessor';\n\ntype Props = NativeStackNavigationOptions & {\n route: Route<string>;\n};\n\nexport default function HeaderConfig({\n backButtonImage,\n backButtonInCustomView,\n direction,\n disableBackButtonMenu,\n headerBackTitle,\n headerBackTitleStyle = {},\n headerBackTitleVisible = true,\n headerCenter,\n headerHideBackButton,\n headerHideShadow,\n headerLargeStyle = {},\n headerLargeTitle,\n headerLargeTitleHideShadow,\n headerLargeTitleStyle = {},\n headerLeft,\n headerRight,\n headerShown,\n headerStyle = {},\n headerTintColor,\n headerTitle,\n headerTitleStyle = {},\n headerTopInsetEnabled = true,\n headerTranslucent,\n route,\n searchBar,\n title,\n}: Props): JSX.Element {\n const { colors } = useTheme();\n const tintColor = headerTintColor ?? colors.primary;\n\n // We need to use back press subscription here to override back button behavior on JS side.\n // Because screens are usually used with react-navigation and this library overrides back button\n // we need to handle it first in case when search bar is open\n const {\n handleAttached,\n handleDetached,\n clearSubscription,\n createSubscription,\n } = useBackPressSubscription({\n onBackPress: executeNativeBackPress,\n isDisabled: !searchBar || !!searchBar.disableBackButtonOverride,\n });\n\n const [\n backTitleFontFamily,\n largeTitleFontFamily,\n titleFontFamily,\n ] = processFonts([\n headerBackTitleStyle.fontFamily,\n headerLargeTitleStyle.fontFamily,\n headerTitleStyle.fontFamily,\n ]);\n\n // We want to clear clearSubscription only when components unmounts or search bar changes\n React.useEffect(() => clearSubscription, [searchBar]);\n\n const processedSearchBarOptions = React.useMemo(() => {\n if (\n Platform.OS === 'android' &&\n searchBar &&\n !searchBar.disableBackButtonOverride\n ) {\n const onFocus: SearchBarProps['onFocus'] = (...args) => {\n createSubscription();\n searchBar.onFocus?.(...args);\n };\n const onClose: SearchBarProps['onClose'] = (...args) => {\n clearSubscription();\n searchBar.onClose?.(...args);\n };\n\n return { ...searchBar, onFocus, onClose };\n }\n return searchBar;\n }, [searchBar, createSubscription, clearSubscription]);\n\n return (\n <ScreenStackHeaderConfig\n backButtonInCustomView={backButtonInCustomView}\n backgroundColor={\n headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card\n }\n backTitle={headerBackTitleVisible ? headerBackTitle : ' '}\n backTitleFontFamily={backTitleFontFamily}\n backTitleFontSize={headerBackTitleStyle.fontSize}\n blurEffect={headerStyle.blurEffect}\n color={tintColor}\n direction={direction}\n disableBackButtonMenu={disableBackButtonMenu}\n hidden={headerShown === false}\n hideBackButton={headerHideBackButton}\n hideShadow={headerHideShadow}\n largeTitle={headerLargeTitle}\n largeTitleBackgroundColor={headerLargeStyle.backgroundColor}\n largeTitleColor={headerLargeTitleStyle.color}\n largeTitleFontFamily={largeTitleFontFamily}\n largeTitleFontSize={headerLargeTitleStyle.fontSize}\n largeTitleFontWeight={headerLargeTitleStyle.fontWeight}\n largeTitleHideShadow={headerLargeTitleHideShadow}\n title={\n headerTitle !== undefined\n ? headerTitle\n : title !== undefined\n ? title\n : route.name\n }\n titleColor={\n headerTitleStyle.color !== undefined\n ? headerTitleStyle.color\n : headerTintColor !== undefined\n ? headerTintColor\n : colors.text\n }\n titleFontFamily={titleFontFamily}\n titleFontSize={headerTitleStyle.fontSize}\n titleFontWeight={headerTitleStyle.fontWeight}\n topInsetEnabled={headerTopInsetEnabled}\n translucent={headerTranslucent === true}\n onAttached={handleAttached}\n onDetached={handleDetached}>\n {headerRight !== undefined ? (\n <ScreenStackHeaderRightView>\n {headerRight({ tintColor })}\n </ScreenStackHeaderRightView>\n ) : null}\n {backButtonImage !== undefined ? (\n <ScreenStackHeaderBackButtonImage\n key=\"backImage\"\n source={backButtonImage}\n />\n ) : null}\n {headerLeft !== undefined ? (\n <ScreenStackHeaderLeftView>\n {headerLeft({ tintColor })}\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerCenter !== undefined ? (\n <ScreenStackHeaderCenterView>\n {headerCenter({ tintColor })}\n </ScreenStackHeaderCenterView>\n ) : null}\n {isSearchBarAvailableForCurrentPlatform &&\n processedSearchBarOptions !== undefined ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...processedSearchBarOptions} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </ScreenStackHeaderConfig>\n );\n}\n"]}
@@ -93,24 +93,48 @@ const RouteView = ({
93
93
  render: renderScene
94
94
  } = descriptors[route.key];
95
95
  const {
96
- customAnimationOnSwipe,
97
- fullScreenSwipeEnabled,
98
96
  gestureEnabled,
99
97
  headerShown,
98
+ homeIndicatorHidden,
100
99
  nativeBackButtonDismissalEnabled = false,
100
+ navigationBarColor,
101
+ navigationBarHidden,
101
102
  replaceAnimation = 'pop',
102
103
  screenOrientation,
103
- stackAnimation,
104
104
  statusBarAnimation,
105
105
  statusBarColor,
106
106
  statusBarHidden,
107
107
  statusBarStyle,
108
- statusBarTranslucent
108
+ statusBarTranslucent,
109
+ swipeDirection = 'horizontal',
110
+ transitionDuration
109
111
  } = options;
110
112
  let {
113
+ customAnimationOnSwipe,
114
+ fullScreenSwipeEnabled,
115
+ stackAnimation,
111
116
  stackPresentation = 'push'
112
117
  } = options;
113
118
 
119
+ if (swipeDirection === 'vertical') {
120
+ // for `vertical` direction to work, we need to set `fullScreenSwipeEnabled` to `true`
121
+ // so the screen can be dismissed from any point on screen.
122
+ // `customAnimationOnSwipe` needs to be set to `true` so the `stackAnimation` set by user can be used,
123
+ // otherwise `simple_push` will be used.
124
+ // Also, the default animation for this direction seems to be `slide_from_bottom`.
125
+ if (fullScreenSwipeEnabled === undefined) {
126
+ fullScreenSwipeEnabled = true;
127
+ }
128
+
129
+ if (customAnimationOnSwipe === undefined) {
130
+ customAnimationOnSwipe = true;
131
+ }
132
+
133
+ if (stackAnimation === undefined) {
134
+ stackAnimation = 'slide_from_bottom';
135
+ }
136
+ }
137
+
114
138
  if (index === 0) {
115
139
  // first screen should always be treated as `push`, it resolves problems with no header animation
116
140
  // for navigator with first screen as `modal` and the next as `push`
@@ -130,8 +154,11 @@ const RouteView = ({
130
154
  style: StyleSheet.absoluteFill,
131
155
  customAnimationOnSwipe: customAnimationOnSwipe,
132
156
  fullScreenSwipeEnabled: fullScreenSwipeEnabled,
157
+ homeIndicatorHidden: homeIndicatorHidden,
133
158
  gestureEnabled: isAndroid ? false : gestureEnabled,
134
159
  nativeBackButtonDismissalEnabled: nativeBackButtonDismissalEnabled,
160
+ navigationBarColor: navigationBarColor,
161
+ navigationBarHidden: navigationBarHidden,
135
162
  replaceAnimation: replaceAnimation,
136
163
  screenOrientation: screenOrientation,
137
164
  stackAnimation: stackAnimation,
@@ -141,6 +168,8 @@ const RouteView = ({
141
168
  statusBarHidden: statusBarHidden,
142
169
  statusBarStyle: statusBarStyle,
143
170
  statusBarTranslucent: statusBarTranslucent,
171
+ swipeDirection: swipeDirection,
172
+ transitionDuration: transitionDuration,
144
173
  onHeaderBackButtonClicked: () => {
145
174
  navigation.dispatch({ ...StackActions.pop(),
146
175
  source: route.key,