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,31 @@
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 { WithDefault } from 'react-native/Libraries/Types/CodegenTypes';
12
+
13
+ export type HeaderSubviewTypes =
14
+ | 'back'
15
+ | 'right'
16
+ | 'left'
17
+ | 'title'
18
+ | 'center'
19
+ | 'searchBar';
20
+
21
+ export type NativeProps = $ReadOnly<{|
22
+ ...ViewProps,
23
+ type?: WithDefault<HeaderSubviewTypes, 'left'>,
24
+ |}>;
25
+
26
+ type ComponentType = HostComponent<NativeProps>;
27
+
28
+ export default (codegenNativeComponent<NativeProps>(
29
+ 'RNSScreenStackHeaderSubview',
30
+ {}
31
+ ): ComponentType);
@@ -0,0 +1,19 @@
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
+
10
+ type NativeProps = $ReadOnly<{|
11
+ ...ViewProps,
12
+ |}>;
13
+
14
+ type ComponentType = HostComponent<NativeProps>;
15
+
16
+ export default (codegenNativeComponent<NativeProps>(
17
+ 'RNSScreenStack',
18
+ {}
19
+ ): ComponentType);
@@ -0,0 +1,11 @@
1
+ import Screen from './Screen';
2
+ import ScreenStackHeaderSubview from './ScreenStackHeaderSubview';
3
+ import ScreenStackHeaderConfig from './ScreenStackHeaderConfigNativeComponent';
4
+ import ScreenStack from './ScreenStack';
5
+
6
+ export {
7
+ Screen,
8
+ ScreenStackHeaderSubview,
9
+ ScreenStackHeaderConfig,
10
+ ScreenStack,
11
+ };
@@ -44,6 +44,11 @@ const isPlatformSupported =
44
44
 
45
45
  let ENABLE_SCREENS = isPlatformSupported;
46
46
 
47
+ // @ts-expect-error nativeFabricUIManager is not yet included in the RN types
48
+ const ENABLE_FABRIC = !!global?.nativeFabricUIManager;
49
+
50
+ const FabricComponents = ENABLE_FABRIC ? require('./fabric') : {};
51
+
47
52
  function enableScreens(shouldEnableScreens = true): void {
48
53
  ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;
49
54
  if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {
@@ -92,7 +97,9 @@ let NativeFullWindowOverlay: React.ComponentType<View>;
92
97
  const ScreensNativeModules = {
93
98
  get NativeScreen() {
94
99
  NativeScreenValue =
95
- NativeScreenValue || requireNativeComponent('RNSScreen');
100
+ NativeScreenValue ||
101
+ FabricComponents.Screen ||
102
+ requireNativeComponent('RNSScreen');
96
103
  return NativeScreenValue;
97
104
  },
98
105
 
@@ -114,13 +121,16 @@ const ScreensNativeModules = {
114
121
 
115
122
  get NativeScreenStack() {
116
123
  NativeScreenStack =
117
- NativeScreenStack || requireNativeComponent('RNSScreenStack');
124
+ NativeScreenStack ||
125
+ FabricComponents.ScreenStack ||
126
+ requireNativeComponent('RNSScreenStack');
118
127
  return NativeScreenStack;
119
128
  },
120
129
 
121
130
  get NativeScreenStackHeaderConfig() {
122
131
  NativeScreenStackHeaderConfig =
123
132
  NativeScreenStackHeaderConfig ||
133
+ FabricComponents.ScreenStackHeaderConfig ||
124
134
  requireNativeComponent('RNSScreenStackHeaderConfig');
125
135
  return NativeScreenStackHeaderConfig;
126
136
  },
@@ -128,6 +138,7 @@ const ScreensNativeModules = {
128
138
  get NativeScreenStackHeaderSubview() {
129
139
  NativeScreenStackHeaderSubview =
130
140
  NativeScreenStackHeaderSubview ||
141
+ FabricComponents.ScreenStackHeaderSubview ||
131
142
  requireNativeComponent('RNSScreenStackHeaderSubview');
132
143
  return NativeScreenStackHeaderSubview;
133
144
  },
@@ -222,9 +233,15 @@ class Screen extends React.Component<ScreenProps> {
222
233
  const { enabled = ENABLE_SCREENS, ...rest } = this.props;
223
234
 
224
235
  if (enabled && isPlatformSupported) {
225
- AnimatedNativeScreen =
226
- AnimatedNativeScreen ||
227
- Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);
236
+ if (!AnimatedNativeScreen) {
237
+ if (ENABLE_FABRIC) {
238
+ AnimatedNativeScreen = ScreensNativeModules.NativeScreen;
239
+ } else {
240
+ AnimatedNativeScreen = Animated.createAnimatedComponent(
241
+ ScreensNativeModules.NativeScreen
242
+ ) as React.ComponentType<ScreenProps>;
243
+ }
244
+ }
228
245
 
229
246
  let {
230
247
  // Filter out active prop in this case because it is unused and
@@ -247,6 +264,18 @@ class Screen extends React.Component<ScreenProps> {
247
264
 
248
265
  const processedColor = processColor(statusBarColor);
249
266
 
267
+ const handleRef = (ref: ViewConfig) => {
268
+ if (!ENABLE_FABRIC) {
269
+ if (ref?.viewConfig?.validAttributes?.style) {
270
+ ref.viewConfig.validAttributes.style = {
271
+ ...ref.viewConfig.validAttributes.style,
272
+ display: false,
273
+ };
274
+ }
275
+ this.setRef(ref);
276
+ }
277
+ };
278
+
250
279
  return (
251
280
  <MaybeFreeze freeze={activityState === 0}>
252
281
  <AnimatedNativeScreen
@@ -255,15 +284,7 @@ class Screen extends React.Component<ScreenProps> {
255
284
  activityState={activityState}
256
285
  // This prevents showing blank screen when navigating between multiple screens with freezing
257
286
  // https://github.com/software-mansion/react-native-screens/pull/1208
258
- ref={(ref: ViewConfig) => {
259
- if (ref?.viewConfig?.validAttributes?.style) {
260
- ref.viewConfig.validAttributes.style = {
261
- ...ref.viewConfig.validAttributes.style,
262
- display: false,
263
- };
264
- }
265
- this.setRef(ref);
266
- }}
287
+ ref={handleRef}
267
288
  onTransitionProgress={
268
289
  !isNativeStack
269
290
  ? undefined