react-native-screens 5.0.0-alpha.3 → 5.0.0-alpha.4

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 (337) hide show
  1. package/README.md +0 -4
  2. package/android/build.gradle +1 -0
  3. package/android/consumer-rules.pro +3 -0
  4. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderConfigViewGroup.kt +2 -0
  5. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderSubviewViewGroup.kt +2 -0
  6. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledViewGroup.kt +18 -3
  7. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +7 -3
  9. package/android/src/main/java/com/swmansion/rnscreens/common/colorscheme/ColorSchemeCoordinator.kt +11 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +9 -0
  11. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetAppearanceCoordinator.kt +2 -2
  12. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetBehaviorController.kt +2 -2
  13. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetDimensionsCoordinator.kt +6 -6
  14. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetKeyboardCoordinator.kt +1 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetNativeDismissCoordinator.kt +2 -2
  16. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetAvailableHeightProvider.kt +1 -1
  17. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetContainer.kt +1 -1
  18. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialog.kt +1 -1
  19. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialogManager.kt +26 -8
  20. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeDelegate.kt +1 -1
  21. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeProvider.kt +1 -1
  22. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetDialogEventEmitter.kt +1 -1
  23. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetConfig.kt +1 -1
  24. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetDetents.kt +1 -1
  25. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetAnimatorFactory.kt +1 -1
  26. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetDimmingManager.kt +6 -18
  27. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetDismissalOrigin.kt +1 -1
  28. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentation.kt +10 -10
  29. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationManager.kt +1 -1
  30. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationState.kt +1 -1
  31. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetStackRegistry.kt +1 -1
  32. package/android/src/main/java/com/swmansion/rnscreens/ext/FragmentManagerExt.kt +6 -0
  33. package/android/src/main/java/com/swmansion/rnscreens/helpers/FragmentManagerHelper.kt +0 -3
  34. package/android/src/main/java/com/swmansion/rnscreens/helpers/NoTintDrawable.kt +31 -0
  35. package/android/src/main/java/com/swmansion/rnscreens/helpers/ViewFinder.kt +0 -17
  36. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +29 -2
  37. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenContainer.kt +35 -3
  38. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +13 -0
  39. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderConfig.kt +7 -1
  40. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderSubviewManager.kt +7 -0
  41. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackViewManager.kt +6 -0
  42. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/DimmingView.kt +2 -0
  43. package/android/src/main/java/com/swmansion/rnscreens/legacy/stack/views/ScreensCoordinatorLayout.kt +2 -0
  44. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapper.kt +3 -3
  45. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapperViewManager.kt +1 -1
  46. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDetentChangedEvent.kt +1 -1
  47. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidAppearEvent.kt +1 -1
  48. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidDisappearEvent.kt +1 -1
  49. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDismissEvent.kt +1 -1
  50. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissEvent.kt +1 -1
  51. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissPreventedEvent.kt +1 -1
  52. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetSyncFlushEvent.kt +1 -1
  53. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillAppearEvent.kt +1 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillDisappearEvent.kt +1 -1
  55. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetContentView.kt +3 -3
  56. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHost.kt +5 -3
  57. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostEventEmitter.kt +11 -11
  58. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostViewManager.kt +10 -10
  59. package/android/src/main/java/com/swmansion/rnscreens/safearea/OnInterfaceInsetsChangeListener.kt +15 -0
  60. package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaProvider.kt +8 -8
  61. package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaView.kt +3 -2
  62. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +0 -52
  63. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +112 -59
  64. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +1 -1
  65. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderToolbar.kt +74 -0
  66. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +4 -73
  67. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +5 -2
  68. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +0 -6
  69. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +3 -7
  70. package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperation.kt +1 -0
  71. package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperationExecutor.kt +2 -1
  72. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +57 -19
  73. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerDelegate.kt +7 -0
  74. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerUpdateCoordinator.kt +5 -3
  75. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +14 -5
  76. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackUpdateBatchStateProviding.kt +10 -0
  77. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/PreventNativeDismissCallback.kt +2 -2
  78. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +33 -12
  79. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceApplicator.kt +106 -10
  80. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +44 -3
  81. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceModel.kt +3 -0
  82. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/CustomBottomNavigationView.kt +21 -1
  83. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +28 -13
  84. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainerDelegate.kt +11 -0
  85. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +12 -2
  86. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +41 -17
  87. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenDelegate.kt +6 -0
  88. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIcon.kt +82 -0
  89. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIconTinting.kt +17 -0
  90. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenViewManager.kt +26 -19
  91. package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +14 -7
  92. package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +22 -6
  93. package/ios/RNSEnums.h +14 -1
  94. package/ios/helpers/image/RNSImageLoadingHelper.h +7 -0
  95. package/ios/helpers/image/RNSImageLoadingHelper.mm +9 -0
  96. package/ios/legacy/RNSBarButtonItem.mm +15 -0
  97. package/ios/legacy/RNSConvert.h +6 -0
  98. package/ios/legacy/RNSConvert.mm +17 -0
  99. package/ios/legacy/RNSNavigationBar.h +31 -0
  100. package/ios/legacy/RNSNavigationBar.mm +15 -0
  101. package/ios/legacy/RNSScreen.mm +122 -12
  102. package/ios/legacy/RNSScreenContentWrapper.mm +4 -1
  103. package/ios/legacy/RNSScreenStack.mm +202 -15
  104. package/ios/legacy/RNSScreenStackHeaderConfig.h +30 -0
  105. package/ios/legacy/RNSScreenStackHeaderConfig.mm +70 -17
  106. package/ios/legacy/RNSScreenStackHeaderSubview.mm +33 -0
  107. package/ios/safe-area/RNSSafeAreaViewComponentView.mm +1 -12
  108. package/ios/stack/conversion/RNSConversions-Stack.h +30 -0
  109. package/ios/stack/conversion/RNSConversions-Stack.mm +79 -0
  110. package/ios/stack/header/RNSHeaderItemVisibilityPriority.h +9 -0
  111. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +4 -0
  112. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +40 -6
  113. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +5 -0
  114. package/ios/stack/header/RNSStackHeaderContentFactory.mm +3 -0
  115. package/ios/stack/header/RNSStackHeaderItemComponentView.h +9 -2
  116. package/ios/stack/header/RNSStackHeaderItemComponentView.mm +57 -3
  117. package/ios/stack/header/RNSStackHeaderItemDataProviding.h +5 -0
  118. package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +13 -0
  119. package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +24 -0
  120. package/ios/stack/header/RNSStackHeaderMenuFinder.h +8 -1
  121. package/ios/stack/header/RNSStackHeaderMenuFinder.mm +26 -9
  122. package/ios/stack/screen/RNSStackScreenComponentView.h +2 -1
  123. package/ios/stack/screen/RNSStackScreenComponentView.mm +23 -0
  124. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +81 -8
  125. package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +79 -16
  126. package/ios/tabs/RNSTabBarItemCoordinator.h +16 -0
  127. package/ios/tabs/RNSTabBarItemCoordinator.mm +143 -0
  128. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h +24 -0
  129. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm +22 -0
  130. package/ios/tabs/conversion/RNSConversions-Tabs.h +22 -0
  131. package/ios/tabs/conversion/RNSConversions-Tabs.mm +97 -3
  132. package/ios/tabs/host/RNSTabBarController.h +16 -0
  133. package/ios/tabs/host/RNSTabBarController.mm +516 -107
  134. package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
  135. package/ios/tabs/host/RNSTabsHostComponentView.mm +32 -2
  136. package/ios/tabs/screen/RNSTabsScreenComponentView.h +21 -0
  137. package/ios/tabs/screen/RNSTabsScreenComponentView.mm +54 -69
  138. package/ios/tabs/screen/RNSTabsScreenViewController.mm +1 -0
  139. package/ios/utils/RNSDefines.h +12 -7
  140. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +3 -2
  141. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  142. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +8 -3
  143. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  144. package/lib/commonjs/components/stack/header/StackHeaderConfig.js +17 -0
  145. package/lib/commonjs/components/stack/header/StackHeaderConfig.js.map +1 -0
  146. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
  147. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  148. package/lib/commonjs/components/stack/host/StackHost.js +8 -1
  149. package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
  150. package/lib/commonjs/components/stack/host/StackHost.web.js +0 -2
  151. package/lib/commonjs/components/stack/host/StackHost.web.js.map +1 -1
  152. package/lib/commonjs/components/stack/index.js.map +1 -1
  153. package/lib/commonjs/components/tabs/host/TabsHost.ios.js +2 -0
  154. package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
  155. package/lib/commonjs/components/tabs/host/{TabsHost.web.js → TabsHost.js} +1 -1
  156. package/lib/commonjs/components/tabs/host/TabsHost.js.map +1 -0
  157. package/lib/commonjs/components/tabs/index.js.map +1 -1
  158. package/lib/commonjs/components/tabs/screen/TabsScreen.android.js +3 -1
  159. package/lib/commonjs/components/tabs/screen/TabsScreen.android.js.map +1 -1
  160. package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js +10 -1
  161. package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js.map +1 -1
  162. package/lib/commonjs/components/tabs/screen/{TabsScreen.web.js → TabsScreen.js} +1 -1
  163. package/lib/commonjs/components/tabs/screen/TabsScreen.js.map +1 -0
  164. package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js → tabs/screen/TabsScreenIcon.types.js} +1 -1
  165. package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
  166. package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  167. package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  168. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  169. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  170. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  171. package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  172. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
  173. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  174. package/lib/commonjs/legacy/components/ScreenStackItem.js +31 -11
  175. package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
  176. package/lib/module/components/stack/header/StackHeaderConfig.android.js +4 -3
  177. package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  178. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +9 -4
  179. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  180. package/lib/module/components/stack/header/StackHeaderConfig.js +10 -0
  181. package/lib/module/components/stack/header/StackHeaderConfig.js.map +1 -0
  182. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
  183. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  184. package/lib/module/components/stack/host/StackHost.js +9 -2
  185. package/lib/module/components/stack/host/StackHost.js.map +1 -1
  186. package/lib/module/components/stack/host/StackHost.web.js +0 -3
  187. package/lib/module/components/stack/host/StackHost.web.js.map +1 -1
  188. package/lib/module/components/stack/index.js.map +1 -1
  189. package/lib/module/components/tabs/host/TabsHost.ios.js +2 -0
  190. package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
  191. package/{src/components/tabs/host/TabsHost.web.tsx → lib/module/components/tabs/host/TabsHost.js} +1 -2
  192. package/lib/module/components/tabs/host/TabsHost.js.map +1 -0
  193. package/lib/module/components/tabs/index.js.map +1 -1
  194. package/lib/module/components/tabs/screen/TabsScreen.android.js +3 -1
  195. package/lib/module/components/tabs/screen/TabsScreen.android.js.map +1 -1
  196. package/lib/module/components/tabs/screen/TabsScreen.ios.js +10 -1
  197. package/lib/module/components/tabs/screen/TabsScreen.ios.js.map +1 -1
  198. package/{src/components/tabs/screen/TabsScreen.web.tsx → lib/module/components/tabs/screen/TabsScreen.js} +1 -2
  199. package/lib/module/components/tabs/screen/TabsScreen.js.map +1 -0
  200. package/lib/module/components/tabs/screen/TabsScreenIcon.types.js +2 -0
  201. package/lib/module/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
  202. package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  203. package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  204. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  205. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  206. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  207. package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  208. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
  209. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  210. package/lib/module/legacy/components/ScreenStackItem.js +31 -11
  211. package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
  212. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts +6 -3
  213. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
  214. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +4 -3
  215. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  216. package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts +8 -0
  217. package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts.map +1 -0
  218. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts +6 -3
  219. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  220. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +137 -2
  221. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  222. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +2 -0
  223. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts.map +1 -1
  224. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
  225. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +5 -0
  226. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
  227. package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
  228. package/lib/typescript/components/stack/host/StackHost.types.d.ts +24 -1
  229. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  230. package/lib/typescript/components/stack/host/StackHost.web.d.ts +1 -3
  231. package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
  232. package/lib/typescript/components/stack/index.d.ts +4 -3
  233. package/lib/typescript/components/stack/index.d.ts.map +1 -1
  234. package/lib/typescript/components/tabs/host/TabsHost.d.ts +5 -0
  235. package/lib/typescript/components/tabs/host/TabsHost.d.ts.map +1 -0
  236. package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
  237. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +56 -0
  238. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
  239. package/lib/typescript/components/tabs/index.d.ts +4 -6
  240. package/lib/typescript/components/tabs/index.d.ts.map +1 -1
  241. package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts.map +1 -1
  242. package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts +42 -7
  243. package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts.map +1 -1
  244. package/lib/typescript/components/tabs/screen/TabsScreen.d.ts +5 -0
  245. package/lib/typescript/components/tabs/screen/TabsScreen.d.ts.map +1 -0
  246. package/lib/typescript/components/tabs/screen/TabsScreen.ios.d.ts.map +1 -1
  247. package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts +78 -13
  248. package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts.map +1 -1
  249. package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts +91 -0
  250. package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts.map +1 -0
  251. package/lib/typescript/components/tabs/screen/index.d.ts +1 -0
  252. package/lib/typescript/components/tabs/screen/index.d.ts.map +1 -1
  253. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -0
  254. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
  255. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +1 -0
  256. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
  257. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +4 -0
  258. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  259. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +6 -0
  260. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  261. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +3 -0
  262. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  263. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +6 -0
  264. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
  265. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +10 -1
  266. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
  267. package/lib/typescript/legacy/components/ScreenStackItem.d.ts +25 -0
  268. package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
  269. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +4 -0
  270. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
  271. package/lib/typescript/legacy/types.d.ts +30 -0
  272. package/lib/typescript/legacy/types.d.ts.map +1 -1
  273. package/package.json +4 -2
  274. package/src/components/stack/header/StackHeaderConfig.android.tsx +6 -20
  275. package/src/components/stack/header/StackHeaderConfig.android.types.ts +4 -3
  276. package/src/components/stack/header/StackHeaderConfig.ios.tsx +10 -16
  277. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +148 -2
  278. package/src/components/stack/header/StackHeaderConfig.tsx +12 -0
  279. package/src/components/stack/header/StackHeaderConfig.types.ts +2 -0
  280. package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +9 -1
  281. package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +5 -0
  282. package/src/components/stack/host/StackHost.tsx +10 -3
  283. package/src/components/stack/host/StackHost.types.ts +25 -1
  284. package/src/components/stack/host/StackHost.web.tsx +1 -4
  285. package/src/components/stack/index.ts +9 -1
  286. package/src/components/tabs/host/TabsHost.ios.tsx +2 -0
  287. package/src/components/tabs/host/TabsHost.ios.types.ts +60 -0
  288. package/src/components/tabs/host/TabsHost.tsx +7 -0
  289. package/src/components/tabs/index.ts +9 -0
  290. package/src/components/tabs/screen/TabsScreen.android.tsx +8 -3
  291. package/src/components/tabs/screen/TabsScreen.android.types.ts +42 -7
  292. package/src/components/tabs/screen/TabsScreen.ios.tsx +22 -5
  293. package/src/components/tabs/screen/TabsScreen.ios.types.ts +79 -17
  294. package/src/components/tabs/screen/TabsScreen.tsx +7 -0
  295. package/src/components/tabs/screen/TabsScreenIcon.types.ts +117 -0
  296. package/src/components/tabs/screen/index.ts +1 -0
  297. package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -0
  298. package/src/fabric/legacy/ScreenStackNativeComponent.ts +2 -0
  299. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +11 -0
  300. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +11 -0
  301. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +7 -0
  302. package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +9 -0
  303. package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +20 -2
  304. package/src/legacy/components/ScreenStackItem.tsx +59 -12
  305. package/src/legacy/types.ts +31 -0
  306. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenModalFragment.kt +0 -281
  307. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogRootView.kt +0 -104
  308. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogScreen.kt +0 -26
  309. package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js +0 -10
  310. package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js.map +0 -1
  311. package/lib/commonjs/components/tabs/host/TabsHost.d.js +0 -2
  312. package/lib/commonjs/components/tabs/host/TabsHost.d.js.map +0 -1
  313. package/lib/commonjs/components/tabs/host/TabsHost.web.js.map +0 -1
  314. package/lib/commonjs/components/tabs/screen/TabsScreen.d.js +0 -2
  315. package/lib/commonjs/components/tabs/screen/TabsScreen.d.js.map +0 -1
  316. package/lib/commonjs/components/tabs/screen/TabsScreen.web.js.map +0 -1
  317. package/lib/module/components/stack/header/StackHeaderConfig.d.js +0 -2
  318. package/lib/module/components/stack/header/StackHeaderConfig.web.js +0 -4
  319. package/lib/module/components/stack/header/StackHeaderConfig.web.js.map +0 -1
  320. package/lib/module/components/tabs/host/TabsHost.d.js +0 -2
  321. package/lib/module/components/tabs/host/TabsHost.d.js.map +0 -1
  322. package/lib/module/components/tabs/host/TabsHost.web.js +0 -4
  323. package/lib/module/components/tabs/host/TabsHost.web.js.map +0 -1
  324. package/lib/module/components/tabs/screen/TabsScreen.d.js +0 -2
  325. package/lib/module/components/tabs/screen/TabsScreen.d.js.map +0 -1
  326. package/lib/module/components/tabs/screen/TabsScreen.web.js +0 -4
  327. package/lib/module/components/tabs/screen/TabsScreen.web.js.map +0 -1
  328. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +0 -7
  329. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +0 -1
  330. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +0 -7
  331. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +0 -1
  332. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +0 -7
  333. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +0 -1
  334. package/src/components/stack/header/StackHeaderConfig.d.ts +0 -22
  335. package/src/components/stack/header/StackHeaderConfig.web.tsx +0 -5
  336. package/src/components/tabs/host/TabsHost.d.ts +0 -12
  337. package/src/components/tabs/screen/TabsScreen.d.ts +0 -12
@@ -17,11 +17,15 @@ import com.facebook.react.modules.core.ReactChoreographer
17
17
  import com.facebook.react.uimanager.ThemedReactContext
18
18
  import com.facebook.react.uimanager.UIManagerHelper
19
19
  import com.swmansion.rnscreens.common.FragmentProviding
20
+ import com.swmansion.rnscreens.common.container.Container
21
+ import com.swmansion.rnscreens.common.container.ContainerItem
22
+ import com.swmansion.rnscreens.common.container.ParentContainerItemRegistry
20
23
  import com.swmansion.rnscreens.legacy.events.ScreenDismissedEvent
21
24
 
22
25
  open class ScreenContainer(
23
26
  context: Context?,
24
- ) : ViewGroup(context) {
27
+ ) : ViewGroup(context),
28
+ Container {
25
29
  @JvmField
26
30
  protected val screenWrappers = ArrayList<ScreenFragmentWrapper>()
27
31
 
@@ -43,6 +47,10 @@ open class ScreenContainer(
43
47
  }
44
48
  private var parentScreenWrapper: ScreenFragmentWrapper? = null
45
49
 
50
+ private val parentContainerRegistry = ParentContainerItemRegistry()
51
+
52
+ override fun shouldDelayChildPressedState(): Boolean = false
53
+
46
54
  override fun onLayout(
47
55
  changed: Boolean,
48
56
  l: Int,
@@ -275,16 +283,27 @@ open class ScreenContainer(
275
283
 
276
284
  override fun onAttachedToWindow() {
277
285
  super.onAttachedToWindow()
286
+ parentContainerRegistry.attach(this)
278
287
  isAttached = true
279
288
  setupFragmentManager()
280
289
  }
281
290
 
282
- /** Removes fragments from fragment manager that are attached to this container */
291
+ /**
292
+ * Removes fragments from fragment manager that are attached to this container, including
293
+ * fragments of screens already removed from it whose deferred removal hasn't run yet.
294
+ */
283
295
  private fun removeMyFragments(fragmentManager: FragmentManager) {
284
296
  val transaction = fragmentManager.beginTransaction()
285
297
  var hasFragments = false
286
298
  for (fragment in fragmentManager.fragments) {
287
- if (fragment is ScreenFragment && fragment.screen.container === this) {
299
+ // `removeScreenAt` / `removeAllScreens` clear `screen.container` immediately but defer
300
+ // the fragment removal, so also match such orphans by the container view id.
301
+ if (fragment is ScreenFragment &&
302
+ (
303
+ fragment.screen.container === this ||
304
+ (fragment.screen.container == null && fragment.id == id)
305
+ )
306
+ ) {
288
307
  transaction.remove(fragment)
289
308
  hasFragments = true
290
309
  }
@@ -310,6 +329,7 @@ open class ScreenContainer(
310
329
 
311
330
  parentScreenWrapper?.removeChildScreenContainer(this)
312
331
  parentScreenWrapper = null
332
+ parentContainerRegistry.detach(this)
313
333
 
314
334
  super.onDetachedFromWindow()
315
335
  isAttached = false
@@ -444,4 +464,16 @@ open class ScreenContainer(
444
464
  protected open fun notifyContainerUpdate() {
445
465
  topScreen?.fragmentWrapper?.onContainerUpdate()
446
466
  }
467
+
468
+ // region Container
469
+
470
+ // Only the currently shown (top) screen is consulted.
471
+ override fun resolveCurrentContentScrollView(): ViewGroup? = topScreen?.findContentScrollView()
472
+
473
+ override fun wantsToPreventStackNativeDismiss(): ContainerItem? = topScreen?.wantsToPreventStackNativeDismiss()
474
+
475
+ // Nothing to pop here - the request goes to the shown screen's nested container.
476
+ override fun requestPopToRoot(): Boolean = topScreen?.resolveNestedContainer()?.requestPopToRoot() == true
477
+
478
+ // endregion
447
479
  }
@@ -6,6 +6,7 @@ import android.os.Build
6
6
  import android.view.View
7
7
  import com.facebook.react.bridge.ReactContext
8
8
  import com.facebook.react.uimanager.UIManagerHelper
9
+ import com.swmansion.rnscreens.common.container.ContainerItem
9
10
  import com.swmansion.rnscreens.legacy.bottomsheet.requiresEnterTransitionPostponing
10
11
  import com.swmansion.rnscreens.legacy.bottomsheet.sheetShouldUseDimmingView
11
12
  import com.swmansion.rnscreens.legacy.bottomsheet.usesFormSheetPresentation
@@ -440,6 +441,18 @@ class ScreenStack(
440
441
  }
441
442
  }
442
443
 
444
+ // region Container
445
+
446
+ override fun wantsToPreventStackNativeDismiss(): ContainerItem? =
447
+ screenWrappers
448
+ .asReversed()
449
+ .filter { !dismissedWrappers.contains(it) }
450
+ .firstNotNullOfOrNull { it.screen.wantsToPreventStackNativeDismiss() }
451
+
452
+ override fun requestPopToRoot(): Boolean = popToRoot() || super.requestPopToRoot()
453
+
454
+ // endregion
455
+
443
456
  companion object {
444
457
  const val TAG = "ScreenStack"
445
458
 
@@ -231,7 +231,13 @@ class ScreenStackHeaderConfig(
231
231
 
232
232
  fun onUpdate() {
233
233
  val stack = screenStack
234
- val isTop = stack == null || stack.topScreen == parent
234
+ // A screen that is not in a stack has nothing to configure a header for, and
235
+ // `canNavigateBack()` below asserts on exactly this condition. Treating a null
236
+ // stack as "is top" let a detached screen reach that assertion and throw.
237
+ if (stack == null) {
238
+ return
239
+ }
240
+ val isTop = stack.topScreen == parent
235
241
 
236
242
  if (!isAttachedToWindow || !isTop || isDestroyed) {
237
243
  return
@@ -47,6 +47,13 @@ class ScreenStackHeaderSubviewManager :
47
47
  Log.w("[RNScreens]", "hidesSharedBackground prop is not available on Android")
48
48
  }
49
49
 
50
+ override fun setVisibilityPriority(
51
+ view: ScreenStackHeaderSubview,
52
+ visibilityPriority: String?,
53
+ ) {
54
+ Log.w("[RNScreens]", "visibilityPriority prop is not available on Android")
55
+ }
56
+
50
57
  // synchronousShadowStateUpdatesEnabled is not available on Android atm,
51
58
  // however we must override their setters
52
59
  override fun setSynchronousShadowStateUpdatesEnabled(
@@ -77,6 +77,12 @@ class ScreenStackViewManager :
77
77
  value: Int?,
78
78
  ) = Unit
79
79
 
80
+ // tvOS-only: UIKit Menu back gesture handling lives on iOS/tvOS.
81
+ override fun setDisableDefaultMenuAction(
82
+ view: ScreenStack,
83
+ value: Boolean,
84
+ ) = Unit
85
+
80
86
  companion object {
81
87
  const val REACT_CLASS = "RNSScreenStack"
82
88
  }
@@ -51,6 +51,8 @@ internal class DimmingView(
51
51
  b: Int,
52
52
  ) = Unit
53
53
 
54
+ override fun shouldDelayChildPressedState(): Boolean = false
55
+
54
56
  // We do not want to have any action defined here. We just want listeners notified that the click happened.
55
57
  @SuppressLint("ClickableViewAccessibility")
56
58
  override fun onTouchEvent(event: MotionEvent?): Boolean {
@@ -111,6 +111,8 @@ internal class ScreensCoordinatorLayout(
111
111
  }
112
112
  }
113
113
 
114
+ override fun shouldDelayChildPressedState(): Boolean = fragment.screen.usesFormSheetPresentation()
115
+
114
116
  override fun onLayout(
115
117
  changed: Boolean,
116
118
  l: Int,
@@ -1,9 +1,9 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.contentwrapper
1
+ package com.swmansion.rnscreens.react.modals.formsheet.contentwrapper
2
2
 
3
3
  import android.content.Context
4
4
  import com.facebook.react.views.view.ReactViewGroup
5
- import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeDelegate
6
- import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeProvider
5
+ import com.swmansion.rnscreens.core.modals.formsheet.interfaces.FormSheetContentSizeChangeDelegate
6
+ import com.swmansion.rnscreens.core.modals.formsheet.interfaces.FormSheetContentSizeChangeProvider
7
7
 
8
8
  class FormSheetContentWrapper(
9
9
  context: Context,
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.contentwrapper
1
+ package com.swmansion.rnscreens.react.modals.formsheet.contentwrapper
2
2
 
3
3
  import com.facebook.react.module.annotations.ReactModule
4
4
  import com.facebook.react.uimanager.ThemedReactContext
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.event
1
+ package com.swmansion.rnscreens.react.modals.formsheet.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.event
1
+ package com.swmansion.rnscreens.react.modals.formsheet.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.event
1
+ package com.swmansion.rnscreens.react.modals.formsheet.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.event
1
+ package com.swmansion.rnscreens.react.modals.formsheet.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.event
1
+ package com.swmansion.rnscreens.react.modals.formsheet.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.event
1
+ package com.swmansion.rnscreens.react.modals.formsheet.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -1,6 +1,6 @@
1
1
  // Implementation adapted from `expo`: https://github.com/expo/expo/pull/45775
2
2
 
3
- package com.swmansion.rnscreens.modals.formsheet.react.event
3
+ package com.swmansion.rnscreens.react.modals.formsheet.event
4
4
 
5
5
  import com.facebook.react.bridge.Arguments
6
6
  import com.facebook.react.bridge.WritableMap
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.event
1
+ package com.swmansion.rnscreens.react.modals.formsheet.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.event
1
+ package com.swmansion.rnscreens.react.modals.formsheet.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.host
1
+ package com.swmansion.rnscreens.react.modals.formsheet.host
2
2
 
3
3
  import android.annotation.SuppressLint
4
4
  import android.content.Context
@@ -17,9 +17,9 @@ import com.facebook.react.uimanager.UIManagerHelper
17
17
  import com.facebook.react.uimanager.common.UIManagerType
18
18
  import com.facebook.react.uimanager.events.EventDispatcher
19
19
  import com.facebook.react.views.view.ReactViewGroup
20
+ import com.swmansion.rnscreens.core.modals.formsheet.interfaces.FormSheetContentSizeChangeDelegate
21
+ import com.swmansion.rnscreens.core.modals.formsheet.interfaces.FormSheetContentSizeChangeProvider
20
22
  import com.swmansion.rnscreens.helpers.getFabricUIManagerNotNull
21
- import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeDelegate
22
- import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeProvider
23
23
 
24
24
  @OptIn(UnstableReactNativeAPI::class)
25
25
  @SuppressLint("ViewConstructor")
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.host
1
+ package com.swmansion.rnscreens.react.modals.formsheet.host
2
2
 
3
3
  import android.view.View
4
4
  import android.view.ViewGroup
@@ -6,8 +6,8 @@ import com.facebook.react.uimanager.PointerEvents
6
6
  import com.facebook.react.uimanager.ReactPointerEventsView
7
7
  import com.facebook.react.uimanager.ThemedReactContext
8
8
  import com.swmansion.rnscreens.common.ShadowStateProxy
9
- import com.swmansion.rnscreens.modals.formsheet.native.core.FormSheetDialogManager
10
- import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetConfig
9
+ import com.swmansion.rnscreens.core.modals.formsheet.dialog.FormSheetDialogManager
10
+ import com.swmansion.rnscreens.core.modals.formsheet.model.FormSheetConfig
11
11
 
12
12
  class FormSheetHost(
13
13
  val reactContext: ThemedReactContext,
@@ -42,6 +42,8 @@ class FormSheetHost(
42
42
  FormSheetDialogManager(
43
43
  context = context,
44
44
  contentView = sheetContentView,
45
+ // ReactContext wraps the application context, not the activity.
46
+ activityProvider = { reactContext.currentActivity },
45
47
  )
46
48
 
47
49
  init {
@@ -1,17 +1,17 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.host
1
+ package com.swmansion.rnscreens.react.modals.formsheet.host
2
2
 
3
3
  import com.facebook.react.bridge.ReactContext
4
4
  import com.swmansion.rnscreens.common.event.BaseEventEmitter
5
- import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetDialogEventEmitter
6
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetDetentChangedEvent
7
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetDidAppearEvent
8
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetDidDisappearEvent
9
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetDismissEvent
10
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetNativeDismissEvent
11
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetNativeDismissPreventedEvent
12
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetSyncFlushEvent
13
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetWillAppearEvent
14
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetWillDisappearEvent
5
+ import com.swmansion.rnscreens.core.modals.formsheet.interfaces.FormSheetDialogEventEmitter
6
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetDetentChangedEvent
7
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetDidAppearEvent
8
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetDidDisappearEvent
9
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetDismissEvent
10
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetNativeDismissEvent
11
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetNativeDismissPreventedEvent
12
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetSyncFlushEvent
13
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetWillAppearEvent
14
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetWillDisappearEvent
15
15
 
16
16
  internal class FormSheetHostEventEmitter(
17
17
  reactContext: ReactContext,
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.react.host
1
+ package com.swmansion.rnscreens.react.modals.formsheet.host
2
2
 
3
3
  import android.view.View
4
4
  import com.facebook.react.bridge.ReadableArray
@@ -11,15 +11,15 @@ import com.facebook.react.uimanager.ViewManagerDelegate
11
11
  import com.facebook.react.viewmanagers.RNSFormSheetHostManagerDelegate
12
12
  import com.facebook.react.viewmanagers.RNSFormSheetHostManagerInterface
13
13
  import com.swmansion.rnscreens.helpers.makeEventRegistrationInfo
14
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetDetentChangedEvent
15
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetDidAppearEvent
16
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetDidDisappearEvent
17
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetDismissEvent
18
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetNativeDismissEvent
19
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetNativeDismissPreventedEvent
20
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetSyncFlushEvent
21
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetWillAppearEvent
22
- import com.swmansion.rnscreens.modals.formsheet.react.event.FormSheetWillDisappearEvent
14
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetDetentChangedEvent
15
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetDidAppearEvent
16
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetDidDisappearEvent
17
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetDismissEvent
18
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetNativeDismissEvent
19
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetNativeDismissPreventedEvent
20
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetSyncFlushEvent
21
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetWillAppearEvent
22
+ import com.swmansion.rnscreens.react.modals.formsheet.event.FormSheetWillDisappearEvent
23
23
 
24
24
  @ReactModule(name = FormSheetHostViewManager.REACT_CLASS)
25
25
  class FormSheetHostViewManager :
@@ -0,0 +1,15 @@
1
+ package com.swmansion.rnscreens.safearea
2
+
3
+ /**
4
+ * Receives notifications about changes to **interface** safe area insets from a [SafeAreaProvider].
5
+ */
6
+ interface OnInterfaceInsetsChangeListener {
7
+ /**
8
+ * Called by the [SafeAreaProvider] the listener is registered with when its **interface**
9
+ * safe area insets change. It may also be called with unchanged insets, so implementations
10
+ * should tolerate duplicate notifications.
11
+ *
12
+ * @param newInterfaceInsets the new **interface** safe area insets.
13
+ */
14
+ fun onInterfaceInsetsChange(newInterfaceInsets: EdgeInsets)
15
+ }
@@ -7,25 +7,25 @@ package com.swmansion.rnscreens.safearea
7
7
  * System insets (e.g. `systemBars`, `displayCutout`) are handled through Android inset
8
8
  * dispatch mechanism (via `onApplyWindowInsets`).
9
9
  *
10
- * Classes implementing this protocol are responsible for notifying `SafeAreaView`, which
11
- * registers as a listener, about changes to **interface** safe area insets.
10
+ * Classes implementing this protocol are responsible for notifying the registered
11
+ * [OnInterfaceInsetsChangeListener] about changes to **interface** safe area insets.
12
12
  */
13
13
  interface SafeAreaProvider {
14
14
  /**
15
15
  * Responsible for registering **interface** safe area insets listener.
16
16
  *
17
- * @param listener `SafeAreaView` instance that wants to receive notifications
18
- * about changes to **interface** safe area insets via `onInterfaceInsetsChange`.
17
+ * @param listener listener that wants to receive notifications about changes
18
+ * to **interface** safe area insets via `onInterfaceInsetsChange`.
19
19
  */
20
- fun setOnInterfaceInsetsChangeListener(listener: SafeAreaView)
20
+ fun setOnInterfaceInsetsChangeListener(listener: OnInterfaceInsetsChangeListener)
21
21
 
22
22
  /**
23
23
  * Responsible for unregistering **interface** safe area insets listener.
24
24
  *
25
- * @param listener `SafeAreaView` instance that wants to stop receiving notifications
26
- * about changes to **interface** safe area insets.
25
+ * @param listener listener that wants to stop receiving notifications about changes
26
+ * to **interface** safe area insets.
27
27
  */
28
- fun removeOnInterfaceInsetsChangeListener(listener: SafeAreaView)
28
+ fun removeOnInterfaceInsetsChangeListener(listener: OnInterfaceInsetsChangeListener)
29
29
 
30
30
  /**
31
31
  * Responsible for providing current **interface** safe area insets.
@@ -22,7 +22,8 @@ class SafeAreaView(
22
22
  private val reactContext: ThemedReactContext,
23
23
  ) : ReactViewGroup(reactContext),
24
24
  OnApplyWindowInsetsListener,
25
- ViewTreeObserver.OnPreDrawListener {
25
+ ViewTreeObserver.OnPreDrawListener,
26
+ OnInterfaceInsetsChangeListener {
26
27
  private var provider = WeakReference<SafeAreaProvider>(null)
27
28
  private var currentInterfaceInsets: EdgeInsets = EdgeInsets.ZERO
28
29
  private var currentSystemInsets: EdgeInsets = EdgeInsets.ZERO
@@ -80,7 +81,7 @@ class SafeAreaView(
80
81
  return providerCandidate as? SafeAreaProvider
81
82
  }
82
83
 
83
- fun onInterfaceInsetsChange(newInterfaceInsets: EdgeInsets) {
84
+ override fun onInterfaceInsetsChange(newInterfaceInsets: EdgeInsets) {
84
85
  if (newInterfaceInsets != currentInterfaceInsets) {
85
86
  currentInterfaceInsets = newInterfaceInsets
86
87
 
@@ -35,7 +35,6 @@ import com.swmansion.rnscreens.stack.header.appbar.StackHeaderAppBarLayout
35
35
  import com.swmansion.rnscreens.stack.header.appbar.StackHeaderContentScrimDrawable
36
36
  import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigurationProviding
37
37
  import com.swmansion.rnscreens.stack.header.config.StackHeaderType
38
- import com.swmansion.rnscreens.stack.header.subview.StackHeaderSubview
39
38
  import com.swmansion.rnscreens.utils.dpToPx
40
39
  import com.swmansion.rnscreens.utils.resolveColorAttr
41
40
  import com.swmansion.rnscreens.utils.resolveDrawableAttr
@@ -73,7 +72,6 @@ internal class StackHeaderApplicator(
73
72
  // Make sure that we receive insets, necessary when changing header mode in runtime.
74
73
  appBar.requestApplyInsets()
75
74
  populateAppBar(appBar, config)
76
- maybeApplyRTLCollapsingToolbarLayoutWorkaround(coordinatorLayout, config, appBar)
77
75
  appBar.toolbar.requestLayout()
78
76
 
79
77
  return appBar
@@ -162,7 +160,6 @@ internal class StackHeaderApplicator(
162
160
  internal fun applyTitleAndSubtitle(
163
161
  appBar: StackHeaderAppBarLayout,
164
162
  config: StackHeaderConfigurationProviding,
165
- isAppBarFullyCollapsed: Boolean,
166
163
  ) {
167
164
  when (appBar) {
168
165
  is StackHeaderAppBarLayout.Small -> {
@@ -182,15 +179,6 @@ internal class StackHeaderApplicator(
182
179
  // title/subtitle vertical split is recomputed only in onLayout. Force a layout
183
180
  // so toggling the subtitle at runtime reclaims the title space.
184
181
  ctl.requestLayout()
185
-
186
- // Material re-asserts the collapsed offset after a height change itself, but only
187
- // when maxLines > 1 (CollapsingToolbarLayout.onMeasure). With maxLines == 1 it never
188
- // does, so toggling the subtitle at runtime while collapsed leaves a stale offset —
189
- // setExpanded(false, false) is the closest public equivalent of Material's private
190
- // maybeSetPendingActionCollapsed().
191
- if (config.maxLines == 1 && isAppBarFullyCollapsed) {
192
- appBar.setExpanded(false, false)
193
- }
194
182
  }
195
183
  }
196
184
  }
@@ -611,46 +599,6 @@ internal class StackHeaderApplicator(
611
599
  private fun resolveDefaultOverflowIcon(toolbar: MaterialToolbar): Drawable? =
612
600
  AppCompatImageView(toolbar.context, null, androidx.appcompat.R.attr.actionOverflowButtonStyle).drawable
613
601
 
614
- private fun maybeApplyRTLCollapsingToolbarLayoutWorkaround(
615
- coordinatorLayout: StackHeaderCoordinatorLayout,
616
- config: StackHeaderConfigurationProviding,
617
- appBar: StackHeaderAppBarLayout,
618
- ) {
619
- // For collapsing headers, CTL lazily adds a MATCH_PARENT dummy view to the Toolbar
620
- // during the first onMeasure (ensureToolbar). We need our subviews at higher indices
621
- // than the dummy view so they get positioned first in RTL layout. Forcing a measure
622
- // triggers the dummy view creation.
623
- if (appBar is StackHeaderAppBarLayout.Collapsing && config.isRTL) {
624
- appBar.measure(
625
- View.MeasureSpec.makeMeasureSpec(coordinatorLayout.width, View.MeasureSpec.EXACTLY),
626
- View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
627
- )
628
- moveDummyViewToFront(appBar.toolbar)
629
- }
630
- }
631
-
632
- /**
633
- * CollapsingToolbarLayout adds a MATCH_PARENT dummy view to the Toolbar for title bounds
634
- * tracking. In RTL, the Toolbar iterates custom views in reverse child order — so the
635
- * dummy view (if last) gets processed first and consumes the entire layout cursor.
636
- * Moving it to index 0 ensures our subviews are processed first.
637
- *
638
- * See https://github.com/material-components/material-components-android/issues/1867.
639
- */
640
- private fun moveDummyViewToFront(toolbar: Toolbar) {
641
- for (i in 0 until toolbar.childCount) {
642
- val child = toolbar.getChildAt(i)
643
- // Assumes only StackHeaderSubview children exist in Collapsing toolbar besides
644
- // the CTL dummy view.
645
- if (child !is StackHeaderSubview) {
646
- val lp = child.layoutParams
647
- toolbar.removeViewAt(i)
648
- toolbar.addView(child, 0, lp)
649
- return
650
- }
651
- }
652
- }
653
-
654
602
  private fun buildTintList(
655
603
  normal: Int?,
656
604
  pressed: Int?,