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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/README.md +0 -4
  2. package/android/build.gradle +1 -0
  3. package/android/consumer-rules.pro +3 -0
  4. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderConfigViewGroup.kt +2 -0
  5. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderSubviewViewGroup.kt +2 -0
  6. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledViewGroup.kt +18 -3
  7. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +7 -3
  9. package/android/src/main/java/com/swmansion/rnscreens/common/colorscheme/ColorSchemeCoordinator.kt +11 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +9 -0
  11. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetAppearanceCoordinator.kt +2 -2
  12. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetBehaviorController.kt +2 -2
  13. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetDimensionsCoordinator.kt +6 -6
  14. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetKeyboardCoordinator.kt +1 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetNativeDismissCoordinator.kt +2 -2
  16. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetAvailableHeightProvider.kt +1 -1
  17. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetContainer.kt +1 -1
  18. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialog.kt +1 -1
  19. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialogManager.kt +26 -8
  20. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeDelegate.kt +1 -1
  21. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeProvider.kt +1 -1
  22. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetDialogEventEmitter.kt +1 -1
  23. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetConfig.kt +1 -1
  24. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetDetents.kt +1 -1
  25. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetAnimatorFactory.kt +1 -1
  26. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetDimmingManager.kt +6 -18
  27. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetDismissalOrigin.kt +1 -1
  28. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentation.kt +10 -10
  29. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationManager.kt +1 -1
  30. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationState.kt +1 -1
  31. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetStackRegistry.kt +1 -1
  32. package/android/src/main/java/com/swmansion/rnscreens/ext/FragmentManagerExt.kt +6 -0
  33. package/android/src/main/java/com/swmansion/rnscreens/helpers/FragmentManagerHelper.kt +0 -3
  34. package/android/src/main/java/com/swmansion/rnscreens/helpers/NoTintDrawable.kt +31 -0
  35. package/android/src/main/java/com/swmansion/rnscreens/helpers/ViewFinder.kt +0 -17
  36. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +29 -2
  37. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenContainer.kt +35 -3
  38. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +13 -0
  39. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderConfig.kt +7 -1
  40. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderSubviewManager.kt +7 -0
  41. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackViewManager.kt +6 -0
  42. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/DimmingView.kt +2 -0
  43. package/android/src/main/java/com/swmansion/rnscreens/legacy/stack/views/ScreensCoordinatorLayout.kt +2 -0
  44. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapper.kt +3 -3
  45. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapperViewManager.kt +1 -1
  46. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDetentChangedEvent.kt +1 -1
  47. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidAppearEvent.kt +1 -1
  48. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidDisappearEvent.kt +1 -1
  49. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDismissEvent.kt +1 -1
  50. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissEvent.kt +1 -1
  51. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissPreventedEvent.kt +1 -1
  52. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetSyncFlushEvent.kt +1 -1
  53. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillAppearEvent.kt +1 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillDisappearEvent.kt +1 -1
  55. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetContentView.kt +3 -3
  56. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHost.kt +5 -3
  57. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostEventEmitter.kt +11 -11
  58. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostViewManager.kt +10 -10
  59. package/android/src/main/java/com/swmansion/rnscreens/safearea/OnInterfaceInsetsChangeListener.kt +15 -0
  60. package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaProvider.kt +8 -8
  61. package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaView.kt +3 -2
  62. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +0 -52
  63. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +112 -59
  64. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +1 -1
  65. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderToolbar.kt +74 -0
  66. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +4 -73
  67. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +5 -2
  68. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +0 -6
  69. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +3 -7
  70. package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperation.kt +1 -0
  71. package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperationExecutor.kt +2 -1
  72. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +57 -19
  73. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerDelegate.kt +7 -0
  74. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerUpdateCoordinator.kt +5 -3
  75. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +14 -5
  76. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackUpdateBatchStateProviding.kt +10 -0
  77. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/PreventNativeDismissCallback.kt +2 -2
  78. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +33 -12
  79. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceApplicator.kt +106 -10
  80. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +44 -3
  81. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceModel.kt +3 -0
  82. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/CustomBottomNavigationView.kt +21 -1
  83. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +28 -13
  84. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainerDelegate.kt +11 -0
  85. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +12 -2
  86. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +41 -17
  87. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenDelegate.kt +6 -0
  88. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIcon.kt +82 -0
  89. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIconTinting.kt +17 -0
  90. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenViewManager.kt +26 -19
  91. package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +14 -7
  92. package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +22 -6
  93. package/ios/RNSEnums.h +14 -1
  94. package/ios/helpers/image/RNSImageLoadingHelper.h +7 -0
  95. package/ios/helpers/image/RNSImageLoadingHelper.mm +9 -0
  96. package/ios/legacy/RNSBarButtonItem.mm +15 -0
  97. package/ios/legacy/RNSConvert.h +6 -0
  98. package/ios/legacy/RNSConvert.mm +17 -0
  99. package/ios/legacy/RNSNavigationBar.h +31 -0
  100. package/ios/legacy/RNSNavigationBar.mm +15 -0
  101. package/ios/legacy/RNSScreen.mm +122 -12
  102. package/ios/legacy/RNSScreenContentWrapper.mm +4 -1
  103. package/ios/legacy/RNSScreenStack.mm +202 -15
  104. package/ios/legacy/RNSScreenStackHeaderConfig.h +30 -0
  105. package/ios/legacy/RNSScreenStackHeaderConfig.mm +70 -17
  106. package/ios/legacy/RNSScreenStackHeaderSubview.mm +33 -0
  107. package/ios/safe-area/RNSSafeAreaViewComponentView.mm +1 -12
  108. package/ios/stack/conversion/RNSConversions-Stack.h +30 -0
  109. package/ios/stack/conversion/RNSConversions-Stack.mm +79 -0
  110. package/ios/stack/header/RNSHeaderItemVisibilityPriority.h +9 -0
  111. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +4 -0
  112. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +40 -6
  113. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +5 -0
  114. package/ios/stack/header/RNSStackHeaderContentFactory.mm +3 -0
  115. package/ios/stack/header/RNSStackHeaderItemComponentView.h +9 -2
  116. package/ios/stack/header/RNSStackHeaderItemComponentView.mm +57 -3
  117. package/ios/stack/header/RNSStackHeaderItemDataProviding.h +5 -0
  118. package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +13 -0
  119. package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +24 -0
  120. package/ios/stack/header/RNSStackHeaderMenuFinder.h +8 -1
  121. package/ios/stack/header/RNSStackHeaderMenuFinder.mm +26 -9
  122. package/ios/stack/screen/RNSStackScreenComponentView.h +2 -1
  123. package/ios/stack/screen/RNSStackScreenComponentView.mm +23 -0
  124. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +81 -8
  125. package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +79 -16
  126. package/ios/tabs/RNSTabBarItemCoordinator.h +16 -0
  127. package/ios/tabs/RNSTabBarItemCoordinator.mm +143 -0
  128. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h +24 -0
  129. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm +22 -0
  130. package/ios/tabs/conversion/RNSConversions-Tabs.h +22 -0
  131. package/ios/tabs/conversion/RNSConversions-Tabs.mm +97 -3
  132. package/ios/tabs/host/RNSTabBarController.h +16 -0
  133. package/ios/tabs/host/RNSTabBarController.mm +516 -107
  134. package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
  135. package/ios/tabs/host/RNSTabsHostComponentView.mm +32 -2
  136. package/ios/tabs/screen/RNSTabsScreenComponentView.h +21 -0
  137. package/ios/tabs/screen/RNSTabsScreenComponentView.mm +54 -69
  138. package/ios/tabs/screen/RNSTabsScreenViewController.mm +1 -0
  139. package/ios/utils/RNSDefines.h +12 -7
  140. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +3 -2
  141. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  142. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +8 -3
  143. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  144. package/lib/commonjs/components/stack/header/StackHeaderConfig.js +17 -0
  145. package/lib/commonjs/components/stack/header/StackHeaderConfig.js.map +1 -0
  146. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
  147. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  148. package/lib/commonjs/components/stack/host/StackHost.js +8 -1
  149. package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
  150. package/lib/commonjs/components/stack/host/StackHost.web.js +0 -2
  151. package/lib/commonjs/components/stack/host/StackHost.web.js.map +1 -1
  152. package/lib/commonjs/components/stack/index.js.map +1 -1
  153. package/lib/commonjs/components/tabs/host/TabsHost.ios.js +2 -0
  154. package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
  155. package/lib/commonjs/components/tabs/host/{TabsHost.web.js → TabsHost.js} +1 -1
  156. package/lib/commonjs/components/tabs/host/TabsHost.js.map +1 -0
  157. package/lib/commonjs/components/tabs/index.js.map +1 -1
  158. package/lib/commonjs/components/tabs/screen/TabsScreen.android.js +3 -1
  159. package/lib/commonjs/components/tabs/screen/TabsScreen.android.js.map +1 -1
  160. package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js +10 -1
  161. package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js.map +1 -1
  162. package/lib/commonjs/components/tabs/screen/{TabsScreen.web.js → TabsScreen.js} +1 -1
  163. package/lib/commonjs/components/tabs/screen/TabsScreen.js.map +1 -0
  164. package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js → tabs/screen/TabsScreenIcon.types.js} +1 -1
  165. package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
  166. package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  167. package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  168. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  169. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  170. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  171. package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  172. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
  173. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  174. package/lib/commonjs/legacy/components/ScreenStackItem.js +31 -11
  175. package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
  176. package/lib/module/components/stack/header/StackHeaderConfig.android.js +4 -3
  177. package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  178. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +9 -4
  179. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  180. package/lib/module/components/stack/header/StackHeaderConfig.js +10 -0
  181. package/lib/module/components/stack/header/StackHeaderConfig.js.map +1 -0
  182. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
  183. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  184. package/lib/module/components/stack/host/StackHost.js +9 -2
  185. package/lib/module/components/stack/host/StackHost.js.map +1 -1
  186. package/lib/module/components/stack/host/StackHost.web.js +0 -3
  187. package/lib/module/components/stack/host/StackHost.web.js.map +1 -1
  188. package/lib/module/components/stack/index.js.map +1 -1
  189. package/lib/module/components/tabs/host/TabsHost.ios.js +2 -0
  190. package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
  191. package/{src/components/tabs/host/TabsHost.web.tsx → lib/module/components/tabs/host/TabsHost.js} +1 -2
  192. package/lib/module/components/tabs/host/TabsHost.js.map +1 -0
  193. package/lib/module/components/tabs/index.js.map +1 -1
  194. package/lib/module/components/tabs/screen/TabsScreen.android.js +3 -1
  195. package/lib/module/components/tabs/screen/TabsScreen.android.js.map +1 -1
  196. package/lib/module/components/tabs/screen/TabsScreen.ios.js +10 -1
  197. package/lib/module/components/tabs/screen/TabsScreen.ios.js.map +1 -1
  198. package/{src/components/tabs/screen/TabsScreen.web.tsx → lib/module/components/tabs/screen/TabsScreen.js} +1 -2
  199. package/lib/module/components/tabs/screen/TabsScreen.js.map +1 -0
  200. package/lib/module/components/tabs/screen/TabsScreenIcon.types.js +2 -0
  201. package/lib/module/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
  202. package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  203. package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  204. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  205. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  206. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  207. package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  208. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
  209. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  210. package/lib/module/legacy/components/ScreenStackItem.js +31 -11
  211. package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
  212. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts +6 -3
  213. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
  214. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +4 -3
  215. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  216. package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts +8 -0
  217. package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts.map +1 -0
  218. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts +6 -3
  219. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  220. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +137 -2
  221. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  222. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +2 -0
  223. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts.map +1 -1
  224. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
  225. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +5 -0
  226. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
  227. package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
  228. package/lib/typescript/components/stack/host/StackHost.types.d.ts +24 -1
  229. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  230. package/lib/typescript/components/stack/host/StackHost.web.d.ts +1 -3
  231. package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
  232. package/lib/typescript/components/stack/index.d.ts +4 -3
  233. package/lib/typescript/components/stack/index.d.ts.map +1 -1
  234. package/lib/typescript/components/tabs/host/TabsHost.d.ts +5 -0
  235. package/lib/typescript/components/tabs/host/TabsHost.d.ts.map +1 -0
  236. package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
  237. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +56 -0
  238. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
  239. package/lib/typescript/components/tabs/index.d.ts +4 -6
  240. package/lib/typescript/components/tabs/index.d.ts.map +1 -1
  241. package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts.map +1 -1
  242. package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts +42 -7
  243. package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts.map +1 -1
  244. package/lib/typescript/components/tabs/screen/TabsScreen.d.ts +5 -0
  245. package/lib/typescript/components/tabs/screen/TabsScreen.d.ts.map +1 -0
  246. package/lib/typescript/components/tabs/screen/TabsScreen.ios.d.ts.map +1 -1
  247. package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts +78 -13
  248. package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts.map +1 -1
  249. package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts +91 -0
  250. package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts.map +1 -0
  251. package/lib/typescript/components/tabs/screen/index.d.ts +1 -0
  252. package/lib/typescript/components/tabs/screen/index.d.ts.map +1 -1
  253. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -0
  254. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
  255. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +1 -0
  256. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
  257. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +4 -0
  258. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  259. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +6 -0
  260. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  261. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +3 -0
  262. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  263. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +6 -0
  264. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
  265. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +10 -1
  266. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
  267. package/lib/typescript/legacy/components/ScreenStackItem.d.ts +25 -0
  268. package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
  269. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +4 -0
  270. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
  271. package/lib/typescript/legacy/types.d.ts +30 -0
  272. package/lib/typescript/legacy/types.d.ts.map +1 -1
  273. package/package.json +4 -2
  274. package/src/components/stack/header/StackHeaderConfig.android.tsx +6 -20
  275. package/src/components/stack/header/StackHeaderConfig.android.types.ts +4 -3
  276. package/src/components/stack/header/StackHeaderConfig.ios.tsx +10 -16
  277. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +148 -2
  278. package/src/components/stack/header/StackHeaderConfig.tsx +12 -0
  279. package/src/components/stack/header/StackHeaderConfig.types.ts +2 -0
  280. package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +9 -1
  281. package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +5 -0
  282. package/src/components/stack/host/StackHost.tsx +10 -3
  283. package/src/components/stack/host/StackHost.types.ts +25 -1
  284. package/src/components/stack/host/StackHost.web.tsx +1 -4
  285. package/src/components/stack/index.ts +9 -1
  286. package/src/components/tabs/host/TabsHost.ios.tsx +2 -0
  287. package/src/components/tabs/host/TabsHost.ios.types.ts +60 -0
  288. package/src/components/tabs/host/TabsHost.tsx +7 -0
  289. package/src/components/tabs/index.ts +9 -0
  290. package/src/components/tabs/screen/TabsScreen.android.tsx +8 -3
  291. package/src/components/tabs/screen/TabsScreen.android.types.ts +42 -7
  292. package/src/components/tabs/screen/TabsScreen.ios.tsx +22 -5
  293. package/src/components/tabs/screen/TabsScreen.ios.types.ts +79 -17
  294. package/src/components/tabs/screen/TabsScreen.tsx +7 -0
  295. package/src/components/tabs/screen/TabsScreenIcon.types.ts +117 -0
  296. package/src/components/tabs/screen/index.ts +1 -0
  297. package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -0
  298. package/src/fabric/legacy/ScreenStackNativeComponent.ts +2 -0
  299. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +11 -0
  300. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +11 -0
  301. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +7 -0
  302. package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +9 -0
  303. package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +20 -2
  304. package/src/legacy/components/ScreenStackItem.tsx +59 -12
  305. package/src/legacy/types.ts +31 -0
  306. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenModalFragment.kt +0 -281
  307. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogRootView.kt +0 -104
  308. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogScreen.kt +0 -26
  309. package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js +0 -10
  310. package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js.map +0 -1
  311. package/lib/commonjs/components/tabs/host/TabsHost.d.js +0 -2
  312. package/lib/commonjs/components/tabs/host/TabsHost.d.js.map +0 -1
  313. package/lib/commonjs/components/tabs/host/TabsHost.web.js.map +0 -1
  314. package/lib/commonjs/components/tabs/screen/TabsScreen.d.js +0 -2
  315. package/lib/commonjs/components/tabs/screen/TabsScreen.d.js.map +0 -1
  316. package/lib/commonjs/components/tabs/screen/TabsScreen.web.js.map +0 -1
  317. package/lib/module/components/stack/header/StackHeaderConfig.d.js +0 -2
  318. package/lib/module/components/stack/header/StackHeaderConfig.web.js +0 -4
  319. package/lib/module/components/stack/header/StackHeaderConfig.web.js.map +0 -1
  320. package/lib/module/components/tabs/host/TabsHost.d.js +0 -2
  321. package/lib/module/components/tabs/host/TabsHost.d.js.map +0 -1
  322. package/lib/module/components/tabs/host/TabsHost.web.js +0 -4
  323. package/lib/module/components/tabs/host/TabsHost.web.js.map +0 -1
  324. package/lib/module/components/tabs/screen/TabsScreen.d.js +0 -2
  325. package/lib/module/components/tabs/screen/TabsScreen.d.js.map +0 -1
  326. package/lib/module/components/tabs/screen/TabsScreen.web.js +0 -4
  327. package/lib/module/components/tabs/screen/TabsScreen.web.js.map +0 -1
  328. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +0 -7
  329. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +0 -1
  330. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +0 -7
  331. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +0 -1
  332. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +0 -7
  333. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +0 -1
  334. package/src/components/stack/header/StackHeaderConfig.d.ts +0 -22
  335. package/src/components/stack/header/StackHeaderConfig.web.tsx +0 -5
  336. package/src/components/tabs/host/TabsHost.d.ts +0 -12
  337. package/src/components/tabs/screen/TabsScreen.d.ts +0 -12
@@ -6,7 +6,7 @@ import { NativeSyntheticEvent, StyleSheet } from 'react-native';
6
6
  import { resolveIconAssetSources, resolveMenuIcons } from './iconUtils.ios';
7
7
 
8
8
  export default function StackHeaderItem(props: StackHeaderItemProps) {
9
- const { render, onPress, icon, menu, ...rest } = props;
9
+ const { render, onPress, icon, menu, menuRepresentation, ...rest } = props;
10
10
 
11
11
  // `rest.menu` includes some JS callback within nested menu specification
12
12
  // codegen strips JS functions and replaces them with NULLT and keys of such type
@@ -24,12 +24,20 @@ export default function StackHeaderItem(props: StackHeaderItemProps) {
24
24
  () => (menu != null ? resolveMenuIcons(menu) : undefined),
25
25
  [menu],
26
26
  );
27
+ const resolvedMenuRepresentation = useMemo(
28
+ () =>
29
+ menuRepresentation != null
30
+ ? resolveMenuIcons(menuRepresentation)
31
+ : undefined,
32
+ [menuRepresentation],
33
+ );
27
34
 
28
35
  return (
29
36
  <StackHeaderItemIOSNativeComponent
30
37
  {...rest}
31
38
  icon={resolvedIcon}
32
39
  menu={resolvedMenu}
40
+ menuRepresentation={resolvedMenuRepresentation}
33
41
  // We need to tell iOS that we want the handler to be attached only when we actually require it
34
42
  // because doing so makes the menu appear on long press instead of tap
35
43
  respondsToOnPress={!!onPress}
@@ -1,6 +1,7 @@
1
1
  import type { ReactElement } from 'react';
2
2
  import type { PlatformIconIOS } from '../../../shared/types';
3
3
  import type { StackHeaderMenuIOS } from './StackHeaderMenu.ios.types';
4
+ import type { StackHeaderItemVisibilityPriorityIOS } from '../StackHeaderConfig.ios.types';
4
5
 
5
6
  export type StackHeaderItemPlacement =
6
7
  | 'leading'
@@ -14,9 +15,13 @@ export type StackHeaderItemProps = {
14
15
  itemId?: string | undefined;
15
16
  identifier?: string | undefined;
16
17
  hidesSharedBackground?: boolean | undefined;
18
+ visibilityPriority?: StackHeaderItemVisibilityPriorityIOS | undefined;
17
19
  title?: string | undefined;
18
20
  icon?: PlatformIconIOS | undefined;
19
21
  render?: (() => ReactElement) | undefined;
20
22
  menu?: StackHeaderMenuIOS | undefined;
23
+ menuRepresentation?: StackHeaderMenuIOS | undefined;
24
+ variant?: 'plain' | 'prominent' | undefined;
25
+ disabled?: boolean | undefined;
21
26
  onPress?: (() => void) | undefined;
22
27
  };
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { StyleSheet } from 'react-native';
2
+ import { Platform, StyleSheet } from 'react-native';
3
3
  import StackHostNativeComponent from '../../../fabric/stack/StackHostNativeComponent';
4
4
  import type { StackHostProps } from './StackHost.types';
5
5
 
@@ -7,10 +7,17 @@ import type { StackHostProps } from './StackHost.types';
7
7
  * EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
8
8
  */
9
9
  function StackHost(props: StackHostProps) {
10
- const { children, ref, ...restProps } = props;
10
+ const { children, ref, direction, ...restProps } = props;
11
+
12
+ // RN's `direction` style sets the native View's layoutDirection, which the
13
+ // stack's native subtree inherits. iOS needs a trait override instead.
14
+ const directionStyle = Platform.OS === 'android' ? { direction } : undefined;
11
15
 
12
16
  return (
13
- <StackHostNativeComponent ref={ref} style={styles.container} {...restProps}>
17
+ <StackHostNativeComponent
18
+ ref={ref}
19
+ style={[styles.container, directionStyle]}
20
+ {...restProps}>
14
21
  {children}
15
22
  </StackHostNativeComponent>
16
23
  );
@@ -1,10 +1,12 @@
1
1
  import React from 'react';
2
2
  import type { HostInstance, ViewProps } from 'react-native';
3
3
  import { type NativeProps } from '../../../fabric/stack/StackHostNativeComponent';
4
- import type { ColorScheme } from '../../shared/types';
4
+ import type { ColorScheme, Direction } from '../../shared/types';
5
5
 
6
6
  export type StackHostColorScheme = ColorScheme | 'inherit';
7
7
 
8
+ export type StackHostDirection = Direction | 'inherit';
9
+
8
10
  export type StackHostProps = {
9
11
  // General
10
12
  children: NonNullable<ViewProps['children']>;
@@ -12,6 +14,28 @@ export type StackHostProps = {
12
14
  ref?:
13
15
  | React.RefObject<(React.Component<NativeProps> & HostInstance) | null>
14
16
  | undefined;
17
+ /**
18
+ * @summary Specifies the layout direction of the native container, its views
19
+ * and child containers.
20
+ *
21
+ * The following values are currently supported:
22
+ * - `inherit` - uses parent's layout direction,
23
+ * - `ltr` - forces left-to-right layout direction,
24
+ * - `rtl` - forces right-to-left layout direction.
25
+ *
26
+ * @remarks
27
+ * Layout direction isn't currently supported on iOS.
28
+ *
29
+ * On Android, this property relies on `react-native`'s `style.direction`
30
+ * (which sets the native Android `layoutDirection` View property). It is
31
+ * propagated via the view hierarchy, so `inherit` falls back to the direction
32
+ * set on one of the parent views.
33
+ *
34
+ * @default inherit
35
+ *
36
+ * @platform android
37
+ */
38
+ direction?: StackHostDirection | undefined;
15
39
  /**
16
40
  * @summary Specifies the color scheme used by the container and any child
17
41
  * containers.
@@ -1,7 +1,4 @@
1
- import { View, ViewProps } from 'react-native';
2
-
3
- // TODO: Determine what this type is & whether it should not be removed
4
- export type ScreenStackNativeProps = ViewProps;
1
+ import { View } from 'react-native';
5
2
 
6
3
  const StackHost = View;
7
4
 
@@ -2,7 +2,11 @@ import { StackHost } from './host';
2
2
  import { StackScreen } from './screen';
3
3
  import { StackHeaderConfig } from './header';
4
4
 
5
- export type { StackHostProps, StackHostColorScheme } from './host';
5
+ export type {
6
+ StackHostProps,
7
+ StackHostColorScheme,
8
+ StackHostDirection,
9
+ } from './host';
6
10
 
7
11
  export type {
8
12
  OnDismissEventPayload,
@@ -39,8 +43,12 @@ export type {
39
43
  StackHeaderToolbarMenuItemTypeAndroid,
40
44
  // iOS
41
45
  StackHeaderBackButtonDisplayModeIOS,
46
+ StackHeaderMinimizationBehaviorIOS,
47
+ StackHeaderRestorationBehaviorIOS,
48
+ StackHeaderItemVisibilityPriorityIOS,
42
49
  StackHeaderConfigPropsIOS,
43
50
  StackHeaderAppearanceIOS,
51
+ StackHeaderItemVariantIOS,
44
52
  StackHeaderInlineItemIOS,
45
53
  StackHeaderInlineCustomItemIOS,
46
54
  StackHeaderTitleCustomItemIOS,
@@ -50,9 +50,11 @@ function TabsHost(props: TabsHostProps) {
50
50
  layoutDirection={direction}
51
51
  tabBarHiddenAnimationEnabled={ios?.tabBarHiddenAnimationEnabled}
52
52
  tabBarControllerMode={ios?.tabBarControllerMode}
53
+ tabBarSidebarPreferredPlacement={ios?.tabBarSidebarPreferredPlacement}
53
54
  tabBarMinimizeBehavior={ios?.tabBarMinimizeBehavior}
54
55
  tabBarTintColor={ios?.tabBarTintColor}
55
56
  bottomAccessoryHidden={ios?.bottomAccessoryHidden}
57
+ prominentScreenKey={ios?.prominentScreenKey}
56
58
  onMoreTabSelected={ios?.onMoreTabSelected}>
57
59
  {children}
58
60
  {ios?.bottomAccessory && isIOS26OrHigher && (
@@ -33,6 +33,11 @@ export type TabBarMinimizeBehavior =
33
33
 
34
34
  export type TabBarControllerMode = 'automatic' | 'tabBar' | 'tabSidebar';
35
35
 
36
+ export type TabBarSidebarPreferredPlacement =
37
+ | 'automatic'
38
+ | 'sidebar'
39
+ | 'tabBar';
40
+
36
41
  export interface TabsHostPropsIOS {
37
42
  /**
38
43
  * @summary Whether changes of `tabBarHidden` are animated.
@@ -141,6 +146,61 @@ export interface TabsHostPropsIOS {
141
146
  * @supported iOS 18 or higher
142
147
  */
143
148
  tabBarControllerMode?: TabBarControllerMode | undefined;
149
+ /**
150
+ * @summary Specifies whether the sidebar or the tab bar is preferred when only
151
+ * one of them can be displayed.
152
+ *
153
+ * @description
154
+ * The following values are currently supported:
155
+ *
156
+ * - `automatic` - the system resolves to the platform default (the tab bar on iOS)
157
+ * - `sidebar` - the sidebar is displayed when it is available
158
+ * - `tabBar` - the tab bar is displayed
159
+ *
160
+ * This prop requires `tabBarControllerMode` to be set to `tabSidebar`.
161
+ * Otherwise, the sidebar is not considered a supported mode and the tab bar
162
+ * is always displayed.
163
+ *
164
+ * The button that shows the sidebar is visible only when the screen has
165
+ * a header. After using it, the sidebar is displayed and the content is accessible.
166
+ *
167
+ * The sidebar can also be shown with a swipe from the leading edge.
168
+ * In this case, the sidebar overlaps the content, and the content is not accessible until
169
+ * the sidebar is hidden.
170
+ *
171
+ * The sidebar is enabled only when the interface has a regular
172
+ * horizontal size class. On iPhone, this applies only to larger models
173
+ * (e.g. Pro Max, Plus and Air) in landscape orientation. On other iPhones
174
+ * (e.g. iPhone 18 Pro), and on all iPhones in portrait orientation,
175
+ * the tab bar is always displayed.
176
+ *
177
+ * @default Defaults to `automatic`.
178
+ *
179
+ * Not supported on tvOS.
180
+ *
181
+ * @platform ios
182
+ * @supported iOS 27 or higher
183
+ */
184
+ tabBarSidebarPreferredPlacement?: TabBarSidebarPreferredPlacement | undefined;
185
+ /**
186
+ * @summary `screenKey` of the tab screen that should receive the prominent treatment.
187
+ *
188
+ * Must match the `screenKey` of one of the child `TabsScreen`s. Where supported, that tab
189
+ * receives enhanced visual emphasis in the tab bar - it is detached from the other items
190
+ * onto its own surface and stays visible when the tab bar minimizes on scroll
191
+ * (see `tabBarMinimizeBehavior`).
192
+ *
193
+ * When omitted, a tab with `role: 'search'` and `automaticallyActivatesSearch` enabled
194
+ * becomes prominent automatically, otherwise no tab is prominent.
195
+ *
196
+ * @see {@link https://developer.apple.com/documentation/uikit/uitabbarcontroller/prominenttabidentifier|UITabBarController.prominentTabIdentifier}
197
+ *
198
+ * Not supported on tvOS.
199
+ *
200
+ * @platform ios
201
+ * @supported iOS 27 or higher
202
+ */
203
+ prominentScreenKey?: string | undefined;
144
204
  /**
145
205
  * @summary
146
206
  * A callback that gets invoked when the user taps the "More" tab bar item.
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import type { TabsHostProps } from './TabsHost.types';
4
+
5
+ const TabsHost: React.ComponentType<TabsHostProps> = View;
6
+
7
+ export default TabsHost;
@@ -19,6 +19,7 @@ export type {
19
19
  TabsBottomAccessoryComponentFactory,
20
20
  TabBarMinimizeBehavior,
21
21
  TabBarControllerMode,
22
+ TabBarSidebarPreferredPlacement,
22
23
  TabsHostPropsIOS,
23
24
  } from './host';
24
25
 
@@ -28,12 +29,20 @@ export type {
28
29
  TabsScreenPropsBase,
29
30
  TabsScreenProps,
30
31
  // Android
32
+ TabsScreenIconAndroid,
33
+ TabsScreenIconTintingAndroid,
31
34
  TabBarItemLabelVisibilityMode,
32
35
  TabsScreenItemStateAppearanceAndroid,
33
36
  TabsScreenAppearanceAndroid,
34
37
  TabsScreenPropsAndroid,
35
38
  // iOS
39
+ TabsScreenIconIOS,
40
+ TabsScreenIconImageRenderingModeIOS,
41
+ TabsScreenIconSymbolRenderingModeIOS,
42
+ TabsScreenIconTemplateIOS,
43
+ TabsScreenIconXcassetIOS,
36
44
  TabsScreenBlurEffect,
45
+ TabsScreenRole,
37
46
  TabsScreenSystemItem,
38
47
  TabsScreenAppearanceIOS,
39
48
  TabsScreenItemAppearanceIOS,
@@ -8,6 +8,7 @@ import {
8
8
  } from 'react-native';
9
9
  import TabsScreenAndroidNativeComponent, {
10
10
  type Appearance,
11
+ type IconTinting,
11
12
  type ItemStateAppearance,
12
13
  type NativeProps as TabsScreenAndroidNativeComponentProps,
13
14
  } from '../../../fabric/tabs/TabsScreenAndroidNativeComponent';
@@ -16,7 +17,7 @@ import type {
16
17
  TabsScreenItemStateAppearanceAndroid,
17
18
  } from './TabsScreen.android.types';
18
19
  import type { TabsScreenProps } from '../screen/TabsScreen.types';
19
- import type { PlatformIconAndroid } from '../../shared/types';
20
+ import type { TabsScreenIconAndroid } from './TabsScreenIcon.types';
20
21
  import { useTabsScreen } from './useTabsScreen';
21
22
  import { parseAndroidIconToNativeProps } from '../../shared';
22
23
 
@@ -128,13 +129,15 @@ function mapItemStateAppearanceToNativeProp(
128
129
  }
129
130
 
130
131
  function parseIconsToNativeProps(
131
- icon: PlatformIconAndroid | undefined,
132
- selectedIcon: PlatformIconAndroid | undefined,
132
+ icon: TabsScreenIconAndroid | undefined,
133
+ selectedIcon: TabsScreenIconAndroid | undefined,
133
134
  ): {
134
135
  imageIconResource?: ImageResolvedAssetSource | undefined;
135
136
  drawableIconResourceName?: string | undefined;
137
+ iconTinting?: IconTinting | undefined;
136
138
  selectedImageIconResource?: ImageResolvedAssetSource | undefined;
137
139
  selectedDrawableIconResourceName?: string | undefined;
140
+ selectedIconTinting?: IconTinting | undefined;
138
141
  } {
139
142
  const parsedIcon = parseAndroidIconToNativeProps(icon);
140
143
  const parsedSelectedIcon = parseAndroidIconToNativeProps(selectedIcon);
@@ -142,9 +145,11 @@ function parseIconsToNativeProps(
142
145
  return {
143
146
  imageIconResource: parsedIcon.imageIconResource,
144
147
  drawableIconResourceName: parsedIcon.drawableIconResourceName,
148
+ iconTinting: icon?.tinting,
145
149
  selectedImageIconResource: parsedSelectedIcon.imageIconResource,
146
150
  selectedDrawableIconResourceName:
147
151
  parsedSelectedIcon.drawableIconResourceName,
152
+ selectedIconTinting: selectedIcon?.tinting,
148
153
  };
149
154
  }
150
155
 
@@ -1,5 +1,5 @@
1
1
  import type { ColorValue, TextStyle } from 'react-native';
2
- import type { PlatformIconAndroid } from '../../shared/types';
2
+ import type { TabsScreenIconAndroid } from './TabsScreenIcon.types';
3
3
 
4
4
  export type TabBarItemLabelVisibilityMode =
5
5
  | 'auto'
@@ -85,6 +85,14 @@ export interface TabsScreenAppearanceAndroid {
85
85
  * @platform android
86
86
  */
87
87
  disabled?: TabsScreenItemStateAppearanceAndroid | undefined;
88
+ /**
89
+ * @summary Specifies the icon size of this tab's item in dp.
90
+ *
91
+ * Applies to this tab only. Unset uses the system default.
92
+ *
93
+ * @platform android
94
+ */
95
+ tabBarItemIconSize?: number | undefined;
88
96
  /**
89
97
  * @summary Specifies the background color of the active indicator.
90
98
  *
@@ -99,6 +107,24 @@ export interface TabsScreenAppearanceAndroid {
99
107
  * @platform android
100
108
  */
101
109
  tabBarItemActiveIndicatorEnabled?: boolean | undefined;
110
+ /**
111
+ * @summary Specifies the width of this tab's active indicator in dp.
112
+ *
113
+ * Applies to this tab only. If unset, it is this tab's icon size plus the
114
+ * default Material padding.
115
+ *
116
+ * @platform android
117
+ */
118
+ tabBarItemActiveIndicatorWidth?: number | undefined;
119
+ /**
120
+ * @summary Specifies the height of this tab's active indicator in dp.
121
+ *
122
+ * Applies to this tab only. If unset, it is this tab's icon size plus the
123
+ * default Material padding.
124
+ *
125
+ * @platform android
126
+ */
127
+ tabBarItemActiveIndicatorHeight?: number | undefined;
102
128
  /**
103
129
  * @summary Specifies the font family used for the title of each tab bar item.
104
130
  *
@@ -162,28 +188,37 @@ export interface TabsScreenPropsAndroid {
162
188
  * @summary Specifies the icon for the tab bar item.
163
189
  *
164
190
  * Supported values:
165
- * - `{ type: 'imageSource', imageSource }`
166
- * Uses an image from the provided resource.
191
+ * - `{ type: 'imageSource', imageSource, tinting? }`
192
+ * Uses an image from the provided resource. `tinting` defaults to
193
+ * `default`: the tab bar tints the image with the item icon color.
194
+ * `original` keeps the image's own colors.
167
195
  *
168
196
  * Remarks: `imageSource` type doesn't support SVGs on Android.
169
197
  * For loading SVGs use `drawableResource` type.
170
198
  *
171
- * - `{ type: 'drawableResource', name }`
172
- * Uses a drawable resource with the given name.
199
+ * - `{ type: 'drawableResource', name, tinting? }`
200
+ * Uses a drawable resource with the given name. `tinting` defaults to
201
+ * `default`: the tab bar tints the drawable with the item icon color.
202
+ * `original` keeps the drawable's own colors, e.g. of a multicolor
203
+ * VectorDrawable.
173
204
  *
174
205
  * Remarks: Requires passing a drawable to resources via Android Studio.
175
206
  *
207
+ * See `TabsScreenIconTintingAndroid` for the meaning of each value.
208
+ *
176
209
  * @platform android
177
210
  */
178
- icon?: PlatformIconAndroid | undefined;
211
+ icon?: TabsScreenIconAndroid | undefined;
179
212
  /**
180
213
  * @summary Specifies the icon for tab bar item when it is selected.
181
214
  *
182
215
  * Supports the same values as `icon` property for given platform.
216
+ * `tinting` may differ from the one of `icon`, e.g. a drawable that is
217
+ * tinted while unselected and shows its own colors while selected.
183
218
  *
184
219
  * To use `selectedIcon`, `icon` must also be provided.
185
220
  *
186
221
  * @platform android
187
222
  */
188
- selectedIcon?: PlatformIconAndroid | undefined;
223
+ selectedIcon?: TabsScreenIconAndroid | undefined;
189
224
  }
@@ -9,6 +9,8 @@ import {
9
9
  } from 'react-native';
10
10
  import TabsScreenIOSNativeComponent, {
11
11
  type IconType,
12
+ type IconImageRenderingMode,
13
+ type IconSymbolRenderingMode,
12
14
  type NativeProps as TabsScreenIOSNativeComponentProps,
13
15
  type Appearance,
14
16
  type ItemAppearance,
@@ -20,7 +22,7 @@ import type {
20
22
  TabsScreenItemStateAppearanceIOS,
21
23
  } from './TabsScreen.ios.types';
22
24
  import type { TabsScreenProps } from './TabsScreen.types';
23
- import type { PlatformIconIOS } from '../../shared/types';
25
+ import type { TabsScreenIconIOS } from './TabsScreenIcon.types';
24
26
  import { useTabsScreen } from './useTabsScreen';
25
27
 
26
28
  function TabsScreen(props: TabsScreenProps) {
@@ -72,6 +74,8 @@ function TabsScreen(props: TabsScreenProps) {
72
74
  )}
73
75
  userInterfaceStyle={ios?.experimental_userInterfaceStyle}
74
76
  systemItem={ios?.systemItem}
77
+ tabRole={ios?.role}
78
+ automaticallyActivatesSearch={ios?.automaticallyActivatesSearch}
75
79
  overrideScrollViewContentInsetAdjustmentBehavior={
76
80
  ios?.overrideScrollViewContentInsetAdjustmentBehavior
77
81
  }>
@@ -146,14 +150,18 @@ function mapItemStateAppearanceToNativeProp(
146
150
  }
147
151
 
148
152
  function parseIconsToNativeProps(
149
- icon: PlatformIconIOS | undefined,
150
- selectedIcon: PlatformIconIOS | undefined,
153
+ icon: TabsScreenIconIOS | undefined,
154
+ selectedIcon: TabsScreenIconIOS | undefined,
151
155
  ): {
152
156
  imageIconResource?: ImageResolvedAssetSource | undefined;
153
157
  drawableIconResourceName?: string | undefined;
154
158
  iconType?: IconType | undefined;
159
+ iconImageRenderingMode?: IconImageRenderingMode | undefined;
160
+ iconSymbolRenderingMode?: IconSymbolRenderingMode | undefined;
155
161
  iconImageSource?: ImageSourcePropType | undefined;
156
162
  iconResourceName?: string | undefined;
163
+ selectedIconImageRenderingMode?: IconImageRenderingMode | undefined;
164
+ selectedIconSymbolRenderingMode?: IconSymbolRenderingMode | undefined;
157
165
  selectedIconImageSource?: ImageSourcePropType | undefined;
158
166
  selectedIconResourceName?: string | undefined;
159
167
  } {
@@ -177,15 +185,21 @@ function parseIconsToNativeProps(
177
185
 
178
186
  return {
179
187
  iconType: parsedIcon.iconType,
188
+ iconImageRenderingMode: parsedIcon.iconImageRenderingMode,
189
+ iconSymbolRenderingMode: parsedIcon.iconSymbolRenderingMode,
180
190
  iconImageSource: parsedIcon.iconImageSource,
181
191
  iconResourceName: parsedIcon.iconResourceName,
192
+ selectedIconImageRenderingMode: parsedSelectedIcon.iconImageRenderingMode,
193
+ selectedIconSymbolRenderingMode: parsedSelectedIcon.iconSymbolRenderingMode,
182
194
  selectedIconImageSource: parsedSelectedIcon.iconImageSource,
183
195
  selectedIconResourceName: parsedSelectedIcon.iconResourceName,
184
196
  };
185
197
  }
186
198
 
187
- function parseIconToNativeProps(icon: PlatformIconIOS | undefined): {
199
+ function parseIconToNativeProps(icon: TabsScreenIconIOS | undefined): {
188
200
  iconType?: IconType | undefined;
201
+ iconImageRenderingMode?: IconImageRenderingMode | undefined;
202
+ iconSymbolRenderingMode?: IconSymbolRenderingMode | undefined;
189
203
  iconImageSource?: ImageSourcePropType | undefined;
190
204
  iconResourceName?: string | undefined;
191
205
  } {
@@ -196,16 +210,19 @@ function parseIconToNativeProps(icon: PlatformIconIOS | undefined): {
196
210
  if (icon.type === 'sfSymbol') {
197
211
  return {
198
212
  iconType: 'sfSymbol',
213
+ iconSymbolRenderingMode: icon.renderingMode,
199
214
  iconResourceName: icon.name,
200
215
  };
201
216
  } else if (icon.type === 'imageSource') {
202
217
  return {
203
218
  iconType: 'image',
219
+ iconImageRenderingMode: icon.renderingMode,
204
220
  iconImageSource: icon.imageSource,
205
221
  };
206
222
  } else if (icon.type === 'templateSource') {
207
223
  return {
208
- iconType: 'template',
224
+ iconType: 'image',
225
+ iconImageRenderingMode: 'template',
209
226
  iconImageSource: icon.templateSource,
210
227
  };
211
228
  } else if (icon.type === 'xcasset') {
@@ -1,12 +1,11 @@
1
1
  import type { ColorValue, TextStyle } from 'react-native';
2
- import type {
3
- UserInterfaceStyle,
4
- BlurEffect,
5
- PlatformIconIOS,
6
- } from '../../shared/types';
2
+ import type { UserInterfaceStyle, BlurEffect } from '../../shared/types';
3
+ import type { TabsScreenIconIOS } from './TabsScreenIcon.types';
7
4
 
8
5
  export type TabsScreenBlurEffect = BlurEffect | 'systemDefault';
9
6
 
7
+ export type TabsScreenRole = 'search';
8
+
10
9
  export type TabsScreenSystemItem =
11
10
  | 'bookmarks'
12
11
  | 'contacts'
@@ -233,33 +232,52 @@ export interface TabsScreenPropsIOS {
233
232
  * @summary Specifies the icon for the tab bar item.
234
233
  *
235
234
  * Supported values:
236
- * - `{ type: 'imageSource', imageSource }`
237
- * Uses an image from the provided resource.
238
- * - `{ type: 'sfSymbol', name }`
239
- * Uses an SF Symbol with the specified name.
235
+ * - `{ type: 'imageSource', imageSource, renderingMode? }`
236
+ * Uses an image from the provided resource. `renderingMode` defaults to
237
+ * `default`, which keeps the image's own colors. With `template` it is
238
+ * used as a template image and follows the state-dependent icon color.
239
+ * - `{ type: 'sfSymbol', name, renderingMode? }`
240
+ * Uses an SF Symbol with the specified name. If no system symbol
241
+ * matches, falls back to a custom symbol with that name from the app's
242
+ * asset catalog. `renderingMode` defaults to `default`, the system
243
+ * behavior: a single color for system symbols, while for custom symbols
244
+ * the rendering intent set in the asset catalog may change it. `original`
245
+ * shows the symbol's own color layers (Apple's "multicolor" rendering).
240
246
  * - `{ type: 'xcasset', name }`
241
- * Uses asset from Xcassets.
247
+ * Deprecated: use `sfSymbol` for custom symbols from the asset catalog, or
248
+ * `imageSource` with `{ uri: 'name' }` for asset catalog images (append
249
+ * `.png` to names containing a dot; add `renderingMode: 'template'` for an
250
+ * asset whose "Render As" is not `Original Image`).
251
+ * Uses an image from the asset catalog. Its colors follow the asset's
252
+ * "Render As" setting in the catalog: `Original Image` keeps its own colors,
253
+ * `Default` and `Template Image` follow the state-dependent icon color.
242
254
  * - `{ type: 'templateSource', templateSource }`
243
- * Uses the provided image as a template image.
244
- * The icon color will depend on the current state
245
- * of the tab bar item and icon color-related props.
255
+ * Deprecated: use `{ type: 'imageSource', imageSource, renderingMode: 'template' }`
256
+ * instead. Uses the provided image as a template image.
257
+ *
258
+ * See `TabsScreenIconImageRenderingModeIOS` and
259
+ * `TabsScreenIconSymbolRenderingModeIOS` for the meaning of each rendering mode.
246
260
  *
247
261
  * If no `selectedIcon` is provided, this icon will also
248
262
  * be used as the selected state icon.
249
263
  *
250
264
  * @platform ios
251
265
  */
252
- icon?: PlatformIconIOS | undefined;
266
+ icon?: TabsScreenIconIOS | undefined;
253
267
  /**
254
268
  * @summary Specifies the icon for tab bar item when it is selected.
255
269
  *
256
- * Supports the same values as `icon` property.
270
+ * Supports the same values as `icon` property. It must use the same icon
271
+ * `type` as `icon`; `renderingMode` may differ, e.g.
272
+ * `icon: { type: 'sfSymbol', name }` with
273
+ * `selectedIcon: { type: 'sfSymbol', name, renderingMode: 'original' }`
274
+ * shows the symbol tinted while unselected and in its own colors while selected.
257
275
  *
258
276
  * To use `selectedIcon`, `icon` must also be provided.
259
277
  *
260
278
  * @platform ios
261
279
  */
262
- selectedIcon?: PlatformIconIOS | undefined;
280
+ selectedIcon?: TabsScreenIconIOS | undefined;
263
281
  /**
264
282
  * @summary System-provided tab bar item with predefined icon and title
265
283
  *
@@ -269,13 +287,57 @@ export interface TabsScreenPropsIOS {
269
287
  * overridden by providing a custom `title`.
270
288
  *
271
289
  * @remarks
272
- * On iOS 26, `systemItem: 'search'` acts as a detached tab bar item, which does not display any title (system or custom).
290
+ * On iOS 26, `systemItem: 'search'` acts as a detached tab bar item, which does not display
291
+ * any title (system or custom). This no longer applies on iOS 27; to get a similar separation
292
+ * use `role: 'search'` together with `automaticallyActivatesSearch`.
273
293
  *
274
294
  * @see {@link https://developer.apple.com/documentation/uikit/uitabbaritem/systemitem|UITabBarItem.SystemItem}
275
295
  *
276
296
  * @platform ios
277
297
  */
278
298
  systemItem?: TabsScreenSystemItem | undefined;
299
+ /**
300
+ * @summary Gives this tab a system role. Currently the only role is `'search'`,
301
+ * which marks the tab as the system search tab.
302
+ *
303
+ * On iOS 26.1+ (where tabs are managed through the `UITab` API) a tab screen with
304
+ * `role: 'search'` is backed natively by `UISearchTab`, which enables the system
305
+ * search behavior: `automaticallyActivatesSearch` and the detached trailing
306
+ * placement UIKit gives search tabs. Behavior differs between OS versions: iOS 26.x
307
+ * detaches `UISearchTab` unconditionally, iOS 27.0 only while `automaticallyActivatesSearch`
308
+ * is enabled. This prop does not affect the tab bar item's icon or title - combine
309
+ * it with `systemItem: 'search'` for the system magnifier item. On iOS 27+ the detached
310
+ * (prominent) placement can be given to any tab instead through `TabsHost`
311
+ * `ios.prominentScreenKey`.
312
+ *
313
+ * The native tab class cannot change during the screen's lifetime - changing
314
+ * `role` on a mounted tab screen is not supported and triggers an assertion
315
+ * in development builds.
316
+ *
317
+ * @see {@link https://developer.apple.com/documentation/uikit/uisearchtab|UISearchTab}
318
+ *
319
+ * @default undefined
320
+ *
321
+ * @platform ios
322
+ * @supported iOS 26.1 or higher
323
+ */
324
+ role?: TabsScreenRole | undefined;
325
+ /**
326
+ * @summary Specifies whether selecting this tab automatically activates its search field.
327
+ *
328
+ * Effective only for tab screens with `role: 'search'` and only when a search bar
329
+ * is configured in the header of the screen stack nested in this tab
330
+ * (see `headerSearchBarOptions`). When enabled, selecting the search tab immediately
331
+ * activates the search field. Cancelling the search restores the previously selected tab.
332
+ *
333
+ * @see {@link https://developer.apple.com/documentation/uikit/uisearchtab/automaticallyactivatessearch|UISearchTab.automaticallyActivatesSearch}
334
+ *
335
+ * @default false
336
+ *
337
+ * @platform ios
338
+ * @supported iOS 26.1 or higher
339
+ */
340
+ automaticallyActivatesSearch?: boolean | undefined;
279
341
  /**
280
342
  * @summary Specifies if `contentInsetAdjustmentBehavior` of first ScrollView
281
343
  * in first descendant chain from tab screen should be overridden back from `never`
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import type { TabsScreenProps } from './TabsScreen.types';
4
+
5
+ const TabsScreen: React.ComponentType<TabsScreenProps> = View;
6
+
7
+ export default TabsScreen;