@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,204 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import android.util.Log
4
+ import android.view.View
5
+ import com.facebook.react.bridge.JSApplicationCausedNativeException
6
+ import com.facebook.react.common.MapBuilder
7
+ import com.facebook.react.module.annotations.ReactModule
8
+ import com.facebook.react.uimanager.ThemedReactContext
9
+ import com.facebook.react.uimanager.ViewGroupManager
10
+ import com.facebook.react.uimanager.ViewManagerDelegate
11
+ import com.facebook.react.uimanager.annotations.ReactProp
12
+ import com.facebook.react.viewmanagers.RNSScreenStackHeaderConfigManagerDelegate
13
+ import com.facebook.react.viewmanagers.RNSScreenStackHeaderConfigManagerInterface
14
+ import com.swmansion.rnscreens.events.HeaderAttachedEvent
15
+ import com.swmansion.rnscreens.events.HeaderDetachedEvent
16
+ import javax.annotation.Nonnull
17
+
18
+ @ReactModule(name = ScreenStackHeaderConfigViewManager.REACT_CLASS)
19
+ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderConfig>(), RNSScreenStackHeaderConfigManagerInterface<ScreenStackHeaderConfig> {
20
+ private val mDelegate: ViewManagerDelegate<ScreenStackHeaderConfig>
21
+
22
+ init {
23
+ mDelegate = RNSScreenStackHeaderConfigManagerDelegate<ScreenStackHeaderConfig, ScreenStackHeaderConfigViewManager>(this)
24
+ }
25
+
26
+ override fun getName(): String = REACT_CLASS
27
+
28
+ override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStackHeaderConfig(reactContext)
29
+
30
+ override fun addView(parent: ScreenStackHeaderConfig, child: View, index: Int) {
31
+ if (child !is ScreenStackHeaderSubview) {
32
+ throw JSApplicationCausedNativeException(
33
+ "Config children should be of type " + ScreenStackHeaderSubviewManager.REACT_CLASS
34
+ )
35
+ }
36
+ parent.addConfigSubview(child, index)
37
+ }
38
+
39
+ override fun onDropViewInstance(@Nonnull view: ScreenStackHeaderConfig) {
40
+ view.destroy()
41
+ }
42
+
43
+ override fun removeAllViews(parent: ScreenStackHeaderConfig) {
44
+ parent.removeAllConfigSubviews()
45
+ }
46
+
47
+ override fun removeViewAt(parent: ScreenStackHeaderConfig, index: Int) {
48
+ parent.removeConfigSubview(index)
49
+ }
50
+
51
+ override fun getChildCount(parent: ScreenStackHeaderConfig): Int = parent.configSubviewsCount
52
+
53
+ override fun getChildAt(parent: ScreenStackHeaderConfig, index: Int): View = parent.getConfigSubview(index)
54
+
55
+ override fun needsCustomLayoutForChildren() = true
56
+
57
+ override fun onAfterUpdateTransaction(parent: ScreenStackHeaderConfig) {
58
+ super.onAfterUpdateTransaction(parent)
59
+ parent.onUpdate()
60
+ }
61
+
62
+ @ReactProp(name = "title")
63
+ override fun setTitle(config: ScreenStackHeaderConfig, title: String?) {
64
+ config.setTitle(title)
65
+ }
66
+
67
+ @ReactProp(name = "titleFontFamily")
68
+ override fun setTitleFontFamily(config: ScreenStackHeaderConfig, titleFontFamily: String?) {
69
+ config.setTitleFontFamily(titleFontFamily)
70
+ }
71
+
72
+ @ReactProp(name = "titleFontSize")
73
+ override fun setTitleFontSize(config: ScreenStackHeaderConfig, titleFontSize: Int) {
74
+ config.setTitleFontSize(titleFontSize.toFloat())
75
+ }
76
+
77
+ @ReactProp(name = "titleFontWeight")
78
+ override fun setTitleFontWeight(config: ScreenStackHeaderConfig, titleFontWeight: String?) {
79
+ config.setTitleFontWeight(titleFontWeight)
80
+ }
81
+
82
+ @ReactProp(name = "titleColor", customType = "Color")
83
+ override fun setTitleColor(config: ScreenStackHeaderConfig, titleColor: Int?) {
84
+ if (titleColor != null) {
85
+ config.setTitleColor(titleColor)
86
+ }
87
+ }
88
+
89
+ @ReactProp(name = "backgroundColor", customType = "Color")
90
+ override fun setBackgroundColor(config: ScreenStackHeaderConfig, backgroundColor: Int?) {
91
+ config.setBackgroundColor(backgroundColor)
92
+ }
93
+
94
+ @ReactProp(name = "hideShadow")
95
+ override fun setHideShadow(config: ScreenStackHeaderConfig, hideShadow: Boolean) {
96
+ config.setHideShadow(hideShadow)
97
+ }
98
+
99
+ @ReactProp(name = "hideBackButton")
100
+ override fun setHideBackButton(config: ScreenStackHeaderConfig, hideBackButton: Boolean) {
101
+ config.setHideBackButton(hideBackButton)
102
+ }
103
+
104
+ @ReactProp(name = "topInsetEnabled")
105
+ override fun setTopInsetEnabled(config: ScreenStackHeaderConfig, topInsetEnabled: Boolean) {
106
+ config.setTopInsetEnabled(topInsetEnabled)
107
+ }
108
+
109
+ @ReactProp(name = "color", customType = "Color")
110
+ override fun setColor(config: ScreenStackHeaderConfig, color: Int?) {
111
+ config.setTintColor(color ?: 0)
112
+ }
113
+
114
+ @ReactProp(name = "hidden")
115
+ override fun setHidden(config: ScreenStackHeaderConfig, hidden: Boolean) {
116
+ config.setHidden(hidden)
117
+ }
118
+
119
+ @ReactProp(name = "translucent")
120
+ override fun setTranslucent(config: ScreenStackHeaderConfig, translucent: Boolean) {
121
+ config.setTranslucent(translucent)
122
+ }
123
+
124
+ @ReactProp(name = "backButtonInCustomView")
125
+ override fun setBackButtonInCustomView(
126
+ config: ScreenStackHeaderConfig,
127
+ backButtonInCustomView: Boolean
128
+ ) {
129
+ config.setBackButtonInCustomView(backButtonInCustomView)
130
+ }
131
+
132
+ @ReactProp(name = "direction")
133
+ override fun setDirection(config: ScreenStackHeaderConfig, direction: String?) {
134
+ config.setDirection(direction)
135
+ }
136
+
137
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any>? {
138
+ return MapBuilder.of(
139
+ HeaderAttachedEvent.EVENT_NAME,
140
+ MapBuilder.of("registrationName", "onAttached"),
141
+ HeaderDetachedEvent.EVENT_NAME,
142
+ MapBuilder.of("registrationName", "onDetached"),
143
+ )
144
+ }
145
+
146
+ protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderConfig> = mDelegate
147
+
148
+ companion object {
149
+ const val REACT_CLASS = "RNSScreenStackHeaderConfig"
150
+ }
151
+
152
+ // TODO: Find better way to handle platform specific props
153
+ private fun logNotAvailable(propName: String) {
154
+ Log.w("RN SCREENS", "$propName prop is not available on Android")
155
+ }
156
+
157
+ override fun setBackTitle(view: ScreenStackHeaderConfig?, value: String?) {
158
+ logNotAvailable("backTitle")
159
+ }
160
+
161
+ override fun setBackTitleFontFamily(view: ScreenStackHeaderConfig?, value: String?) {
162
+ logNotAvailable("backTitleFontFamily")
163
+ }
164
+
165
+ override fun setBackTitleFontSize(view: ScreenStackHeaderConfig?, value: Int) {
166
+ logNotAvailable("backTitleFontSize")
167
+ }
168
+
169
+ override fun setBackTitleVisible(view: ScreenStackHeaderConfig?, value: Boolean) {
170
+ logNotAvailable("backTitleVisible")
171
+ }
172
+
173
+ override fun setLargeTitle(view: ScreenStackHeaderConfig?, value: Boolean) {
174
+ logNotAvailable("largeTitle")
175
+ }
176
+
177
+ override fun setLargeTitleFontFamily(view: ScreenStackHeaderConfig?, value: String?) {
178
+ logNotAvailable("largeTitleFontFamily")
179
+ }
180
+
181
+ override fun setLargeTitleFontSize(view: ScreenStackHeaderConfig?, value: Int) {
182
+ logNotAvailable("largeTitleFontSize")
183
+ }
184
+
185
+ override fun setLargeTitleFontWeight(view: ScreenStackHeaderConfig?, value: String?) {
186
+ logNotAvailable("largeTitleFontWeight")
187
+ }
188
+
189
+ override fun setLargeTitleBackgroundColor(view: ScreenStackHeaderConfig?, value: Int?) {
190
+ logNotAvailable("largeTitleBackgroundColor")
191
+ }
192
+
193
+ override fun setLargeTitleHideShadow(view: ScreenStackHeaderConfig?, value: Boolean) {
194
+ logNotAvailable("largeTitleHideShadow")
195
+ }
196
+
197
+ override fun setLargeTitleColor(view: ScreenStackHeaderConfig?, value: Int?) {
198
+ logNotAvailable("largeTitleColor")
199
+ }
200
+
201
+ override fun setDisableBackButtonMenu(view: ScreenStackHeaderConfig?, value: Boolean) {
202
+ logNotAvailable("disableBackButtonMenu")
203
+ }
204
+ }
@@ -0,0 +1,38 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.view.View
5
+ import com.facebook.react.bridge.ReactContext
6
+ import com.facebook.react.views.view.ReactViewGroup
7
+
8
+ @SuppressLint("ViewConstructor")
9
+ class ScreenStackHeaderSubview(context: ReactContext?) : ReactViewGroup(context) {
10
+ private var mReactWidth = 0
11
+ private var mReactHeight = 0
12
+ var type = Type.RIGHT
13
+
14
+ val config: ScreenStackHeaderConfig?
15
+ get() = (parent as? CustomToolbar)?.config
16
+
17
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
18
+ if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY &&
19
+ MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY
20
+ ) {
21
+ // dimensions provided by react
22
+ mReactWidth = MeasureSpec.getSize(widthMeasureSpec)
23
+ mReactHeight = MeasureSpec.getSize(heightMeasureSpec)
24
+ val parent = parent
25
+ if (parent != null) {
26
+ forceLayout()
27
+ (parent as View).requestLayout()
28
+ }
29
+ }
30
+ setMeasuredDimension(mReactWidth, mReactHeight)
31
+ }
32
+
33
+ override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) = Unit
34
+
35
+ enum class Type {
36
+ LEFT, CENTER, RIGHT, BACK, SEARCH_BAR
37
+ }
38
+ }
@@ -0,0 +1,41 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import com.facebook.react.bridge.JSApplicationIllegalArgumentException
4
+ import com.facebook.react.module.annotations.ReactModule
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.uimanager.ViewGroupManager
7
+ import com.facebook.react.uimanager.ViewManagerDelegate
8
+ import com.facebook.react.uimanager.annotations.ReactProp
9
+ import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerDelegate
10
+ import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerInterface
11
+
12
+ @ReactModule(name = ScreenStackHeaderSubviewManager.REACT_CLASS)
13
+ class ScreenStackHeaderSubviewManager : ViewGroupManager<ScreenStackHeaderSubview>(), RNSScreenStackHeaderSubviewManagerInterface<ScreenStackHeaderSubview> {
14
+ private val mDelegate: ViewManagerDelegate<ScreenStackHeaderSubview>
15
+
16
+ init {
17
+ mDelegate = RNSScreenStackHeaderSubviewManagerDelegate<ScreenStackHeaderSubview, ScreenStackHeaderSubviewManager>(this)
18
+ }
19
+
20
+ override fun getName() = REACT_CLASS
21
+
22
+ override fun createViewInstance(context: ThemedReactContext) = ScreenStackHeaderSubview(context)
23
+
24
+ @ReactProp(name = "type")
25
+ override fun setType(view: ScreenStackHeaderSubview, type: String?) {
26
+ view.type = when (type) {
27
+ "left" -> ScreenStackHeaderSubview.Type.LEFT
28
+ "center" -> ScreenStackHeaderSubview.Type.CENTER
29
+ "right" -> ScreenStackHeaderSubview.Type.RIGHT
30
+ "back" -> ScreenStackHeaderSubview.Type.BACK
31
+ "searchBar" -> ScreenStackHeaderSubview.Type.SEARCH_BAR
32
+ else -> throw JSApplicationIllegalArgumentException("Unknown type $type")
33
+ }
34
+ }
35
+
36
+ protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview> = mDelegate
37
+
38
+ companion object {
39
+ const val REACT_CLASS = "RNSScreenStackHeaderSubview"
40
+ }
41
+ }
@@ -0,0 +1,75 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import android.view.View
4
+ import android.view.ViewGroup
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.annotations.ReactModule
7
+ import com.facebook.react.uimanager.LayoutShadowNode
8
+ import com.facebook.react.uimanager.ThemedReactContext
9
+ import com.facebook.react.uimanager.ViewGroupManager
10
+ import com.facebook.react.uimanager.ViewManagerDelegate
11
+ import com.facebook.react.viewmanagers.RNSScreenStackManagerDelegate
12
+ import com.facebook.react.viewmanagers.RNSScreenStackManagerInterface
13
+ import com.swmansion.rnscreens.events.StackFinishTransitioningEvent
14
+
15
+ @ReactModule(name = ScreenStackViewManager.REACT_CLASS)
16
+ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackManagerInterface<ScreenStack> {
17
+ private val mDelegate: ViewManagerDelegate<ScreenStack>
18
+
19
+ init {
20
+ mDelegate = RNSScreenStackManagerDelegate<ScreenStack, ScreenStackViewManager>(this)
21
+ }
22
+
23
+ override fun getName() = REACT_CLASS
24
+
25
+ override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStack(reactContext)
26
+
27
+ override fun addView(parent: ScreenStack, child: View, index: Int) {
28
+ require(child is Screen) { "Attempt attach child that is not of type RNScreen" }
29
+ parent.addScreen(child, index)
30
+ }
31
+
32
+ override fun removeViewAt(parent: ScreenStack, index: Int) {
33
+ prepareOutTransition(parent.getScreenAt(index))
34
+ parent.removeScreenAt(index)
35
+ }
36
+
37
+ private fun prepareOutTransition(screen: Screen?) {
38
+ startTransitionRecursive(screen)
39
+ }
40
+
41
+ private fun startTransitionRecursive(parent: ViewGroup?) {
42
+ parent?.let {
43
+ for (i in 0 until it.childCount) {
44
+ val child = it.getChildAt(i)
45
+ child?.let { view -> it.startViewTransition(view) }
46
+ if (child is ScreenStackHeaderConfig) {
47
+ // we want to start transition on children of the toolbar too,
48
+ // which is not a child of ScreenStackHeaderConfig
49
+ startTransitionRecursive(child.toolbar)
50
+ }
51
+ if (child is ViewGroup) {
52
+ startTransitionRecursive(child)
53
+ }
54
+ }
55
+ }
56
+ }
57
+
58
+ override fun getChildCount(parent: ScreenStack) = parent.screenCount
59
+
60
+ override fun getChildAt(parent: ScreenStack, index: Int): View = parent.getScreenAt(index)
61
+
62
+ override fun createShadowNodeInstance(context: ReactApplicationContext): LayoutShadowNode = ScreensShadowNode(context)
63
+
64
+ override fun needsCustomLayoutForChildren() = true
65
+
66
+ protected override fun getDelegate(): ViewManagerDelegate<ScreenStack> = mDelegate
67
+
68
+ override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = mutableMapOf(
69
+ StackFinishTransitioningEvent.EVENT_NAME to mutableMapOf("registrationName" to "onFinishTransitioning")
70
+ )
71
+
72
+ companion object {
73
+ const val REACT_CLASS = "RNSScreenStack"
74
+ }
75
+ }
@@ -0,0 +1,186 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import com.facebook.react.bridge.JSApplicationIllegalArgumentException
4
+ import com.facebook.react.bridge.ReadableMap
5
+ import com.facebook.react.common.MapBuilder
6
+ import com.facebook.react.module.annotations.ReactModule
7
+ import com.facebook.react.uimanager.ThemedReactContext
8
+ import com.facebook.react.uimanager.ViewGroupManager
9
+ import com.facebook.react.uimanager.ViewManagerDelegate
10
+ import com.facebook.react.uimanager.annotations.ReactProp
11
+ import com.facebook.react.viewmanagers.RNSScreenManagerDelegate
12
+ import com.facebook.react.viewmanagers.RNSScreenManagerInterface
13
+ import com.swmansion.rnscreens.events.HeaderBackButtonClickedEvent
14
+ import com.swmansion.rnscreens.events.HeaderHeightChangeEvent
15
+ import com.swmansion.rnscreens.events.ScreenAppearEvent
16
+ import com.swmansion.rnscreens.events.ScreenDisappearEvent
17
+ import com.swmansion.rnscreens.events.ScreenDismissedEvent
18
+ import com.swmansion.rnscreens.events.ScreenTransitionProgressEvent
19
+ import com.swmansion.rnscreens.events.ScreenWillAppearEvent
20
+ import com.swmansion.rnscreens.events.ScreenWillDisappearEvent
21
+
22
+ @ReactModule(name = ScreenViewManager.REACT_CLASS)
23
+ class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<Screen> {
24
+ private val mDelegate: ViewManagerDelegate<Screen>
25
+
26
+ init {
27
+ mDelegate = RNSScreenManagerDelegate<Screen, ScreenViewManager>(this)
28
+ }
29
+
30
+ override fun getName() = REACT_CLASS
31
+
32
+ override fun createViewInstance(reactContext: ThemedReactContext) = Screen(reactContext)
33
+
34
+ override fun setActivityState(view: Screen, activityState: Float) {
35
+ setActivityState(view, activityState.toInt())
36
+ }
37
+
38
+ @ReactProp(name = "activityState")
39
+ fun setActivityState(view: Screen, activityState: Int) {
40
+ if (activityState == -1) {
41
+ // Null will be provided when activityState is set as an animated value and we change
42
+ // it from JS to be a plain value (non animated).
43
+ // In case when null is received, we want to ignore such value and not make
44
+ // any updates as the actual non-null value will follow immediately.
45
+ return
46
+ }
47
+ when (activityState) {
48
+ 0 -> view.setActivityState(Screen.ActivityState.INACTIVE)
49
+ 1 -> view.setActivityState(Screen.ActivityState.TRANSITIONING_OR_BELOW_TOP)
50
+ 2 -> view.setActivityState(Screen.ActivityState.ON_TOP)
51
+ }
52
+ }
53
+
54
+ @ReactProp(name = "stackPresentation")
55
+ override fun setStackPresentation(view: Screen, presentation: String?) {
56
+ view.stackPresentation = when (presentation) {
57
+ "push" -> Screen.StackPresentation.PUSH
58
+ "modal", "containedModal", "fullScreenModal", "formSheet" ->
59
+ Screen.StackPresentation.MODAL
60
+ "transparentModal", "containedTransparentModal" ->
61
+ Screen.StackPresentation.TRANSPARENT_MODAL
62
+ else -> throw JSApplicationIllegalArgumentException("Unknown presentation type $presentation")
63
+ }
64
+ }
65
+
66
+ @ReactProp(name = "stackAnimation")
67
+ override fun setStackAnimation(view: Screen, animation: String?) {
68
+ view.stackAnimation = when (animation) {
69
+ null, "default", "flip", "simple_push" -> Screen.StackAnimation.DEFAULT
70
+ "none" -> Screen.StackAnimation.NONE
71
+ "fade" -> Screen.StackAnimation.FADE
72
+ "slide_from_right" -> Screen.StackAnimation.SLIDE_FROM_RIGHT
73
+ "slide_from_left" -> Screen.StackAnimation.SLIDE_FROM_LEFT
74
+ "slide_from_bottom" -> Screen.StackAnimation.SLIDE_FROM_BOTTOM
75
+ "fade_from_bottom" -> Screen.StackAnimation.FADE_FROM_BOTTOM
76
+ else -> throw JSApplicationIllegalArgumentException("Unknown animation type $animation")
77
+ }
78
+ }
79
+
80
+ @ReactProp(name = "gestureEnabled", defaultBoolean = true)
81
+ override fun setGestureEnabled(view: Screen, gestureEnabled: Boolean) {
82
+ view.isGestureEnabled = gestureEnabled
83
+ }
84
+
85
+ @ReactProp(name = "replaceAnimation")
86
+ override fun setReplaceAnimation(view: Screen, animation: String?) {
87
+ view.replaceAnimation = when (animation) {
88
+ null, "pop" -> Screen.ReplaceAnimation.POP
89
+ "push" -> Screen.ReplaceAnimation.PUSH
90
+ else -> throw JSApplicationIllegalArgumentException("Unknown replace animation type $animation")
91
+ }
92
+ }
93
+
94
+ @ReactProp(name = "screenOrientation")
95
+ override fun setScreenOrientation(view: Screen, screenOrientation: String?) {
96
+ view.setScreenOrientation(screenOrientation)
97
+ }
98
+
99
+ @ReactProp(name = "statusBarAnimation")
100
+ override fun setStatusBarAnimation(view: Screen, statusBarAnimation: String?) {
101
+ val animated = statusBarAnimation != null && "none" != statusBarAnimation
102
+ view.isStatusBarAnimated = animated
103
+ }
104
+
105
+ @ReactProp(name = "statusBarColor", customType = "Color")
106
+ override fun setStatusBarColor(view: Screen, statusBarColor: Int?) {
107
+ view.statusBarColor = statusBarColor
108
+ }
109
+
110
+ @ReactProp(name = "statusBarStyle")
111
+ override fun setStatusBarStyle(view: Screen, statusBarStyle: String?) {
112
+ view.statusBarStyle = statusBarStyle
113
+ }
114
+
115
+ @ReactProp(name = "statusBarTranslucent")
116
+ override fun setStatusBarTranslucent(view: Screen, statusBarTranslucent: Boolean) {
117
+ view.isStatusBarTranslucent = statusBarTranslucent
118
+ }
119
+
120
+ @ReactProp(name = "statusBarHidden")
121
+ override fun setStatusBarHidden(view: Screen, statusBarHidden: Boolean) {
122
+ view.isStatusBarHidden = statusBarHidden
123
+ }
124
+
125
+ @ReactProp(name = "navigationBarColor", customType = "Color")
126
+ override fun setNavigationBarColor(view: Screen, navigationBarColor: Int?) {
127
+ view.navigationBarColor = navigationBarColor
128
+ }
129
+
130
+ @ReactProp(name = "navigationBarHidden")
131
+ override fun setNavigationBarHidden(view: Screen, navigationBarHidden: Boolean) {
132
+ view.isNavigationBarHidden = navigationBarHidden
133
+ }
134
+
135
+ @ReactProp(name = "nativeBackButtonDismissalEnabled")
136
+ override fun setNativeBackButtonDismissalEnabled(
137
+ view: Screen,
138
+ nativeBackButtonDismissalEnabled: Boolean
139
+ ) {
140
+ view.nativeBackButtonDismissalEnabled = nativeBackButtonDismissalEnabled
141
+ }
142
+
143
+ // these props are not available on Android, however we must override their setters
144
+ override fun setFullScreenSwipeEnabled(view: Screen?, value: Boolean) = Unit
145
+
146
+ override fun setTransitionDuration(view: Screen?, value: Int) = Unit
147
+
148
+ override fun setHideKeyboardOnSwipe(view: Screen?, value: Boolean) = Unit
149
+
150
+ override fun setCustomAnimationOnSwipe(view: Screen?, value: Boolean) = Unit
151
+
152
+ override fun setGestureResponseDistance(view: Screen?, value: ReadableMap?) = Unit
153
+
154
+ override fun setHomeIndicatorHidden(view: Screen?, value: Boolean) = Unit
155
+
156
+ override fun setPreventNativeDismiss(view: Screen?, value: Boolean) = Unit
157
+
158
+ override fun setSwipeDirection(view: Screen?, value: String?) = Unit
159
+
160
+ override fun setSheetAllowedDetents(view: Screen, value: String?) = Unit
161
+
162
+ override fun setSheetLargestUndimmedDetent(view: Screen, value: String?) = Unit
163
+
164
+ override fun setSheetGrabberVisible(view: Screen?, value: Boolean) = Unit
165
+
166
+ override fun setSheetCornerRadius(view: Screen?, value: Float) = Unit
167
+
168
+ override fun setSheetExpandsWhenScrolledToEdge(view: Screen?, value: Boolean) = Unit
169
+
170
+ override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = mutableMapOf(
171
+ ScreenDismissedEvent.EVENT_NAME to MapBuilder.of("registrationName", "onDismissed"),
172
+ ScreenWillAppearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onWillAppear"),
173
+ ScreenAppearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onAppear"),
174
+ ScreenWillDisappearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onWillDisappear"),
175
+ ScreenDisappearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onDisappear"),
176
+ HeaderHeightChangeEvent.EVENT_NAME to MapBuilder.of("registrationName", "onHeaderHeightChange"),
177
+ HeaderBackButtonClickedEvent.EVENT_NAME to MapBuilder.of("registrationName", "onHeaderBackButtonClicked"),
178
+ ScreenTransitionProgressEvent.EVENT_NAME to MapBuilder.of("registrationName", "onTransitionProgress")
179
+ )
180
+
181
+ protected override fun getDelegate(): ViewManagerDelegate<Screen> = mDelegate
182
+
183
+ companion object {
184
+ const val REACT_CLASS = "RNSScreen"
185
+ }
186
+ }