react-native-screens 3.7.1 → 3.10.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 (85) hide show
  1. package/README.md +69 -3
  2. package/android/build.gradle +8 -7
  3. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +71 -0
  4. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
  5. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -1
  7. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +7 -41
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +55 -40
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +19 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +30 -101
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +75 -14
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +13 -4
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +8 -0
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +7 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +1 -0
  16. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +90 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +150 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +40 -0
  19. package/createNativeStackNavigator/README.md +33 -9
  20. package/ios/RNSScreen.h +1 -0
  21. package/ios/RNSScreen.m +35 -0
  22. package/ios/RNSScreenContainer.h +2 -0
  23. package/ios/RNSScreenStack.m +24 -6
  24. package/ios/RNSScreenStackHeaderConfig.m +45 -2
  25. package/ios/RNSScreenWindowTraits.h +5 -0
  26. package/ios/RNSScreenWindowTraits.m +29 -0
  27. package/lib/commonjs/index.js +24 -1
  28. package/lib/commonjs/index.js.map +1 -1
  29. package/lib/commonjs/index.native.js +103 -17
  30. package/lib/commonjs/index.native.js.map +1 -1
  31. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +67 -0
  32. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
  33. package/lib/commonjs/native-stack/views/HeaderConfig.js +46 -4
  34. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  35. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +60 -0
  36. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  37. package/lib/commonjs/reanimated/ReanimatedScreen.js +7 -79
  38. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  39. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +61 -0
  40. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
  41. package/lib/commonjs/reanimated/index.js +2 -2
  42. package/lib/commonjs/reanimated/index.js.map +1 -1
  43. package/lib/commonjs/utils.js +20 -0
  44. package/lib/commonjs/utils.js.map +1 -0
  45. package/lib/module/index.js +5 -0
  46. package/lib/module/index.js.map +1 -1
  47. package/lib/module/index.native.js +99 -19
  48. package/lib/module/index.native.js.map +1 -1
  49. package/lib/module/native-stack/utils/useBackPressSubscription.js +50 -0
  50. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
  51. package/lib/module/native-stack/views/HeaderConfig.js +46 -5
  52. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  53. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +40 -0
  54. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  55. package/lib/module/reanimated/ReanimatedScreen.js +6 -73
  56. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  57. package/lib/module/reanimated/ReanimatedScreenProvider.js +49 -0
  58. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
  59. package/lib/module/reanimated/index.js +1 -1
  60. package/lib/module/reanimated/index.js.map +1 -1
  61. package/lib/module/utils.js +8 -0
  62. package/lib/module/utils.js.map +1 -0
  63. package/lib/typescript/index.d.ts +2 -0
  64. package/lib/typescript/native-stack/types.d.ts +0 -2
  65. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
  66. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
  67. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -2
  68. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
  69. package/lib/typescript/reanimated/index.d.ts +1 -1
  70. package/lib/typescript/types.d.ts +46 -1
  71. package/lib/typescript/utils.d.ts +2 -0
  72. package/native-stack/README.md +35 -7
  73. package/package.json +5 -2
  74. package/src/index.native.tsx +138 -43
  75. package/src/index.tsx +10 -0
  76. package/src/native-stack/types.tsx +0 -2
  77. package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
  78. package/src/native-stack/views/HeaderConfig.tsx +46 -3
  79. package/src/reanimated/ReanimatedNativeStackScreen.tsx +61 -0
  80. package/src/reanimated/ReanimatedScreen.tsx +6 -84
  81. package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
  82. package/src/reanimated/index.tsx +1 -1
  83. package/src/types.tsx +46 -1
  84. package/src/utils.ts +12 -0
  85. package/windows/.gitignore +0 -92
@@ -4,12 +4,18 @@ var _react = _interopRequireDefault(require("react"));
4
4
 
5
5
  var _reactNative = require("react-native");
6
6
 
7
+ var _reactFreeze = require("react-freeze");
8
+
7
9
  var _processColor = _interopRequireDefault(require("react-native/Libraries/StyleSheet/processColor"));
8
10
 
11
+ var _package = require("react-native/package.json");
12
+
9
13
  var _TransitionProgressContext = _interopRequireDefault(require("./TransitionProgressContext"));
10
14
 
11
15
  var _useTransitionProgress = _interopRequireDefault(require("./useTransitionProgress"));
12
16
 
17
+ var _utils = require("./utils");
18
+
13
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
20
 
15
21
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
@@ -26,6 +32,19 @@ function enableScreens(shouldEnableScreens = true) {
26
32
  if (ENABLE_SCREENS && !_reactNative.UIManager.getViewManagerConfig('RNSScreen')) {
27
33
  console.error(`Screen native module hasn't been linked. Please check the react-native-screens README for more details`);
28
34
  }
35
+ }
36
+
37
+ let ENABLE_FREEZE = false;
38
+
39
+ function enableFreeze(shouldEnableReactFreeze = true) {
40
+ const minor = parseInt(_package.version.split('.')[1]); // eg. takes 66 from '0.66.0'
41
+ // react-freeze requires react-native >=0.64, react-native from main is 0.0.0
42
+
43
+ if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {
44
+ console.warn('react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.');
45
+ }
46
+
47
+ ENABLE_FREEZE = shouldEnableReactFreeze;
29
48
  } // const that tells if the library should use new implementation, will be undefined for older versions
30
49
 
31
50
 
@@ -58,7 +77,7 @@ const ScreensNativeModules = {
58
77
  },
59
78
 
60
79
  get NativeScreenNavigationContainer() {
61
- NativeScreenNavigationContainerValue = NativeScreenNavigationContainerValue || (0, _reactNative.requireNativeComponent)('RNSScreenNavigationContainer');
80
+ NativeScreenNavigationContainerValue = NativeScreenNavigationContainerValue || (_reactNative.Platform.OS === 'ios' ? (0, _reactNative.requireNativeComponent)('RNSScreenNavigationContainer') : this.NativeScreenContainer);
62
81
  return NativeScreenNavigationContainerValue;
63
82
  },
64
83
 
@@ -89,6 +108,63 @@ const ScreensNativeModules = {
89
108
 
90
109
  };
91
110
 
111
+ // This component allows one more render before freezing the screen.
112
+ // Allows activityState to reach the native side and useIsFocused to work correctly.
113
+ function DelayedFreeze({
114
+ freeze,
115
+ children
116
+ }) {
117
+ // flag used for determining whether freeze should be enabled
118
+ const [freezeState, setFreezeState] = _react.default.useState(false);
119
+
120
+ if (freeze !== freezeState) {
121
+ // setImmediate is executed at the end of the JS execution block.
122
+ // Used here for changing the state right after the render.
123
+ setImmediate(() => {
124
+ setFreezeState(freeze);
125
+ });
126
+ }
127
+
128
+ return /*#__PURE__*/_react.default.createElement(_reactFreeze.Freeze, {
129
+ freeze: freeze ? freezeState : false
130
+ }, children);
131
+ }
132
+
133
+ function MaybeFreeze({
134
+ freeze,
135
+ children
136
+ }) {
137
+ if (ENABLE_FREEZE) {
138
+ return /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
139
+ freeze: freeze
140
+ }, children);
141
+ } else {
142
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
143
+ }
144
+ }
145
+
146
+ function ScreenStack(props) {
147
+ if (ENABLE_FREEZE) {
148
+ const {
149
+ children,
150
+ ...rest
151
+ } = props;
152
+
153
+ const size = _react.default.Children.count(children); // freezes all screens except the top one
154
+
155
+
156
+ const childrenWithFreeze = _react.default.Children.map(children, (child, index) => /*#__PURE__*/_react.default.createElement(DelayedFreeze, {
157
+ freeze: size - index > 1
158
+ }, child));
159
+
160
+ return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, rest, childrenWithFreeze);
161
+ }
162
+
163
+ return /*#__PURE__*/_react.default.createElement(ScreensNativeModules.NativeScreenStack, props);
164
+ } // Incomplete type, all accessible properties available at:
165
+ // react-native/Libraries/Components/View/ReactNativeViewViewConfig.js
166
+
167
+
92
168
  class Screen extends _react.default.Component {
93
169
  constructor(...args) {
94
170
  super(...args);
@@ -141,10 +217,24 @@ class Screen extends _react.default.Component {
141
217
  }
142
218
 
143
219
  const processedColor = (0, _processColor.default)(statusBarColor);
144
- return /*#__PURE__*/_react.default.createElement(AnimatedNativeScreen, _extends({}, props, {
220
+ return /*#__PURE__*/_react.default.createElement(MaybeFreeze, {
221
+ freeze: activityState === 0
222
+ }, /*#__PURE__*/_react.default.createElement(AnimatedNativeScreen, _extends({}, props, {
145
223
  statusBarColor: processedColor,
146
- activityState: activityState,
147
- ref: this.setRef,
224
+ activityState: activityState // This prevents showing blank screen when navigating between multiple screens with freezing
225
+ // https://github.com/software-mansion/react-native-screens/pull/1208
226
+ ,
227
+ ref: ref => {
228
+ var _ref$viewConfig, _ref$viewConfig$valid;
229
+
230
+ if (ref !== null && ref !== void 0 && (_ref$viewConfig = ref.viewConfig) !== null && _ref$viewConfig !== void 0 && (_ref$viewConfig$valid = _ref$viewConfig.validAttributes) !== null && _ref$viewConfig$valid !== void 0 && _ref$viewConfig$valid.style) {
231
+ ref.viewConfig.validAttributes.style = { ...ref.viewConfig.validAttributes.style,
232
+ display: false
233
+ };
234
+ }
235
+
236
+ this.setRef(ref);
237
+ },
148
238
  onTransitionProgress: !isNativeStack ? undefined : _reactNative.Animated.event([{
149
239
  nativeEvent: {
150
240
  progress: this.progress,
@@ -161,7 +251,7 @@ class Screen extends _react.default.Component {
161
251
  closing: this.closing,
162
252
  goingForward: this.goingForward
163
253
  }
164
- }, children));
254
+ }, children)));
165
255
  } else {
166
256
  // same reason as above
167
257
  let {
@@ -255,6 +345,7 @@ module.exports = {
255
345
  Screen,
256
346
  ScreenContainer,
257
347
  ScreenContext,
348
+ ScreenStack,
258
349
 
259
350
  get NativeScreen() {
260
351
  return ScreensNativeModules.NativeScreen;
@@ -265,15 +356,7 @@ module.exports = {
265
356
  },
266
357
 
267
358
  get NativeScreenNavigationContainer() {
268
- if (_reactNative.Platform.OS === 'ios') {
269
- return ScreensNativeModules.NativeScreenNavigationContainer;
270
- }
271
-
272
- return ScreensNativeModules.NativeScreenContainer;
273
- },
274
-
275
- get ScreenStack() {
276
- return ScreensNativeModules.NativeScreenStack;
359
+ return ScreensNativeModules.NativeScreenNavigationContainer;
277
360
  },
278
361
 
279
362
  get ScreenStackHeaderConfig() {
@@ -285,8 +368,8 @@ module.exports = {
285
368
  },
286
369
 
287
370
  get SearchBar() {
288
- if (_reactNative.Platform.OS !== 'ios') {
289
- console.warn('Importing SearchBar is only valid on iOS devices.');
371
+ if (!_utils.isSearchBarAvailableForCurrentPlatform) {
372
+ console.warn('Importing SearchBar is only valid on iOS and Android devices.');
290
373
  return _reactNative.View;
291
374
  }
292
375
 
@@ -310,8 +393,11 @@ module.exports = {
310
393
  ScreenStackHeaderCenterView,
311
394
  ScreenStackHeaderSearchBarView,
312
395
  enableScreens,
396
+ enableFreeze,
313
397
  screensEnabled,
314
398
  shouldUseActivityState,
315
- useTransitionProgress: _useTransitionProgress.default
399
+ useTransitionProgress: _useTransitionProgress.default,
400
+ isSearchBarAvailableForCurrentPlatform: _utils.isSearchBarAvailableForCurrentPlatform,
401
+ executeNativeBackPress: _utils.executeNativeBackPress
316
402
  };
317
403
  //# sourceMappingURL=index.native.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","Screen","React","Component","Animated","Value","ref","props","onComponentRef","setNativeProps","render","enabled","rest","createAnimatedComponent","active","activityState","children","isNativeStack","statusBarColor","undefined","warn","processedColor","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","style","display","ScreenContainer","hasTwoStates","styles","StyleSheet","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStack","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","View","FullWindowOverlay","useTransitionProgress"],"mappings":";;AAAA;;AACA;;AAaA;;AAEA;;AACA;;;;;;;;AAeA;AACA,MAAMA,mBAAmB,GACvBC,sBAASC,EAAT,KAAgB,KAAhB,IACAD,sBAASC,EAAT,KAAgB,SADhB,IAEAD,sBAASC,EAAT,KAAgB,SAHlB;AAKA,IAAIC,cAAc,GAAGH,mBAArB;;AAEA,SAASI,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AACvDF,EAAAA,cAAc,GAAGH,mBAAmB,IAAIK,mBAAxC;;AACA,MAAIF,cAAc,IAAI,CAACG,uBAAUC,oBAAV,CAA+B,WAA/B,CAAvB,EAAoE;AAClEC,IAAAA,OAAO,CAACC,KAAR,CACG,wGADH;AAGD;AACF,C,CAED;;;AACA,MAAMC,sBAAsB,GAAG,IAA/B;;AAEA,SAASC,cAAT,GAAmC;AACjC,SAAOR,cAAP;AACD,C,CAED;AACA;;;AACA,IAAIS,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,IAAI,yCAAuB,WAAvB,CADvB;AAEA,WAAOA,iBAAP;AACD,GAL0B;;AAO3B,MAAIW,qBAAJ,GAA4B;AAC1BV,IAAAA,0BAA0B,GACxBA,0BAA0B,IAC1B,yCAAuB,oBAAvB,CAFF;AAGA,WAAOA,0BAAP;AACD,GAZ0B;;AAc3B,MAAIW,+BAAJ,GAAsC;AACpCV,IAAAA,oCAAoC,GAClCA,oCAAoC,IACpC,yCAAuB,8BAAvB,CAFF;AAGA,WAAOA,oCAAP;AACD,GAnB0B;;AAqB3B,MAAIC,iBAAJ,GAAwB;AACtBA,IAAAA,iBAAiB,GACfA,iBAAiB,IAAI,yCAAuB,gBAAvB,CADvB;AAEA,WAAOA,iBAAP;AACD,GAzB0B;;AA2B3B,MAAIC,6BAAJ,GAAoC;AAClCA,IAAAA,6BAA6B,GAC3BA,6BAA6B,IAC7B,yCAAuB,4BAAvB,CAFF;AAGA,WAAOA,6BAAP;AACD,GAhC0B;;AAkC3B,MAAIC,8BAAJ,GAAqC;AACnCA,IAAAA,8BAA8B,GAC5BA,8BAA8B,IAC9B,yCAAuB,6BAAvB,CAFF;AAGA,WAAOA,8BAAP;AACD,GAvC0B;;AAyC3B,MAAIE,eAAJ,GAAsB;AACpBA,IAAAA,eAAe,GAAGA,eAAe,IAAI,yCAAuB,cAAvB,CAArC;AACA,WAAOA,eAAP;AACD,GA5C0B;;AA8C3B,MAAIC,uBAAJ,GAA8B;AAC5BA,IAAAA,uBAAuB,GACrBA,uBAAuB,IAAI,yCAAuB,sBAAvB,CAD7B;AAEA,WAAOA,uBAAP;AACD;;AAlD0B,CAA7B;;AAqDA,MAAMK,MAAN,SAAqBC,eAAMC,SAA3B,CAAkD;AAAA;AAAA;;AAAA,iCACI,IADJ;;AAAA,qCAE9B,IAAIC,sBAASC,KAAb,CAAmB,CAAnB,CAF8B;;AAAA,sCAG7B,IAAID,sBAASC,KAAb,CAAmB,CAAnB,CAH6B;;AAAA,0CAIzB,IAAID,sBAASC,KAAb,CAAmB,CAAnB,CAJyB;;AAAA,oCAUtCC,GAAD,IAAqD;AAAA;;AAC5D,WAAKA,GAAL,GAAWA,GAAX;AACA,mDAAKC,KAAL,EAAWC,cAAX,kGAA4BF,GAA5B;AACD,KAb+C;AAAA;;AAMhDG,EAAAA,cAAc,CAACF,KAAD,EAA2B;AAAA;;AACvC,sBAAKD,GAAL,wDAAUG,cAAV,CAAyBF,KAAzB;AACD;;AAODG,EAAAA,MAAM,GAAG;AACP,UAAM;AAAEC,MAAAA,OAAO,GAAGhC,cAAZ;AAA4B,SAAGiC;AAA/B,QAAwC,KAAKL,KAAnD;;AAEA,QAAII,OAAO,IAAInC,mBAAf,EAAoC;AAClCkB,MAAAA,oBAAoB,GAClBA,oBAAoB,IACpBU,sBAASS,uBAAT,CAAiChB,oBAAoB,CAACC,YAAtD,CAFF;AAIA,UAAI;AACF;AACA;AACA;AACAgB,QAAAA,MAJE;AAKFC,QAAAA,aALE;AAMFC,QAAAA,QANE;AAOFC,QAAAA,aAPE;AAQFC,QAAAA,cARE;AASF,WAAGX;AATD,UAUAK,IAVJ;;AAYA,UAAIE,MAAM,KAAKK,SAAX,IAAwBJ,aAAa,KAAKI,SAA9C,EAAyD;AACvDnC,QAAAA,OAAO,CAACoC,IAAR,CACE,+QADF;AAGAL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CAJuD,CAIjB;AACvC;;AAED,YAAMO,cAAc,GAAG,2BAAaH,cAAb,CAAvB;AAEA,0BACE,6BAAC,oBAAD,eACMX,KADN;AAEE,QAAA,cAAc,EAAEc,cAFlB;AAGE,QAAA,aAAa,EAAEN,aAHjB;AAIE,QAAA,GAAG,EAAE,KAAKO,MAJZ;AAKE,QAAA,oBAAoB,EAClB,CAACL,aAAD,GACIE,SADJ,GAEIf,sBAASmB,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;AARR,UAqBG,CAACX,aAAD,GAAmB;AAClBD,MAAAA,QADD,gBAGC,6BAAC,kCAAD,CAA2B,QAA3B;AACE,QAAA,KAAK,EAAE;AACLS,UAAAA,QAAQ,EAAE,KAAKA,QADV;AAELC,UAAAA,OAAO,EAAE,KAAKA,OAFT;AAGLC,UAAAA,YAAY,EAAE,KAAKA;AAHd;AADT,SAMGX,QANH,CAxBJ,CADF;AAoCD,KA9DD,MA8DO;AACL;AACA,UAAI;AACFF,QAAAA,MADE;AAEFC,QAAAA,aAFE;AAGFc,QAAAA,KAHE;AAIF;AACArB,QAAAA,cALE;AAMF,WAAGD;AAND,UAOAK,IAPJ;;AASA,UAAIE,MAAM,KAAKK,SAAX,IAAwBJ,aAAa,KAAKI,SAA9C,EAAyD;AACvDJ,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC;AACD;;AACD,0BACE,6BAAC,qBAAD,CAAU,IAAV;AACE,QAAA,KAAK,EAAE,CAACe,KAAD,EAAQ;AAAEC,UAAAA,OAAO,EAAEf,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR,CADT;AAEE,QAAA,GAAG,EAAE,KAAKO;AAFZ,SAGMf,KAHN,EADF;AAOD;AACF;;AAtG+C;;AAyGlD,SAASwB,eAAT,CAAyBxB,KAAzB,EAAsD;AACpD,QAAM;AAAEI,IAAAA,OAAO,GAAGhC,cAAZ;AAA4BqD,IAAAA,YAA5B;AAA0C,OAAGpB;AAA7C,MAAsDL,KAA5D;;AAEA,MAAII,OAAO,IAAInC,mBAAf,EAAoC;AAClC,QAAIwD,YAAJ,EAAkB;AAChB,0BAAO,6BAAC,oBAAD,CAAsB,+BAAtB,EAA0DpB,IAA1D,CAAP;AACD;;AACD,wBAAO,6BAAC,oBAAD,CAAsB,qBAAtB,EAAgDA,IAAhD,CAAP;AACD;;AACD,sBAAO,6BAAC,iBAAD,EAAUA,IAAV,CAAP;AACD;;AAED,MAAMqB,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,aAAa,EAAE;AACbC,IAAAA,QAAQ,EAAE,UADG;AAEbC,IAAAA,GAAG,EAAE,CAFQ;AAGbC,IAAAA,KAAK,EAAE,CAHM;AAIbC,IAAAA,aAAa,EAAE,KAJF;AAKbC,IAAAA,UAAU,EAAE,QALC;AAMbC,IAAAA,cAAc,EAAE;AANH;AADgB,CAAlB,CAAf;;AAWA,MAAMC,gCAAgC,GAAIpC,KAAD,iBACvC,6BAAC,oBAAD,CAAsB,8BAAtB;AACE,EAAA,IAAI,EAAC,MADP;AAEE,EAAA,KAAK,EAAE0B,MAAM,CAACG;AAFhB,gBAGE,6BAAC,kBAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgD7B,KAAhD,EAHF,CADF;;AAQA,MAAMqC,0BAA0B,GAC9BrC,KADiC,iBAGjC,6BAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,OAFP;AAGE,EAAA,KAAK,EAAE0B,MAAM,CAACG;AAHhB,GAHF;;AAUA,MAAMS,yBAAyB,GAC7BtC,KADgC,iBAGhC,6BAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,MAFP;AAGE,EAAA,KAAK,EAAE0B,MAAM,CAACG;AAHhB,GAHF;;AAUA,MAAMU,2BAA2B,GAC/BvC,KADkC,iBAGlC,6BAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,QAFP;AAGE,EAAA,KAAK,EAAE0B,MAAM,CAACG;AAHhB,GAHF;;AAUA,MAAMW,8BAA8B,GAClCxC,KADqC,iBAGrC,6BAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,WAFP;AAGE,EAAA,KAAK,EAAE0B,MAAM,CAACG;AAHhB,GAHF;;AAwBA;AACA;AACA,MAAMY,aAAa,gBAAG9C,eAAM+C,aAAN,CAAoBhD,MAApB,CAAtB;;AAEAiD,MAAM,CAACC,OAAP,GAAiB;AACf;AACA;AACAlD,EAAAA,MAHe;AAIf8B,EAAAA,eAJe;AAKfiB,EAAAA,aALe;;AAOf,MAAIlD,YAAJ,GAAmB;AACjB,WAAOD,oBAAoB,CAACC,YAA5B;AACD,GATc;;AAWf,MAAIC,qBAAJ,GAA4B;AAC1B,WAAOF,oBAAoB,CAACE,qBAA5B;AACD,GAbc;;AAef,MAAIC,+BAAJ,GAAsC;AACpC,QAAIvB,sBAASC,EAAT,KAAgB,KAApB,EAA2B;AACzB,aAAOmB,oBAAoB,CAACG,+BAA5B;AACD;;AACD,WAAOH,oBAAoB,CAACE,qBAA5B;AACD,GApBc;;AAsBf,MAAIqD,WAAJ,GAAkB;AAChB,WAAOvD,oBAAoB,CAACN,iBAA5B;AACD,GAxBc;;AAyBf,MAAI8D,uBAAJ,GAA8B;AAC5B,WAAOxD,oBAAoB,CAACL,6BAA5B;AACD,GA3Bc;;AA4Bf,MAAI8D,wBAAJ,GAA+B;AAC7B,WAAOzD,oBAAoB,CAACJ,8BAA5B;AACD,GA9Bc;;AA+Bf,MAAI8D,SAAJ,GAAgB;AACd,QAAI9E,sBAASC,EAAT,KAAgB,KAApB,EAA2B;AACzBM,MAAAA,OAAO,CAACoC,IAAR,CAAa,mDAAb;AACA,aAAOoC,iBAAP;AACD;;AAED,WAAO3D,oBAAoB,CAACF,eAA5B;AACD,GAtCc;;AAuCf,MAAI8D,iBAAJ,GAAwB;AACtB,QAAIhF,sBAASC,EAAT,KAAgB,KAApB,EAA2B;AACzBM,MAAAA,OAAO,CAACoC,IAAR,CAAa,2DAAb;AACA,aAAOoC,iBAAP;AACD;;AAED,WAAO3D,oBAAoB,CAACD,uBAA5B;AACD,GA9Cc;;AA+Cf;AACA;AACA+C,EAAAA,gCAjDe;AAkDfC,EAAAA,0BAlDe;AAmDfC,EAAAA,yBAnDe;AAoDfC,EAAAA,2BApDe;AAqDfC,EAAAA,8BArDe;AAuDfnE,EAAAA,aAvDe;AAwDfO,EAAAA,cAxDe;AAyDfD,EAAAA,sBAzDe;AA0DfwE,EAAAA,qBAAqB,EAArBA;AA1De,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';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n requireNativeComponent('RNSScreenNavigationContainer');\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n statusBarColor,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const processedColor = processColor(statusBarColor);\n\n return (\n <AnimatedNativeScreen\n {...props}\n statusBarColor={processedColor}\n activityState={activityState}\n ref={this.setRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n if (Platform.OS === 'ios') {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n }\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get ScreenStack() {\n return ScreensNativeModules.NativeScreenStack;\n },\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing SearchBar is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n};\n"]}
1
+ {"version":3,"sources":["index.native.tsx"],"names":["isPlatformSupported","Platform","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","UIManager","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","version","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","DelayedFreeze","freeze","children","freezeState","setFreezeState","React","useState","setImmediate","MaybeFreeze","ScreenStack","props","rest","size","Children","count","childrenWithFreeze","map","child","index","Screen","Component","Animated","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","statusBarColor","undefined","processedColor","viewConfig","validAttributes","style","display","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","ScreenContainer","hasTwoStates","styles","StyleSheet","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","isSearchBarAvailableForCurrentPlatform","View","FullWindowOverlay","useTransitionProgress","executeNativeBackPress"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction MaybeFreeze({ freeze, children }: FreezeWrapperProps) {\n if (ENABLE_FREEZE) {\n return <DelayedFreeze freeze={freeze}>{children}</DelayedFreeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => (\n <DelayedFreeze freeze={size - index > 1}>{child}</DelayedFreeze>\n ));\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n statusBarColor,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const processedColor = processColor(statusBarColor);\n\n return (\n <MaybeFreeze freeze={activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n statusBarColor={processedColor}\n activityState={activityState}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={(ref: ViewConfig) => {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n }\n this.setRef(ref);\n }}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </MaybeFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useBackPressSubscription = useBackPressSubscription;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ /**
15
+ * This hook is an abstraction for keeping back press subscription
16
+ * logic in one place.
17
+ */
18
+ function useBackPressSubscription({
19
+ onBackPress,
20
+ isDisabled
21
+ }) {
22
+ const [isActive, setIsActive] = _react.default.useState(false);
23
+
24
+ const subscription = _react.default.useRef();
25
+
26
+ const clearSubscription = _react.default.useCallback((shouldSetActive = true) => {
27
+ var _subscription$current;
28
+
29
+ (_subscription$current = subscription.current) === null || _subscription$current === void 0 ? void 0 : _subscription$current.remove();
30
+ subscription.current = undefined;
31
+ if (shouldSetActive) setIsActive(false);
32
+ }, []);
33
+
34
+ const createSubscription = _react.default.useCallback(() => {
35
+ if (!isDisabled) {
36
+ var _subscription$current2;
37
+
38
+ (_subscription$current2 = subscription.current) === null || _subscription$current2 === void 0 ? void 0 : _subscription$current2.remove();
39
+ subscription.current = _reactNative.BackHandler.addEventListener('hardwareBackPress', onBackPress);
40
+ setIsActive(true);
41
+ }
42
+ }, [isDisabled, onBackPress]);
43
+
44
+ const handleAttached = _react.default.useCallback(() => {
45
+ if (isActive) {
46
+ createSubscription();
47
+ }
48
+ }, [createSubscription, isActive]);
49
+
50
+ const handleDetached = _react.default.useCallback(() => {
51
+ clearSubscription(false);
52
+ }, [clearSubscription]);
53
+
54
+ _react.default.useEffect(() => {
55
+ if (isDisabled) {
56
+ clearSubscription();
57
+ }
58
+ }, [isDisabled, clearSubscription]);
59
+
60
+ return {
61
+ handleAttached,
62
+ handleDetached,
63
+ createSubscription,
64
+ clearSubscription
65
+ };
66
+ }
67
+ //# sourceMappingURL=useBackPressSubscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useBackPressSubscription.tsx"],"names":["useBackPressSubscription","onBackPress","isDisabled","isActive","setIsActive","React","useState","subscription","useRef","clearSubscription","useCallback","shouldSetActive","current","remove","undefined","createSubscription","BackHandler","addEventListener","handleAttached","handleDetached","useEffect"],"mappings":";;;;;;;AAAA;;AACA;;;;AAcA;AACA;AACA;AACA;AACO,SAASA,wBAAT,CAAkC;AACvCC,EAAAA,WADuC;AAEvCC,EAAAA;AAFuC,CAAlC,EAG4B;AACjC,QAAM,CAACC,QAAD,EAAWC,WAAX,IAA0BC,eAAMC,QAAN,CAAe,KAAf,CAAhC;;AACA,QAAMC,YAAY,GAAGF,eAAMG,MAAN,EAArB;;AAEA,QAAMC,iBAAiB,GAAGJ,eAAMK,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,EAAqBP,WAAW,CAAC,KAAD,CAAX;AACtB,GAJyB,EAIvB,EAJuB,CAA1B;;AAMA,QAAMW,kBAAkB,GAAGV,eAAMK,WAAN,CAAkB,MAAM;AACjD,QAAI,CAACR,UAAL,EAAiB;AAAA;;AACf,gCAAAK,YAAY,CAACK,OAAb,kFAAsBC,MAAtB;AACAN,MAAAA,YAAY,CAACK,OAAb,GAAuBI,yBAAYC,gBAAZ,CACrB,mBADqB,EAErBhB,WAFqB,CAAvB;AAIAG,MAAAA,WAAW,CAAC,IAAD,CAAX;AACD;AACF,GAT0B,EASxB,CAACF,UAAD,EAAaD,WAAb,CATwB,CAA3B;;AAWA,QAAMiB,cAAc,GAAGb,eAAMK,WAAN,CAAkB,MAAM;AAC7C,QAAIP,QAAJ,EAAc;AACZY,MAAAA,kBAAkB;AACnB;AACF,GAJsB,EAIpB,CAACA,kBAAD,EAAqBZ,QAArB,CAJoB,CAAvB;;AAMA,QAAMgB,cAAc,GAAGd,eAAMK,WAAN,CAAkB,MAAM;AAC7CD,IAAAA,iBAAiB,CAAC,KAAD,CAAjB;AACD,GAFsB,EAEpB,CAACA,iBAAD,CAFoB,CAAvB;;AAIAJ,iBAAMe,SAAN,CAAgB,MAAM;AACpB,QAAIlB,UAAJ,EAAgB;AACdO,MAAAA,iBAAiB;AAClB;AACF,GAJD,EAIG,CAACP,UAAD,EAAaO,iBAAb,CAJH;;AAMA,SAAO;AACLS,IAAAA,cADK;AAELC,IAAAA,cAFK;AAGLJ,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"]}
@@ -13,6 +13,8 @@ var _reactNative = require("react-native");
13
13
 
14
14
  var _reactNativeScreens = require("react-native-screens");
15
15
 
16
+ var _useBackPressSubscription = require("../utils/useBackPressSubscription");
17
+
16
18
  var _FontProcessor = require("./FontProcessor");
17
19
 
18
20
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
@@ -50,8 +52,46 @@ function HeaderConfig({
50
52
  const {
51
53
  colors
52
54
  } = (0, _native.useTheme)();
53
- const tintColor = headerTintColor !== null && headerTintColor !== void 0 ? headerTintColor : colors.primary;
54
- const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = (0, _FontProcessor.processFonts)([headerBackTitleStyle.fontFamily, headerLargeTitleStyle.fontFamily, headerTitleStyle.fontFamily]);
55
+ 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.
56
+ // Because screens are usually used with react-navigation and this library overrides back button
57
+ // we need to handle it first in case when search bar is open
58
+
59
+ const {
60
+ handleAttached,
61
+ handleDetached,
62
+ clearSubscription,
63
+ createSubscription
64
+ } = (0, _useBackPressSubscription.useBackPressSubscription)({
65
+ onBackPress: _reactNativeScreens.executeNativeBackPress,
66
+ isDisabled: !searchBar || !!searchBar.disableBackButtonOverride
67
+ });
68
+ const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = (0, _FontProcessor.processFonts)([headerBackTitleStyle.fontFamily, headerLargeTitleStyle.fontFamily, headerTitleStyle.fontFamily]); // We want to clear clearSubscription only when components unmounts or search bar changes
69
+
70
+ React.useEffect(() => clearSubscription, [searchBar]);
71
+ const processedSearchBarOptions = React.useMemo(() => {
72
+ if (_reactNative.Platform.OS === 'android' && searchBar && !searchBar.disableBackButtonOverride) {
73
+ const onFocus = (...args) => {
74
+ var _searchBar$onFocus;
75
+
76
+ createSubscription();
77
+ (_searchBar$onFocus = searchBar.onFocus) === null || _searchBar$onFocus === void 0 ? void 0 : _searchBar$onFocus.call(searchBar, ...args);
78
+ };
79
+
80
+ const onClose = (...args) => {
81
+ var _searchBar$onClose;
82
+
83
+ clearSubscription();
84
+ (_searchBar$onClose = searchBar.onClose) === null || _searchBar$onClose === void 0 ? void 0 : _searchBar$onClose.call(searchBar, ...args);
85
+ };
86
+
87
+ return { ...searchBar,
88
+ onFocus,
89
+ onClose
90
+ };
91
+ }
92
+
93
+ return searchBar;
94
+ }, [searchBar, createSubscription, clearSubscription]);
55
95
  return /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderConfig, {
56
96
  backButtonInCustomView: backButtonInCustomView,
57
97
  backgroundColor: headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card,
@@ -78,7 +118,9 @@ function HeaderConfig({
78
118
  titleFontSize: headerTitleStyle.fontSize,
79
119
  titleFontWeight: headerTitleStyle.fontWeight,
80
120
  topInsetEnabled: headerTopInsetEnabled,
81
- translucent: headerTranslucent === true
121
+ translucent: headerTranslucent === true,
122
+ onAttached: handleAttached,
123
+ onDetached: handleDetached
82
124
  }, headerRight !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderRightView, null, headerRight({
83
125
  tintColor
84
126
  })) : null, backButtonImage !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderBackButtonImage, {
@@ -88,6 +130,6 @@ function HeaderConfig({
88
130
  tintColor
89
131
  })) : null, headerCenter !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderCenterView, null, headerCenter({
90
132
  tintColor
91
- })) : null, _reactNative.Platform.OS === 'ios' && searchBar !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderSearchBarView, null, /*#__PURE__*/React.createElement(_reactNativeScreens.SearchBar, searchBar)) : null);
133
+ })) : null, _reactNativeScreens.isSearchBarAvailableForCurrentPlatform && processedSearchBarOptions !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderSearchBarView, null, /*#__PURE__*/React.createElement(_reactNativeScreens.SearchBar, processedSearchBarOptions)) : null);
92
134
  }
93
135
  //# sourceMappingURL=HeaderConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["HeaderConfig.tsx"],"names":["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","Platform","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":["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","executeNativeBackPress","isDisabled","disableBackButtonOverride","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","React","useEffect","processedSearchBarOptions","useMemo","Platform","OS","onFocus","args","onClose","backgroundColor","card","fontSize","blurEffect","color","fontWeight","undefined","name","text","isSearchBarAvailableForCurrentPlatform"],"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 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"]}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ var _reactNativeScreens = require("react-native-screens");
13
+
14
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
15
+
16
+ var _ReanimatedTransitionProgressContext = _interopRequireDefault(require("./ReanimatedTransitionProgressContext"));
17
+
18
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
19
+
20
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
25
+
26
+ const AnimatedScreen = _reactNativeReanimated.default.createAnimatedComponent(_reactNativeScreens.Screen);
27
+
28
+ const ReanimatedNativeStackScreen = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
29
+ const {
30
+ children,
31
+ ...rest
32
+ } = props;
33
+ const progress = (0, _reactNativeReanimated.useSharedValue)(0);
34
+ const closing = (0, _reactNativeReanimated.useSharedValue)(0);
35
+ const goingForward = (0, _reactNativeReanimated.useSharedValue)(0);
36
+ return /*#__PURE__*/_react.default.createElement(AnimatedScreen // @ts-ignore some problems with ref and onTransitionProgressReanimated being "fake" prop for parsing of `useEvent` return value
37
+ , _extends({
38
+ ref: ref,
39
+ onTransitionProgressReanimated: (0, _reactNativeReanimated.useEvent)(event => {
40
+ 'worklet';
41
+
42
+ progress.value = event.progress;
43
+ closing.value = event.closing;
44
+ goingForward.value = event.goingForward;
45
+ }, [// This should not be necessary, but is not properly managed by `react-native-reanimated`
46
+ // @ts-ignore wrong type
47
+ _reactNative.Platform.OS === 'android' ? 'onTransitionProgress' : 'topTransitionProgress'])
48
+ }, rest), /*#__PURE__*/_react.default.createElement(_ReanimatedTransitionProgressContext.default.Provider, {
49
+ value: {
50
+ progress: progress,
51
+ closing: closing,
52
+ goingForward: goingForward
53
+ }
54
+ }, children));
55
+ });
56
+
57
+ ReanimatedNativeStackScreen.displayName = 'ReanimatedNativeStackScreen';
58
+ var _default = ReanimatedNativeStackScreen;
59
+ exports.default = _default;
60
+ //# sourceMappingURL=ReanimatedNativeStackScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ReanimatedNativeStackScreen.tsx"],"names":["AnimatedScreen","Animated","createAnimatedComponent","Screen","ReanimatedNativeStackScreen","React","forwardRef","props","ref","children","rest","progress","closing","goingForward","event","value","Platform","OS","displayName"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAOA;;AACA;;;;;;;;;;AAEA,MAAMA,cAAc,GAAGC,+BAASC,uBAAT,CACpBC,0BADoB,CAAvB;;AAIA,MAAMC,2BAA2B,gBAAGC,eAAMC,UAAN,CAGlC,CAACC,KAAD,EAAQC,GAAR,KAAgB;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAY,OAAGC;AAAf,MAAwBH,KAA9B;AAEA,QAAMI,QAAQ,GAAG,2CAAe,CAAf,CAAjB;AACA,QAAMC,OAAO,GAAG,2CAAe,CAAf,CAAhB;AACA,QAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AAEA,sBACE,6BAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEL,GAFP;AAGE,IAAA,8BAA8B,EAAE,qCAC7BM,KAAD,IAAwC;AACtC;;AACAH,MAAAA,QAAQ,CAACI,KAAT,GAAiBD,KAAK,CAACH,QAAvB;AACAC,MAAAA,OAAO,CAACG,KAAR,GAAgBD,KAAK,CAACF,OAAtB;AACAC,MAAAA,YAAY,CAACE,KAAb,GAAqBD,KAAK,CAACD,YAA3B;AACD,KAN6B,EAO9B,CACE;AACA;AACAG,0BAASC,EAAT,KAAgB,SAAhB,GACI,sBADJ,GAEI,uBALN,CAP8B;AAHlC,KAkBMP,IAlBN,gBAmBE,6BAAC,4CAAD,CAAqC,QAArC;AACE,IAAA,KAAK,EAAE;AACLC,MAAAA,QAAQ,EAAEA,QADL;AAELC,MAAAA,OAAO,EAAEA,OAFJ;AAGLC,MAAAA,YAAY,EAAEA;AAHT;AADT,KAMGJ,QANH,CAnBF,CADF;AA8BD,CAxCmC,CAApC;;AA0CAL,2BAA2B,CAACc,WAA5B,GAA0C,6BAA1C;eAEed,2B","sourcesContent":["import React from 'react';\nimport { Platform } from 'react-native';\nimport {\n Screen,\n ScreenProps,\n TransitionProgressEventType,\n} from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated, { useEvent, useSharedValue } from 'react-native-reanimated';\nimport ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\nconst ReanimatedNativeStackScreen = React.forwardRef<\n typeof AnimatedScreen,\n ScreenProps\n>((props, ref) => {\n const { children, ...rest } = props;\n\n const progress = useSharedValue(0);\n const closing = useSharedValue(0);\n const goingForward = useSharedValue(0);\n\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n onTransitionProgressReanimated={useEvent(\n (event: TransitionProgressEventType) => {\n 'worklet';\n progress.value = event.progress;\n closing.value = event.closing;\n goingForward.value = event.goingForward;\n },\n [\n // This should not be necessary, but is not properly managed by `react-native-reanimated`\n // @ts-ignore wrong type\n Platform.OS === 'android'\n ? 'onTransitionProgress'\n : 'topTransitionProgress',\n ]\n )}\n {...rest}>\n <ReanimatedTransitionProgressContext.Provider\n value={{\n progress: progress,\n closing: closing,\n goingForward: goingForward,\n }}>\n {children}\n </ReanimatedTransitionProgressContext.Provider>\n </AnimatedScreen>\n );\n});\n\nReanimatedNativeStackScreen.displayName = 'ReanimatedNativeStackScreen';\n\nexport default ReanimatedNativeStackScreen;\n"]}