@amazon-devices/react-native-screens 2.0.9000000000 → 3.0.9000000000-rn-83

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 (685) hide show
  1. package/README.md +57 -18
  2. package/RNScreens.podspec +12 -30
  3. package/SystemBundles/d557bc3ccca761f329c4a0be9f40c5edeceaeb72783a7971e6e3dcf80a6bedb0.bundle +45130 -0
  4. package/SystemBundles/d557bc3ccca761f329c4a0be9f40c5edeceaeb72783a7971e6e3dcf80a6bedb0.map +13686 -0
  5. package/SystemModules/amzn__react-native-screens-3.modules.txt +158 -0
  6. package/SystemModules/amzn__react-native-screens-3.private.modules.txt +376 -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 +2 -2
  180. package/lib/commonjs/TransitionProgressContext.js.map +1 -1
  181. package/lib/commonjs/components/DebugContainer.js +38 -0
  182. package/lib/commonjs/components/DebugContainer.js.map +1 -0
  183. package/lib/commonjs/components/DebugContainer.web.js +14 -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 +48 -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 +100 -0
  210. package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -0
  211. package/lib/commonjs/components/ScreenStackHeaderConfig.web.js +39 -0
  212. package/lib/commonjs/components/ScreenStackHeaderConfig.web.js.map +1 -0
  213. package/lib/commonjs/components/ScreenStackItem.js +106 -0
  214. package/lib/commonjs/components/ScreenStackItem.js.map +1 -0
  215. package/lib/commonjs/components/SearchBar.js +67 -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 +16 -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 +17 -2
  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 +3 -2
  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 +6 -3
  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 +5 -6
  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 +200 -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 -95
  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 +1 -1
  274. package/lib/commonjs/native-stack/index.js.map +1 -1
  275. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +24 -24
  276. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  277. package/lib/commonjs/native-stack/types.js.map +1 -1
  278. package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js +1 -2
  279. package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
  280. package/lib/commonjs/native-stack/utils/HeaderHeightContext.js +1 -2
  281. package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -1
  282. package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js +1 -2
  283. package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
  284. package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
  285. package/lib/commonjs/native-stack/utils/getStatusBarHeight.js +22 -0
  286. package/lib/commonjs/native-stack/utils/getStatusBarHeight.js.map +1 -0
  287. package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js +2 -3
  288. package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
  289. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +5 -6
  290. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -1
  291. package/lib/commonjs/native-stack/utils/useHeaderHeight.js +2 -3
  292. package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -1
  293. package/lib/commonjs/native-stack/views/FontProcessor.js +2 -4
  294. package/lib/commonjs/native-stack/views/FontProcessor.js.map +1 -1
  295. package/lib/commonjs/native-stack/views/FooterComponent.js +17 -0
  296. package/lib/commonjs/native-stack/views/FooterComponent.js.map +1 -0
  297. package/lib/commonjs/native-stack/views/HeaderConfig.js +23 -15
  298. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  299. package/lib/commonjs/native-stack/views/NativeStackView.js +124 -56
  300. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  301. package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js +1 -2
  302. package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
  303. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +14 -21
  304. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  305. package/lib/commonjs/reanimated/ReanimatedScreen.js +4 -4
  306. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  307. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +10 -18
  308. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -1
  309. package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js +1 -2
  310. package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
  311. package/lib/commonjs/reanimated/index.js +1 -1
  312. package/lib/commonjs/reanimated/index.js.map +1 -1
  313. package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +4 -5
  314. package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -1
  315. package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js +2 -3
  316. package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -1
  317. package/lib/commonjs/types.js.map +1 -1
  318. package/lib/commonjs/useTransitionProgress.js +2 -3
  319. package/lib/commonjs/useTransitionProgress.js.map +1 -1
  320. package/lib/commonjs/utils.js +28 -6
  321. package/lib/commonjs/utils.js.map +1 -1
  322. package/lib/module/TransitionProgressContext.js +2 -0
  323. package/lib/module/TransitionProgressContext.js.map +1 -1
  324. package/lib/module/components/DebugContainer.js +30 -0
  325. package/lib/module/components/DebugContainer.js.map +1 -0
  326. package/lib/module/components/DebugContainer.web.js +6 -0
  327. package/lib/module/components/DebugContainer.web.js.map +1 -0
  328. package/lib/module/components/FullWindowOverlay.js +24 -0
  329. package/lib/module/components/FullWindowOverlay.js.map +1 -0
  330. package/lib/module/components/FullWindowOverlay.web.js +3 -0
  331. package/lib/module/components/FullWindowOverlay.web.js.map +1 -0
  332. package/lib/module/components/Screen.js +282 -0
  333. package/lib/module/components/Screen.js.map +1 -0
  334. package/lib/module/components/Screen.web.js +41 -0
  335. package/lib/module/components/Screen.web.js.map +1 -0
  336. package/lib/module/components/ScreenContainer.js +26 -0
  337. package/lib/module/components/ScreenContainer.js.map +1 -0
  338. package/lib/module/components/ScreenContainer.web.js +4 -0
  339. package/lib/module/components/ScreenContainer.web.js.map +1 -0
  340. package/lib/module/components/ScreenContentWrapper.js +10 -0
  341. package/lib/module/components/ScreenContentWrapper.js.map +1 -0
  342. package/lib/module/components/ScreenContentWrapper.web.js +4 -0
  343. package/lib/module/components/ScreenContentWrapper.web.js.map +1 -0
  344. package/lib/module/components/ScreenFooter.js +18 -0
  345. package/lib/module/components/ScreenFooter.js.map +1 -0
  346. package/lib/module/components/ScreenFooter.web.js +6 -0
  347. package/lib/module/components/ScreenFooter.web.js.map +1 -0
  348. package/lib/module/components/ScreenStack.js +63 -0
  349. package/lib/module/components/ScreenStack.js.map +1 -0
  350. package/lib/module/components/ScreenStack.web.js +4 -0
  351. package/lib/module/components/ScreenStack.web.js.map +1 -0
  352. package/lib/module/components/ScreenStackHeaderConfig.js +91 -0
  353. package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -0
  354. package/lib/module/components/ScreenStackHeaderConfig.web.js +26 -0
  355. package/lib/module/components/ScreenStackHeaderConfig.web.js.map +1 -0
  356. package/lib/module/components/ScreenStackItem.js +98 -0
  357. package/lib/module/components/ScreenStackItem.js.map +1 -0
  358. package/lib/module/components/SearchBar.js +62 -0
  359. package/lib/module/components/SearchBar.js.map +1 -0
  360. package/lib/module/components/SearchBar.web.js +4 -0
  361. package/lib/module/components/SearchBar.web.js.map +1 -0
  362. package/lib/module/components/helpers/DelayedFreeze.js +24 -0
  363. package/lib/module/components/helpers/DelayedFreeze.js.map +1 -0
  364. package/lib/module/components/helpers/usePrevious.js +10 -0
  365. package/lib/module/components/helpers/usePrevious.js.map +1 -0
  366. package/lib/module/contexts.js +4 -0
  367. package/lib/module/contexts.js.map +1 -0
  368. package/lib/module/core.js +31 -0
  369. package/lib/module/core.js.map +1 -0
  370. package/lib/module/fabric/FullWindowOverlayNativeComponent.js +16 -0
  371. package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
  372. package/lib/module/fabric/ModalScreenNativeComponent.js +10 -0
  373. package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -0
  374. package/lib/module/fabric/NativeScreensModule.js +5 -0
  375. package/lib/module/fabric/NativeScreensModule.js.map +1 -0
  376. package/lib/module/fabric/NativeScreensModule.web.js +2 -0
  377. package/lib/module/fabric/NativeScreensModule.web.js.map +1 -0
  378. package/lib/module/fabric/ScreenContainerNativeComponent.js +3 -4
  379. package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -1
  380. package/lib/module/fabric/ScreenContentWrapperNativeComponent.js +10 -0
  381. package/lib/module/fabric/ScreenContentWrapperNativeComponent.js.map +1 -0
  382. package/lib/module/fabric/ScreenFooterNativeComponent.js +3 -0
  383. package/lib/module/fabric/ScreenFooterNativeComponent.js.map +1 -0
  384. package/lib/module/fabric/ScreenNativeComponent.js +8 -7
  385. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  386. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +2 -0
  387. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
  388. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +8 -2
  389. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  390. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +5 -1
  391. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  392. package/lib/module/fabric/ScreenStackNativeComponent.js +3 -3
  393. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -1
  394. package/lib/module/fabric/SearchBarNativeComponent.js +3 -1
  395. package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -1
  396. package/lib/module/gesture-handler/GestureDetectorProvider.js +12 -0
  397. package/lib/module/gesture-handler/GestureDetectorProvider.js.map +1 -0
  398. package/lib/module/gesture-handler/RNScreensTurboModule.js +2 -0
  399. package/lib/module/gesture-handler/RNScreensTurboModule.js.map +1 -0
  400. package/lib/module/gesture-handler/ScreenGestureDetector.js +193 -0
  401. package/lib/module/gesture-handler/ScreenGestureDetector.js.map +1 -0
  402. package/lib/module/gesture-handler/constraints.js +56 -0
  403. package/lib/module/gesture-handler/constraints.js.map +1 -0
  404. package/lib/module/gesture-handler/defaults.js +39 -0
  405. package/lib/module/gesture-handler/defaults.js.map +1 -0
  406. package/lib/module/gesture-handler/fabricUtils.js +61 -0
  407. package/lib/module/gesture-handler/fabricUtils.js.map +1 -0
  408. package/lib/module/gesture-handler/fabricUtils.web.js +10 -0
  409. package/lib/module/gesture-handler/fabricUtils.web.js.map +1 -0
  410. package/lib/module/gesture-handler/index.js +5 -0
  411. package/lib/module/gesture-handler/index.js.map +1 -0
  412. package/lib/module/index.js +29 -64
  413. package/lib/module/index.js.map +1 -1
  414. package/lib/module/native-stack/contexts/GHContext.js +6 -0
  415. package/lib/module/native-stack/contexts/GHContext.js.map +1 -0
  416. package/lib/module/native-stack/index.js.map +1 -1
  417. package/lib/module/native-stack/navigators/createNativeStackNavigator.js +22 -21
  418. package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  419. package/lib/module/native-stack/types.js.map +1 -1
  420. package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
  421. package/lib/module/native-stack/utils/HeaderHeightContext.js.map +1 -1
  422. package/lib/module/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
  423. package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
  424. package/lib/module/native-stack/utils/getStatusBarHeight.js +16 -0
  425. package/lib/module/native-stack/utils/getStatusBarHeight.js.map +1 -0
  426. package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
  427. package/lib/module/native-stack/utils/useBackPressSubscription.js +4 -5
  428. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -1
  429. package/lib/module/native-stack/utils/useHeaderHeight.js.map +1 -1
  430. package/lib/module/native-stack/views/FontProcessor.js +2 -3
  431. package/lib/module/native-stack/views/FontProcessor.js.map +1 -1
  432. package/lib/module/native-stack/views/FooterComponent.js +10 -0
  433. package/lib/module/native-stack/views/FooterComponent.js.map +1 -0
  434. package/lib/module/native-stack/views/HeaderConfig.js +14 -6
  435. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  436. package/lib/module/native-stack/views/NativeStackView.js +118 -47
  437. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  438. package/lib/module/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
  439. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +9 -13
  440. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  441. package/lib/module/reanimated/ReanimatedScreen.js +2 -3
  442. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  443. package/lib/module/reanimated/ReanimatedScreenProvider.js +8 -16
  444. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -1
  445. package/lib/module/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
  446. package/lib/module/reanimated/index.js.map +1 -1
  447. package/lib/module/reanimated/useReanimatedHeaderHeight.js +1 -1
  448. package/lib/module/reanimated/useReanimatedHeaderHeight.js.map +1 -1
  449. package/lib/module/reanimated/useReanimatedTransitionProgress.js.map +1 -1
  450. package/lib/module/types.js.map +1 -1
  451. package/lib/module/useTransitionProgress.js.map +1 -1
  452. package/lib/module/utils.js +26 -5
  453. package/lib/module/utils.js.map +1 -1
  454. package/lib/typescript/TransitionProgressContext.d.ts +2 -1
  455. package/lib/typescript/TransitionProgressContext.d.ts.map +1 -0
  456. package/lib/typescript/components/DebugContainer.d.ts +15 -0
  457. package/lib/typescript/components/DebugContainer.d.ts.map +1 -0
  458. package/lib/typescript/components/DebugContainer.web.d.ts +4 -0
  459. package/lib/typescript/components/DebugContainer.web.d.ts.map +1 -0
  460. package/lib/typescript/components/FullWindowOverlay.d.ts +6 -0
  461. package/lib/typescript/components/FullWindowOverlay.d.ts.map +1 -0
  462. package/lib/typescript/components/FullWindowOverlay.web.d.ts +6 -0
  463. package/lib/typescript/components/FullWindowOverlay.web.d.ts.map +1 -0
  464. package/lib/typescript/components/Screen.d.ts +8 -0
  465. package/lib/typescript/components/Screen.d.ts.map +1 -0
  466. package/lib/typescript/components/Screen.web.d.ts +11 -0
  467. package/lib/typescript/components/Screen.web.d.ts.map +1 -0
  468. package/lib/typescript/components/ScreenContainer.d.ts +5 -0
  469. package/lib/typescript/components/ScreenContainer.d.ts.map +1 -0
  470. package/lib/typescript/components/ScreenContainer.web.d.ts +4 -0
  471. package/lib/typescript/components/ScreenContainer.web.d.ts.map +1 -0
  472. package/lib/typescript/components/ScreenContentWrapper.d.ts +5 -0
  473. package/lib/typescript/components/ScreenContentWrapper.d.ts.map +1 -0
  474. package/lib/typescript/components/ScreenContentWrapper.web.d.ts +4 -0
  475. package/lib/typescript/components/ScreenContentWrapper.web.d.ts.map +1 -0
  476. package/lib/typescript/components/ScreenFooter.d.ts +12 -0
  477. package/lib/typescript/components/ScreenFooter.d.ts.map +1 -0
  478. package/lib/typescript/components/ScreenFooter.web.d.ts +6 -0
  479. package/lib/typescript/components/ScreenFooter.web.d.ts.map +1 -0
  480. package/lib/typescript/components/ScreenStack.d.ts +5 -0
  481. package/lib/typescript/components/ScreenStack.d.ts.map +1 -0
  482. package/lib/typescript/components/ScreenStack.web.d.ts +4 -0
  483. package/lib/typescript/components/ScreenStack.web.d.ts.map +1 -0
  484. package/lib/typescript/components/ScreenStackHeaderConfig.d.ts +13 -0
  485. package/lib/typescript/components/ScreenStackHeaderConfig.d.ts.map +1 -0
  486. package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts +13 -0
  487. package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts.map +1 -0
  488. package/lib/typescript/components/ScreenStackItem.d.ts +11 -0
  489. package/lib/typescript/components/ScreenStackItem.d.ts.map +1 -0
  490. package/lib/typescript/components/SearchBar.d.ts +5 -0
  491. package/lib/typescript/components/SearchBar.d.ts.map +1 -0
  492. package/lib/typescript/components/SearchBar.web.d.ts +4 -0
  493. package/lib/typescript/components/SearchBar.web.d.ts.map +1 -0
  494. package/lib/typescript/components/helpers/DelayedFreeze.d.ts +8 -0
  495. package/lib/typescript/components/helpers/DelayedFreeze.d.ts.map +1 -0
  496. package/lib/typescript/components/helpers/usePrevious.d.ts +2 -0
  497. package/lib/typescript/components/helpers/usePrevious.d.ts.map +1 -0
  498. package/lib/typescript/contexts.d.ts +5 -0
  499. package/lib/typescript/contexts.d.ts.map +1 -0
  500. package/lib/typescript/core.d.ts +6 -0
  501. package/lib/typescript/core.d.ts.map +1 -0
  502. package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts +1 -1
  503. package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts.map +1 -0
  504. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +76 -0
  505. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -0
  506. package/lib/typescript/fabric/NativeScreensModule.d.ts +6 -0
  507. package/lib/typescript/fabric/NativeScreensModule.d.ts.map +1 -0
  508. package/lib/typescript/fabric/NativeScreensModule.web.d.ts +3 -0
  509. package/lib/typescript/fabric/NativeScreensModule.web.d.ts.map +1 -0
  510. package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts +1 -0
  511. package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts.map +1 -0
  512. package/lib/typescript/fabric/ScreenContentWrapperNativeComponent.d.ts +6 -0
  513. package/lib/typescript/fabric/ScreenContentWrapperNativeComponent.d.ts.map +1 -0
  514. package/lib/typescript/fabric/ScreenFooterNativeComponent.d.ts +7 -0
  515. package/lib/typescript/fabric/ScreenFooterNativeComponent.d.ts.map +1 -0
  516. package/lib/typescript/fabric/ScreenNativeComponent.d.ts +34 -24
  517. package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -0
  518. package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts +1 -1
  519. package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts.map +1 -0
  520. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +12 -2
  521. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -0
  522. package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
  523. package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -0
  524. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +4 -2
  525. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -0
  526. package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +17 -16
  527. package/lib/typescript/fabric/SearchBarNativeComponent.d.ts.map +1 -0
  528. package/lib/typescript/gesture-handler/GestureDetectorProvider.d.ts +5 -0
  529. package/lib/typescript/gesture-handler/GestureDetectorProvider.d.ts.map +1 -0
  530. package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts +13 -0
  531. package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts.map +1 -0
  532. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts +5 -0
  533. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts.map +1 -0
  534. package/lib/typescript/gesture-handler/constraints.d.ts +6 -0
  535. package/lib/typescript/gesture-handler/constraints.d.ts.map +1 -0
  536. package/lib/typescript/gesture-handler/defaults.d.ts +20 -0
  537. package/lib/typescript/gesture-handler/defaults.d.ts.map +1 -0
  538. package/lib/typescript/gesture-handler/fabricUtils.d.ts +10 -0
  539. package/lib/typescript/gesture-handler/fabricUtils.d.ts.map +1 -0
  540. package/lib/typescript/gesture-handler/fabricUtils.web.d.ts +6 -0
  541. package/lib/typescript/gesture-handler/fabricUtils.web.d.ts.map +1 -0
  542. package/lib/typescript/gesture-handler/index.d.ts +2 -0
  543. package/lib/typescript/gesture-handler/index.d.ts.map +1 -0
  544. package/lib/typescript/index.d.ts +25 -31
  545. package/lib/typescript/index.d.ts.map +1 -0
  546. package/lib/typescript/native-stack/contexts/GHContext.d.ts +4 -0
  547. package/lib/typescript/native-stack/contexts/GHContext.d.ts.map +1 -0
  548. package/lib/typescript/native-stack/index.d.ts +1 -0
  549. package/lib/typescript/native-stack/index.d.ts.map +1 -0
  550. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +4 -0
  551. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -0
  552. package/lib/typescript/native-stack/types.d.ts +191 -33
  553. package/lib/typescript/native-stack/types.d.ts.map +1 -0
  554. package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts +1 -0
  555. package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts.map +1 -0
  556. package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts +1 -0
  557. package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts.map +1 -0
  558. package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +2 -1
  559. package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts.map +1 -0
  560. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +3 -2
  561. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -0
  562. package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts +3 -0
  563. package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts.map +1 -0
  564. package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +2 -1
  565. package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts.map +1 -0
  566. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +1 -0
  567. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts.map +1 -0
  568. package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts +1 -0
  569. package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts.map +1 -0
  570. package/lib/typescript/native-stack/views/FontProcessor.d.ts +1 -0
  571. package/lib/typescript/native-stack/views/FontProcessor.d.ts.map +1 -0
  572. package/lib/typescript/native-stack/views/FooterComponent.d.ts +7 -0
  573. package/lib/typescript/native-stack/views/FooterComponent.d.ts.map +1 -0
  574. package/lib/typescript/native-stack/views/HeaderConfig.d.ts +4 -3
  575. package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -0
  576. package/lib/typescript/native-stack/views/NativeStackView.d.ts +2 -1
  577. package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -0
  578. package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts +1 -0
  579. package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts.map +1 -0
  580. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +3 -3
  581. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts.map +1 -0
  582. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +3 -3
  583. package/lib/typescript/reanimated/ReanimatedScreen.d.ts.map +1 -0
  584. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +1 -0
  585. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts.map +1 -0
  586. package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +2 -1
  587. package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts.map +1 -0
  588. package/lib/typescript/reanimated/index.d.ts +1 -0
  589. package/lib/typescript/reanimated/index.d.ts.map +1 -0
  590. package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts +2 -3
  591. package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts.map +1 -0
  592. package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts +4 -9
  593. package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts.map +1 -0
  594. package/lib/typescript/types.d.ts +187 -37
  595. package/lib/typescript/types.d.ts.map +1 -0
  596. package/lib/typescript/useTransitionProgress.d.ts +4 -3
  597. package/lib/typescript/useTransitionProgress.d.ts.map +1 -0
  598. package/lib/typescript/utils.d.ts +27 -1
  599. package/lib/typescript/utils.d.ts.map +1 -0
  600. package/native-stack/README.md +156 -108
  601. package/native-stack/package.json +4 -4
  602. package/oss-attribution/attribution.txt +77 -0
  603. package/oss-attribution/licenseInfos.json +27 -0
  604. package/package.json +196 -1
  605. package/react-native.config.js +19 -16
  606. package/reanimated/package.json +1 -1
  607. package/src/TransitionProgressContext.tsx +3 -1
  608. package/src/components/DebugContainer.tsx +46 -0
  609. package/src/components/DebugContainer.web.tsx +7 -0
  610. package/src/components/FullWindowOverlay.tsx +33 -0
  611. package/src/components/FullWindowOverlay.web.tsx +6 -0
  612. package/src/components/Screen.tsx +392 -0
  613. package/src/components/Screen.web.tsx +47 -0
  614. package/src/components/ScreenContainer.tsx +28 -0
  615. package/src/components/ScreenContainer.web.tsx +5 -0
  616. package/src/components/ScreenContentWrapper.tsx +9 -0
  617. package/src/components/ScreenContentWrapper.web.tsx +5 -0
  618. package/src/components/ScreenFooter.tsx +20 -0
  619. package/src/components/ScreenFooter.web.tsx +7 -0
  620. package/src/components/ScreenStack.tsx +112 -0
  621. package/src/components/ScreenStack.web.tsx +5 -0
  622. package/src/components/ScreenStackHeaderConfig.tsx +127 -0
  623. package/src/components/ScreenStackHeaderConfig.web.tsx +45 -0
  624. package/src/components/ScreenStackItem.tsx +174 -0
  625. package/src/components/SearchBar.tsx +105 -0
  626. package/src/components/SearchBar.web.tsx +5 -0
  627. package/src/components/helpers/DelayedFreeze.tsx +27 -0
  628. package/src/components/helpers/usePrevious.tsx +12 -0
  629. package/src/contexts.tsx +9 -0
  630. package/src/core.ts +45 -0
  631. package/src/fabric/FullWindowOverlayNativeComponent.ts +16 -0
  632. package/src/fabric/ModalScreenNativeComponent.ts +115 -0
  633. package/src/fabric/NativeScreensModule.ts +8 -0
  634. package/src/fabric/NativeScreensModule.web.ts +1 -0
  635. package/src/fabric/ScreenContainerNativeComponent.ts +3 -3
  636. package/src/fabric/ScreenContentWrapperNativeComponent.ts +14 -0
  637. package/src/fabric/ScreenFooterNativeComponent.ts +6 -0
  638. package/src/fabric/ScreenNativeComponent.ts +34 -23
  639. package/src/fabric/ScreenNavigationContainerNativeComponent.ts +3 -1
  640. package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +38 -2
  641. package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +5 -1
  642. package/src/fabric/ScreenStackNativeComponent.ts +3 -2
  643. package/src/fabric/SearchBarNativeComponent.ts +17 -13
  644. package/src/gesture-handler/GestureDetectorProvider.tsx +16 -0
  645. package/src/gesture-handler/RNScreensTurboModule.ts +13 -0
  646. package/src/gesture-handler/ScreenGestureDetector.tsx +241 -0
  647. package/src/gesture-handler/constraints.ts +87 -0
  648. package/src/gesture-handler/defaults.ts +46 -0
  649. package/src/gesture-handler/fabricUtils.ts +86 -0
  650. package/src/gesture-handler/fabricUtils.web.ts +10 -0
  651. package/src/gesture-handler/index.tsx +4 -0
  652. package/src/index.tsx +49 -113
  653. package/src/native-stack/contexts/GHContext.tsx +9 -0
  654. package/src/native-stack/navigators/createNativeStackNavigator.tsx +6 -3
  655. package/src/native-stack/types.tsx +204 -31
  656. package/src/native-stack/utils/getDefaultHeaderHeight.tsx +2 -2
  657. package/src/native-stack/utils/getStatusBarHeight.tsx +22 -0
  658. package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
  659. package/src/native-stack/utils/useBackPressSubscription.tsx +3 -2
  660. package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
  661. package/src/native-stack/views/FontProcessor.tsx +2 -2
  662. package/src/native-stack/views/FooterComponent.tsx +10 -0
  663. package/src/native-stack/views/HeaderConfig.tsx +22 -6
  664. package/src/native-stack/views/NativeStackView.tsx +141 -54
  665. package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
  666. package/src/reanimated/ReanimatedNativeStackScreen.tsx +15 -13
  667. package/src/reanimated/ReanimatedScreen.tsx +4 -3
  668. package/src/reanimated/ReanimatedScreenProvider.tsx +3 -2
  669. package/src/reanimated/useReanimatedHeaderHeight.tsx +2 -2
  670. package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
  671. package/src/types.tsx +213 -41
  672. package/src/useTransitionProgress.tsx +1 -1
  673. package/src/utils.ts +27 -5
  674. package/windows/README.md +4 -1
  675. package/windows/RNScreens/Screen.h +3 -1
  676. package/SystemBundles/3d72c1ccdc1866604203e2067a94f7ab2c45408da644bb242aa980ffea58a74d.bundle +0 -33190
  677. package/SystemBundles/3d72c1ccdc1866604203e2067a94f7ab2c45408da644bb242aa980ffea58a74d.map +0 -10181
  678. package/SystemModules/amzn__react-native-screens.modules.txt +0 -101
  679. package/SystemModules/amzn__react-native-screens.private.modules.txt +0 -243
  680. package/lib/commonjs/index.native.js +0 -409
  681. package/lib/commonjs/index.native.js.map +0 -1
  682. package/lib/module/index.native.js +0 -412
  683. package/lib/module/index.native.js.map +0 -1
  684. package/lib/typescript/index.native.d.ts +0 -2
  685. package/src/index.native.tsx +0 -601
@@ -3,6 +3,8 @@ package com.swmansion.rnscreens
3
3
  import android.annotation.SuppressLint
4
4
  import android.content.Context
5
5
  import android.graphics.Color
6
+ import android.graphics.drawable.ColorDrawable
7
+ import android.os.Build
6
8
  import android.os.Bundle
7
9
  import android.view.LayoutInflater
8
10
  import android.view.Menu
@@ -10,73 +12,120 @@ import android.view.MenuInflater
10
12
  import android.view.MenuItem
11
13
  import android.view.View
12
14
  import android.view.ViewGroup
15
+ import android.view.WindowInsets
16
+ import android.view.WindowManager
13
17
  import android.view.animation.Animation
14
18
  import android.view.animation.AnimationSet
19
+ import android.view.animation.AnimationUtils
15
20
  import android.view.animation.Transformation
21
+ import android.view.inputmethod.InputMethodManager
16
22
  import android.widget.LinearLayout
23
+ import androidx.annotation.RequiresApi
17
24
  import androidx.appcompat.widget.Toolbar
18
25
  import androidx.coordinatorlayout.widget.CoordinatorLayout
26
+ import androidx.core.view.WindowInsetsCompat
19
27
  import com.facebook.react.uimanager.PixelUtil
28
+ import com.facebook.react.uimanager.PointerEvents
29
+ import com.facebook.react.uimanager.ReactPointerEventsView
20
30
  import com.google.android.material.appbar.AppBarLayout
21
31
  import com.google.android.material.appbar.AppBarLayout.ScrollingViewBehavior
32
+ import com.google.android.material.bottomsheet.BottomSheetBehavior
33
+ import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
34
+ import com.google.android.material.shape.CornerFamily
35
+ import com.google.android.material.shape.MaterialShapeDrawable
36
+ import com.google.android.material.shape.ShapeAppearanceModel
37
+ import com.swmansion.rnscreens.bottomsheet.SheetUtils
38
+ import com.swmansion.rnscreens.bottomsheet.isSheetFitToContents
39
+ import com.swmansion.rnscreens.bottomsheet.useSingleDetent
40
+ import com.swmansion.rnscreens.bottomsheet.useThreeDetents
41
+ import com.swmansion.rnscreens.bottomsheet.useTwoDetents
42
+ import com.swmansion.rnscreens.bottomsheet.usesFormSheetPresentation
43
+ import com.swmansion.rnscreens.ext.recycle
22
44
  import com.swmansion.rnscreens.utils.DeviceUtils
23
45
 
24
- class ScreenStackFragment : ScreenFragment, ScreenStackFragmentWrapper {
25
- private var mAppBarLayout: AppBarLayout? = null
26
- private var mToolbar: Toolbar? = null
27
- private var mShadowHidden = false
28
- private var mIsTranslucent = false
46
+ sealed class KeyboardState
29
47
 
30
- private var mLastFocusedChild: View? = null
48
+ object KeyboardNotVisible : KeyboardState()
49
+
50
+ object KeyboardDidHide : KeyboardState()
51
+
52
+ class KeyboardVisible(
53
+ val height: Int,
54
+ ) : KeyboardState()
55
+
56
+ class ScreenStackFragment :
57
+ ScreenFragment,
58
+ ScreenStackFragmentWrapper {
59
+ public var nativeDismissalObserver: NativeDismissalObserver? = null
60
+ private var appBarLayout: AppBarLayout? = null
61
+ private var toolbar: Toolbar? = null
62
+ private var isToolbarShadowHidden = false
63
+ private var isToolbarTranslucent = false
64
+
65
+ private var lastFocusedChild: View? = null
31
66
 
32
67
  var searchView: CustomSearchView? = null
33
68
  var onSearchViewCreate: ((searchView: CustomSearchView) -> Unit)? = null
34
69
 
70
+ private lateinit var coordinatorLayout: ScreensCoordinatorLayout
71
+
72
+ private val screenStack: ScreenStack
73
+ get() {
74
+ val container = screen.container
75
+ check(container is ScreenStack) { "ScreenStackFragment added into a non-stack container" }
76
+ return container
77
+ }
78
+
35
79
  @SuppressLint("ValidFragment")
36
80
  constructor(screenView: Screen) : super(screenView)
37
81
 
38
82
  constructor() {
39
83
  throw IllegalStateException(
40
- "ScreenStack 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."
84
+ "ScreenStack 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.",
41
85
  )
42
86
  }
43
87
 
44
88
  override fun removeToolbar() {
45
- mAppBarLayout?.let {
46
- mToolbar?.let { toolbar ->
89
+ appBarLayout?.let {
90
+ toolbar?.let { toolbar ->
47
91
  if (toolbar.parent === it) {
48
92
  it.removeView(toolbar)
49
93
  }
50
94
  }
51
95
  }
52
- mToolbar = null
96
+ toolbar = null
53
97
  }
54
98
 
55
99
  override fun setToolbar(toolbar: Toolbar) {
56
- mAppBarLayout?.addView(toolbar)
57
- toolbar.layoutParams = AppBarLayout.LayoutParams(
58
- AppBarLayout.LayoutParams.MATCH_PARENT, AppBarLayout.LayoutParams.WRAP_CONTENT
59
- ).apply { scrollFlags = 0 }
60
- mToolbar = toolbar
100
+ appBarLayout?.addView(toolbar)
101
+ toolbar.layoutParams =
102
+ AppBarLayout
103
+ .LayoutParams(
104
+ AppBarLayout.LayoutParams.MATCH_PARENT,
105
+ AppBarLayout.LayoutParams.WRAP_CONTENT,
106
+ ).apply { scrollFlags = 0 }
107
+ this.toolbar = toolbar
61
108
  }
62
109
 
63
110
  override fun setToolbarShadowHidden(hidden: Boolean) {
64
- if (mShadowHidden != hidden) {
65
- mAppBarLayout?.targetElevation = if (hidden) 0f else PixelUtil.toPixelFromDIP(4f)
66
- mShadowHidden = hidden
111
+ if (isToolbarShadowHidden != hidden) {
112
+ appBarLayout?.elevation = if (hidden) 0f else PixelUtil.toPixelFromDIP(4f)
113
+ appBarLayout?.stateListAnimator = null
114
+ isToolbarShadowHidden = hidden
67
115
  }
68
116
  }
69
117
 
70
118
  override fun setToolbarTranslucent(translucent: Boolean) {
71
- if (mIsTranslucent != translucent) {
119
+ if (isToolbarTranslucent != translucent) {
72
120
  val params = screen.layoutParams
73
121
  (params as CoordinatorLayout.LayoutParams).behavior =
74
122
  if (translucent) null else ScrollingViewBehavior()
75
- mIsTranslucent = translucent
123
+ isToolbarTranslucent = translucent
76
124
  }
77
125
  }
78
126
 
79
127
  override fun onContainerUpdate() {
128
+ super.onContainerUpdate()
80
129
  screen.headerConfig?.onUpdate()
81
130
  }
82
131
 
@@ -92,58 +141,365 @@ class ScreenStackFragment : ScreenFragment, ScreenStackFragmentWrapper {
92
141
  }
93
142
  }
94
143
 
95
- override fun onStart() {
96
- mLastFocusedChild?.requestFocus()
97
- super.onStart()
144
+ // If the Screen has `formSheet` presentation this callback is attached to its behavior.
145
+ // It is responsible for firing detent changed events & removing the sheet from the container
146
+ // once it is hidden by user gesture.
147
+ private val bottomSheetStateCallback =
148
+ object : BottomSheetCallback() {
149
+ private var lastStableState: Int =
150
+ SheetUtils.sheetStateFromDetentIndex(
151
+ screen.sheetInitialDetentIndex,
152
+ screen.sheetDetents.count(),
153
+ )
154
+
155
+ override fun onStateChanged(
156
+ bottomSheet: View,
157
+ newState: Int,
158
+ ) {
159
+ if (SheetUtils.isStateStable(newState)) {
160
+ lastStableState = newState
161
+ screen.notifySheetDetentChange(
162
+ SheetUtils.detentIndexFromSheetState(
163
+ lastStableState,
164
+ screen.sheetDetents.count(),
165
+ ),
166
+ true,
167
+ )
168
+ } else if (newState == BottomSheetBehavior.STATE_DRAGGING) {
169
+ screen.notifySheetDetentChange(
170
+ SheetUtils.detentIndexFromSheetState(
171
+ lastStableState,
172
+ screen.sheetDetents.count(),
173
+ ),
174
+ false,
175
+ )
176
+ }
177
+
178
+ if (newState == BottomSheetBehavior.STATE_HIDDEN) {
179
+ nativeDismissalObserver?.onNativeDismiss(this@ScreenStackFragment)
180
+ }
181
+ }
182
+
183
+ override fun onSlide(
184
+ bottomSheet: View,
185
+ slideOffset: Float,
186
+ ) = Unit
187
+ }
188
+
189
+ override fun onCreateAnimation(
190
+ transit: Int,
191
+ enter: Boolean,
192
+ nextAnim: Int,
193
+ ): Animation? {
194
+ if (screen.stackPresentation != Screen.StackPresentation.FORM_SHEET) {
195
+ return null
196
+ }
197
+ return if (enter) {
198
+ AnimationUtils.loadAnimation(context, R.anim.rns_slide_in_from_bottom)
199
+ } else {
200
+ AnimationUtils.loadAnimation(context, R.anim.rns_slide_out_to_bottom)
201
+ }
202
+ }
203
+
204
+ internal fun onSheetCornerRadiusChange() {
205
+ screen.onSheetCornerRadiusChange()
98
206
  }
99
207
 
100
208
  override fun onCreateView(
101
209
  inflater: LayoutInflater,
102
210
  container: ViewGroup?,
103
- savedInstanceState: Bundle?
104
- ): View? {
105
- val view: ScreensCoordinatorLayout? =
106
- context?.let { ScreensCoordinatorLayout(it, this) }
107
-
108
- screen.layoutParams = CoordinatorLayout.LayoutParams(
109
- LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT
110
- ).apply { behavior = if (mIsTranslucent) null else ScrollingViewBehavior() }
111
-
112
- view?.addView(recycleView(screen))
113
-
114
- mAppBarLayout = context?.let { AppBarLayout(it) }?.apply {
115
- // By default AppBarLayout will have a background color set but since we cover the whole layout
116
- // with toolbar (that can be semi-transparent) the bar layout background color does not pay a
117
- // role. On top of that it breaks screens animations when alfa offscreen compositing is off
118
- // (which is the default)
119
- setBackgroundColor(Color.TRANSPARENT)
120
- layoutParams = AppBarLayout.LayoutParams(
121
- AppBarLayout.LayoutParams.MATCH_PARENT, AppBarLayout.LayoutParams.WRAP_CONTENT
122
- )
211
+ savedInstanceState: Bundle?,
212
+ ): View {
213
+ coordinatorLayout = ScreensCoordinatorLayout(requireContext(), this)
214
+
215
+ screen.layoutParams =
216
+ CoordinatorLayout
217
+ .LayoutParams(
218
+ LinearLayout.LayoutParams.MATCH_PARENT,
219
+ LinearLayout.LayoutParams.MATCH_PARENT,
220
+ ).apply {
221
+ behavior =
222
+ if (screen.usesFormSheetPresentation()) {
223
+ createAndConfigureBottomSheetBehaviour()
224
+ } else if (isToolbarTranslucent) {
225
+ null
226
+ } else {
227
+ ScrollingViewBehavior()
228
+ }
229
+ }
230
+
231
+ if (screen.usesFormSheetPresentation()) {
232
+ screen.clipToOutline = true
233
+ // TODO(@kkafar): without this line there is no drawable / outline & nothing shows...? Determine what's going on here
234
+ attachShapeToScreen(screen)
235
+ screen.elevation = screen.sheetElevation
236
+ }
237
+
238
+ coordinatorLayout.addView(screen.recycle())
239
+
240
+ if (!screen.usesFormSheetPresentation()) {
241
+ appBarLayout =
242
+ context?.let { AppBarLayout(it) }?.apply {
243
+ // By default AppBarLayout will have a background color set but since we cover the whole layout
244
+ // with toolbar (that can be semi-transparent) the bar layout background color does not pay a
245
+ // role. On top of that it breaks screens animations when alfa offscreen compositing is off
246
+ // (which is the default)
247
+ setBackgroundColor(Color.TRANSPARENT)
248
+ layoutParams =
249
+ AppBarLayout.LayoutParams(
250
+ AppBarLayout.LayoutParams.MATCH_PARENT,
251
+ AppBarLayout.LayoutParams.WRAP_CONTENT,
252
+ )
253
+ }
254
+
255
+ coordinatorLayout.addView(appBarLayout)
256
+ if (isToolbarShadowHidden) {
257
+ appBarLayout?.targetElevation = 0f
258
+ }
259
+ toolbar?.let { appBarLayout?.addView(it.recycle()) }
260
+ setHasOptionsMenu(true)
261
+ }
262
+ return coordinatorLayout
263
+ }
264
+
265
+ /**
266
+ * This method might return slightly different values depending on code path,
267
+ * but during testing I've found this effect negligible. For practical purposes
268
+ * this is acceptable.
269
+ */
270
+ private fun tryResolveContainerHeight(): Int? {
271
+ if (screen.container != null) {
272
+ return screenStack.height
273
+ }
274
+
275
+ context
276
+ ?.resources
277
+ ?.displayMetrics
278
+ ?.heightPixels
279
+ ?.let { return it }
280
+
281
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
282
+ (context?.getSystemService(Context.WINDOW_SERVICE) as? WindowManager)
283
+ ?.currentWindowMetrics
284
+ ?.bounds
285
+ ?.height()
286
+ ?.let { return it }
123
287
  }
288
+ return null
289
+ }
290
+
291
+ private val keyboardSheetCallback =
292
+ object : BottomSheetCallback() {
293
+ @RequiresApi(Build.VERSION_CODES.M)
294
+ override fun onStateChanged(
295
+ bottomSheet: View,
296
+ newState: Int,
297
+ ) {
298
+ if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
299
+ val isImeVisible =
300
+ WindowInsetsCompat
301
+ .toWindowInsetsCompat(bottomSheet.rootWindowInsets)
302
+ .isVisible(WindowInsetsCompat.Type.ime())
303
+ if (isImeVisible) {
304
+ // Does it not interfere with React Native focus mechanism? In any case I'm not aware
305
+ // of different way of hiding the keyboard.
306
+ // https://stackoverflow.com/questions/1109022/how-can-i-close-hide-the-android-soft-keyboard-programmatically
307
+ // https://developer.android.com/develop/ui/views/touch-and-input/keyboard-input/visibility
308
+
309
+ // I want to be polite here and request focus before dismissing the keyboard,
310
+ // however even if it fails I want to try to hide the keyboard. This sometimes works...
311
+ bottomSheet.requestFocus()
312
+ val imm = requireContext().getSystemService(InputMethodManager::class.java)
313
+ imm.hideSoftInputFromWindow(bottomSheet.windowToken, 0)
314
+ }
315
+ }
316
+ }
317
+
318
+ override fun onSlide(
319
+ bottomSheet: View,
320
+ slideOffset: Float,
321
+ ) = Unit
322
+ }
323
+
324
+ internal fun configureBottomSheetBehaviour(
325
+ behavior: BottomSheetBehavior<Screen>,
326
+ keyboardState: KeyboardState = KeyboardNotVisible,
327
+ ): BottomSheetBehavior<Screen> {
328
+ val containerHeight = tryResolveContainerHeight()
329
+ check(containerHeight != null) {
330
+ "[RNScreens] Failed to find window height during bottom sheet behaviour configuration"
331
+ }
332
+
333
+ behavior.apply {
334
+ isHideable = true
335
+ isDraggable = true
124
336
 
125
- view?.addView(mAppBarLayout)
126
- if (mShadowHidden) {
127
- mAppBarLayout?.targetElevation = 0f
337
+ // It seems that there is a guard in material implementation that will prevent
338
+ // this callback from being registered multiple times.
339
+ addBottomSheetCallback(bottomSheetStateCallback)
340
+ }
341
+
342
+ screen.footer?.registerWithSheetBehavior(behavior)
343
+
344
+ return when (keyboardState) {
345
+ is KeyboardNotVisible -> {
346
+ when (screen.sheetDetents.count()) {
347
+ 1 ->
348
+ behavior.apply {
349
+ val height =
350
+ if (screen.isSheetFitToContents()) {
351
+ screen.contentWrapper.get()?.height
352
+ } else {
353
+ (screen.sheetDetents.first() * containerHeight).toInt()
354
+ }
355
+ useSingleDetent(height = height)
356
+ }
357
+
358
+ 2 ->
359
+ behavior.useTwoDetents(
360
+ state =
361
+ SheetUtils.sheetStateFromDetentIndex(
362
+ screen.sheetInitialDetentIndex,
363
+ screen.sheetDetents.count(),
364
+ ),
365
+ firstHeight = (screen.sheetDetents[0] * containerHeight).toInt(),
366
+ secondHeight = (screen.sheetDetents[1] * containerHeight).toInt(),
367
+ )
368
+
369
+ 3 ->
370
+ behavior.useThreeDetents(
371
+ state =
372
+ SheetUtils.sheetStateFromDetentIndex(
373
+ screen.sheetInitialDetentIndex,
374
+ screen.sheetDetents.count(),
375
+ ),
376
+ firstHeight = (screen.sheetDetents[0] * containerHeight).toInt(),
377
+ halfExpandedRatio = (screen.sheetDetents[1] / screen.sheetDetents[2]).toFloat(),
378
+ expandedOffsetFromTop = ((1 - screen.sheetDetents[2]) * containerHeight).toInt(),
379
+ )
380
+
381
+ else -> throw IllegalStateException(
382
+ "[RNScreens] Invalid detent count ${screen.sheetDetents.count()}. Expected at most 3.",
383
+ )
384
+ }
385
+ }
386
+
387
+ is KeyboardVisible -> {
388
+ val newMaxHeight =
389
+ if (behavior.maxHeight - keyboardState.height > 1) {
390
+ behavior.maxHeight - keyboardState.height
391
+ } else {
392
+ behavior.maxHeight
393
+ }
394
+ when (screen.sheetDetents.count()) {
395
+ 1 ->
396
+ behavior.apply {
397
+ useSingleDetent(height = newMaxHeight)
398
+ addBottomSheetCallback(keyboardSheetCallback)
399
+ }
400
+
401
+ 2 ->
402
+ behavior.apply {
403
+ useTwoDetents(
404
+ state = BottomSheetBehavior.STATE_EXPANDED,
405
+ secondHeight = newMaxHeight,
406
+ )
407
+ addBottomSheetCallback(keyboardSheetCallback)
408
+ }
409
+
410
+ 3 ->
411
+ behavior.apply {
412
+ useThreeDetents(
413
+ state = BottomSheetBehavior.STATE_EXPANDED,
414
+ )
415
+ maxHeight = newMaxHeight
416
+ addBottomSheetCallback(keyboardSheetCallback)
417
+ }
418
+
419
+ else -> throw IllegalStateException(
420
+ "[RNScreens] Invalid detent count ${screen.sheetDetents.count()}. Expected at most 3.",
421
+ )
422
+ }
423
+ }
424
+
425
+ is KeyboardDidHide -> {
426
+ // Here we assume that the keyboard was either closed explicitly by user,
427
+ // or the user dragged the sheet down. In any case the state should
428
+ // stay unchanged.
429
+
430
+ behavior.removeBottomSheetCallback(keyboardSheetCallback)
431
+ when (screen.sheetDetents.count()) {
432
+ 1 ->
433
+ behavior.useSingleDetent(
434
+ height = (screen.sheetDetents.first() * containerHeight).toInt(),
435
+ forceExpandedState = false,
436
+ )
437
+
438
+ 2 ->
439
+ behavior.useTwoDetents(
440
+ firstHeight = (screen.sheetDetents[0] * containerHeight).toInt(),
441
+ secondHeight = (screen.sheetDetents[1] * containerHeight).toInt(),
442
+ )
443
+
444
+ 3 ->
445
+ behavior.useThreeDetents(
446
+ firstHeight = (screen.sheetDetents[0] * containerHeight).toInt(),
447
+ halfExpandedRatio = (screen.sheetDetents[1] / screen.sheetDetents[2]).toFloat(),
448
+ expandedOffsetFromTop = ((1 - screen.sheetDetents[2]) * containerHeight).toInt(),
449
+ )
450
+
451
+ else -> throw IllegalStateException(
452
+ "[RNScreens] Invalid detent count ${screen.sheetDetents.count()}. Expected at most 3.",
453
+ )
454
+ }
455
+ }
128
456
  }
129
- mToolbar?.let { mAppBarLayout?.addView(recycleView(it)) }
130
- setHasOptionsMenu(true)
131
- return view
457
+ }
458
+
459
+ // In general it would be great to create BottomSheetBehaviour only via this method as it runs some
460
+ // side effects.
461
+ internal fun createAndConfigureBottomSheetBehaviour(): BottomSheetBehavior<Screen> =
462
+ configureBottomSheetBehaviour(BottomSheetBehavior<Screen>())
463
+
464
+ private fun attachShapeToScreen(screen: Screen) {
465
+ val cornerSize = PixelUtil.toPixelFromDIP(screen.sheetCornerRadius)
466
+ val shapeAppearanceModel =
467
+ ShapeAppearanceModel
468
+ .Builder()
469
+ .apply {
470
+ setTopLeftCorner(CornerFamily.ROUNDED, cornerSize)
471
+ setTopRightCorner(CornerFamily.ROUNDED, cornerSize)
472
+ }.build()
473
+ val shape = MaterialShapeDrawable(shapeAppearanceModel)
474
+ val currentColor =
475
+ (screen.background as? ColorDrawable?)?.color
476
+ ?: (screen.background as? MaterialShapeDrawable?)?.tintList?.defaultColor
477
+ shape.setTint(currentColor ?: Color.TRANSPARENT)
478
+ screen.background = shape
132
479
  }
133
480
 
134
481
  override fun onStop() {
135
- if (DeviceUtils.isPlatformAndroidTV(context))
136
- mLastFocusedChild = findLastFocusedChild()
482
+ if (DeviceUtils.isPlatformAndroidTV(context)) {
483
+ lastFocusedChild = findLastFocusedChild()
484
+ }
137
485
 
138
486
  super.onStop()
139
487
  }
140
488
 
141
489
  override fun onPrepareOptionsMenu(menu: Menu) {
142
- updateToolbarMenu(menu)
490
+ // If the screen is a transparent modal with hidden header we don't want to update the toolbar
491
+ // menu because it may erase the menu of the previous screen (which is still visible in these
492
+ // circumstances). See here: https://github.com/software-mansion/react-native-screens/issues/2271
493
+ if (!screen.isTransparent() || screen.headerConfig?.isHeaderHidden == false) {
494
+ updateToolbarMenu(menu)
495
+ }
143
496
  return super.onPrepareOptionsMenu(menu)
144
497
  }
145
498
 
146
- override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
499
+ override fun onCreateOptionsMenu(
500
+ menu: Menu,
501
+ inflater: MenuInflater,
502
+ ) {
147
503
  updateToolbarMenu(menu)
148
504
  return super.onCreateOptionsMenu(menu, inflater)
149
505
  }
@@ -205,24 +561,26 @@ class ScreenStackFragment : ScreenFragment, ScreenStackFragmentWrapper {
205
561
  }
206
562
  }
207
563
 
208
- override fun dismiss() {
209
- val container: ScreenContainer? = screen.container
210
- check(container is ScreenStack) { "ScreenStackFragment added into a non-stack container" }
211
- container.dismiss(this)
564
+ override fun dismissFromContainer() {
565
+ screenStack.dismiss(this)
212
566
  }
213
567
 
214
568
  private class ScreensCoordinatorLayout(
215
569
  context: Context,
216
- private val mFragment: ScreenFragment
217
- ) : CoordinatorLayout(context) {
218
- private val mAnimationListener: Animation.AnimationListener =
570
+ private val fragment: ScreenStackFragment,
571
+ // ) : CoordinatorLayout(context), ReactCompoundViewGroup, ReactHitSlopView {
572
+ ) : CoordinatorLayout(context),
573
+ ReactPointerEventsView {
574
+ override fun onApplyWindowInsets(insets: WindowInsets?): WindowInsets = super.onApplyWindowInsets(insets)
575
+
576
+ private val animationListener: Animation.AnimationListener =
219
577
  object : Animation.AnimationListener {
220
578
  override fun onAnimationStart(animation: Animation) {
221
- mFragment.onViewAnimationStart()
579
+ fragment.onViewAnimationStart()
222
580
  }
223
581
 
224
582
  override fun onAnimationEnd(animation: Animation) {
225
- mFragment.onViewAnimationEnd()
583
+ fragment.onViewAnimationEnd()
226
584
  }
227
585
 
228
586
  override fun onAnimationRepeat(animation: Animation) {}
@@ -238,23 +596,25 @@ class ScreenStackFragment : ScreenFragment, ScreenStackFragmentWrapper {
238
596
  // and also this is not necessary when going back since the lifecycle methods
239
597
  // are correctly dispatched then.
240
598
  // We also add fakeAnimation to the set of animations, which sends the progress of animation
241
- val fakeAnimation = ScreensAnimation(mFragment).apply { duration = animation.duration }
242
-
243
- if (animation is AnimationSet && !mFragment.isRemoving) {
244
- animation.apply {
245
- addAnimation(fakeAnimation)
246
- setAnimationListener(mAnimationListener)
247
- }.also {
248
- super.startAnimation(it)
249
- }
599
+ val fakeAnimation = ScreensAnimation(fragment).apply { duration = animation.duration }
600
+
601
+ if (animation is AnimationSet && !fragment.isRemoving) {
602
+ animation
603
+ .apply {
604
+ addAnimation(fakeAnimation)
605
+ setAnimationListener(animationListener)
606
+ }.also {
607
+ super.startAnimation(it)
608
+ }
250
609
  } else {
251
- AnimationSet(true).apply {
252
- addAnimation(animation)
253
- addAnimation(fakeAnimation)
254
- setAnimationListener(mAnimationListener)
255
- }.also {
256
- super.startAnimation(it)
257
- }
610
+ AnimationSet(true)
611
+ .apply {
612
+ addAnimation(animation)
613
+ addAnimation(fakeAnimation)
614
+ setAnimationListener(animationListener)
615
+ }.also {
616
+ super.startAnimation(it)
617
+ }
258
618
  }
259
619
  }
260
620
 
@@ -270,10 +630,37 @@ class ScreenStackFragment : ScreenFragment, ScreenStackFragmentWrapper {
270
630
  super.clearFocus()
271
631
  }
272
632
  }
633
+
634
+ // override fun reactTagForTouch(touchX: Float, touchY: Float): Int {
635
+ // throw IllegalStateException("Screen wrapper should never be asked for the view tag")
636
+ // }
637
+ //
638
+ // override fun interceptsTouchEvent(touchX: Float, touchY: Float): Boolean {
639
+ // return false
640
+ // }
641
+ //
642
+ // override fun getHitSlopRect(): Rect? {
643
+ // val screen: Screen = fragment.screen
644
+ // // left – The X coordinate of the left side of the rectangle
645
+ // // top – The Y coordinate of the top of the rectangle i
646
+ // // right – The X coordinate of the right side of the rectangle
647
+ // // bottom – The Y coordinate of the bottom of the rectangle
648
+ // return Rect(screen.x.toInt(), -screen.y.toInt(), screen.x.toInt() + screen.width, screen.y.toInt() + screen.height)
649
+ // }
650
+
651
+ // We set pointer events to BOX_NONE, because we don't want the ScreensCoordinatorLayout
652
+ // to be target of react gestures and effectively prevent interaction with screens
653
+ // underneath the current screen (useful in `modal` & `formSheet` presentation).
654
+ override fun getPointerEvents(): PointerEvents = PointerEvents.BOX_NONE
273
655
  }
274
656
 
275
- private class ScreensAnimation(private val mFragment: ScreenFragment) : Animation() {
276
- override fun applyTransformation(interpolatedTime: Float, t: Transformation) {
657
+ private class ScreensAnimation(
658
+ private val mFragment: ScreenFragment,
659
+ ) : Animation() {
660
+ override fun applyTransformation(
661
+ interpolatedTime: Float,
662
+ t: Transformation,
663
+ ) {
277
664
  super.applyTransformation(interpolatedTime, t)
278
665
  // interpolated time should be the progress of the current transition
279
666
  mFragment.dispatchTransitionProgressEvent(interpolatedTime, !mFragment.isResumed)
@@ -5,11 +5,18 @@ import androidx.appcompat.widget.Toolbar
5
5
  interface ScreenStackFragmentWrapper : ScreenFragmentWrapper {
6
6
  // Toolbar management
7
7
  fun removeToolbar()
8
+
8
9
  fun setToolbar(toolbar: Toolbar)
10
+
9
11
  fun setToolbarShadowHidden(hidden: Boolean)
12
+
10
13
  fun setToolbarTranslucent(translucent: Boolean)
11
14
 
12
15
  // Navigation
13
16
  fun canNavigateBack(): Boolean
14
- fun dismiss()
17
+
18
+ /**
19
+ * Removes this fragment from the container it/it's screen belongs to.
20
+ */
21
+ fun dismissFromContainer()
15
22
  }