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
@@ -0,0 +1,117 @@
1
+ import type {
2
+ PlatformIconAndroidDrawableResource,
3
+ PlatformIconIOSSfSymbol,
4
+ PlatformIconIOSTemplate,
5
+ PlatformIconIOSXcasset,
6
+ PlatformIconShared,
7
+ } from '../../shared/types';
8
+
9
+ /**
10
+ * How the tab bar renders an `imageSource` icon on iOS. The names follow
11
+ * `UIImage.RenderingMode`.
12
+ *
13
+ * - `default` - the tab bar's default for images, also used when
14
+ * `renderingMode` is unset: the image keeps its own colors, as with
15
+ * `original`. This is not UIKit's automatic mode, in which the tab bar would
16
+ * draw the image as a template image.
17
+ * - `template` - the image is used as a template image: its shape is drawn in
18
+ * the state-dependent item icon color (`tabBarItemIconColor`,
19
+ * `tabBarTintColor`).
20
+ * - `original` - the image keeps its own colors and ignores the item icon color.
21
+ */
22
+ export type TabsScreenIconImageRenderingModeIOS =
23
+ | 'default'
24
+ | 'template'
25
+ | 'original';
26
+
27
+ /**
28
+ * How the tab bar renders an `sfSymbol` icon on iOS. The names follow the
29
+ * SF Symbols rendering modes.
30
+ *
31
+ * - `default` - the system behavior (UIKit's automatic mode), also used when
32
+ * `renderingMode` is unset: system symbols are rendered in a single color,
33
+ * the state-dependent item icon color; for custom symbols the rendering mode
34
+ * set in the asset catalog may change it.
35
+ * - `monochrome` - the symbol is rendered in a single color: the
36
+ * state-dependent item icon color (`tabBarItemIconColor`, `tabBarTintColor`).
37
+ * - `original` - the symbol keeps its own colors (Apple's "multicolor"
38
+ * rendering) and ignores the item icon color. A symbol without color layers
39
+ * is drawn as authored.
40
+ */
41
+ export type TabsScreenIconSymbolRenderingModeIOS =
42
+ | 'default'
43
+ | 'monochrome'
44
+ | 'original';
45
+
46
+ type WithImageRenderingMode<Icon> = Icon & {
47
+ /**
48
+ * @summary How the tab bar renders this image. See
49
+ * `TabsScreenIconImageRenderingModeIOS`.
50
+ *
51
+ * Defaults to `default`, which keeps the image's own colors.
52
+ *
53
+ * `icon` and `selectedIcon` may use different values.
54
+ */
55
+ renderingMode?: TabsScreenIconImageRenderingModeIOS | undefined;
56
+ };
57
+
58
+ type WithSymbolRenderingMode<Icon> = Icon & {
59
+ /**
60
+ * @summary How the tab bar renders this symbol. See
61
+ * `TabsScreenIconSymbolRenderingModeIOS`.
62
+ *
63
+ * Defaults to `default`, the system behavior. Set `renderingMode`
64
+ * explicitly to be independent of it.
65
+ *
66
+ * `icon` and `selectedIcon` may use different values.
67
+ */
68
+ renderingMode?: TabsScreenIconSymbolRenderingModeIOS | undefined;
69
+ };
70
+
71
+ /**
72
+ * How the tab bar tints an `imageSource` or `drawableResource` icon on Android.
73
+ *
74
+ * - `default` - the tab bar's default, also used when `tinting` is unset: the
75
+ * icon is tinted, as with `tinted`.
76
+ * - `tinted` - the icon is drawn in the state-dependent item icon color
77
+ * (`tabBarItemIconColor`).
78
+ * - `original` - the icon keeps its own colors and ignores the item icon color,
79
+ * e.g. a multicolor VectorDrawable.
80
+ */
81
+ export type TabsScreenIconTintingAndroid = 'default' | 'tinted' | 'original';
82
+
83
+ type WithTinting<Icon> = Icon & {
84
+ /**
85
+ * @summary How the tab bar tints this icon. See
86
+ * `TabsScreenIconTintingAndroid`.
87
+ *
88
+ * Defaults to `default`, which tints the icon.
89
+ *
90
+ * `icon` and `selectedIcon` may use different values.
91
+ */
92
+ tinting?: TabsScreenIconTintingAndroid | undefined;
93
+ };
94
+
95
+ /**
96
+ * @deprecated Use `{ type: 'imageSource', imageSource, renderingMode: 'template' }` instead.
97
+ */
98
+ export type TabsScreenIconTemplateIOS = PlatformIconIOSTemplate;
99
+
100
+ /**
101
+ * @deprecated Use `{ type: 'sfSymbol', name }` for custom symbols from the asset
102
+ * catalog, or `{ type: 'imageSource', imageSource: { uri: 'name' } }` for asset
103
+ * catalog images (append `.png` to names containing a dot). `imageSource` keeps
104
+ * the image's own colors by default, so for an asset whose "Render As" is not
105
+ * `Original Image`, add `renderingMode: 'template'`.
106
+ */
107
+ export type TabsScreenIconXcassetIOS = PlatformIconIOSXcasset;
108
+
109
+ export type TabsScreenIconIOS =
110
+ | WithSymbolRenderingMode<PlatformIconIOSSfSymbol>
111
+ | TabsScreenIconXcassetIOS
112
+ | TabsScreenIconTemplateIOS
113
+ | WithImageRenderingMode<PlatformIconShared>;
114
+
115
+ export type TabsScreenIconAndroid =
116
+ | WithTinting<PlatformIconAndroidDrawableResource>
117
+ | WithTinting<PlatformIconShared>;
@@ -1,6 +1,7 @@
1
1
  export { default as TabsScreen } from './TabsScreen';
2
2
 
3
3
  export type * from './TabsScreen.types';
4
+ export type * from './TabsScreenIcon.types';
4
5
 
5
6
  export type * from './TabsScreen.android.types';
6
7
  export type * from './TabsScreen.ios.types';
@@ -7,6 +7,8 @@ import type {
7
7
  ViewProps,
8
8
  } from 'react-native';
9
9
 
10
+ export type HeaderSubviewVisibilityPriority = 'low' | 'standard' | 'high';
11
+
10
12
  export type HeaderSubviewTypes =
11
13
  | 'back'
12
14
  | 'right'
@@ -18,6 +20,10 @@ export type HeaderSubviewTypes =
18
20
  export interface NativeProps extends ViewProps {
19
21
  type?: CT.WithDefault<HeaderSubviewTypes, 'left'>;
20
22
  hidesSharedBackground?: boolean | undefined;
23
+ visibilityPriority?: CT.WithDefault<
24
+ HeaderSubviewVisibilityPriority,
25
+ 'standard'
26
+ >;
21
27
  synchronousShadowStateUpdatesEnabled?: CT.WithDefault<boolean, true>;
22
28
  }
23
29
 
@@ -14,6 +14,8 @@ type FinishTransitioningEvent = Readonly<{}>;
14
14
  export interface NativeProps extends ViewProps {
15
15
  nativeContainerBackgroundColor?: ColorValue | undefined;
16
16
 
17
+ disableDefaultMenuAction?: CT.WithDefault<boolean, false>;
18
+
17
19
  onFinishTransitioning?:
18
20
  | CT.DirectEventHandler<FinishTransitioningEvent>
19
21
  | undefined;
@@ -15,6 +15,14 @@ import { UnsafeMixed } from '../codegenUtils';
15
15
 
16
16
  type BackButtonDisplayMode = 'default' | 'generic' | 'minimal';
17
17
 
18
+ type MinimizationBehavior =
19
+ | 'automatic'
20
+ | 'never'
21
+ | 'onScrollDown'
22
+ | 'onScrollUp';
23
+
24
+ type RestorationBehavior = 'automatic' | 'atScrollEdge';
25
+
18
26
  export type HeaderAppearance = {
19
27
  titleFontFamily?: string | undefined;
20
28
  titleFontSize?: CT.Float | undefined;
@@ -60,6 +68,9 @@ export interface NativeProps extends ViewProps {
60
68
 
61
69
  prompt?: string | undefined;
62
70
 
71
+ minimizationBehavior?: CT.WithDefault<MinimizationBehavior, 'automatic'>;
72
+ restorationBehavior?: CT.WithDefault<RestorationBehavior, 'automatic'>;
73
+
63
74
  titleMenu?: UnsafeMixed<StackHeaderMenuIOS> | undefined;
64
75
 
65
76
  standardAppearance?: UnsafeMixed<HeaderAppearance> | undefined;
@@ -16,6 +16,8 @@ export type Placement =
16
16
  | 'subtitle'
17
17
  | 'largeSubtitle';
18
18
 
19
+ export type Variant = 'plain' | 'prominent';
20
+
19
21
  export type StackHeaderMenuItemIOS = {
20
22
  id: string;
21
23
  type: 'menuItem';
@@ -67,14 +69,23 @@ export type PlatformIconIOS =
67
69
  | PlatformIconIOSTemplate
68
70
  | PlatformIconShared;
69
71
 
72
+ export type StackHeaderItemVisibilityPriorityIOS = 'low' | 'standard' | 'high';
73
+
70
74
  export interface NativeProps extends ViewProps {
71
75
  placement?: CT.WithDefault<Placement, 'trailing'>;
72
76
  itemId?: string | undefined;
73
77
  identifier?: string | undefined;
74
78
  hidesSharedBackground?: CT.WithDefault<boolean, false>;
79
+ visibilityPriority?: CT.WithDefault<
80
+ StackHeaderItemVisibilityPriorityIOS,
81
+ 'standard'
82
+ >;
75
83
  title?: string | undefined;
76
84
  icon?: UnsafeMixed<PlatformIconIOS> | undefined;
77
85
  menu?: UnsafeMixed<StackHeaderMenuIOS> | undefined;
86
+ menuRepresentation?: UnsafeMixed<StackHeaderMenuIOS> | undefined;
87
+ variant?: CT.WithDefault<Variant, 'plain'>;
88
+ disabled?: CT.WithDefault<boolean, false>;
78
89
  respondsToOnPress?: CT.WithDefault<boolean, false>;
79
90
  onHeaderItemPress?: CT.DirectEventHandler<HeaderItemPressEvent> | undefined;
80
91
  }
@@ -58,6 +58,8 @@ type TabBarMinimizeBehavior =
58
58
 
59
59
  type TabBarControllerMode = 'automatic' | 'tabBar' | 'tabSidebar';
60
60
 
61
+ type TabBarSidebarPreferredPlacement = 'automatic' | 'sidebar' | 'tabBar';
62
+
61
63
  // #endregion iOS-specific helpers
62
64
 
63
65
  export interface NativeProps extends ViewProps {
@@ -89,7 +91,12 @@ export interface NativeProps extends ViewProps {
89
91
  tabBarTintColor?: ColorValue | undefined;
90
92
  tabBarMinimizeBehavior?: CT.WithDefault<TabBarMinimizeBehavior, 'automatic'>;
91
93
  tabBarControllerMode?: CT.WithDefault<TabBarControllerMode, 'automatic'>;
94
+ tabBarSidebarPreferredPlacement?: CT.WithDefault<
95
+ TabBarSidebarPreferredPlacement,
96
+ 'automatic'
97
+ >;
92
98
  bottomAccessoryHidden?: CT.WithDefault<boolean, false>;
99
+ prominentScreenKey?: string | undefined;
93
100
  }
94
101
 
95
102
  export default codegenNativeComponent<NativeProps>('RNSTabsHostIOS', {
@@ -24,6 +24,8 @@ type TabBarItemLabelVisibilityMode =
24
24
  | 'labeled'
25
25
  | 'unlabeled';
26
26
 
27
+ export type IconTinting = 'default' | 'tinted' | 'original';
28
+
27
29
  export type ItemStateAppearance = {
28
30
  tabBarItemTitleFontColor?: ProcessedColorValue | null | undefined;
29
31
  tabBarItemIconColor?: ProcessedColorValue | null | undefined;
@@ -48,9 +50,14 @@ export type Appearance = {
48
50
  focused?: ItemStateAppearance | undefined;
49
51
  disabled?: ItemStateAppearance | undefined;
50
52
 
53
+ // Per-tab icon size (dp); 0/unset = system default.
54
+ tabBarItemIconSize?: CT.Float | undefined;
55
+
51
56
  // TabBarItem - Active Indicator
52
57
  tabBarItemActiveIndicatorColor?: ProcessedColorValue | null | undefined;
53
58
  tabBarItemActiveIndicatorEnabled?: CT.WithDefault<boolean, true>;
59
+ tabBarItemActiveIndicatorWidth?: CT.Float | undefined;
60
+ tabBarItemActiveIndicatorHeight?: CT.Float | undefined;
54
61
 
55
62
  // TabBarItem - Label
56
63
  tabBarItemTitleFontFamily?: string | undefined;
@@ -103,6 +110,8 @@ export interface NativeProps extends ViewProps {
103
110
  imageIconResource?: ImageSource | undefined;
104
111
  selectedDrawableIconResourceName?: string | undefined;
105
112
  selectedImageIconResource?: ImageSource | undefined;
113
+ iconTinting?: CT.WithDefault<IconTinting, 'default'>;
114
+ selectedIconTinting?: CT.WithDefault<IconTinting, 'default'>;
106
115
 
107
116
  // Appearance
108
117
  standardAppearance?: Appearance | undefined;
@@ -20,8 +20,12 @@ type GenericEmptyEvent = Readonly<{}>;
20
20
 
21
21
  // #region iOS-specific helpers
22
22
 
23
- // iOS-specific: SFSymbol, image as a template usage
24
- export type IconType = 'image' | 'template' | 'sfSymbol' | 'xcasset';
23
+ // iOS-specific: SFSymbol, xcasset usage
24
+ export type IconType = 'image' | 'sfSymbol' | 'xcasset';
25
+
26
+ export type IconImageRenderingMode = 'default' | 'template' | 'original';
27
+
28
+ export type IconSymbolRenderingMode = 'default' | 'monochrome' | 'original';
25
29
 
26
30
  export type ItemStateAppearance = {
27
31
  tabBarItemTitleFontFamily?: string | undefined;
@@ -106,6 +110,8 @@ type SystemItem =
106
110
  | 'search'
107
111
  | 'topRated';
108
112
 
113
+ type TabRole = 'none' | 'search';
114
+
109
115
  type UserInterfaceStyle = 'unspecified' | 'light' | 'dark';
110
116
 
111
117
  // #endregion iOS-specific helpers
@@ -146,6 +152,8 @@ export interface NativeProps extends ViewProps {
146
152
  // Tab config
147
153
  isTitleUndefined?: CT.WithDefault<boolean, true>;
148
154
  systemItem?: CT.WithDefault<SystemItem, 'none'>;
155
+ tabRole?: CT.WithDefault<TabRole, 'none'>;
156
+ automaticallyActivatesSearch?: CT.WithDefault<boolean, false>;
149
157
 
150
158
  // Appearance
151
159
  standardAppearance?: UnsafeMixed<Appearance> | undefined;
@@ -153,8 +161,18 @@ export interface NativeProps extends ViewProps {
153
161
 
154
162
  // Icons
155
163
  iconType?: CT.WithDefault<IconType, 'sfSymbol'>;
164
+ iconImageRenderingMode?: CT.WithDefault<IconImageRenderingMode, 'default'>;
165
+ iconSymbolRenderingMode?: CT.WithDefault<IconSymbolRenderingMode, 'default'>;
156
166
  iconImageSource?: ImageSource | undefined;
157
167
  iconResourceName?: string | undefined;
168
+ selectedIconImageRenderingMode?: CT.WithDefault<
169
+ IconImageRenderingMode,
170
+ 'default'
171
+ >;
172
+ selectedIconSymbolRenderingMode?: CT.WithDefault<
173
+ IconSymbolRenderingMode,
174
+ 'default'
175
+ >;
158
176
  selectedIconImageSource?: ImageSource | undefined;
159
177
  selectedIconResourceName?: string | undefined;
160
178
 
@@ -18,7 +18,10 @@ import Screen, { type ScreenInstance } from './Screen';
18
18
  import ScreenStack from './ScreenStack';
19
19
  import { RNSScreensRefContext } from '../contexts';
20
20
  import { FooterComponent } from './ScreenFooter';
21
- import { SafeAreaViewProps } from '../../components/safe-area/SafeAreaView.types';
21
+ import type {
22
+ Edge,
23
+ SafeAreaViewProps,
24
+ } from '../../components/safe-area/SafeAreaView.types';
22
25
  import { SafeAreaView } from '../../components/safe-area/SafeAreaView';
23
26
  import { featureFlags } from '../../flags';
24
27
  import { isIOS26OrHigher } from '../../components/helpers/PlatformUtils';
@@ -34,6 +37,30 @@ type Props = Omit<
34
37
  screenId: string;
35
38
  headerConfig?: ScreenStackHeaderConfigProps | undefined;
36
39
  contentStyle?: StyleProp<ViewStyle> | undefined;
40
+ /**
41
+ * Per-edge override of the safe area insets applied to the screen's content.
42
+ *
43
+ * On iOS 26+ the screen is laid out under the navigation bar and its content
44
+ * is wrapped in a `SafeAreaView`. By default, the top edge is applied for
45
+ * non-transparent header. Edges explicitly set to `true` or `false` override
46
+ * the default.
47
+ *
48
+ * When `ScrollView` with `contentInsetAdjustmentBehavior="automatic"` is used
49
+ * as Screen's content, setting `top: false` might mitigate some problems like
50
+ * "jumping" behavior with non-transparent header and large title.
51
+ *
52
+ * Limitation: with `top: false`, a `formSheet` using `fitToContents` with a
53
+ * visible header is sized to the content alone, without room for the header,
54
+ * which overlaps the top of the content.
55
+ *
56
+ * Has no effect below iOS 26 and on other platforms.
57
+ *
58
+ * Please note that this prop is marked as unstable and might be subject of
59
+ * breaking changes, including removal.
60
+ *
61
+ * @platform ios
62
+ */
63
+ unstable_safeAreaEdges?: SafeAreaViewProps['edges'] | undefined;
37
64
  };
38
65
 
39
66
  function ScreenStackItem(
@@ -51,6 +78,8 @@ function ScreenStackItem(
51
78
  scrollEdgeEffects,
52
79
  // eslint-disable-next-line camelcase
53
80
  unstable_sheetFooter,
81
+ // eslint-disable-next-line camelcase
82
+ unstable_safeAreaEdges,
54
83
  ...rest
55
84
  }: Props,
56
85
  ref: React.ForwardedRef<ScreenInstance>,
@@ -123,6 +152,11 @@ function ScreenStackItem(
123
152
  contentStyle = contentWrapperStyles;
124
153
  }
125
154
 
155
+ // On iOS 26+ the screen is laid out under the navigation bar also when the header is opaque
156
+ // (see `+[RNSScreenStackHeaderConfig screensExtendUnderOpaqueNavigationBar]`), so the content
157
+ // is inset by our `SafeAreaView`. See `getSafeAreaEdges` for the applied edges. The
158
+ // `SafeAreaView` is rendered regardless of `unstable_safeAreaEdges` so that changing it does not
159
+ // remount the content.
126
160
  const shouldUseSafeAreaView = isIOS26OrHigher;
127
161
 
128
162
  const content = (
@@ -133,7 +167,8 @@ function ScreenStackItem(
133
167
  style={debugContainerStyle}
134
168
  stackPresentation={stackPresentationWithDefault}>
135
169
  {shouldUseSafeAreaView ? (
136
- <SafeAreaView edges={getSafeAreaEdges(headerConfig)}>
170
+ <SafeAreaView
171
+ edges={getSafeAreaEdges(headerConfig, unstable_safeAreaEdges)}>
137
172
  {children}
138
173
  </SafeAreaView>
139
174
  ) : (
@@ -282,24 +317,36 @@ function extractScreenStyles(style: StyleProp<ViewStyle>): SplitStyleResult {
282
317
  }
283
318
 
284
319
  function getSafeAreaEdges(
285
- headerConfig?: ScreenStackHeaderConfigProps,
320
+ headerConfig: ScreenStackHeaderConfigProps | undefined,
321
+ edgesOverride: SafeAreaViewProps['edges'],
286
322
  ): SafeAreaViewProps['edges'] {
287
- if (Platform.OS !== 'ios' || parseInt(Platform.Version, 10) < 26) {
323
+ if (!isIOS26OrHigher) {
288
324
  return {};
289
325
  }
290
326
 
291
- let defaultEdges: SafeAreaViewProps['edges'];
292
- if (headerConfig?.translucent || headerConfig?.hidden) {
293
- defaultEdges = {};
294
- } else {
295
- defaultEdges = {
296
- top: true,
297
- };
327
+ // On iOS 26+ the screen extends under the navigation bar regardless of the header configuration
328
+ // (see `+[RNSScreenStackHeaderConfig screensExtendUnderOpaqueNavigationBar]`), so by default the
329
+ // content is inset from the top whenever the header is visible and opaque. Translucent and hidden
330
+ // headers keep the content under the bar / status bar, as on other iOS versions.
331
+ const edges: Partial<Record<Edge, boolean>> =
332
+ headerConfig?.translucent || headerConfig?.hidden ? {} : { top: true };
333
+
334
+ // Only edges explicitly set by the user override the defaults. `undefined` must not be copied,
335
+ // as `SafeAreaView` treats a present-but-undefined edge as disabled.
336
+ if (edgesOverride) {
337
+ for (const edge of SAFE_AREA_EDGES) {
338
+ const value = edgesOverride[edge];
339
+ if (value !== undefined) {
340
+ edges[edge] = value;
341
+ }
342
+ }
298
343
  }
299
344
 
300
- return defaultEdges;
345
+ return edges;
301
346
  }
302
347
 
348
+ const SAFE_AREA_EDGES: readonly Edge[] = ['top', 'right', 'bottom', 'left'];
349
+
303
350
  const styles = StyleSheet.create({
304
351
  container: {
305
352
  flex: 1,
@@ -659,6 +659,12 @@ export interface ScreenStackProps extends ViewProps, GestureProps {
659
659
  | undefined;
660
660
  ref?: React.MutableRefObject<React.Ref<View>> | undefined;
661
661
  nativeContainerStyle?: ScreenStackNativeContainerStyleProps | undefined;
662
+ /**
663
+ * When true, prevents UIKit from auto-popping on Menu at stack depth > 1 so the
664
+ * press can reach JS. Requires `TVEventControl.enableTVMenuKey()`.
665
+ * @platform tvOS
666
+ */
667
+ disableDefaultMenuAction?: boolean | undefined;
662
668
  }
663
669
 
664
670
  export interface ScreenStackHeaderConfigProps extends ViewProps {
@@ -1114,6 +1120,14 @@ export interface SearchBarProps {
1114
1120
  shouldShowHintSearchIcon?: boolean | undefined;
1115
1121
  }
1116
1122
 
1123
+ /**
1124
+ * Priority deciding which header items are given up first when they do not fit.
1125
+ * Each value maps to the matching UIKit constant.
1126
+ *
1127
+ * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitemvisibilitypriority
1128
+ */
1129
+ export type HeaderBarButtonItemVisibilityPriority = 'low' | 'standard' | 'high';
1130
+
1117
1131
  export interface ScreenStackHeaderSubviewProps {
1118
1132
  /**
1119
1133
  * A boolean value indicating whether the background this item may share with other items in the bar should be hidden.
@@ -1123,6 +1137,15 @@ export interface ScreenStackHeaderSubviewProps {
1123
1137
  * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground
1124
1138
  */
1125
1139
  hidesSharedBackground?: boolean | undefined;
1140
+ /**
1141
+ * Priority used when the header runs out of room: items with the lowest
1142
+ * priority are moved into the overflow menu first. Defaults to 'standard'.
1143
+ * Only applicable to type="right" and type="left" subviews.
1144
+ * Only available from iOS 27.0 and later.
1145
+ *
1146
+ * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitemvisibilitypriority
1147
+ */
1148
+ visibilityPriority?: HeaderBarButtonItemVisibilityPriority | undefined;
1126
1149
  }
1127
1150
 
1128
1151
  interface SharedHeaderBarButtonItem {
@@ -1193,6 +1216,14 @@ interface SharedHeaderBarButtonItem {
1193
1216
  * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/identifier
1194
1217
  */
1195
1218
  identifier?: string | undefined;
1219
+ /**
1220
+ * Priority used when the header runs out of room: items with the lowest
1221
+ * priority are moved into the overflow menu first. Defaults to 'standard'.
1222
+ * Only available from iOS 27.0 and later.
1223
+ *
1224
+ * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitemvisibilitypriority
1225
+ */
1226
+ visibilityPriority?: HeaderBarButtonItemVisibilityPriority | undefined;
1196
1227
  /**
1197
1228
  * A badge to be rendered on a item.
1198
1229
  * Only available from iOS 26.0 and later.