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

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 (237) hide show
  1. package/Package.swift +87 -0
  2. package/README.md +0 -7
  3. package/android/src/main/cpp/NativeProxy.cpp +30 -6
  4. package/android/src/main/cpp/NativeProxy.h +7 -1
  5. package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +8 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
  7. package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
  8. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
  9. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
  10. package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
  11. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +3 -1
  12. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +2 -0
  13. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetBehaviorController.kt +49 -18
  14. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +65 -40
  15. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
  16. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +0 -6
  17. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetAvailableHeightProvider.kt +44 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialog.kt +35 -3
  19. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +33 -106
  20. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/interfaces/FormSheetDialogEventEmitter.kt +2 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +61 -15
  22. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetAnimatorFactory.kt +8 -9
  23. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDimmingManager.kt +115 -0
  24. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDismissalOrigin.kt +22 -0
  25. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentation.kt +173 -0
  26. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +141 -49
  27. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationState.kt +1 -1
  28. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetStackRegistry.kt +28 -0
  29. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetDismissEvent.kt +29 -0
  30. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/host/FormSheetHostEventEmitter.kt +7 -0
  31. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/host/FormSheetHostViewManager.kt +2 -0
  32. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +369 -58
  33. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
  34. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +143 -98
  35. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +155 -23
  36. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
  37. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
  38. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +170 -167
  39. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +385 -12
  40. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +0 -4
  41. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +32 -3
  42. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
  43. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +7 -2
  44. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +27 -280
  45. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
  46. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
  47. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +28 -20
  48. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +3 -55
  49. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +1 -10
  50. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuItemConfig.kt +1 -3
  51. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
  52. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +57 -6
  53. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +3 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +1 -0
  55. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +4 -3
  56. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueue.kt +23 -9
  57. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +103 -3
  58. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +13 -0
  59. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
  60. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +4 -0
  61. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +20 -1
  62. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
  63. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +2 -4
  64. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
  65. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +46 -25
  66. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +10 -0
  67. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
  68. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +17 -0
  69. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
  70. package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +7 -0
  71. package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
  72. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
  73. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
  74. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
  75. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
  76. package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
  77. package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
  78. package/ios/RNSEnums.h +2 -0
  79. package/ios/conversion/RNSConversions.h +7 -108
  80. package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
  81. package/ios/legacy/RNSModalScreen.mm +1 -1
  82. package/ios/legacy/RNSScreen.mm +8 -19
  83. package/ios/legacy/RNSScreenStackHeaderConfig.mm +3 -1
  84. package/ios/legacy/RNSScreenStackHeaderSubview.mm +1 -1
  85. package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
  86. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
  87. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
  88. package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
  89. package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
  90. package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
  91. package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
  92. package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
  93. package/ios/safe-area/RNSSafeAreaViewComponentView.mm +2 -2
  94. package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
  95. package/ios/split/RNSSplitAppearanceApplicator.h +4 -4
  96. package/ios/split/RNSSplitAppearanceApplicator.mm +53 -56
  97. package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
  98. package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
  99. package/ios/split/RNSSplitHostComponentView.h +5 -15
  100. package/ios/split/RNSSplitHostComponentView.mm +55 -6
  101. package/ios/split/RNSSplitHostController.h +25 -6
  102. package/ios/split/RNSSplitHostController.mm +24 -92
  103. package/ios/split/RNSSplitHostProviders.h +67 -0
  104. package/ios/split/RNSSplitScreenComponentView.h +0 -39
  105. package/ios/split/RNSSplitScreenComponentView.mm +27 -10
  106. package/ios/split/RNSSplitScreenController.h +26 -3
  107. package/ios/split/RNSSplitScreenController.mm +13 -30
  108. package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
  109. package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
  110. package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
  111. package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
  112. package/ios/stack/conversion/RNSConversions-Stack.h +32 -0
  113. package/ios/stack/conversion/RNSConversions-Stack.mm +55 -0
  114. package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
  115. package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
  116. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +10 -1
  117. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +67 -35
  118. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +6 -0
  119. package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
  120. package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
  121. package/ios/stack/header/RNSStackHeaderItemComponentView.h +3 -1
  122. package/ios/stack/header/RNSStackHeaderItemComponentView.mm +15 -2
  123. package/ios/stack/header/RNSStackHeaderItemDataProviding.h +2 -0
  124. package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
  125. package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
  126. package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
  127. package/ios/stack/host/RNSStackNavigationBar.h +25 -0
  128. package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
  129. package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
  130. package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
  131. package/ios/stack/host/RNSStackNavigationController.mm +13 -5
  132. package/ios/stack/host/RNSStackOperation.h +0 -2
  133. package/ios/stack/screen/RNSStackScreenComponentView.mm +9 -2
  134. package/ios/stack/screen/RNSStackScreenController.mm +12 -0
  135. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +8 -0
  136. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +98 -16
  137. package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +40 -9
  138. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
  139. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +1 -1
  140. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +1 -1
  141. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
  142. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
  143. package/ios/tabs/conversion/RNSConversions-Tabs.h +78 -0
  144. package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +8 -71
  145. package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
  146. package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
  147. package/ios/tabs/host/RNSTabsHostComponentView.mm +10 -3
  148. package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
  149. package/ios/tabs/screen/RNSTabsScreenComponentView.mm +20 -5
  150. package/ios/utils/RNSDefines.h +3 -0
  151. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +34 -19
  152. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  153. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +33 -1
  154. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  155. package/lib/commonjs/components/stack/host/StackHost.js +9 -6
  156. package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
  157. package/lib/commonjs/components/stack/index.js.map +1 -1
  158. package/lib/commonjs/components/tabs/host/TabsHost.ios.js +1 -0
  159. package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
  160. package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  161. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  162. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  163. package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
  164. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  165. package/lib/module/components/stack/header/StackHeaderConfig.android.js +35 -20
  166. package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  167. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +34 -2
  168. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  169. package/lib/module/components/stack/host/StackHost.js +9 -6
  170. package/lib/module/components/stack/host/StackHost.js.map +1 -1
  171. package/lib/module/components/stack/index.js.map +1 -1
  172. package/lib/module/components/tabs/host/TabsHost.ios.js +1 -0
  173. package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
  174. package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  175. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  176. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  177. package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
  178. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  179. package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +1 -1
  180. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
  181. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +616 -21
  182. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  183. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  184. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +226 -2
  185. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  186. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +2 -2
  187. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +2 -0
  188. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
  189. package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
  190. package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
  191. package/lib/typescript/components/stack/host/StackHost.types.d.ts +24 -0
  192. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  193. package/lib/typescript/components/stack/index.d.ts +2 -2
  194. package/lib/typescript/components/stack/index.d.ts.map +1 -1
  195. package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
  196. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +16 -0
  197. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
  198. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
  199. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
  200. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +52 -0
  201. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
  202. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +25 -1
  203. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  204. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +2 -0
  205. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  206. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +3 -1
  207. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
  208. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +1 -0
  209. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  210. package/package.json +8 -7
  211. package/react-native.config.js +3 -0
  212. package/src/components/modals/form-sheet/FormSheet.types.ts +1 -1
  213. package/src/components/stack/header/StackHeaderConfig.android.tsx +48 -23
  214. package/src/components/stack/header/StackHeaderConfig.android.types.ts +637 -21
  215. package/src/components/stack/header/StackHeaderConfig.ios.tsx +45 -1
  216. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +238 -2
  217. package/src/components/stack/header/StackHeaderConfig.types.ts +2 -2
  218. package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +2 -0
  219. package/src/components/stack/host/StackHost.tsx +4 -2
  220. package/src/components/stack/host/StackHost.types.ts +26 -0
  221. package/src/components/stack/index.ts +6 -1
  222. package/src/components/tabs/host/TabsHost.ios.tsx +1 -0
  223. package/src/components/tabs/host/TabsHost.ios.types.ts +16 -0
  224. package/src/components/tabs/host/TabsHost.types.ts +3 -0
  225. package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +78 -0
  226. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +32 -0
  227. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +2 -0
  228. package/src/fabric/stack/StackHostNativeComponent.ts +11 -2
  229. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +1 -0
  230. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
  231. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
  232. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
  233. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +0 -83
  234. package/ios/conversion/RNSConversions-Stack.h +0 -32
  235. package/ios/conversion/RNSConversions-Stack.mm +0 -41
  236. package/ios/conversion/always_false.h +0 -31
  237. /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
@@ -1,9 +1,18 @@
1
1
  'use client';
2
2
 
3
- import type { HostComponent, ViewProps } from 'react-native';
3
+ import type {
4
+ HostComponent,
5
+ ViewProps,
6
+ CodegenTypes as CT,
7
+ } from 'react-native';
4
8
  import { codegenNativeComponent } from 'react-native';
5
9
 
6
- export interface NativeProps extends ViewProps {}
10
+ type StackHostColorScheme = 'inherit' | 'light' | 'dark';
11
+
12
+ export interface NativeProps extends ViewProps {
13
+ // General
14
+ colorScheme?: CT.WithDefault<StackHostColorScheme, 'inherit'>;
15
+ }
7
16
 
8
17
  export default codegenNativeComponent<NativeProps>(
9
18
  'RNSStackHost',
@@ -85,6 +85,7 @@ export interface NativeProps extends ViewProps {
85
85
  layoutDirection?: CT.WithDefault<LayoutDirection, 'inherit'>;
86
86
 
87
87
  // iOS-specific props
88
+ tabBarHiddenAnimationEnabled?: CT.WithDefault<boolean, true>;
88
89
  tabBarTintColor?: ColorValue | undefined;
89
90
  tabBarMinimizeBehavior?: CT.WithDefault<TabBarMinimizeBehavior, 'automatic'>;
90
91
  tabBarControllerMode?: CT.WithDefault<TabBarControllerMode, 'automatic'>;
@@ -1,83 +0,0 @@
1
- package com.swmansion.rnscreens.modals.dimmingview
2
-
3
- import android.annotation.SuppressLint
4
- import android.content.Context
5
- import android.graphics.Color
6
- import android.view.MotionEvent
7
- import android.view.ViewGroup
8
- import com.facebook.react.uimanager.ReactCompoundViewGroup
9
- import com.facebook.react.uimanager.ReactPointerEventsView
10
- import com.swmansion.rnscreens.ext.equalWithRespectToEps
11
-
12
- /**
13
- * Serves as dimming view that can be used as background for some view that does not fully fill
14
- * the viewport.
15
- *
16
- * This dimming view has one more additional feature: it blocks gestures if its alpha > 0.
17
- */
18
- @SuppressLint("ViewConstructor") // Only we instantiate this view
19
- internal class DimmingView(
20
- context: Context,
21
- initialAlpha: Float,
22
- private val pointerEventsProxy: DimmingViewPointerEventsProxy,
23
- ) : ViewGroup(context),
24
- ReactCompoundViewGroup,
25
- ReactPointerEventsView by pointerEventsProxy {
26
- constructor(context: Context, initialAlpha: Float) : this(
27
- context,
28
- initialAlpha,
29
- DimmingViewPointerEventsProxy(null),
30
- )
31
-
32
- init {
33
- pointerEventsProxy.pointerEventsImpl = DimmingViewPointerEventsImpl(this)
34
- setFocusable(false)
35
- }
36
-
37
- internal val blockGestures
38
- get() = !alpha.equalWithRespectToEps(0F)
39
-
40
- init {
41
- setBackgroundColor(Color.BLACK)
42
- alpha = initialAlpha
43
- }
44
-
45
- // This view group is not supposed to have any children, however we need it to be a view group
46
- override fun onLayout(
47
- changed: Boolean,
48
- l: Int,
49
- t: Int,
50
- r: Int,
51
- b: Int,
52
- ) = Unit
53
-
54
- // We do not want to have any action defined here. We just want listeners notified that the click happened.
55
- @SuppressLint("ClickableViewAccessibility")
56
- override fun onTouchEvent(event: MotionEvent?): Boolean {
57
- if (blockGestures && event?.actionMasked == MotionEvent.ACTION_UP) {
58
- callOnClick()
59
- }
60
- return blockGestures
61
- }
62
-
63
- override fun reactTagForTouch(
64
- x: Float,
65
- y: Float,
66
- ): Int = throw IllegalStateException("[RNScreens] $TAG should never be asked for the view tag!")
67
-
68
- override fun interceptsTouchEvent(
69
- x: Float,
70
- y: Float,
71
- ) = blockGestures
72
-
73
- override fun onDetachedFromWindow() {
74
- super.onDetachedFromWindow()
75
-
76
- // Break reference cycle, since the pointerEventsImpl strongly retains this.
77
- pointerEventsProxy.pointerEventsImpl = null
78
- }
79
-
80
- companion object {
81
- const val TAG = "DimmingView"
82
- }
83
- }
@@ -1,89 +0,0 @@
1
- package com.swmansion.rnscreens.modals.dimmingview
2
-
3
- import android.content.Context
4
- import android.util.Log
5
- import android.view.View
6
- import android.view.ViewGroup
7
- import androidx.coordinatorlayout.widget.CoordinatorLayout
8
- import com.google.android.material.bottomsheet.BottomSheetBehavior
9
- import com.google.android.material.bottomsheet.BottomSheetDialog
10
-
11
- class DimmingViewManager(
12
- context: Context,
13
- private val dialog: BottomSheetDialog,
14
- ) {
15
- // TODO: @t0maboro - consider exposing as a prop
16
- internal val maxAlpha: Float = MAX_ALPHA
17
-
18
- internal var isTransitionAnimationRunning: Boolean = false
19
-
20
- internal var dimmingViewAlpha: Float
21
- get() = dimmingView.alpha
22
- set(value) {
23
- dimmingView.alpha = value
24
- }
25
-
26
- private val dimmingView =
27
- DimmingView(context, initialAlpha = 0f).apply {
28
- layoutParams =
29
- CoordinatorLayout.LayoutParams(
30
- ViewGroup.LayoutParams.MATCH_PARENT,
31
- ViewGroup.LayoutParams.MATCH_PARENT,
32
- )
33
- }
34
-
35
- internal fun setOnBackdropClickListener(listener: View.OnClickListener?) {
36
- dimmingView.setOnClickListener(listener)
37
- }
38
-
39
- internal fun onDialogShow() {
40
- attachDimmingViewOverNativeTouchOutside()
41
- }
42
-
43
- internal fun attachToBehavior(behavior: BottomSheetBehavior<*>) {
44
- behavior.addBottomSheetCallback(
45
- object : BottomSheetBehavior.BottomSheetCallback() {
46
- override fun onStateChanged(
47
- bottomSheet: View,
48
- newState: Int,
49
- ) = Unit
50
-
51
- override fun onSlide(
52
- bottomSheet: View,
53
- slideOffset: Float,
54
- ) {
55
- // Prevent system updates from overriding alpha while running custom enter/exit animation.
56
- // When initialDetentIndex is snapping to a high detent, BottomSheetBehavior fires onSlide
57
- // events that conflict with our manual alpha animator, causing the backdrop to flash.
58
- if (isTransitionAnimationRunning) {
59
- return
60
- }
61
-
62
- val fraction = if (slideOffset >= 0) 1f else 1f + slideOffset
63
- dimmingView.alpha = fraction * maxAlpha
64
- }
65
- },
66
- )
67
- }
68
-
69
- private fun attachDimmingViewOverNativeTouchOutside() {
70
- val coordinator = dialog.findViewById<CoordinatorLayout>(com.google.android.material.R.id.coordinator)
71
- val bottomSheetView = dialog.findViewById<View>(com.google.android.material.R.id.design_bottom_sheet)
72
-
73
- if (coordinator != null && dimmingView.parent == null && bottomSheetView != null) {
74
- val sheetIndex = coordinator.indexOfChild(bottomSheetView)
75
- if (sheetIndex >= 0) {
76
- coordinator.addView(dimmingView, sheetIndex)
77
- } else {
78
- Log.e(TAG, "[RNScreens] BottomSheetView not found! Falling back to bottom index.")
79
- coordinator.addView(dimmingView, 0)
80
- }
81
- }
82
- }
83
-
84
- companion object {
85
- const val TAG = "DimmingViewManager"
86
-
87
- private const val MAX_ALPHA = 0.3f
88
- }
89
- }
@@ -1,18 +0,0 @@
1
- package com.swmansion.rnscreens.modals.dimmingview
2
-
3
- import com.facebook.react.uimanager.PointerEvents
4
- import com.facebook.react.uimanager.ReactPointerEventsView
5
-
6
- internal class DimmingViewPointerEventsImpl(
7
- val dimmingView: DimmingView,
8
- ) : ReactPointerEventsView {
9
- override val pointerEvents: PointerEvents
10
- get() = if (dimmingView.blockGestures) PointerEvents.AUTO else PointerEvents.NONE
11
- }
12
-
13
- internal class DimmingViewPointerEventsProxy(
14
- var pointerEventsImpl: DimmingViewPointerEventsImpl?,
15
- ) : ReactPointerEventsView {
16
- override val pointerEvents: PointerEvents
17
- get() = pointerEventsImpl?.pointerEvents ?: PointerEvents.NONE
18
- }
@@ -1,83 +0,0 @@
1
- package com.swmansion.rnscreens.stack.header.toolbar
2
-
3
- import android.util.Log
4
- import com.google.android.material.appbar.MaterialToolbar
5
- import com.swmansion.rnscreens.stack.header.toolbar.model.StackHeaderToolbarMenuGroupMetadata
6
-
7
- /**
8
- * Owns toolbar-menu selection state (id map + group metadata) and applies
9
- * group-item checked-state changes.
10
- */
11
- internal class StackHeaderToolbarMenuSelectionController {
12
- internal var forwardIdMap: Map<String, Int> = emptyMap()
13
- private set
14
-
15
- private var groupMetadata: StackHeaderToolbarMenuGroupMetadata = StackHeaderToolbarMenuGroupMetadata.EMPTY
16
-
17
- internal fun setMenuMaps(
18
- forwardIdMap: Map<String, Int>,
19
- groupMetadata: StackHeaderToolbarMenuGroupMetadata,
20
- ) {
21
- this.forwardIdMap = forwardIdMap
22
- this.groupMetadata = groupMetadata
23
- }
24
-
25
- internal fun clear() {
26
- forwardIdMap = emptyMap()
27
- groupMetadata = StackHeaderToolbarMenuGroupMetadata.EMPTY
28
- }
29
-
30
- /**
31
- * Mutates the checked state of [itemId] within its group and returns the id of the group
32
- * whose selection changed, or `null` when nothing changed (the item is not in a group, an
33
- * invalid attempt to uncheck a single-selection item, or the item was already in the
34
- * target state). Does not emit — callers decide when to emit so that batched updates can
35
- * coalesce into one event per group.
36
- */
37
- internal fun applyGroupItemStateChange(
38
- toolbar: MaterialToolbar,
39
- itemId: String,
40
- explicitCheckedValue: Boolean? = null,
41
- ): String? {
42
- val groupId = groupMetadata.itemGroupMap[itemId] ?: return null
43
- val singleSelection = groupMetadata.groupSingleSelection[groupId] ?: return null
44
- val intId = forwardIdMap[itemId] ?: return null
45
- val menuItem = toolbar.menu.findItem(intId) ?: return null
46
-
47
- if (singleSelection && explicitCheckedValue == false) {
48
- Log.w(
49
- TAG,
50
- "[RNScreens] Cannot uncheck item '$itemId' in single-selection group '$groupId'. " +
51
- "Check a different item instead.",
52
- )
53
- return null
54
- }
55
-
56
- val newChecked =
57
- if (singleSelection) {
58
- true
59
- } else {
60
- explicitCheckedValue ?: !menuItem.isChecked
61
- }
62
- if (menuItem.isChecked == newChecked) return null
63
- menuItem.isChecked = newChecked
64
-
65
- return groupId
66
- }
67
-
68
- internal fun collectSelectedIds(
69
- toolbar: MaterialToolbar,
70
- groupId: String,
71
- ): List<String> =
72
- groupMetadata
73
- .groupMemberItems[groupId]
74
- .orEmpty()
75
- .filter { memberId ->
76
- val intId = forwardIdMap[memberId] ?: return@filter false
77
- toolbar.menu.findItem(intId)?.isChecked == true
78
- }
79
-
80
- companion object {
81
- private const val TAG = "StackHeaderToolbarMenuSelectionController"
82
- }
83
- }
@@ -1,32 +0,0 @@
1
- #pragma once
2
-
3
- #if defined(__cplusplus)
4
-
5
- #import <react/renderer/components/rnscreens/Props.h>
6
- #import "RNSHeaderItemPlacement.h"
7
- #import "RNSHeaderItemSpacerPlacement.h"
8
- #import "RNSStackScreenComponentView.h"
9
- #import "always_false.h"
10
-
11
- namespace rnscreens::conversion {
12
-
13
- template <typename TargetType, typename InputType>
14
- TargetType convert(InputType) {
15
- static_assert(
16
- rnscreens::always_false<TargetType>::value,
17
- "[RNScreens] Missing template specialisation for demanded types!");
18
- }
19
-
20
- template <>
21
- RNSStackScreenActivityMode convert(react::RNSStackScreenActivityMode mode);
22
-
23
- template <>
24
- RNSHeaderItemPlacement convert(react::RNSStackHeaderItemIOSPlacement placement);
25
-
26
- template <>
27
- RNSHeaderItemSpacerPlacement convert(
28
- react::RNSStackHeaderItemSpacerIOSPlacement placement);
29
-
30
- }; // namespace rnscreens::conversion
31
-
32
- #endif // defined(__cplusplus)
@@ -1,41 +0,0 @@
1
- #import "RNSConversions-Stack.h"
2
-
3
- namespace rnscreens::conversion {
4
-
5
- namespace react = facebook::react;
6
-
7
- template <>
8
- RNSStackScreenActivityMode convert(react::RNSStackScreenActivityMode mode)
9
- {
10
- return static_cast<RNSStackScreenActivityMode>(mode);
11
- };
12
-
13
- template <>
14
- RNSHeaderItemPlacement convert(react::RNSStackHeaderItemIOSPlacement placement)
15
- {
16
- switch (placement) {
17
- case react::RNSStackHeaderItemIOSPlacement::Leading:
18
- return RNSHeaderItemPlacementLeading;
19
- case react::RNSStackHeaderItemIOSPlacement::Trailing:
20
- return RNSHeaderItemPlacementTrailing;
21
- case react::RNSStackHeaderItemIOSPlacement::Title:
22
- return RNSHeaderItemPlacementTitle;
23
- case react::RNSStackHeaderItemIOSPlacement::Subtitle:
24
- return RNSHeaderItemPlacementSubtitle;
25
- case react::RNSStackHeaderItemIOSPlacement::LargeSubtitle:
26
- return RNSHeaderItemPlacementLargeSubtitle;
27
- }
28
- };
29
-
30
- template <>
31
- RNSHeaderItemSpacerPlacement convert(react::RNSStackHeaderItemSpacerIOSPlacement placement)
32
- {
33
- switch (placement) {
34
- case react::RNSStackHeaderItemSpacerIOSPlacement::Leading:
35
- return RNSHeaderItemSpacerPlacementLeading;
36
- case react::RNSStackHeaderItemSpacerIOSPlacement::Trailing:
37
- return RNSHeaderItemSpacerPlacementTrailing;
38
- }
39
- };
40
-
41
- }; // namespace rnscreens::conversion
@@ -1,31 +0,0 @@
1
- #pragma once
2
-
3
- #if defined(__cplusplus)
4
-
5
- namespace rnscreens {
6
-
7
- namespace do_not_use {
8
-
9
- /// This is a marker type, that should never be instantiated.
10
- /// It is here to assert that there is a valid template specialization for
11
- /// `always_false` that can return `true`. Check out this article:
12
- /// https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2593r0.html#valid-workaround
13
- struct DoNotUseThis {
14
- DoNotUseThis() = delete;
15
- DoNotUseThis(const DoNotUseThis &other) = delete;
16
- DoNotUseThis(const DoNotUseThis &&other) = delete;
17
- };
18
-
19
- }; // namespace do_not_use
20
-
21
- /// Workaround for `static_assert(false)`. See:
22
- /// https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2593r0.html#valid-workaround
23
- /// https://stackoverflow.com/questions/14637356/static-assert-fails-compilation-even-though-template-function-is-called-nowhere/14637534#14637534
24
- template <typename T>
25
- struct always_false : std::false_type {};
26
- template <>
27
- struct always_false<do_not_use::DoNotUseThis> : std::true_type {};
28
-
29
- }; // namespace rnscreens
30
-
31
- #endif // defined(__cplusplus)