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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (585) hide show
  1. package/Package.swift +87 -0
  2. package/README.md +0 -8
  3. package/RNScreens.podspec +2 -6
  4. package/android/build.gradle +26 -1
  5. package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +5 -0
  6. package/android/src/main/cpp/NativeProxy.cpp +30 -6
  7. package/android/src/main/cpp/NativeProxy.h +7 -1
  8. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
  9. package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +8 -0
  10. package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
  11. package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
  12. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
  13. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
  14. package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
  15. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +25 -7
  16. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +2 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackFragment.kt +39 -10
  18. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenViewManager.kt +5 -0
  19. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAppearanceCoordinator.kt → native/coordinator/FormSheetAppearanceCoordinator.kt} +2 -1
  20. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetBehaviorController.kt → native/coordinator/FormSheetBehaviorController.kt} +74 -19
  21. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +159 -0
  22. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
  23. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +44 -0
  24. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetAvailableHeightProvider.kt +44 -0
  25. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContainer.kt → native/core/FormSheetContainer.kt} +1 -1
  26. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialog.kt +115 -0
  27. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +89 -0
  28. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeDelegate.kt → native/interfaces/FormSheetContentSizeChangeDelegate.kt} +1 -1
  29. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeProvider.kt → native/interfaces/FormSheetContentSizeChangeProvider.kt} +1 -1
  30. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogEventEmitter.kt → native/interfaces/FormSheetDialogEventEmitter.kt} +5 -1
  31. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetConfig.kt → native/model/FormSheetConfig.kt} +5 -1
  32. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +152 -0
  33. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAnimatorFactory.kt → native/presentation/FormSheetAnimatorFactory.kt} +9 -10
  34. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDimmingManager.kt +115 -0
  35. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDismissalOrigin.kt +22 -0
  36. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentation.kt +173 -0
  37. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +290 -0
  38. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationState.kt → native/presentation/FormSheetPresentationState.kt} +2 -2
  39. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetStackRegistry.kt +28 -0
  40. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapper.kt → react/contentwrapper/FormSheetContentWrapper.kt} +3 -1
  41. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapperViewManager.kt → react/contentwrapper/FormSheetContentWrapperViewManager.kt} +1 -1
  42. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetentChangedEvent.kt → react/event/FormSheetDetentChangedEvent.kt} +1 -1
  43. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidAppearEvent.kt → react/event/FormSheetDidAppearEvent.kt} +1 -1
  44. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidDisappearEvent.kt → react/event/FormSheetDidDisappearEvent.kt} +1 -1
  45. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetDismissEvent.kt +29 -0
  46. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetNativeDismissEvent.kt → react/event/FormSheetNativeDismissEvent.kt} +1 -1
  47. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetNativeDismissPreventedEvent.kt +29 -0
  48. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetSyncFlushEvent.kt → react/event/FormSheetSyncFlushEvent.kt} +1 -1
  49. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillAppearEvent.kt → react/event/FormSheetWillAppearEvent.kt} +1 -1
  50. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillDisappearEvent.kt → react/event/FormSheetWillDisappearEvent.kt} +1 -1
  51. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentView.kt → react/host/FormSheetContentView.kt} +3 -1
  52. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHost.kt → react/host/FormSheetHost.kt} +6 -1
  53. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostEventEmitter.kt → react/host/FormSheetHostEventEmitter.kt} +23 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostViewManager.kt → react/host/FormSheetHostViewManager.kt} +13 -2
  55. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +380 -457
  56. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
  57. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +150 -182
  58. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderFrameSynchronizer.kt +63 -0
  59. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +240 -0
  60. package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayoutBehavior.kt → appbar/StackHeaderAppBarLayoutBehavior.kt} +1 -1
  61. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
  62. package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderScrollingViewBehavior.kt → appbar/StackHeaderScrollingViewBehavior.kt} +1 -1
  63. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
  64. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +192 -167
  65. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +393 -13
  66. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +0 -4
  67. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +33 -3
  68. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
  69. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +9 -3
  70. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +195 -0
  71. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
  72. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
  73. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +43 -21
  74. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +8 -0
  75. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementConfig.kt → model/StackHeaderToolbarMenuElementConfig.kt} +1 -1
  76. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupConfig.kt → model/StackHeaderToolbarMenuGroupConfig.kt} +1 -1
  77. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +11 -0
  78. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemConfig.kt → model/StackHeaderToolbarMenuItemConfig.kt} +2 -4
  79. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemDefaults.kt → model/StackHeaderToolbarMenuItemDefaults.kt} +1 -1
  80. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemIconSource.kt → model/StackHeaderToolbarMenuItemIconSource.kt} +1 -1
  81. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemShowAsAction.kt → model/StackHeaderToolbarMenuItemShowAsAction.kt} +1 -1
  82. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemType.kt → model/StackHeaderToolbarMenuItemType.kt} +1 -1
  83. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
  84. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarFieldUpdate.kt → update/StackHeaderToolbarFieldUpdate.kt} +1 -1
  85. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +84 -0
  86. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +15 -0
  87. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +11 -0
  88. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +18 -0
  89. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuUpdateQueue.kt → update/StackHeaderToolbarMenuUpdateQueue.kt} +24 -52
  90. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueueDelegate.kt +9 -0
  91. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +103 -3
  92. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +13 -0
  93. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
  94. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +5 -0
  95. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +20 -1
  96. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
  97. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +2 -4
  98. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
  99. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +46 -25
  100. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +10 -0
  101. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
  102. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +17 -0
  103. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
  104. package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +7 -0
  105. package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
  106. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
  107. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
  108. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
  109. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
  110. package/common/cpp/react/renderer/components/rnscreens/legacy/RNSScreenShadowNode.cpp +10 -5
  111. package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
  112. package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
  113. package/ios/RNSEnums.h +2 -2
  114. package/ios/RNSOrientationProviding.h +0 -2
  115. package/ios/RNSReactMountingTransactionObserving.h +15 -0
  116. package/ios/conversion/RNSConversions.h +7 -108
  117. package/ios/legacy/RNSBarButtonItem.mm +12 -5
  118. package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
  119. package/ios/legacy/RNSModalScreen.mm +1 -1
  120. package/ios/legacy/RNSScreen.h +8 -1
  121. package/ios/legacy/RNSScreen.mm +47 -36
  122. package/ios/legacy/RNSScreenContentWrapper.mm +9 -0
  123. package/ios/legacy/RNSScreenFooter.mm +2 -0
  124. package/ios/legacy/RNSScreenStack.mm +9 -4
  125. package/ios/legacy/RNSScreenStackHeaderConfig.mm +3 -1
  126. package/ios/legacy/RNSScreenStackHeaderSubview.mm +1 -1
  127. package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
  128. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
  129. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
  130. package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
  131. package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
  132. package/ios/modals/form-sheet/RNSFormSheetContentWrapperComponentView.mm +9 -0
  133. package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
  134. package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
  135. package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
  136. package/ios/safe-area/RNSSafeAreaViewComponentView.mm +2 -2
  137. package/ios/scroll-to-top-guard/RNSScrollToTopGuard.h +17 -0
  138. package/ios/scroll-to-top-guard/RNSScrollToTopGuard.mm +57 -0
  139. package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.h +28 -0
  140. package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.mm +64 -0
  141. package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
  142. package/ios/split/RNSSplitAppearanceApplicator.h +36 -0
  143. package/ios/split/RNSSplitAppearanceApplicator.mm +182 -0
  144. package/ios/split/RNSSplitAppearanceCoordinator.h +26 -0
  145. package/ios/split/RNSSplitAppearanceCoordinator.mm +27 -0
  146. package/ios/split/RNSSplitAppearanceUpdateFlags.h +14 -0
  147. package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
  148. package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
  149. package/ios/split/RNSSplitHostComponentView.h +5 -15
  150. package/ios/split/RNSSplitHostComponentView.mm +56 -7
  151. package/ios/split/RNSSplitHostController.h +105 -0
  152. package/ios/split/RNSSplitHostController.mm +492 -0
  153. package/ios/split/RNSSplitHostProviders.h +67 -0
  154. package/ios/split/RNSSplitNavigationController.h +31 -0
  155. package/ios/split/RNSSplitNavigationController.mm +44 -0
  156. package/ios/split/RNSSplitNavigationControllerFrameObserver.h +32 -0
  157. package/ios/split/RNSSplitNavigationControllerFrameObserver.mm +80 -0
  158. package/ios/split/RNSSplitNavigationControllerFrameOriginChangeDelegate.h +15 -0
  159. package/ios/split/RNSSplitScreenComponentView.h +0 -39
  160. package/ios/split/RNSSplitScreenComponentView.mm +35 -19
  161. package/ios/split/RNSSplitScreenController.h +68 -0
  162. package/ios/split/RNSSplitScreenController.mm +113 -0
  163. package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
  164. package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
  165. package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
  166. package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
  167. package/ios/stack/conversion/RNSConversions-Stack.h +32 -0
  168. package/ios/stack/conversion/RNSConversions-Stack.mm +55 -0
  169. package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
  170. package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
  171. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +11 -1
  172. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +108 -38
  173. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +9 -0
  174. package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
  175. package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
  176. package/ios/stack/header/RNSStackHeaderItemComponentView.h +3 -1
  177. package/ios/stack/header/RNSStackHeaderItemComponentView.mm +15 -2
  178. package/ios/stack/header/RNSStackHeaderItemDataProviding.h +2 -0
  179. package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
  180. package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
  181. package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +9 -0
  182. package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +15 -0
  183. package/ios/stack/header/RNSStackHeaderMenuFinder.h +18 -3
  184. package/ios/stack/header/RNSStackHeaderMenuFinder.mm +21 -3
  185. package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
  186. package/ios/stack/host/RNSStackHostComponentView.mm +3 -1
  187. package/ios/stack/host/RNSStackNavigationBar.h +25 -0
  188. package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
  189. package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
  190. package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
  191. package/ios/stack/host/RNSStackNavigationController.mm +14 -6
  192. package/ios/stack/host/RNSStackOperation.h +0 -2
  193. package/ios/stack/screen/RNSStackScreenComponentView.mm +9 -4
  194. package/ios/stack/screen/RNSStackScreenController.mm +12 -0
  195. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +14 -1
  196. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +159 -28
  197. package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +40 -9
  198. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
  199. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +4 -1
  200. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +5 -2
  201. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
  202. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
  203. package/ios/tabs/conversion/RNSConversions-Tabs.h +78 -0
  204. package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +8 -71
  205. package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
  206. package/ios/tabs/host/RNSTabBarController.h +5 -12
  207. package/ios/tabs/host/RNSTabBarController.mm +1 -1
  208. package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
  209. package/ios/tabs/host/RNSTabsHostComponentView.mm +10 -3
  210. package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
  211. package/ios/tabs/screen/RNSTabsScreenComponentView.mm +20 -5
  212. package/ios/utils/RNSDefines.h +3 -0
  213. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +25 -0
  214. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
  215. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js +24 -0
  216. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
  217. package/lib/commonjs/components/scroll-to-top-guard/index.js +13 -0
  218. package/lib/commonjs/components/scroll-to-top-guard/index.js.map +1 -0
  219. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +34 -19
  220. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  221. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +44 -13
  222. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  223. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
  224. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  225. package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js +33 -2
  226. package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js.map +1 -1
  227. package/lib/commonjs/components/stack/header/utils.js +6 -9
  228. package/lib/commonjs/components/stack/header/utils.js.map +1 -1
  229. package/lib/commonjs/components/stack/host/StackHost.js +9 -6
  230. package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
  231. package/lib/commonjs/components/stack/index.js.map +1 -1
  232. package/lib/commonjs/components/tabs/host/TabsHost.ios.js +1 -0
  233. package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
  234. package/lib/commonjs/experimental/index.js +11 -0
  235. package/lib/commonjs/experimental/index.js.map +1 -1
  236. package/lib/commonjs/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
  237. package/lib/commonjs/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
  238. package/lib/commonjs/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
  239. package/lib/commonjs/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
  240. package/lib/commonjs/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
  241. package/lib/commonjs/fabric/legacy/ScreenNativeComponent.js.map +1 -1
  242. package/lib/commonjs/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  243. package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  244. package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  245. package/lib/commonjs/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
  246. package/lib/commonjs/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
  247. package/lib/commonjs/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
  248. package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +12 -0
  249. package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
  250. package/lib/commonjs/fabric/split/SplitHostNativeComponent.js.map +1 -1
  251. package/lib/commonjs/fabric/split/SplitScreenNativeComponent.js.map +1 -1
  252. package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  253. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  254. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  255. package/lib/commonjs/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
  256. package/lib/commonjs/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
  257. package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
  258. package/lib/commonjs/fabric/stack/StackScreenNativeComponent.js.map +1 -1
  259. package/lib/commonjs/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
  260. package/lib/commonjs/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
  261. package/lib/commonjs/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
  262. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  263. package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  264. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  265. package/lib/commonjs/flags.js +22 -1
  266. package/lib/commonjs/flags.js.map +1 -1
  267. package/lib/commonjs/legacy/components/Screen.js +6 -1
  268. package/lib/commonjs/legacy/components/Screen.js.map +1 -1
  269. package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js +5 -0
  270. package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
  271. package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
  272. package/lib/commonjs/legacy/components/SearchBar.js +16 -16
  273. package/lib/commonjs/legacy/components/SearchBar.js.map +1 -1
  274. package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js +3 -0
  275. package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
  276. package/lib/commonjs/legacy/gesture-handler/fabricUtils.js.map +1 -1
  277. package/lib/commonjs/legacy/useTransitionProgress.js.map +1 -1
  278. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +20 -0
  279. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
  280. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js +18 -0
  281. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
  282. package/lib/module/components/scroll-to-top-guard/index.js +2 -0
  283. package/lib/module/components/scroll-to-top-guard/index.js.map +1 -0
  284. package/lib/module/components/stack/header/StackHeaderConfig.android.js +35 -20
  285. package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  286. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +48 -17
  287. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  288. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
  289. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  290. package/lib/module/components/stack/header/ios/iconUtils.ios.js +31 -2
  291. package/lib/module/components/stack/header/ios/iconUtils.ios.js.map +1 -1
  292. package/lib/module/components/stack/header/utils.js +5 -8
  293. package/lib/module/components/stack/header/utils.js.map +1 -1
  294. package/lib/module/components/stack/host/StackHost.js +9 -6
  295. package/lib/module/components/stack/host/StackHost.js.map +1 -1
  296. package/lib/module/components/stack/index.js.map +1 -1
  297. package/lib/module/components/tabs/host/TabsHost.ios.js +1 -0
  298. package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
  299. package/lib/module/experimental/index.js +1 -0
  300. package/lib/module/experimental/index.js.map +1 -1
  301. package/lib/module/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
  302. package/lib/module/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
  303. package/lib/module/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
  304. package/lib/module/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
  305. package/lib/module/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
  306. package/lib/module/fabric/legacy/ScreenNativeComponent.js.map +1 -1
  307. package/lib/module/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  308. package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  309. package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  310. package/lib/module/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
  311. package/lib/module/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
  312. package/lib/module/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
  313. package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +7 -0
  314. package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
  315. package/lib/module/fabric/split/SplitHostNativeComponent.js.map +1 -1
  316. package/lib/module/fabric/split/SplitScreenNativeComponent.js.map +1 -1
  317. package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  318. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  319. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  320. package/lib/module/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
  321. package/lib/module/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
  322. package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
  323. package/lib/module/fabric/stack/StackScreenNativeComponent.js.map +1 -1
  324. package/lib/module/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
  325. package/lib/module/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
  326. package/lib/module/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
  327. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  328. package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  329. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  330. package/lib/module/flags.js +22 -1
  331. package/lib/module/flags.js.map +1 -1
  332. package/lib/module/legacy/components/Screen.js +6 -1
  333. package/lib/module/legacy/components/Screen.js.map +1 -1
  334. package/lib/module/legacy/components/ScreenStackHeaderConfig.js +5 -0
  335. package/lib/module/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
  336. package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
  337. package/lib/module/legacy/components/SearchBar.js +17 -17
  338. package/lib/module/legacy/components/SearchBar.js.map +1 -1
  339. package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js +4 -0
  340. package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
  341. package/lib/module/legacy/gesture-handler/fabricUtils.js.map +1 -1
  342. package/lib/module/legacy/useTransitionProgress.js.map +1 -1
  343. package/lib/module/private/hooks/useRenderDebugInfo.js.map +1 -1
  344. package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +3 -3
  345. package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts +5 -2
  346. package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts.map +1 -1
  347. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts +15 -0
  348. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts.map +1 -0
  349. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts +12 -0
  350. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts.map +1 -0
  351. package/lib/typescript/components/scroll-to-top-guard/index.d.ts +2 -0
  352. package/lib/typescript/components/scroll-to-top-guard/index.d.ts.map +1 -0
  353. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
  354. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +639 -20
  355. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  356. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  357. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +239 -2
  358. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  359. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +2 -2
  360. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +5 -2
  361. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +1 -1
  362. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
  363. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +2 -0
  364. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
  365. package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts +3 -0
  366. package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts.map +1 -1
  367. package/lib/typescript/components/stack/header/utils.d.ts +1 -2
  368. package/lib/typescript/components/stack/header/utils.d.ts.map +1 -1
  369. package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
  370. package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
  371. package/lib/typescript/components/stack/host/StackHost.types.d.ts +26 -2
  372. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  373. package/lib/typescript/components/stack/host/StackHost.web.d.ts +6 -2
  374. package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
  375. package/lib/typescript/components/stack/index.d.ts +2 -2
  376. package/lib/typescript/components/stack/index.d.ts.map +1 -1
  377. package/lib/typescript/components/stack/screen/StackScreen.web.d.ts +5 -2
  378. package/lib/typescript/components/stack/screen/StackScreen.web.d.ts.map +1 -1
  379. package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
  380. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +16 -0
  381. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
  382. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
  383. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
  384. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +5 -2
  385. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +1 -1
  386. package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts +7 -3
  387. package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts.map +1 -1
  388. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +5 -2
  389. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +1 -1
  390. package/lib/typescript/experimental/index.d.ts +1 -0
  391. package/lib/typescript/experimental/index.d.ts.map +1 -1
  392. package/lib/typescript/fabric/NativeScreensModule.d.ts +1 -1
  393. package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts +2 -2
  394. package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts.map +1 -1
  395. package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts +2 -2
  396. package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts.map +1 -1
  397. package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts +3 -2
  398. package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts.map +1 -1
  399. package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts +2 -2
  400. package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts.map +1 -1
  401. package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts +2 -2
  402. package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts.map +1 -1
  403. package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts +2 -2
  404. package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts.map +1 -1
  405. package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts +3 -2
  406. package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts.map +1 -1
  407. package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts +2 -2
  408. package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts.map +1 -1
  409. package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts +3 -3
  410. package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
  411. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
  412. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
  413. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +2 -2
  414. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
  415. package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts +6 -6
  416. package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts.map +1 -1
  417. package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts +2 -2
  418. package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts.map +1 -1
  419. package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts +2 -2
  420. package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts.map +1 -1
  421. package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts +2 -2
  422. package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts.map +1 -1
  423. package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts +6 -0
  424. package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts.map +1 -0
  425. package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts +1 -1
  426. package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts.map +1 -1
  427. package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts +2 -2
  428. package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts.map +1 -1
  429. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +53 -0
  430. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
  431. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +27 -2
  432. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  433. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +4 -2
  434. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  435. package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts +2 -2
  436. package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts.map +1 -1
  437. package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts +2 -2
  438. package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts.map +1 -1
  439. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +4 -2
  440. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
  441. package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts +2 -2
  442. package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts.map +1 -1
  443. package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts +2 -2
  444. package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts.map +1 -1
  445. package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts +2 -2
  446. package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts.map +1 -1
  447. package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts +2 -2
  448. package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts.map +1 -1
  449. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +3 -2
  450. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  451. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +2 -2
  452. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
  453. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +2 -2
  454. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
  455. package/lib/typescript/flags.d.ts +13 -0
  456. package/lib/typescript/flags.d.ts.map +1 -1
  457. package/lib/typescript/legacy/TransitionProgressContext.d.ts +1 -1
  458. package/lib/typescript/legacy/TransitionProgressContext.d.ts.map +1 -1
  459. package/lib/typescript/legacy/components/Screen.d.ts +5 -3
  460. package/lib/typescript/legacy/components/Screen.d.ts.map +1 -1
  461. package/lib/typescript/legacy/components/Screen.web.d.ts +10 -2
  462. package/lib/typescript/legacy/components/Screen.web.d.ts.map +1 -1
  463. package/lib/typescript/legacy/components/ScreenContainer.web.d.ts +5 -2
  464. package/lib/typescript/legacy/components/ScreenContainer.web.d.ts.map +1 -1
  465. package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts +5 -2
  466. package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts.map +1 -1
  467. package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts +5 -2
  468. package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts.map +1 -1
  469. package/lib/typescript/legacy/components/ScreenFooter.web.d.ts +10 -3
  470. package/lib/typescript/legacy/components/ScreenFooter.web.d.ts.map +1 -1
  471. package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts +10 -3
  472. package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts.map +1 -1
  473. package/lib/typescript/legacy/components/ScreenStack.web.d.ts +5 -2
  474. package/lib/typescript/legacy/components/ScreenStack.web.d.ts.map +1 -1
  475. package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts +3 -1
  476. package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts.map +1 -1
  477. package/lib/typescript/legacy/components/ScreenStackItem.d.ts +3 -2
  478. package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
  479. package/lib/typescript/legacy/components/SearchBar.d.ts +3 -3
  480. package/lib/typescript/legacy/components/SearchBar.d.ts.map +1 -1
  481. package/lib/typescript/legacy/components/SearchBar.web.d.ts +5 -2
  482. package/lib/typescript/legacy/components/SearchBar.web.d.ts.map +1 -1
  483. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +15 -12
  484. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
  485. package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts +3 -2
  486. package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts.map +1 -1
  487. package/lib/typescript/legacy/types.d.ts +25 -5
  488. package/lib/typescript/legacy/types.d.ts.map +1 -1
  489. package/lib/typescript/legacy/useTransitionProgress.d.ts +2 -5
  490. package/lib/typescript/legacy/useTransitionProgress.d.ts.map +1 -1
  491. package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts +2 -2
  492. package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts.map +1 -1
  493. package/package.json +18 -17
  494. package/react-native.config.js +3 -0
  495. package/src/components/modals/form-sheet/FormSheet.types.ts +3 -3
  496. package/src/components/scroll-to-top-guard/ScrollToTopGuard.ios.tsx +17 -0
  497. package/src/components/scroll-to-top-guard/ScrollToTopGuard.tsx +18 -0
  498. package/src/components/scroll-to-top-guard/index.ts +1 -0
  499. package/src/components/stack/header/StackHeaderConfig.android.tsx +48 -23
  500. package/src/components/stack/header/StackHeaderConfig.android.types.ts +660 -20
  501. package/src/components/stack/header/StackHeaderConfig.ios.tsx +77 -23
  502. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +251 -2
  503. package/src/components/stack/header/StackHeaderConfig.types.ts +2 -2
  504. package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +1 -23
  505. package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +2 -0
  506. package/src/components/stack/header/ios/iconUtils.ios.ts +38 -2
  507. package/src/components/stack/header/utils.ts +6 -11
  508. package/src/components/stack/host/StackHost.tsx +4 -2
  509. package/src/components/stack/host/StackHost.types.ts +28 -4
  510. package/src/components/stack/index.ts +6 -1
  511. package/src/components/tabs/host/TabsHost.ios.tsx +1 -0
  512. package/src/components/tabs/host/TabsHost.ios.types.ts +16 -0
  513. package/src/components/tabs/host/TabsHost.types.ts +3 -0
  514. package/src/components/tabs/screen/TabsScreen.types.ts +7 -3
  515. package/src/experimental/index.ts +1 -0
  516. package/src/fabric/ScrollViewMarkerNativeComponent.ts +8 -2
  517. package/src/fabric/legacy/FullWindowOverlayNativeComponent.ts +6 -2
  518. package/src/fabric/legacy/ModalScreenNativeComponent.ts +8 -2
  519. package/src/fabric/legacy/ScreenContainerNativeComponent.ts +5 -2
  520. package/src/fabric/legacy/ScreenContentWrapperNativeComponent.ts +2 -2
  521. package/src/fabric/legacy/ScreenFooterNativeComponent.ts +5 -2
  522. package/src/fabric/legacy/ScreenNativeComponent.ts +8 -2
  523. package/src/fabric/legacy/ScreenNavigationContainerNativeComponent.ts +2 -2
  524. package/src/fabric/legacy/ScreenStackHeaderConfigNativeComponent.ts +8 -3
  525. package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -2
  526. package/src/fabric/legacy/ScreenStackNativeComponent.ts +10 -2
  527. package/src/fabric/legacy/SearchBarNativeComponent.ts +10 -7
  528. package/src/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.ts +2 -2
  529. package/src/fabric/modals/form-sheet/FormSheetHostNativeComponent.ts +7 -2
  530. package/src/fabric/safe-area/SafeAreaViewNativeComponent.ts +6 -2
  531. package/src/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.ts +10 -0
  532. package/src/fabric/split/SplitHostNativeComponent.ts +5 -2
  533. package/src/fabric/split/SplitScreenNativeComponent.ts +6 -2
  534. package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +81 -1
  535. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +39 -2
  536. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +4 -1
  537. package/src/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.ts +6 -2
  538. package/src/fabric/stack/StackHeaderSubviewAndroidNativeComponent.ts +6 -2
  539. package/src/fabric/stack/StackHostNativeComponent.ts +15 -3
  540. package/src/fabric/stack/StackScreenNativeComponent.ts +6 -2
  541. package/src/fabric/tabs/TabsBottomAccessoryContentNativeComponent.ts +6 -2
  542. package/src/fabric/tabs/TabsBottomAccessoryNativeComponent.ts +6 -2
  543. package/src/fabric/tabs/TabsHostAndroidNativeComponent.ts +7 -2
  544. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +8 -2
  545. package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +2 -1
  546. package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +2 -1
  547. package/src/flags.ts +26 -0
  548. package/src/legacy/TransitionProgressContext.tsx +1 -1
  549. package/src/legacy/components/Screen.tsx +14 -6
  550. package/src/legacy/components/ScreenStackHeaderConfig.tsx +7 -1
  551. package/src/legacy/components/ScreenStackItem.tsx +3 -4
  552. package/src/legacy/components/SearchBar.tsx +34 -44
  553. package/src/legacy/components/helpers/prepareHeaderBarButtonItems.ts +7 -1
  554. package/src/legacy/gesture-handler/fabricUtils.ts +5 -2
  555. package/src/legacy/types.ts +28 -5
  556. package/src/legacy/useTransitionProgress.tsx +4 -2
  557. package/src/private/hooks/useRenderDebugInfo.tsx +2 -2
  558. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
  559. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
  560. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
  561. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDetents.kt +0 -106
  562. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDialog.kt +0 -60
  563. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDialogManager.kt +0 -138
  564. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDimensionsCoordinator.kt +0 -131
  565. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetNativeDismissCoordinator.kt +0 -25
  566. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetPresentationManager.kt +0 -207
  567. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderAppBarLayout.kt +0 -113
  568. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuConfig.kt +0 -60
  569. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuElementOptions.kt +0 -32
  570. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuGroupMetadata.kt +0 -16
  571. package/ios/ReactMountingTransactionObserving.swift +0 -7
  572. package/ios/bridging/Swift-Bridging.h +0 -7
  573. package/ios/conversion/RNSConversions-Stack.h +0 -32
  574. package/ios/conversion/RNSConversions-Stack.mm +0 -41
  575. package/ios/conversion/always_false.h +0 -31
  576. package/ios/orientation/RNSOrientationProviding.swift +0 -6
  577. package/ios/orientation/RNSOrientationSwift.swift +0 -14
  578. package/ios/split/RNSSplitAppearanceApplicator.swift +0 -199
  579. package/ios/split/RNSSplitAppearanceCoordinator.swift +0 -26
  580. package/ios/split/RNSSplitAppearanceUpdateFlags.swift +0 -11
  581. package/ios/split/RNSSplitHostController.swift +0 -570
  582. package/ios/split/RNSSplitNavigationController.swift +0 -46
  583. package/ios/split/RNSSplitScreenController.swift +0 -133
  584. package/ios/utils/RNSLog.swift +0 -6
  585. /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
@@ -5,6 +5,7 @@ import React, {
5
5
  useCallback,
6
6
  useEffect,
7
7
  useImperativeHandle,
8
+ useMemo,
8
9
  useRef,
9
10
  } from 'react';
10
11
  import type {
@@ -13,6 +14,7 @@ import type {
13
14
  } from './StackHeaderConfig.types';
14
15
  import StackHeaderConfigIOSNativeComponent, {
15
16
  Commands as StackHeaderConfigIOSNativeCommands,
17
+ HeaderAppearance,
16
18
  MenuItemPressEvent,
17
19
  MenuSelectionChangeEvent,
18
20
  NativeMenuElementOptionsIOS,
@@ -21,8 +23,9 @@ import type { StackHeaderItemPlacement } from './ios/StackHeaderItem.ios.types';
21
23
  import { StackHeaderItemSpacerPlacement } from './ios/StackHeaderItemSpacer.ios.types';
22
24
  import StackHeaderItemSpacer from './ios/StackHeaderItemSpacer.ios';
23
25
  import StackHeaderItem from './ios/StackHeaderItem.ios';
24
- import { NativeSyntheticEvent, StyleSheet } from 'react-native';
26
+ import { NativeSyntheticEvent, StyleSheet, processColor } from 'react-native';
25
27
  import type {
28
+ StackHeaderAppearanceIOS,
26
29
  StackHeaderInlineCustomItemIOS,
27
30
  StackHeaderInlineItemIOS,
28
31
  StackHeaderMenuItemOptionsIOS,
@@ -30,8 +33,8 @@ import type {
30
33
  StackHeaderSpacerItemIOS,
31
34
  StackHeaderTitleCustomItemIOS,
32
35
  } from './StackHeaderConfig.ios.types';
33
- import { findMenuElementByIdInItems, validateMenuCallbacks } from './utils';
34
- import { resolveIconAssetSources } from './ios/iconUtils.ios';
36
+ import { findMenuElementByIdInMenus, validateMenuCallbacks } from './utils';
37
+ import { resolveIconAssetSources, resolveMenuIcons } from './ios/iconUtils.ios';
35
38
 
36
39
  /**
37
40
  * EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
@@ -48,11 +51,18 @@ function StackHeaderConfig(
48
51
  leadingItems,
49
52
  trailingItems,
50
53
  titleItem,
54
+ titleMenu,
51
55
  subtitleItem,
52
56
  largeSubtitleItem,
53
57
  largeTitle,
54
58
  largeSubtitle,
55
59
  largeTitleEnabled,
60
+ prompt,
61
+ backButtonTitle,
62
+ backButtonDisplayMode,
63
+ backButtonMenuEnabled,
64
+ standardAppearance,
65
+ scrollEdgeAppearance,
56
66
  } = ios ?? {};
57
67
 
58
68
  const nativeRef =
@@ -95,56 +105,70 @@ function StackHeaderConfig(
95
105
  },
96
106
  }));
97
107
 
108
+ const allMenus = useMemo(
109
+ () =>
110
+ [
111
+ ...(leadingItems ?? [])
112
+ .filter(it => it && it.type === 'item')
113
+ .map(it => it.menu),
114
+ ...(trailingItems ?? [])
115
+ .filter(it => it && it.type === 'item')
116
+ .map(it => it.menu),
117
+ titleMenu,
118
+ ].filter(it => !!it),
119
+ [leadingItems, trailingItems, titleMenu],
120
+ );
121
+
98
122
  const handleMenuItemPress = useCallback(
99
123
  (event: NativeSyntheticEvent<MenuItemPressEvent>) => {
100
- const items = Array.of(
101
- ...(leadingItems ?? []).filter(it => it && it.type === 'item'),
102
- ...(trailingItems ?? []).filter(it => it && it.type === 'item'),
103
- );
104
- const menuElement = findMenuElementByIdInItems(
105
- items,
124
+ const menuElement = findMenuElementByIdInMenus(
125
+ allMenus,
106
126
  event.nativeEvent.menuItemId,
107
127
  );
108
128
  if (menuElement && menuElement.type === 'menuItem') {
109
129
  menuElement.onPress?.();
110
130
  }
111
131
  },
112
- [leadingItems, trailingItems],
132
+ [allMenus],
113
133
  );
114
134
 
115
- const allMenuItems = [
116
- ...(leadingItems ?? []),
117
- ...(trailingItems ?? []),
118
- ].filter(it => it && it.type === 'item');
119
-
120
135
  const handleSelectionChange = useCallback(
121
136
  (event: NativeSyntheticEvent<MenuSelectionChangeEvent>) => {
122
137
  const { menuId, selectedMenuItemIds } = event.nativeEvent;
123
- const menu = findMenuElementByIdInItems(allMenuItems, menuId);
138
+ const menu = findMenuElementByIdInMenus(allMenus, menuId);
124
139
  if (menu && menu.type === 'menu') {
125
140
  menu.onSelectionChange?.(selectedMenuItemIds);
126
141
  }
127
142
  },
128
- [allMenuItems],
143
+ [allMenus],
129
144
  );
130
145
 
131
146
  useEffect(() => {
132
- for (const item of allMenuItems) {
133
- if ('menu' in item && item.menu) {
134
- validateMenuCallbacks(item.menu);
135
- }
147
+ for (const menu of allMenus) {
148
+ validateMenuCallbacks(menu);
136
149
  }
137
- // eslint-disable-next-line react-hooks/exhaustive-deps
138
- }, [leadingItems, trailingItems]);
150
+ }, [allMenus]);
151
+
152
+ const resolvedTitleMenu = useMemo(
153
+ () => (titleMenu != null ? resolveMenuIcons(titleMenu) : undefined),
154
+ [titleMenu],
155
+ );
139
156
 
140
157
  return (
141
158
  <StackHeaderConfigIOSNativeComponent
142
159
  ref={nativeRef}
143
160
  {...restProps}
144
161
  collapsable={false}
162
+ backButtonTitle={backButtonTitle}
163
+ backButtonDisplayMode={backButtonDisplayMode}
164
+ backButtonMenuEnabled={backButtonMenuEnabled}
145
165
  largeTitle={largeTitle}
146
166
  largeSubtitle={largeSubtitle}
147
167
  largeTitleEnabled={!!largeTitleEnabled}
168
+ prompt={prompt}
169
+ standardAppearance={mapAppearanceToNativeProp(standardAppearance)}
170
+ scrollEdgeAppearance={mapAppearanceToNativeProp(scrollEdgeAppearance)}
171
+ titleMenu={resolvedTitleMenu}
148
172
  style={styles.config}
149
173
  onMenuItemPress={handleMenuItemPress}
150
174
  onMenuSelectionChange={handleSelectionChange}>
@@ -158,6 +182,36 @@ function StackHeaderConfig(
158
182
  );
159
183
  }
160
184
 
185
+ function mapAppearanceToNativeProp(
186
+ appearance?: StackHeaderAppearanceIOS,
187
+ ): HeaderAppearance | undefined {
188
+ if (!appearance) return undefined;
189
+
190
+ const {
191
+ titleFontColor,
192
+ titleFontWeight,
193
+ largeTitleFontColor,
194
+ largeTitleFontWeight,
195
+ subtitleFontColor,
196
+ subtitleFontWeight,
197
+ } = appearance;
198
+
199
+ return {
200
+ ...appearance,
201
+ titleFontColor: processColor(titleFontColor),
202
+ titleFontWeight:
203
+ titleFontWeight !== undefined ? String(titleFontWeight) : undefined,
204
+ largeTitleFontColor: processColor(largeTitleFontColor),
205
+ largeTitleFontWeight:
206
+ largeTitleFontWeight !== undefined
207
+ ? String(largeTitleFontWeight)
208
+ : undefined,
209
+ subtitleFontColor: processColor(subtitleFontColor),
210
+ subtitleFontWeight:
211
+ subtitleFontWeight !== undefined ? String(subtitleFontWeight) : undefined,
212
+ };
213
+ }
214
+
161
215
  function makeItemViewFromItem(
162
216
  item:
163
217
  | StackHeaderInlineItemIOS
@@ -1,4 +1,5 @@
1
1
  import type { ReactElement } from 'react';
2
+ import type { TextStyle } from 'react-native';
2
3
  import type { PlatformIconIOS } from '../../shared/types';
3
4
  import type { StackHeaderMenuIOS } from './ios/StackHeaderMenu.ios.types';
4
5
 
@@ -94,6 +95,43 @@ export interface SupportsMenuIOS {
94
95
  menu?: StackHeaderMenuIOS | undefined;
95
96
  }
96
97
 
98
+ export interface SupportsSharedBackgroundIOS {
99
+ /**
100
+ * @summary Whether the liquid glass background for this item should be hidden.
101
+ *
102
+ * @description
103
+ * On iOS 26, adjacent bar button items are grouped inside a shared liquid
104
+ * glass background. Setting this to `true` removes the shared background
105
+ * from this item.
106
+ *
107
+ * @default false
108
+ *
109
+ * @platform iOS
110
+ *
111
+ * @supported iOS 26 and higher
112
+ */
113
+ hidesSharedBackground?: boolean | undefined;
114
+ }
115
+
116
+ export interface SupportsIdentifierIOS {
117
+ /**
118
+ * @summary Stable identifier used to match the item across different screens
119
+ * for more intelligent animation on transition.
120
+ *
121
+ * @description
122
+ * When navigating between screens, iOS tries to match similarly looking items (i.e. same sfSymbol)
123
+ * and animate between them. If the heuristic fails, a simpler crossfade is applied.
124
+ * In a situation where visually different items should be logically considered the same across screens,
125
+ * you may use this prop to tell this fact to the system. The identifier shouldn't be updated at runtime;
126
+ * doing so will result in item rebuild and visual flash.
127
+ *
128
+ * @platform iOS
129
+ *
130
+ * @supported iOS 26 and higher
131
+ */
132
+ identifier?: string | undefined;
133
+ }
134
+
97
135
  /**
98
136
  * @summary Native header item with text label.
99
137
  *
@@ -101,7 +139,9 @@ export interface SupportsMenuIOS {
101
139
  */
102
140
  export interface StackHeaderInlineItemIOS
103
141
  extends StackHeaderBaseItemIOS,
104
- SupportsMenuIOS {
142
+ SupportsMenuIOS,
143
+ SupportsIdentifierIOS,
144
+ SupportsSharedBackgroundIOS {
105
145
  /**
106
146
  * @summary Marks this object as a header item definition.
107
147
  *
@@ -126,7 +166,10 @@ export interface StackHeaderInlineItemIOS
126
166
  *
127
167
  * @platform iOS
128
168
  */
129
- export interface StackHeaderInlineCustomItemIOS extends SupportsMenuIOS {
169
+ export interface StackHeaderInlineCustomItemIOS
170
+ extends SupportsMenuIOS,
171
+ SupportsIdentifierIOS,
172
+ SupportsSharedBackgroundIOS {
130
173
  /**
131
174
  * @summary A unique identifier within the screen header.
132
175
  *
@@ -250,7 +293,172 @@ export interface StackHeaderTitleCustomItemIOS {
250
293
  render: () => ReactElement;
251
294
  }
252
295
 
296
+ /**
297
+ * @summary Controls how the back button title is displayed.
298
+ *
299
+ * @description
300
+ * - `default`: the system chooses the title depending on available space.
301
+ * On iOS < 26 options include: custom title (defaults to previous screen title),
302
+ * generic "Back", no title; on iOS >= 26 it's either custom title (if set) or no title.
303
+ * - `generic`: on iOS < 26, the system uses a generic "Back" title or no title;
304
+ * on iOS >= 26 it's the same as `minimal`.
305
+ * - `minimal`: no title is displayed next to the back button chevron.
306
+ *
307
+ * @platform iOS
308
+ */
309
+ export type StackHeaderBackButtonDisplayModeIOS =
310
+ | 'default'
311
+ | 'generic'
312
+ | 'minimal';
313
+
314
+ export interface StackHeaderAppearanceIOS {
315
+ /**
316
+ * @summary Specifies the font family used for the title of the header.
317
+ *
318
+ * @platform ios
319
+ */
320
+ titleFontFamily?: TextStyle['fontFamily'] | undefined;
321
+ /**
322
+ * @summary Specifies the font size used for the title of the header.
323
+ *
324
+ * @platform ios
325
+ */
326
+ titleFontSize?: TextStyle['fontSize'] | undefined;
327
+ /**
328
+ * @summary Specifies the font weight used for the title of the header.
329
+ *
330
+ * @platform ios
331
+ */
332
+ titleFontWeight?: TextStyle['fontWeight'] | undefined;
333
+ /**
334
+ * @summary Specifies the font style used for the title of the header.
335
+ *
336
+ * @platform ios
337
+ */
338
+ titleFontStyle?: TextStyle['fontStyle'] | undefined;
339
+ /**
340
+ * @summary Specifies the font color used for the title of the header.
341
+ *
342
+ * @platform ios
343
+ */
344
+ titleFontColor?: TextStyle['color'] | undefined;
345
+ /**
346
+ * @summary Specifies the font family used for the large title of the header.
347
+ *
348
+ * @platform ios
349
+ */
350
+ largeTitleFontFamily?: TextStyle['fontFamily'] | undefined;
351
+ /**
352
+ * @summary Specifies the font size used for the large title of the header.
353
+ *
354
+ * @platform ios
355
+ */
356
+ largeTitleFontSize?: TextStyle['fontSize'] | undefined;
357
+ /**
358
+ * @summary Specifies the font weight used for the large title of the header.
359
+ *
360
+ * @platform ios
361
+ */
362
+ largeTitleFontWeight?: TextStyle['fontWeight'] | undefined;
363
+ /**
364
+ * @summary Specifies the font style used for the large title of the header.
365
+ *
366
+ * @platform ios
367
+ */
368
+ largeTitleFontStyle?: TextStyle['fontStyle'] | undefined;
369
+ /**
370
+ * @summary Specifies the font color used for the large title of the header.
371
+ *
372
+ * @platform ios
373
+ */
374
+ largeTitleFontColor?: TextStyle['color'] | undefined;
375
+ /**
376
+ * @summary Specifies the font family used for the subtitle of the header.
377
+ *
378
+ * @description Applies to both the regular and the large subtitle.
379
+ *
380
+ * @platform ios
381
+ *
382
+ * @supported iOS 26 and higher
383
+ */
384
+ subtitleFontFamily?: TextStyle['fontFamily'] | undefined;
385
+ /**
386
+ * @summary Specifies the font size used for the subtitle of the header.
387
+ *
388
+ * @description Applies to both the regular and the large subtitle.
389
+ *
390
+ * @platform ios
391
+ *
392
+ * @supported iOS 26 and higher
393
+ */
394
+ subtitleFontSize?: TextStyle['fontSize'] | undefined;
395
+ /**
396
+ * @summary Specifies the font weight used for the subtitle of the header.
397
+ *
398
+ * @description Applies to both the regular and the large subtitle.
399
+ *
400
+ * @platform ios
401
+ *
402
+ * @supported iOS 26 and higher
403
+ */
404
+ subtitleFontWeight?: TextStyle['fontWeight'] | undefined;
405
+ /**
406
+ * @summary Specifies the font style used for the subtitle of the header.
407
+ *
408
+ * @description Applies to both the regular and the large subtitle.
409
+ *
410
+ * @platform ios
411
+ *
412
+ * @supported iOS 26 and higher
413
+ */
414
+ subtitleFontStyle?: TextStyle['fontStyle'] | undefined;
415
+ /**
416
+ * @summary Specifies the font color used for the subtitle of the header.
417
+ *
418
+ * @description Applies to both the regular and the large subtitle.
419
+ *
420
+ * @platform ios
421
+ *
422
+ * @supported iOS 26 and higher
423
+ */
424
+ subtitleFontColor?: TextStyle['color'] | undefined;
425
+ }
426
+
253
427
  export interface StackHeaderConfigPropsIOS {
428
+ /**
429
+ * @summary Title displayed next to the back button on this screen.
430
+ *
431
+ * @description
432
+ * Configured on the screen whose back button it applies to (the screen that
433
+ * is pushed on top). When unset, the system derives the back title from the
434
+ * previous screen's `title`.
435
+ *
436
+ * @platform iOS
437
+ */
438
+ backButtonTitle?: string | undefined;
439
+ /**
440
+ * @summary Controls how the back button title is displayed.
441
+ *
442
+ * @default 'default'
443
+ *
444
+ * @platform iOS
445
+ */
446
+ backButtonDisplayMode?: StackHeaderBackButtonDisplayModeIOS | undefined;
447
+ /**
448
+ * @summary Whether the back button shows the navigation history menu.
449
+ *
450
+ * @description
451
+ * Configured on the screen whose back button it applies to (the screen that
452
+ * is pushed on top). When `false`, the navigation history menu is not shown
453
+ * on either of the gestures that normally open it: long-pressing the back
454
+ * button and secondary-clicking it (trackpad / mouse right click); tapping
455
+ * it still pops the screen.
456
+ *
457
+ * @default true
458
+ *
459
+ * @platform iOS
460
+ */
461
+ backButtonMenuEnabled?: boolean | undefined;
254
462
  /**
255
463
  * @summary Custom item to display as a subtitle.
256
464
  *
@@ -287,6 +495,19 @@ export interface StackHeaderConfigPropsIOS {
287
495
  * @platform iOS
288
496
  */
289
497
  titleItem?: StackHeaderTitleCustomItemIOS | undefined;
498
+ /**
499
+ * @summary Menu definition for the title context menu.
500
+ *
501
+ * @description
502
+ * Configures a dropdown menu attached to the navigation bar title area.
503
+ * Works independently of {@link titleItem}; the menu appears for both
504
+ * plain text and custom view title.
505
+ *
506
+ * @platform iOS
507
+ *
508
+ * @supported iOS 16 and higher
509
+ */
510
+ titleMenu?: StackHeaderMenuIOS | undefined;
290
511
  /**
291
512
  * @summary A list of items placed starting from the trailing edge.
292
513
  * If there is not enough space to fit some items, they are moved to the overflow menu, one by one.
@@ -338,6 +559,34 @@ export interface StackHeaderConfigPropsIOS {
338
559
  * @supported iOS 26 and higher
339
560
  */
340
561
  largeSubtitleItem?: StackHeaderTitleCustomItemIOS | undefined;
562
+ /**
563
+ * @summary A single line of text displayed at the top of the navigation bar,
564
+ * above the title.
565
+ *
566
+ * @description
567
+ * Setting this prop increases the height of the navigation bar.
568
+ *
569
+ * @platform iOS
570
+ */
571
+ prompt?: string | undefined;
572
+ /**
573
+ * @summary Appearance of the header when the edge of scrollable content
574
+ * is not aligned with the edge of the header.
575
+ *
576
+ * @platform ios
577
+ */
578
+ standardAppearance?: StackHeaderAppearanceIOS | undefined;
579
+ /**
580
+ * @summary Appearance of the header when the edge of scrollable content
581
+ * is aligned with the edge of the header.
582
+ *
583
+ * @description If unset, derives the configuration from `standardAppearance`,
584
+ * otherwise becomes a standalone definition. In both cases it keeps transparent
585
+ * background by default (iOS <18).
586
+ *
587
+ * @platform ios
588
+ */
589
+ scrollEdgeAppearance?: StackHeaderAppearanceIOS | undefined;
341
590
  }
342
591
 
343
592
  export interface StackHeaderConfigCommandsIOS {
@@ -11,9 +11,9 @@ export interface StackHeaderConfigPropsBase {
11
11
  */
12
12
  title?: string | undefined;
13
13
  /**
14
- * @summary Subtitle displayed in the header. Currently unsupported on Android.
14
+ * @summary Subtitle displayed in the header.
15
15
  *
16
- * @platform ios
16
+ * @platform android, ios
17
17
  */
18
18
  subtitle?: string | undefined;
19
19
  /**
@@ -2,30 +2,8 @@ import React, { useCallback, useMemo } from 'react';
2
2
  import StackHeaderItemIOSNativeComponent from '../../../../fabric/stack/StackHeaderItemIOSNativeComponent';
3
3
  import type { HeaderItemPressEvent } from '../../../../fabric/stack/StackHeaderItemIOSNativeComponent';
4
4
  import type { StackHeaderItemProps } from './StackHeaderItem.ios.types';
5
- import type {
6
- StackHeaderMenuIOS,
7
- StackHeaderMenuElementIOS,
8
- } from './StackHeaderMenu.ios.types';
9
5
  import { NativeSyntheticEvent, StyleSheet } from 'react-native';
10
- import { resolveIconAssetSources } from './iconUtils.ios';
11
-
12
- function resolveMenuElementIcons(
13
- element: StackHeaderMenuElementIOS,
14
- ): StackHeaderMenuElementIOS {
15
- if (element.type === 'menuItem') {
16
- if (element.icon == null) {
17
- return element;
18
- }
19
- return { ...element, icon: resolveIconAssetSources(element.icon) };
20
- }
21
- return resolveMenuIcons(element);
22
- }
23
-
24
- function resolveMenuIcons(menu: StackHeaderMenuIOS): StackHeaderMenuIOS {
25
- const resolvedIcon = resolveIconAssetSources(menu.icon);
26
- const resolvedChildren = menu.children.map(resolveMenuElementIcons);
27
- return { ...menu, icon: resolvedIcon, children: resolvedChildren };
28
- }
6
+ import { resolveIconAssetSources, resolveMenuIcons } from './iconUtils.ios';
29
7
 
30
8
  export default function StackHeaderItem(props: StackHeaderItemProps) {
31
9
  const { render, onPress, icon, menu, ...rest } = props;
@@ -12,6 +12,8 @@ export type StackHeaderItemPlacement =
12
12
  export type StackHeaderItemProps = {
13
13
  placement: StackHeaderItemPlacement;
14
14
  itemId?: string | undefined;
15
+ identifier?: string | undefined;
16
+ hidesSharedBackground?: boolean | undefined;
15
17
  title?: string | undefined;
16
18
  icon?: PlatformIconIOS | undefined;
17
19
  render?: (() => ReactElement) | undefined;
@@ -1,5 +1,9 @@
1
1
  import type { PlatformIconIOS as ResolvedPlatformIconIOS } from '../../../../fabric/stack/StackHeaderItemIOSNativeComponent';
2
2
  import type { PlatformIconIOS } from '../../../shared/types';
3
+ import type {
4
+ StackHeaderMenuIOS,
5
+ StackHeaderMenuElementIOS,
6
+ } from './StackHeaderMenu.ios.types';
3
7
  import { Image } from 'react-native';
4
8
 
5
9
  export function resolveIconAssetSources(
@@ -9,16 +13,48 @@ export function resolveIconAssetSources(
9
13
  return undefined;
10
14
  }
11
15
  if (icon.type === 'imageSource') {
16
+ const resolvedImageSource = Image.resolveAssetSource(icon.imageSource);
17
+
18
+ if (!resolvedImageSource) {
19
+ return undefined;
20
+ }
21
+
12
22
  return {
13
23
  type: 'imageSource',
14
- imageSource: Image.resolveAssetSource(icon.imageSource),
24
+ imageSource: resolvedImageSource,
15
25
  };
16
26
  }
17
27
  if (icon.type === 'templateSource') {
28
+ const resolvedTemplateSource = Image.resolveAssetSource(
29
+ icon.templateSource,
30
+ );
31
+
32
+ if (!resolvedTemplateSource) {
33
+ return undefined;
34
+ }
35
+
18
36
  return {
19
37
  type: 'templateSource',
20
- templateSource: Image.resolveAssetSource(icon.templateSource),
38
+ templateSource: resolvedTemplateSource,
21
39
  };
22
40
  }
23
41
  return icon;
24
42
  }
43
+
44
+ export function resolveMenuElementIcons(
45
+ element: StackHeaderMenuElementIOS,
46
+ ): StackHeaderMenuElementIOS {
47
+ if (element.type === 'menuItem') {
48
+ if (element.icon == null) {
49
+ return element;
50
+ }
51
+ return { ...element, icon: resolveIconAssetSources(element.icon) };
52
+ }
53
+ return resolveMenuIcons(element);
54
+ }
55
+
56
+ export function resolveMenuIcons(menu: StackHeaderMenuIOS): StackHeaderMenuIOS {
57
+ const resolvedIcon = resolveIconAssetSources(menu.icon);
58
+ const resolvedChildren = menu.children.map(resolveMenuElementIcons);
59
+ return { ...menu, icon: resolvedIcon, children: resolvedChildren };
60
+ }
@@ -2,20 +2,15 @@ import {
2
2
  StackHeaderMenuElementIOS,
3
3
  StackHeaderMenuIOS,
4
4
  } from './ios/StackHeaderMenu.ios.types';
5
- import { SupportsMenuIOS } from './StackHeaderConfig.ios.types';
6
5
 
7
- export function findMenuElementByIdInItems(
8
- items: SupportsMenuIOS[],
6
+ export function findMenuElementByIdInMenus(
7
+ menus: StackHeaderMenuIOS[],
9
8
  id: string,
10
9
  ): StackHeaderMenuElementIOS | null {
11
- for (const item of items) {
12
- if (item.menu === undefined) {
13
- continue;
14
- }
15
-
16
- const menu = findMenuElementById(item.menu, id);
17
- if (menu !== null) {
18
- return menu;
10
+ for (const menu of menus) {
11
+ const element = findMenuElementById(menu, id);
12
+ if (element !== null) {
13
+ return element;
19
14
  }
20
15
  }
21
16
 
@@ -6,9 +6,11 @@ import type { StackHostProps } from './StackHost.types';
6
6
  /**
7
7
  * EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
8
8
  */
9
- function StackHost({ children, ref }: StackHostProps) {
9
+ function StackHost(props: StackHostProps) {
10
+ const { children, ref, ...restProps } = props;
11
+
10
12
  return (
11
- <StackHostNativeComponent ref={ref} style={styles.container}>
13
+ <StackHostNativeComponent ref={ref} style={styles.container} {...restProps}>
12
14
  {children}
13
15
  </StackHostNativeComponent>
14
16
  );
@@ -1,13 +1,37 @@
1
1
  import React from 'react';
2
- import type { ReactNativeElement, ViewProps } from 'react-native';
2
+ import type { HostInstance, ViewProps } from 'react-native';
3
3
  import { type NativeProps } from '../../../fabric/stack/StackHostNativeComponent';
4
+ import type { ColorScheme } from '../../shared/types';
5
+
6
+ export type StackHostColorScheme = ColorScheme | 'inherit';
4
7
 
5
8
  export type StackHostProps = {
9
+ // General
6
10
  children: NonNullable<ViewProps['children']>;
7
11
  // TODO: Work on these types
8
12
  ref?:
9
- | React.RefObject<
10
- (React.Component<NativeProps> & ReactNativeElement) | null
11
- >
13
+ | React.RefObject<(React.Component<NativeProps> & HostInstance) | null>
12
14
  | undefined;
15
+ /**
16
+ * @summary Specifies the color scheme used by the container and any child
17
+ * containers.
18
+ *
19
+ * The following values are currently supported:
20
+ * - `inherit` - the interface style from parent,
21
+ * - `light` - the light interface style,
22
+ * - `dark` - the dark interface style.
23
+ *
24
+ * @remarks
25
+ * Color scheme isn't currently supported on iOS.
26
+ *
27
+ * On Android, changing the effective color scheme rebuilds the header.
28
+ * Toolbar menu state survives the rebuild: checkbox/radio selections and
29
+ * changes applied via the `updateToolbarMenuElements` view command are
30
+ * reapplied to the new toolbar.
31
+ *
32
+ * @default inherit
33
+ *
34
+ * @platform android
35
+ */
36
+ colorScheme?: StackHostColorScheme | undefined;
13
37
  };