react-native-screens 4.0.0-beta.9 → 4.1.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 (268) hide show
  1. package/README.md +9 -2
  2. package/android/CMakeLists.txt +28 -19
  3. package/android/src/main/cpp/jni-adapter.cpp +3 -0
  4. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +13 -3
  5. package/android/src/main/java/com/swmansion/rnscreens/NativeDismissalObserver.kt +12 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +4 -0
  7. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +64 -68
  8. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetBehaviorExt.kt +42 -0
  9. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingFragment.kt +24 -19
  10. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/SheetUtils.kt +8 -0
  11. package/android/src/main/java/com/swmansion/rnscreens/ext/ViewExt.kt +10 -3
  12. package/android/src/main/jni/CMakeLists.txt +28 -19
  13. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +2 -2
  14. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +1 -1
  15. package/ios/RNSConvert.h +13 -6
  16. package/ios/RNSConvert.mm +130 -94
  17. package/ios/RNSEnums.h +47 -0
  18. package/ios/RNSFullWindowOverlay.mm +4 -0
  19. package/ios/RNSPercentDrivenInteractiveTransition.h +12 -0
  20. package/ios/RNSPercentDrivenInteractiveTransition.mm +69 -0
  21. package/ios/RNSScreen.h +14 -0
  22. package/ios/RNSScreen.mm +35 -9
  23. package/ios/RNSScreenContainer.mm +5 -0
  24. package/ios/RNSScreenFooter.mm +24 -25
  25. package/ios/RNSScreenStack.mm +79 -8
  26. package/ios/RNSScreenStackAnimator.h +13 -1
  27. package/ios/RNSScreenStackAnimator.mm +233 -130
  28. package/ios/RNSScreenStackHeaderConfig.h +10 -7
  29. package/ios/RNSScreenStackHeaderConfig.mm +49 -30
  30. package/ios/RNSScreenStackHeaderSubview.mm +4 -0
  31. package/ios/utils/RNSDefines.h +7 -0
  32. package/lib/commonjs/components/DebugContainer.js +40 -0
  33. package/lib/commonjs/components/DebugContainer.js.map +1 -0
  34. package/lib/commonjs/components/DebugContainer.web.js +15 -0
  35. package/lib/commonjs/components/DebugContainer.web.js.map +1 -0
  36. package/lib/commonjs/components/FullWindowOverlay.js +8 -5
  37. package/lib/commonjs/components/FullWindowOverlay.js.map +1 -1
  38. package/lib/commonjs/components/Screen.js +28 -10
  39. package/lib/commonjs/components/Screen.js.map +1 -1
  40. package/lib/commonjs/components/ScreenContainer.js +3 -5
  41. package/lib/commonjs/components/ScreenContainer.js.map +1 -1
  42. package/lib/commonjs/components/ScreenContainer.web.js +3 -4
  43. package/lib/commonjs/components/ScreenContainer.web.js.map +1 -1
  44. package/lib/commonjs/components/ScreenContentWrapper.js +2 -4
  45. package/lib/commonjs/components/ScreenContentWrapper.js.map +1 -1
  46. package/lib/commonjs/components/ScreenContentWrapper.web.js +1 -2
  47. package/lib/commonjs/components/ScreenContentWrapper.web.js.map +1 -1
  48. package/lib/commonjs/components/ScreenFooter.js +2 -8
  49. package/lib/commonjs/components/ScreenFooter.js.map +1 -1
  50. package/lib/commonjs/components/ScreenFooter.web.js +1 -2
  51. package/lib/commonjs/components/ScreenFooter.web.js.map +1 -1
  52. package/lib/commonjs/components/ScreenStack.js +47 -9
  53. package/lib/commonjs/components/ScreenStack.js.map +1 -1
  54. package/lib/commonjs/components/ScreenStack.web.js +2 -1
  55. package/lib/commonjs/components/ScreenStack.web.js.map +1 -1
  56. package/lib/commonjs/components/ScreenStackHeaderConfig.js +10 -10
  57. package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -1
  58. package/lib/commonjs/components/ScreenStackItem.js +99 -0
  59. package/lib/commonjs/components/ScreenStackItem.js.map +1 -0
  60. package/lib/commonjs/components/SearchBar.js +5 -5
  61. package/lib/commonjs/components/SearchBar.js.map +1 -1
  62. package/lib/commonjs/components/SearchBar.web.js +3 -4
  63. package/lib/commonjs/components/SearchBar.web.js.map +1 -1
  64. package/lib/commonjs/contexts.js +11 -0
  65. package/lib/commonjs/contexts.js.map +1 -0
  66. package/lib/commonjs/core.js +0 -3
  67. package/lib/commonjs/core.js.map +1 -1
  68. package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
  69. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  70. package/lib/commonjs/gesture-handler/GestureDetectorProvider.js +2 -2
  71. package/lib/commonjs/gesture-handler/GestureDetectorProvider.js.map +1 -1
  72. package/lib/commonjs/gesture-handler/ScreenGestureDetector.js +3 -3
  73. package/lib/commonjs/gesture-handler/ScreenGestureDetector.js.map +1 -1
  74. package/lib/commonjs/gesture-handler/fabricUtils.js +54 -18
  75. package/lib/commonjs/gesture-handler/fabricUtils.js.map +1 -1
  76. package/lib/commonjs/index.js +23 -86
  77. package/lib/commonjs/index.js.map +1 -1
  78. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +4 -0
  79. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  80. package/lib/commonjs/native-stack/views/FooterComponent.js +2 -2
  81. package/lib/commonjs/native-stack/views/FooterComponent.js.map +1 -1
  82. package/lib/commonjs/native-stack/views/HeaderConfig.js +10 -8
  83. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  84. package/lib/commonjs/native-stack/views/NativeStackView.js +34 -39
  85. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  86. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +2 -2
  87. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  88. package/lib/commonjs/reanimated/ReanimatedScreen.js +2 -2
  89. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  90. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +2 -2
  91. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -1
  92. package/lib/commonjs/utils.js +28 -6
  93. package/lib/commonjs/utils.js.map +1 -1
  94. package/lib/module/components/DebugContainer.js +31 -0
  95. package/lib/module/components/DebugContainer.js.map +1 -0
  96. package/lib/module/components/DebugContainer.web.js +6 -0
  97. package/lib/module/components/DebugContainer.web.js.map +1 -0
  98. package/lib/module/components/FullWindowOverlay.js +9 -6
  99. package/lib/module/components/FullWindowOverlay.js.map +1 -1
  100. package/lib/module/components/Screen.js +27 -9
  101. package/lib/module/components/Screen.js.map +1 -1
  102. package/lib/module/components/ScreenContainer.js +2 -4
  103. package/lib/module/components/ScreenContainer.js.map +1 -1
  104. package/lib/module/components/ScreenContainer.web.js +2 -3
  105. package/lib/module/components/ScreenContainer.web.js.map +1 -1
  106. package/lib/module/components/ScreenContentWrapper.js +1 -3
  107. package/lib/module/components/ScreenContentWrapper.js.map +1 -1
  108. package/lib/module/components/ScreenContentWrapper.web.js +0 -1
  109. package/lib/module/components/ScreenContentWrapper.web.js.map +1 -1
  110. package/lib/module/components/ScreenFooter.js +1 -7
  111. package/lib/module/components/ScreenFooter.js.map +1 -1
  112. package/lib/module/components/ScreenFooter.web.js +0 -1
  113. package/lib/module/components/ScreenFooter.web.js.map +1 -1
  114. package/lib/module/components/ScreenStack.js +46 -8
  115. package/lib/module/components/ScreenStack.js.map +1 -1
  116. package/lib/module/components/ScreenStack.web.js +2 -1
  117. package/lib/module/components/ScreenStack.web.js.map +1 -1
  118. package/lib/module/components/ScreenStackHeaderConfig.js +10 -8
  119. package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -1
  120. package/lib/module/components/ScreenStackItem.js +90 -0
  121. package/lib/module/components/ScreenStackItem.js.map +1 -0
  122. package/lib/module/components/SearchBar.js +3 -3
  123. package/lib/module/components/SearchBar.js.map +1 -1
  124. package/lib/module/components/SearchBar.web.js +2 -3
  125. package/lib/module/components/SearchBar.web.js.map +1 -1
  126. package/lib/module/contexts.js +4 -0
  127. package/lib/module/contexts.js.map +1 -0
  128. package/lib/module/core.js +0 -3
  129. package/lib/module/core.js.map +1 -1
  130. package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
  131. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  132. package/lib/module/gesture-handler/GestureDetectorProvider.js +1 -1
  133. package/lib/module/gesture-handler/GestureDetectorProvider.js.map +1 -1
  134. package/lib/module/gesture-handler/ScreenGestureDetector.js +3 -3
  135. package/lib/module/gesture-handler/ScreenGestureDetector.js.map +1 -1
  136. package/lib/module/gesture-handler/fabricUtils.js +55 -17
  137. package/lib/module/gesture-handler/fabricUtils.js.map +1 -1
  138. package/lib/module/index.js +12 -18
  139. package/lib/module/index.js.map +1 -1
  140. package/lib/module/native-stack/navigators/createNativeStackNavigator.js +4 -0
  141. package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  142. package/lib/module/native-stack/views/FooterComponent.js +1 -1
  143. package/lib/module/native-stack/views/FooterComponent.js.map +1 -1
  144. package/lib/module/native-stack/views/HeaderConfig.js +3 -1
  145. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  146. package/lib/module/native-stack/views/NativeStackView.js +28 -33
  147. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  148. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +1 -2
  149. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  150. package/lib/module/reanimated/ReanimatedScreen.js +1 -2
  151. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  152. package/lib/module/reanimated/ReanimatedScreenProvider.js +1 -1
  153. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -1
  154. package/lib/module/utils.js +26 -5
  155. package/lib/module/utils.js.map +1 -1
  156. package/lib/typescript/components/DebugContainer.d.ts +15 -0
  157. package/lib/typescript/components/DebugContainer.d.ts.map +1 -0
  158. package/lib/typescript/components/DebugContainer.web.d.ts +4 -0
  159. package/lib/typescript/components/DebugContainer.web.d.ts.map +1 -0
  160. package/lib/typescript/components/FullWindowOverlay.d.ts.map +1 -1
  161. package/lib/typescript/components/Screen.d.ts +2 -7
  162. package/lib/typescript/components/Screen.d.ts.map +1 -1
  163. package/lib/typescript/components/Screen.web.d.ts +1 -1
  164. package/lib/typescript/components/Screen.web.d.ts.map +1 -1
  165. package/lib/typescript/components/ScreenContainer.d.ts +1 -3
  166. package/lib/typescript/components/ScreenContainer.d.ts.map +1 -1
  167. package/lib/typescript/components/ScreenContainer.web.d.ts +2 -3
  168. package/lib/typescript/components/ScreenContainer.web.d.ts.map +1 -1
  169. package/lib/typescript/components/ScreenContentWrapper.d.ts +0 -1
  170. package/lib/typescript/components/ScreenContentWrapper.d.ts.map +1 -1
  171. package/lib/typescript/components/ScreenContentWrapper.web.d.ts +0 -1
  172. package/lib/typescript/components/ScreenContentWrapper.web.d.ts.map +1 -1
  173. package/lib/typescript/components/ScreenFooter.d.ts +0 -4
  174. package/lib/typescript/components/ScreenFooter.d.ts.map +1 -1
  175. package/lib/typescript/components/ScreenFooter.web.d.ts +0 -1
  176. package/lib/typescript/components/ScreenFooter.web.d.ts.map +1 -1
  177. package/lib/typescript/components/ScreenStack.d.ts +1 -1
  178. package/lib/typescript/components/ScreenStack.d.ts.map +1 -1
  179. package/lib/typescript/components/ScreenStack.web.d.ts +2 -1
  180. package/lib/typescript/components/ScreenStack.web.d.ts.map +1 -1
  181. package/lib/typescript/components/ScreenStackHeaderConfig.d.ts +3 -3
  182. package/lib/typescript/components/ScreenStackHeaderConfig.d.ts.map +1 -1
  183. package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts +1 -1
  184. package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts.map +1 -1
  185. package/lib/typescript/components/ScreenStackItem.d.ts +11 -0
  186. package/lib/typescript/components/ScreenStackItem.d.ts.map +1 -0
  187. package/lib/typescript/components/SearchBar.d.ts +1 -15
  188. package/lib/typescript/components/SearchBar.d.ts.map +1 -1
  189. package/lib/typescript/components/SearchBar.web.d.ts +2 -3
  190. package/lib/typescript/components/SearchBar.web.d.ts.map +1 -1
  191. package/lib/typescript/contexts.d.ts +5 -0
  192. package/lib/typescript/contexts.d.ts.map +1 -0
  193. package/lib/typescript/core.d.ts +0 -1
  194. package/lib/typescript/core.d.ts.map +1 -1
  195. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +9 -3
  196. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
  197. package/lib/typescript/fabric/ScreenNativeComponent.d.ts +2 -2
  198. package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
  199. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +2 -2
  200. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
  201. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +1 -1
  202. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -1
  203. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts +2 -2
  204. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts.map +1 -1
  205. package/lib/typescript/gesture-handler/fabricUtils.d.ts +7 -5
  206. package/lib/typescript/gesture-handler/fabricUtils.d.ts.map +1 -1
  207. package/lib/typescript/index.d.ts +10 -16
  208. package/lib/typescript/index.d.ts.map +1 -1
  209. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +3 -0
  210. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -1
  211. package/lib/typescript/native-stack/types.d.ts +58 -12
  212. package/lib/typescript/native-stack/types.d.ts.map +1 -1
  213. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +1 -1
  214. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -1
  215. package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -1
  216. package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
  217. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
  218. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts.map +1 -1
  219. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
  220. package/lib/typescript/reanimated/ReanimatedScreen.d.ts.map +1 -1
  221. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts.map +1 -1
  222. package/lib/typescript/types.d.ts +52 -16
  223. package/lib/typescript/types.d.ts.map +1 -1
  224. package/lib/typescript/utils.d.ts +26 -1
  225. package/lib/typescript/utils.d.ts.map +1 -1
  226. package/native-stack/README.md +5 -4
  227. package/native-stack/package.json +4 -4
  228. package/package.json +1 -1
  229. package/react-native.config.js +16 -28
  230. package/src/components/DebugContainer.tsx +47 -0
  231. package/src/components/DebugContainer.web.tsx +7 -0
  232. package/src/components/FullWindowOverlay.tsx +10 -2
  233. package/src/components/Screen.tsx +38 -24
  234. package/src/components/Screen.web.tsx +1 -1
  235. package/src/components/ScreenContainer.tsx +4 -11
  236. package/src/components/ScreenContainer.web.tsx +2 -3
  237. package/src/components/ScreenContentWrapper.tsx +2 -5
  238. package/src/components/ScreenContentWrapper.web.tsx +1 -2
  239. package/src/components/ScreenFooter.tsx +2 -8
  240. package/src/components/ScreenFooter.web.tsx +1 -2
  241. package/src/components/ScreenStack.tsx +99 -12
  242. package/src/components/ScreenStack.web.tsx +3 -1
  243. package/src/components/ScreenStackHeaderConfig.tsx +25 -14
  244. package/src/components/ScreenStackHeaderConfig.web.tsx +1 -1
  245. package/src/components/ScreenStackItem.tsx +162 -0
  246. package/src/components/SearchBar.tsx +4 -7
  247. package/src/components/SearchBar.web.tsx +2 -3
  248. package/src/contexts.tsx +9 -0
  249. package/src/core.ts +0 -3
  250. package/src/fabric/ModalScreenNativeComponent.ts +11 -3
  251. package/src/fabric/ScreenNativeComponent.ts +2 -2
  252. package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +2 -1
  253. package/src/fabric/ScreenStackNativeComponent.ts +1 -1
  254. package/src/gesture-handler/GestureDetectorProvider.tsx +2 -2
  255. package/src/gesture-handler/ScreenGestureDetector.tsx +4 -4
  256. package/src/gesture-handler/fabricUtils.ts +74 -27
  257. package/src/index.tsx +11 -37
  258. package/src/native-stack/navigators/createNativeStackNavigator.tsx +3 -0
  259. package/src/native-stack/types.tsx +60 -17
  260. package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
  261. package/src/native-stack/views/FooterComponent.tsx +1 -1
  262. package/src/native-stack/views/HeaderConfig.tsx +7 -5
  263. package/src/native-stack/views/NativeStackView.tsx +48 -67
  264. package/src/reanimated/ReanimatedNativeStackScreen.tsx +2 -2
  265. package/src/reanimated/ReanimatedScreen.tsx +2 -1
  266. package/src/reanimated/ReanimatedScreenProvider.tsx +2 -1
  267. package/src/types.tsx +72 -15
  268. package/src/utils.ts +27 -5
@@ -38,25 +38,34 @@ target_include_directories(
38
38
  ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}
39
39
  )
40
40
 
41
- target_link_libraries(
42
- ${LIB_TARGET_NAME}
43
- fbjni
44
- folly_runtime
45
- glog
46
- jsi
47
- react_codegen_rncore
48
- react_debug
49
- react_nativemodule_core
50
- react_render_core
51
- react_render_debug
52
- react_render_graphics
53
- react_render_mapbuffer
54
- react_render_componentregistry
55
- react_utils
56
- rrc_view
57
- turbomodulejsijni
58
- yoga
59
- )
41
+ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
42
+ target_link_libraries(
43
+ ${LIB_TARGET_NAME}
44
+ ReactAndroid::reactnative
45
+ ReactAndroid::jsi
46
+ fbjni::fbjni
47
+ )
48
+ else()
49
+ target_link_libraries(
50
+ ${LIB_TARGET_NAME}
51
+ fbjni
52
+ folly_runtime
53
+ glog
54
+ jsi
55
+ react_codegen_rncore
56
+ react_debug
57
+ react_nativemodule_core
58
+ react_render_core
59
+ react_render_debug
60
+ react_render_graphics
61
+ react_render_mapbuffer
62
+ react_render_componentregistry
63
+ react_utils
64
+ rrc_view
65
+ turbomodulejsijni
66
+ yoga
67
+ )
68
+ endif()
60
69
 
61
70
  target_compile_options(
62
71
  ${LIB_TARGET_NAME}
@@ -52,7 +52,7 @@ public class RNSScreenManagerDelegate<T extends View, U extends BaseViewManagerI
52
52
  mViewManager.setFullScreenSwipeEnabled(view, value == null ? false : (boolean) value);
53
53
  break;
54
54
  case "fullScreenSwipeShadowEnabled":
55
- mViewManager.setFullScreenSwipeShadowEnabled(view, value == null ? false : (boolean) value);
55
+ mViewManager.setFullScreenSwipeShadowEnabled(view, value == null ? true : (boolean) value);
56
56
  break;
57
57
  case "homeIndicatorHidden":
58
58
  mViewManager.setHomeIndicatorHidden(view, value == null ? false : (boolean) value);
@@ -91,7 +91,7 @@ public class RNSScreenManagerDelegate<T extends View, U extends BaseViewManagerI
91
91
  mViewManager.setStackAnimation(view, (String) value);
92
92
  break;
93
93
  case "transitionDuration":
94
- mViewManager.setTransitionDuration(view, value == null ? 350 : ((Double) value).intValue());
94
+ mViewManager.setTransitionDuration(view, value == null ? 500 : ((Double) value).intValue());
95
95
  break;
96
96
  case "replaceAnimation":
97
97
  mViewManager.setReplaceAnimation(view, (String) value);
@@ -26,10 +26,10 @@ findHeaderConfigChild(const YogaLayoutableShadowNode &screenShadowNode) {
26
26
  return {};
27
27
  }
28
28
 
29
+ #ifdef ANDROID
29
30
  static constexpr const char *kScreenDummyLayoutHelperClass =
30
31
  "com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper";
31
32
 
32
- #ifdef ANDROID
33
33
  std::optional<float> findHeaderHeight(
34
34
  const int fontSize,
35
35
  const bool isTitleEmpty) {
package/ios/RNSConvert.h CHANGED
@@ -1,12 +1,17 @@
1
- #ifdef RCT_NEW_ARCH_ENABLED
2
1
  #import <UIKit/UIKit.h>
2
+ #ifdef RCT_NEW_ARCH_ENABLED
3
3
  #import <react/renderer/components/rnscreens/Props.h>
4
+ #endif // RCT_NEW_ARCH_ENABLED
4
5
  #import "RNSEnums.h"
5
6
 
7
+ #ifdef RCT_NEW_ARCH_ENABLED
6
8
  namespace react = facebook::react;
9
+ #endif // RCT_NEW_ARCH_ENABLED
7
10
 
8
11
  @interface RNSConvert : NSObject
9
12
 
13
+ #ifdef RCT_NEW_ARCH_ENABLED
14
+
10
15
  + (UISemanticContentAttribute)UISemanticContentAttributeFromCppEquivalent:
11
16
  (react::RNSScreenStackHeaderConfigDirection)direction;
12
17
 
@@ -38,12 +43,14 @@ namespace react = facebook::react;
38
43
 
39
44
  + (RNSSearchBarPlacement)RNSScreenSearchBarPlacementFromCppEquivalent:(react::RNSSearchBarPlacement)placement;
40
45
 
41
- + (NSMutableArray<NSNumber *> *)NSNumberMutableArrayFromFloatVector:(const std::vector<CGFloat> &)vector;
42
-
43
46
  + (NSMutableArray<NSNumber *> *)arrayFromVector:(const std::vector<CGFloat> &)vector;
44
47
 
45
- + (UIBlurEffectStyle)UIBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect;
46
-
47
- @end
48
+ + (RNSBlurEffectStyle)RNSBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect;
48
49
 
49
50
  #endif // RCT_NEW_ARCH_ENABLED
51
+
52
+ /// This method fails (by assertion) when `blurEffect == RNSBlurEffectStyleNone` which has no counter part in the UIKit
53
+ /// type.
54
+ + (UIBlurEffectStyle)tryConvertRNSBlurEffectStyleToUIBlurEffectStyle:(RNSBlurEffectStyle)blurEffect;
55
+
56
+ @end
package/ios/RNSConvert.mm CHANGED
@@ -1,15 +1,21 @@
1
1
  #import "RNSConvert.h"
2
2
 
3
- #ifdef RCT_NEW_ARCH_ENABLED
3
+ #ifndef RCT_NEW_ARCH_ENABLED
4
+ #import <React/RCTAssert.h>
5
+ #endif // !RCT_NEW_ARCH_ENABLED
6
+
4
7
  @implementation RNSConvert
5
8
 
9
+ #ifdef RCT_NEW_ARCH_ENABLED
6
10
  + (UISemanticContentAttribute)UISemanticContentAttributeFromCppEquivalent:
7
11
  (react::RNSScreenStackHeaderConfigDirection)direction
8
12
  {
9
13
  switch (direction) {
10
- case react::RNSScreenStackHeaderConfigDirection::Rtl:
14
+ using enum react::RNSScreenStackHeaderConfigDirection;
15
+
16
+ case Rtl:
11
17
  return UISemanticContentAttributeForceRightToLeft;
12
- case react::RNSScreenStackHeaderConfigDirection::Ltr:
18
+ case Ltr:
13
19
  return UISemanticContentAttributeForceLeftToRight;
14
20
  }
15
21
  }
@@ -18,11 +24,13 @@
18
24
  (react::RNSScreenStackHeaderConfigBackButtonDisplayMode)backButtonDisplayMode
19
25
  {
20
26
  switch (backButtonDisplayMode) {
21
- case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Default:
27
+ using enum react::RNSScreenStackHeaderConfigBackButtonDisplayMode;
28
+
29
+ case Default:
22
30
  return UINavigationItemBackButtonDisplayModeDefault;
23
- case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Generic:
31
+ case Generic:
24
32
  return UINavigationItemBackButtonDisplayModeGeneric;
25
- case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Minimal:
33
+ case Minimal:
26
34
  return UINavigationItemBackButtonDisplayModeMinimal;
27
35
  }
28
36
  }
@@ -31,19 +39,21 @@
31
39
  (react::RNSScreenStackPresentation)stackPresentation
32
40
  {
33
41
  switch (stackPresentation) {
34
- case react::RNSScreenStackPresentation::Push:
42
+ using enum react::RNSScreenStackPresentation;
43
+
44
+ case Push:
35
45
  return RNSScreenStackPresentationPush;
36
- case react::RNSScreenStackPresentation::Modal:
46
+ case Modal:
37
47
  return RNSScreenStackPresentationModal;
38
- case react::RNSScreenStackPresentation::FullScreenModal:
48
+ case FullScreenModal:
39
49
  return RNSScreenStackPresentationFullScreenModal;
40
- case react::RNSScreenStackPresentation::FormSheet:
50
+ case FormSheet:
41
51
  return RNSScreenStackPresentationFormSheet;
42
- case react::RNSScreenStackPresentation::ContainedModal:
52
+ case ContainedModal:
43
53
  return RNSScreenStackPresentationContainedModal;
44
- case react::RNSScreenStackPresentation::TransparentModal:
54
+ case TransparentModal:
45
55
  return RNSScreenStackPresentationTransparentModal;
46
- case react::RNSScreenStackPresentation::ContainedTransparentModal:
56
+ case ContainedTransparentModal:
47
57
  return RNSScreenStackPresentationContainedTransparentModal;
48
58
  }
49
59
  }
@@ -51,26 +61,27 @@
51
61
  + (RNSScreenStackAnimation)RNSScreenStackAnimationFromCppEquivalent:(react::RNSScreenStackAnimation)stackAnimation
52
62
  {
53
63
  switch (stackAnimation) {
54
- // these four are intentionally grouped
55
- case react::RNSScreenStackAnimation::Slide_from_right:
56
- case react::RNSScreenStackAnimation::Ios_from_right:
57
- case react::RNSScreenStackAnimation::Default:
64
+ using enum react::RNSScreenStackAnimation;
65
+ // these three are intentionally grouped
66
+ case Slide_from_right:
67
+ case Ios_from_right:
68
+ case Default:
58
69
  return RNSScreenStackAnimationDefault;
59
70
  // these two are intentionally grouped
60
- case react::RNSScreenStackAnimation::Slide_from_left:
61
- case react::RNSScreenStackAnimation::Ios_from_left:
71
+ case Slide_from_left:
72
+ case Ios_from_left:
62
73
  return RNSScreenStackAnimationSlideFromLeft;
63
- case react::RNSScreenStackAnimation::Flip:
74
+ case Flip:
64
75
  return RNSScreenStackAnimationFlip;
65
- case react::RNSScreenStackAnimation::Simple_push:
76
+ case Simple_push:
66
77
  return RNSScreenStackAnimationSimplePush;
67
- case react::RNSScreenStackAnimation::None:
78
+ case None:
68
79
  return RNSScreenStackAnimationNone;
69
- case react::RNSScreenStackAnimation::Fade:
80
+ case Fade:
70
81
  return RNSScreenStackAnimationFade;
71
- case react::RNSScreenStackAnimation::Slide_from_bottom:
82
+ case Slide_from_bottom:
72
83
  return RNSScreenStackAnimationSlideFromBottom;
73
- case react::RNSScreenStackAnimation::Fade_from_bottom:
84
+ case Fade_from_bottom:
74
85
  return RNSScreenStackAnimationFadeFromBottom;
75
86
  }
76
87
  }
@@ -79,17 +90,19 @@
79
90
  (react::RNSScreenStackHeaderSubviewType)subviewType
80
91
  {
81
92
  switch (subviewType) {
82
- case react::RNSScreenStackHeaderSubviewType::Left:
93
+ using enum react::RNSScreenStackHeaderSubviewType;
94
+
95
+ case Left:
83
96
  return RNSScreenStackHeaderSubviewTypeLeft;
84
- case react::RNSScreenStackHeaderSubviewType::Right:
97
+ case Right:
85
98
  return RNSScreenStackHeaderSubviewTypeRight;
86
- case react::RNSScreenStackHeaderSubviewType::Title:
99
+ case Title:
87
100
  return RNSScreenStackHeaderSubviewTypeTitle;
88
- case react::RNSScreenStackHeaderSubviewType::Center:
101
+ case Center:
89
102
  return RNSScreenStackHeaderSubviewTypeCenter;
90
- case react::RNSScreenStackHeaderSubviewType::SearchBar:
103
+ case SearchBar:
91
104
  return RNSScreenStackHeaderSubviewTypeSearchBar;
92
- case react::RNSScreenStackHeaderSubviewType::Back:
105
+ case Back:
93
106
  return RNSScreenStackHeaderSubviewTypeBackButton;
94
107
  }
95
108
  }
@@ -98,9 +111,10 @@
98
111
  (react::RNSScreenReplaceAnimation)replaceAnimation
99
112
  {
100
113
  switch (replaceAnimation) {
101
- case react::RNSScreenReplaceAnimation::Pop:
114
+ using enum react::RNSScreenReplaceAnimation;
115
+ case Pop:
102
116
  return RNSScreenReplaceAnimationPop;
103
- case react::RNSScreenReplaceAnimation::Push:
117
+ case Push:
104
118
  return RNSScreenReplaceAnimationPush;
105
119
  }
106
120
  }
@@ -108,9 +122,10 @@
108
122
  + (RNSScreenSwipeDirection)RNSScreenSwipeDirectionFromCppEquivalent:(react::RNSScreenSwipeDirection)swipeDirection
109
123
  {
110
124
  switch (swipeDirection) {
111
- case react::RNSScreenSwipeDirection::Horizontal:
125
+ using enum react::RNSScreenSwipeDirection;
126
+ case Horizontal:
112
127
  return RNSScreenSwipeDirectionHorizontal;
113
- case react::RNSScreenSwipeDirection::Vertical:
128
+ case Vertical:
114
129
  return RNSScreenSwipeDirectionVertical;
115
130
  }
116
131
  }
@@ -140,13 +155,14 @@
140
155
  (react::RNSSearchBarAutoCapitalize)autoCapitalize
141
156
  {
142
157
  switch (autoCapitalize) {
143
- case react::RNSSearchBarAutoCapitalize::Words:
158
+ using enum react::RNSSearchBarAutoCapitalize;
159
+ case Words:
144
160
  return UITextAutocapitalizationTypeWords;
145
- case react::RNSSearchBarAutoCapitalize::Sentences:
161
+ case Sentences:
146
162
  return UITextAutocapitalizationTypeSentences;
147
- case react::RNSSearchBarAutoCapitalize::Characters:
163
+ case Characters:
148
164
  return UITextAutocapitalizationTypeAllCharacters;
149
- case react::RNSSearchBarAutoCapitalize::None:
165
+ case None:
150
166
  return UITextAutocapitalizationTypeNone;
151
167
  }
152
168
  }
@@ -155,11 +171,12 @@
155
171
  + (RNSSearchBarPlacement)RNSScreenSearchBarPlacementFromCppEquivalent:(react::RNSSearchBarPlacement)placement
156
172
  {
157
173
  switch (placement) {
158
- case react::RNSSearchBarPlacement::Stacked:
174
+ using enum react::RNSSearchBarPlacement;
175
+ case Stacked:
159
176
  return RNSSearchBarPlacementStacked;
160
- case react::RNSSearchBarPlacement::Automatic:
177
+ case Automatic:
161
178
  return RNSSearchBarPlacementAutomatic;
162
- case react::RNSSearchBarPlacement::Inline:
179
+ case Inline:
163
180
  return RNSSearchBarPlacementInline;
164
181
  }
165
182
  }
@@ -173,71 +190,90 @@
173
190
  return array;
174
191
  }
175
192
 
176
- + (UIBlurEffectStyle)UIBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect
193
+ + (RNSBlurEffectStyle)RNSBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect
177
194
  {
195
+ using enum react::RNSScreenStackHeaderConfigBlurEffect;
178
196
  #if !TARGET_OS_TV && defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
179
197
  __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
180
198
  if (@available(iOS 13.0, *)) {
181
199
  switch (blurEffect) {
182
- case react::RNSScreenStackHeaderConfigBlurEffect::ExtraLight:
183
- return UIBlurEffectStyleExtraLight;
184
- case react::RNSScreenStackHeaderConfigBlurEffect::Light:
185
- return UIBlurEffectStyleLight;
186
- case react::RNSScreenStackHeaderConfigBlurEffect::Dark:
187
- return UIBlurEffectStyleDark;
188
- case react::RNSScreenStackHeaderConfigBlurEffect::Regular:
189
- return UIBlurEffectStyleRegular;
190
- case react::RNSScreenStackHeaderConfigBlurEffect::Prominent:
191
- return UIBlurEffectStyleProminent;
192
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterial:
193
- return UIBlurEffectStyleSystemUltraThinMaterial;
194
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterial:
195
- return UIBlurEffectStyleSystemThinMaterial;
196
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterial:
197
- return UIBlurEffectStyleSystemMaterial;
198
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterial:
199
- return UIBlurEffectStyleSystemThickMaterial;
200
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterial:
201
- return UIBlurEffectStyleSystemChromeMaterial;
202
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterialLight:
203
- return UIBlurEffectStyleSystemUltraThinMaterialLight;
204
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterialLight:
205
- return UIBlurEffectStyleSystemThinMaterialLight;
206
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterialLight:
207
- return UIBlurEffectStyleSystemMaterialLight;
208
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterialLight:
209
- return UIBlurEffectStyleSystemThickMaterialLight;
210
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterialLight:
211
- return UIBlurEffectStyleSystemChromeMaterialLight;
212
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterialDark:
213
- return UIBlurEffectStyleSystemUltraThinMaterialDark;
214
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterialDark:
215
- return UIBlurEffectStyleSystemThinMaterialDark;
216
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterialDark:
217
- return UIBlurEffectStyleSystemMaterialDark;
218
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterialDark:
219
- return UIBlurEffectStyleSystemThickMaterialDark;
220
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterialDark:
221
- return UIBlurEffectStyleSystemChromeMaterialDark;
200
+ case None:
201
+ return RNSBlurEffectStyleNone;
202
+ case ExtraLight:
203
+ return RNSBlurEffectStyleExtraLight;
204
+ case Light:
205
+ return RNSBlurEffectStyleLight;
206
+ case Dark:
207
+ return RNSBlurEffectStyleDark;
208
+ case Regular:
209
+ return RNSBlurEffectStyleRegular;
210
+ case Prominent:
211
+ return RNSBlurEffectStyleProminent;
212
+ case SystemUltraThinMaterial:
213
+ return RNSBlurEffectStyleSystemUltraThinMaterial;
214
+ case SystemThinMaterial:
215
+ return RNSBlurEffectStyleSystemThinMaterial;
216
+ case SystemMaterial:
217
+ return RNSBlurEffectStyleSystemMaterial;
218
+ case SystemThickMaterial:
219
+ return RNSBlurEffectStyleSystemThickMaterial;
220
+ case SystemChromeMaterial:
221
+ return RNSBlurEffectStyleSystemChromeMaterial;
222
+ case SystemUltraThinMaterialLight:
223
+ return RNSBlurEffectStyleSystemUltraThinMaterialLight;
224
+ case SystemThinMaterialLight:
225
+ return RNSBlurEffectStyleSystemThinMaterialLight;
226
+ case SystemMaterialLight:
227
+ return RNSBlurEffectStyleSystemMaterialLight;
228
+ case SystemThickMaterialLight:
229
+ return RNSBlurEffectStyleSystemThickMaterialLight;
230
+ case SystemChromeMaterialLight:
231
+ return RNSBlurEffectStyleSystemChromeMaterialLight;
232
+ case SystemUltraThinMaterialDark:
233
+ return RNSBlurEffectStyleSystemUltraThinMaterialDark;
234
+ case SystemThinMaterialDark:
235
+ return RNSBlurEffectStyleSystemThinMaterialDark;
236
+ case SystemMaterialDark:
237
+ return RNSBlurEffectStyleSystemMaterialDark;
238
+ case SystemThickMaterialDark:
239
+ return RNSBlurEffectStyleSystemThickMaterialDark;
240
+ case SystemChromeMaterialDark:
241
+ return RNSBlurEffectStyleSystemChromeMaterialDark;
222
242
  }
223
243
  }
224
244
  #endif
225
245
 
226
246
  switch (blurEffect) {
227
- case react::RNSScreenStackHeaderConfigBlurEffect::Light:
228
- return UIBlurEffectStyleLight;
229
- case react::RNSScreenStackHeaderConfigBlurEffect::Dark:
230
- return UIBlurEffectStyleDark;
231
- case react::RNSScreenStackHeaderConfigBlurEffect::Regular:
232
- return UIBlurEffectStyleRegular;
233
- case react::RNSScreenStackHeaderConfigBlurEffect::Prominent:
234
- return UIBlurEffectStyleProminent;
235
- case react::RNSScreenStackHeaderConfigBlurEffect::ExtraLight:
247
+ case None:
248
+ return RNSBlurEffectStyleNone;
249
+ case Light:
250
+ return RNSBlurEffectStyleLight;
251
+ case Dark:
252
+ return RNSBlurEffectStyleDark;
253
+ case Regular:
254
+ return RNSBlurEffectStyleRegular;
255
+ case Prominent:
256
+ return RNSBlurEffectStyleProminent;
257
+ case ExtraLight:
236
258
  default:
237
- return UIBlurEffectStyleExtraLight;
259
+ return RNSBlurEffectStyleNone;
238
260
  }
239
261
  }
240
262
 
241
- @end
263
+ #endif // RCT_NEW_ARCH_ENABLED
242
264
 
265
+ + (UIBlurEffectStyle)tryConvertRNSBlurEffectStyleToUIBlurEffectStyle:(RNSBlurEffectStyle)blurEffect
266
+ {
267
+ #ifdef RCT_NEW_ARCH_ENABLED
268
+ react_native_assert(blurEffect != RNSBlurEffectStyleNone);
269
+ #else
270
+ RCTAssert(
271
+ blurEffect != RNSBlurEffectStyleNone, @"RNSBlurEffectStyleNone variant is not convertible to UIBlurEffectStyle");
243
272
  #endif // RCT_NEW_ARCH_ENABLED
273
+
274
+ // Cast safety: RNSBlurEffectStyle is defined in such way that its values map 1:1 with
275
+ // UIBlurEffectStyle, except RNSBlurEffectStyleNone which is excluded above.
276
+ return (UIBlurEffectStyle)blurEffect;
277
+ }
278
+
279
+ @end
package/ios/RNSEnums.h CHANGED
@@ -30,6 +30,7 @@ typedef NS_ENUM(NSInteger, RNSScreenSwipeDirection) {
30
30
  };
31
31
 
32
32
  typedef NS_ENUM(NSInteger, RNSActivityState) {
33
+ RNSActivityStateUndefined = -1,
33
34
  RNSActivityStateInactive = 0,
34
35
  RNSActivityStateTransitioningOrBelowTop = 1,
35
36
  RNSActivityStateOnTop = 2
@@ -70,3 +71,49 @@ typedef NS_ENUM(NSInteger, RNSSearchBarPlacement) {
70
71
  RNSSearchBarPlacementInline,
71
72
  RNSSearchBarPlacementStacked,
72
73
  };
74
+
75
+ // Redefinition of UIBlurEffectStyle. We need to represent additional case of `None`.
76
+ typedef NS_ENUM(NSInteger, RNSBlurEffectStyle) {
77
+ /// No blur effect should be visible
78
+ RNSBlurEffectStyleNone = -1,
79
+ RNSBlurEffectStyleExtraLight = UIBlurEffectStyleExtraLight,
80
+ RNSBlurEffectStyleLight = UIBlurEffectStyleLight,
81
+ RNSBlurEffectStyleDark = UIBlurEffectStyleDark,
82
+ // TODO: Add support for this variant on tvOS
83
+ // RNSBlurEffectStyleExtraDark = UIBlurEffectStyleExtraDark API_AVAILABLE(tvos(10.0)) API_UNAVAILABLE(ios)
84
+ // API_UNAVAILABLE(watchos),
85
+ RNSBlurEffectStyleRegular API_AVAILABLE(ios(10.0)) API_UNAVAILABLE(watchos) = UIBlurEffectStyleRegular,
86
+ RNSBlurEffectStyleProminent API_AVAILABLE(ios(10.0)) API_UNAVAILABLE(watchos) = UIBlurEffectStyleProminent,
87
+ RNSBlurEffectStyleSystemUltraThinMaterial API_AVAILABLE(ios(13.0))
88
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemUltraThinMaterial,
89
+ RNSBlurEffectStyleSystemThinMaterial API_AVAILABLE(ios(13.0))
90
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemThinMaterial,
91
+ RNSBlurEffectStyleSystemMaterial API_AVAILABLE(ios(13.0))
92
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemMaterial,
93
+ RNSBlurEffectStyleSystemThickMaterial API_AVAILABLE(ios(13.0))
94
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemThickMaterial,
95
+ RNSBlurEffectStyleSystemChromeMaterial API_AVAILABLE(ios(13.0))
96
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemChromeMaterial,
97
+ RNSBlurEffectStyleSystemUltraThinMaterialLight API_AVAILABLE(ios(13.0))
98
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemUltraThinMaterialLight,
99
+ RNSBlurEffectStyleSystemThinMaterialLight API_AVAILABLE(ios(13.0))
100
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemThinMaterialLight,
101
+ RNSBlurEffectStyleSystemMaterialLight API_AVAILABLE(ios(13.0))
102
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemMaterialLight,
103
+ RNSBlurEffectStyleSystemThickMaterialLight API_AVAILABLE(ios(13.0))
104
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemThickMaterialLight,
105
+ RNSBlurEffectStyleSystemChromeMaterialLight API_AVAILABLE(ios(13.0))
106
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemChromeMaterialLight,
107
+
108
+ RNSBlurEffectStyleSystemUltraThinMaterialDark API_AVAILABLE(ios(13.0))
109
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemUltraThinMaterialDark,
110
+ RNSBlurEffectStyleSystemThinMaterialDark API_AVAILABLE(ios(13.0))
111
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemThinMaterialDark,
112
+ RNSBlurEffectStyleSystemMaterialDark API_AVAILABLE(ios(13.0))
113
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemMaterialDark,
114
+ RNSBlurEffectStyleSystemThickMaterialDark API_AVAILABLE(ios(13.0))
115
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemThickMaterialDark,
116
+ RNSBlurEffectStyleSystemChromeMaterialDark API_AVAILABLE(ios(13.0))
117
+ API_UNAVAILABLE(watchos, tvos) = UIBlurEffectStyleSystemChromeMaterialDark
118
+
119
+ } API_AVAILABLE(ios(8.0)) API_UNAVAILABLE(watchos);
@@ -1,5 +1,6 @@
1
1
  #import <UIKit/UIKit.h>
2
2
 
3
+ #import "RNSDefines.h"
3
4
  #import "RNSFullWindowOverlay.h"
4
5
 
5
6
  #ifdef RCT_NEW_ARCH_ENABLED
@@ -198,6 +199,8 @@
198
199
  [childComponentView removeFromSuperview];
199
200
  }
200
201
 
202
+ RNS_IGNORE_SUPER_CALL_BEGIN
203
+ // We do not set frame for ouselves, but rather for the container.
201
204
  - (void)updateLayoutMetrics:(react::LayoutMetrics const &)layoutMetrics
202
205
  oldLayoutMetrics:(react::LayoutMetrics const &)oldLayoutMetrics
203
206
  {
@@ -205,6 +208,7 @@
205
208
  _reactFrame = frame;
206
209
  [_container setFrame:frame];
207
210
  }
211
+ RNS_IGNORE_SUPER_CALL_END
208
212
 
209
213
  #else
210
214
  #pragma mark - Paper specific
@@ -0,0 +1,12 @@
1
+ #import <UIKit/UIKit.h>
2
+ #import "RNSScreenStackAnimator.h"
3
+
4
+ NS_ASSUME_NONNULL_BEGIN
5
+
6
+ @interface RNSPercentDrivenInteractiveTransition : UIPercentDrivenInteractiveTransition
7
+
8
+ @property (nonatomic, nullable) RNSScreenStackAnimator *animationController;
9
+
10
+ @end
11
+
12
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,69 @@
1
+ #import "RNSPercentDrivenInteractiveTransition.h"
2
+
3
+ @implementation RNSPercentDrivenInteractiveTransition {
4
+ RNSScreenStackAnimator *_animationController;
5
+ }
6
+
7
+ #pragma mark - UIViewControllerInteractiveTransitioning
8
+
9
+ - (void)startInteractiveTransition:(id<UIViewControllerContextTransitioning>)transitionContext
10
+ {
11
+ [super startInteractiveTransition:transitionContext];
12
+ }
13
+
14
+ #pragma mark - UIPercentDrivenInteractiveTransition
15
+
16
+ // `updateInteractiveTransition`, `finishInteractiveTransition`,
17
+ // `cancelInteractiveTransition` are forwared by superclass to
18
+ // corresponding methods in transition context. In case
19
+ // of "classical CA driven animations", such as UIView animation blocks
20
+ // or direct utilization of CoreAnimation API, context drives the animation,
21
+ // however in case of UIViewPropertyAnimator it does not. We need
22
+ // to drive animation manually and this is exactly what happens below.
23
+
24
+ - (void)updateInteractiveTransition:(CGFloat)percentComplete
25
+ {
26
+ if (_animationController != nil) {
27
+ [_animationController.inFlightAnimator setFractionComplete:percentComplete];
28
+ }
29
+ [super updateInteractiveTransition:percentComplete];
30
+ }
31
+
32
+ - (void)finishInteractiveTransition
33
+ {
34
+ [self finalizeInteractiveTransitionWithAnimationWasCancelled:NO];
35
+ [super finishInteractiveTransition];
36
+ }
37
+
38
+ - (void)cancelInteractiveTransition
39
+ {
40
+ [self finalizeInteractiveTransitionWithAnimationWasCancelled:YES];
41
+ [super cancelInteractiveTransition];
42
+ }
43
+
44
+ #pragma mark - Helpers
45
+
46
+ - (void)finalizeInteractiveTransitionWithAnimationWasCancelled:(BOOL)cancelled
47
+ {
48
+ if (_animationController == nil) {
49
+ return;
50
+ }
51
+
52
+ UIViewPropertyAnimator *_Nullable animator = _animationController.inFlightAnimator;
53
+ if (animator == nil) {
54
+ return;
55
+ }
56
+
57
+ BOOL shouldReverseAnimation = cancelled;
58
+
59
+ id<UITimingCurveProvider> timingParams = [_animationController timingParamsForAnimationCompletion];
60
+
61
+ [animator pauseAnimation];
62
+ [animator setReversed:shouldReverseAnimation];
63
+ [animator continueAnimationWithTimingParameters:timingParams durationFactor:(1 - animator.fractionComplete)];
64
+
65
+ // System retains it & we don't need it anymore.
66
+ _animationController = nil;
67
+ }
68
+
69
+ @end
package/ios/RNSScreen.h CHANGED
@@ -100,6 +100,8 @@ namespace react = facebook::react;
100
100
  @property (nonatomic) react::LayoutMetrics newLayoutMetrics;
101
101
  @property (weak, nonatomic) RNSScreenStackHeaderConfig *config;
102
102
  @property (nonatomic, readonly) BOOL hasHeaderConfig;
103
+ @property (nonatomic, readonly, getter=isMarkedForUnmountInCurrentTransaction)
104
+ BOOL markedForUnmountInCurrentTransaction;
103
105
  #else
104
106
  @property (nonatomic, copy) RCTDirectEventBlock onAppear;
105
107
  @property (nonatomic, copy) RCTDirectEventBlock onDisappear;
@@ -124,6 +126,10 @@ namespace react = facebook::react;
124
126
  - (void)updateBounds;
125
127
  - (void)notifyDismissedWithCount:(int)dismissCount;
126
128
  - (instancetype)initWithFrame:(CGRect)frame;
129
+ /// Tell `Screen` that it will be unmounted in next transaction.
130
+ /// The component needs this so that we can later decide whether to
131
+ /// replace it with snapshot or not.
132
+ - (void)willBeUnmountedInUpcomingTransaction;
127
133
  #else
128
134
  - (instancetype)initWithBridge:(RCTBridge *)bridge;
129
135
  #endif // RCT_NEW_ARCH_ENABLED
@@ -133,6 +139,14 @@ namespace react = facebook::react;
133
139
  - (BOOL)isModal;
134
140
  - (BOOL)isPresentedAsNativeModal;
135
141
 
142
+ /**
143
+ * Tell `Screen` component that it has been removed from react state and can safely cleanup
144
+ * any retained resources.
145
+ *
146
+ * Note, that on old architecture this method might be called by RN via `RCTInvalidating` protocol.
147
+ */
148
+ - (void)invalidate;
149
+
136
150
  /// Looks for header configuration in instance's `reactSubviews` and returns it. If not present returns `nil`.
137
151
  - (RNSScreenStackHeaderConfig *_Nullable)findHeaderConfig;
138
152