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
@@ -161,6 +161,16 @@ class TabsHost(
161
161
  refreshLayout()
162
162
  }
163
163
 
164
+ // On window configuration changes ViewRootImpl calls forceLayout() recursively on every view
165
+ // in the hierarchy, bypassing requestLayout(). React views never lay out their children during
166
+ // framework traversals, so nothing would clear the force-layout flags in our subtree — and once
167
+ // they are set, any subsequent requestLayout() from a descendant short-circuits before reaching
168
+ // the override above, permanently disabling the manual pass. Schedule it from here as well.
169
+ override fun forceLayout() {
170
+ super.forceLayout()
171
+ refreshLayout()
172
+ }
173
+
164
174
  private fun forceSubtreeMeasureAndLayoutPass() {
165
175
  measure(
166
176
  MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
@@ -3,6 +3,9 @@ package com.swmansion.rnscreens.tabs.host
3
3
  import android.os.Build
4
4
  import android.view.MenuItem
5
5
  import android.view.View
6
+ import androidx.core.view.AccessibilityDelegateCompat
7
+ import androidx.core.view.ViewCompat
8
+ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
6
9
  import androidx.core.view.children
7
10
  import androidx.core.view.get
8
11
  import com.google.android.material.bottomnavigation.BottomNavigationView
@@ -23,8 +26,26 @@ class TabsHostA11yCoordinator(
23
26
  menuItem.contentDescription = tabsScreen.tabBarItemAccessibilityLabel
24
27
  }
25
28
 
26
- // when matching view by id, espresso driver seems to look for tag property
27
- findTabItemView(menuItem.itemId)?.tag = tabsScreen.tabBarItemTestID
29
+ findTabItemView(menuItem.itemId)?.let { tabItemView ->
30
+ // when matching view by id, espresso driver seems to look for tag property
31
+ tabItemView.tag = tabsScreen.tabBarItemTestID
32
+
33
+ // UiAutomator-based drivers (Maestro, Appium) read the node's viewIdResourceName instead,
34
+ // so expose the testID there as well — this is what React Native's ReactAccessibilityDelegate
35
+ // does for every other view. Read through to the screen so a prop update is reflected.
36
+ ViewCompat.setAccessibilityDelegate(
37
+ tabItemView,
38
+ object : AccessibilityDelegateCompat() {
39
+ override fun onInitializeAccessibilityNodeInfo(
40
+ host: View,
41
+ info: AccessibilityNodeInfoCompat,
42
+ ) {
43
+ super.onInitializeAccessibilityNodeInfo(host, info)
44
+ info.viewIdResourceName = tabsScreen.tabBarItemTestID
45
+ }
46
+ },
47
+ )
48
+ }
28
49
  }
29
50
 
30
51
  // Third-party SDKs can freely assign their own ids to id-less views in CustomBottomNavigationView's subtree and there is no way to
@@ -2,6 +2,8 @@ package com.swmansion.rnscreens.tabs.screen
2
2
 
3
3
  import android.content.res.Configuration
4
4
  import android.graphics.drawable.Drawable
5
+ import android.os.Parcelable
6
+ import android.util.SparseArray
5
7
  import android.view.ViewGroup
6
8
  import androidx.fragment.app.Fragment
7
9
  import com.facebook.react.uimanager.ThemedReactContext
@@ -127,6 +129,17 @@ class TabsScreen(
127
129
  b: Int,
128
130
  ) = Unit
129
131
 
132
+ override fun dispatchSaveInstanceState(container: SparseArray<Parcelable>) {
133
+ // Do nothing. React Native owns this view hierarchy and keeps it alive, so there is no
134
+ // need to serialize/deserialize native view state. View ids in this subtree are react
135
+ // tags, which are not stable identities - restoring state by id can apply state saved
136
+ // by one view type to a different one, crashing e.g. in CompoundButton (see #4523).
137
+ }
138
+
139
+ override fun dispatchRestoreInstanceState(container: SparseArray<Parcelable>) {
140
+ // Ignore restoring instance state too, as we are not saving anything anyways.
141
+ }
142
+
130
143
  internal fun setTabsScreenDelegate(delegate: TabsScreenDelegate?) {
131
144
  tabsScreenDelegate = WeakReference(delegate)
132
145
  }
@@ -176,6 +189,10 @@ class TabsScreen(
176
189
 
177
190
  override fun findContentScrollView(): ViewGroup? = containerItemSupport.findContentScrollView(this)
178
191
 
192
+ // TabsScreen has no `preventNativeDismiss` flag of its own - it only forwards
193
+ // the question to its nested container.
194
+ override fun wantsToPreventStackNativeDismiss(): ContainerItem? = resolveNestedContainer()?.wantsToPreventStackNativeDismiss()
195
+
179
196
  // endregion
180
197
 
181
198
  companion object {
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
6
6
  import android.view.View
7
7
  import android.view.ViewGroup
8
8
  import androidx.fragment.app.Fragment
9
+ import com.swmansion.rnscreens.helpers.ViewIdGenerator
9
10
 
10
11
  class TabsScreenFragment(
11
12
  internal val tabsScreen: TabsScreen,
@@ -13,6 +14,8 @@ class TabsScreenFragment(
13
14
  internal val requireScreenKey: String by tabsScreen::requireScreenKey
14
15
  internal val isPreventNativeSelectionEnabled: Boolean by tabsScreen::preventNativeSelection
15
16
 
17
+ internal val menuItemId: Int = ViewIdGenerator.generateViewId()
18
+
16
19
  override fun onCreateView(
17
20
  inflater: LayoutInflater,
18
21
  container: ViewGroup?,
@@ -49,6 +49,13 @@ internal fun dpToPx(
49
49
  */
50
50
  internal fun View.dpToPx(dp: Float): Float = dpToPx(dp, resources.displayMetrics.density)
51
51
 
52
+ /**
53
+ * Converts an SP value to pixels using the density of the display this [View] is
54
+ * attached to (including the current font scale). Uses the view's own resources
55
+ * rather than the process-global density read by [PixelUtil]. See [pxToDp].
56
+ */
57
+ internal fun View.spToPx(sp: Float): Float = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, resources.displayMetrics)
58
+
52
59
  internal fun resolveDimensionAttr(
53
60
  context: Context,
54
61
  attrId: Int,
@@ -0,0 +1,22 @@
1
+ package com.swmansion.rnscreens.utils
2
+
3
+ import android.content.Context
4
+ import android.util.TypedValue
5
+ import androidx.annotation.StyleRes
6
+
7
+ /**
8
+ * Resolves a theme attribute pointing at a style (e.g. `?attr/textAppearanceTitleLarge`)
9
+ * to its concrete style resource id. Used to recover Material's default text
10
+ * appearances so they can be re-applied at runtime.
11
+ */
12
+ @StyleRes
13
+ internal fun resolveStyleResAttr(
14
+ context: Context,
15
+ attr: Int,
16
+ ): Int {
17
+ val typedValue = TypedValue()
18
+ require(context.theme.resolveAttribute(attr, typedValue, true)) {
19
+ "[RNScreens] Unable to resolve Material theme style attribute."
20
+ }
21
+ return typedValue.resourceId
22
+ }
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <com.google.android.material.appbar.CollapsingToolbarLayout
3
+ xmlns:android="http://schemas.android.com/apk/res/android"
4
+ xmlns:app="http://schemas.android.com/apk/res-auto"
5
+ style="?attr/collapsingToolbarLayoutLargeStyle"
6
+ android:layout_width="match_parent"
7
+ android:layout_height="?attr/collapsingToolbarLayoutLargeSize"
8
+ app:collapsedTitleGravityMode="availableSpace" />
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <com.google.android.material.appbar.CollapsingToolbarLayout
3
+ xmlns:android="http://schemas.android.com/apk/res/android"
4
+ xmlns:app="http://schemas.android.com/apk/res-auto"
5
+ style="?attr/collapsingToolbarLayoutLargeStyle"
6
+ android:layout_width="match_parent"
7
+ android:layout_height="?attr/collapsingToolbarLayoutLargeSize"
8
+ app:collapsedTitleGravityMode="entireSpace" />
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <com.google.android.material.appbar.CollapsingToolbarLayout
3
+ xmlns:android="http://schemas.android.com/apk/res/android"
4
+ xmlns:app="http://schemas.android.com/apk/res-auto"
5
+ style="?attr/collapsingToolbarLayoutMediumStyle"
6
+ android:layout_width="match_parent"
7
+ android:layout_height="?attr/collapsingToolbarLayoutMediumSize"
8
+ app:collapsedTitleGravityMode="availableSpace" />
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <com.google.android.material.appbar.CollapsingToolbarLayout
3
+ xmlns:android="http://schemas.android.com/apk/res/android"
4
+ xmlns:app="http://schemas.android.com/apk/res-auto"
5
+ style="?attr/collapsingToolbarLayoutMediumStyle"
6
+ android:layout_width="match_parent"
7
+ android:layout_height="?attr/collapsingToolbarLayoutMediumSize"
8
+ app:collapsedTitleGravityMode="entireSpace" />
@@ -77,7 +77,11 @@ std::optional<float> findHeaderHeight(
77
77
  }
78
78
 
79
79
  jfloat headerHeight = env->CallFloatMethod(
80
- packageInstance, computeDummyLayoutID, fontSize, isTitleEmpty, applyTopInset);
80
+ packageInstance,
81
+ computeDummyLayoutID,
82
+ fontSize,
83
+ isTitleEmpty,
84
+ applyTopInset);
81
85
 
82
86
  return {headerHeight};
83
87
  }
@@ -103,10 +107,11 @@ void RNSScreenShadowNode::appendChild(
103
107
  headerConfigChild->getProps());
104
108
 
105
109
  // The native CustomToolbar only pads itself with the top inset when
106
- // `legacyTopInsetBehavior || consumeTopInset` holds (see CustomToolbar.kt).
107
- // The dummy measurement must mirror that condition, otherwise the header
108
- // height is over-reported by the top inset whenever a header opts out via
109
- // `disableTopInsetApplication` (consumeTopInset == false).
110
+ // `legacyTopInsetBehavior || consumeTopInset` holds (see
111
+ // CustomToolbar.kt). The dummy measurement must mirror that condition,
112
+ // otherwise the header height is over-reported by the top inset whenever
113
+ // a header opts out via `disableTopInsetApplication` (consumeTopInset ==
114
+ // false).
110
115
  const bool applyTopInset =
111
116
  headerProps.legacyTopInsetBehavior || headerProps.consumeTopInset;
112
117
 
@@ -1,12 +1,42 @@
1
1
  #include "RNSScreenRemovalListener.h"
2
2
  #include <react/renderer/mounting/ShadowViewMutation.h>
3
+ #include <utility>
3
4
  using namespace facebook::react;
4
5
 
6
+ uint64_t RNSScreenRemovalListener::setListener(
7
+ std::function<void(int)> &&listenerFunction) {
8
+ std::lock_guard<std::mutex> lock(listenerMutex_);
9
+ listenerFunction_ = std::move(listenerFunction);
10
+ return ++currentToken_;
11
+ }
12
+
13
+ void RNSScreenRemovalListener::clearListener(uint64_t token) {
14
+ std::lock_guard<std::mutex> lock(listenerMutex_);
15
+ if (token == currentToken_) {
16
+ listenerFunction_ = nullptr;
17
+ }
18
+ }
19
+
5
20
  std::optional<MountingTransaction> RNSScreenRemovalListener::pullTransaction(
6
21
  SurfaceId surfaceId,
7
22
  MountingTransaction::Number transactionNumber,
8
23
  const TransactionTelemetry &telemetry,
9
24
  ShadowViewMutationList mutations) const {
25
+ // Copy under the lock, invoke outside it: the callback makes a JNI call and
26
+ // must not run while holding a lock the module thread also takes.
27
+ std::function<void(int)> listener;
28
+ {
29
+ std::lock_guard<std::mutex> lock(listenerMutex_);
30
+ listener = listenerFunction_;
31
+ }
32
+
33
+ if (!listener) {
34
+ // Orphaned between module teardown and the next install: pass the
35
+ // transaction through untouched.
36
+ return MountingTransaction{
37
+ surfaceId, transactionNumber, std::move(mutations), telemetry};
38
+ }
39
+
10
40
  for (const ShadowViewMutation &mutation : mutations) {
11
41
  // When using RNSModalScreen on Android it should be added here.
12
42
  if (mutation.type == ShadowViewMutation::Type::Remove &&
@@ -16,7 +46,7 @@ std::optional<MountingTransaction> RNSScreenRemovalListener::pullTransaction(
16
46
  // We call the listener function even if this screen has not been owned
17
47
  // by RNSScreenStack as since RN 0.78 we do not have enough information
18
48
  // here. This final filter is applied later in NativeProxy.
19
- listenerFunction_(mutation.oldChildShadowView.tag);
49
+ listener(mutation.oldChildShadowView.tag);
20
50
  }
21
51
  }
22
52
 
@@ -4,12 +4,22 @@
4
4
  #include <react/renderer/mounting/MountingOverrideDelegate.h>
5
5
  #include <react/renderer/mounting/ShadowView.h>
6
6
 
7
+ #include <cstdint>
8
+ #include <functional>
9
+ #include <mutex>
10
+
7
11
  using namespace facebook::react;
8
12
 
9
13
  struct RNSScreenRemovalListener : public MountingOverrideDelegate {
10
- std::function<void(int)> listenerFunction_;
11
- RNSScreenRemovalListener(std::function<void(int)> &&listenerFunction_)
12
- : listenerFunction_(std::move(listenerFunction_)) {}
14
+ RNSScreenRemovalListener() = default;
15
+
16
+ // RN core lacks a `removeMountingOverrideDelegate` API, so this instance is
17
+ // process-immortal and swaps its callback instead of being replaced. The
18
+ // ownership token keeps a stale proxy's teardown from clearing a newer
19
+ // proxy's listener.
20
+ // See https://github.com/software-mansion/react-native-screens/pull/4413
21
+ uint64_t setListener(std::function<void(int)> &&listenerFunction);
22
+ void clearListener(uint64_t token);
13
23
 
14
24
  bool shouldOverridePullTransaction() const override;
15
25
  std::optional<MountingTransaction> pullTransaction(
@@ -17,4 +27,9 @@ struct RNSScreenRemovalListener : public MountingOverrideDelegate {
17
27
  MountingTransaction::Number number,
18
28
  const TransactionTelemetry &telemetry,
19
29
  ShadowViewMutationList mutations) const override;
30
+
31
+ private:
32
+ mutable std::mutex listenerMutex_;
33
+ std::function<void(int)> listenerFunction_;
34
+ uint64_t currentToken_{0};
20
35
  };
package/ios/RNSEnums.h CHANGED
@@ -1,5 +1,7 @@
1
1
  #pragma once
2
2
 
3
+ #import <UIKit/UIKit.h>
4
+
3
5
  typedef NS_ENUM(NSInteger, RNSScrollEdgeEffect) {
4
6
  RNSScrollEdgeEffectAutomatic,
5
7
  RNSScrollEdgeEffectHard,
@@ -54,8 +56,6 @@ typedef NS_ENUM(NSInteger, RNSTabsIconType) {
54
56
  RNSTabsIconTypeXcasset,
55
57
  };
56
58
 
57
- // TODO: investigate objc - swift interop and deduplicate this code
58
- // This enum needs to be compatible with the RNSOrientationSwift enum.
59
59
  typedef NS_ENUM(NSInteger, RNSOrientation) {
60
60
  RNSOrientationInherit,
61
61
  RNSOrientationAll,
@@ -4,8 +4,6 @@
4
4
 
5
5
  NS_ASSUME_NONNULL_BEGIN
6
6
 
7
- // TODO: investigate objc - swift interop and deduplicate this code
8
- // This class needs to be compatible with the RNSOrientationProvidingSwift.
9
7
  @protocol RNSOrientationProviding
10
8
 
11
9
  - (RNSOrientation)evaluateOrientation;
@@ -0,0 +1,15 @@
1
+ #pragma once
2
+
3
+ #import <Foundation/Foundation.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ @protocol RNSReactMountingTransactionObserving
8
+
9
+ - (void)reactMountingTransactionWillMount;
10
+
11
+ - (void)reactMountingTransactionDidMount;
12
+
13
+ @end
14
+
15
+ NS_ASSUME_NONNULL_END
@@ -1,125 +1,24 @@
1
1
  #pragma once
2
2
 
3
3
  #if defined(__cplusplus)
4
- #import <React/RCTImageSource.h>
5
- #import <react/renderer/components/rnscreens/EventEmitters.h>
6
- #import <react/renderer/components/rnscreens/Props.h>
7
- #import <optional>
8
- #import "RNSDefines.h"
9
- #import "RNSEnums.h"
10
- #import "RNSTabsNavigationState.h"
11
-
4
+ #import <UIKit/UIKit.h>
12
5
  #import <folly/dynamic.h>
6
+ #import "RNSEnums.h"
13
7
 
14
8
  namespace rnscreens::conversion {
15
9
 
16
- namespace react = facebook::react;
17
-
18
10
  // copied from FollyConvert.mm
19
11
  id RNSConvertFollyDynamicToId(const folly::dynamic &dyn);
20
12
 
21
- std::optional<UIBlurEffectStyle> RNSMaybeUIBlurEffectStyleFromString(NSString *blurEffectString);
22
-
23
- UIBlurEffect *RNSUIBlurEffectFromString(NSString *blurEffectString);
24
-
25
- std::optional<UIBlurEffectStyle> RNSMaybeUIBlurEffectStyleFromRNSBlurEffectStyle(RNSBlurEffectStyle blurEffect);
26
-
27
- UIBlurEffect *RNSUIBlurEffectFromRNSBlurEffectStyle(RNSBlurEffectStyle blurEffect);
28
-
29
- #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
30
-
31
- API_AVAILABLE(ios(26.0))
32
- UITabBarMinimizeBehavior UITabBarMinimizeBehaviorFromRNSTabsHostTabBarMinimizeBehavior(
33
- react::RNSTabsHostIOSTabBarMinimizeBehavior tabBarMinimizeBehavior);
34
-
35
- #endif // Check for iOS >= 26
36
-
37
- #if RNS_IPHONE_OS_VERSION_AVAILABLE(18_0)
38
-
39
- API_AVAILABLE(ios(18.0))
40
- UITabBarControllerMode UITabBarControllerModeFromRNSTabsHostTabBarControllerMode(
41
- react::RNSTabsHostIOSTabBarControllerMode tabBarControllerMode);
42
-
43
- #endif // Check for iOS >= 18
44
-
45
- react::RNSTabsHostIOSEventEmitter::OnTabSelectionRejectedRejectionReason
46
- RNSOnTabSelectionRejectedRejectionReasonFromRNSTabsNavigationStateRejectionReason(
47
- RNSTabsNavigationStateRejectionReason reason);
48
-
49
- react::RNSTabsHostIOSEventEmitter::OnTabSelectedActionOrigin RNSOnTabSelectedActionOriginFromRNSTabsActionOrigin(
50
- RNSTabsActionOrigin actionOrigin);
51
-
52
- RNSTabsIconType RNSTabsIconTypeFromIcon(react::RNSTabsScreenIOSIconType iconType);
53
-
54
- RNSTabsScreenSystemItem RNSTabsScreenSystemItemFromReactRNSTabsScreenSystemItem(
55
- react::RNSTabsScreenIOSSystemItem systemItem);
56
-
57
- UITabBarSystemItem RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSystemItem systemItem);
58
-
59
- #if RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
60
-
61
- API_AVAILABLE(ios(26.0))
62
- std::optional<react::RNSTabsBottomAccessoryEventEmitter::OnEnvironmentChangeEnvironment>
63
- RNSTabsBottomAccessoryOnEnvironmentChangePayloadFromUITabAccessoryEnvironment(UITabAccessoryEnvironment environment);
64
-
65
- RNSTabsBottomAccessoryEnvironment RNSTabsBottomAccessoryEnvironmentFromCppEquivalent(
66
- react::RNSTabsBottomAccessoryContentEnvironment environment);
67
-
68
- #endif // RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
69
-
70
- UIUserInterfaceStyle UIUserInterfaceStyleFromTabsScreenCppEquivalent(
71
- react::RNSTabsScreenIOSUserInterfaceStyle userInterfaceStyle);
72
-
73
- RCTImageSource *RCTImageSourceFromImageSourceAndIconType(const facebook::react::ImageSource *imageSource,
74
- RNSTabsIconType iconType);
75
-
76
- RNSOrientation RNSOrientationFromRNSTabsScreenOrientation(react::RNSTabsScreenIOSOrientation orientation);
77
-
78
13
  #if !TARGET_OS_TV
79
- UIInterfaceOrientationMask UIInterfaceOrientationMaskFromRNSOrientation(RNSOrientation orientation);
14
+ UIInterfaceOrientationMask UIInterfaceOrientationMaskFromRNSOrientation(
15
+ RNSOrientation orientation);
80
16
 
81
- RNSOrientation RNSOrientationFromUIInterfaceOrientationMask(UIInterfaceOrientationMask orientationMask);
17
+ // Currently unused in stack v5. Maybe remove after stopping support for v4.
18
+ RNSOrientation RNSOrientationFromUIInterfaceOrientationMask(
19
+ UIInterfaceOrientationMask orientationMask);
82
20
  #endif // !TARGET_OS_TV
83
21
 
84
- UITraitEnvironmentLayoutDirection UITraitEnvironmentLayoutDirectionFromTabsHostCppEquivalent(
85
- react::RNSTabsHostIOSLayoutDirection layoutDirection);
86
-
87
- UIUserInterfaceStyle UIUserInterfaceStyleFromHostProp(react::RNSTabsHostIOSColorScheme colorScheme);
88
-
89
- #pragma mark SplitHost props
90
-
91
- UISplitViewControllerSplitBehavior SplitViewPreferredSplitBehaviorFromHostProp(
92
- react::RNSSplitHostPreferredSplitBehavior behavior);
93
-
94
- UISplitViewControllerPrimaryEdge SplitViewPrimaryEdgeFromHostProp(react::RNSSplitHostPrimaryEdge primaryEdge);
95
-
96
- UISplitViewControllerDisplayMode SplitViewPreferredDisplayModeFromHostProp(
97
- react::RNSSplitHostPreferredDisplayMode displayMode);
98
-
99
- #if !TARGET_OS_TV
100
- UISplitViewControllerBackgroundStyle SplitViewPrimaryBackgroundStyleFromHostProp(
101
- react::RNSSplitHostPrimaryBackgroundStyle primaryBackgroundStyle);
102
- #endif // !TARGET_OS_TV
103
-
104
- UISplitViewControllerDisplayModeButtonVisibility SplitViewDisplayModeButtonVisibilityFromHostProp(
105
- react::RNSSplitHostDisplayModeButtonVisibility displayModeButtonVisibility);
106
-
107
- std::string UISplitViewControllerDisplayModeToString(UISplitViewControllerDisplayMode displayMode);
108
-
109
- std::optional<UISplitViewControllerColumn> SplitViewTopColumnForCollapsingFromHostProp(
110
- react::RNSSplitHostTopColumnForCollapsing topColumnForCollapsing);
111
-
112
- RNSOrientation RNSOrientationFromRNSSplitHostOrientation(react::RNSSplitHostOrientation orientation);
113
-
114
- UIUserInterfaceStyle UIUserInterfaceStyleFromHostProp(react::RNSSplitHostColorScheme colorScheme);
115
-
116
- #pragma mark SplitScreen props
117
-
118
- RNSSplitScreenColumnType RNSSplitScreenColumnTypeFromScreenProp(react::RNSSplitScreenColumnType columnType);
119
-
120
22
  }; // namespace rnscreens::conversion
121
23
 
122
- #import "RNSConversions-ScrollViewMarker.h"
123
- #import "RNSConversions-Stack.h"
124
-
125
24
  #endif // defined(__cplusplus)
@@ -188,11 +188,18 @@ static UIMenuOptions RNSMakeUIMenuOptionsFromConfig(NSDictionary *config);
188
188
  image = img;
189
189
  }];
190
190
 
191
- return [UIMenu menuWithTitle:dict[@"title"]
192
- image:image
193
- identifier:nil
194
- options:RNSMakeUIMenuOptionsFromConfig(dict)
195
- children:elements];
191
+ UIMenu *menu = [UIMenu menuWithTitle:dict[@"title"]
192
+ image:image
193
+ identifier:nil
194
+ options:RNSMakeUIMenuOptionsFromConfig(dict)
195
+ children:elements];
196
+
197
+ NSString *subtitle = dict[@"subtitle"];
198
+ if (subtitle != nil) {
199
+ menu.subtitle = subtitle;
200
+ }
201
+
202
+ return menu;
196
203
  }
197
204
 
198
205
  + (UIAction *)createActionItemFromConfig:(NSDictionary *)dict
@@ -9,7 +9,7 @@
9
9
  #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
10
10
  #import <react/renderer/components/rnscreens/Props.h>
11
11
  #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
12
- #import <rnscreens/RNSFullWindowOverlayComponentDescriptor.h>
12
+ #import <react/renderer/components/rnscreens/legacy/RNSFullWindowOverlayComponentDescriptor.h>
13
13
 
14
14
  @implementation RNSFullWindowOverlayContainer
15
15
 
@@ -1,7 +1,7 @@
1
1
  #import "RNSModalScreen.h"
2
2
 
3
3
  #import <React/RCTFabricComponentsPlugins.h>
4
- #import <rnscreens/RNSModalScreenComponentDescriptor.h>
4
+ #import <react/renderer/components/rnscreens/legacy/RNSModalScreenComponentDescriptor.h>
5
5
 
6
6
  @implementation RNSModalScreen
7
7
 
@@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN
50
50
  - (void)calculateAndNotifyHeaderHeightChangeIsModal:(BOOL)isModal;
51
51
  - (void)notifyFinishTransitioning;
52
52
  - (RNSScreenView *)screenView;
53
- - (void)setViewToSnapshot;
53
+ - (void)addSnapshotToView;
54
54
  - (CGFloat)calculateHeaderHeightIsModal:(BOOL)isModal;
55
55
  - (BOOL)isRemovedFromParent;
56
56
  - (void)notifyPresentedControllerDismissed;
@@ -87,9 +87,16 @@ NS_ASSUME_NONNULL_BEGIN
87
87
  @property (nonatomic) RNSScrollEdgeEffect rightScrollEdgeEffect;
88
88
  @property (nonatomic) RNSScrollEdgeEffect topScrollEdgeEffect;
89
89
  @property (nonatomic, readwrite) BOOL synchronousShadowStateUpdatesEnabled;
90
+ @property (nonatomic, readwrite) BOOL iosOrientationInheritanceFixEnabled;
90
91
 
91
92
  @property (nonatomic, retain) NSNumber *transitionDuration;
92
93
  @property (nonatomic, readonly) BOOL dismissed;
94
+
95
+ /**
96
+ * Whether React has already deleted this component. The view may still be part of the view
97
+ * hierarchy at that point, backing the remainder of an ongoing native transition.
98
+ */
99
+ @property (nonatomic, readonly, getter=isInvalidated) BOOL invalidated;
93
100
  @property (nonatomic) BOOL hideKeyboardOnSwipe;
94
101
  @property (nonatomic) BOOL customAnimationOnSwipe;
95
102
  @property (nonatomic) BOOL preventNativeDismiss;