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
@@ -3,100 +3,28 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = ReanimatedScreenProvider;
6
+ exports.default = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
10
- var _reactNative = require("react-native");
11
-
12
10
  var _reactNativeScreens = require("react-native-screens");
13
11
 
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; }
12
+ var _reactNativeReanimated = _interopRequireDefault(require("react-native-reanimated"));
21
13
 
22
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
15
 
24
16
  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
17
 
26
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
27
-
28
18
  const AnimatedScreen = _reactNativeReanimated.default.createAnimatedComponent(_reactNativeScreens.Screen);
29
19
 
30
- class ReanimatedScreenWrapper extends _react.default.Component {
31
- constructor(...args) {
32
- super(...args);
33
-
34
- _defineProperty(this, "ref", null);
35
-
36
- _defineProperty(this, "setRef", ref => {
37
- var _this$props$onCompone, _this$props;
38
-
39
- this.ref = ref;
40
- (_this$props$onCompone = (_this$props = this.props).onComponentRef) === null || _this$props$onCompone === void 0 ? void 0 : _this$props$onCompone.call(_this$props, ref);
41
- });
42
- }
43
-
44
- setNativeProps(props) {
45
- var _this$ref;
46
-
47
- (_this$ref = this.ref) === null || _this$ref === void 0 ? void 0 : _this$ref.setNativeProps(props);
48
- }
49
-
50
- render() {
51
- return /*#__PURE__*/_react.default.createElement(ReanimatedScreen, _extends({}, this.props, {
52
- // @ts-ignore some problems with ref
53
- ref: this.setRef
54
- }));
55
- }
56
-
57
- }
58
-
59
20
  const ReanimatedScreen = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
60
- const {
61
- children,
62
- ...rest
63
- } = props;
64
- const progress = (0, _reactNativeReanimated.useSharedValue)(0);
65
- const closing = (0, _reactNativeReanimated.useSharedValue)(0);
66
- const goingForward = (0, _reactNativeReanimated.useSharedValue)(0);
67
21
  return /*#__PURE__*/_react.default.createElement(AnimatedScreen // @ts-ignore some problems with ref and onTransitionProgressReanimated being "fake" prop for parsing of `useEvent` return value
68
22
  , _extends({
69
- ref: ref // ReanimatedScreen.tsx should only be used by Screens of native-stack, but it always better to check
70
- ,
71
- onTransitionProgressReanimated: !props.isNativeStack ? undefined : (0, _reactNativeReanimated.useEvent)(event => {
72
- 'worklet';
73
-
74
- progress.value = event.progress;
75
- closing.value = event.closing;
76
- goingForward.value = event.goingForward;
77
- }, [// This should not be necessary, but is not properly managed by `react-native-reanimated`
78
- // @ts-ignore wrong type
79
- _reactNative.Platform.OS === 'android' ? 'onTransitionProgress' : 'topTransitionProgress'])
80
- }, rest), !props.isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
81
- children : /*#__PURE__*/_react.default.createElement(_ReanimatedTransitionProgressContext.default.Provider, {
82
- value: {
83
- progress: progress,
84
- closing: closing,
85
- goingForward: goingForward
86
- }
87
- }, children));
88
- }); // used to silence error "Component definition is missing display name"
89
-
23
+ ref: ref
24
+ }, props));
25
+ });
90
26
 
91
27
  ReanimatedScreen.displayName = 'ReanimatedScreen';
92
-
93
- function ReanimatedScreenProvider(props) {
94
- return (
95
- /*#__PURE__*/
96
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
- _react.default.createElement(_reactNativeScreens.ScreenContext.Provider, {
98
- value: ReanimatedScreenWrapper
99
- }, props.children)
100
- );
101
- }
28
+ var _default = ReanimatedScreen;
29
+ exports.default = _default;
102
30
  //# sourceMappingURL=ReanimatedScreen.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["ReanimatedScreen.tsx"],"names":["AnimatedScreen","Animated","createAnimatedComponent","Screen","ReanimatedScreenWrapper","React","Component","ref","props","onComponentRef","setNativeProps","render","setRef","ReanimatedScreen","forwardRef","children","rest","progress","closing","goingForward","isNativeStack","undefined","event","value","Platform","OS","displayName","ReanimatedScreenProvider"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAQA;;AACA;;;;;;;;;;;;AAEA,MAAMA,cAAc,GAAGC,+BAASC,uBAAT,CACpBC,0BADoB,CAAvB;;AAIA,MAAMC,uBAAN,SAAsCC,eAAMC,SAA5C,CAAmE;AAAA;AAAA;;AAAA,iCACb,IADa;;AAAA,oCAOvDC,GAAD,IAAqD;AAAA;;AAC5D,WAAKA,GAAL,GAAWA,GAAX;AACA,mDAAKC,KAAL,EAAWC,cAAX,kGAA4BF,GAA5B;AACD,KAVgE;AAAA;;AAGjEG,EAAAA,cAAc,CAACF,KAAD,EAA2B;AAAA;;AACvC,sBAAKD,GAAL,wDAAUG,cAAV,CAAyBF,KAAzB;AACD;;AAODG,EAAAA,MAAM,GAAG;AACP,wBACE,6BAAC,gBAAD,eACM,KAAKH,KADX;AAEE;AACA,MAAA,GAAG,EAAE,KAAKI;AAHZ,OADF;AAOD;;AApBgE;;AAuBnE,MAAMC,gBAAgB,gBAAGR,eAAMS,UAAN,CACvB,CAACN,KAAD,EAAQD,GAAR,KAAgB;AACd,QAAM;AAAEQ,IAAAA,QAAF;AAAY,OAAGC;AAAf,MAAwBR,KAA9B;AAEA,QAAMS,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,EAAEZ,GAFP,CAGE;AAHF;AAIE,IAAA,8BAA8B,EAC5B,CAACC,KAAK,CAACY,aAAP,GACIC,SADJ,GAEI,qCACGC,KAAD,IAAwC;AACtC;;AACAL,MAAAA,QAAQ,CAACM,KAAT,GAAiBD,KAAK,CAACL,QAAvB;AACAC,MAAAA,OAAO,CAACK,KAAR,GAAgBD,KAAK,CAACJ,OAAtB;AACAC,MAAAA,YAAY,CAACI,KAAb,GAAqBD,KAAK,CAACH,YAA3B;AACD,KANH,EAOE,CACE;AACA;AACAK,0BAASC,EAAT,KAAgB,SAAhB,GACI,sBADJ,GAEI,uBALN,CAPF;AAPR,KAuBMT,IAvBN,GAwBG,CAACR,KAAK,CAACY,aAAP,GAAyB;AACxBL,EAAAA,QADD,gBAGC,6BAAC,4CAAD,CAAqC,QAArC;AACE,IAAA,KAAK,EAAE;AACLE,MAAAA,QAAQ,EAAEA,QADL;AAELC,MAAAA,OAAO,EAAEA,OAFJ;AAGLC,MAAAA,YAAY,EAAEA;AAHT;AADT,KAMGJ,QANH,CA3BJ,CADF;AAuCD,CA/CsB,CAAzB,C,CAkDA;;;AACAF,gBAAgB,CAACa,WAAjB,GAA+B,kBAA/B;;AAEe,SAASC,wBAAT,CACbnB,KADa,EAEb;AACA;AAAA;AACE;AACA,iCAAC,iCAAD,CAAe,QAAf;AAAwB,MAAA,KAAK,EAAEJ;AAA/B,OACGI,KAAK,CAACO,QADT;AAFF;AAMD","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport { Platform, View } from 'react-native';\nimport {\n Screen,\n ScreenProps,\n ScreenContext,\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\nclass ReanimatedScreenWrapper extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\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 return (\n <ReanimatedScreen\n {...this.props}\n // @ts-ignore some problems with ref\n ref={this.setRef}\n />\n );\n }\n}\n\nconst ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, 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 // ReanimatedScreen.tsx should only be used by Screens of native-stack, but it always better to check\n onTransitionProgressReanimated={\n !props.isNativeStack\n ? undefined\n : 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 }\n {...rest}>\n {!props.isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <ReanimatedTransitionProgressContext.Provider\n value={{\n progress: progress,\n closing: closing,\n goingForward: goingForward,\n }}>\n {children}\n </ReanimatedTransitionProgressContext.Provider>\n )}\n </AnimatedScreen>\n );\n }\n);\n\n// used to silence error \"Component definition is missing display name\"\nReanimatedScreen.displayName = 'ReanimatedScreen';\n\nexport default function ReanimatedScreenProvider(\n props: PropsWithChildren<unknown>\n) {\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <ScreenContext.Provider value={ReanimatedScreenWrapper as any}>\n {props.children}\n </ScreenContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"sources":["ReanimatedScreen.tsx"],"names":["AnimatedScreen","Animated","createAnimatedComponent","Screen","ReanimatedScreen","React","forwardRef","props","ref","displayName"],"mappings":";;;;;;;AAAA;;AACA;;AAGA;;;;;;AAEA,MAAMA,cAAc,GAAGC,+BAASC,uBAAT,CACpBC,0BADoB,CAAvB;;AAIA,MAAMC,gBAAgB,gBAAGC,eAAMC,UAAN,CACvB,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACd,sBACE,6BAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEA;AAFP,KAGMD,KAHN,EADF;AAOD,CATsB,CAAzB;;AAYAH,gBAAgB,CAACK,WAAjB,GAA+B,kBAA/B;eAEeL,gB","sourcesContent":["import React from 'react';\nimport { Screen, ScreenProps } from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated from 'react-native-reanimated';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\nconst ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, ScreenProps>(\n (props, ref) => {\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 {...props}\n />\n );\n }\n);\n\nReanimatedScreen.displayName = 'ReanimatedScreen';\n\nexport default ReanimatedScreen;\n"]}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ReanimatedScreenProvider;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactNativeScreens = require("react-native-screens");
11
+
12
+ var _ReanimatedNativeStackScreen = _interopRequireDefault(require("./ReanimatedNativeStackScreen"));
13
+
14
+ var _ReanimatedScreen = _interopRequireDefault(require("./ReanimatedScreen"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ 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); }
19
+
20
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
+
22
+ class ReanimatedScreenWrapper extends _react.default.Component {
23
+ constructor(...args) {
24
+ super(...args);
25
+
26
+ _defineProperty(this, "ref", null);
27
+
28
+ _defineProperty(this, "setRef", ref => {
29
+ var _this$props$onCompone, _this$props;
30
+
31
+ this.ref = ref;
32
+ (_this$props$onCompone = (_this$props = this.props).onComponentRef) === null || _this$props$onCompone === void 0 ? void 0 : _this$props$onCompone.call(_this$props, ref);
33
+ });
34
+ }
35
+
36
+ setNativeProps(props) {
37
+ var _this$ref;
38
+
39
+ (_this$ref = this.ref) === null || _this$ref === void 0 ? void 0 : _this$ref.setNativeProps(props);
40
+ }
41
+
42
+ render() {
43
+ const ReanimatedScreen = this.props.isNativeStack ? _ReanimatedNativeStackScreen.default : _ReanimatedScreen.default;
44
+ return /*#__PURE__*/_react.default.createElement(ReanimatedScreen, _extends({}, this.props, {
45
+ // @ts-ignore some problems with ref
46
+ ref: this.setRef
47
+ }));
48
+ }
49
+
50
+ }
51
+
52
+ function ReanimatedScreenProvider(props) {
53
+ return (
54
+ /*#__PURE__*/
55
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
+ _react.default.createElement(_reactNativeScreens.ScreenContext.Provider, {
57
+ value: ReanimatedScreenWrapper
58
+ }, props.children)
59
+ );
60
+ }
61
+ //# sourceMappingURL=ReanimatedScreenProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ReanimatedScreenProvider.tsx"],"names":["ReanimatedScreenWrapper","React","Component","ref","props","onComponentRef","setNativeProps","render","ReanimatedScreen","isNativeStack","ReanimatedNativeStackScreen","AnimatedScreen","setRef","ReanimatedScreenProvider","children"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;;;;;;;AAEA,MAAMA,uBAAN,SAAsCC,eAAMC,SAA5C,CAAmE;AAAA;AAAA;;AAAA,iCACb,IADa;;AAAA,oCAOvDC,GAAD,IAAqD;AAAA;;AAC5D,WAAKA,GAAL,GAAWA,GAAX;AACA,mDAAKC,KAAL,EAAWC,cAAX,kGAA4BF,GAA5B;AACD,KAVgE;AAAA;;AAGjEG,EAAAA,cAAc,CAACF,KAAD,EAA2B;AAAA;;AACvC,sBAAKD,GAAL,wDAAUG,cAAV,CAAyBF,KAAzB;AACD;;AAODG,EAAAA,MAAM,GAAG;AACP,UAAMC,gBAAgB,GAAG,KAAKJ,KAAL,CAAWK,aAAX,GACrBC,oCADqB,GAErBC,yBAFJ;AAGA,wBACE,6BAAC,gBAAD,eACM,KAAKP,KADX;AAEE;AACA,MAAA,GAAG,EAAE,KAAKQ;AAHZ,OADF;AAOD;;AAvBgE;;AA0BpD,SAASC,wBAAT,CACbT,KADa,EAEb;AACA;AAAA;AACE;AACA,iCAAC,iCAAD,CAAe,QAAf;AAAwB,MAAA,KAAK,EAAEJ;AAA/B,OACGI,KAAK,CAACU,QADT;AAFF;AAMD","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport { View } from 'react-native';\nimport { ScreenProps, ScreenContext } from 'react-native-screens';\nimport ReanimatedNativeStackScreen from './ReanimatedNativeStackScreen';\nimport AnimatedScreen from './ReanimatedScreen';\n\nclass ReanimatedScreenWrapper extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\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 ReanimatedScreen = this.props.isNativeStack\n ? ReanimatedNativeStackScreen\n : AnimatedScreen;\n return (\n <ReanimatedScreen\n {...this.props}\n // @ts-ignore some problems with ref\n ref={this.setRef}\n />\n );\n }\n}\n\nexport default function ReanimatedScreenProvider(\n props: PropsWithChildren<unknown>\n) {\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <ScreenContext.Provider value={ReanimatedScreenWrapper as any}>\n {props.children}\n </ScreenContext.Provider>\n );\n}\n"]}
@@ -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,12 +4,17 @@ 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;
10
11
  }
11
12
  export function screensEnabled() {
12
13
  return ENABLE_SCREENS;
14
+ } // @ts-ignore function stub, freezing logic is located in index.native.tsx
15
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
+
17
+ export function enableFreeze(shouldEnableReactFreeze = true) {// noop
13
18
  }
14
19
  export class NativeScreen extends React.Component {
15
20
  render() {
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["React","Animated","View","Image","default","useTransitionProgress","ENABLE_SCREENS","enableScreens","shouldEnableScreens","screensEnabled","NativeScreen","Component","render","active","activityState","style","enabled","rest","props","undefined","display","Screen","createAnimatedComponent","ScreenContext","createContext","ScreenContainer","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","FullWindowOverlay","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenStackHeaderConfig","SearchBar","ScreenStackHeaderSubview","shouldUseActivityState"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,EAAmBC,IAAnB,EAAgDC,KAAhD,QAA6D,cAA7D;AAUA,cAAc,SAAd;AACA,SAASC,OAAO,IAAIC,qBAApB,QAAiD,yBAAjD;AAEA,IAAIC,cAAc,GAAG,IAArB;AAEA,OAAO,SAASC,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AAC9DF,EAAAA,cAAc,GAAGE,mBAAjB;AACD;AAED,OAAO,SAASC,cAAT,GAAmC;AACxC,SAAOH,cAAP;AACD;AAED,OAAO,MAAMI,YAAN,SAA2BV,KAAK,CAACW,SAAjC,CAAwD;AAC7DC,EAAAA,MAAM,GAAgB;AACpB,QAAI;AACFC,MAAAA,MADE;AAEFC,MAAAA,aAFE;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,OAAO,GAAGV,cAJR;AAKF,SAAGW;AALD,QAMA,KAAKC,KANT;;AAQA,QAAIF,OAAJ,EAAa;AACX,UAAIH,MAAM,KAAKM,SAAX,IAAwBL,aAAa,KAAKK,SAA9C,EAAyD;AACvDL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CADuD,CACjB;AACvC;;AACD,0BACE,oBAAC,IAAD,CACE;AADF;AAEE,QAAA,MAAM,EAAEC,aAAa,KAAK,CAF5B;AAGE,QAAA,KAAK,EAAE,CAACC,KAAD,EAAQ;AAAEK,UAAAA,OAAO,EAAEN,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR;AAHT,SAIMG,IAJN,EADF;AAQD;;AAED,wBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD;;AAzB4D;AA4B/D,OAAO,MAAMI,MAAM,GAAGpB,QAAQ,CAACqB,uBAAT,CAAiCZ,YAAjC,CAAf;AAEP,OAAO,MAAMa,aAAa,gBAAGvB,KAAK,CAACwB,aAAN,CAAoBH,MAApB,CAAtB;AAEP,OAAO,MAAMI,eAA0D,GAAGvB,IAAnE;AAEP,OAAO,MAAMwB,qBAAgE,GAAGxB,IAAzE;AAEP,OAAO,MAAMyB,+BAA0E,GAAGzB,IAAnF;AAEP,OAAO,MAAM0B,WAAkD,GAAG1B,IAA3D;AAEP,OAAO,MAAM2B,iBAAiB,GAAG3B,IAA1B;AAEP,OAAO,MAAM4B,gCAAgC,GAC3CZ,KAD8C,iBAG9C,oBAAC,IAAD,qBACE,oBAAC,KAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgDA,KAAhD,EADF,CAHK;AAQP,OAAO,MAAMa,0BAA0B,GACrCb,KADwC,iBAExB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMc,yBAAyB,GACpCd,KADuC,iBAEvB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMe,2BAA2B,GACtCf,KADyC,iBAEzB,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMgB,8BAA8B,GACzChB,KAD4C,iBAE5B,oBAAC,IAAD,EAAUA,KAAV,CAFX;AAIP,OAAO,MAAMiB,uBAA0E,GAAGjC,IAAnF,C,CAEP;;AACA,OAAO,MAAMkC,SAA8C,GAAGlC,IAAvD;AAEP,OAAO,MAAMmC,wBAEX,GAAGnC,IAFE;AAIP,OAAO,MAAMoC,sBAAsB,GAAG,IAA/B","sourcesContent":["import React from 'react';\nimport { Animated, View, ViewProps, ImageProps, Image } from 'react-native';\nimport {\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n HeaderSubviewTypes,\n SearchBarProps,\n} from './types';\n\nexport * from './types';\nexport { default as useTransitionProgress } from './useTransitionProgress';\n\nlet ENABLE_SCREENS = true;\n\nexport function enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = shouldEnableScreens;\n}\n\nexport function screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\nexport class NativeScreen extends React.Component<ScreenProps> {\n render(): JSX.Element {\n let {\n active,\n activityState,\n style,\n enabled = ENABLE_SCREENS,\n ...rest\n } = this.props;\n\n if (enabled) {\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0; // change taken from index.native.tsx\n }\n return (\n <View\n // @ts-expect-error: hidden exists on web, but not in React Native\n hidden={activityState === 0}\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n {...rest}\n />\n );\n }\n\n return <View {...rest} />;\n }\n}\n\nexport const Screen = Animated.createAnimatedComponent(NativeScreen);\n\nexport const ScreenContext = React.createContext(Screen);\n\nexport const ScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const NativeScreenNavigationContainer: React.ComponentType<ScreenContainerProps> = View;\n\nexport const ScreenStack: React.ComponentType<ScreenStackProps> = View;\n\nexport const FullWindowOverlay = View;\n\nexport const ScreenStackHeaderBackButtonImage = (\n props: ImageProps\n): JSX.Element => (\n <View>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </View>\n);\n\nexport const ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => <View {...props} />;\n\nexport const ScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps> = View;\n\n// @ts-expect-error: search bar props have no common props with View\nexport const SearchBar: React.ComponentType<SearchBarProps> = View;\n\nexport const ScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>> = View;\n\nexport const shouldUseActivityState = true;\n"]}
1
+ {"version":3,"sources":["index.tsx"],"names":["React","Animated","View","Image","default","useTransitionProgress","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"]}
@@ -3,13 +3,16 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
3
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
4
 
5
5
  import React from 'react';
6
- import { Animated, Image, Platform, requireNativeComponent, StyleSheet, UIManager, View } from 'react-native'; // @ts-ignore Getting private component
6
+ import { Animated, Image, Platform, requireNativeComponent, StyleSheet, UIManager, View } from 'react-native';
7
+ import { Freeze } from 'react-freeze'; // @ts-ignore Getting private component
7
8
  // eslint-disable-next-line import/default
8
9
 
9
10
  import processColor from 'react-native/Libraries/StyleSheet/processColor';
11
+ import { version } from 'react-native/package.json';
10
12
  import TransitionProgressContext from './TransitionProgressContext';
11
13
  import useTransitionProgress from './useTransitionProgress';
12
- // web implementation is taken from `index.tsx`
14
+ import { isSearchBarAvailableForCurrentPlatform, executeNativeBackPress } from './utils'; // web implementation is taken from `index.tsx`
15
+
13
16
  const isPlatformSupported = Platform.OS === 'ios' || Platform.OS === 'android' || Platform.OS === 'windows';
14
17
  let ENABLE_SCREENS = isPlatformSupported;
15
18
 
@@ -19,6 +22,19 @@ function enableScreens(shouldEnableScreens = true) {
19
22
  if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {
20
23
  console.error(`Screen native module hasn't been linked. Please check the react-native-screens README for more details`);
21
24
  }
25
+ }
26
+
27
+ let ENABLE_FREEZE = false;
28
+
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
+
37
+ ENABLE_FREEZE = shouldEnableReactFreeze;
22
38
  } // const that tells if the library should use new implementation, will be undefined for older versions
23
39
 
24
40
 
@@ -51,7 +67,7 @@ const ScreensNativeModules = {
51
67
  },
52
68
 
53
69
  get NativeScreenNavigationContainer() {
54
- NativeScreenNavigationContainerValue = NativeScreenNavigationContainerValue || requireNativeComponent('RNSScreenNavigationContainer');
70
+ NativeScreenNavigationContainerValue = NativeScreenNavigationContainerValue || (Platform.OS === 'ios' ? requireNativeComponent('RNSScreenNavigationContainer') : this.NativeScreenContainer);
55
71
  return NativeScreenNavigationContainerValue;
56
72
  },
57
73
 
@@ -82,6 +98,60 @@ const ScreensNativeModules = {
82
98
 
83
99
  };
84
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
+
123
+ function MaybeFreeze({
124
+ freeze,
125
+ children
126
+ }) {
127
+ if (ENABLE_FREEZE) {
128
+ return /*#__PURE__*/React.createElement(DelayedFreeze, {
129
+ freeze: freeze
130
+ }, children);
131
+ } else {
132
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
133
+ }
134
+ }
135
+
136
+ function ScreenStack(props) {
137
+ if (ENABLE_FREEZE) {
138
+ const {
139
+ children,
140
+ ...rest
141
+ } = props;
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);
148
+ }
149
+
150
+ return /*#__PURE__*/React.createElement(ScreensNativeModules.NativeScreenStack, props);
151
+ } // Incomplete type, all accessible properties available at:
152
+ // react-native/Libraries/Components/View/ReactNativeViewViewConfig.js
153
+
154
+
85
155
  class Screen extends React.Component {
86
156
  constructor(...args) {
87
157
  super(...args);
@@ -134,10 +204,24 @@ class Screen extends React.Component {
134
204
  }
135
205
 
136
206
  const processedColor = processColor(statusBarColor);
137
- return /*#__PURE__*/React.createElement(AnimatedNativeScreen, _extends({}, props, {
207
+ return /*#__PURE__*/React.createElement(MaybeFreeze, {
208
+ freeze: activityState === 0
209
+ }, /*#__PURE__*/React.createElement(AnimatedNativeScreen, _extends({}, props, {
138
210
  statusBarColor: processedColor,
139
- activityState: activityState,
140
- 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
+ },
141
225
  onTransitionProgress: !isNativeStack ? undefined : Animated.event([{
142
226
  nativeEvent: {
143
227
  progress: this.progress,
@@ -154,7 +238,7 @@ class Screen extends React.Component {
154
238
  closing: this.closing,
155
239
  goingForward: this.goingForward
156
240
  }
157
- }, children));
241
+ }, children)));
158
242
  } else {
159
243
  // same reason as above
160
244
  let {
@@ -247,6 +331,7 @@ module.exports = {
247
331
  Screen,
248
332
  ScreenContainer,
249
333
  ScreenContext,
334
+ ScreenStack,
250
335
 
251
336
  get NativeScreen() {
252
337
  return ScreensNativeModules.NativeScreen;
@@ -257,15 +342,7 @@ module.exports = {
257
342
  },
258
343
 
259
344
  get NativeScreenNavigationContainer() {
260
- if (Platform.OS === 'ios') {
261
- return ScreensNativeModules.NativeScreenNavigationContainer;
262
- }
263
-
264
- return ScreensNativeModules.NativeScreenContainer;
265
- },
266
-
267
- get ScreenStack() {
268
- return ScreensNativeModules.NativeScreenStack;
345
+ return ScreensNativeModules.NativeScreenNavigationContainer;
269
346
  },
270
347
 
271
348
  get ScreenStackHeaderConfig() {
@@ -277,8 +354,8 @@ module.exports = {
277
354
  },
278
355
 
279
356
  get SearchBar() {
280
- if (Platform.OS !== 'ios') {
281
- 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.');
282
359
  return View;
283
360
  }
284
361
 
@@ -302,8 +379,11 @@ module.exports = {
302
379
  ScreenStackHeaderCenterView,
303
380
  ScreenStackHeaderSearchBarView,
304
381
  enableScreens,
382
+ enableFreeze,
305
383
  screensEnabled,
306
384
  shouldUseActivityState,
307
- useTransitionProgress
385
+ useTransitionProgress,
386
+ isSearchBarAvailableForCurrentPlatform,
387
+ executeNativeBackPress
308
388
  };
309
389
  //# sourceMappingURL=index.native.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","processColor","TransitionProgressContext","useTransitionProgress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","getViewManagerConfig","console","error","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","Screen","Component","Value","ref","props","onComponentRef","setNativeProps","render","enabled","rest","createAnimatedComponent","active","activityState","children","isNativeStack","statusBarColor","undefined","warn","processedColor","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","style","display","ScreenContainer","hasTwoStates","styles","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStack","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n 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":["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":"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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"]}