react-native-screens 3.11.1 → 3.12.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 (88) hide show
  1. package/README.md +4 -0
  2. package/RNScreens.podspec +36 -6
  3. package/android/build.gradle +73 -1
  4. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +49 -0
  5. package/android/src/fabric/java/com/swmansion/rnscreens/RNScreensComponentsRegistry.java +28 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +11 -2
  7. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +24 -10
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +83 -18
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +17 -5
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +14 -1
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +33 -16
  12. package/android/src/main/jni/Android.mk +45 -0
  13. package/android/src/main/jni/OnLoad.cpp +9 -0
  14. package/android/src/main/jni/RNScreensComponentsRegistry.cpp +66 -0
  15. package/android/src/main/jni/RNScreensComponentsRegistry.h +34 -0
  16. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +71 -0
  17. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +30 -0
  18. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +104 -0
  19. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +41 -0
  20. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +31 -0
  21. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +17 -0
  22. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +25 -0
  23. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +16 -0
  24. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +16 -0
  25. package/common/cpp/Android.mk +38 -0
  26. package/common/cpp/rnscreens/RNSScreenComponentDescriptor.h +41 -0
  27. package/common/cpp/rnscreens/RNSScreenShadowNode.cpp +9 -0
  28. package/common/cpp/rnscreens/RNSScreenShadowNode.h +29 -0
  29. package/common/cpp/rnscreens/RNSScreenState.cpp +14 -0
  30. package/common/cpp/rnscreens/RNSScreenState.h +46 -0
  31. package/ios/RNSScreenComponentView.h +23 -0
  32. package/ios/RNSScreenComponentView.mm +159 -0
  33. package/ios/RNSScreenController.h +10 -0
  34. package/ios/RNSScreenController.mm +79 -0
  35. package/ios/RNSScreenStackComponentView.h +15 -0
  36. package/ios/RNSScreenStackComponentView.mm +295 -0
  37. package/ios/RNSScreenStackHeaderConfigComponentView.h +42 -0
  38. package/ios/RNSScreenStackHeaderConfigComponentView.mm +662 -0
  39. package/ios/RNSScreenStackHeaderSubviewComponentView.h +14 -0
  40. package/ios/RNSScreenStackHeaderSubviewComponentView.mm +77 -0
  41. package/ios/utils/RNSUIBarButtonItem.h +5 -0
  42. package/ios/utils/RNSUIBarButtonItem.mm +22 -0
  43. package/lib/commonjs/fabric/Screen.js +27 -0
  44. package/lib/commonjs/fabric/Screen.js.map +1 -0
  45. package/lib/commonjs/fabric/ScreenNativeComponent.js +23 -0
  46. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -0
  47. package/lib/commonjs/fabric/ScreenStack.js +27 -0
  48. package/lib/commonjs/fabric/ScreenStack.js.map +1 -0
  49. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +27 -0
  50. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
  51. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js +34 -0
  52. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js.map +1 -0
  53. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +27 -0
  54. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
  55. package/lib/commonjs/fabric/ScreenStackNativeComponent.js +21 -0
  56. package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -0
  57. package/lib/commonjs/fabric/index.js +40 -0
  58. package/lib/commonjs/fabric/index.js.map +1 -0
  59. package/lib/commonjs/index.native.js +32 -15
  60. package/lib/commonjs/index.native.js.map +1 -1
  61. package/lib/module/fabric/Screen.js +11 -0
  62. package/lib/module/fabric/Screen.js.map +1 -0
  63. package/lib/module/fabric/ScreenNativeComponent.js +11 -0
  64. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -0
  65. package/lib/module/fabric/ScreenStack.js +12 -0
  66. package/lib/module/fabric/ScreenStack.js.map +1 -0
  67. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +10 -0
  68. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
  69. package/lib/module/fabric/ScreenStackHeaderSubview.js +21 -0
  70. package/lib/module/fabric/ScreenStackHeaderSubview.js.map +1 -0
  71. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +10 -0
  72. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
  73. package/lib/module/fabric/ScreenStackNativeComponent.js +9 -0
  74. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -0
  75. package/lib/module/fabric/index.js +6 -0
  76. package/lib/module/fabric/index.js.map +1 -0
  77. package/lib/module/index.native.js +32 -15
  78. package/lib/module/index.native.js.map +1 -1
  79. package/package.json +17 -3
  80. package/src/fabric/Screen.js +12 -0
  81. package/src/fabric/ScreenNativeComponent.js +64 -0
  82. package/src/fabric/ScreenStack.js +8 -0
  83. package/src/fabric/ScreenStackHeaderConfigNativeComponent.js +54 -0
  84. package/src/fabric/ScreenStackHeaderSubview.js +20 -0
  85. package/src/fabric/ScreenStackHeaderSubviewNativeComponent.js +31 -0
  86. package/src/fabric/ScreenStackNativeComponent.js +19 -0
  87. package/src/fabric/index.js +11 -0
  88. package/src/index.native.tsx +35 -14
@@ -0,0 +1,11 @@
1
+ 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); }
2
+
3
+ import * as React from 'react';
4
+ import ScreenNativeComponent from './ScreenNativeComponent';
5
+ import { StyleSheet } from 'react-native';
6
+ export default function Screen(props) {
7
+ return /*#__PURE__*/React.createElement(ScreenNativeComponent, _extends({}, props, {
8
+ style: [props.style, StyleSheet.absoluteFill]
9
+ }));
10
+ }
11
+ //# sourceMappingURL=Screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Screen.js"],"names":["React","ScreenNativeComponent","StyleSheet","Screen","props","style","absoluteFill"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,SAASC,UAAT,QAA2B,cAA3B;AAEA,eAAe,SAASC,MAAT,CAAgBC,KAAhB,EAAuB;AACpC,sBACE,oBAAC,qBAAD,eACMA,KADN;AAEE,IAAA,KAAK,EAAE,CAACA,KAAK,CAACC,KAAP,EAAcH,UAAU,CAACI,YAAzB;AAFT,KADF;AAMD","sourcesContent":["import * as React from 'react';\nimport ScreenNativeComponent from './ScreenNativeComponent';\nimport { StyleSheet } from 'react-native';\n\nexport default function Screen(props) {\n return (\n <ScreenNativeComponent\n {...props}\n style={[props.style, StyleSheet.absoluteFill]}\n />\n );\n}\n"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ *
3
+ * @format
4
+ */
5
+
6
+ /* eslint-disable */
7
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
8
+ export default codegenNativeComponent('RNSScreen', {
9
+ interfaceOnly: true
10
+ });
11
+ //# sourceMappingURL=ScreenNativeComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScreenNativeComponent.js"],"names":["codegenNativeComponent","interfaceOnly"],"mappings":"AAAA;AACA;AACA;AACA;;AACA;AACA,OAAOA,sBAAP,MAAmC,yDAAnC;AAwDA,eAAgBA,sBAAsB,CAAc,WAAd,EAA2B;AAC/DC,EAAAA,aAAa,EAAE;AADgD,CAA3B,CAAtC","sourcesContent":["/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\nimport type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';\nimport type {\n BubblingEventHandler,\n WithDefault,\n Int32,\n} from 'react-native/Libraries/Types/CodegenTypes';\n\ntype ScreenEvent = $ReadOnly<{||}>;\n\ntype ScreenDismissedEvent = $ReadOnly<{|\n dismissCount: Int32,\n|}>;\n\ntype StackPresentation = 'push' | 'modal' | 'transparentModal';\ntype StackAnimation =\n | 'default'\n | 'flip'\n | 'simple_push'\n | 'none'\n | 'fade'\n | 'slide_from_right'\n | 'slide_from_left'\n | 'slide_from_bottom'\n | 'fade_from_bottom';\n\ntype ReplaceAnimation = 'pop' | 'push';\n\nexport type NativeProps = $ReadOnly<{|\n ...ViewProps,\n onAppear?: ?BubblingEventHandler<ScreenEvent>,\n onDisappear?: ?BubblingEventHandler<ScreenEvent>,\n onDismissed?: ?BubblingEventHandler<ScreenDismissedEvent>,\n onWillAppear?: ?BubblingEventHandler<ScreenEvent>,\n onWillDisappear?: ?BubblingEventHandler<ScreenEvent>,\n // TODO: implement this props on iOS\n stackPresentation?: WithDefault<StackPresentation, 'push'>,\n stackAnimation?: WithDefault<StackAnimation, 'default'>,\n gestureEnabled?: WithDefault<boolean, true>,\n replaceAnimation?: WithDefault<ReplaceAnimation, 'pop'>,\n screenOrientation?: string,\n statusBarAnimation?: string,\n statusBarColor?: ColorValue,\n statusBarStyle?: string,\n statusBarTranslucent?: boolean,\n statusBarHidden?: boolean,\n navigationBarColor?: ColorValue,\n navigationBarHidden?: boolean,\n nativeBackButtonDismissalEnabled?: boolean,\n activityState?: WithDefault<Int32, -1>,\n|}>;\n\ntype ComponentType = HostComponent<NativeProps>;\n\nexport default (codegenNativeComponent<NativeProps>('RNSScreen', {\n interfaceOnly: true,\n}): ComponentType);\n"]}
@@ -0,0 +1,12 @@
1
+ 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); }
2
+
3
+ import * as React from 'react';
4
+ import ScreenStackNativeComponent from './ScreenStackNativeComponent';
5
+ export default function ScreenStack(props) {
6
+ return /*#__PURE__*/React.createElement(ScreenStackNativeComponent, _extends({}, props, {
7
+ style: [{
8
+ flex: 1
9
+ }, props.style]
10
+ }));
11
+ }
12
+ //# sourceMappingURL=ScreenStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScreenStack.js"],"names":["React","ScreenStackNativeComponent","ScreenStack","props","flex","style"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,OAAOC,0BAAP,MAAuC,8BAAvC;AAEA,eAAe,SAASC,WAAT,CAAqBC,KAArB,EAA4B;AACzC,sBACE,oBAAC,0BAAD,eAAgCA,KAAhC;AAAuC,IAAA,KAAK,EAAE,CAAC;AAAEC,MAAAA,IAAI,EAAE;AAAR,KAAD,EAAcD,KAAK,CAACE,KAApB;AAA9C,KADF;AAGD","sourcesContent":["import * as React from 'react';\nimport ScreenStackNativeComponent from './ScreenStackNativeComponent';\n\nexport default function ScreenStack(props) {\n return (\n <ScreenStackNativeComponent {...props} style={[{ flex: 1 }, props.style]} />\n );\n}\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ *
3
+ * @format
4
+ */
5
+
6
+ /* eslint-disable */
7
+ import * as React from 'react';
8
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
9
+ export default codegenNativeComponent('RNSScreenStackHeaderConfig', {});
10
+ //# sourceMappingURL=ScreenStackHeaderConfigNativeComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScreenStackHeaderConfigNativeComponent.js"],"names":["React","codegenNativeComponent"],"mappings":"AAAA;AACA;AACA;AACA;;AACA;AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,sBAAP,MAAmC,yDAAnC;AA2CA,eAAgBA,sBAAsB,CACpC,4BADoC,EAEpC,EAFoC,CAAtC","sourcesContent":["/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport * as React from 'react';\n\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\nimport type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';\nimport type {\n Int32,\n WithDefault,\n} from 'react-native/Libraries/Types/CodegenTypes';\n\ntype DirectionType = 'rtl' | 'ltr';\n\nexport type NativeProps = $ReadOnly<{|\n ...ViewProps,\n backgroundColor?: ColorValue,\n backTitle?: string,\n backTitleFontFamily?: string,\n backTitleFontSize?: Int32,\n color?: ColorValue,\n direction?: WithDefault<DirectionType, 'ltr'>,\n hidden?: boolean,\n hideShadow?: boolean,\n largeTitle?: boolean,\n largeTitleFontFamily?: string,\n largeTitleFontSize?: Int32,\n largeTitleFontWeight?: string,\n largeTitleBackgroundColor?: ColorValue,\n largeTitleHideShadow?: boolean,\n largeTitleColor?: ColorValue,\n translucent?: boolean,\n title?: string,\n titleFontFamily?: string,\n titleFontSize?: Int32,\n titleFontWeight?: string,\n titleColor?: ColorValue,\n disableBackButtonMenu?: boolean,\n hideBackButton?: boolean,\n // TODO: implement this props on iOS\n topInsetEnabled?: boolean,\n backButtonInCustomView?: boolean,\n|}>;\n\ntype ComponentType = HostComponent<NativeProps>;\n\nexport default (codegenNativeComponent<NativeProps>(\n 'RNSScreenStackHeaderConfig',\n {}\n): ComponentType);\n"]}
@@ -0,0 +1,21 @@
1
+ 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); }
2
+
3
+ import React from 'react';
4
+ import NativeScreenStackHeaderSubview from './ScreenStackHeaderSubviewNativeComponent';
5
+ import { StyleSheet } from 'react-native';
6
+ const styles = StyleSheet.create({
7
+ headerSubview: {
8
+ position: 'absolute',
9
+ top: 0,
10
+ right: 0,
11
+ flexDirection: 'row',
12
+ alignItems: 'center',
13
+ justifyContent: 'center'
14
+ }
15
+ });
16
+ export default function ScreenStackHeaderSubview(props) {
17
+ return /*#__PURE__*/React.createElement(NativeScreenStackHeaderSubview, _extends({}, props, {
18
+ style: styles.headerSubview
19
+ }));
20
+ }
21
+ //# sourceMappingURL=ScreenStackHeaderSubview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScreenStackHeaderSubview.js"],"names":["React","NativeScreenStackHeaderSubview","StyleSheet","styles","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderSubview","props"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,8BAAP,MAA2C,2CAA3C;AACA,SAASC,UAAT,QAA2B,cAA3B;AAEA,MAAMC,MAAM,GAAGD,UAAU,CAACE,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,eAAe,SAASC,wBAAT,CAAkCC,KAAlC,EAAyC;AACtD,sBACE,oBAAC,8BAAD,eAAoCA,KAApC;AAA2C,IAAA,KAAK,EAAEV,MAAM,CAACE;AAAzD,KADF;AAGD","sourcesContent":["import React from 'react';\nimport NativeScreenStackHeaderSubview from './ScreenStackHeaderSubviewNativeComponent';\nimport { StyleSheet } from 'react-native';\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\nexport default function ScreenStackHeaderSubview(props) {\n return (\n <NativeScreenStackHeaderSubview {...props} style={styles.headerSubview} />\n );\n}\n"]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ *
3
+ * @format
4
+ */
5
+
6
+ /* eslint-disable */
7
+ import * as React from 'react';
8
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
9
+ export default codegenNativeComponent('RNSScreenStackHeaderSubview', {});
10
+ //# sourceMappingURL=ScreenStackHeaderSubviewNativeComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScreenStackHeaderSubviewNativeComponent.js"],"names":["React","codegenNativeComponent"],"mappings":"AAAA;AACA;AACA;AACA;;AACA;AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,sBAAP,MAAmC,yDAAnC;AAoBA,eAAgBA,sBAAsB,CACpC,6BADoC,EAEpC,EAFoC,CAAtC","sourcesContent":["/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport * as React from 'react';\n\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\nimport type { WithDefault } from 'react-native/Libraries/Types/CodegenTypes';\n\nexport type HeaderSubviewTypes =\n | 'back'\n | 'right'\n | 'left'\n | 'title'\n | 'center'\n | 'searchBar';\n\nexport type NativeProps = $ReadOnly<{|\n ...ViewProps,\n type?: WithDefault<HeaderSubviewTypes, 'left'>,\n|}>;\n\ntype ComponentType = HostComponent<NativeProps>;\n\nexport default (codegenNativeComponent<NativeProps>(\n 'RNSScreenStackHeaderSubview',\n {}\n): ComponentType);\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ *
3
+ * @format
4
+ */
5
+
6
+ /* eslint-disable */
7
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
8
+ export default codegenNativeComponent('RNSScreenStack', {});
9
+ //# sourceMappingURL=ScreenStackNativeComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScreenStackNativeComponent.js"],"names":["codegenNativeComponent"],"mappings":"AAAA;AACA;AACA;AACA;;AACA;AACA,OAAOA,sBAAP,MAAmC,yDAAnC;AAUA,eAAgBA,sBAAsB,CACpC,gBADoC,EAEpC,EAFoC,CAAtC","sourcesContent":["/**\n * @flow strict-local\n * @format\n */\n/* eslint-disable */\nimport codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';\nimport type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';\n\ntype NativeProps = $ReadOnly<{|\n ...ViewProps,\n|}>;\n\ntype ComponentType = HostComponent<NativeProps>;\n\nexport default (codegenNativeComponent<NativeProps>(\n 'RNSScreenStack',\n {}\n): ComponentType);\n"]}
@@ -0,0 +1,6 @@
1
+ import Screen from './Screen';
2
+ import ScreenStackHeaderSubview from './ScreenStackHeaderSubview';
3
+ import ScreenStackHeaderConfig from './ScreenStackHeaderConfigNativeComponent';
4
+ import ScreenStack from './ScreenStack';
5
+ export { Screen, ScreenStackHeaderSubview, ScreenStackHeaderConfig, ScreenStack };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.js"],"names":["Screen","ScreenStackHeaderSubview","ScreenStackHeaderConfig","ScreenStack"],"mappings":"AAAA,OAAOA,MAAP,MAAmB,UAAnB;AACA,OAAOC,wBAAP,MAAqC,4BAArC;AACA,OAAOC,uBAAP,MAAoC,0CAApC;AACA,OAAOC,WAAP,MAAwB,eAAxB;AAEA,SACEH,MADF,EAEEC,wBAFF,EAGEC,uBAHF,EAIEC,WAJF","sourcesContent":["import Screen from './Screen';\nimport ScreenStackHeaderSubview from './ScreenStackHeaderSubview';\nimport ScreenStackHeaderConfig from './ScreenStackHeaderConfigNativeComponent';\nimport ScreenStack from './ScreenStack';\n\nexport {\n Screen,\n ScreenStackHeaderSubview,\n ScreenStackHeaderConfig,\n ScreenStack,\n};\n"]}
@@ -1,3 +1,5 @@
1
+ var _global;
2
+
1
3
  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); }
2
4
 
3
5
  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; }
@@ -14,7 +16,10 @@ import useTransitionProgress from './useTransitionProgress';
14
16
  import { isSearchBarAvailableForCurrentPlatform, executeNativeBackPress } from './utils'; // web implementation is taken from `index.tsx`
15
17
 
16
18
  const isPlatformSupported = Platform.OS === 'ios' || Platform.OS === 'android' || Platform.OS === 'windows';
17
- let ENABLE_SCREENS = isPlatformSupported;
19
+ let ENABLE_SCREENS = isPlatformSupported; // @ts-expect-error nativeFabricUIManager is not yet included in the RN types
20
+
21
+ const ENABLE_FABRIC = !!((_global = global) !== null && _global !== void 0 && _global.nativeFabricUIManager);
22
+ const FabricComponents = ENABLE_FABRIC ? require('./fabric') : {};
18
23
 
19
24
  function enableScreens(shouldEnableScreens = true) {
20
25
  ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;
@@ -57,7 +62,7 @@ let NativeSearchBar;
57
62
  let NativeFullWindowOverlay;
58
63
  const ScreensNativeModules = {
59
64
  get NativeScreen() {
60
- NativeScreenValue = NativeScreenValue || requireNativeComponent('RNSScreen');
65
+ NativeScreenValue = NativeScreenValue || FabricComponents.Screen || requireNativeComponent('RNSScreen');
61
66
  return NativeScreenValue;
62
67
  },
63
68
 
@@ -72,17 +77,17 @@ const ScreensNativeModules = {
72
77
  },
73
78
 
74
79
  get NativeScreenStack() {
75
- NativeScreenStack = NativeScreenStack || requireNativeComponent('RNSScreenStack');
80
+ NativeScreenStack = NativeScreenStack || FabricComponents.ScreenStack || requireNativeComponent('RNSScreenStack');
76
81
  return NativeScreenStack;
77
82
  },
78
83
 
79
84
  get NativeScreenStackHeaderConfig() {
80
- NativeScreenStackHeaderConfig = NativeScreenStackHeaderConfig || requireNativeComponent('RNSScreenStackHeaderConfig');
85
+ NativeScreenStackHeaderConfig = NativeScreenStackHeaderConfig || FabricComponents.ScreenStackHeaderConfig || requireNativeComponent('RNSScreenStackHeaderConfig');
81
86
  return NativeScreenStackHeaderConfig;
82
87
  },
83
88
 
84
89
  get NativeScreenStackHeaderSubview() {
85
- NativeScreenStackHeaderSubview = NativeScreenStackHeaderSubview || requireNativeComponent('RNSScreenStackHeaderSubview');
90
+ NativeScreenStackHeaderSubview = NativeScreenStackHeaderSubview || FabricComponents.ScreenStackHeaderSubview || requireNativeComponent('RNSScreenStackHeaderSubview');
86
91
  return NativeScreenStackHeaderSubview;
87
92
  },
88
93
 
@@ -185,7 +190,14 @@ class Screen extends React.Component {
185
190
  } = this.props;
186
191
 
187
192
  if (enabled && isPlatformSupported) {
188
- AnimatedNativeScreen = AnimatedNativeScreen || Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);
193
+ if (!AnimatedNativeScreen) {
194
+ if (ENABLE_FABRIC) {
195
+ AnimatedNativeScreen = ScreensNativeModules.NativeScreen;
196
+ } else {
197
+ AnimatedNativeScreen = Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);
198
+ }
199
+ }
200
+
189
201
  let {
190
202
  // Filter out active prop in this case because it is unused and
191
203
  // can cause problems depending on react-native version:
@@ -204,14 +216,9 @@ class Screen extends React.Component {
204
216
  }
205
217
 
206
218
  const processedColor = processColor(statusBarColor);
207
- return /*#__PURE__*/React.createElement(MaybeFreeze, {
208
- freeze: activityState === 0
209
- }, /*#__PURE__*/React.createElement(AnimatedNativeScreen, _extends({}, props, {
210
- statusBarColor: processedColor,
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 => {
219
+
220
+ const handleRef = ref => {
221
+ if (!ENABLE_FABRIC) {
215
222
  var _ref$viewConfig, _ref$viewConfig$valid;
216
223
 
217
224
  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) {
@@ -221,7 +228,17 @@ class Screen extends React.Component {
221
228
  }
222
229
 
223
230
  this.setRef(ref);
224
- },
231
+ }
232
+ };
233
+
234
+ return /*#__PURE__*/React.createElement(MaybeFreeze, {
235
+ freeze: activityState === 0
236
+ }, /*#__PURE__*/React.createElement(AnimatedNativeScreen, _extends({}, props, {
237
+ statusBarColor: processedColor,
238
+ activityState: activityState // This prevents showing blank screen when navigating between multiple screens with freezing
239
+ // https://github.com/software-mansion/react-native-screens/pull/1208
240
+ ,
241
+ ref: handleRef,
225
242
  onTransitionProgress: !isNativeStack ? undefined : Animated.event([{
226
243
  nativeEvent: {
227
244
  progress: this.progress,
@@ -1 +1 @@
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"]}
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","ENABLE_FABRIC","global","nativeFabricUIManager","FabricComponents","require","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","Screen","NativeScreenContainer","NativeScreenNavigationContainer","ScreenStack","ScreenStackHeaderConfig","ScreenStackHeaderSubview","DelayedFreeze","freeze","children","freezeState","setFreezeState","useState","setImmediate","MaybeFreeze","props","rest","size","Children","count","childrenWithFreeze","map","child","index","Component","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","statusBarColor","undefined","processedColor","handleRef","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","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\n// @ts-expect-error nativeFabricUIManager is not yet included in the RN types\nconst ENABLE_FABRIC = !!global?.nativeFabricUIManager;\n\nconst FabricComponents = ENABLE_FABRIC ? require('./fabric') : {};\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue ||\n FabricComponents.Screen ||\n requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n 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 ||\n FabricComponents.ScreenStack ||\n requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n FabricComponents.ScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n FabricComponents.ScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = 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 if (!AnimatedNativeScreen) {\n if (ENABLE_FABRIC) {\n AnimatedNativeScreen = ScreensNativeModules.NativeScreen;\n } else {\n AnimatedNativeScreen = Animated.createAnimatedComponent(\n ScreensNativeModules.NativeScreen\n ) as React.ComponentType<ScreenProps>;\n }\n }\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 const handleRef = (ref: ViewConfig) => {\n if (!ENABLE_FABRIC) {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n }\n this.setRef(ref);\n }\n };\n\n return (\n <MaybeFreeze freeze={activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n 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={handleRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </MaybeFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-screens",
3
- "version": "3.11.1",
3
+ "version": "3.12.0",
4
4
  "description": "Native navigation primitives for your React Native app.",
5
5
  "scripts": {
6
6
  "check-types": "tsc --noEmit",
@@ -8,7 +8,7 @@
8
8
  "test:unit": "jest --passWithNoTests",
9
9
  "format-js": "prettier --write --list-different './{src,Example}/**/*.{js,ts,tsx}'",
10
10
  "format-android": "node ./scripts/format-android.js",
11
- "format-ios": "find ios/ -iname *.h -o -iname *.m -o -iname *.cpp | xargs clang-format -i",
11
+ "format-ios": "find ios/ -iname *.h -o -iname *.m -o -iname *.cpp -o -iname *.mm | xargs clang-format -i",
12
12
  "format": "yarn format-js && yarn format-android && yarn format-ios",
13
13
  "lint-js": "eslint --ext '.js,.ts,.tsx' --fix src",
14
14
  "lint-android": "./android/gradlew -p android spotlessCheck -q",
@@ -23,13 +23,17 @@
23
23
  "types": "lib/typescript/index",
24
24
  "files": [
25
25
  "src/",
26
+ "common/",
26
27
  "lib/",
27
28
  "native-stack/",
28
29
  "createNativeStackNavigator/",
29
30
  "reanimated/",
30
31
  "android/src/main/AndroidManifest.xml",
31
32
  "android/src/main/java/",
33
+ "android/src/main/jni/",
32
34
  "android/src/main/res",
35
+ "android/src/fabric/",
36
+ "android/src/paper/",
33
37
  "android/build.gradle",
34
38
  "ios/",
35
39
  "windows/",
@@ -54,6 +58,7 @@
54
58
  "homepage": "https://github.com/software-mansion/react-native-screens#readme",
55
59
  "dependencies": {
56
60
  "react-freeze": "^1.0.0",
61
+ "react-native-gradle-plugin": "^0.0.3",
57
62
  "warn-once": "^0.1.0"
58
63
  },
59
64
  "peerDependencies": {
@@ -126,5 +131,14 @@
126
131
  "eslintIgnore": [
127
132
  "node_modules/",
128
133
  "lib/"
129
- ]
134
+ ],
135
+ "codegenConfig": {
136
+ "libraries": [
137
+ {
138
+ "name": "rnscreens",
139
+ "type": "components",
140
+ "jsSrcsDir": "./src/fabric"
141
+ }
142
+ ]
143
+ }
130
144
  }
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import ScreenNativeComponent from './ScreenNativeComponent';
3
+ import { StyleSheet } from 'react-native';
4
+
5
+ export default function Screen(props) {
6
+ return (
7
+ <ScreenNativeComponent
8
+ {...props}
9
+ style={[props.style, StyleSheet.absoluteFill]}
10
+ />
11
+ );
12
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @flow strict-local
3
+ * @format
4
+ */
5
+ /* eslint-disable */
6
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
7
+ import type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';
8
+ import type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';
9
+ import type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';
10
+ import type {
11
+ BubblingEventHandler,
12
+ WithDefault,
13
+ Int32,
14
+ } from 'react-native/Libraries/Types/CodegenTypes';
15
+
16
+ type ScreenEvent = $ReadOnly<{||}>;
17
+
18
+ type ScreenDismissedEvent = $ReadOnly<{|
19
+ dismissCount: Int32,
20
+ |}>;
21
+
22
+ type StackPresentation = 'push' | 'modal' | 'transparentModal';
23
+ type StackAnimation =
24
+ | 'default'
25
+ | 'flip'
26
+ | 'simple_push'
27
+ | 'none'
28
+ | 'fade'
29
+ | 'slide_from_right'
30
+ | 'slide_from_left'
31
+ | 'slide_from_bottom'
32
+ | 'fade_from_bottom';
33
+
34
+ type ReplaceAnimation = 'pop' | 'push';
35
+
36
+ export type NativeProps = $ReadOnly<{|
37
+ ...ViewProps,
38
+ onAppear?: ?BubblingEventHandler<ScreenEvent>,
39
+ onDisappear?: ?BubblingEventHandler<ScreenEvent>,
40
+ onDismissed?: ?BubblingEventHandler<ScreenDismissedEvent>,
41
+ onWillAppear?: ?BubblingEventHandler<ScreenEvent>,
42
+ onWillDisappear?: ?BubblingEventHandler<ScreenEvent>,
43
+ // TODO: implement this props on iOS
44
+ stackPresentation?: WithDefault<StackPresentation, 'push'>,
45
+ stackAnimation?: WithDefault<StackAnimation, 'default'>,
46
+ gestureEnabled?: WithDefault<boolean, true>,
47
+ replaceAnimation?: WithDefault<ReplaceAnimation, 'pop'>,
48
+ screenOrientation?: string,
49
+ statusBarAnimation?: string,
50
+ statusBarColor?: ColorValue,
51
+ statusBarStyle?: string,
52
+ statusBarTranslucent?: boolean,
53
+ statusBarHidden?: boolean,
54
+ navigationBarColor?: ColorValue,
55
+ navigationBarHidden?: boolean,
56
+ nativeBackButtonDismissalEnabled?: boolean,
57
+ activityState?: WithDefault<Int32, -1>,
58
+ |}>;
59
+
60
+ type ComponentType = HostComponent<NativeProps>;
61
+
62
+ export default (codegenNativeComponent<NativeProps>('RNSScreen', {
63
+ interfaceOnly: true,
64
+ }): ComponentType);
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import ScreenStackNativeComponent from './ScreenStackNativeComponent';
3
+
4
+ export default function ScreenStack(props) {
5
+ return (
6
+ <ScreenStackNativeComponent {...props} style={[{ flex: 1 }, props.style]} />
7
+ );
8
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @flow strict-local
3
+ * @format
4
+ */
5
+ /* eslint-disable */
6
+ import * as React from 'react';
7
+
8
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
9
+ import type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';
10
+ import type { HostComponent } from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';
11
+ import type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';
12
+ import type {
13
+ Int32,
14
+ WithDefault,
15
+ } from 'react-native/Libraries/Types/CodegenTypes';
16
+
17
+ type DirectionType = 'rtl' | 'ltr';
18
+
19
+ export type NativeProps = $ReadOnly<{|
20
+ ...ViewProps,
21
+ backgroundColor?: ColorValue,
22
+ backTitle?: string,
23
+ backTitleFontFamily?: string,
24
+ backTitleFontSize?: Int32,
25
+ color?: ColorValue,
26
+ direction?: WithDefault<DirectionType, 'ltr'>,
27
+ hidden?: boolean,
28
+ hideShadow?: boolean,
29
+ largeTitle?: boolean,
30
+ largeTitleFontFamily?: string,
31
+ largeTitleFontSize?: Int32,
32
+ largeTitleFontWeight?: string,
33
+ largeTitleBackgroundColor?: ColorValue,
34
+ largeTitleHideShadow?: boolean,
35
+ largeTitleColor?: ColorValue,
36
+ translucent?: boolean,
37
+ title?: string,
38
+ titleFontFamily?: string,
39
+ titleFontSize?: Int32,
40
+ titleFontWeight?: string,
41
+ titleColor?: ColorValue,
42
+ disableBackButtonMenu?: boolean,
43
+ hideBackButton?: boolean,
44
+ // TODO: implement this props on iOS
45
+ topInsetEnabled?: boolean,
46
+ backButtonInCustomView?: boolean,
47
+ |}>;
48
+
49
+ type ComponentType = HostComponent<NativeProps>;
50
+
51
+ export default (codegenNativeComponent<NativeProps>(
52
+ 'RNSScreenStackHeaderConfig',
53
+ {}
54
+ ): ComponentType);
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import NativeScreenStackHeaderSubview from './ScreenStackHeaderSubviewNativeComponent';
3
+ import { StyleSheet } from 'react-native';
4
+
5
+ const styles = StyleSheet.create({
6
+ headerSubview: {
7
+ position: 'absolute',
8
+ top: 0,
9
+ right: 0,
10
+ flexDirection: 'row',
11
+ alignItems: 'center',
12
+ justifyContent: 'center',
13
+ },
14
+ });
15
+
16
+ export default function ScreenStackHeaderSubview(props) {
17
+ return (
18
+ <NativeScreenStackHeaderSubview {...props} style={styles.headerSubview} />
19
+ );
20
+ }