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
@@ -14,7 +14,7 @@
14
14
  #import <react/renderer/components/rnscreens/EventEmitters.h>
15
15
  #import <react/renderer/components/rnscreens/Props.h>
16
16
  #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
17
- #import <rnscreens/RNSScreenComponentDescriptor.h>
17
+ #import <react/renderer/components/rnscreens/legacy/RNSScreenComponentDescriptor.h>
18
18
  #import "RNSConvert.h"
19
19
  #import "RNSHeaderHeightChangeEvent.h"
20
20
  #import "RNSScreenViewEvent.h"
@@ -102,6 +102,7 @@ struct ContentWrapperBox {
102
102
  _sheetContentHeight = 0.0;
103
103
  _markedForUnmountInCurrentTransaction = NO;
104
104
  _synchronousShadowStateUpdatesEnabled = YES;
105
+ _iosOrientationInheritanceFixEnabled = YES;
105
106
  }
106
107
 
107
108
  - (BOOL)getFullScreenSwipeShadowEnabled
@@ -177,6 +178,13 @@ RNS_IGNORE_SUPER_CALL_END
177
178
 
178
179
  - (void)applyFrameCorrectionForDescendantScrollView
179
180
  {
181
+ // A dismissed sheet can still receive a layout pass after React has deleted it. By then Fabric
182
+ // may have recycled its scroll view into the screen that replaced the sheet, and sizing that
183
+ // scroll view to the sheet would clip the new screen. See #4651.
184
+ if (_invalidated) {
185
+ return;
186
+ }
187
+
180
188
  RCTScrollViewComponentView *scrollView = [self tryFindDescendantScrollView];
181
189
  if (_sheetsScrollView != scrollView) {
182
190
  [_sheetsScrollView removeObserver:self forKeyPath:@"bounds" context:nil];
@@ -769,6 +777,8 @@ RNS_IGNORE_SUPER_CALL_END
769
777
 
770
778
  - (void)invalidateImpl
771
779
  {
780
+ _invalidated = YES;
781
+
772
782
  // Since the scroll view might get immediately recycled we remove ourselves
773
783
  // immediately.
774
784
  if (_sheetsScrollView != nil) {
@@ -1259,6 +1269,8 @@ RNS_IGNORE_SUPER_CALL_END
1259
1269
 
1260
1270
  [self setSynchronousShadowStateUpdatesEnabled:newScreenProps.synchronousShadowStateUpdatesEnabled];
1261
1271
 
1272
+ [self setIosOrientationInheritanceFixEnabled:newScreenProps.iosOrientationInheritanceFixEnabled];
1273
+
1262
1274
  #if !TARGET_OS_TV
1263
1275
  if (newScreenProps.statusBarHidden != oldScreenProps.statusBarHidden) {
1264
1276
  [self setStatusBarHidden:newScreenProps.statusBarHidden];
@@ -1407,7 +1419,6 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1407
1419
  @implementation RNSScreen {
1408
1420
  __weak id _previousFirstResponder;
1409
1421
  CGRect _lastViewFrame;
1410
- RNSScreenView *_initialView;
1411
1422
  UIView *_fakeView;
1412
1423
  CADisplayLink *_animationTimer;
1413
1424
  CGFloat _currentAlpha;
@@ -1428,7 +1439,6 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1428
1439
  _fakeView = [UIView new];
1429
1440
  _shouldNotify = YES;
1430
1441
  _isRemovedFromParent = NO;
1431
- _initialView = (RNSScreenView *)view;
1432
1442
  }
1433
1443
  return self;
1434
1444
  }
@@ -1579,24 +1589,6 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1579
1589
  return NO;
1580
1590
  }
1581
1591
 
1582
- - (CGSize)getStatusBarHeightIsModal:(BOOL)isModal
1583
- {
1584
- #if !TARGET_OS_TV && !TARGET_OS_VISION
1585
- CGSize fallbackStatusBarSize = [[UIApplication sharedApplication] statusBarFrame].size;
1586
-
1587
- CGSize primaryStatusBarSize = self.view.window.windowScene.statusBarManager.statusBarFrame.size;
1588
- if (primaryStatusBarSize.height == 0 || primaryStatusBarSize.width == 0) {
1589
- return fallbackStatusBarSize;
1590
- }
1591
-
1592
- return primaryStatusBarSize;
1593
-
1594
- #else
1595
- // TVOS does not have status bar.
1596
- return CGSizeMake(0, 0);
1597
- #endif // !TARGET_OS_TV
1598
- }
1599
-
1600
1592
  - (UINavigationController *)getVisibleNavigationControllerIsModal:(BOOL)isModal
1601
1593
  {
1602
1594
  UINavigationController *navctr = self.navigationController;
@@ -1751,9 +1743,13 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1751
1743
 
1752
1744
  - (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingForward:(BOOL)goingForward
1753
1745
  {
1754
- if ([self.view isKindOfClass:[RNSScreenView class]]) {
1755
- // if the view is already snapshot, there is not sense in sending progress since on JS side
1756
- // the component is already not present
1746
+ if (![self.view isKindOfClass:[RNSScreenView class]]) {
1747
+ return;
1748
+ }
1749
+
1750
+ // if the screen was already deleted by React, there is no sense in sending progress
1751
+ // since on JS side the component is already not present
1752
+ if (!static_cast<RNSScreenView *>(self.view).isInvalidated) {
1757
1753
  [(RNSScreenView *)self.view notifyTransitionProgress:progress closing:closing goingForward:goingForward];
1758
1754
  }
1759
1755
  }
@@ -1907,11 +1903,9 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1907
1903
  return (int)[[self.screenView.reactSuperview reactSubviews] indexOfObject:view];
1908
1904
  }
1909
1905
 
1910
- // Since the view of the controller can be a snapshot of type `UIView`,
1911
- // when we want to check props of ScreenView, we need to get them from _initialView
1912
1906
  - (RNSScreenView *)screenView
1913
1907
  {
1914
- return _initialView;
1908
+ return static_cast<RNSScreenView *>(self.view);
1915
1909
  }
1916
1910
 
1917
1911
  - (void)hideHeaderIfNecessary
@@ -1984,6 +1978,19 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1984
1978
  }
1985
1979
  }
1986
1980
 
1981
+ // If flag is enabled, we're doing same evaluation as `[self supportedInterfaceOrientations]`
1982
+ // but we fall back to `RNSOrientationInherit` if orientation is not set in order not to
1983
+ // override parent's orientation. For more details see:
1984
+ // https://github.com/software-mansion/react-native-screens/pull/4408
1985
+ if (self.screenView.iosOrientationInheritanceFixEnabled) {
1986
+ UIViewController *orientationVC = [self findChildVCForConfigAndTrait:RNSWindowTraitOrientation includingModals:YES];
1987
+ if ([orientationVC isKindOfClass:[RNSScreen class]]) {
1988
+ return rnscreens::conversion::RNSOrientationFromUIInterfaceOrientationMask(
1989
+ ((RNSScreen *)orientationVC).screenView.screenOrientation);
1990
+ }
1991
+ return RNSOrientationInherit;
1992
+ }
1993
+
1987
1994
  return rnscreens::conversion::RNSOrientationFromUIInterfaceOrientationMask([self supportedInterfaceOrientations]);
1988
1995
  }
1989
1996
 
@@ -1991,18 +1998,22 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1991
1998
 
1992
1999
  #pragma mark - Fabric specific
1993
2000
 
1994
- - (void)setViewToSnapshot
2001
+ - (void)addSnapshotToView
1995
2002
  {
1996
- UIView *superView = self.view.superview;
1997
2003
  // if we dismissed the view natively, it will already be detached from view hierarchy
1998
- if (self.view.window != nil) {
1999
- auto afterUpdates = self.screenView.snapshotAfterUpdates;
2000
- UIView *snapshot = [self.view snapshotViewAfterScreenUpdates:afterUpdates];
2001
- snapshot.frame = self.view.frame;
2002
- [self.view removeFromSuperview];
2003
- self.view = snapshot;
2004
- [superView addSubview:snapshot];
2004
+ if (self.view.window == nil) {
2005
+ return;
2005
2006
  }
2007
+
2008
+ // The snapshot is added inside the screen view instead of replacing it, so `self.view` remains
2009
+ // the view UIKit captured for the ongoing transition and is torn down (with the snapshot)
2010
+ // consistently. Replacing the view mid-transition made iOS 26 teardown re-insert the original
2011
+ // view into the hierarchy and remove only the snapshot, leaving a view that blocked all touches.
2012
+ UIView *snapshot = [self.view snapshotViewAfterScreenUpdates:self.screenView.snapshotAfterUpdates];
2013
+ snapshot.frame = self.view.bounds;
2014
+ // fill the whole screen view with the snapshot
2015
+ snapshot.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
2016
+ [self.view addSubview:snapshot];
2006
2017
  }
2007
2018
 
2008
2019
  @end
@@ -16,6 +16,15 @@ namespace react = facebook::react;
16
16
 
17
17
  @implementation RNSScreenContentWrapper
18
18
 
19
+ - (instancetype)initWithFrame:(CGRect)frame
20
+ {
21
+ if (self = [super initWithFrame:frame]) {
22
+ static const auto defaultProps = std::make_shared<const react::RNSScreenContentWrapperProps>();
23
+ _props = defaultProps;
24
+ }
25
+ return self;
26
+ }
27
+
19
28
  - (void)notifyDelegateWithFrame:(CGRect)frame
20
29
  {
21
30
  [self.delegate contentWrapper:self receivedReactFrame:frame];
@@ -12,6 +12,8 @@
12
12
  - (instancetype)init
13
13
  {
14
14
  if (self = [super init]) {
15
+ static const auto defaultProps = std::make_shared<const facebook::react::RNSScreenFooterProps>();
16
+ _props = defaultProps;
15
17
  self.translatesAutoresizingMaskIntoConstraints = false;
16
18
  _parent = nil;
17
19
  }
@@ -244,8 +244,10 @@ namespace react = facebook::react;
244
244
  willShowViewController:(UIViewController *)viewController
245
245
  animated:(BOOL)animated
246
246
  {
247
- if (![viewController.view isKindOfClass:[RNSScreenView class]]) {
248
- // if the current view is a snapshot, config was already removed so we don't trigger the method
247
+ if (![viewController.view isKindOfClass:[RNSScreenView class]] ||
248
+ static_cast<RNSScreenView *>(viewController.view).isInvalidated) {
249
+ // if the screen was already deleted by React, its config was already removed
250
+ // so we don't trigger the method
249
251
  return;
250
252
  }
251
253
  auto *screenView = static_cast<RNSScreenView *>(viewController.view);
@@ -1313,7 +1315,7 @@ RNS_IGNORE_SUPER_CALL_END
1313
1315
  - (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
1314
1316
  {
1315
1317
  RNSScreenView *screenChildComponent = (RNSScreenView *)childComponentView;
1316
- [screenChildComponent.controller setViewToSnapshot];
1318
+ [screenChildComponent.controller addSnapshotToView];
1317
1319
 
1318
1320
  RCTAssert(screenChildComponent.reactSuperview == self,
1319
1321
  @"Attempt to unmount a view which is mounted inside different view. (parent: %@, child: %@, index: %@)",
@@ -1330,7 +1332,10 @@ RNS_IGNORE_SUPER_CALL_END
1330
1332
  @([[_reactSubviews objectAtIndex:index] tag]));
1331
1333
  screenChildComponent.reactSuperview = nil;
1332
1334
  [_reactSubviews removeObject:screenChildComponent];
1333
- [screenChildComponent removeFromSuperview];
1335
+
1336
+ if (screenChildComponent.window == nil) {
1337
+ [screenChildComponent removeFromSuperview];
1338
+ }
1334
1339
  }
1335
1340
 
1336
1341
  - (void)mountingTransactionWillMount:(const facebook::react::MountingTransaction &)transaction
@@ -14,7 +14,7 @@
14
14
  #import <react/renderer/components/rnscreens/Props.h>
15
15
  #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
16
16
  #import <react/utils/ManagedObjectWrapper.h>
17
- #import <rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h>
17
+ #import <react/renderer/components/rnscreens/legacy/RNSScreenStackHeaderConfigComponentDescriptor.h>
18
18
  #import "RCTImageComponentView+RNSScreenStackHeaderConfig.h"
19
19
  #import "RNSBackBarButtonItem.h"
20
20
  #import "RNSBarButtonItem.h"
@@ -947,6 +947,7 @@ RNS_IGNORE_SUPER_CALL_END
947
947
  }
948
948
  }
949
949
 
950
+ #ifndef NDEBUG
950
951
  static RCTResizeMode resizeModeFromCppEquiv(react::ImageResizeMode resizeMode)
951
952
  {
952
953
  switch (resizeMode) {
@@ -965,6 +966,7 @@ static RCTResizeMode resizeModeFromCppEquiv(react::ImageResizeMode resizeMode)
965
966
  return RCTResizeModeStretch;
966
967
  }
967
968
  }
969
+ #endif // !NDEBUG
968
970
 
969
971
  + (RCTImageSource *)imageSourceFromImageView:(RCTImageComponentView *)view
970
972
  {
@@ -10,7 +10,7 @@
10
10
  #import <React/RCTConversions.h>
11
11
  #import <React/RCTFabricComponentsPlugins.h>
12
12
 
13
- #import <rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h>
13
+ #import <react/renderer/components/rnscreens/legacy/RNSScreenStackHeaderSubviewComponentDescriptor.h>
14
14
 
15
15
  namespace react = facebook::react;
16
16
 
@@ -101,7 +101,8 @@
101
101
  {
102
102
  #if !TARGET_OS_TV && !TARGET_OS_VISION
103
103
  dispatch_async(dispatch_get_main_queue(), ^{
104
- UIInterfaceOrientationMask orientationMask = [RCTKeyWindow().rootViewController supportedInterfaceOrientations];
104
+ UIWindow *window = RCTKeyWindow();
105
+ UIInterfaceOrientationMask orientationMask = [window.rootViewController supportedInterfaceOrientations];
105
106
 
106
107
  UIInterfaceOrientation currentDeviceOrientation =
107
108
  [RNSScreenWindowTraits interfaceOrientationFromDeviceOrientation:[[UIDevice currentDevice] orientation]];
@@ -130,17 +131,7 @@
130
131
  if (newOrientation != UIInterfaceOrientationUnknown) {
131
132
  #if RNS_IPHONE_OS_VERSION_AVAILABLE(16_0)
132
133
  if (@available(iOS 16.0, *)) {
133
- NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
134
-
135
- // when an app supports multiple scenes (e.g. CarPlay), it is possible that
136
- // UIWindowScene is not the first scene, or it may not be present at all
137
- UIWindowScene *scene = nil;
138
- for (id connectedScene in array) {
139
- if ([connectedScene isKindOfClass:[UIWindowScene class]]) {
140
- scene = connectedScene;
141
- break;
142
- }
143
- }
134
+ UIWindowScene *scene = window.windowScene;
144
135
 
145
136
  if (scene == nil) {
146
137
  return;
@@ -154,7 +145,8 @@
154
145
 
155
146
  // `attemptRotationToDeviceOrientation` is deprecated for modern OS versions
156
147
  // so we need to use `setNeedsUpdateOfSupportedInterfaceOrientations`
157
- UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
148
+
149
+ UIViewController *topController = window.rootViewController;
158
150
  while (topController.presentedViewController) {
159
151
  topController = topController.presentedViewController;
160
152
  }
@@ -10,13 +10,11 @@ NS_ASSUME_NONNULL_BEGIN
10
10
 
11
11
  @interface RNSFormSheetConfigurationApplicator : NSObject
12
12
 
13
- - (void)applyConfigurationIfNeededWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
13
+ + (void)applyConfigurationIfNeededWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
14
14
  behaviorProvider:(id<RNSFormSheetBehaviorProvider>)behaviorProvider
15
15
  controller:(RNSFormSheetContentController *)controller
16
16
  coordinator:(RNSFormSheetUpdateCoordinator *)coordinator;
17
17
 
18
- - (void)resetInitialDetent;
19
-
20
18
  @end
21
19
 
22
20
  NS_ASSUME_NONNULL_END
@@ -7,43 +7,33 @@
7
7
  #import "RNSFormSheetUpdateCoordinator.h"
8
8
  #import "RNSFormSheetUpdateFlags.h"
9
9
 
10
- @implementation RNSFormSheetConfigurationApplicator {
11
- BOOL _initialDetentApplied;
12
- }
13
-
14
- - (instancetype)init
15
- {
16
- if (self = [super init]) {
17
- _initialDetentApplied = NO;
18
- }
19
- return self;
20
- }
10
+ @implementation RNSFormSheetConfigurationApplicator
21
11
 
22
- - (void)resetInitialDetent
23
- {
24
- _initialDetentApplied = NO;
25
- }
26
-
27
- - (void)applyConfigurationIfNeededWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
12
+ + (void)applyConfigurationIfNeededWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
28
13
  behaviorProvider:(id<RNSFormSheetBehaviorProvider>)behaviorProvider
29
14
  controller:(RNSFormSheetContentController *)controller
30
15
  coordinator:(RNSFormSheetUpdateCoordinator *)coordinator
31
16
  {
32
- RNSFormSheetUpdateFlags configFlags = RNSFormSheetUpdateFlagsAppearance | RNSFormSheetUpdateFlagsBehavior;
17
+ RNSFormSheetUpdateFlags configFlags =
18
+ RNSFormSheetUpdateFlagsAppearance | RNSFormSheetUpdateFlagsBehavior | RNSFormSheetUpdateFlagsInitialDetent;
19
+
20
+ BOOL shouldSelectInitialDetent = [coordinator needsAny:RNSFormSheetUpdateFlagsInitialDetent];
33
21
 
34
22
  [coordinator updateIfAnyNeeded:configFlags
35
23
  performOperations:^{
36
24
  [self applyConfigurationWithAppearanceProvider:appearanceProvider
37
25
  behaviorProvider:behaviorProvider
38
- controller:controller];
26
+ controller:controller
27
+ selectInitialDetent:shouldSelectInitialDetent];
39
28
  }];
40
29
  }
41
30
 
42
31
  #pragma mark - Updaters
43
32
 
44
- - (void)applyConfigurationWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
33
+ + (void)applyConfigurationWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
45
34
  behaviorProvider:(id<RNSFormSheetBehaviorProvider>)behaviorProvider
46
35
  controller:(RNSFormSheetContentController *)controller
36
+ selectInitialDetent:(BOOL)selectInitialDetent
47
37
  {
48
38
  #if !TARGET_OS_TV
49
39
  UISheetPresentationController *sheet = controller.sheetPresentationController;
@@ -57,11 +47,10 @@
57
47
  [RNSFormSheetDetentResolver buildSheetDetentsWithBehaviorProvider:behaviorProvider];
58
48
 
59
49
  UISheetPresentationControllerDetentIdentifier initialDetentIdentifier = nil;
60
- if (!_initialDetentApplied) {
50
+ if (selectInitialDetent) {
61
51
  initialDetentIdentifier =
62
52
  [RNSFormSheetDetentResolver initialDetentIdentifierForDetents:nativeDetents
63
53
  atRequestedIndex:behaviorProvider.initialDetentIndex];
64
- _initialDetentApplied = YES;
65
54
  }
66
55
 
67
56
  BOOL prefersScrollingExpands = behaviorProvider.prefersScrollingExpandsWhenScrolledToEdge;
@@ -43,7 +43,7 @@ NS_ASSUME_NONNULL_BEGIN
43
43
  - (void)setNeedsPresentationUpdate;
44
44
  - (void)setNeedsBehaviorUpdate;
45
45
  - (void)setNeedsAppearanceUpdate;
46
- - (void)setNeedsInitialDetentReset;
46
+ - (void)setNeedsInitialDetentUpdate;
47
47
 
48
48
  #pragma mark - Updates
49
49
 
@@ -20,12 +20,9 @@
20
20
 
21
21
  @implementation RNSFormSheetContentController {
22
22
  RNSFormSheetUpdateCoordinator *_Nonnull _updateCoordinator;
23
- RNSFormSheetConfigurationApplicator *_Nonnull _configurationApplicator;
24
23
  RNSFormSheetPresentationManager *_Nonnull _presentationManager;
25
24
 
26
25
  UITapGestureRecognizer *_Nullable _backdropTapGestureRecognizer;
27
-
28
- BOOL _needsInitialDetentReset;
29
26
  }
30
27
 
31
28
  - (instancetype)init
@@ -34,10 +31,7 @@
34
31
  self.modalPresentationStyle = UIModalPresentationFormSheet;
35
32
 
36
33
  _updateCoordinator = [RNSFormSheetUpdateCoordinator new];
37
- _configurationApplicator = [RNSFormSheetConfigurationApplicator new];
38
34
  _presentationManager = [RNSFormSheetPresentationManager new];
39
-
40
- _needsInitialDetentReset = NO;
41
35
  }
42
36
  return self;
43
37
  }
@@ -142,7 +136,7 @@
142
136
  // We must force a full configuration update for this new instance.
143
137
  [self setNeedsAppearanceUpdate];
144
138
  [self setNeedsBehaviorUpdate];
145
- [self setNeedsInitialDetentReset];
139
+ [self setNeedsInitialDetentUpdate];
146
140
  [self updateConfigurationIfNeeded];
147
141
  }
148
142
 
@@ -160,15 +154,10 @@
160
154
  return;
161
155
  }
162
156
 
163
- if (_needsInitialDetentReset) {
164
- _needsInitialDetentReset = NO;
165
- [_configurationApplicator resetInitialDetent];
166
- }
167
-
168
- [_configurationApplicator applyConfigurationIfNeededWithAppearanceProvider:appearanceProvider
169
- behaviorProvider:behaviorProvider
170
- controller:self
171
- coordinator:_updateCoordinator];
157
+ [RNSFormSheetConfigurationApplicator applyConfigurationIfNeededWithAppearanceProvider:appearanceProvider
158
+ behaviorProvider:behaviorProvider
159
+ controller:self
160
+ coordinator:_updateCoordinator];
172
161
  }
173
162
 
174
163
  #pragma mark - Signals
@@ -188,9 +177,9 @@
188
177
  [_updateCoordinator setNeeds:RNSFormSheetUpdateFlagsBehavior];
189
178
  }
190
179
 
191
- - (void)setNeedsInitialDetentReset
180
+ - (void)setNeedsInitialDetentUpdate
192
181
  {
193
- _needsInitialDetentReset = YES;
182
+ [_updateCoordinator setNeeds:RNSFormSheetUpdateFlagsInitialDetent];
194
183
  }
195
184
 
196
185
  #pragma mark - Updates
@@ -7,6 +7,15 @@ namespace react = facebook::react;
7
7
 
8
8
  @implementation RNSFormSheetContentWrapperComponentView
9
9
 
10
+ - (instancetype)initWithFrame:(CGRect)frame
11
+ {
12
+ if (self = [super initWithFrame:frame]) {
13
+ static const auto defaultProps = std::make_shared<const react::RNSFormSheetContentWrapperProps>();
14
+ _props = defaultProps;
15
+ }
16
+ return self;
17
+ }
18
+
10
19
  #pragma mark - RCTComponentViewProtocol
11
20
 
12
21
  + (react::ComponentDescriptorProvider)componentDescriptorProvider
@@ -13,7 +13,7 @@
13
13
  #import <React/RCTSurfaceTouchHandler.h>
14
14
  #import <react/renderer/components/rnscreens/EventEmitters.h>
15
15
  #import <react/renderer/components/rnscreens/Props.h>
16
- #import <rnscreens/RNSFormSheetHostComponentDescriptor.h>
16
+ #import <react/renderer/components/rnscreens/RNSFormSheetHostComponentDescriptor.h>
17
17
 
18
18
  namespace react = facebook::react;
19
19
 
@@ -246,9 +246,9 @@ namespace react = facebook::react;
246
246
  // because UIKit destroys the presentationController after the modal is dismissed.
247
247
  [_controller setNeedsAppearanceUpdate];
248
248
  [_controller setNeedsBehaviorUpdate];
249
- // Reset the initial-detent applied flag when reopening so the
250
- // configured initialDetentIndex can be applied again.
251
- [_controller setNeedsInitialDetentReset];
249
+ // Request the configured initialDetentIndex to be selected
250
+ // again on the fresh presentation controller.
251
+ [_controller setNeedsInitialDetentUpdate];
252
252
  }
253
253
  }
254
254
 
@@ -1,8 +1,8 @@
1
1
  #import "RNSFormSheetHostShadowStateProxy.h"
2
2
 
3
3
  #import <React/RCTConversions.h>
4
- #import <rnscreens/RNSFormSheetHostShadowNode.h>
5
- #import <rnscreens/RNSFormSheetHostState.h>
4
+ #import <react/renderer/components/rnscreens/RNSFormSheetHostShadowNode.h>
5
+ #import <react/renderer/components/rnscreens/RNSFormSheetHostState.h>
6
6
 
7
7
  namespace react = facebook::react;
8
8
 
@@ -10,4 +10,7 @@ typedef NS_OPTIONS(NSUInteger, RNSFormSheetUpdateFlags) {
10
10
  RNSFormSheetUpdateFlagsAppearance = 1 << 1,
11
11
  // The sheet's behavioral layout (detents, scrolling config) needs to be re-applied.
12
12
  RNSFormSheetUpdateFlagsBehavior = 1 << 2,
13
+ // The sheet's selected detent needs to be (re)set to the configured `initialDetentIndex`.
14
+ // Requested once per presentation cycle, since UIKit recreates the presentation controller on every present.
15
+ RNSFormSheetUpdateFlagsInitialDetent = 1 << 3,
13
16
  };
@@ -9,8 +9,8 @@
9
9
 
10
10
  #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
11
11
  #import <react/renderer/components/rnscreens/Props.h>
12
- #import <rnscreens/RNSSafeAreaViewComponentDescriptor.h>
13
- #import <rnscreens/RNSSafeAreaViewState.h>
12
+ #import <react/renderer/components/rnscreens/RNSSafeAreaViewComponentDescriptor.h>
13
+ #import <react/renderer/components/rnscreens/RNSSafeAreaViewState.h>
14
14
 
15
15
  namespace react = facebook::react;
16
16
 
@@ -0,0 +1,17 @@
1
+ #pragma once
2
+
3
+ #import "RNSReactBaseView.h"
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ /**
8
+ * Backing native view for the experimental, iOS-only `ScrollToTopGuard` component. It wraps its
9
+ * children and attaches an `RNSScrollToTopGuardGestureRecognizer` to itself on OS versions where
10
+ * the system "scroll to top" navigation-bar interaction exists (iPadOS 26+, iPhone iOS 27+), so
11
+ * that tapping the wrapped content does not scroll the underlying scroll view to top.
12
+ */
13
+ @interface RNSScrollToTopGuard : RNSReactBaseView
14
+
15
+ @end
16
+
17
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,57 @@
1
+ #import "RNSScrollToTopGuard.h"
2
+ #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
3
+ #import <react/renderer/components/rnscreens/EventEmitters.h>
4
+ #import <react/renderer/components/rnscreens/Props.h>
5
+ #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
6
+ #import "RNSDefines.h"
7
+ #import "RNSScrollToTopGuardGestureRecognizer.h"
8
+
9
+ namespace react = facebook::react;
10
+
11
+ @implementation RNSScrollToTopGuard
12
+
13
+ - (instancetype)initWithFrame:(CGRect)frame
14
+ {
15
+ if (self = [super initWithFrame:frame]) {
16
+ [self initState];
17
+ }
18
+ return self;
19
+ }
20
+
21
+ - (void)initState
22
+ {
23
+ static const auto defaultProps = std::make_shared<const react::RNSScrollToTopGuardProps>();
24
+ _props = defaultProps;
25
+
26
+ #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
27
+ // Attach the guard once on mount, only on OS versions where the system scroll-to-top
28
+ // interaction exists. On other versions this view is a plain passthrough.
29
+ if ([RNSScrollToTopGuardGestureRecognizer shouldGuardScrollToTop]) {
30
+ [RNSScrollToTopGuardGestureRecognizer applyToView:self];
31
+ }
32
+ #endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
33
+ }
34
+
35
+ + (react::ComponentDescriptorProvider)componentDescriptorProvider
36
+ {
37
+ return react::concreteComponentDescriptorProvider<react::RNSScrollToTopGuardComponentDescriptor>();
38
+ }
39
+
40
+ #pragma mark - Dynamic frameworks support
41
+
42
+ // Needed because of this: https://github.com/facebook/react-native/pull/37274
43
+ #ifdef RCT_DYNAMIC_FRAMEWORKS
44
+ + (void)load
45
+ {
46
+ [super load];
47
+ }
48
+ #endif // RCT_DYNAMIC_FRAMEWORKS
49
+
50
+ @end
51
+
52
+ #pragma mark - View class exposure
53
+
54
+ Class<RCTComponentViewProtocol> RNSScrollToTopGuardCls(void)
55
+ {
56
+ return RNSScrollToTopGuard.class;
57
+ }
@@ -0,0 +1,28 @@
1
+ #pragma once
2
+
3
+ #import <UIKit/UIKit.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ /**
8
+ * This gesture recognizer is necessary to handle views placed in the navigation bar area on OS
9
+ * versions where the system triggers "scroll to top" by tapping that area (iPadOS 26+ and iPhone
10
+ * iOS 27+). Otherwise, tapping such a view results in a scroll to top action even if there is a
11
+ * pressable inside it.
12
+ */
13
+ @interface RNSScrollToTopGuardGestureRecognizer : UITapGestureRecognizer <UIGestureRecognizerDelegate>
14
+
15
+ /**
16
+ * Returns YES on OS versions / device idioms where the system scroll-to-top-on-header interaction
17
+ * exists (iPad: iOS 26+, iPhone: iOS 27+); NO otherwise.
18
+ */
19
+ + (BOOL)shouldGuardScrollToTop;
20
+
21
+ /**
22
+ * Creates the scroll to top guard gesture recognizer and adds it to the given view.
23
+ */
24
+ + (void)applyToView:(UIView *)view;
25
+
26
+ @end
27
+
28
+ NS_ASSUME_NONNULL_END