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,4 +1,6 @@
1
1
  #import "RNSStackNavigationBarCoordinator.h"
2
+ #import <React/RCTAssert.h>
3
+ #import "RNSStackNavigationBar.h"
2
4
 
3
5
  @implementation RNSStackNavigationBarCoordinator
4
6
 
@@ -9,6 +11,15 @@
9
11
  [navigationController setNavigationBarHidden:hidden animated:animated];
10
12
  }
11
13
 
14
+ #if !TARGET_OS_TV
15
+ - (void)setBackButtonMenuEnabled:(BOOL)enabled forNavigationController:(UINavigationController *)navigationController
16
+ {
17
+ RCTAssert([navigationController.navigationBar isKindOfClass:RNSStackNavigationBar.class],
18
+ @"An instance of RNSStackNavigationBar is expected for navigation bar implementation");
19
+ static_cast<RNSStackNavigationBar *>(navigationController.navigationBar).backButtonMenuEnabled = enabled;
20
+ }
21
+ #endif // !TARGET_OS_TV
22
+
12
23
  - (void)initializeNavigationBarOfNavigationController:(UINavigationController *)navigationController
13
24
  {
14
25
  #if !TARGET_OS_TV
@@ -3,6 +3,7 @@
3
3
  #import "RNSContainer.h"
4
4
  #import "RNSLog.h"
5
5
  #import "RNSParentContainerItemRegistry.h"
6
+ #import "RNSStackNavigationBar.h"
6
7
  #import "RNSStackOperation.h"
7
8
  #import "RNSStackScreenController.h"
8
9
  #import "RNSViewFrameChangeDelegate.h"
@@ -15,7 +16,12 @@
15
16
 
16
17
  - (instancetype)init
17
18
  {
18
- if (self = [super init]) {
19
+ #if !TARGET_OS_TV
20
+ self = [super initWithNavigationBarClass:RNSStackNavigationBar.class toolbarClass:nil];
21
+ #else // !TARGET_OS_TV
22
+ self = [super init];
23
+ #endif // !TARGET_OS_TV
24
+ if (self != nil) {
19
25
  _navigationBarCoordinator = [RNSStackNavigationBarCoordinator new];
20
26
  [_navigationBarCoordinator initializeNavigationBarOfNavigationController:self];
21
27
  [self initState];
@@ -102,15 +108,15 @@
102
108
  return;
103
109
  }
104
110
 
105
- for (RNSPopOperation *op in _pendingPopOperations) {
106
- UIViewController *controller = static_cast<UIViewController *>(op.stackScreen.controller);
111
+ for ([[maybe_unused]] RNSPopOperation *op in _pendingPopOperations) {
107
112
  RCTAssert([self.viewControllers count] > 1, @"[RNScreens] Attempt to pop last screen from the stack");
108
- RCTAssert(self.topViewController == controller, @"[RNScreens] Attempt to pop non-top screen");
113
+ RCTAssert(self.topViewController == static_cast<UIViewController *>(op.stackScreen.controller),
114
+ @"[RNScreens] Attempt to pop non-top screen");
109
115
  [self popViewControllerAnimated:YES];
110
116
  }
111
117
 
112
118
  for (RNSPushOperation *op in _pendingPushOperations) {
113
- UIViewController *controller = static_cast<UIViewController *>(op.stackScreen.controller);
119
+ RNSStackScreenController *controller = op.stackScreen.controller;
114
120
  [self pushViewController:controller animated:YES];
115
121
  }
116
122
 
@@ -126,10 +132,12 @@
126
132
 
127
133
  - (void)dumpStackModel
128
134
  {
135
+ #ifdef RNS_DEBUG_LOGGING
129
136
  RNSLog(@"[RNScreens] StackContainer [%ld] MODEL BEGIN", self.view.tag);
130
137
  for (UIViewController *viewController in self.viewControllers) {
131
138
  RNSLog(@"[RNScreens] %@", static_cast<RNSStackScreenComponentView *>(viewController.view).screenKey);
132
139
  }
140
+ #endif // RNS_DEBUG_LOGGING
133
141
  }
134
142
 
135
143
  @end
@@ -18,8 +18,6 @@ NS_ASSUME_NONNULL_BEGIN
18
18
 
19
19
  @interface RNSPopOperation : RNSStackOperation
20
20
 
21
- @property (nonatomic, strong, readonly) RNSStackScreenComponentView *stackScreen;
22
-
23
21
  @end
24
22
 
25
23
  NS_ASSUME_NONNULL_END
@@ -5,7 +5,7 @@
5
5
  #import <react/renderer/components/rnscreens/EventEmitters.h>
6
6
  #import <react/renderer/components/rnscreens/Props.h>
7
7
  #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
8
- #import <rnscreens/RNSStackScreenComponentDescriptor.h>
8
+ #import <react/renderer/components/rnscreens/RNSStackScreenComponentDescriptor.h>
9
9
 
10
10
  #import "RNSConversions-Stack.h"
11
11
  #import "RNSScrollViewMarkerComponentView.h"
@@ -116,7 +116,8 @@ namespace react = facebook::react;
116
116
  const auto &newComponentProps = *std::static_pointer_cast<const react::RNSStackScreenProps>(props);
117
117
 
118
118
  if (oldComponentProps.activityMode != newComponentProps.activityMode) {
119
- _activityMode = rnscreens::conversion::convert<RNSStackScreenActivityMode>(newComponentProps.activityMode);
119
+ _activityMode = rnscreens::conversion::RNSStackScreenActivityModeFromReactRNSStackScreenActivityMode(
120
+ newComponentProps.activityMode);
120
121
  _hasUpdatedActivityMode = YES;
121
122
  }
122
123
 
@@ -132,6 +133,11 @@ namespace react = facebook::react;
132
133
  {
133
134
  if ([childComponentView isKindOfClass:RNSStackHeaderConfigComponentView.class]) {
134
135
  _headerConfig = (RNSStackHeaderConfigComponentView *)childComponentView;
136
+ _headerConfig.headerCoordinator = _controller.headerCoordinator;
137
+ _controller.headerCoordinator.configDataProvider = _headerConfig;
138
+ _controller.headerCoordinator.frameChangeDelegate = _headerConfig;
139
+ _controller.headerCoordinator.eventsDelegate = _headerConfig;
140
+ _controller.headerCoordinator.imageLoader = _headerConfig;
135
141
  }
136
142
  [super mountChildComponentView:childComponentView index:index];
137
143
  }
@@ -140,6 +146,7 @@ namespace react = facebook::react;
140
146
  {
141
147
  if ([childComponentView isKindOfClass:RNSStackHeaderConfigComponentView.class]) {
142
148
  [_controller.headerCoordinator clearHeaderConfiguration];
149
+ _headerConfig.headerCoordinator = nil;
143
150
  _headerConfig = nil;
144
151
  }
145
152
  [super unmountChildComponentView:childComponentView index:index];
@@ -56,6 +56,10 @@
56
56
  - (void)viewWillAppear:(BOOL)animated
57
57
  {
58
58
  [super viewWillAppear:animated];
59
+ [self.headerCoordinator updateNavigationBarVisibilityAnimated:animated];
60
+ #if !TARGET_OS_TV
61
+ [self.headerCoordinator updateBackButtonMenuEnabled];
62
+ #endif // !TARGET_OS_TV
59
63
  [[self reactEventEmitter] emitOnWillAppear];
60
64
  }
61
65
 
@@ -83,6 +87,14 @@
83
87
  [super didMoveToParentViewController:parent];
84
88
 
85
89
  if (parent == nil) {
90
+ #if !TARGET_OS_TV
91
+ // The pop transition has completed. Clear the back button config this
92
+ // screen has applied onto the screen below. UIKit seems to serialize
93
+ // navigation transitions (undocumented, internal, but seems to work on 18 and 26),
94
+ // so this runs before a queued push applies its own config.
95
+ [_headerCoordinator clearAppliedBackButtonConfig];
96
+ #endif // !TARGET_OS_TV
97
+
86
98
  if (_screenView.activityMode == RNSStackScreenActivityModeDetached) {
87
99
  [[self reactEventEmitter] emitOnDismiss];
88
100
  } else {
@@ -42,6 +42,14 @@ NS_ASSUME_NONNULL_BEGIN
42
42
 
43
43
  - (void)clearHeaderConfiguration;
44
44
 
45
+ - (void)updateNavigationBarVisibilityAnimated:(BOOL)animated;
46
+
47
+ #if !TARGET_OS_TV
48
+ - (void)updateBackButtonMenuEnabled;
49
+
50
+ - (void)clearAppliedBackButtonConfig;
51
+ #endif // !TARGET_OS_TV
52
+
45
53
  @end
46
54
 
47
55
  NS_ASSUME_NONNULL_END
@@ -15,6 +15,13 @@
15
15
  @implementation RNSStackScreenHeaderCoordinator {
16
16
  __weak RNSStackScreenController *_Nullable _screenController;
17
17
 
18
+ #if !TARGET_OS_TV
19
+ // Navigation item of the screen below, onto which the back button
20
+ // configuration has been applied. Kept so that the configuration can be
21
+ // cleared when the owning screen is popped from the stack.
22
+ __weak UINavigationItem *_Nullable _backButtonConfigTargetItem;
23
+ #endif // !TARGET_OS_TV
24
+
18
25
  RNSStackHeaderMenuTrackerRegistry *_Nonnull _trackerRegistry;
19
26
 
20
27
  NSMutableArray<UIBarButtonItem *> *_Nonnull _leadingBarButtonItems;
@@ -36,6 +43,17 @@
36
43
 
37
44
  #pragma mark - Public
38
45
 
46
+ - (void)updateNavigationBarVisibilityAnimated:(BOOL)animated
47
+ {
48
+ RNSStackNavigationController *navController = [self getNavigationController];
49
+ if (navController == nil || navController.topViewController != _screenController) {
50
+ return;
51
+ }
52
+
53
+ BOOL hidden = _configDataProvider == nil || _configDataProvider.hidden;
54
+ [navController.navigationBarCoordinator setHidden:hidden forNavigationController:navController animated:animated];
55
+ }
56
+
39
57
  - (void)rebuild
40
58
  {
41
59
  if (_configDataProvider == nil) {
@@ -104,7 +122,10 @@
104
122
  forController:controller];
105
123
 
106
124
  [self applyTitleMenuForController:controller];
107
- [self applyNavigationBarProperties];
125
+ [self updateNavigationBarVisibilityAnimated:YES];
126
+ #if !TARGET_OS_TV
127
+ [self updateBackButtonMenuEnabled];
128
+ #endif // !TARGET_OS_TV
108
129
  }
109
130
 
110
131
  - (void)applyConfigProperties
@@ -114,9 +135,25 @@
114
135
  }
115
136
 
116
137
  [self applyConfigPropertiesForController:[self requireScreenController]];
117
- [self applyNavigationBarProperties];
138
+ [self updateNavigationBarVisibilityAnimated:YES];
139
+ #if !TARGET_OS_TV
140
+ [self updateBackButtonMenuEnabled];
141
+ #endif // !TARGET_OS_TV
118
142
  }
119
143
 
144
+ #if !TARGET_OS_TV
145
+ - (void)updateBackButtonMenuEnabled
146
+ {
147
+ RNSStackNavigationController *navController = [self getNavigationController];
148
+ if (navController == nil || navController.topViewController != _screenController) {
149
+ return;
150
+ }
151
+
152
+ BOOL enabled = _configDataProvider == nil || _configDataProvider.backButtonMenuEnabled;
153
+ [navController.navigationBarCoordinator setBackButtonMenuEnabled:enabled forNavigationController:navController];
154
+ }
155
+ #endif // !TARGET_OS_TV
156
+
120
157
  /**
121
158
  Rebuilds an existing item: sets all props and applies the menu config.
122
159
  */
@@ -266,6 +303,7 @@
266
303
  _configDataProvider = nil;
267
304
  _frameChangeDelegate = nil;
268
305
  _eventsDelegate = nil;
306
+ _imageLoader = nil;
269
307
 
270
308
  [_leadingBarButtonItems removeAllObjects];
271
309
  [_trailingBarButtonItems removeAllObjects];
@@ -277,6 +315,8 @@
277
315
 
278
316
  navItem.title = nil;
279
317
  navItem.titleView = nil;
318
+ navItem.standardAppearance = nil;
319
+ navItem.scrollEdgeAppearance = nil;
280
320
  [navItem setLeftBarButtonItems:@[] animated:YES];
281
321
  [navItem setRightBarButtonItems:@[] animated:YES];
282
322
 
@@ -297,13 +337,16 @@
297
337
  #endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
298
338
 
299
339
  #if !TARGET_OS_TV
340
+ navItem.prompt = nil;
300
341
  navItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;
342
+
343
+ [self clearAppliedBackButtonConfig];
301
344
  #endif // !TARGET_OS_TV
302
345
 
303
- RNSStackNavigationController *navController = [self getNavigationController];
304
- if (navController != nil) {
305
- [navController.navigationBarCoordinator setHidden:NO forNavigationController:navController animated:YES];
306
- }
346
+ [self updateNavigationBarVisibilityAnimated:YES];
347
+ #if !TARGET_OS_TV
348
+ [self updateBackButtonMenuEnabled];
349
+ #endif // !TARGET_OS_TV
307
350
  }
308
351
 
309
352
  /**
@@ -377,21 +420,25 @@
377
420
  return (RNSStackNavigationController *)navController;
378
421
  }
379
422
 
380
- - (void)applyNavigationBarProperties
381
- {
382
- RNSStackNavigationController *navController = [self getNavigationController];
383
- if (navController != nil) {
384
- [navController.navigationBarCoordinator setHidden:_configDataProvider.hidden
385
- forNavigationController:navController
386
- animated:YES];
387
- }
388
- }
389
-
390
423
  - (void)applyConfigPropertiesForController:(RNSStackScreenController *)controller
391
424
  {
392
425
  UINavigationItem *navItem = controller.navigationItem;
393
426
 
394
427
  navItem.title = _configDataProvider.title;
428
+ navItem.standardAppearance = _configDataProvider.standardAppearance;
429
+ navItem.scrollEdgeAppearance = _configDataProvider.scrollEdgeAppearance;
430
+
431
+ #if !TARGET_OS_TV
432
+ NSString *prompt = _configDataProvider.prompt;
433
+ if (navItem.prompt != prompt && ![navItem.prompt isEqualToString:prompt]) {
434
+ navItem.prompt = prompt;
435
+ // UIKit does not resize an already visible navigation bar when the prompt
436
+ // of its navigation item changes - request layout explicitly.
437
+ [controller.navigationController.view setNeedsLayout];
438
+ }
439
+
440
+ [self applyBackButtonConfigForController:controller];
441
+ #endif // !TARGET_OS_TV
395
442
 
396
443
  #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
397
444
  if (@available(iOS 26.0, *)) {
@@ -407,6 +454,32 @@
407
454
  #endif // !TARGET_OS_TV
408
455
  }
409
456
 
457
+ #if !TARGET_OS_TV
458
+ - (void)applyBackButtonConfigForController:(RNSStackScreenController *)controller
459
+ {
460
+ NSArray<UIViewController *> *viewControllers = controller.navigationController.viewControllers;
461
+ NSUInteger index = [viewControllers indexOfObject:controller];
462
+ if (index == NSNotFound || index == 0) {
463
+ return;
464
+ }
465
+
466
+ UINavigationItem *prevItem = viewControllers[index - 1].navigationItem;
467
+ _backButtonConfigTargetItem = prevItem;
468
+ prevItem.backButtonTitle = _configDataProvider.backButtonTitle;
469
+ prevItem.backButtonDisplayMode = _configDataProvider.backButtonDisplayMode;
470
+ }
471
+ #endif // !TARGET_OS_TV
472
+
473
+ #if !TARGET_OS_TV
474
+ - (void)clearAppliedBackButtonConfig
475
+ {
476
+ UINavigationItem *targetItem = _backButtonConfigTargetItem;
477
+ _backButtonConfigTargetItem = nil;
478
+ targetItem.backButtonTitle = nil;
479
+ targetItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeDefault;
480
+ }
481
+ #endif // !TARGET_OS_TV
482
+
410
483
  - (void)applyItemsWithTitleView:(nullable UIView *)titleView
411
484
  subtitleView:(nullable UIView *)subtitleView
412
485
  largeSubtitleView:(nullable UIView *)largeSubtitleView
@@ -471,6 +544,15 @@
471
544
  withHeaderEventsDelegate:_eventsDelegate
472
545
  withImageLoader:_imageLoader];
473
546
 
547
+ #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
548
+ if (@available(iOS 26.0, *)) {
549
+ if (item.identifier != nil) {
550
+ barButtonItem.identifier = item.identifier;
551
+ }
552
+ barButtonItem.hidesSharedBackground = item.hidesSharedBackground;
553
+ }
554
+ #endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
555
+
474
556
  if (item.menu != nil && item.itemId != nil) {
475
557
  RNSStackHeaderMenuToggleStateTracker *tracker = [_trackerRegistry trackerForItemId:item.itemId];
476
558
  __weak auto weakSelf = self;
@@ -1,8 +1,9 @@
1
1
  #import "RNSTabBarAppearanceCoordinator.h"
2
2
  #import <React/RCTFont.h>
3
3
  #import <React/RCTImageLoader.h>
4
+ #import <React/RCTLog.h>
4
5
  #import "RCTConvert+RNSTabs.h"
5
- #import "RNSConversions.h"
6
+ #import "RNSConversions-Tabs.h"
6
7
  #import "RNSImageLoadingHelper.h"
7
8
  #import "RNSTabBarController.h"
8
9
  #import "RNSTabsHostComponentView.h"
@@ -62,30 +63,60 @@
62
63
  if (screenView.iconType == RNSTabsIconTypeSfSymbol || screenView.iconType == RNSTabsIconTypeXcasset) {
63
64
  if (screenView.iconResourceName != nil) {
64
65
  if (screenView.iconType == RNSTabsIconTypeSfSymbol) {
65
- tabBarItem.image = [UIImage systemImageNamed:screenView.iconResourceName];
66
+ UIImage *image = [UIImage systemImageNamed:screenView.iconResourceName];
67
+ if (image == nil) {
68
+ RCTLogWarn(@"[RNScreens] Failed to load SF Symbol \"%@\" for tab bar item", screenView.iconResourceName);
69
+ }
70
+ tabBarItem.image = image;
66
71
  } else {
67
- tabBarItem.image = [UIImage imageNamed:screenView.iconResourceName];
72
+ UIImage *image = [UIImage imageNamed:screenView.iconResourceName];
73
+ if (image == nil) {
74
+ RCTLogWarn(@"[RNScreens] Failed to load xcasset \"%@\" for tab bar item", screenView.iconResourceName);
75
+ }
76
+ tabBarItem.image = image;
68
77
  }
69
78
  } else if (screenView.systemItem != RNSTabsScreenSystemItemNone) {
70
79
  // Restore default system item icon
71
- UITabBarSystemItem systemItem =
80
+ std::optional<UITabBarSystemItem> systemItem =
72
81
  rnscreens::conversion::RNSTabsScreenSystemItemToUITabBarSystemItem(screenView.systemItem);
73
- tabBarItem.image = [[UITabBarItem alloc] initWithTabBarSystemItem:systemItem tag:0].image;
82
+ if (!systemItem) {
83
+ RCTLogError(
84
+ @"[RNScreens] Conversion from tabs screen systemItem to UITabBarSystemItem failed for systemItem [%ld]",
85
+ (long)screenView.systemItem);
86
+ return;
87
+ }
88
+ tabBarItem.image = [[UITabBarItem alloc] initWithTabBarSystemItem:systemItem.value() tag:0].image;
74
89
  } else {
75
90
  tabBarItem.image = nil;
76
91
  }
77
92
 
78
93
  if (screenView.selectedIconResourceName != nil) {
79
94
  if (screenView.iconType == RNSTabsIconTypeSfSymbol) {
80
- tabBarItem.selectedImage = [UIImage systemImageNamed:screenView.selectedIconResourceName];
95
+ UIImage *selectedImage = [UIImage systemImageNamed:screenView.selectedIconResourceName];
96
+ if (selectedImage == nil) {
97
+ RCTLogWarn(@"[RNScreens] Failed to load SF Symbol \"%@\" for selected tab bar item",
98
+ screenView.selectedIconResourceName);
99
+ }
100
+ tabBarItem.selectedImage = selectedImage;
81
101
  } else {
82
- tabBarItem.selectedImage = [UIImage imageNamed:screenView.selectedIconResourceName];
102
+ UIImage *selectedImage = [UIImage imageNamed:screenView.selectedIconResourceName];
103
+ if (selectedImage == nil) {
104
+ RCTLogWarn(@"[RNScreens] Failed to load xcasset \"%@\" for selected tab bar item",
105
+ screenView.selectedIconResourceName);
106
+ }
107
+ tabBarItem.selectedImage = selectedImage;
83
108
  }
84
109
  } else if (screenView.systemItem != RNSTabsScreenSystemItemNone) {
85
110
  // Restore default system item icon
86
- UITabBarSystemItem systemItem =
111
+ std::optional<UITabBarSystemItem> systemItem =
87
112
  rnscreens::conversion::RNSTabsScreenSystemItemToUITabBarSystemItem(screenView.systemItem);
88
- tabBarItem.selectedImage = [[UITabBarItem alloc] initWithTabBarSystemItem:systemItem tag:0].selectedImage;
113
+ if (!systemItem) {
114
+ RCTLogError(
115
+ @"[RNScreens] Conversion from tabs screen systemItem to UITabBarSystemItem failed for systemItem [%ld]",
116
+ (long)screenView.systemItem);
117
+ return;
118
+ }
119
+ tabBarItem.selectedImage = [[UITabBarItem alloc] initWithTabBarSystemItem:systemItem.value() tag:0].selectedImage;
89
120
  } else {
90
121
  tabBarItem.selectedImage = nil;
91
122
  }
@@ -5,7 +5,7 @@
5
5
  #import "RNSTabsHostComponentView.h"
6
6
 
7
7
  #if defined(__cplusplus)
8
- #import <rnscreens/RNSTabsBottomAccessoryComponentDescriptor.h>
8
+ #import <react/renderer/components/rnscreens/RNSTabsBottomAccessoryComponentDescriptor.h>
9
9
  #endif // defined(__cplusplus)
10
10
 
11
11
  NS_ASSUME_NONNULL_BEGIN
@@ -4,7 +4,7 @@
4
4
 
5
5
  #if RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
6
6
 
7
- #import <rnscreens/RNSTabsBottomAccessoryComponentDescriptor.h>
7
+ #import <react/renderer/components/rnscreens/RNSTabsBottomAccessoryComponentDescriptor.h>
8
8
 
9
9
  namespace react = facebook::react;
10
10
 
@@ -1,5 +1,5 @@
1
1
  #import "RNSTabsBottomAccessoryContentComponentView.h"
2
- #import "RNSConversions.h"
2
+ #import "RNSConversions-Tabs.h"
3
3
  #import "RNSTabsBottomAccessoryComponentView.h"
4
4
  #import "RNSTabsBottomAccessoryHelper.h"
5
5
 
@@ -5,7 +5,7 @@
5
5
  #import <React/RCTConversions.h>
6
6
  #import <React/RCTLog.h>
7
7
  #import <react/renderer/components/rnscreens/EventEmitters.h>
8
- #import "RNSConversions.h"
8
+ #import "RNSConversions-Tabs.h"
9
9
 
10
10
  namespace react = facebook::react;
11
11
 
@@ -3,7 +3,7 @@
3
3
  #if RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
4
4
 
5
5
  #import <React/RCTConversions.h>
6
- #import <rnscreens/RNSTabsBottomAccessoryShadowNode.h>
6
+ #import <react/renderer/components/rnscreens/RNSTabsBottomAccessoryShadowNode.h>
7
7
 
8
8
  @implementation RNSTabsBottomAccessoryShadowStateProxy {
9
9
  RNSTabsBottomAccessoryComponentView *__weak _bottomAccessoryView;
@@ -0,0 +1,78 @@
1
+ #pragma once
2
+
3
+ #if defined(__cplusplus)
4
+
5
+ #import <React/RCTImageSource.h>
6
+ #import <UIKit/UIKit.h>
7
+ #import <react/renderer/components/rnscreens/EventEmitters.h>
8
+ #import <react/renderer/components/rnscreens/Props.h>
9
+ #import <optional>
10
+ #import "RNSDefines.h"
11
+ #import "RNSEnums.h"
12
+ #import "RNSTabsNavigationState.h"
13
+
14
+ namespace rnscreens::conversion {
15
+
16
+ namespace react = facebook::react;
17
+
18
+ std::optional<UIBlurEffectStyle> RNSMaybeUIBlurEffectStyleFromString(NSString *blurEffectString);
19
+
20
+ UIBlurEffect *RNSUIBlurEffectFromString(NSString *blurEffectString);
21
+
22
+ #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
23
+
24
+ API_AVAILABLE(ios(26.0))
25
+ UITabBarMinimizeBehavior UITabBarMinimizeBehaviorFromRNSTabsHostTabBarMinimizeBehavior(
26
+ react::RNSTabsHostIOSTabBarMinimizeBehavior tabBarMinimizeBehavior);
27
+
28
+ #endif // Check for iOS >= 26
29
+
30
+ #if RNS_IPHONE_OS_VERSION_AVAILABLE(18_0)
31
+
32
+ API_AVAILABLE(ios(18.0))
33
+ UITabBarControllerMode UITabBarControllerModeFromRNSTabsHostTabBarControllerMode(
34
+ react::RNSTabsHostIOSTabBarControllerMode tabBarControllerMode);
35
+
36
+ #endif // Check for iOS >= 18
37
+
38
+ react::RNSTabsHostIOSEventEmitter::OnTabSelectionRejectedRejectionReason
39
+ RNSOnTabSelectionRejectedRejectionReasonFromRNSTabsNavigationStateRejectionReason(
40
+ RNSTabsNavigationStateRejectionReason reason);
41
+
42
+ react::RNSTabsHostIOSEventEmitter::OnTabSelectedActionOrigin RNSOnTabSelectedActionOriginFromRNSTabsActionOrigin(
43
+ RNSTabsActionOrigin actionOrigin);
44
+
45
+ RNSTabsIconType RNSTabsIconTypeFromIcon(react::RNSTabsScreenIOSIconType iconType);
46
+
47
+ RNSTabsScreenSystemItem RNSTabsScreenSystemItemFromReactRNSTabsScreenSystemItem(
48
+ react::RNSTabsScreenIOSSystemItem systemItem);
49
+
50
+ std::optional<UITabBarSystemItem> RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSystemItem systemItem);
51
+
52
+ #if RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
53
+
54
+ API_AVAILABLE(ios(26.0))
55
+ std::optional<react::RNSTabsBottomAccessoryEventEmitter::OnEnvironmentChangeEnvironment>
56
+ RNSTabsBottomAccessoryOnEnvironmentChangePayloadFromUITabAccessoryEnvironment(UITabAccessoryEnvironment environment);
57
+
58
+ RNSTabsBottomAccessoryEnvironment RNSTabsBottomAccessoryEnvironmentFromCppEquivalent(
59
+ react::RNSTabsBottomAccessoryContentEnvironment environment);
60
+
61
+ #endif // RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
62
+
63
+ UIUserInterfaceStyle UIUserInterfaceStyleFromTabsScreenCppEquivalent(
64
+ react::RNSTabsScreenIOSUserInterfaceStyle userInterfaceStyle);
65
+
66
+ RCTImageSource *RCTImageSourceFromImageSourceAndIconType(const facebook::react::ImageSource *imageSource,
67
+ RNSTabsIconType iconType);
68
+
69
+ RNSOrientation RNSOrientationFromRNSTabsScreenOrientation(react::RNSTabsScreenIOSOrientation orientation);
70
+
71
+ UITraitEnvironmentLayoutDirection UITraitEnvironmentLayoutDirectionFromTabsHostCppEquivalent(
72
+ react::RNSTabsHostIOSLayoutDirection layoutDirection);
73
+
74
+ UIUserInterfaceStyle UIUserInterfaceStyleFromHostProp(react::RNSTabsHostIOSColorScheme colorScheme);
75
+
76
+ }; // namespace rnscreens::conversion
77
+
78
+ #endif // defined(__cplusplus)
@@ -1,10 +1,11 @@
1
- #import <React/RCTConversions.h>
1
+ #import "RNSConversions-Tabs.h"
2
+ #import <React/RCTLog.h>
2
3
  #import <react/renderer/imagemanager/RCTImagePrimitivesConversions.h>
3
- #import "RNSConversions.h"
4
- #import "RNSDefines.h"
5
4
 
6
5
  namespace rnscreens::conversion {
7
6
 
7
+ namespace react = facebook::react;
8
+
8
9
  UIBlurEffect *RNSUIBlurEffectFromOptionalUIBlurEffectStyle(std::optional<UIBlurEffectStyle> &maybeStyle)
9
10
  {
10
11
  if (maybeStyle) {
@@ -75,69 +76,6 @@ UIBlurEffect *RNSUIBlurEffectFromString(NSString *blurEffectString)
75
76
  return RNSUIBlurEffectFromOptionalUIBlurEffectStyle(maybeStyle);
76
77
  }
77
78
 
78
- std::optional<UIBlurEffectStyle> RNSMaybeUIBlurEffectStyleFromRNSBlurEffectStyle(RNSBlurEffectStyle blurEffect)
79
- {
80
- switch (blurEffect) {
81
- case RNSBlurEffectStyleNone:
82
- case RNSBlurEffectStyleSystemDefault:
83
- return std::nullopt;
84
- case RNSBlurEffectStyleExtraLight:
85
- return {UIBlurEffectStyleExtraLight};
86
- case RNSBlurEffectStyleLight:
87
- return {UIBlurEffectStyleLight};
88
- case RNSBlurEffectStyleDark:
89
- return {UIBlurEffectStyleDark};
90
- case RNSBlurEffectStyleRegular:
91
- return {UIBlurEffectStyleRegular};
92
- case RNSBlurEffectStyleProminent:
93
- return {UIBlurEffectStyleProminent};
94
- #if !TARGET_OS_TV
95
- case RNSBlurEffectStyleSystemUltraThinMaterial:
96
- return {UIBlurEffectStyleSystemUltraThinMaterial};
97
- case RNSBlurEffectStyleSystemThinMaterial:
98
- return {UIBlurEffectStyleSystemThinMaterial};
99
- case RNSBlurEffectStyleSystemMaterial:
100
- return {UIBlurEffectStyleSystemMaterial};
101
- case RNSBlurEffectStyleSystemThickMaterial:
102
- return {UIBlurEffectStyleSystemThickMaterial};
103
- case RNSBlurEffectStyleSystemChromeMaterial:
104
- return {UIBlurEffectStyleSystemChromeMaterial};
105
- case RNSBlurEffectStyleSystemUltraThinMaterialLight:
106
- return {UIBlurEffectStyleSystemUltraThinMaterialLight};
107
- case RNSBlurEffectStyleSystemThinMaterialLight:
108
- return {UIBlurEffectStyleSystemThinMaterialLight};
109
- case RNSBlurEffectStyleSystemMaterialLight:
110
- return {UIBlurEffectStyleSystemMaterialLight};
111
- case RNSBlurEffectStyleSystemThickMaterialLight:
112
- return {UIBlurEffectStyleSystemThickMaterialLight};
113
- case RNSBlurEffectStyleSystemChromeMaterialLight:
114
- return {UIBlurEffectStyleSystemChromeMaterialLight};
115
- case RNSBlurEffectStyleSystemUltraThinMaterialDark:
116
- return {UIBlurEffectStyleSystemUltraThinMaterialDark};
117
- case RNSBlurEffectStyleSystemThinMaterialDark:
118
- return {UIBlurEffectStyleSystemThinMaterialDark};
119
- case RNSBlurEffectStyleSystemMaterialDark:
120
- return {UIBlurEffectStyleSystemMaterialDark};
121
- case RNSBlurEffectStyleSystemThickMaterialDark:
122
- return {UIBlurEffectStyleSystemThickMaterialDark};
123
- case RNSBlurEffectStyleSystemChromeMaterialDark:
124
- return {UIBlurEffectStyleSystemChromeMaterialDark};
125
- default:
126
- RCTLogError(@"[RNScreens] unsupported blur effect style");
127
- return std::nullopt;
128
- #else // !TARGET_OS_TV
129
- default:
130
- return std::nullopt;
131
- #endif // !TARGET_OS_TV
132
- }
133
- }
134
-
135
- UIBlurEffect *RNSUIBlurEffectFromRNSBlurEffectStyle(RNSBlurEffectStyle blurEffect)
136
- {
137
- std::optional<UIBlurEffectStyle> maybeStyle = RNSMaybeUIBlurEffectStyleFromRNSBlurEffectStyle(blurEffect);
138
- return RNSUIBlurEffectFromOptionalUIBlurEffectStyle(maybeStyle);
139
- }
140
-
141
79
  #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
142
80
 
143
81
  API_AVAILABLE(ios(26.0))
@@ -323,11 +261,11 @@ RNSTabsScreenSystemItem RNSTabsScreenSystemItemFromReactRNSTabsScreenSystemItem(
323
261
  }
324
262
  }
325
263
 
326
- UITabBarSystemItem RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSystemItem systemItem)
264
+ std::optional<UITabBarSystemItem> RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSystemItem systemItem)
327
265
  {
328
- RCTAssert(systemItem != RNSTabsScreenSystemItemNone,
329
- @"Attempt to convert tabs systemItem none to UITabBarSystemItem");
330
266
  switch (systemItem) {
267
+ case RNSTabsScreenSystemItemNone:
268
+ return std::nullopt;
331
269
  case RNSTabsScreenSystemItemBookmarks:
332
270
  return UITabBarSystemItemBookmarks;
333
271
  case RNSTabsScreenSystemItemContacts:
@@ -353,8 +291,7 @@ UITabBarSystemItem RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSyst
353
291
  case RNSTabsScreenSystemItemTopRated:
354
292
  return UITabBarSystemItemTopRated;
355
293
  }
356
- RCTAssert(true, @"Attempt to convert unknown tabs screen systemItem to UITabBarSystemItem [%d]", systemItem);
357
- return UITabBarSystemItemSearch;
294
+ return std::nullopt;
358
295
  }
359
296
 
360
297
  #if RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE