@amazon-devices/react-native-screens 2.0.1759135970 → 3.0.9000000000

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 (672) hide show
  1. package/README.md +57 -18
  2. package/RNScreens.podspec +12 -30
  3. package/SystemBundles/31d5b6b69618249f6233b73a1de7c4d890c86be7ccb031ce7cf2dcc41783f9f7.bundle +45301 -0
  4. package/SystemBundles/31d5b6b69618249f6233b73a1de7c4d890c86be7ccb031ce7cf2dcc41783f9f7.map +13711 -0
  5. package/SystemModules/amzn__react-native-screens-3.modules.txt +158 -0
  6. package/SystemModules/amzn__react-native-screens-3.private.modules.txt +377 -0
  7. package/SystemModules/keplerscript-system-bundle-config.json +4 -4
  8. package/android/CMakeLists.txt +80 -0
  9. package/android/build.gradle +96 -17
  10. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +61 -0
  11. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +38 -25
  12. package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +53 -0
  13. package/android/src/main/cpp/NativeProxy.cpp +51 -0
  14. package/android/src/main/cpp/NativeProxy.h +35 -0
  15. package/android/src/main/cpp/OnLoad.cpp +8 -0
  16. package/android/src/main/cpp/jni-adapter.cpp +106 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +20 -10
  18. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +69 -1
  19. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +8 -8
  20. package/android/src/main/java/com/swmansion/rnscreens/InsetsObserverProxy.kt +104 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/ModalScreenViewManager.kt +12 -0
  22. package/android/src/main/java/com/swmansion/rnscreens/NativeDismissalObserver.kt +12 -0
  23. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +65 -7
  24. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +327 -84
  25. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +122 -72
  26. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +27 -4
  27. package/android/src/main/java/com/swmansion/rnscreens/ScreenContentWrapper.kt +38 -0
  28. package/android/src/main/java/com/swmansion/rnscreens/ScreenContentWrapperManager.kt +25 -0
  29. package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +10 -2
  30. package/android/src/main/java/com/swmansion/rnscreens/ScreenFooter.kt +299 -0
  31. package/android/src/main/java/com/swmansion/rnscreens/ScreenFooterManager.kt +25 -0
  32. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +91 -67
  33. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +12 -1
  34. package/android/src/main/java/com/swmansion/rnscreens/ScreenModalFragment.kt +281 -0
  35. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +184 -81
  36. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +467 -80
  37. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +8 -1
  38. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +156 -124
  39. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigShadowNode.kt +25 -0
  40. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +159 -39
  41. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +24 -9
  42. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +19 -13
  43. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +31 -28
  44. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +276 -71
  45. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +124 -64
  46. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +127 -0
  47. package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +4 -2
  48. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +160 -53
  49. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +57 -32
  50. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +15 -10
  51. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetBehaviorExt.kt +42 -0
  52. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogRootView.kt +104 -0
  53. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogScreen.kt +26 -0
  54. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingFragment.kt +493 -0
  55. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingView.kt +66 -0
  56. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/GestureTransparentViewGroup.kt +24 -0
  57. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/SheetUtils.kt +135 -0
  58. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +7 -8
  59. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +8 -9
  60. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +7 -8
  61. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +9 -10
  62. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +4 -1
  63. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +4 -1
  64. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +8 -4
  65. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +13 -16
  66. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +4 -1
  67. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +4 -1
  68. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +8 -9
  69. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +8 -11
  70. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +7 -8
  71. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +8 -9
  72. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +7 -8
  73. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +12 -11
  74. package/android/src/main/java/com/swmansion/rnscreens/events/SheetDetentChangedEvent.kt +27 -0
  75. package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +4 -1
  76. package/android/src/main/java/com/swmansion/rnscreens/ext/NumericExt.kt +12 -0
  77. package/android/src/main/java/com/swmansion/rnscreens/ext/ViewExt.kt +32 -0
  78. package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +1 -5
  79. package/android/src/main/java/com/swmansion/rnscreens/utils/PaddingBundle.kt +8 -0
  80. package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +282 -0
  81. package/android/src/main/jni/CMakeLists.txt +35 -23
  82. package/android/src/main/jni/rnscreens.h +3 -0
  83. package/android/src/main/res/base/anim/rns_ios_from_left_background_close.xml +5 -0
  84. package/android/src/main/res/base/anim/rns_ios_from_left_background_open.xml +5 -0
  85. package/android/src/main/res/base/anim/rns_ios_from_left_foreground_close.xml +6 -0
  86. package/android/src/main/res/base/anim/rns_ios_from_left_foreground_open.xml +6 -0
  87. package/android/src/main/res/base/anim/rns_ios_from_right_background_close.xml +5 -0
  88. package/android/src/main/res/base/anim/rns_ios_from_right_background_open.xml +5 -0
  89. package/android/src/main/res/base/anim/rns_ios_from_right_foreground_close.xml +6 -0
  90. package/android/src/main/res/base/anim/rns_ios_from_right_foreground_open.xml +6 -0
  91. package/android/src/main/res/base/drawable/rns_rounder_top_corners_shape.xml +8 -0
  92. package/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml +0 -1
  93. package/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml +2 -2
  94. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerDelegate.java +25 -0
  95. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerInterface.java +16 -0
  96. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerDelegate.java +25 -0
  97. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerInterface.java +16 -0
  98. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerDelegate.java +25 -0
  99. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerInterface.java +16 -0
  100. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +16 -3
  101. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +7 -2
  102. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +6 -0
  103. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +2 -0
  104. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerDelegate.java +99 -0
  105. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerInterface.java +37 -0
  106. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +39 -0
  107. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +11 -2
  108. package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +19 -0
  109. package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +36 -0
  110. package/common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h +51 -0
  111. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h +40 -0
  112. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +16 -0
  113. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +32 -0
  114. package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +55 -12
  115. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +157 -0
  116. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +31 -11
  117. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h +49 -0
  118. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp +22 -0
  119. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h +40 -0
  120. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp +34 -0
  121. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h +57 -0
  122. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h +27 -0
  123. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp +8 -0
  124. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h +31 -0
  125. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp +15 -0
  126. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h +39 -0
  127. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +23 -2
  128. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +33 -8
  129. package/common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h +36 -0
  130. package/cpp/RNSScreenRemovalListener.cpp +25 -0
  131. package/cpp/RNSScreenRemovalListener.h +20 -0
  132. package/cpp/RNScreensTurboModule.cpp +115 -0
  133. package/cpp/RNScreensTurboModule.h +40 -0
  134. package/gesture-handler/package.json +6 -0
  135. package/ios/RNSConvert.h +24 -4
  136. package/ios/RNSConvert.mm +180 -55
  137. package/ios/RNSEnums.h +48 -0
  138. package/ios/RNSFullWindowOverlay.mm +12 -2
  139. package/ios/RNSModalScreen.h +8 -0
  140. package/ios/RNSModalScreen.mm +65 -0
  141. package/ios/RNSModule.h +19 -0
  142. package/ios/RNSModule.mm +173 -0
  143. package/ios/RNSPercentDrivenInteractiveTransition.h +12 -0
  144. package/ios/RNSPercentDrivenInteractiveTransition.mm +69 -0
  145. package/ios/RNSScreen.h +24 -5
  146. package/ios/RNSScreen.mm +652 -173
  147. package/ios/RNSScreenContainer.mm +12 -1
  148. package/ios/RNSScreenContentWrapper.h +44 -0
  149. package/ios/RNSScreenContentWrapper.mm +67 -0
  150. package/ios/RNSScreenFooter.h +30 -0
  151. package/ios/RNSScreenFooter.mm +142 -0
  152. package/ios/RNSScreenNavigationContainer.mm +7 -0
  153. package/ios/RNSScreenStack.h +6 -0
  154. package/ios/RNSScreenStack.mm +333 -109
  155. package/ios/RNSScreenStackAnimator.h +15 -1
  156. package/ios/RNSScreenStackAnimator.mm +380 -115
  157. package/ios/RNSScreenStackHeaderConfig.h +74 -6
  158. package/ios/RNSScreenStackHeaderConfig.mm +338 -69
  159. package/ios/RNSScreenStackHeaderSubview.h +0 -7
  160. package/ios/RNSScreenStackHeaderSubview.mm +61 -24
  161. package/ios/RNSScreenWindowTraits.h +1 -1
  162. package/ios/RNSScreenWindowTraits.mm +24 -50
  163. package/ios/RNSSearchBar.h +5 -5
  164. package/ios/RNSSearchBar.mm +42 -11
  165. package/ios/events/RNSHeaderHeightChangeEvent.h +0 -1
  166. package/ios/events/RNSHeaderHeightChangeEvent.mm +15 -0
  167. package/ios/events/RNSScreenViewEvent.h +0 -1
  168. package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.h +15 -0
  169. package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.mm +14 -0
  170. package/ios/utils/RCTTouchHandler+RNSUtility.h +15 -0
  171. package/ios/utils/RCTTouchHandler+RNSUtility.mm +15 -0
  172. package/ios/utils/RNSDefines.h +7 -0
  173. package/ios/utils/RNSUIBarButtonItem.h +2 -0
  174. package/ios/utils/UINavigationBar+RNSUtility.h +37 -0
  175. package/ios/utils/UINavigationBar+RNSUtility.mm +44 -0
  176. package/ios/utils/UIView+RNSUtility.h +23 -0
  177. package/ios/utils/UIView+RNSUtility.mm +54 -0
  178. package/kepler-compatibility.json +2 -2
  179. package/lib/commonjs/TransitionProgressContext.js +1 -0
  180. package/lib/commonjs/TransitionProgressContext.js.map +1 -1
  181. package/lib/commonjs/components/DebugContainer.js +39 -0
  182. package/lib/commonjs/components/DebugContainer.js.map +1 -0
  183. package/lib/commonjs/components/DebugContainer.web.js +15 -0
  184. package/lib/commonjs/components/DebugContainer.web.js.map +1 -0
  185. package/lib/commonjs/components/FullWindowOverlay.js +31 -0
  186. package/lib/commonjs/components/FullWindowOverlay.js.map +1 -0
  187. package/lib/commonjs/components/FullWindowOverlay.web.js +9 -0
  188. package/lib/commonjs/components/FullWindowOverlay.web.js.map +1 -0
  189. package/lib/commonjs/components/Screen.js +286 -0
  190. package/lib/commonjs/components/Screen.js.map +1 -0
  191. package/lib/commonjs/components/Screen.web.js +47 -0
  192. package/lib/commonjs/components/Screen.web.js.map +1 -0
  193. package/lib/commonjs/components/ScreenContainer.js +32 -0
  194. package/lib/commonjs/components/ScreenContainer.js.map +1 -0
  195. package/lib/commonjs/components/ScreenContainer.web.js +10 -0
  196. package/lib/commonjs/components/ScreenContainer.web.js.map +1 -0
  197. package/lib/commonjs/components/ScreenContentWrapper.js +17 -0
  198. package/lib/commonjs/components/ScreenContentWrapper.js.map +1 -0
  199. package/lib/commonjs/components/ScreenContentWrapper.web.js +10 -0
  200. package/lib/commonjs/components/ScreenContentWrapper.web.js.map +1 -0
  201. package/lib/commonjs/components/ScreenFooter.js +25 -0
  202. package/lib/commonjs/components/ScreenFooter.js.map +1 -0
  203. package/lib/commonjs/components/ScreenFooter.web.js +11 -0
  204. package/lib/commonjs/components/ScreenFooter.web.js.map +1 -0
  205. package/lib/commonjs/components/ScreenStack.js +67 -0
  206. package/lib/commonjs/components/ScreenStack.js.map +1 -0
  207. package/lib/commonjs/components/ScreenStack.web.js +10 -0
  208. package/lib/commonjs/components/ScreenStack.web.js.map +1 -0
  209. package/lib/commonjs/components/ScreenStackHeaderConfig.js +90 -0
  210. package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -0
  211. package/lib/commonjs/components/ScreenStackHeaderConfig.web.js +27 -0
  212. package/lib/commonjs/components/ScreenStackHeaderConfig.web.js.map +1 -0
  213. package/lib/commonjs/components/ScreenStackItem.js +107 -0
  214. package/lib/commonjs/components/ScreenStackItem.js.map +1 -0
  215. package/lib/commonjs/components/SearchBar.js +63 -0
  216. package/lib/commonjs/components/SearchBar.js.map +1 -0
  217. package/lib/commonjs/components/SearchBar.web.js +10 -0
  218. package/lib/commonjs/components/SearchBar.web.js.map +1 -0
  219. package/lib/commonjs/components/helpers/DelayedFreeze.js +31 -0
  220. package/lib/commonjs/components/helpers/DelayedFreeze.js.map +1 -0
  221. package/lib/commonjs/components/helpers/usePrevious.js +15 -0
  222. package/lib/commonjs/components/helpers/usePrevious.js.map +1 -0
  223. package/lib/commonjs/contexts.js +11 -0
  224. package/lib/commonjs/contexts.js.map +1 -0
  225. package/lib/commonjs/core.js +40 -0
  226. package/lib/commonjs/core.js.map +1 -0
  227. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +16 -1
  228. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
  229. package/lib/commonjs/fabric/ModalScreenNativeComponent.js +14 -0
  230. package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -0
  231. package/lib/commonjs/fabric/NativeScreensModule.js +10 -0
  232. package/lib/commonjs/fabric/NativeScreensModule.js.map +1 -0
  233. package/lib/commonjs/fabric/NativeScreensModule.web.js +8 -0
  234. package/lib/commonjs/fabric/NativeScreensModule.web.js.map +1 -0
  235. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +8 -11
  236. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -1
  237. package/lib/commonjs/fabric/ScreenContentWrapperNativeComponent.js +18 -0
  238. package/lib/commonjs/fabric/ScreenContentWrapperNativeComponent.js.map +1 -0
  239. package/lib/commonjs/fabric/ScreenFooterNativeComponent.js +10 -0
  240. package/lib/commonjs/fabric/ScreenFooterNativeComponent.js.map +1 -0
  241. package/lib/commonjs/fabric/ScreenNativeComponent.js +13 -15
  242. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
  243. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +2 -1
  244. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
  245. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +10 -9
  246. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  247. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +5 -2
  248. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  249. package/lib/commonjs/fabric/ScreenStackNativeComponent.js +8 -11
  250. package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -1
  251. package/lib/commonjs/fabric/SearchBarNativeComponent.js +4 -5
  252. package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -1
  253. package/lib/commonjs/gesture-handler/GestureDetectorProvider.js +19 -0
  254. package/lib/commonjs/gesture-handler/GestureDetectorProvider.js.map +1 -0
  255. package/lib/commonjs/gesture-handler/RNScreensTurboModule.js +8 -0
  256. package/lib/commonjs/gesture-handler/RNScreensTurboModule.js.map +1 -0
  257. package/lib/commonjs/gesture-handler/ScreenGestureDetector.js +201 -0
  258. package/lib/commonjs/gesture-handler/ScreenGestureDetector.js.map +1 -0
  259. package/lib/commonjs/gesture-handler/constraints.js +64 -0
  260. package/lib/commonjs/gesture-handler/constraints.js.map +1 -0
  261. package/lib/commonjs/gesture-handler/defaults.js +45 -0
  262. package/lib/commonjs/gesture-handler/defaults.js.map +1 -0
  263. package/lib/commonjs/gesture-handler/fabricUtils.js +66 -0
  264. package/lib/commonjs/gesture-handler/fabricUtils.js.map +1 -0
  265. package/lib/commonjs/gesture-handler/fabricUtils.web.js +17 -0
  266. package/lib/commonjs/gesture-handler/fabricUtils.web.js.map +1 -0
  267. package/lib/commonjs/gesture-handler/index.js +14 -0
  268. package/lib/commonjs/gesture-handler/index.js.map +1 -0
  269. package/lib/commonjs/index.js +157 -94
  270. package/lib/commonjs/index.js.map +1 -1
  271. package/lib/commonjs/native-stack/contexts/GHContext.js +12 -0
  272. package/lib/commonjs/native-stack/contexts/GHContext.js.map +1 -0
  273. package/lib/commonjs/native-stack/index.js.map +1 -1
  274. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +21 -20
  275. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  276. package/lib/commonjs/native-stack/types.js.map +1 -1
  277. package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
  278. package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -1
  279. package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
  280. package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
  281. package/lib/commonjs/native-stack/utils/getStatusBarHeight.js +22 -0
  282. package/lib/commonjs/native-stack/utils/getStatusBarHeight.js.map +1 -0
  283. package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
  284. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +2 -4
  285. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -1
  286. package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -1
  287. package/lib/commonjs/native-stack/views/FontProcessor.js +1 -3
  288. package/lib/commonjs/native-stack/views/FontProcessor.js.map +1 -1
  289. package/lib/commonjs/native-stack/views/FooterComponent.js +17 -0
  290. package/lib/commonjs/native-stack/views/FooterComponent.js.map +1 -0
  291. package/lib/commonjs/native-stack/views/HeaderConfig.js +21 -13
  292. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  293. package/lib/commonjs/native-stack/views/NativeStackView.js +118 -52
  294. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  295. package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
  296. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +15 -21
  297. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  298. package/lib/commonjs/reanimated/ReanimatedScreen.js +2 -2
  299. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  300. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +8 -16
  301. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -1
  302. package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
  303. package/lib/commonjs/reanimated/index.js.map +1 -1
  304. package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +2 -2
  305. package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -1
  306. package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -1
  307. package/lib/commonjs/types.js.map +1 -1
  308. package/lib/commonjs/useTransitionProgress.js.map +1 -1
  309. package/lib/commonjs/utils.js +28 -6
  310. package/lib/commonjs/utils.js.map +1 -1
  311. package/lib/module/TransitionProgressContext.js +2 -0
  312. package/lib/module/TransitionProgressContext.js.map +1 -1
  313. package/lib/module/components/DebugContainer.js +30 -0
  314. package/lib/module/components/DebugContainer.js.map +1 -0
  315. package/lib/module/components/DebugContainer.web.js +6 -0
  316. package/lib/module/components/DebugContainer.web.js.map +1 -0
  317. package/lib/module/components/FullWindowOverlay.js +24 -0
  318. package/lib/module/components/FullWindowOverlay.js.map +1 -0
  319. package/lib/module/components/FullWindowOverlay.web.js +3 -0
  320. package/lib/module/components/FullWindowOverlay.web.js.map +1 -0
  321. package/lib/module/components/Screen.js +282 -0
  322. package/lib/module/components/Screen.js.map +1 -0
  323. package/lib/module/components/Screen.web.js +40 -0
  324. package/lib/module/components/Screen.web.js.map +1 -0
  325. package/lib/module/components/ScreenContainer.js +26 -0
  326. package/lib/module/components/ScreenContainer.js.map +1 -0
  327. package/lib/module/components/ScreenContainer.web.js +4 -0
  328. package/lib/module/components/ScreenContainer.web.js.map +1 -0
  329. package/lib/module/components/ScreenContentWrapper.js +10 -0
  330. package/lib/module/components/ScreenContentWrapper.js.map +1 -0
  331. package/lib/module/components/ScreenContentWrapper.web.js +4 -0
  332. package/lib/module/components/ScreenContentWrapper.web.js.map +1 -0
  333. package/lib/module/components/ScreenFooter.js +18 -0
  334. package/lib/module/components/ScreenFooter.js.map +1 -0
  335. package/lib/module/components/ScreenFooter.web.js +6 -0
  336. package/lib/module/components/ScreenFooter.web.js.map +1 -0
  337. package/lib/module/components/ScreenStack.js +63 -0
  338. package/lib/module/components/ScreenStack.js.map +1 -0
  339. package/lib/module/components/ScreenStack.web.js +4 -0
  340. package/lib/module/components/ScreenStack.web.js.map +1 -0
  341. package/lib/module/components/ScreenStackHeaderConfig.js +81 -0
  342. package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -0
  343. package/lib/module/components/ScreenStackHeaderConfig.web.js +14 -0
  344. package/lib/module/components/ScreenStackHeaderConfig.web.js.map +1 -0
  345. package/lib/module/components/ScreenStackItem.js +98 -0
  346. package/lib/module/components/ScreenStackItem.js.map +1 -0
  347. package/lib/module/components/SearchBar.js +57 -0
  348. package/lib/module/components/SearchBar.js.map +1 -0
  349. package/lib/module/components/SearchBar.web.js +4 -0
  350. package/lib/module/components/SearchBar.web.js.map +1 -0
  351. package/lib/module/components/helpers/DelayedFreeze.js +24 -0
  352. package/lib/module/components/helpers/DelayedFreeze.js.map +1 -0
  353. package/lib/module/components/helpers/usePrevious.js +9 -0
  354. package/lib/module/components/helpers/usePrevious.js.map +1 -0
  355. package/lib/module/contexts.js +4 -0
  356. package/lib/module/contexts.js.map +1 -0
  357. package/lib/module/core.js +31 -0
  358. package/lib/module/core.js.map +1 -0
  359. package/lib/module/fabric/FullWindowOverlayNativeComponent.js +16 -0
  360. package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
  361. package/lib/module/fabric/ModalScreenNativeComponent.js +10 -0
  362. package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -0
  363. package/lib/module/fabric/NativeScreensModule.js +5 -0
  364. package/lib/module/fabric/NativeScreensModule.js.map +1 -0
  365. package/lib/module/fabric/NativeScreensModule.web.js +2 -0
  366. package/lib/module/fabric/NativeScreensModule.web.js.map +1 -0
  367. package/lib/module/fabric/ScreenContainerNativeComponent.js +3 -4
  368. package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -1
  369. package/lib/module/fabric/ScreenContentWrapperNativeComponent.js +10 -0
  370. package/lib/module/fabric/ScreenContentWrapperNativeComponent.js.map +1 -0
  371. package/lib/module/fabric/ScreenFooterNativeComponent.js +3 -0
  372. package/lib/module/fabric/ScreenFooterNativeComponent.js.map +1 -0
  373. package/lib/module/fabric/ScreenNativeComponent.js +8 -7
  374. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  375. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +2 -0
  376. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
  377. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +8 -2
  378. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  379. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +5 -1
  380. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  381. package/lib/module/fabric/ScreenStackNativeComponent.js +3 -3
  382. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -1
  383. package/lib/module/fabric/SearchBarNativeComponent.js +3 -1
  384. package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -1
  385. package/lib/module/gesture-handler/GestureDetectorProvider.js +12 -0
  386. package/lib/module/gesture-handler/GestureDetectorProvider.js.map +1 -0
  387. package/lib/module/gesture-handler/RNScreensTurboModule.js +2 -0
  388. package/lib/module/gesture-handler/RNScreensTurboModule.js.map +1 -0
  389. package/lib/module/gesture-handler/ScreenGestureDetector.js +193 -0
  390. package/lib/module/gesture-handler/ScreenGestureDetector.js.map +1 -0
  391. package/lib/module/gesture-handler/constraints.js +56 -0
  392. package/lib/module/gesture-handler/constraints.js.map +1 -0
  393. package/lib/module/gesture-handler/defaults.js +39 -0
  394. package/lib/module/gesture-handler/defaults.js.map +1 -0
  395. package/lib/module/gesture-handler/fabricUtils.js +61 -0
  396. package/lib/module/gesture-handler/fabricUtils.js.map +1 -0
  397. package/lib/module/gesture-handler/fabricUtils.web.js +10 -0
  398. package/lib/module/gesture-handler/fabricUtils.web.js.map +1 -0
  399. package/lib/module/gesture-handler/index.js +5 -0
  400. package/lib/module/gesture-handler/index.js.map +1 -0
  401. package/lib/module/index.js +29 -64
  402. package/lib/module/index.js.map +1 -1
  403. package/lib/module/native-stack/contexts/GHContext.js +6 -0
  404. package/lib/module/native-stack/contexts/GHContext.js.map +1 -0
  405. package/lib/module/native-stack/index.js.map +1 -1
  406. package/lib/module/native-stack/navigators/createNativeStackNavigator.js +21 -20
  407. package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  408. package/lib/module/native-stack/types.js.map +1 -1
  409. package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
  410. package/lib/module/native-stack/utils/HeaderHeightContext.js.map +1 -1
  411. package/lib/module/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
  412. package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
  413. package/lib/module/native-stack/utils/getStatusBarHeight.js +16 -0
  414. package/lib/module/native-stack/utils/getStatusBarHeight.js.map +1 -0
  415. package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
  416. package/lib/module/native-stack/utils/useBackPressSubscription.js +2 -4
  417. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -1
  418. package/lib/module/native-stack/utils/useHeaderHeight.js.map +1 -1
  419. package/lib/module/native-stack/views/FontProcessor.js +2 -3
  420. package/lib/module/native-stack/views/FontProcessor.js.map +1 -1
  421. package/lib/module/native-stack/views/FooterComponent.js +10 -0
  422. package/lib/module/native-stack/views/FooterComponent.js.map +1 -0
  423. package/lib/module/native-stack/views/HeaderConfig.js +13 -6
  424. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  425. package/lib/module/native-stack/views/NativeStackView.js +114 -46
  426. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  427. package/lib/module/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
  428. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +8 -12
  429. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  430. package/lib/module/reanimated/ReanimatedScreen.js +1 -2
  431. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  432. package/lib/module/reanimated/ReanimatedScreenProvider.js +7 -15
  433. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -1
  434. package/lib/module/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
  435. package/lib/module/reanimated/index.js.map +1 -1
  436. package/lib/module/reanimated/useReanimatedHeaderHeight.js +1 -1
  437. package/lib/module/reanimated/useReanimatedHeaderHeight.js.map +1 -1
  438. package/lib/module/reanimated/useReanimatedTransitionProgress.js.map +1 -1
  439. package/lib/module/types.js.map +1 -1
  440. package/lib/module/useTransitionProgress.js.map +1 -1
  441. package/lib/module/utils.js +26 -5
  442. package/lib/module/utils.js.map +1 -1
  443. package/lib/typescript/TransitionProgressContext.d.ts +2 -1
  444. package/lib/typescript/TransitionProgressContext.d.ts.map +1 -0
  445. package/lib/typescript/components/DebugContainer.d.ts +15 -0
  446. package/lib/typescript/components/DebugContainer.d.ts.map +1 -0
  447. package/lib/typescript/components/DebugContainer.web.d.ts +4 -0
  448. package/lib/typescript/components/DebugContainer.web.d.ts.map +1 -0
  449. package/lib/typescript/components/FullWindowOverlay.d.ts +6 -0
  450. package/lib/typescript/components/FullWindowOverlay.d.ts.map +1 -0
  451. package/lib/typescript/components/FullWindowOverlay.web.d.ts +6 -0
  452. package/lib/typescript/components/FullWindowOverlay.web.d.ts.map +1 -0
  453. package/lib/typescript/components/Screen.d.ts +8 -0
  454. package/lib/typescript/components/Screen.d.ts.map +1 -0
  455. package/lib/typescript/components/Screen.web.d.ts +11 -0
  456. package/lib/typescript/components/Screen.web.d.ts.map +1 -0
  457. package/lib/typescript/components/ScreenContainer.d.ts +5 -0
  458. package/lib/typescript/components/ScreenContainer.d.ts.map +1 -0
  459. package/lib/typescript/components/ScreenContainer.web.d.ts +4 -0
  460. package/lib/typescript/components/ScreenContainer.web.d.ts.map +1 -0
  461. package/lib/typescript/components/ScreenContentWrapper.d.ts +5 -0
  462. package/lib/typescript/components/ScreenContentWrapper.d.ts.map +1 -0
  463. package/lib/typescript/components/ScreenContentWrapper.web.d.ts +4 -0
  464. package/lib/typescript/components/ScreenContentWrapper.web.d.ts.map +1 -0
  465. package/lib/typescript/components/ScreenFooter.d.ts +12 -0
  466. package/lib/typescript/components/ScreenFooter.d.ts.map +1 -0
  467. package/lib/typescript/components/ScreenFooter.web.d.ts +6 -0
  468. package/lib/typescript/components/ScreenFooter.web.d.ts.map +1 -0
  469. package/lib/typescript/components/ScreenStack.d.ts +5 -0
  470. package/lib/typescript/components/ScreenStack.d.ts.map +1 -0
  471. package/lib/typescript/components/ScreenStack.web.d.ts +4 -0
  472. package/lib/typescript/components/ScreenStack.web.d.ts.map +1 -0
  473. package/lib/typescript/components/ScreenStackHeaderConfig.d.ts +13 -0
  474. package/lib/typescript/components/ScreenStackHeaderConfig.d.ts.map +1 -0
  475. package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts +13 -0
  476. package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts.map +1 -0
  477. package/lib/typescript/components/ScreenStackItem.d.ts +11 -0
  478. package/lib/typescript/components/ScreenStackItem.d.ts.map +1 -0
  479. package/lib/typescript/components/SearchBar.d.ts +5 -0
  480. package/lib/typescript/components/SearchBar.d.ts.map +1 -0
  481. package/lib/typescript/components/SearchBar.web.d.ts +4 -0
  482. package/lib/typescript/components/SearchBar.web.d.ts.map +1 -0
  483. package/lib/typescript/components/helpers/DelayedFreeze.d.ts +8 -0
  484. package/lib/typescript/components/helpers/DelayedFreeze.d.ts.map +1 -0
  485. package/lib/typescript/components/helpers/usePrevious.d.ts +2 -0
  486. package/lib/typescript/components/helpers/usePrevious.d.ts.map +1 -0
  487. package/lib/typescript/contexts.d.ts +5 -0
  488. package/lib/typescript/contexts.d.ts.map +1 -0
  489. package/lib/typescript/core.d.ts +6 -0
  490. package/lib/typescript/core.d.ts.map +1 -0
  491. package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts +1 -1
  492. package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts.map +1 -0
  493. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +76 -0
  494. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -0
  495. package/lib/typescript/fabric/NativeScreensModule.d.ts +6 -0
  496. package/lib/typescript/fabric/NativeScreensModule.d.ts.map +1 -0
  497. package/lib/typescript/fabric/NativeScreensModule.web.d.ts +3 -0
  498. package/lib/typescript/fabric/NativeScreensModule.web.d.ts.map +1 -0
  499. package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts +1 -0
  500. package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts.map +1 -0
  501. package/lib/typescript/fabric/ScreenContentWrapperNativeComponent.d.ts +6 -0
  502. package/lib/typescript/fabric/ScreenContentWrapperNativeComponent.d.ts.map +1 -0
  503. package/lib/typescript/fabric/ScreenFooterNativeComponent.d.ts +7 -0
  504. package/lib/typescript/fabric/ScreenFooterNativeComponent.d.ts.map +1 -0
  505. package/lib/typescript/fabric/ScreenNativeComponent.d.ts +34 -24
  506. package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -0
  507. package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts +1 -1
  508. package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts.map +1 -0
  509. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +12 -2
  510. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -0
  511. package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
  512. package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -0
  513. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +4 -2
  514. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -0
  515. package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +17 -16
  516. package/lib/typescript/fabric/SearchBarNativeComponent.d.ts.map +1 -0
  517. package/lib/typescript/gesture-handler/GestureDetectorProvider.d.ts +5 -0
  518. package/lib/typescript/gesture-handler/GestureDetectorProvider.d.ts.map +1 -0
  519. package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts +13 -0
  520. package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts.map +1 -0
  521. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts +5 -0
  522. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts.map +1 -0
  523. package/lib/typescript/gesture-handler/constraints.d.ts +6 -0
  524. package/lib/typescript/gesture-handler/constraints.d.ts.map +1 -0
  525. package/lib/typescript/gesture-handler/defaults.d.ts +20 -0
  526. package/lib/typescript/gesture-handler/defaults.d.ts.map +1 -0
  527. package/lib/typescript/gesture-handler/fabricUtils.d.ts +10 -0
  528. package/lib/typescript/gesture-handler/fabricUtils.d.ts.map +1 -0
  529. package/lib/typescript/gesture-handler/fabricUtils.web.d.ts +6 -0
  530. package/lib/typescript/gesture-handler/fabricUtils.web.d.ts.map +1 -0
  531. package/lib/typescript/gesture-handler/index.d.ts +2 -0
  532. package/lib/typescript/gesture-handler/index.d.ts.map +1 -0
  533. package/lib/typescript/index.d.ts +25 -31
  534. package/lib/typescript/index.d.ts.map +1 -0
  535. package/lib/typescript/native-stack/contexts/GHContext.d.ts +4 -0
  536. package/lib/typescript/native-stack/contexts/GHContext.d.ts.map +1 -0
  537. package/lib/typescript/native-stack/index.d.ts +1 -0
  538. package/lib/typescript/native-stack/index.d.ts.map +1 -0
  539. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +4 -0
  540. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -0
  541. package/lib/typescript/native-stack/types.d.ts +191 -33
  542. package/lib/typescript/native-stack/types.d.ts.map +1 -0
  543. package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts +1 -0
  544. package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts.map +1 -0
  545. package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts +1 -0
  546. package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts.map +1 -0
  547. package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +2 -1
  548. package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts.map +1 -0
  549. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +3 -2
  550. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -0
  551. package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts +3 -0
  552. package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts.map +1 -0
  553. package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +2 -1
  554. package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts.map +1 -0
  555. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +1 -0
  556. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts.map +1 -0
  557. package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts +1 -0
  558. package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts.map +1 -0
  559. package/lib/typescript/native-stack/views/FontProcessor.d.ts +1 -0
  560. package/lib/typescript/native-stack/views/FontProcessor.d.ts.map +1 -0
  561. package/lib/typescript/native-stack/views/FooterComponent.d.ts +7 -0
  562. package/lib/typescript/native-stack/views/FooterComponent.d.ts.map +1 -0
  563. package/lib/typescript/native-stack/views/HeaderConfig.d.ts +3 -2
  564. package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -0
  565. package/lib/typescript/native-stack/views/NativeStackView.d.ts +2 -1
  566. package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -0
  567. package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts +1 -0
  568. package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts.map +1 -0
  569. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +3 -3
  570. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts.map +1 -0
  571. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +3 -3
  572. package/lib/typescript/reanimated/ReanimatedScreen.d.ts.map +1 -0
  573. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +1 -0
  574. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts.map +1 -0
  575. package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +2 -1
  576. package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts.map +1 -0
  577. package/lib/typescript/reanimated/index.d.ts +1 -0
  578. package/lib/typescript/reanimated/index.d.ts.map +1 -0
  579. package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts +2 -3
  580. package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts.map +1 -0
  581. package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts +4 -9
  582. package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts.map +1 -0
  583. package/lib/typescript/types.d.ts +186 -36
  584. package/lib/typescript/types.d.ts.map +1 -0
  585. package/lib/typescript/useTransitionProgress.d.ts +4 -3
  586. package/lib/typescript/useTransitionProgress.d.ts.map +1 -0
  587. package/lib/typescript/utils.d.ts +27 -1
  588. package/lib/typescript/utils.d.ts.map +1 -0
  589. package/native-stack/README.md +156 -108
  590. package/native-stack/package.json +4 -4
  591. package/package.json +1 -1
  592. package/react-native.config.js +19 -16
  593. package/reanimated/package.json +1 -1
  594. package/src/TransitionProgressContext.tsx +3 -1
  595. package/src/components/DebugContainer.tsx +46 -0
  596. package/src/components/DebugContainer.web.tsx +7 -0
  597. package/src/components/FullWindowOverlay.tsx +33 -0
  598. package/src/components/FullWindowOverlay.web.tsx +6 -0
  599. package/src/components/Screen.tsx +392 -0
  600. package/src/components/Screen.web.tsx +46 -0
  601. package/src/components/ScreenContainer.tsx +28 -0
  602. package/src/components/ScreenContainer.web.tsx +5 -0
  603. package/src/components/ScreenContentWrapper.tsx +9 -0
  604. package/src/components/ScreenContentWrapper.web.tsx +5 -0
  605. package/src/components/ScreenFooter.tsx +20 -0
  606. package/src/components/ScreenFooter.web.tsx +7 -0
  607. package/src/components/ScreenStack.tsx +112 -0
  608. package/src/components/ScreenStack.web.tsx +5 -0
  609. package/src/components/ScreenStackHeaderConfig.tsx +122 -0
  610. package/src/components/ScreenStackHeaderConfig.web.tsx +39 -0
  611. package/src/components/ScreenStackItem.tsx +174 -0
  612. package/src/components/SearchBar.tsx +102 -0
  613. package/src/components/SearchBar.web.tsx +5 -0
  614. package/src/components/helpers/DelayedFreeze.tsx +27 -0
  615. package/src/components/helpers/usePrevious.tsx +11 -0
  616. package/src/contexts.tsx +9 -0
  617. package/src/core.ts +45 -0
  618. package/src/fabric/FullWindowOverlayNativeComponent.ts +16 -0
  619. package/src/fabric/ModalScreenNativeComponent.ts +115 -0
  620. package/src/fabric/NativeScreensModule.ts +8 -0
  621. package/src/fabric/NativeScreensModule.web.ts +1 -0
  622. package/src/fabric/ScreenContainerNativeComponent.ts +3 -3
  623. package/src/fabric/ScreenContentWrapperNativeComponent.ts +14 -0
  624. package/src/fabric/ScreenFooterNativeComponent.ts +6 -0
  625. package/src/fabric/ScreenNativeComponent.ts +34 -23
  626. package/src/fabric/ScreenNavigationContainerNativeComponent.ts +3 -1
  627. package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +38 -2
  628. package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +5 -1
  629. package/src/fabric/ScreenStackNativeComponent.ts +3 -2
  630. package/src/fabric/SearchBarNativeComponent.ts +17 -13
  631. package/src/gesture-handler/GestureDetectorProvider.tsx +16 -0
  632. package/src/gesture-handler/RNScreensTurboModule.ts +13 -0
  633. package/src/gesture-handler/ScreenGestureDetector.tsx +241 -0
  634. package/src/gesture-handler/constraints.ts +87 -0
  635. package/src/gesture-handler/defaults.ts +46 -0
  636. package/src/gesture-handler/fabricUtils.ts +86 -0
  637. package/src/gesture-handler/fabricUtils.web.ts +10 -0
  638. package/src/gesture-handler/index.tsx +4 -0
  639. package/src/index.tsx +49 -113
  640. package/src/native-stack/contexts/GHContext.tsx +9 -0
  641. package/src/native-stack/navigators/createNativeStackNavigator.tsx +6 -3
  642. package/src/native-stack/types.tsx +204 -31
  643. package/src/native-stack/utils/getDefaultHeaderHeight.tsx +2 -2
  644. package/src/native-stack/utils/getStatusBarHeight.tsx +22 -0
  645. package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
  646. package/src/native-stack/utils/useBackPressSubscription.tsx +1 -1
  647. package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
  648. package/src/native-stack/views/FontProcessor.tsx +2 -2
  649. package/src/native-stack/views/FooterComponent.tsx +10 -0
  650. package/src/native-stack/views/HeaderConfig.tsx +20 -5
  651. package/src/native-stack/views/NativeStackView.tsx +137 -53
  652. package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
  653. package/src/reanimated/ReanimatedNativeStackScreen.tsx +15 -13
  654. package/src/reanimated/ReanimatedScreen.tsx +4 -3
  655. package/src/reanimated/ReanimatedScreenProvider.tsx +3 -2
  656. package/src/reanimated/useReanimatedHeaderHeight.tsx +2 -2
  657. package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
  658. package/src/types.tsx +210 -40
  659. package/src/useTransitionProgress.tsx +1 -1
  660. package/src/utils.ts +27 -5
  661. package/windows/README.md +4 -1
  662. package/windows/RNScreens/Screen.h +3 -1
  663. package/SystemBundles/4a5c11b5bb8dfc0553e927a2c8678e1dbd4a75220fe24dfbdba59b5550215de6.bundle +0 -33681
  664. package/SystemBundles/4a5c11b5bb8dfc0553e927a2c8678e1dbd4a75220fe24dfbdba59b5550215de6.map +0 -1
  665. package/SystemModules/amzn__react-native-screens.modules.txt +0 -101
  666. package/SystemModules/amzn__react-native-screens.private.modules.txt +0 -244
  667. package/lib/commonjs/index.native.js +0 -409
  668. package/lib/commonjs/index.native.js.map +0 -1
  669. package/lib/module/index.native.js +0 -412
  670. package/lib/module/index.native.js.map +0 -1
  671. package/lib/typescript/index.native.d.ts +0 -2
  672. package/src/index.native.tsx +0 -601
@@ -0,0 +1,299 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.view.View
5
+ import androidx.core.view.ViewCompat
6
+ import androidx.core.view.WindowInsetsAnimationCompat
7
+ import androidx.core.view.WindowInsetsCompat
8
+ import com.facebook.react.bridge.ReactContext
9
+ import com.facebook.react.views.view.ReactViewGroup
10
+ import com.google.android.material.bottomsheet.BottomSheetBehavior
11
+ import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
12
+ import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED
13
+ import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
14
+ import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HALF_EXPANDED
15
+ import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN
16
+ import com.google.android.material.math.MathUtils
17
+ import com.swmansion.rnscreens.bottomsheet.SheetUtils
18
+ import kotlin.math.max
19
+
20
+ @SuppressLint("ViewConstructor")
21
+ class ScreenFooter(
22
+ val reactContext: ReactContext,
23
+ ) : ReactViewGroup(reactContext) {
24
+ private var lastContainerHeight: Int = 0
25
+ private var lastStableSheetState: Int = STATE_HIDDEN
26
+ private var isAnimationControlledByKeyboard = false
27
+ private var lastSlideOffset = 0.0f
28
+ private var lastBottomInset = 0
29
+ private var isCallbackRegistered = false
30
+
31
+ // ScreenFooter is supposed to be direct child of Screen
32
+ private val screenParent
33
+ get() = parent as? Screen
34
+
35
+ private val sheetBehavior
36
+ get() = requireScreenParent().sheetBehavior
37
+
38
+ private val hasReceivedInitialLayoutFromParent get() = lastContainerHeight > 0
39
+
40
+ // Due to Android restrictions on layout flow, particularly
41
+ // the fact that onMeasure must set `measuredHeight` & `measuredWidth` React calls `measure` on every
42
+ // view group with accurate dimensions computed by Yoga. This is our entry point to get current view dimensions.
43
+ private val reactHeight
44
+ get() = measuredHeight
45
+
46
+ private val reactWidth
47
+ get() = measuredWidth
48
+
49
+ // Main goal of this callback implementation is to handle keyboard appearance. We use it to make sure
50
+ // that the footer respects keyboard during layout.
51
+ // Note `DISPATCH_MODE_STOP` is used here to avoid propagation of insets callback to footer subtree.
52
+ private val insetsAnimation =
53
+ object : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_STOP) {
54
+ override fun onStart(
55
+ animation: WindowInsetsAnimationCompat,
56
+ bounds: WindowInsetsAnimationCompat.BoundsCompat,
57
+ ): WindowInsetsAnimationCompat.BoundsCompat {
58
+ isAnimationControlledByKeyboard = true
59
+ return super.onStart(animation, bounds)
60
+ }
61
+
62
+ override fun onProgress(
63
+ insets: WindowInsetsCompat,
64
+ runningAnimations: MutableList<WindowInsetsAnimationCompat>,
65
+ ): WindowInsetsCompat {
66
+ val imeBottomInset = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom
67
+ val navigationBarBottomInset =
68
+ insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom
69
+
70
+ // **It looks like** when keyboard is presented its inset does include navigation bar
71
+ // bottom inset, while it is already accounted for somewhere (dunno where).
72
+ // That is why we subtract navigation bar bottom inset here.
73
+ //
74
+ // Situations where keyboard is not visible and navigation bar is present are handled
75
+ // directly in layout function by not allowing lastBottomInset to contribute value less
76
+ // than 0. Alternative would be write logic specific to keyboard animation direction (hide / show).
77
+ lastBottomInset = imeBottomInset - navigationBarBottomInset
78
+ layoutFooterOnYAxis(
79
+ lastContainerHeight,
80
+ reactHeight,
81
+ sheetTopWhileDragging(lastSlideOffset),
82
+ lastBottomInset,
83
+ )
84
+
85
+ // Please note that we do *not* consume any insets here, so that we do not interfere with
86
+ // any other view.
87
+ return insets
88
+ }
89
+
90
+ override fun onEnd(animation: WindowInsetsAnimationCompat) {
91
+ isAnimationControlledByKeyboard = false
92
+ }
93
+ }
94
+
95
+ init {
96
+ val rootView =
97
+ checkNotNull(reactContext.currentActivity) {
98
+ "[RNScreens] Context detached from activity while creating ScreenFooter"
99
+ }.window.decorView
100
+
101
+ // Note that we do override insets animation on given view. I can see it interfering e.g.
102
+ // with reanimated keyboard or even other places in our code. Need to test this.
103
+ ViewCompat.setWindowInsetsAnimationCallback(rootView, insetsAnimation)
104
+ }
105
+
106
+ private fun requireScreenParent(): Screen = requireNotNull(screenParent)
107
+
108
+ private fun requireSheetBehavior(): BottomSheetBehavior<Screen> = requireNotNull(sheetBehavior)
109
+
110
+ // React calls `layout` function to set view dimensions, thus this is our entry point for
111
+ // fixing layout up after Yoga repositions it.
112
+ override fun onLayout(
113
+ changed: Boolean,
114
+ left: Int,
115
+ top: Int,
116
+ right: Int,
117
+ bottom: Int,
118
+ ) {
119
+ super.onLayout(changed, left, top, right, bottom)
120
+ if (!hasReceivedInitialLayoutFromParent) {
121
+ return
122
+ }
123
+ layoutFooterOnYAxis(
124
+ lastContainerHeight,
125
+ bottom - top,
126
+ sheetTopInStableState(requireSheetBehavior().state),
127
+ lastBottomInset,
128
+ )
129
+ }
130
+
131
+ private var footerCallback =
132
+ object : BottomSheetCallback() {
133
+ override fun onStateChanged(
134
+ bottomSheet: View,
135
+ newState: Int,
136
+ ) {
137
+ if (!SheetUtils.isStateStable(newState)) {
138
+ return
139
+ }
140
+
141
+ when (newState) {
142
+ STATE_COLLAPSED,
143
+ STATE_HALF_EXPANDED,
144
+ STATE_EXPANDED,
145
+ ->
146
+ layoutFooterOnYAxis(
147
+ lastContainerHeight,
148
+ reactHeight,
149
+ sheetTopInStableState(newState),
150
+ lastBottomInset,
151
+ )
152
+
153
+ else -> {}
154
+ }
155
+ lastStableSheetState = newState
156
+ }
157
+
158
+ override fun onSlide(
159
+ bottomSheet: View,
160
+ slideOffset: Float,
161
+ ) {
162
+ lastSlideOffset = max(slideOffset, 0.0f)
163
+ if (!isAnimationControlledByKeyboard) {
164
+ layoutFooterOnYAxis(
165
+ lastContainerHeight,
166
+ reactHeight,
167
+ sheetTopWhileDragging(lastSlideOffset),
168
+ lastBottomInset,
169
+ )
170
+ }
171
+ }
172
+ }
173
+
174
+ // Important to keep this method idempotent! We attempt to (un)register
175
+ // our callback in different places depending on whether the behavior is already created.
176
+ fun registerWithSheetBehavior(behavior: BottomSheetBehavior<Screen>) {
177
+ if (!isCallbackRegistered) {
178
+ behavior.addBottomSheetCallback(footerCallback)
179
+ isCallbackRegistered = true
180
+ }
181
+ }
182
+
183
+ // Important to keep this method idempotent! We attempt to (un)register
184
+ // our callback in different places depending on whether the behavior is already created.
185
+ fun unregisterWithSheetBehavior(behavior: BottomSheetBehavior<Screen>) {
186
+ if (isCallbackRegistered) {
187
+ behavior.removeBottomSheetCallback(footerCallback)
188
+ isCallbackRegistered = false
189
+ }
190
+ }
191
+
192
+ override fun onAttachedToWindow() {
193
+ super.onAttachedToWindow()
194
+ sheetBehavior?.let { registerWithSheetBehavior(it) }
195
+ }
196
+
197
+ override fun onDetachedFromWindow() {
198
+ super.onDetachedFromWindow()
199
+ sheetBehavior?.let { unregisterWithSheetBehavior(it) }
200
+ }
201
+
202
+ /**
203
+ * Calculate position of sheet's top while it is in stable state given concrete sheet state.
204
+ *
205
+ * This method should not be used for sheet in unstable state.
206
+ *
207
+ * @param state sheet state as defined in [BottomSheetBehavior]
208
+ * @return position of sheet's top **relative to container**
209
+ */
210
+ private fun sheetTopInStableState(state: Int): Int {
211
+ val behavior = requireSheetBehavior()
212
+ return when (state) {
213
+ STATE_COLLAPSED -> lastContainerHeight - behavior.peekHeight
214
+ STATE_HALF_EXPANDED -> (lastContainerHeight * (1 - behavior.halfExpandedRatio)).toInt()
215
+ STATE_EXPANDED -> behavior.expandedOffset
216
+ STATE_HIDDEN -> lastContainerHeight
217
+ else -> throw IllegalArgumentException("[RNScreens] use of stable-state method for unstable state")
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Calculate position of sheet's top while it is in dragging / settling state given concrete slide offset
223
+ * as reported by [BottomSheetCallback.onSlide].
224
+ *
225
+ * This method should not be used for sheet in stable state.
226
+ *
227
+ * Currently the implementation assumes that the Screen's (sheet's) container starts at y: 0
228
+ * in global coordinates. Then we can use simply sheet's top. If that is for some reason
229
+ * unavailable, then we fallback to interpolation basing on values provided by sheet behaviour.
230
+ *
231
+ * We don't want to primarily rely on interpolation, because due to division rounding errors the footer
232
+ * will "flicker" (jump up / down a single pixel).
233
+ *
234
+ * @param slideOffset sheet offset as reported by [BottomSheetCallback.onSlide]
235
+ * @return position of sheet's top **relative to container**
236
+ */
237
+ private fun sheetTopWhileDragging(slideOffset: Float): Int =
238
+ screenParent?.top ?: MathUtils
239
+ .lerp(
240
+ sheetTopInStableState(STATE_COLLAPSED).toFloat(),
241
+ sheetTopInStableState(
242
+ STATE_EXPANDED,
243
+ ).toFloat(),
244
+ slideOffset,
245
+ ).toInt()
246
+
247
+ /**
248
+ * Parent Screen will call this on it's layout. We need to be notified on any update to Screen's content
249
+ * or its container dimensions change. This is also our entrypoint to acquiring container height.
250
+ */
251
+ fun onParentLayout(
252
+ changed: Boolean,
253
+ left: Int,
254
+ top: Int,
255
+ right: Int,
256
+ bottom: Int,
257
+ containerHeight: Int,
258
+ ) {
259
+ lastContainerHeight = containerHeight
260
+ layoutFooterOnYAxis(
261
+ containerHeight,
262
+ reactHeight,
263
+ sheetTopInStableState(requireSheetBehavior().state),
264
+ )
265
+ }
266
+
267
+ /**
268
+ * Layouts this component within parent screen. It takes care only of vertical axis, leaving
269
+ * horizontal axis solely for React to handle.
270
+ *
271
+ * This is a bit against Android rules, that parents should layout their children,
272
+ * however I wanted to keep this logic away from Screen component to avoid introducing
273
+ * complexity there and have footer logic as much separated as it is possible.
274
+ *
275
+ * Please note that React has no clue about updates enforced in below method.
276
+ *
277
+ * @param containerHeight this should be the height of the screen (sheet) container used
278
+ * to calculate sheet properties when configuring behavior (pixels)
279
+ * @param footerHeight summarized height of this component children (pixels)
280
+ * @param sheetTop current bottom sheet top (Screen top) **relative to container** (pixels)
281
+ * @param bottomInset current bottom inset, used to offset the footer by keyboard height (pixels)
282
+ */
283
+ fun layoutFooterOnYAxis(
284
+ containerHeight: Int,
285
+ footerHeight: Int,
286
+ sheetTop: Int,
287
+ bottomInset: Int = 0,
288
+ ) {
289
+ // max(bottomInset, 0) is just a hack to avoid double offset of navigation bar.
290
+ val newTop = containerHeight - footerHeight - sheetTop - max(bottomInset, 0)
291
+ val heightBeforeUpdate = reactHeight
292
+ this.top = max(newTop, 0)
293
+ this.bottom = this.top + heightBeforeUpdate
294
+ }
295
+
296
+ companion object {
297
+ const val TAG = "ScreenFooter"
298
+ }
299
+ }
@@ -0,0 +1,25 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import com.facebook.react.module.annotations.ReactModule
4
+ import com.facebook.react.uimanager.ThemedReactContext
5
+ import com.facebook.react.uimanager.ViewGroupManager
6
+ import com.facebook.react.uimanager.ViewManagerDelegate
7
+ import com.facebook.react.viewmanagers.RNSScreenFooterManagerDelegate
8
+ import com.facebook.react.viewmanagers.RNSScreenFooterManagerInterface
9
+
10
+ @ReactModule(name = ScreenFooterManager.REACT_CLASS)
11
+ class ScreenFooterManager :
12
+ ViewGroupManager<ScreenFooter>(),
13
+ RNSScreenFooterManagerInterface<ScreenFooter> {
14
+ private val delegate: ViewManagerDelegate<ScreenFooter> = RNSScreenFooterManagerDelegate(this)
15
+
16
+ override fun getName(): String = REACT_CLASS
17
+
18
+ override fun createViewInstance(context: ThemedReactContext) = ScreenFooter(context)
19
+
20
+ override fun getDelegate(): ViewManagerDelegate<ScreenFooter> = delegate
21
+
22
+ companion object {
23
+ const val REACT_CLASS = "RNSScreenFooter"
24
+ }
25
+ }
@@ -15,6 +15,7 @@ import com.facebook.react.bridge.UiThreadUtil
15
15
  import com.facebook.react.uimanager.UIManagerHelper
16
16
  import com.facebook.react.uimanager.events.Event
17
17
  import com.facebook.react.uimanager.events.EventDispatcher
18
+ import com.swmansion.rnscreens.bottomsheet.DimmingFragment
18
19
  import com.swmansion.rnscreens.events.HeaderBackButtonClickedEvent
19
20
  import com.swmansion.rnscreens.events.ScreenAppearEvent
20
21
  import com.swmansion.rnscreens.events.ScreenDisappearEvent
@@ -22,12 +23,18 @@ import com.swmansion.rnscreens.events.ScreenDismissedEvent
22
23
  import com.swmansion.rnscreens.events.ScreenTransitionProgressEvent
23
24
  import com.swmansion.rnscreens.events.ScreenWillAppearEvent
24
25
  import com.swmansion.rnscreens.events.ScreenWillDisappearEvent
26
+ import com.swmansion.rnscreens.ext.recycle
25
27
  import kotlin.math.max
26
28
  import kotlin.math.min
27
29
 
28
- open class ScreenFragment : Fragment, ScreenFragmentWrapper {
30
+ open class ScreenFragment :
31
+ Fragment,
32
+ ScreenFragmentWrapper {
29
33
  enum class ScreenLifecycleEvent {
30
- Appear, WillAppear, Disappear, WillDisappear
34
+ DID_APPEAR,
35
+ WILL_APPEAR,
36
+ DID_DISAPPEAR,
37
+ WILL_DISAPPEAR,
31
38
  }
32
39
 
33
40
  override val fragment: Fragment
@@ -36,11 +43,14 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
36
43
  // if we call empty constructor, there is no screen to be assigned so not sure why it is suggested
37
44
  @Suppress("JoinDeclarationAndAssignment")
38
45
  override lateinit var screen: Screen
39
- private val mChildScreenContainers: MutableList<ScreenContainer> = ArrayList()
46
+
47
+ override val childScreenContainers: MutableList<ScreenContainer> = ArrayList()
48
+
40
49
  private var shouldUpdateOnResume = false
50
+
41
51
  // if we don't set it, it will be 0.0f at the beginning so the progress will not be sent
42
52
  // due to progress value being already 0.0f
43
- private var mProgress = -1f
53
+ private var transitionProgress = -1f
44
54
 
45
55
  // those 2 vars are needed since sometimes the events would be dispatched twice in child containers
46
56
  // (should only happen if parent has `NONE` animation) and we don't need too complicated logic.
@@ -55,7 +65,7 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
55
65
 
56
66
  constructor() {
57
67
  throw IllegalStateException(
58
- "Screen fragments should never be restored. Follow instructions from https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067 to properly configure your main activity."
68
+ "Screen fragments should never be restored. Follow instructions from https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067 to properly configure your main activity.",
59
69
  )
60
70
  }
61
71
 
@@ -75,14 +85,17 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
75
85
  override fun onCreateView(
76
86
  inflater: LayoutInflater,
77
87
  container: ViewGroup?,
78
- savedInstanceState: Bundle?
88
+ savedInstanceState: Bundle?,
79
89
  ): View? {
80
- screen.layoutParams = FrameLayout.LayoutParams(
81
- ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
82
- )
83
- val wrapper = context?.let { ScreensFrameLayout(it) }?.apply {
84
- addView(recycleView(screen))
85
- }
90
+ screen.layoutParams =
91
+ FrameLayout.LayoutParams(
92
+ ViewGroup.LayoutParams.MATCH_PARENT,
93
+ ViewGroup.LayoutParams.MATCH_PARENT,
94
+ )
95
+ val wrapper =
96
+ context?.let { ScreensFrameLayout(it) }?.apply {
97
+ addView(screen.recycle())
98
+ }
86
99
  return wrapper
87
100
  }
88
101
 
@@ -152,57 +165,59 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
152
165
  return null
153
166
  }
154
167
 
155
- override val childScreenContainers: List<ScreenContainer>
156
- get() = mChildScreenContainers
157
-
158
- override fun canDispatchLifecycleEvent(event: ScreenLifecycleEvent): Boolean = when (event) {
159
- ScreenLifecycleEvent.WillAppear -> canDispatchWillAppear
160
- ScreenLifecycleEvent.Appear -> canDispatchAppear
161
- ScreenLifecycleEvent.WillDisappear -> !canDispatchWillAppear
162
- ScreenLifecycleEvent.Disappear -> !canDispatchAppear
163
- }
168
+ override fun canDispatchLifecycleEvent(event: ScreenLifecycleEvent): Boolean =
169
+ when (event) {
170
+ ScreenLifecycleEvent.WILL_APPEAR -> canDispatchWillAppear
171
+ ScreenLifecycleEvent.DID_APPEAR -> canDispatchAppear
172
+ ScreenLifecycleEvent.WILL_DISAPPEAR -> !canDispatchWillAppear
173
+ ScreenLifecycleEvent.DID_DISAPPEAR -> !canDispatchAppear
174
+ }
164
175
 
165
176
  override fun updateLastEventDispatched(event: ScreenLifecycleEvent) {
166
177
  when (event) {
167
- ScreenLifecycleEvent.WillAppear -> canDispatchWillAppear = false
168
- ScreenLifecycleEvent.Appear -> canDispatchAppear = false
169
- ScreenLifecycleEvent.WillDisappear -> canDispatchWillAppear = true
170
- ScreenLifecycleEvent.Disappear -> canDispatchAppear = true
178
+ ScreenLifecycleEvent.WILL_APPEAR -> canDispatchWillAppear = false
179
+ ScreenLifecycleEvent.DID_APPEAR -> canDispatchAppear = false
180
+ ScreenLifecycleEvent.WILL_DISAPPEAR -> canDispatchWillAppear = true
181
+ ScreenLifecycleEvent.DID_DISAPPEAR -> canDispatchAppear = true
171
182
  }
172
183
  }
173
184
 
174
185
  private fun dispatchOnWillAppear() {
175
- dispatchLifecycleEvent(ScreenLifecycleEvent.WillAppear, this)
186
+ dispatchLifecycleEvent(ScreenLifecycleEvent.WILL_APPEAR, this)
176
187
  dispatchTransitionProgressEvent(0.0f, false)
177
188
  }
178
189
 
179
190
  private fun dispatchOnAppear() {
180
- dispatchLifecycleEvent(ScreenLifecycleEvent.Appear, this)
191
+ dispatchLifecycleEvent(ScreenLifecycleEvent.DID_APPEAR, this)
181
192
  dispatchTransitionProgressEvent(1.0f, false)
182
193
  }
183
194
 
184
195
  private fun dispatchOnWillDisappear() {
185
- dispatchLifecycleEvent(ScreenLifecycleEvent.WillDisappear, this)
196
+ dispatchLifecycleEvent(ScreenLifecycleEvent.WILL_DISAPPEAR, this)
186
197
  dispatchTransitionProgressEvent(0.0f, true)
187
198
  }
188
199
 
189
200
  private fun dispatchOnDisappear() {
190
- dispatchLifecycleEvent(ScreenLifecycleEvent.Disappear, this)
201
+ dispatchLifecycleEvent(ScreenLifecycleEvent.DID_DISAPPEAR, this)
191
202
  dispatchTransitionProgressEvent(1.0f, true)
192
203
  }
193
204
 
194
- override fun dispatchLifecycleEvent(event: ScreenLifecycleEvent, fragmentWrapper: ScreenFragmentWrapper) {
205
+ override fun dispatchLifecycleEvent(
206
+ event: ScreenLifecycleEvent,
207
+ fragmentWrapper: ScreenFragmentWrapper,
208
+ ) {
195
209
  val fragment = fragmentWrapper.fragment
196
210
  if (fragment is ScreenStackFragment && fragment.canDispatchLifecycleEvent(event)) {
197
211
  fragment.screen.let {
198
212
  fragmentWrapper.updateLastEventDispatched(event)
199
213
  val surfaceId = UIManagerHelper.getSurfaceId(it)
200
- val lifecycleEvent: Event<*> = when (event) {
201
- ScreenLifecycleEvent.WillAppear -> ScreenWillAppearEvent(surfaceId, it.id)
202
- ScreenLifecycleEvent.Appear -> ScreenAppearEvent(surfaceId, it.id)
203
- ScreenLifecycleEvent.WillDisappear -> ScreenWillDisappearEvent(surfaceId, it.id)
204
- ScreenLifecycleEvent.Disappear -> ScreenDisappearEvent(surfaceId, it.id)
205
- }
214
+ val lifecycleEvent: Event<*> =
215
+ when (event) {
216
+ ScreenLifecycleEvent.WILL_APPEAR -> ScreenWillAppearEvent(surfaceId, it.id)
217
+ ScreenLifecycleEvent.DID_APPEAR -> ScreenAppearEvent(surfaceId, it.id)
218
+ ScreenLifecycleEvent.WILL_DISAPPEAR -> ScreenWillDisappearEvent(surfaceId, it.id)
219
+ ScreenLifecycleEvent.DID_DISAPPEAR -> ScreenDisappearEvent(surfaceId, it.id)
220
+ }
206
221
  val screenContext = screen.context as ReactContext
207
222
  val eventDispatcher: EventDispatcher? =
208
223
  UIManagerHelper.getEventDispatcherForReactTag(screenContext, screen.id)
@@ -213,7 +228,7 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
213
228
  }
214
229
 
215
230
  override fun dispatchLifecycleEventInChildContainers(event: ScreenLifecycleEvent) {
216
- mChildScreenContainers.filter { it.screenCount > 0 }.forEach {
231
+ childScreenContainers.filter { it.screenCount > 0 }.forEach {
217
232
  it.topScreen?.fragmentWrapper?.let { fragment -> dispatchLifecycleEvent(event, fragment) }
218
233
  }
219
234
  }
@@ -226,16 +241,14 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
226
241
  ?.dispatchEvent(HeaderBackButtonClickedEvent(surfaceId, screen.id))
227
242
  }
228
243
 
229
- override fun dispatchTransitionProgressEvent(alpha: Float, closing: Boolean) {
244
+ override fun dispatchTransitionProgressEvent(
245
+ alpha: Float,
246
+ closing: Boolean,
247
+ ) {
230
248
  if (this is ScreenStackFragment) {
231
- if (mProgress != alpha) {
232
- mProgress = max(0.0f, min(1.0f, alpha))
233
- /* We want value of 0 and 1 to be always dispatched so we base coalescing key on the progress:
234
- - progress is 0 -> key 1
235
- - progress is 1 -> key 2
236
- - progress is between 0 and 1 -> key 3
237
- */
238
- val coalescingKey = (if (mProgress == 0.0f) 1 else if (mProgress == 1.0f) 2 else 3).toShort()
249
+ if (transitionProgress != alpha) {
250
+ transitionProgress = max(0.0f, min(1.0f, alpha))
251
+ val coalescingKey = getCoalescingKey(transitionProgress)
239
252
  val container: ScreenContainer? = screen.container
240
253
  val goingForward = if (container is ScreenStack) container.goingForward else false
241
254
  val screenContext = screen.context as ReactContext
@@ -244,19 +257,23 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
244
257
  ?.dispatchEvent(
245
258
  ScreenTransitionProgressEvent(
246
259
  UIManagerHelper.getSurfaceId(screenContext),
247
- screen.id, mProgress, closing, goingForward, coalescingKey
248
- )
260
+ screen.id,
261
+ transitionProgress,
262
+ closing,
263
+ goingForward,
264
+ coalescingKey,
265
+ ),
249
266
  )
250
267
  }
251
268
  }
252
269
  }
253
270
 
254
271
  override fun addChildScreenContainer(container: ScreenContainer) {
255
- mChildScreenContainers.add(container)
272
+ childScreenContainers.add(container)
256
273
  }
257
274
 
258
275
  override fun removeChildScreenContainer(container: ScreenContainer) {
259
- mChildScreenContainers.remove(container)
276
+ childScreenContainers.remove(container)
260
277
  }
261
278
 
262
279
  override fun onViewAnimationStart() {
@@ -273,7 +290,12 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
273
290
  // since we subscribe to parent's animation start/end and dispatch events in child from there
274
291
  // check for `isTransitioning` should be enough since the child's animation should take only
275
292
  // 20ms due to always being `StackAnimation.NONE` when nested stack being pushed
276
- val parent = parentFragment
293
+ val parent =
294
+ if (parentFragment is DimmingFragment) {
295
+ parentFragment?.parentFragment
296
+ } else {
297
+ parentFragment
298
+ }
277
299
  if (parent == null || (parent is ScreenFragment && !parent.isTransitioning)) {
278
300
  // onViewAnimationStart/End is triggered from View#onAnimationStart/End method of the fragment's root
279
301
  // view. We override an appropriate method of the StackFragment's
@@ -297,7 +319,7 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
297
319
  override fun onDestroy() {
298
320
  super.onDestroy()
299
321
  val container = screen.container
300
- if (container == null || !container.hasScreen(this)) {
322
+ if (container == null || !container.hasScreen(this.screen.fragmentWrapper)) {
301
323
  // we only send dismissed even when the screen has been removed from its container
302
324
  val screenContext = screen.context
303
325
  if (screenContext is ReactContext) {
@@ -307,25 +329,27 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
307
329
  ?.dispatchEvent(ScreenDismissedEvent(surfaceId, screen.id))
308
330
  }
309
331
  }
310
- mChildScreenContainers.clear()
332
+ childScreenContainers.clear()
311
333
  }
312
334
 
313
335
  companion object {
314
- @JvmStatic
315
- protected fun recycleView(view: View): View {
316
- // screen fragments reuse view instances instead of creating new ones. In order to reuse a given
317
- // view it needs to be detached from the view hierarchy to allow the fragment to attach it back.
318
- val parent = view.parent
319
- if (parent != null) {
320
- (parent as ViewGroup).endViewTransition(view)
321
- parent.removeView(view)
322
- }
336
+ const val TAG = "ScreenFragment"
323
337
 
324
- // view detached from fragment manager get their visibility changed to GONE after their state is
325
- // dumped. Since we don't restore the state but want to reuse the view we need to change
326
- // visibility back to VISIBLE in order for the fragment manager to animate in the view.
327
- view.visibility = View.VISIBLE
328
- return view
338
+ fun getCoalescingKey(progress: Float): Short {
339
+ /* We want value of 0 and 1 to be always dispatched so we base coalescing key on the progress:
340
+ - progress is 0 -> key 1
341
+ - progress is 1 -> key 2
342
+ - progress is between 0 and 1 -> key 3
343
+ */
344
+ return (
345
+ if (progress == 0.0f) {
346
+ 1
347
+ } else if (progress == 1.0f) {
348
+ 2
349
+ } else {
350
+ 3
351
+ }
352
+ ).toShort()
329
353
  }
330
354
  }
331
355
  }
@@ -3,20 +3,31 @@ package com.swmansion.rnscreens
3
3
  import android.app.Activity
4
4
  import com.facebook.react.bridge.ReactContext
5
5
 
6
- interface ScreenFragmentWrapper : FragmentHolder, ScreenEventDispatcher {
6
+ interface ScreenFragmentWrapper :
7
+ FragmentHolder,
8
+ ScreenEventDispatcher {
7
9
  var screen: Screen
8
10
 
9
11
  // Communication with container
10
12
  val childScreenContainers: List<ScreenContainer>
13
+
11
14
  fun addChildScreenContainer(container: ScreenContainer)
15
+
12
16
  fun removeChildScreenContainer(container: ScreenContainer)
17
+
18
+ /**
19
+ * Container that this fragment belongs to calls it to notify the fragment,
20
+ * that the container has updated.
21
+ */
13
22
  fun onContainerUpdate()
14
23
 
15
24
  // Animation phase callbacks
16
25
  fun onViewAnimationStart()
26
+
17
27
  fun onViewAnimationEnd()
18
28
 
19
29
  // Helpers
20
30
  fun tryGetActivity(): Activity?
31
+
21
32
  fun tryGetContext(): ReactContext?
22
33
  }