react-native-screens 3.32.0 → 3.33.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 (142) hide show
  1. package/README.md +17 -13
  2. package/RNScreens.podspec +10 -52
  3. package/android/CMakeLists.txt +48 -4
  4. package/android/build.gradle +9 -81
  5. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +25 -16
  6. package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +53 -0
  7. package/android/src/main/cpp/NativeProxy.cpp +51 -0
  8. package/android/src/main/cpp/NativeProxy.h +35 -0
  9. package/android/src/main/cpp/OnLoad.cpp +8 -0
  10. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +5 -2
  11. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +4 -1
  12. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +2 -2
  13. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +36 -17
  14. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +134 -38
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +52 -30
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +17 -7
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +10 -2
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +56 -27
  19. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +8 -1
  20. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +50 -19
  21. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +60 -37
  22. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +4 -0
  23. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +85 -58
  24. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +128 -37
  25. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +19 -4
  26. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +16 -10
  27. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +28 -25
  28. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +173 -78
  29. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +59 -24
  30. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +30 -8
  31. package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +3 -1
  32. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +101 -50
  33. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +29 -22
  34. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +7 -2
  35. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +4 -1
  36. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +4 -1
  37. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +4 -1
  38. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +5 -5
  39. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +4 -1
  40. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +4 -1
  41. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +8 -4
  42. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +7 -6
  43. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +4 -1
  44. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +4 -1
  45. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +4 -1
  46. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +4 -3
  47. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +4 -1
  48. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +4 -1
  49. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +4 -1
  50. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +9 -4
  51. package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +4 -1
  52. package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +1 -5
  53. package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +214 -0
  54. package/android/src/main/jni/CMakeLists.txt +5 -4
  55. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +3 -0
  56. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +1 -0
  57. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -5
  58. package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +19 -0
  59. package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +4 -0
  60. package/common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h +51 -0
  61. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +2 -1
  62. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +1 -1
  63. package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +140 -1
  64. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +51 -1
  65. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +23 -1
  66. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +20 -0
  67. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +23 -1
  68. package/common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h +36 -0
  69. package/cpp/RNSScreenRemovalListener.cpp +25 -0
  70. package/cpp/RNSScreenRemovalListener.h +20 -0
  71. package/ios/RNSConvert.h +1 -0
  72. package/ios/RNSModalScreen.mm +22 -0
  73. package/ios/RNSModule.mm +1 -1
  74. package/ios/RNSScreen.h +2 -1
  75. package/ios/RNSScreen.mm +27 -19
  76. package/ios/RNSScreenStack.mm +24 -77
  77. package/ios/RNSScreenStackAnimator.mm +43 -6
  78. package/ios/RNSScreenStackHeaderConfig.mm +49 -11
  79. package/ios/RNSScreenStackHeaderSubview.mm +8 -0
  80. package/ios/utils/UIView+RNSUtility.h +23 -0
  81. package/ios/utils/UIView+RNSUtility.mm +55 -0
  82. package/lib/commonjs/components/ScreenStack.js +8 -1
  83. package/lib/commonjs/components/ScreenStack.js.map +1 -1
  84. package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
  85. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
  86. package/lib/commonjs/native-stack/views/NativeStackView.js +2 -0
  87. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  88. package/lib/module/components/ScreenStack.js +8 -1
  89. package/lib/module/components/ScreenStack.js.map +1 -1
  90. package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
  91. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  92. package/lib/module/native-stack/views/NativeStackView.js +2 -0
  93. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  94. package/lib/typescript/components/ScreenStack.d.ts.map +1 -1
  95. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +1 -0
  96. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
  97. package/lib/typescript/fabric/ScreenNativeComponent.d.ts +1 -0
  98. package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
  99. package/lib/typescript/native-stack/types.d.ts +10 -0
  100. package/lib/typescript/native-stack/types.d.ts.map +1 -1
  101. package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
  102. package/lib/typescript/types.d.ts +10 -0
  103. package/lib/typescript/types.d.ts.map +1 -1
  104. package/native-stack/README.md +110 -99
  105. package/package.json +6 -3
  106. package/react-native.config.js +17 -15
  107. package/src/TransitionProgressContext.tsx +1 -1
  108. package/src/components/Screen.tsx +4 -4
  109. package/src/components/ScreenStack.tsx +11 -1
  110. package/src/components/ScreenStackHeaderConfig.tsx +5 -5
  111. package/src/components/ScreenStackHeaderConfig.web.tsx +6 -6
  112. package/src/components/SearchBar.tsx +4 -4
  113. package/src/core.ts +1 -1
  114. package/src/fabric/ModalScreenNativeComponent.ts +1 -0
  115. package/src/fabric/ScreenNativeComponent.ts +1 -0
  116. package/src/fabric/ScreenNavigationContainerNativeComponent.ts +1 -1
  117. package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +1 -1
  118. package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +1 -1
  119. package/src/fabric/SearchBarNativeComponent.ts +1 -1
  120. package/src/gesture-handler/ScreenGestureDetector.tsx +5 -5
  121. package/src/gesture-handler/constraints.ts +5 -5
  122. package/src/gesture-handler/fabricUtils.ts +1 -1
  123. package/src/native-stack/contexts/GHContext.tsx +1 -1
  124. package/src/native-stack/navigators/createNativeStackNavigator.tsx +3 -3
  125. package/src/native-stack/types.tsx +14 -4
  126. package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
  127. package/src/native-stack/utils/getStatusBarHeight.tsx +1 -1
  128. package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
  129. package/src/native-stack/utils/useBackPressSubscription.tsx +1 -1
  130. package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
  131. package/src/native-stack/views/FontProcessor.tsx +1 -1
  132. package/src/native-stack/views/HeaderConfig.tsx +1 -1
  133. package/src/native-stack/views/NativeStackView.tsx +11 -9
  134. package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
  135. package/src/reanimated/ReanimatedNativeStackScreen.tsx +5 -5
  136. package/src/reanimated/ReanimatedScreen.tsx +2 -2
  137. package/src/reanimated/ReanimatedScreenProvider.tsx +1 -1
  138. package/src/reanimated/useReanimatedHeaderHeight.tsx +1 -1
  139. package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
  140. package/src/types.tsx +15 -5
  141. package/src/useTransitionProgress.tsx +1 -1
  142. package/windows/README.md +4 -1
@@ -19,7 +19,7 @@ import getStatusBarHeight from '../native-stack/utils/getStatusBarHeight';
19
19
  import ReanimatedHeaderHeightContext from './ReanimatedHeaderHeightContext';
20
20
 
21
21
  const AnimatedScreen = Animated.createAnimatedComponent(
22
- InnerScreen as unknown as React.ComponentClass
22
+ InnerScreen as unknown as React.ComponentClass,
23
23
  );
24
24
 
25
25
  // We use prop added to global by reanimated since it seems safer than the one from RN. See:
@@ -40,7 +40,7 @@ const ReanimatedNativeStackScreen = React.forwardRef<
40
40
  const statusBarHeight = getStatusBarHeight(
41
41
  topInset,
42
42
  dimensions,
43
- isStatusBarTranslucent
43
+ isStatusBarTranslucent,
44
44
  );
45
45
 
46
46
  // Default header height, normally used in `useHeaderHeight` hook.
@@ -49,7 +49,7 @@ const ReanimatedNativeStackScreen = React.forwardRef<
49
49
  dimensions,
50
50
  statusBarHeight,
51
51
  stackPresentation,
52
- hasLargeHeader
52
+ hasLargeHeader,
53
53
  );
54
54
 
55
55
  const cachedHeaderHeight = React.useRef(defaultHeaderHeight);
@@ -79,7 +79,7 @@ const ReanimatedNativeStackScreen = React.forwardRef<
79
79
  ENABLE_FABRIC
80
80
  ? 'onTransitionProgress'
81
81
  : 'topTransitionProgress',
82
- ]
82
+ ],
83
83
  )}
84
84
  onHeaderHeightChangeReanimated={useEvent(
85
85
  (event: HeaderHeightChangeEventType) => {
@@ -96,7 +96,7 @@ const ReanimatedNativeStackScreen = React.forwardRef<
96
96
  : ENABLE_FABRIC
97
97
  ? 'onHeaderHeightChange'
98
98
  : 'topHeaderHeightChange',
99
- ]
99
+ ],
100
100
  )}
101
101
  {...rest}>
102
102
  <ReanimatedHeaderHeightContext.Provider value={headerHeight}>
@@ -5,7 +5,7 @@ import { InnerScreen, ScreenProps } from 'react-native-screens';
5
5
  import Animated from 'react-native-reanimated';
6
6
 
7
7
  const AnimatedScreen = Animated.createAnimatedComponent(
8
- InnerScreen as unknown as React.ComponentClass
8
+ InnerScreen as unknown as React.ComponentClass,
9
9
  );
10
10
 
11
11
  const ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, ScreenProps>(
@@ -17,7 +17,7 @@ const ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, ScreenProps>(
17
17
  {...props}
18
18
  />
19
19
  );
20
- }
20
+ },
21
21
  );
22
22
 
23
23
  ReanimatedScreen.displayName = 'ReanimatedScreen';
@@ -31,7 +31,7 @@ class ReanimatedScreenWrapper extends React.Component<ScreenProps> {
31
31
  }
32
32
 
33
33
  export default function ReanimatedScreenProvider(
34
- props: PropsWithChildren<unknown>
34
+ props: PropsWithChildren<unknown>,
35
35
  ) {
36
36
  return (
37
37
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -6,7 +6,7 @@ export default function useReanimatedHeaderHeight() {
6
6
 
7
7
  if (height === undefined) {
8
8
  throw new Error(
9
- "Couldn't find the header height using Reanimated. Are you inside a screen in a navigator with a header and your NavigationContainer is wrapped in ReanimatedScreenProvider?"
9
+ "Couldn't find the header height using Reanimated. Are you inside a screen in a navigator with a header and your NavigationContainer is wrapped in ReanimatedScreenProvider?",
10
10
  );
11
11
  }
12
12
 
@@ -6,7 +6,7 @@ export default function useReanimatedTransitionProgress() {
6
6
 
7
7
  if (progress === undefined) {
8
8
  throw new Error(
9
- "Couldn't find values for reanimated transition progress. Are you inside a screen in Native Stack?"
9
+ "Couldn't find values for reanimated transition progress. Are you inside a screen in Native Stack?",
10
10
  );
11
11
  }
12
12
 
package/src/types.tsx CHANGED
@@ -133,6 +133,16 @@ export interface ScreenProps extends ViewProps {
133
133
  * @platform ios
134
134
  */
135
135
  fullScreenSwipeEnabled?: boolean;
136
+ /**
137
+ * Whether the full screen dismiss gesture has shadow under view during transition. The gesture uses custom transition and thus
138
+ * doesn't have a shadow by default. When enabled, a custom shadow view is added during the transition which tries to mimic the
139
+ * default iOS shadow. Defaults to `false`.
140
+ *
141
+ * This does not affect the behavior of transitions that don't use gestures, enabled by `fullScreenGestureEnabled` prop.
142
+ *
143
+ * @platform ios
144
+ */
145
+ fullScreenSwipeShadowEnabled?: boolean;
136
146
  /**
137
147
  * Whether you can use gestures to dismiss this screen. Defaults to `true`.
138
148
  *
@@ -201,7 +211,7 @@ export interface ScreenProps extends ViewProps {
201
211
  * A callback that gets called when the header height has changed.
202
212
  */
203
213
  onHeaderHeightChange?: (
204
- e: NativeSyntheticEvent<HeaderHeightChangeEventType>
214
+ e: NativeSyntheticEvent<HeaderHeightChangeEventType>,
205
215
  ) => void;
206
216
  /**
207
217
  * A callback that gets called after swipe back is canceled.
@@ -219,13 +229,13 @@ export interface ScreenProps extends ViewProps {
219
229
  * @platform ios
220
230
  */
221
231
  onNativeDismissCancelled?: (
222
- e: NativeSyntheticEvent<{ dismissCount: number }>
232
+ e: NativeSyntheticEvent<{ dismissCount: number }>,
223
233
  ) => void;
224
234
  /**
225
235
  * An internal callback called every frame during the transition of screens of `native-stack`, used to feed transition context.
226
236
  */
227
237
  onTransitionProgress?: (
228
- e: NativeSyntheticEvent<TransitionProgressEventType>
238
+ e: NativeSyntheticEvent<TransitionProgressEventType>,
229
239
  ) => void;
230
240
  /**
231
241
  * A callback that gets called when the current screen will appear. This is called as soon as the transition begins.
@@ -403,7 +413,7 @@ export interface ScreenContainerProps extends ViewProps {
403
413
 
404
414
  export interface GestureDetectorBridge {
405
415
  stackUseEffectCallback: (
406
- stackRef: React.MutableRefObject<React.Ref<NativeStackNavigatorProps>>
416
+ stackRef: React.MutableRefObject<React.Ref<NativeStackNavigatorProps>>,
407
417
  ) => void;
408
418
  }
409
419
 
@@ -675,7 +685,7 @@ export interface SearchBarProps {
675
685
  * A callback that gets called when the search button is pressed. It receives the current text value of the search bar.
676
686
  */
677
687
  onSearchButtonPress?: (
678
- e: NativeSyntheticEvent<TextInputFocusEventData>
688
+ e: NativeSyntheticEvent<TextInputFocusEventData>,
679
689
  ) => void;
680
690
  /**
681
691
  * Text displayed when search field is empty
@@ -7,7 +7,7 @@ export default function useTransitionProgress() {
7
7
 
8
8
  if (progress === undefined) {
9
9
  throw new Error(
10
- "Couldn't find values for transition progress. Are you inside a screen in Native Stack?"
10
+ "Couldn't find values for transition progress. Are you inside a screen in Native Stack?",
11
11
  );
12
12
  }
13
13
 
package/windows/README.md CHANGED
@@ -1,12 +1,15 @@
1
1
  # react-native-screens Windows Implementation
2
2
 
3
3
  ## Module Installation
4
+
4
5
  You can either use autolinking on react-native-windows 0.63 and later or manually link the module on earlier releases.
5
6
 
6
7
  ## Automatic install with autolinking on RNW >= 0.63
8
+
7
9
  RNScreens supports autolinking. Just call: `npm i react-native-screens --save`
8
10
 
9
11
  ## Manual installation on RNW >= 0.62
12
+
10
13
  1. `npm install react-native-screens --save`
11
14
  2. Open your solution in Visual Studio 2019 (eg. `windows\yourapp.sln`)
12
15
  3. Right-click Solution icon in Solution Explorer > Add > Existing Project...
@@ -22,4 +25,4 @@ If you want to contribute to this module Windows implementation, first you must
22
25
 
23
26
  You must temporarily install the `react-native-windows` package. Versions of `react-native-windows` and `react-native` must match, e.g. if the module uses `react-native@0.62`, install `npm i react-native-windows@^0.62 --dev`.
24
27
 
25
- Now, you will be able to open corresponding `RNScreens...sln` file, e.g. `RNScreens62.sln` for `react-native-windows@0.62`.
28
+ Now, you will be able to open corresponding `RNScreens...sln` file, e.g. `RNScreens62.sln` for `react-native-windows@0.62`.