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,6 +1,7 @@
1
1
  package com.swmansion.rnscreens.stack.header.config
2
2
 
3
3
  import android.util.Log
4
+ import android.view.Gravity
4
5
  import android.view.View
5
6
  import com.facebook.react.bridge.Dynamic
6
7
  import com.facebook.react.bridge.JSApplicationIllegalArgumentException
@@ -99,7 +100,7 @@ internal open class StackHeaderConfigViewManager :
99
100
  override fun onAfterUpdateTransaction(view: StackHeaderConfig) {
100
101
  super.onAfterUpdateTransaction(view)
101
102
  view.resolveBackButtonIconIfNeeded()
102
- view.resolveToolbarMenuItemIconsIfNeeded()
103
+ view.resolveOverflowIconIfNeeded()
103
104
  }
104
105
 
105
106
  override fun onDropViewInstance(view: StackHeaderConfig) {
@@ -127,6 +128,310 @@ internal open class StackHeaderConfigViewManager :
127
128
  view.title = value ?: ""
128
129
  }
129
130
 
131
+ override fun setSubtitle(
132
+ view: StackHeaderConfig,
133
+ value: String?,
134
+ ) {
135
+ view.subtitle = value ?: ""
136
+ }
137
+
138
+ override fun setMaxLines(
139
+ view: StackHeaderConfig,
140
+ value: Int,
141
+ ) {
142
+ view.maxLines = value.coerceAtLeast(1)
143
+ }
144
+
145
+ override fun setTitleCentered(
146
+ view: StackHeaderConfig,
147
+ value: Boolean,
148
+ ) {
149
+ view.titleCentered = value
150
+ }
151
+
152
+ override fun setSubtitleCentered(
153
+ view: StackHeaderConfig,
154
+ value: Boolean,
155
+ ) {
156
+ view.subtitleCentered = value
157
+ }
158
+
159
+ override fun setExpandedTitleHorizontalGravity(
160
+ view: StackHeaderConfig,
161
+ value: String?,
162
+ ) {
163
+ view.expandedTitleHorizontalGravity = parseHorizontalGravity(value)
164
+ }
165
+
166
+ override fun setExpandedTitleVerticalGravity(
167
+ view: StackHeaderConfig,
168
+ value: String?,
169
+ ) {
170
+ view.expandedTitleVerticalGravity = parseVerticalGravity(value)
171
+ }
172
+
173
+ override fun setCollapsedTitleHorizontalGravity(
174
+ view: StackHeaderConfig,
175
+ value: String?,
176
+ ) {
177
+ view.collapsedTitleHorizontalGravity = parseHorizontalGravity(value)
178
+ }
179
+
180
+ override fun setCollapsedTitleVerticalGravity(
181
+ view: StackHeaderConfig,
182
+ value: String?,
183
+ ) {
184
+ view.collapsedTitleVerticalGravity = parseVerticalGravity(value)
185
+ }
186
+
187
+ override fun setCollapsedTitleGravityMode(
188
+ view: StackHeaderConfig,
189
+ value: String?,
190
+ ) {
191
+ view.collapsedTitleGravityMode =
192
+ when (value) {
193
+ "entireSpace" -> StackHeaderCollapsedTitleGravityMode.ENTIRE_SPACE
194
+ "availableSpace" -> StackHeaderCollapsedTitleGravityMode.AVAILABLE_SPACE
195
+ else -> throw JSApplicationIllegalArgumentException(
196
+ "[RNScreens] Invalid StackHeaderConfig collapsedTitleGravityMode: $value.",
197
+ )
198
+ }
199
+ }
200
+
201
+ // region Header spacing
202
+ // Spacing arrives as a float defaulting to -1 (unset); 0 is a valid, applied value.
203
+
204
+ override fun setContentInsetStart(
205
+ view: StackHeaderConfig,
206
+ value: Float,
207
+ ) {
208
+ view.contentInsetStart = value.takeIf { it >= 0f }
209
+ }
210
+
211
+ override fun setContentInsetEnd(
212
+ view: StackHeaderConfig,
213
+ value: Float,
214
+ ) {
215
+ view.contentInsetEnd = value.takeIf { it >= 0f }
216
+ }
217
+
218
+ // endregion
219
+
220
+ // region Text appearance
221
+ // Font size arrives as a float defaulting to -1 (unset); non-positive means "use default".
222
+
223
+ override fun setTitleColor(
224
+ view: StackHeaderConfig,
225
+ value: Int?,
226
+ ) {
227
+ view.titleAppearance.color = value
228
+ }
229
+
230
+ override fun setTitleFontFamily(
231
+ view: StackHeaderConfig,
232
+ value: String?,
233
+ ) {
234
+ view.titleAppearance.fontFamily = value
235
+ }
236
+
237
+ override fun setTitleFontSize(
238
+ view: StackHeaderConfig,
239
+ value: Float,
240
+ ) {
241
+ view.titleAppearance.fontSize = value.takeIf { it > 0f }
242
+ }
243
+
244
+ override fun setTitleFontWeight(
245
+ view: StackHeaderConfig,
246
+ value: String?,
247
+ ) {
248
+ view.titleAppearance.fontWeight = value
249
+ }
250
+
251
+ override fun setTitleFontStyle(
252
+ view: StackHeaderConfig,
253
+ value: String?,
254
+ ) {
255
+ view.titleAppearance.fontStyle = value
256
+ }
257
+
258
+ override fun setSubtitleColor(
259
+ view: StackHeaderConfig,
260
+ value: Int?,
261
+ ) {
262
+ view.subtitleAppearance.color = value
263
+ }
264
+
265
+ override fun setSubtitleFontFamily(
266
+ view: StackHeaderConfig,
267
+ value: String?,
268
+ ) {
269
+ view.subtitleAppearance.fontFamily = value
270
+ }
271
+
272
+ override fun setSubtitleFontSize(
273
+ view: StackHeaderConfig,
274
+ value: Float,
275
+ ) {
276
+ view.subtitleAppearance.fontSize = value.takeIf { it > 0f }
277
+ }
278
+
279
+ override fun setSubtitleFontWeight(
280
+ view: StackHeaderConfig,
281
+ value: String?,
282
+ ) {
283
+ view.subtitleAppearance.fontWeight = value
284
+ }
285
+
286
+ override fun setSubtitleFontStyle(
287
+ view: StackHeaderConfig,
288
+ value: String?,
289
+ ) {
290
+ view.subtitleAppearance.fontStyle = value
291
+ }
292
+
293
+ override fun setExpandedTitleColor(
294
+ view: StackHeaderConfig,
295
+ value: Int?,
296
+ ) {
297
+ view.expandedTitleAppearance.color = value
298
+ }
299
+
300
+ override fun setExpandedTitleFontFamily(
301
+ view: StackHeaderConfig,
302
+ value: String?,
303
+ ) {
304
+ view.expandedTitleAppearance.fontFamily = value
305
+ }
306
+
307
+ override fun setExpandedTitleFontSize(
308
+ view: StackHeaderConfig,
309
+ value: Float,
310
+ ) {
311
+ view.expandedTitleAppearance.fontSize = value.takeIf { it > 0f }
312
+ }
313
+
314
+ override fun setExpandedTitleFontWeight(
315
+ view: StackHeaderConfig,
316
+ value: String?,
317
+ ) {
318
+ view.expandedTitleAppearance.fontWeight = value
319
+ }
320
+
321
+ override fun setExpandedTitleFontStyle(
322
+ view: StackHeaderConfig,
323
+ value: String?,
324
+ ) {
325
+ view.expandedTitleAppearance.fontStyle = value
326
+ }
327
+
328
+ override fun setCollapsedTitleColor(
329
+ view: StackHeaderConfig,
330
+ value: Int?,
331
+ ) {
332
+ view.collapsedTitleAppearance.color = value
333
+ }
334
+
335
+ override fun setCollapsedTitleFontFamily(
336
+ view: StackHeaderConfig,
337
+ value: String?,
338
+ ) {
339
+ view.collapsedTitleAppearance.fontFamily = value
340
+ }
341
+
342
+ override fun setCollapsedTitleFontSize(
343
+ view: StackHeaderConfig,
344
+ value: Float,
345
+ ) {
346
+ view.collapsedTitleAppearance.fontSize = value.takeIf { it > 0f }
347
+ }
348
+
349
+ override fun setCollapsedTitleFontWeight(
350
+ view: StackHeaderConfig,
351
+ value: String?,
352
+ ) {
353
+ view.collapsedTitleAppearance.fontWeight = value
354
+ }
355
+
356
+ override fun setCollapsedTitleFontStyle(
357
+ view: StackHeaderConfig,
358
+ value: String?,
359
+ ) {
360
+ view.collapsedTitleAppearance.fontStyle = value
361
+ }
362
+
363
+ override fun setExpandedSubtitleColor(
364
+ view: StackHeaderConfig,
365
+ value: Int?,
366
+ ) {
367
+ view.expandedSubtitleAppearance.color = value
368
+ }
369
+
370
+ override fun setExpandedSubtitleFontFamily(
371
+ view: StackHeaderConfig,
372
+ value: String?,
373
+ ) {
374
+ view.expandedSubtitleAppearance.fontFamily = value
375
+ }
376
+
377
+ override fun setExpandedSubtitleFontSize(
378
+ view: StackHeaderConfig,
379
+ value: Float,
380
+ ) {
381
+ view.expandedSubtitleAppearance.fontSize = value.takeIf { it > 0f }
382
+ }
383
+
384
+ override fun setExpandedSubtitleFontWeight(
385
+ view: StackHeaderConfig,
386
+ value: String?,
387
+ ) {
388
+ view.expandedSubtitleAppearance.fontWeight = value
389
+ }
390
+
391
+ override fun setExpandedSubtitleFontStyle(
392
+ view: StackHeaderConfig,
393
+ value: String?,
394
+ ) {
395
+ view.expandedSubtitleAppearance.fontStyle = value
396
+ }
397
+
398
+ override fun setCollapsedSubtitleColor(
399
+ view: StackHeaderConfig,
400
+ value: Int?,
401
+ ) {
402
+ view.collapsedSubtitleAppearance.color = value
403
+ }
404
+
405
+ override fun setCollapsedSubtitleFontFamily(
406
+ view: StackHeaderConfig,
407
+ value: String?,
408
+ ) {
409
+ view.collapsedSubtitleAppearance.fontFamily = value
410
+ }
411
+
412
+ override fun setCollapsedSubtitleFontSize(
413
+ view: StackHeaderConfig,
414
+ value: Float,
415
+ ) {
416
+ view.collapsedSubtitleAppearance.fontSize = value.takeIf { it > 0f }
417
+ }
418
+
419
+ override fun setCollapsedSubtitleFontWeight(
420
+ view: StackHeaderConfig,
421
+ value: String?,
422
+ ) {
423
+ view.collapsedSubtitleAppearance.fontWeight = value
424
+ }
425
+
426
+ override fun setCollapsedSubtitleFontStyle(
427
+ view: StackHeaderConfig,
428
+ value: String?,
429
+ ) {
430
+ view.collapsedSubtitleAppearance.fontStyle = value
431
+ }
432
+
433
+ // endregion
434
+
130
435
  override fun setHidden(
131
436
  view: StackHeaderConfig,
132
437
  value: Boolean,
@@ -183,6 +488,41 @@ internal open class StackHeaderConfigViewManager :
183
488
  view.backButtonImageIconUri = value?.getString("uri")
184
489
  }
185
490
 
491
+ override fun setOverflowIconTintColorNormal(
492
+ view: StackHeaderConfig,
493
+ value: Int?,
494
+ ) {
495
+ view.overflowIconTintColorNormal = value
496
+ }
497
+
498
+ override fun setOverflowIconTintColorPressed(
499
+ view: StackHeaderConfig,
500
+ value: Int?,
501
+ ) {
502
+ view.overflowIconTintColorPressed = value
503
+ }
504
+
505
+ override fun setOverflowIconTintColorFocused(
506
+ view: StackHeaderConfig,
507
+ value: Int?,
508
+ ) {
509
+ view.overflowIconTintColorFocused = value
510
+ }
511
+
512
+ override fun setOverflowIconDrawableIconResourceName(
513
+ view: StackHeaderConfig,
514
+ value: String?,
515
+ ) {
516
+ view.overflowIconDrawableIconResourceName = value
517
+ }
518
+
519
+ override fun setOverflowIconImageIconResource(
520
+ view: StackHeaderConfig,
521
+ value: ReadableMap?,
522
+ ) {
523
+ view.overflowIconImageIconUri = value?.getString("uri")
524
+ }
525
+
186
526
  override fun setScrollFlagScroll(
187
527
  view: StackHeaderConfig,
188
528
  value: Boolean,
@@ -225,20 +565,39 @@ internal open class StackHeaderConfigViewManager :
225
565
  view.liftOnScroll = value
226
566
  }
227
567
 
568
+ override fun setBackgroundColor(
569
+ view: StackHeaderConfig,
570
+ value: Int?,
571
+ ) {
572
+ view.backgroundColor = value
573
+ }
574
+
575
+ override fun setScrolledBackgroundColor(
576
+ view: StackHeaderConfig,
577
+ value: Int?,
578
+ ) {
579
+ view.scrolledBackgroundColor = value
580
+ }
581
+
582
+ override fun setStatusBarScrimColor(
583
+ view: StackHeaderConfig,
584
+ value: Int?,
585
+ ) {
586
+ view.statusBarScrimColor = value
587
+ }
588
+
228
589
  override fun setToolbarMenuGroupDividerEnabled(
229
590
  view: StackHeaderConfig,
230
591
  value: Boolean,
231
592
  ) {
232
- view.toolbarMenuGroupDividerEnabled = value
593
+ view.setToolbarMenuGroupDividerEnabledFromProps(value)
233
594
  }
234
595
 
235
596
  override fun setToolbarMenu(
236
597
  view: StackHeaderConfig,
237
598
  value: Dynamic,
238
599
  ) {
239
- val (menu, iconSources) = StackHeaderToolbarMenuMapper.parseMenu(view.context, value)
240
- view.toolbarMenu = menu
241
- view.toolbarMenuItemIconSourceMap = iconSources
600
+ view.setToolbarMenuFromProps(StackHeaderToolbarMenuMapper.parseMenu(view.context, value))
242
601
  }
243
602
 
244
603
  override fun updateToolbarMenuElements(
@@ -257,17 +616,31 @@ internal open class StackHeaderConfigViewManager :
257
616
  Log.w(TAG, "[RNScreens] Skipping toolbar menu update at index $i: missing 'id'.")
258
617
  continue
259
618
  }
260
- parsed.add(
261
- StackHeaderToolbarMenuElementRawUpdate(
262
- id,
263
- StackHeaderToolbarMenuMapper.parseMenuElementOptions(view.context, map),
264
- StackHeaderToolbarMenuMapper.parseMenuElementIconSource(map),
265
- ),
266
- )
619
+ parsed.add(StackHeaderToolbarMenuMapper.parseElementRawUpdate(view.context, id, map))
267
620
  }
268
621
  view.dispatchMenuElementUpdates(parsed)
269
622
  }
270
623
 
624
+ private fun parseHorizontalGravity(value: String?): Int =
625
+ when (value) {
626
+ "start" -> Gravity.START
627
+ "center" -> Gravity.CENTER_HORIZONTAL
628
+ "end" -> Gravity.END
629
+ else -> throw JSApplicationIllegalArgumentException(
630
+ "[RNScreens] Invalid StackHeaderConfig title horizontal gravity: $value.",
631
+ )
632
+ }
633
+
634
+ private fun parseVerticalGravity(value: String?): Int =
635
+ when (value) {
636
+ "top" -> Gravity.TOP
637
+ "center" -> Gravity.CENTER_VERTICAL
638
+ "bottom" -> Gravity.BOTTOM
639
+ else -> throw JSApplicationIllegalArgumentException(
640
+ "[RNScreens] Invalid StackHeaderConfig title vertical gravity: $value.",
641
+ )
642
+ }
643
+
271
644
  companion object {
272
645
  private const val TAG = "StackHeaderConfigViewManager"
273
646
  const val REACT_CLASS = "RNSStackHeaderConfigAndroid"
@@ -1,9 +1,5 @@
1
1
  package com.swmansion.rnscreens.stack.header.config
2
2
 
3
- import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarMenuElementUpdate
4
-
5
3
  internal interface StackHeaderConfigurationObserver {
6
4
  fun onConfigChanged(config: StackHeaderConfigurationProviding)
7
-
8
- fun onMenuElementsUpdated(updates: List<StackHeaderToolbarMenuElementUpdate>)
9
5
  }
@@ -1,12 +1,15 @@
1
1
  package com.swmansion.rnscreens.stack.header.config
2
2
 
3
3
  import android.graphics.drawable.Drawable
4
+ import com.swmansion.rnscreens.common.text.TextAppearance
4
5
  import com.swmansion.rnscreens.stack.header.subview.StackHeaderSubviewProviding
5
- import com.swmansion.rnscreens.stack.header.toolbar.model.StackHeaderToolbarMenuConfig
6
+ import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuController
6
7
 
7
8
  internal interface StackHeaderConfigurationProviding {
8
9
  val type: StackHeaderType
9
10
  val title: String
11
+ val subtitle: String
12
+ val maxLines: Int
10
13
  val hidden: Boolean
11
14
  val transparent: Boolean
12
15
  val backButtonHidden: Boolean
@@ -14,18 +17,44 @@ internal interface StackHeaderConfigurationProviding {
14
17
  val backButtonTintColorPressed: Int?
15
18
  val backButtonTintColorFocused: Int?
16
19
  val backButtonIcon: Drawable?
20
+ val overflowIconTintColorNormal: Int?
21
+ val overflowIconTintColorPressed: Int?
22
+ val overflowIconTintColorFocused: Int?
23
+ val overflowIcon: Drawable?
17
24
  val scrollFlagScroll: Boolean
18
25
  val scrollFlagEnterAlways: Boolean
19
26
  val scrollFlagEnterAlwaysCollapsed: Boolean
20
27
  val scrollFlagExitUntilCollapsed: Boolean
21
28
  val scrollFlagSnap: Boolean
22
29
  val liftOnScroll: Boolean
30
+ val backgroundColor: Int?
31
+ val scrolledBackgroundColor: Int?
32
+ val statusBarScrimColor: Int?
23
33
  val leadingSubview: StackHeaderSubviewProviding?
24
34
  val centerSubview: StackHeaderSubviewProviding?
25
35
  val trailingSubview: StackHeaderSubviewProviding?
26
36
  val backgroundSubview: StackHeaderSubviewProviding?
27
- val toolbarMenu: StackHeaderToolbarMenuConfig
28
- val toolbarMenuGroupDividerEnabled: Boolean
37
+ val toolbarMenuController: StackHeaderToolbarMenuController
38
+
39
+ val titleCentered: Boolean
40
+ val subtitleCentered: Boolean
41
+ val expandedTitleHorizontalGravity: Int
42
+ val expandedTitleVerticalGravity: Int
43
+ val collapsedTitleHorizontalGravity: Int
44
+ val collapsedTitleVerticalGravity: Int
45
+ val collapsedTitleGravityMode: StackHeaderCollapsedTitleGravityMode
46
+
47
+ val contentInsetStart: Float?
48
+ val contentInsetEnd: Float?
49
+
50
+ val titleAppearance: TextAppearance
51
+ val subtitleAppearance: TextAppearance
52
+
53
+ val expandedTitleAppearance: TextAppearance
54
+ val collapsedTitleAppearance: TextAppearance
55
+ val expandedSubtitleAppearance: TextAppearance
56
+ val collapsedSubtitleAppearance: TextAppearance
57
+
29
58
  val isRTL: Boolean
30
59
 
31
60
  val invalidationFlags: StackHeaderInvalidationFlags
@@ -9,13 +9,6 @@ internal interface StackHeaderDelegate {
9
9
  contentOffsetY: Int,
10
10
  )
11
11
 
12
- fun onMenuItemClicked(id: String)
13
-
14
- fun onGroupSelectionChanged(
15
- groupId: String,
16
- selectedIds: List<String>,
17
- )
18
-
19
12
  fun onSubviewOriginChanged(
20
13
  type: StackHeaderSubviewType,
21
14
  x: Int,
@@ -13,8 +13,13 @@ internal value class StackHeaderInvalidationFlags(
13
13
  val SCROLL_FLAGS = StackHeaderInvalidationFlags(1 shl 4)
14
14
  val TOOLBAR_MENU = StackHeaderInvalidationFlags(1 shl 5)
15
15
  val LIFT_ON_SCROLL = StackHeaderInvalidationFlags(1 shl 6)
16
-
17
- val APPEARANCE = TITLE or BACK_BUTTON
16
+ val OVERFLOW_ICON = StackHeaderInvalidationFlags(1 shl 7)
17
+ val TITLE_POSITIONING = StackHeaderInvalidationFlags(1 shl 8)
18
+ val TITLE_APPEARANCE = StackHeaderInvalidationFlags(1 shl 9)
19
+ val CONTENT_INSETS = StackHeaderInvalidationFlags(1 shl 10)
20
+ val BACKGROUND_COLORS = StackHeaderInvalidationFlags(1 shl 11)
21
+ val APPEARANCE =
22
+ TITLE or BACK_BUTTON or OVERFLOW_ICON or TITLE_POSITIONING or TITLE_APPEARANCE or CONTENT_INSETS or BACKGROUND_COLORS
18
23
  val ALL = STRUCTURE or SUBVIEWS or APPEARANCE or SCROLL_FLAGS or TOOLBAR_MENU or LIFT_ON_SCROLL
19
24
  }
20
25