@amazon-devices/react-native-screens 2.0.1758683737

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 (381) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +223 -0
  3. package/RNScreens.podspec +53 -0
  4. package/SystemBundles/8f5a820b958535e533acb38dbc0c72c1837721b9db075f4a1740e42b9fee3910.bundle +33668 -0
  5. package/SystemBundles/8f5a820b958535e533acb38dbc0c72c1837721b9db075f4a1740e42b9fee3910.map +1 -0
  6. package/SystemModules/amzn__react-native-screens.modules.txt +101 -0
  7. package/SystemModules/amzn__react-native-screens.private.modules.txt +244 -0
  8. package/SystemModules/keplerscript-system-bundle-config.json +7 -0
  9. package/THIRD_PARTY_NOTICES.txt +707 -0
  10. package/android/build.gradle +133 -0
  11. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +49 -0
  12. package/android/src/main/AndroidManifest.xml +5 -0
  13. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +77 -0
  14. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
  15. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
  16. package/android/src/main/java/com/swmansion/rnscreens/FragmentHolder.kt +7 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +21 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +289 -0
  19. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +372 -0
  20. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +40 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +21 -0
  22. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +331 -0
  23. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +22 -0
  24. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +336 -0
  25. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +282 -0
  26. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +15 -0
  27. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +398 -0
  28. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +204 -0
  29. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +38 -0
  30. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +41 -0
  31. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +75 -0
  32. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +186 -0
  33. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +296 -0
  34. package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +19 -0
  35. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +133 -0
  36. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +178 -0
  37. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +67 -0
  38. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +22 -0
  39. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +22 -0
  40. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +22 -0
  41. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +26 -0
  42. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +18 -0
  43. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +18 -0
  44. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +20 -0
  45. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +32 -0
  46. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +18 -0
  47. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +18 -0
  48. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +22 -0
  49. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +28 -0
  50. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +22 -0
  51. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +22 -0
  52. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +22 -0
  53. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +24 -0
  54. package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +18 -0
  55. package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +12 -0
  56. package/android/src/main/jni/CMakeLists.txt +72 -0
  57. package/android/src/main/jni/rnscreens.cpp +16 -0
  58. package/android/src/main/jni/rnscreens.h +28 -0
  59. package/android/src/main/res/base/anim/rns_default_enter_in.xml +18 -0
  60. package/android/src/main/res/base/anim/rns_default_enter_out.xml +19 -0
  61. package/android/src/main/res/base/anim/rns_default_exit_in.xml +17 -0
  62. package/android/src/main/res/base/anim/rns_default_exit_out.xml +18 -0
  63. package/android/src/main/res/base/anim/rns_fade_from_bottom.xml +14 -0
  64. package/android/src/main/res/base/anim/rns_fade_in.xml +7 -0
  65. package/android/src/main/res/base/anim/rns_fade_out.xml +7 -0
  66. package/android/src/main/res/base/anim/rns_fade_to_bottom.xml +15 -0
  67. package/android/src/main/res/base/anim/rns_no_animation_20.xml +6 -0
  68. package/android/src/main/res/base/anim/rns_no_animation_250.xml +7 -0
  69. package/android/src/main/res/base/anim/rns_no_animation_350.xml +6 -0
  70. package/android/src/main/res/base/anim/rns_no_animation_medium.xml +7 -0
  71. package/android/src/main/res/base/anim/rns_slide_in_from_bottom.xml +7 -0
  72. package/android/src/main/res/base/anim/rns_slide_in_from_left.xml +5 -0
  73. package/android/src/main/res/base/anim/rns_slide_in_from_right.xml +5 -0
  74. package/android/src/main/res/base/anim/rns_slide_out_to_bottom.xml +7 -0
  75. package/android/src/main/res/base/anim/rns_slide_out_to_left.xml +5 -0
  76. package/android/src/main/res/base/anim/rns_slide_out_to_right.xml +5 -0
  77. package/android/src/main/res/base/anim/rns_standard_accelerate_interpolator.xml +6 -0
  78. package/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml +38 -0
  79. package/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml +38 -0
  80. package/android/src/main/res/v33/anim-v33/rns_default_exit_in.xml +38 -0
  81. package/android/src/main/res/v33/anim-v33/rns_default_exit_out.xml +38 -0
  82. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +111 -0
  83. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +44 -0
  84. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +107 -0
  85. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +42 -0
  86. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +31 -0
  87. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +17 -0
  88. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +25 -0
  89. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +16 -0
  90. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -0
  91. package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +41 -0
  92. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +9 -0
  93. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +30 -0
  94. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +14 -0
  95. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +45 -0
  96. package/ios/RCTImageComponentView+RNSScreenStackHeaderConfig.h +11 -0
  97. package/ios/RCTImageComponentView+RNSScreenStackHeaderConfig.mm +14 -0
  98. package/ios/RNSConvert.h +36 -0
  99. package/ios/RNSConvert.mm +154 -0
  100. package/ios/RNSEnums.h +71 -0
  101. package/ios/RNSFullWindowOverlay.h +34 -0
  102. package/ios/RNSFullWindowOverlay.mm +241 -0
  103. package/ios/RNSScreen.h +144 -0
  104. package/ios/RNSScreen.mm +1599 -0
  105. package/ios/RNSScreenContainer.h +45 -0
  106. package/ios/RNSScreenContainer.mm +343 -0
  107. package/ios/RNSScreenNavigationContainer.h +16 -0
  108. package/ios/RNSScreenNavigationContainer.mm +66 -0
  109. package/ios/RNSScreenStack.h +37 -0
  110. package/ios/RNSScreenStack.mm +1111 -0
  111. package/ios/RNSScreenStackAnimator.h +8 -0
  112. package/ios/RNSScreenStackAnimator.mm +320 -0
  113. package/ios/RNSScreenStackHeaderConfig.h +74 -0
  114. package/ios/RNSScreenStackHeaderConfig.mm +967 -0
  115. package/ios/RNSScreenStackHeaderSubview.h +44 -0
  116. package/ios/RNSScreenStackHeaderSubview.mm +147 -0
  117. package/ios/RNSScreenWindowTraits.h +26 -0
  118. package/ios/RNSScreenWindowTraits.mm +266 -0
  119. package/ios/RNSSearchBar.h +43 -0
  120. package/ios/RNSSearchBar.mm +465 -0
  121. package/ios/RNScreens.xcodeproj/project.pbxproj +461 -0
  122. package/ios/UIViewController+RNScreens.h +9 -0
  123. package/ios/UIViewController+RNScreens.mm +78 -0
  124. package/ios/UIWindow+RNScreens.h +9 -0
  125. package/ios/UIWindow+RNScreens.mm +17 -0
  126. package/ios/events/RNSHeaderHeightChangeEvent.h +8 -0
  127. package/ios/events/RNSHeaderHeightChangeEvent.mm +44 -0
  128. package/ios/events/RNSScreenViewEvent.h +12 -0
  129. package/ios/events/RNSScreenViewEvent.mm +59 -0
  130. package/ios/utils/RNSUIBarButtonItem.h +5 -0
  131. package/ios/utils/RNSUIBarButtonItem.mm +22 -0
  132. package/kepler-compatibility.json +8 -0
  133. package/kepler-transformed-package-info.json +3 -0
  134. package/lib/commonjs/TransitionProgressContext.js +11 -0
  135. package/lib/commonjs/TransitionProgressContext.js.map +1 -0
  136. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +11 -0
  137. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
  138. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +33 -0
  139. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -0
  140. package/lib/commonjs/fabric/ScreenNativeComponent.js +70 -0
  141. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -0
  142. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +11 -0
  143. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
  144. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +31 -0
  145. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
  146. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +12 -0
  147. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
  148. package/lib/commonjs/fabric/ScreenStackNativeComponent.js +35 -0
  149. package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -0
  150. package/lib/commonjs/fabric/SearchBarNativeComponent.js +19 -0
  151. package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -0
  152. package/lib/commonjs/index.js +147 -0
  153. package/lib/commonjs/index.js.map +1 -0
  154. package/lib/commonjs/index.native.js +407 -0
  155. package/lib/commonjs/index.native.js.map +1 -0
  156. package/lib/commonjs/native-stack/index.js +49 -0
  157. package/lib/commonjs/native-stack/index.js.map +1 -0
  158. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +75 -0
  159. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -0
  160. package/lib/commonjs/native-stack/types.js +6 -0
  161. package/lib/commonjs/native-stack/types.js.map +1 -0
  162. package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js +12 -0
  163. package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -0
  164. package/lib/commonjs/native-stack/utils/HeaderHeightContext.js +12 -0
  165. package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -0
  166. package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js +75 -0
  167. package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -0
  168. package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js +35 -0
  169. package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -0
  170. package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js +19 -0
  171. package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
  172. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +54 -0
  173. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
  174. package/lib/commonjs/native-stack/utils/useHeaderHeight.js +19 -0
  175. package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -0
  176. package/lib/commonjs/native-stack/views/FontProcessor.js +21 -0
  177. package/lib/commonjs/native-stack/views/FontProcessor.js.map +1 -0
  178. package/lib/commonjs/native-stack/views/HeaderConfig.js +141 -0
  179. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -0
  180. package/lib/commonjs/native-stack/views/NativeStackView.js +354 -0
  181. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -0
  182. package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js +12 -0
  183. package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -0
  184. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +101 -0
  185. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  186. package/lib/commonjs/reanimated/ReanimatedScreen.js +22 -0
  187. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -0
  188. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +47 -0
  189. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
  190. package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js +12 -0
  191. package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js.map +1 -0
  192. package/lib/commonjs/reanimated/index.js +28 -0
  193. package/lib/commonjs/reanimated/index.js.map +1 -0
  194. package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +19 -0
  195. package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -0
  196. package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js +19 -0
  197. package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -0
  198. package/lib/commonjs/types.js +6 -0
  199. package/lib/commonjs/types.js.map +1 -0
  200. package/lib/commonjs/useTransitionProgress.js +19 -0
  201. package/lib/commonjs/useTransitionProgress.js.map +1 -0
  202. package/lib/commonjs/utils.js +21 -0
  203. package/lib/commonjs/utils.js.map +1 -0
  204. package/lib/module/TransitionProgressContext.js +3 -0
  205. package/lib/module/TransitionProgressContext.js.map +1 -0
  206. package/lib/module/fabric/FullWindowOverlayNativeComponent.js +4 -0
  207. package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
  208. package/lib/module/fabric/ScreenContainerNativeComponent.js +25 -0
  209. package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -0
  210. package/lib/module/fabric/ScreenNativeComponent.js +63 -0
  211. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -0
  212. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +4 -0
  213. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
  214. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +23 -0
  215. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
  216. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +7 -0
  217. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
  218. package/lib/module/fabric/ScreenStackNativeComponent.js +28 -0
  219. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -0
  220. package/lib/module/fabric/SearchBarNativeComponent.js +10 -0
  221. package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -0
  222. package/lib/module/index.js +67 -0
  223. package/lib/module/index.js.map +1 -0
  224. package/lib/module/index.native.js +410 -0
  225. package/lib/module/index.native.js.map +1 -0
  226. package/lib/module/native-stack/index.js +22 -0
  227. package/lib/module/native-stack/index.js.map +1 -0
  228. package/lib/module/native-stack/navigators/createNativeStackNavigator.js +72 -0
  229. package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -0
  230. package/lib/module/native-stack/types.js +2 -0
  231. package/lib/module/native-stack/types.js.map +1 -0
  232. package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js +4 -0
  233. package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -0
  234. package/lib/module/native-stack/utils/HeaderHeightContext.js +4 -0
  235. package/lib/module/native-stack/utils/HeaderHeightContext.js.map +1 -0
  236. package/lib/module/native-stack/utils/SafeAreaProviderCompat.js +68 -0
  237. package/lib/module/native-stack/utils/SafeAreaProviderCompat.js.map +1 -0
  238. package/lib/module/native-stack/utils/getDefaultHeaderHeight.js +29 -0
  239. package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -0
  240. package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js +10 -0
  241. package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
  242. package/lib/module/native-stack/utils/useBackPressSubscription.js +47 -0
  243. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
  244. package/lib/module/native-stack/utils/useHeaderHeight.js +10 -0
  245. package/lib/module/native-stack/utils/useHeaderHeight.js.map +1 -0
  246. package/lib/module/native-stack/views/FontProcessor.js +13 -0
  247. package/lib/module/native-stack/views/FontProcessor.js.map +1 -0
  248. package/lib/module/native-stack/views/HeaderConfig.js +132 -0
  249. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -0
  250. package/lib/module/native-stack/views/NativeStackView.js +355 -0
  251. package/lib/module/native-stack/views/NativeStackView.js.map +1 -0
  252. package/lib/module/reanimated/ReanimatedHeaderHeightContext.js +5 -0
  253. package/lib/module/reanimated/ReanimatedHeaderHeightContext.js.map +1 -0
  254. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +97 -0
  255. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  256. package/lib/module/reanimated/ReanimatedScreen.js +17 -0
  257. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -0
  258. package/lib/module/reanimated/ReanimatedScreenProvider.js +40 -0
  259. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
  260. package/lib/module/reanimated/ReanimatedTransitionProgressContext.js +5 -0
  261. package/lib/module/reanimated/ReanimatedTransitionProgressContext.js.map +1 -0
  262. package/lib/module/reanimated/index.js +4 -0
  263. package/lib/module/reanimated/index.js.map +1 -0
  264. package/lib/module/reanimated/useReanimatedHeaderHeight.js +10 -0
  265. package/lib/module/reanimated/useReanimatedHeaderHeight.js.map +1 -0
  266. package/lib/module/reanimated/useReanimatedTransitionProgress.js +10 -0
  267. package/lib/module/reanimated/useReanimatedTransitionProgress.js.map +1 -0
  268. package/lib/module/types.js +2 -0
  269. package/lib/module/types.js.map +1 -0
  270. package/lib/module/useTransitionProgress.js +10 -0
  271. package/lib/module/useTransitionProgress.js.map +1 -0
  272. package/lib/module/utils.js +14 -0
  273. package/lib/module/utils.js.map +1 -0
  274. package/lib/typescript/TransitionProgressContext.d.ts +9 -0
  275. package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts +7 -0
  276. package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts +5 -0
  277. package/lib/typescript/fabric/ScreenNativeComponent.d.ts +66 -0
  278. package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts +7 -0
  279. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +33 -0
  280. package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +10 -0
  281. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +8 -0
  282. package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +49 -0
  283. package/lib/typescript/index.d.ts +33 -0
  284. package/lib/typescript/index.native.d.ts +2 -0
  285. package/lib/typescript/native-stack/index.d.ts +19 -0
  286. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +6 -0
  287. package/lib/typescript/native-stack/types.d.ts +438 -0
  288. package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts +4 -0
  289. package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts +3 -0
  290. package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +11 -0
  291. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +7 -0
  292. package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -0
  293. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
  294. package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts +1 -0
  295. package/lib/typescript/native-stack/views/FontProcessor.d.ts +1 -0
  296. package/lib/typescript/native-stack/views/HeaderConfig.d.ts +8 -0
  297. package/lib/typescript/native-stack/views/NativeStackView.d.ts +10 -0
  298. package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts +4 -0
  299. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
  300. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -0
  301. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
  302. package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +9 -0
  303. package/lib/typescript/reanimated/index.d.ts +3 -0
  304. package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts +3 -0
  305. package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts +11 -0
  306. package/lib/typescript/types.d.ts +612 -0
  307. package/lib/typescript/useTransitionProgress.d.ts +5 -0
  308. package/lib/typescript/utils.d.ts +3 -0
  309. package/native-stack/README.md +814 -0
  310. package/native-stack/package.json +6 -0
  311. package/package.json +1 -0
  312. package/react-native.config.js +42 -0
  313. package/reanimated/package.json +6 -0
  314. package/src/TransitionProgressContext.tsx +12 -0
  315. package/src/fabric/FullWindowOverlayNativeComponent.ts +7 -0
  316. package/src/fabric/ScreenContainerNativeComponent.ts +28 -0
  317. package/src/fabric/ScreenNativeComponent.ts +158 -0
  318. package/src/fabric/ScreenNavigationContainerNativeComponent.ts +10 -0
  319. package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +61 -0
  320. package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +22 -0
  321. package/src/fabric/ScreenStackNativeComponent.ts +33 -0
  322. package/src/fabric/SearchBarNativeComponent.ts +79 -0
  323. package/src/index.native.tsx +599 -0
  324. package/src/index.tsx +119 -0
  325. package/src/native-stack/index.tsx +27 -0
  326. package/src/native-stack/navigators/createNativeStackNavigator.tsx +107 -0
  327. package/src/native-stack/types.tsx +486 -0
  328. package/src/native-stack/utils/AnimatedHeaderHeightContext.tsx +8 -0
  329. package/src/native-stack/utils/HeaderHeightContext.tsx +5 -0
  330. package/src/native-stack/utils/SafeAreaProviderCompat.tsx +78 -0
  331. package/src/native-stack/utils/getDefaultHeaderHeight.tsx +41 -0
  332. package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +15 -0
  333. package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
  334. package/src/native-stack/utils/useHeaderHeight.tsx +15 -0
  335. package/src/native-stack/views/FontProcessor.tsx +14 -0
  336. package/src/native-stack/views/HeaderConfig.tsx +187 -0
  337. package/src/native-stack/views/NativeStackView.tsx +466 -0
  338. package/src/reanimated/ReanimatedHeaderHeightContext.tsx +7 -0
  339. package/src/reanimated/ReanimatedNativeStackScreen.tsx +130 -0
  340. package/src/reanimated/ReanimatedScreen.tsx +25 -0
  341. package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
  342. package/src/reanimated/ReanimatedTransitionProgressContext.tsx +13 -0
  343. package/src/reanimated/index.tsx +3 -0
  344. package/src/reanimated/useReanimatedHeaderHeight.tsx +14 -0
  345. package/src/reanimated/useReanimatedTransitionProgress.tsx +14 -0
  346. package/src/types.tsx +699 -0
  347. package/src/useTransitionProgress.tsx +15 -0
  348. package/src/utils.ts +18 -0
  349. package/windows/README.md +25 -0
  350. package/windows/RNScreens/PropertySheet.props +16 -0
  351. package/windows/RNScreens/RNScreens.cpp +66 -0
  352. package/windows/RNScreens/RNScreens.def +3 -0
  353. package/windows/RNScreens/RNScreens.h +41 -0
  354. package/windows/RNScreens/RNScreens.idl +8 -0
  355. package/windows/RNScreens/RNScreens.vcxproj +187 -0
  356. package/windows/RNScreens/RNScreens.vcxproj.filters +52 -0
  357. package/windows/RNScreens/ReactPackageProvider.cpp +30 -0
  358. package/windows/RNScreens/ReactPackageProvider.h +17 -0
  359. package/windows/RNScreens/ReactPackageProvider.idl +9 -0
  360. package/windows/RNScreens/Screen.cpp +122 -0
  361. package/windows/RNScreens/Screen.h +64 -0
  362. package/windows/RNScreens/ScreenContainer.cpp +49 -0
  363. package/windows/RNScreens/ScreenContainer.h +23 -0
  364. package/windows/RNScreens/ScreenContainerViewManager.cpp +133 -0
  365. package/windows/RNScreens/ScreenContainerViewManager.h +78 -0
  366. package/windows/RNScreens/ScreenStack.cpp +65 -0
  367. package/windows/RNScreens/ScreenStack.h +23 -0
  368. package/windows/RNScreens/ScreenStackHeaderConfig.cpp +19 -0
  369. package/windows/RNScreens/ScreenStackHeaderConfig.h +14 -0
  370. package/windows/RNScreens/ScreenStackHeaderConfigViewManager.cpp +89 -0
  371. package/windows/RNScreens/ScreenStackHeaderConfigViewManager.h +62 -0
  372. package/windows/RNScreens/ScreenStackViewManager.cpp +132 -0
  373. package/windows/RNScreens/ScreenStackViewManager.h +78 -0
  374. package/windows/RNScreens/ScreenViewManager.cpp +154 -0
  375. package/windows/RNScreens/ScreenViewManager.h +78 -0
  376. package/windows/RNScreens/packages.config +4 -0
  377. package/windows/RNScreens/pch.cpp +1 -0
  378. package/windows/RNScreens/pch.h +9 -0
  379. package/windows/RNScreens62.sln +254 -0
  380. package/windows/RNScreens63.sln +225 -0
  381. package/windows/RNScreens65.sln +144 -0
@@ -0,0 +1,44 @@
1
+
2
+ #ifdef RCT_NEW_ARCH_ENABLED
3
+ #import <React/RCTViewComponentView.h>
4
+ #endif
5
+
6
+ #import <React/RCTConvert.h>
7
+ #import <React/RCTViewManager.h>
8
+ #import "RNSEnums.h"
9
+
10
+ NS_ASSUME_NONNULL_BEGIN
11
+
12
+ @interface RNSScreenStackHeaderSubview :
13
+ #ifdef RCT_NEW_ARCH_ENABLED
14
+ RCTViewComponentView
15
+ #else
16
+ UIView
17
+ #endif
18
+
19
+ @property (nonatomic) RNSScreenStackHeaderSubviewType type;
20
+
21
+ @property (nonatomic, weak) UIView *reactSuperview;
22
+
23
+ @property (nonatomic, weak) RCTBridge *bridge;
24
+
25
+ #ifdef RCT_NEW_ARCH_ENABLED
26
+ #else
27
+ - (instancetype)initWithBridge:(RCTBridge *)bridge;
28
+ #endif // RCT_NEW_ARCH_ENABLED
29
+
30
+ @end
31
+
32
+ @interface RNSScreenStackHeaderSubviewManager : RCTViewManager
33
+
34
+ @property (nonatomic) RNSScreenStackHeaderSubviewType type;
35
+
36
+ @end
37
+
38
+ @interface RCTConvert (RNSScreenStackHeaderSubview)
39
+
40
+ + (RNSScreenStackHeaderSubviewType)RNSScreenStackHeaderSubviewType:(id)json;
41
+
42
+ @end
43
+
44
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,147 @@
1
+ #import "RNSScreenStackHeaderSubview.h"
2
+ #import "RNSConvert.h"
3
+
4
+ #ifdef RCT_NEW_ARCH_ENABLED
5
+ #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
6
+ #import <react/renderer/components/rnscreens/EventEmitters.h>
7
+ #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
8
+
9
+ #import <React/RCTConversions.h>
10
+ #import <React/RCTFabricComponentsPlugins.h>
11
+ #endif // RCT_NEW_ARCH_ENABLED
12
+
13
+ #ifdef RCT_NEW_ARCH_ENABLED
14
+ namespace react = facebook::react;
15
+ #endif // RCT_NEW_ARCH_ENABLED
16
+
17
+ @interface RCTBridge (Private)
18
+ + (RCTBridge *)currentBridge;
19
+ @end
20
+
21
+ @implementation RNSScreenStackHeaderSubview
22
+
23
+ #pragma mark - Common
24
+
25
+ #ifdef RCT_NEW_ARCH_ENABLED
26
+
27
+ #pragma mark - Fabric specific
28
+
29
+ - (instancetype)initWithFrame:(CGRect)frame
30
+ {
31
+ if (self = [super initWithFrame:frame]) {
32
+ static const auto defaultProps = std::make_shared<const react::RNSScreenStackHeaderSubviewProps>();
33
+ _props = defaultProps;
34
+ }
35
+
36
+ return self;
37
+ }
38
+
39
+ #pragma mark - RCTComponentViewProtocol
40
+
41
+ - (void)prepareForRecycle
42
+ {
43
+ [super prepareForRecycle];
44
+ }
45
+
46
+ - (void)updateProps:(react::Props::Shared const &)props oldProps:(react::Props::Shared const &)oldProps
47
+ {
48
+ const auto &newHeaderSubviewProps = *std::static_pointer_cast<const react::RNSScreenStackHeaderSubviewProps>(props);
49
+
50
+ [self setType:[RNSConvert RNSScreenStackHeaderSubviewTypeFromCppEquivalent:newHeaderSubviewProps.type]];
51
+ [super updateProps:props oldProps:oldProps];
52
+ }
53
+
54
+ + (react::ComponentDescriptorProvider)componentDescriptorProvider
55
+ {
56
+ return react::concreteComponentDescriptorProvider<react::RNSScreenStackHeaderSubviewComponentDescriptor>();
57
+ }
58
+
59
+ - (void)updateLayoutMetrics:(const react::LayoutMetrics &)layoutMetrics
60
+ oldLayoutMetrics:(const react::LayoutMetrics &)oldLayoutMetrics
61
+ {
62
+ CGRect frame = RCTCGRectFromRect(layoutMetrics.frame);
63
+ // CALayer will crash if we pass NaN or Inf values.
64
+ // It's unclear how to detect this case on cross-platform manner holistically, so we have to do it on the mounting
65
+ // layer as well. NaN/Inf is a kinda valid result of some math operations. Even if we can (and should) detect (and
66
+ // report early) incorrect (NaN and Inf) values which come from JavaScript side, we sometimes cannot backtrace the
67
+ // sources of a calculation that produced an incorrect/useless result.
68
+ if (!std::isfinite(frame.size.width) || !std::isfinite(frame.size.height)) {
69
+ RCTLogWarn(
70
+ @"-[UIView(ComponentViewProtocol) updateLayoutMetrics:oldLayoutMetrics:]: Received invalid layout metrics (%@) for a view (%@).",
71
+ NSStringFromCGRect(frame),
72
+ self);
73
+ } else {
74
+ self.bounds = CGRect{CGPointZero, frame.size};
75
+ }
76
+ }
77
+
78
+ #else
79
+ #pragma mark - Paper specific
80
+
81
+ - (instancetype)initWithBridge:(RCTBridge *)bridge
82
+ {
83
+ if (self = [super init]) {
84
+ _bridge = bridge;
85
+ }
86
+ return self;
87
+ }
88
+
89
+ - (void)reactSetFrame:(CGRect)frame
90
+ {
91
+ // Block any attempt to set coordinates on RNSScreenStackHeaderSubview. This
92
+ // makes UINavigationBar the only one to control the position of header content.
93
+ [super reactSetFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
94
+ }
95
+
96
+ #endif // RCT_NEW_ARCH_ENABLED
97
+
98
+ - (RCTBridge *)bridge
99
+ {
100
+ #ifdef RCT_NEW_ARCH_ENABLED
101
+ return [RCTBridge currentBridge];
102
+ #else
103
+ return _bridge;
104
+ #endif // RCT_NEW_ARCH_ENABLED
105
+ }
106
+
107
+ @end
108
+
109
+ @implementation RNSScreenStackHeaderSubviewManager
110
+
111
+ RCT_EXPORT_MODULE()
112
+
113
+ RCT_EXPORT_VIEW_PROPERTY(type, RNSScreenStackHeaderSubviewType)
114
+
115
+ #ifdef RCT_NEW_ARCH_ENABLED
116
+ #else
117
+ - (UIView *)view
118
+ {
119
+ return [[RNSScreenStackHeaderSubview alloc] initWithBridge:self.bridge];
120
+ }
121
+ #endif
122
+
123
+ @end
124
+
125
+ #ifdef RCT_NEW_ARCH_ENABLED
126
+ Class<RCTComponentViewProtocol> RNSScreenStackHeaderSubviewCls(void)
127
+ {
128
+ return RNSScreenStackHeaderSubview.class;
129
+ }
130
+ #endif
131
+
132
+ @implementation RCTConvert (RNSScreenStackHeaderSubview)
133
+
134
+ RCT_ENUM_CONVERTER(
135
+ RNSScreenStackHeaderSubviewType,
136
+ (@{
137
+ @"back" : @(RNSScreenStackHeaderSubviewTypeBackButton),
138
+ @"left" : @(RNSScreenStackHeaderSubviewTypeLeft),
139
+ @"right" : @(RNSScreenStackHeaderSubviewTypeRight),
140
+ @"title" : @(RNSScreenStackHeaderSubviewTypeTitle),
141
+ @"center" : @(RNSScreenStackHeaderSubviewTypeCenter),
142
+ @"searchBar" : @(RNSScreenStackHeaderSubviewTypeSearchBar),
143
+ }),
144
+ RNSScreenStackHeaderSubviewTypeTitle,
145
+ integerValue)
146
+
147
+ @end
@@ -0,0 +1,26 @@
1
+ #import "RNSScreen.h"
2
+
3
+ @interface RNSScreenWindowTraits : NSObject
4
+
5
+ + (void)updateWindowTraits;
6
+
7
+ #if !TARGET_OS_TV
8
+ + (void)assertViewControllerBasedStatusBarAppearenceSet;
9
+ #endif
10
+ + (void)updateStatusBarAppearance;
11
+ + (void)enforceDesiredDeviceOrientation;
12
+ + (void)updateHomeIndicatorAutoHidden;
13
+
14
+ #if !TARGET_OS_TV
15
+ + (UIStatusBarStyle)statusBarStyleForRNSStatusBarStyle:(RNSStatusBarStyle)statusBarStyle;
16
+ + (UIInterfaceOrientation)defaultOrientationForOrientationMask:(UIInterfaceOrientationMask)orientationMask;
17
+ + (UIInterfaceOrientation)interfaceOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation;
18
+ + (UIInterfaceOrientationMask)maskFromOrientation:(UIInterfaceOrientation)orientation;
19
+ #endif
20
+
21
+ + (BOOL)shouldAskScreensForTrait:(RNSWindowTrait)trait
22
+ includingModals:(BOOL)includingModals
23
+ inViewController:(UIViewController *)vc;
24
+ + (BOOL)shouldAskScreensForScreenOrientationInViewController:(UIViewController *)vc;
25
+
26
+ @end
@@ -0,0 +1,266 @@
1
+ #import "RNSScreenWindowTraits.h"
2
+ #import "RNSScreenContainer.h"
3
+ #import "RNSScreenStack.h"
4
+
5
+ @implementation RNSScreenWindowTraits
6
+
7
+ #if !TARGET_OS_TV
8
+ + (void)assertViewControllerBasedStatusBarAppearenceSet
9
+ {
10
+ static dispatch_once_t once;
11
+ static bool viewControllerBasedAppearence;
12
+ dispatch_once(&once, ^{
13
+ viewControllerBasedAppearence =
14
+ [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"] boolValue];
15
+ });
16
+ if (!viewControllerBasedAppearence) {
17
+ RCTLogError(@"If you want to change the appearance of status bar, you have to change \
18
+ UIViewControllerBasedStatusBarAppearance key in the Info.plist to YES");
19
+ }
20
+ }
21
+ #endif
22
+
23
+ + (void)updateStatusBarAppearance
24
+ {
25
+ #if !TARGET_OS_TV
26
+ [UIView animateWithDuration:0.4
27
+ animations:^{ // duration based on "Programming iOS 13" p. 311 implementation
28
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
29
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
30
+ if (@available(iOS 13, *)) {
31
+ UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
32
+ if (firstWindow != nil) {
33
+ [[firstWindow rootViewController] setNeedsStatusBarAppearanceUpdate];
34
+ }
35
+ } else
36
+ #endif
37
+ {
38
+ [UIApplication.sharedApplication.keyWindow.rootViewController setNeedsStatusBarAppearanceUpdate];
39
+ }
40
+ }];
41
+ #endif
42
+ }
43
+
44
+ + (void)updateHomeIndicatorAutoHidden
45
+ {
46
+ #if !TARGET_OS_TV
47
+
48
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
49
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
50
+ if (@available(iOS 13, *)) {
51
+ UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
52
+ if (firstWindow != nil) {
53
+ [[firstWindow rootViewController] setNeedsUpdateOfHomeIndicatorAutoHidden];
54
+ }
55
+ } else
56
+ #endif
57
+ {
58
+ if (@available(iOS 11.0, *)) {
59
+ [UIApplication.sharedApplication.keyWindow.rootViewController setNeedsUpdateOfHomeIndicatorAutoHidden];
60
+ }
61
+ }
62
+ #endif
63
+ }
64
+
65
+ #if !TARGET_OS_TV
66
+ + (UIStatusBarStyle)statusBarStyleForRNSStatusBarStyle:(RNSStatusBarStyle)statusBarStyle
67
+ {
68
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
69
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
70
+ if (@available(iOS 13.0, *)) {
71
+ switch (statusBarStyle) {
72
+ case RNSStatusBarStyleAuto:
73
+ return [UITraitCollection.currentTraitCollection userInterfaceStyle] == UIUserInterfaceStyleDark
74
+ ? UIStatusBarStyleLightContent
75
+ : UIStatusBarStyleDarkContent;
76
+ case RNSStatusBarStyleInverted:
77
+ return [UITraitCollection.currentTraitCollection userInterfaceStyle] == UIUserInterfaceStyleDark
78
+ ? UIStatusBarStyleDarkContent
79
+ : UIStatusBarStyleLightContent;
80
+ case RNSStatusBarStyleLight:
81
+ return UIStatusBarStyleLightContent;
82
+ case RNSStatusBarStyleDark:
83
+ return UIStatusBarStyleDarkContent;
84
+ default:
85
+ return UIStatusBarStyleLightContent;
86
+ }
87
+ }
88
+ #endif
89
+ // it is the only non-default style available for iOS < 13
90
+ if (statusBarStyle == RNSStatusBarStyleLight) {
91
+ return UIStatusBarStyleLightContent;
92
+ }
93
+ return UIStatusBarStyleDefault;
94
+ }
95
+ #endif
96
+
97
+ #if !TARGET_OS_TV
98
+ + (UIInterfaceOrientation)defaultOrientationForOrientationMask:(UIInterfaceOrientationMask)orientationMask
99
+ {
100
+ if (UIInterfaceOrientationMaskPortrait & orientationMask) {
101
+ return UIInterfaceOrientationPortrait;
102
+ } else if (UIInterfaceOrientationMaskLandscapeLeft & orientationMask) {
103
+ return UIInterfaceOrientationLandscapeLeft;
104
+ } else if (UIInterfaceOrientationMaskLandscapeRight & orientationMask) {
105
+ return UIInterfaceOrientationLandscapeRight;
106
+ } else if (UIInterfaceOrientationMaskPortraitUpsideDown & orientationMask) {
107
+ return UIInterfaceOrientationPortraitUpsideDown;
108
+ }
109
+ return UIInterfaceOrientationUnknown;
110
+ }
111
+
112
+ + (UIInterfaceOrientation)interfaceOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation
113
+ {
114
+ switch (deviceOrientation) {
115
+ case UIDeviceOrientationPortrait:
116
+ return UIInterfaceOrientationPortrait;
117
+ case UIDeviceOrientationPortraitUpsideDown:
118
+ return UIInterfaceOrientationPortraitUpsideDown;
119
+ // UIDevice and UIInterface landscape orientations are switched
120
+ case UIDeviceOrientationLandscapeLeft:
121
+ return UIInterfaceOrientationLandscapeRight;
122
+ case UIDeviceOrientationLandscapeRight:
123
+ return UIInterfaceOrientationLandscapeLeft;
124
+ default:
125
+ return UIInterfaceOrientationUnknown;
126
+ }
127
+ }
128
+
129
+ + (UIInterfaceOrientationMask)maskFromOrientation:(UIInterfaceOrientation)orientation
130
+ {
131
+ return 1 << orientation;
132
+ }
133
+ #endif
134
+
135
+ + (void)enforceDesiredDeviceOrientation
136
+ {
137
+ #if !TARGET_OS_TV
138
+ dispatch_async(dispatch_get_main_queue(), ^{
139
+ UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskAllButUpsideDown;
140
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
141
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
142
+ if (@available(iOS 13, *)) {
143
+ UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
144
+ if (firstWindow != nil) {
145
+ orientationMask = [firstWindow rootViewController].supportedInterfaceOrientations;
146
+ }
147
+ } else
148
+ #endif
149
+ {
150
+ orientationMask = UIApplication.sharedApplication.keyWindow.rootViewController.supportedInterfaceOrientations;
151
+ }
152
+ UIInterfaceOrientation currentDeviceOrientation =
153
+ [RNSScreenWindowTraits interfaceOrientationFromDeviceOrientation:[[UIDevice currentDevice] orientation]];
154
+ UIInterfaceOrientation currentInterfaceOrientation = [RNSScreenWindowTraits interfaceOrientation];
155
+ UIInterfaceOrientation newOrientation = UIInterfaceOrientationUnknown;
156
+ if ([RNSScreenWindowTraits maskFromOrientation:currentDeviceOrientation] & orientationMask) {
157
+ if (!([RNSScreenWindowTraits maskFromOrientation:currentInterfaceOrientation] & orientationMask)) {
158
+ // if the device orientation is in the mask, but interface orientation is not, we rotate to device's orientation
159
+ newOrientation = currentDeviceOrientation;
160
+ } else {
161
+ if (currentDeviceOrientation != currentInterfaceOrientation) {
162
+ // if both device orientation and interface orientation are in the mask, but in different orientations, we
163
+ // rotate to device's orientation
164
+ newOrientation = currentDeviceOrientation;
165
+ }
166
+ }
167
+ } else {
168
+ if (!([RNSScreenWindowTraits maskFromOrientation:currentInterfaceOrientation] & orientationMask)) {
169
+ // if both device orientation and interface orientation are not in the mask, we rotate to closest available
170
+ // rotation from mask
171
+ newOrientation = [RNSScreenWindowTraits defaultOrientationForOrientationMask:orientationMask];
172
+ } else {
173
+ // if the device orientation is not in the mask, but interface orientation is in the mask, do nothing
174
+ }
175
+ }
176
+ if (newOrientation != UIInterfaceOrientationUnknown) {
177
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_16_0) && \
178
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_16_0
179
+ if (@available(iOS 16.0, *)) {
180
+ NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
181
+ UIWindowScene *scene = (UIWindowScene *)array[0];
182
+ UIWindowSceneGeometryPreferencesIOS *geometryPreferences =
183
+ [[UIWindowSceneGeometryPreferencesIOS alloc] initWithInterfaceOrientations:orientationMask];
184
+ [scene requestGeometryUpdateWithPreferences:geometryPreferences
185
+ errorHandler:^(NSError *_Nonnull error){
186
+ }];
187
+
188
+ // `attemptRotationToDeviceOrientation` is deprecated for modern OS versions
189
+ // so we need to use `setNeedsUpdateOfSupportedInterfaceOrientations`
190
+ UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
191
+ while (topController.presentedViewController) {
192
+ topController = topController.presentedViewController;
193
+ }
194
+
195
+ [topController setNeedsUpdateOfSupportedInterfaceOrientations];
196
+ } else
197
+ #endif // Check for iOS 16
198
+ {
199
+ [[UIDevice currentDevice] setValue:@(newOrientation) forKey:@"orientation"];
200
+ [UIViewController attemptRotationToDeviceOrientation];
201
+ }
202
+ }
203
+ });
204
+ #endif // !TARGET_TV_OS
205
+ }
206
+
207
+ + (void)updateWindowTraits
208
+ {
209
+ [RNSScreenWindowTraits updateStatusBarAppearance];
210
+ [RNSScreenWindowTraits enforceDesiredDeviceOrientation];
211
+ [RNSScreenWindowTraits updateHomeIndicatorAutoHidden];
212
+ }
213
+
214
+ #if !TARGET_OS_TV
215
+ // based on
216
+ // https://stackoverflow.com/questions/57965701/statusbarorientation-was-deprecated-in-ios-13-0-when-attempting-to-get-app-ori/61249908#61249908
217
+ + (UIInterfaceOrientation)interfaceOrientation
218
+ {
219
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
220
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
221
+ if (@available(iOS 13.0, *)) {
222
+ UIWindow *firstWindow = [[[UIApplication sharedApplication] windows] firstObject];
223
+ if (firstWindow == nil) {
224
+ return UIInterfaceOrientationUnknown;
225
+ }
226
+ UIWindowScene *windowScene = firstWindow.windowScene;
227
+ if (windowScene == nil) {
228
+ return UIInterfaceOrientationUnknown;
229
+ }
230
+ return windowScene.interfaceOrientation;
231
+ } else
232
+ #endif
233
+ {
234
+ return UIApplication.sharedApplication.statusBarOrientation;
235
+ }
236
+ }
237
+ #endif
238
+
239
+ // method to be used in Expo for checking if RNScreens have trait set
240
+ + (BOOL)shouldAskScreensForTrait:(RNSWindowTrait)trait
241
+ includingModals:(BOOL)includingModals
242
+ inViewController:(UIViewController *)vc
243
+ {
244
+ UIViewController *lastViewController = [[vc childViewControllers] lastObject];
245
+ if ([lastViewController conformsToProtocol:@protocol(RNSViewControllerDelegate)]) {
246
+ UIViewController *vc = nil;
247
+ if ([lastViewController isKindOfClass:[RNSViewController class]]) {
248
+ vc = [(RNSViewController *)lastViewController findActiveChildVC];
249
+ } else if ([lastViewController isKindOfClass:[RNSNavigationController class]]) {
250
+ vc = [(RNSNavigationController *)lastViewController topViewController];
251
+ }
252
+ return [vc isKindOfClass:[RNSScreen class]] &&
253
+ [(RNSScreen *)vc findChildVCForConfigAndTrait:trait includingModals:includingModals] != nil;
254
+ }
255
+ return NO;
256
+ }
257
+
258
+ // same method as above, but directly for orientation
259
+ + (BOOL)shouldAskScreensForScreenOrientationInViewController:(UIViewController *)vc
260
+ {
261
+ return [RNSScreenWindowTraits shouldAskScreensForTrait:RNSWindowTraitOrientation
262
+ includingModals:YES
263
+ inViewController:vc];
264
+ }
265
+
266
+ @end
@@ -0,0 +1,43 @@
1
+ #import <UIKit/UIKit.h>
2
+
3
+ #ifdef RCT_NEW_ARCH_ENABLED
4
+ #import <React/RCTViewComponentView.h>
5
+ #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
6
+ #endif
7
+
8
+ #import <React/RCTBridge.h>
9
+ #import <React/RCTComponent.h>
10
+ #import <React/RCTViewManager.h>
11
+ #import "RNSEnums.h"
12
+
13
+ @interface RNSSearchBar :
14
+ #ifdef RCT_NEW_ARCH_ENABLED
15
+ RCTViewComponentView <UISearchBarDelegate, RCTRNSSearchBarViewProtocol>
16
+ #else
17
+ UIView <UISearchBarDelegate>
18
+ #endif
19
+
20
+ @property (nonatomic) BOOL hideWhenScrolling;
21
+ @property (nonatomic) RNSSearchBarPlacement placement;
22
+ @property (nonatomic, retain) UISearchController *controller;
23
+
24
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_16_0) && \
25
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_16_0 && !TARGET_OS_TV
26
+ - (UINavigationItemSearchBarPlacement)placementAsUINavigationItemSearchBarPlacement API_AVAILABLE(ios(16.0))
27
+ API_UNAVAILABLE(tvos, watchos);
28
+ #endif // Check for iOS >= 16 && !TARGET_OS_TV
29
+
30
+ #ifdef RCT_NEW_ARCH_ENABLED
31
+ #else
32
+ @property (nonatomic, copy) RCTBubblingEventBlock onChangeText;
33
+ @property (nonatomic, copy) RCTBubblingEventBlock onCancelButtonPress;
34
+ @property (nonatomic, copy) RCTBubblingEventBlock onSearchButtonPress;
35
+ @property (nonatomic, copy) RCTBubblingEventBlock onFocus;
36
+ @property (nonatomic, copy) RCTBubblingEventBlock onBlur;
37
+ #endif
38
+
39
+ @end
40
+
41
+ @interface RNSSearchBarManager : RCTViewManager
42
+
43
+ @end