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

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 (436) hide show
  1. package/README.md +1 -2
  2. package/RNScreens.podspec +2 -6
  3. package/android/build.gradle +26 -1
  4. package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +5 -0
  5. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
  6. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +22 -6
  7. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackFragment.kt +39 -10
  8. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenViewManager.kt +5 -0
  9. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAppearanceCoordinator.kt → native/coordinator/FormSheetAppearanceCoordinator.kt} +2 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetBehaviorController.kt → native/coordinator/FormSheetBehaviorController.kt} +25 -1
  11. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDimensionsCoordinator.kt → native/coordinator/FormSheetDimensionsCoordinator.kt} +4 -1
  12. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +50 -0
  13. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContainer.kt → native/core/FormSheetContainer.kt} +1 -1
  14. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialog.kt → native/core/FormSheetDialog.kt} +24 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogManager.kt → native/core/FormSheetDialogManager.kt} +25 -1
  16. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeDelegate.kt → native/interfaces/FormSheetContentSizeChangeDelegate.kt} +1 -1
  17. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeProvider.kt → native/interfaces/FormSheetContentSizeChangeProvider.kt} +1 -1
  18. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogEventEmitter.kt → native/interfaces/FormSheetDialogEventEmitter.kt} +3 -1
  19. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetConfig.kt → native/model/FormSheetConfig.kt} +5 -1
  20. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetents.kt → native/model/FormSheetDetents.kt} +1 -1
  21. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAnimatorFactory.kt → native/presentation/FormSheetAnimatorFactory.kt} +1 -1
  22. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationManager.kt → native/presentation/FormSheetPresentationManager.kt} +3 -12
  23. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationState.kt → native/presentation/FormSheetPresentationState.kt} +1 -1
  24. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapper.kt → react/contentwrapper/FormSheetContentWrapper.kt} +3 -1
  25. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapperViewManager.kt → react/contentwrapper/FormSheetContentWrapperViewManager.kt} +1 -1
  26. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetentChangedEvent.kt → react/event/FormSheetDetentChangedEvent.kt} +1 -1
  27. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidAppearEvent.kt → react/event/FormSheetDidAppearEvent.kt} +1 -1
  28. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidDisappearEvent.kt → react/event/FormSheetDidDisappearEvent.kt} +1 -1
  29. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetNativeDismissEvent.kt → react/event/FormSheetNativeDismissEvent.kt} +1 -1
  30. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetNativeDismissPreventedEvent.kt +29 -0
  31. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetSyncFlushEvent.kt → react/event/FormSheetSyncFlushEvent.kt} +1 -1
  32. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillAppearEvent.kt → react/event/FormSheetWillAppearEvent.kt} +1 -1
  33. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillDisappearEvent.kt → react/event/FormSheetWillDisappearEvent.kt} +1 -1
  34. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentView.kt → react/host/FormSheetContentView.kt} +3 -1
  35. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHost.kt → react/host/FormSheetHost.kt} +6 -1
  36. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostEventEmitter.kt → react/host/FormSheetHostEventEmitter.kt} +16 -1
  37. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostViewManager.kt → react/host/FormSheetHostViewManager.kt} +11 -2
  38. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +30 -418
  39. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +36 -113
  40. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderFrameSynchronizer.kt +63 -0
  41. package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayout.kt → appbar/StackHeaderAppBarLayout.kt} +1 -6
  42. package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayoutBehavior.kt → appbar/StackHeaderAppBarLayoutBehavior.kt} +1 -1
  43. package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderScrollingViewBehavior.kt → appbar/StackHeaderScrollingViewBehavior.kt} +1 -1
  44. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +28 -6
  45. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +8 -1
  46. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +1 -1
  47. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +2 -1
  48. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +2 -1
  49. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +448 -0
  50. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +17 -3
  51. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +83 -0
  52. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuConfig.kt → model/StackHeaderToolbarMenuConfig.kt} +1 -1
  53. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementConfig.kt → model/StackHeaderToolbarMenuElementConfig.kt} +1 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupConfig.kt → model/StackHeaderToolbarMenuGroupConfig.kt} +1 -1
  55. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupMetadata.kt → model/StackHeaderToolbarMenuGroupMetadata.kt} +5 -1
  56. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemConfig.kt → model/StackHeaderToolbarMenuItemConfig.kt} +1 -1
  57. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemDefaults.kt → model/StackHeaderToolbarMenuItemDefaults.kt} +1 -1
  58. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemIconSource.kt → model/StackHeaderToolbarMenuItemIconSource.kt} +1 -1
  59. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemShowAsAction.kt → model/StackHeaderToolbarMenuItemShowAsAction.kt} +1 -1
  60. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemType.kt → model/StackHeaderToolbarMenuItemType.kt} +1 -1
  61. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarFieldUpdate.kt → update/StackHeaderToolbarFieldUpdate.kt} +1 -1
  62. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementOptions.kt → update/StackHeaderToolbarMenuElementOptions.kt} +2 -1
  63. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +13 -0
  64. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +10 -0
  65. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +17 -0
  66. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuUpdateQueue.kt → update/StackHeaderToolbarMenuUpdateQueue.kt} +1 -43
  67. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueueDelegate.kt +9 -0
  68. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +1 -0
  69. package/common/cpp/react/renderer/components/rnscreens/legacy/RNSScreenShadowNode.cpp +10 -5
  70. package/ios/RNSEnums.h +0 -2
  71. package/ios/RNSOrientationProviding.h +0 -2
  72. package/ios/RNSReactMountingTransactionObserving.h +15 -0
  73. package/ios/legacy/RNSBarButtonItem.mm +12 -5
  74. package/ios/legacy/RNSScreen.h +8 -1
  75. package/ios/legacy/RNSScreen.mm +39 -17
  76. package/ios/legacy/RNSScreenContentWrapper.mm +9 -0
  77. package/ios/legacy/RNSScreenFooter.mm +2 -0
  78. package/ios/legacy/RNSScreenStack.mm +9 -4
  79. package/ios/modals/form-sheet/RNSFormSheetContentWrapperComponentView.mm +9 -0
  80. package/ios/scroll-to-top-guard/RNSScrollToTopGuard.h +17 -0
  81. package/ios/scroll-to-top-guard/RNSScrollToTopGuard.mm +57 -0
  82. package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.h +28 -0
  83. package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.mm +64 -0
  84. package/ios/split/RNSSplitAppearanceApplicator.h +36 -0
  85. package/ios/split/RNSSplitAppearanceApplicator.mm +185 -0
  86. package/ios/split/RNSSplitAppearanceCoordinator.h +26 -0
  87. package/ios/split/RNSSplitAppearanceCoordinator.mm +27 -0
  88. package/ios/split/RNSSplitAppearanceUpdateFlags.h +14 -0
  89. package/ios/split/RNSSplitHostComponentView.mm +1 -1
  90. package/ios/split/RNSSplitHostController.h +86 -0
  91. package/ios/split/RNSSplitHostController.mm +560 -0
  92. package/ios/split/RNSSplitNavigationController.h +31 -0
  93. package/ios/split/RNSSplitNavigationController.mm +44 -0
  94. package/ios/split/RNSSplitNavigationControllerFrameObserver.h +32 -0
  95. package/ios/split/RNSSplitNavigationControllerFrameObserver.mm +80 -0
  96. package/ios/split/RNSSplitNavigationControllerFrameOriginChangeDelegate.h +15 -0
  97. package/ios/split/RNSSplitScreenComponentView.mm +8 -9
  98. package/ios/split/RNSSplitScreenController.h +45 -0
  99. package/ios/split/RNSSplitScreenController.mm +130 -0
  100. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +1 -0
  101. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +47 -9
  102. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +3 -0
  103. package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +9 -0
  104. package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +15 -0
  105. package/ios/stack/header/RNSStackHeaderMenuFinder.h +18 -3
  106. package/ios/stack/header/RNSStackHeaderMenuFinder.mm +21 -3
  107. package/ios/stack/host/RNSStackHostComponentView.mm +3 -1
  108. package/ios/stack/host/RNSStackNavigationController.mm +1 -1
  109. package/ios/stack/screen/RNSStackScreenComponentView.mm +0 -2
  110. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +6 -1
  111. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +61 -12
  112. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +3 -0
  113. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +4 -1
  114. package/ios/tabs/host/RNSTabBarController.h +5 -12
  115. package/ios/tabs/host/RNSTabBarController.mm +1 -1
  116. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +25 -0
  117. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
  118. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js +24 -0
  119. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
  120. package/lib/commonjs/components/scroll-to-top-guard/index.js +13 -0
  121. package/lib/commonjs/components/scroll-to-top-guard/index.js.map +1 -0
  122. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +11 -12
  123. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  124. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
  125. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  126. package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js +33 -2
  127. package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js.map +1 -1
  128. package/lib/commonjs/components/stack/header/utils.js +6 -9
  129. package/lib/commonjs/components/stack/header/utils.js.map +1 -1
  130. package/lib/commonjs/experimental/index.js +11 -0
  131. package/lib/commonjs/experimental/index.js.map +1 -1
  132. package/lib/commonjs/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
  133. package/lib/commonjs/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
  134. package/lib/commonjs/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
  135. package/lib/commonjs/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
  136. package/lib/commonjs/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
  137. package/lib/commonjs/fabric/legacy/ScreenNativeComponent.js.map +1 -1
  138. package/lib/commonjs/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  139. package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  140. package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  141. package/lib/commonjs/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
  142. package/lib/commonjs/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
  143. package/lib/commonjs/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
  144. package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +12 -0
  145. package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
  146. package/lib/commonjs/fabric/split/SplitHostNativeComponent.js.map +1 -1
  147. package/lib/commonjs/fabric/split/SplitScreenNativeComponent.js.map +1 -1
  148. package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  149. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  150. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  151. package/lib/commonjs/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
  152. package/lib/commonjs/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
  153. package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
  154. package/lib/commonjs/fabric/stack/StackScreenNativeComponent.js.map +1 -1
  155. package/lib/commonjs/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
  156. package/lib/commonjs/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
  157. package/lib/commonjs/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
  158. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  159. package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  160. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  161. package/lib/commonjs/flags.js +22 -1
  162. package/lib/commonjs/flags.js.map +1 -1
  163. package/lib/commonjs/legacy/components/Screen.js +6 -1
  164. package/lib/commonjs/legacy/components/Screen.js.map +1 -1
  165. package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js +5 -0
  166. package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
  167. package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
  168. package/lib/commonjs/legacy/components/SearchBar.js +16 -16
  169. package/lib/commonjs/legacy/components/SearchBar.js.map +1 -1
  170. package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js +3 -0
  171. package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
  172. package/lib/commonjs/legacy/gesture-handler/fabricUtils.js.map +1 -1
  173. package/lib/commonjs/legacy/useTransitionProgress.js.map +1 -1
  174. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +20 -0
  175. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
  176. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js +18 -0
  177. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
  178. package/lib/module/components/scroll-to-top-guard/index.js +2 -0
  179. package/lib/module/components/scroll-to-top-guard/index.js.map +1 -0
  180. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +14 -15
  181. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  182. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
  183. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  184. package/lib/module/components/stack/header/ios/iconUtils.ios.js +31 -2
  185. package/lib/module/components/stack/header/ios/iconUtils.ios.js.map +1 -1
  186. package/lib/module/components/stack/header/utils.js +5 -8
  187. package/lib/module/components/stack/header/utils.js.map +1 -1
  188. package/lib/module/experimental/index.js +1 -0
  189. package/lib/module/experimental/index.js.map +1 -1
  190. package/lib/module/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
  191. package/lib/module/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
  192. package/lib/module/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
  193. package/lib/module/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
  194. package/lib/module/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
  195. package/lib/module/fabric/legacy/ScreenNativeComponent.js.map +1 -1
  196. package/lib/module/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  197. package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  198. package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  199. package/lib/module/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
  200. package/lib/module/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
  201. package/lib/module/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
  202. package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +7 -0
  203. package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
  204. package/lib/module/fabric/split/SplitHostNativeComponent.js.map +1 -1
  205. package/lib/module/fabric/split/SplitScreenNativeComponent.js.map +1 -1
  206. package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  207. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  208. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  209. package/lib/module/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
  210. package/lib/module/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
  211. package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
  212. package/lib/module/fabric/stack/StackScreenNativeComponent.js.map +1 -1
  213. package/lib/module/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
  214. package/lib/module/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
  215. package/lib/module/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
  216. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  217. package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  218. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  219. package/lib/module/flags.js +22 -1
  220. package/lib/module/flags.js.map +1 -1
  221. package/lib/module/legacy/components/Screen.js +6 -1
  222. package/lib/module/legacy/components/Screen.js.map +1 -1
  223. package/lib/module/legacy/components/ScreenStackHeaderConfig.js +5 -0
  224. package/lib/module/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
  225. package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
  226. package/lib/module/legacy/components/SearchBar.js +17 -17
  227. package/lib/module/legacy/components/SearchBar.js.map +1 -1
  228. package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js +4 -0
  229. package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
  230. package/lib/module/legacy/gesture-handler/fabricUtils.js.map +1 -1
  231. package/lib/module/legacy/useTransitionProgress.js.map +1 -1
  232. package/lib/module/private/hooks/useRenderDebugInfo.js.map +1 -1
  233. package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +2 -2
  234. package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts +5 -2
  235. package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts.map +1 -1
  236. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts +15 -0
  237. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts.map +1 -0
  238. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts +12 -0
  239. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts.map +1 -0
  240. package/lib/typescript/components/scroll-to-top-guard/index.d.ts +2 -0
  241. package/lib/typescript/components/scroll-to-top-guard/index.d.ts.map +1 -0
  242. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +24 -0
  243. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  244. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  245. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +13 -0
  246. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  247. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +5 -2
  248. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +1 -1
  249. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
  250. package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts +3 -0
  251. package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts.map +1 -1
  252. package/lib/typescript/components/stack/header/utils.d.ts +1 -2
  253. package/lib/typescript/components/stack/header/utils.d.ts.map +1 -1
  254. package/lib/typescript/components/stack/host/StackHost.types.d.ts +2 -2
  255. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  256. package/lib/typescript/components/stack/host/StackHost.web.d.ts +6 -2
  257. package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
  258. package/lib/typescript/components/stack/screen/StackScreen.web.d.ts +5 -2
  259. package/lib/typescript/components/stack/screen/StackScreen.web.d.ts.map +1 -1
  260. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +5 -2
  261. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +1 -1
  262. package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts +7 -3
  263. package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts.map +1 -1
  264. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +5 -2
  265. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +1 -1
  266. package/lib/typescript/experimental/index.d.ts +1 -0
  267. package/lib/typescript/experimental/index.d.ts.map +1 -1
  268. package/lib/typescript/fabric/NativeScreensModule.d.ts +1 -1
  269. package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts +2 -2
  270. package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts.map +1 -1
  271. package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts +2 -2
  272. package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts.map +1 -1
  273. package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts +3 -2
  274. package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts.map +1 -1
  275. package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts +2 -2
  276. package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts.map +1 -1
  277. package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts +2 -2
  278. package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts.map +1 -1
  279. package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts +2 -2
  280. package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts.map +1 -1
  281. package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts +3 -2
  282. package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts.map +1 -1
  283. package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts +2 -2
  284. package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts.map +1 -1
  285. package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts +3 -3
  286. package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
  287. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
  288. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
  289. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +2 -2
  290. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
  291. package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts +6 -6
  292. package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts.map +1 -1
  293. package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts +2 -2
  294. package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts.map +1 -1
  295. package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts +2 -2
  296. package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts.map +1 -1
  297. package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts +2 -2
  298. package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts.map +1 -1
  299. package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts +6 -0
  300. package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts.map +1 -0
  301. package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts +1 -1
  302. package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts.map +1 -1
  303. package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts +2 -2
  304. package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts.map +1 -1
  305. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +1 -0
  306. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
  307. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +2 -1
  308. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  309. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +2 -2
  310. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  311. package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts +2 -2
  312. package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts.map +1 -1
  313. package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts +2 -2
  314. package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts.map +1 -1
  315. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +2 -2
  316. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
  317. package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts +2 -2
  318. package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts.map +1 -1
  319. package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts +2 -2
  320. package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts.map +1 -1
  321. package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts +2 -2
  322. package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts.map +1 -1
  323. package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts +2 -2
  324. package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts.map +1 -1
  325. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +2 -2
  326. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  327. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +2 -2
  328. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
  329. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +2 -2
  330. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
  331. package/lib/typescript/flags.d.ts +13 -0
  332. package/lib/typescript/flags.d.ts.map +1 -1
  333. package/lib/typescript/legacy/TransitionProgressContext.d.ts +1 -1
  334. package/lib/typescript/legacy/TransitionProgressContext.d.ts.map +1 -1
  335. package/lib/typescript/legacy/components/Screen.d.ts +5 -3
  336. package/lib/typescript/legacy/components/Screen.d.ts.map +1 -1
  337. package/lib/typescript/legacy/components/Screen.web.d.ts +10 -2
  338. package/lib/typescript/legacy/components/Screen.web.d.ts.map +1 -1
  339. package/lib/typescript/legacy/components/ScreenContainer.web.d.ts +5 -2
  340. package/lib/typescript/legacy/components/ScreenContainer.web.d.ts.map +1 -1
  341. package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts +5 -2
  342. package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts.map +1 -1
  343. package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts +5 -2
  344. package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts.map +1 -1
  345. package/lib/typescript/legacy/components/ScreenFooter.web.d.ts +10 -3
  346. package/lib/typescript/legacy/components/ScreenFooter.web.d.ts.map +1 -1
  347. package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts +10 -3
  348. package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts.map +1 -1
  349. package/lib/typescript/legacy/components/ScreenStack.web.d.ts +5 -2
  350. package/lib/typescript/legacy/components/ScreenStack.web.d.ts.map +1 -1
  351. package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts +3 -1
  352. package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts.map +1 -1
  353. package/lib/typescript/legacy/components/ScreenStackItem.d.ts +3 -2
  354. package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
  355. package/lib/typescript/legacy/components/SearchBar.d.ts +3 -3
  356. package/lib/typescript/legacy/components/SearchBar.d.ts.map +1 -1
  357. package/lib/typescript/legacy/components/SearchBar.web.d.ts +5 -2
  358. package/lib/typescript/legacy/components/SearchBar.web.d.ts.map +1 -1
  359. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +15 -12
  360. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
  361. package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts +3 -2
  362. package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts.map +1 -1
  363. package/lib/typescript/legacy/types.d.ts +25 -5
  364. package/lib/typescript/legacy/types.d.ts.map +1 -1
  365. package/lib/typescript/legacy/useTransitionProgress.d.ts +2 -5
  366. package/lib/typescript/legacy/useTransitionProgress.d.ts.map +1 -1
  367. package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts +2 -2
  368. package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts.map +1 -1
  369. package/package.json +17 -17
  370. package/src/components/modals/form-sheet/FormSheet.types.ts +2 -2
  371. package/src/components/scroll-to-top-guard/ScrollToTopGuard.ios.tsx +17 -0
  372. package/src/components/scroll-to-top-guard/ScrollToTopGuard.tsx +18 -0
  373. package/src/components/scroll-to-top-guard/index.ts +1 -0
  374. package/src/components/stack/header/StackHeaderConfig.android.types.ts +24 -0
  375. package/src/components/stack/header/StackHeaderConfig.ios.tsx +32 -22
  376. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +13 -0
  377. package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +1 -23
  378. package/src/components/stack/header/ios/iconUtils.ios.ts +38 -2
  379. package/src/components/stack/header/utils.ts +6 -11
  380. package/src/components/stack/host/StackHost.types.ts +2 -4
  381. package/src/components/tabs/screen/TabsScreen.types.ts +7 -3
  382. package/src/experimental/index.ts +1 -0
  383. package/src/fabric/ScrollViewMarkerNativeComponent.ts +8 -2
  384. package/src/fabric/legacy/FullWindowOverlayNativeComponent.ts +6 -2
  385. package/src/fabric/legacy/ModalScreenNativeComponent.ts +8 -2
  386. package/src/fabric/legacy/ScreenContainerNativeComponent.ts +5 -2
  387. package/src/fabric/legacy/ScreenContentWrapperNativeComponent.ts +2 -2
  388. package/src/fabric/legacy/ScreenFooterNativeComponent.ts +5 -2
  389. package/src/fabric/legacy/ScreenNativeComponent.ts +8 -2
  390. package/src/fabric/legacy/ScreenNavigationContainerNativeComponent.ts +2 -2
  391. package/src/fabric/legacy/ScreenStackHeaderConfigNativeComponent.ts +8 -3
  392. package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -2
  393. package/src/fabric/legacy/ScreenStackNativeComponent.ts +10 -2
  394. package/src/fabric/legacy/SearchBarNativeComponent.ts +10 -7
  395. package/src/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.ts +2 -2
  396. package/src/fabric/modals/form-sheet/FormSheetHostNativeComponent.ts +7 -2
  397. package/src/fabric/safe-area/SafeAreaViewNativeComponent.ts +6 -2
  398. package/src/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.ts +10 -0
  399. package/src/fabric/split/SplitHostNativeComponent.ts +5 -2
  400. package/src/fabric/split/SplitScreenNativeComponent.ts +6 -2
  401. package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +3 -1
  402. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +7 -2
  403. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +2 -1
  404. package/src/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.ts +6 -2
  405. package/src/fabric/stack/StackHeaderSubviewAndroidNativeComponent.ts +6 -2
  406. package/src/fabric/stack/StackHostNativeComponent.ts +5 -2
  407. package/src/fabric/stack/StackScreenNativeComponent.ts +6 -2
  408. package/src/fabric/tabs/TabsBottomAccessoryContentNativeComponent.ts +6 -2
  409. package/src/fabric/tabs/TabsBottomAccessoryNativeComponent.ts +6 -2
  410. package/src/fabric/tabs/TabsHostAndroidNativeComponent.ts +7 -2
  411. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +7 -2
  412. package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +2 -1
  413. package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +2 -1
  414. package/src/flags.ts +26 -0
  415. package/src/legacy/TransitionProgressContext.tsx +1 -1
  416. package/src/legacy/components/Screen.tsx +14 -6
  417. package/src/legacy/components/ScreenStackHeaderConfig.tsx +7 -1
  418. package/src/legacy/components/ScreenStackItem.tsx +3 -4
  419. package/src/legacy/components/SearchBar.tsx +34 -44
  420. package/src/legacy/components/helpers/prepareHeaderBarButtonItems.ts +7 -1
  421. package/src/legacy/gesture-handler/fabricUtils.ts +5 -2
  422. package/src/legacy/types.ts +28 -5
  423. package/src/legacy/useTransitionProgress.tsx +4 -2
  424. package/src/private/hooks/useRenderDebugInfo.tsx +2 -2
  425. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetNativeDismissCoordinator.kt +0 -25
  426. package/ios/ReactMountingTransactionObserving.swift +0 -7
  427. package/ios/bridging/Swift-Bridging.h +0 -7
  428. package/ios/orientation/RNSOrientationProviding.swift +0 -6
  429. package/ios/orientation/RNSOrientationSwift.swift +0 -14
  430. package/ios/split/RNSSplitAppearanceApplicator.swift +0 -199
  431. package/ios/split/RNSSplitAppearanceCoordinator.swift +0 -26
  432. package/ios/split/RNSSplitAppearanceUpdateFlags.swift +0 -11
  433. package/ios/split/RNSSplitHostController.swift +0 -570
  434. package/ios/split/RNSSplitNavigationController.swift +0 -46
  435. package/ios/split/RNSSplitScreenController.swift +0 -133
  436. package/ios/utils/RNSLog.swift +0 -6
@@ -0,0 +1,10 @@
1
+ package com.swmansion.rnscreens.stack.header.toolbar.update
2
+
3
+ /**
4
+ * A single toolbar menu element update whose icon has already been resolved and merged
5
+ * into [options], ready to be applied to the toolbar.
6
+ */
7
+ internal data class StackHeaderToolbarMenuElementUpdate(
8
+ val id: String,
9
+ val options: StackHeaderToolbarMenuElementOptions,
10
+ )
@@ -0,0 +1,17 @@
1
+ package com.swmansion.rnscreens.stack.header.toolbar.update
2
+
3
+ import android.graphics.drawable.Drawable
4
+ import com.swmansion.rnscreens.stack.header.toolbar.model.StackHeaderToolbarMenuItemIconSource
5
+
6
+ /**
7
+ * Resolves the icon for a single menu element update.
8
+ *
9
+ * [onResolved] must be invoked exactly once — synchronously or asynchronously, always on the
10
+ * main thread — with the resolved icon to merge into the element's options.
11
+ */
12
+ internal fun interface StackHeaderToolbarMenuIconResolver {
13
+ fun resolve(
14
+ iconSource: StackHeaderToolbarMenuItemIconSource,
15
+ onResolved: (icon: StackHeaderToolbarFieldUpdate<Drawable>) -> Unit,
16
+ )
17
+ }
@@ -1,46 +1,4 @@
1
- package com.swmansion.rnscreens.stack.header.toolbar
2
-
3
- import android.graphics.drawable.Drawable
4
-
5
- /**
6
- * A single toolbar menu element update carried by an `updateToolbarMenuElements`
7
- * view command, before its icon (if any) has been resolved.
8
- */
9
- internal data class StackHeaderToolbarMenuElementRawUpdate(
10
- val id: String,
11
- val options: StackHeaderToolbarMenuElementOptions,
12
- val iconSource: StackHeaderToolbarMenuItemIconSource?,
13
- )
14
-
15
- /**
16
- * A single toolbar menu element update whose icon has already been resolved and merged
17
- * into [options], ready to be applied to the toolbar.
18
- */
19
- internal data class StackHeaderToolbarMenuElementUpdate(
20
- val id: String,
21
- val options: StackHeaderToolbarMenuElementOptions,
22
- )
23
-
24
- /**
25
- * Resolves the icon for a single menu element update.
26
- *
27
- * [onResolved] must be invoked exactly once — synchronously or asynchronously, always on the
28
- * main thread — with the resolved icon to merge into the element's options.
29
- */
30
- internal fun interface StackHeaderToolbarMenuIconResolver {
31
- fun resolve(
32
- iconSource: StackHeaderToolbarMenuItemIconSource,
33
- onResolved: (icon: StackHeaderToolbarFieldUpdate<Drawable>) -> Unit,
34
- )
35
- }
36
-
37
- /**
38
- * Receives a fully-resolved batch of menu element updates, to be applied to the toolbar
39
- * atomically.
40
- */
41
- internal fun interface StackHeaderToolbarMenuUpdateQueueDelegate {
42
- fun onUpdatesResolved(updates: List<StackHeaderToolbarMenuElementUpdate>)
43
- }
1
+ package com.swmansion.rnscreens.stack.header.toolbar.update
44
2
 
45
3
  /**
46
4
  * Serial, FIFO queue for `updateToolbarMenuElements` view command batches.
@@ -0,0 +1,9 @@
1
+ package com.swmansion.rnscreens.stack.header.toolbar.update
2
+
3
+ /**
4
+ * Receives a fully-resolved batch of menu element updates, to be applied to the toolbar
5
+ * atomically.
6
+ */
7
+ internal fun interface StackHeaderToolbarMenuUpdateQueueDelegate {
8
+ fun onUpdatesResolved(updates: List<StackHeaderToolbarMenuElementUpdate>)
9
+ }
@@ -131,6 +131,7 @@ class StackScreen(
131
131
  scrollView: ViewGroup,
132
132
  ) {
133
133
  containerItemSupport.registerScrollView(scrollView)
134
+ headerConfig?.onContentScrollViewChanged()
134
135
  }
135
136
 
136
137
  // endregion
@@ -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
 
package/ios/RNSEnums.h CHANGED
@@ -54,8 +54,6 @@ typedef NS_ENUM(NSInteger, RNSTabsIconType) {
54
54
  RNSTabsIconTypeXcasset,
55
55
  };
56
56
 
57
- // TODO: investigate objc - swift interop and deduplicate this code
58
- // This enum needs to be compatible with the RNSOrientationSwift enum.
59
57
  typedef NS_ENUM(NSInteger, RNSOrientation) {
60
58
  RNSOrientationInherit,
61
59
  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
@@ -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
@@ -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;
@@ -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
@@ -769,6 +770,8 @@ RNS_IGNORE_SUPER_CALL_END
769
770
 
770
771
  - (void)invalidateImpl
771
772
  {
773
+ _invalidated = YES;
774
+
772
775
  // Since the scroll view might get immediately recycled we remove ourselves
773
776
  // immediately.
774
777
  if (_sheetsScrollView != nil) {
@@ -1259,6 +1262,8 @@ RNS_IGNORE_SUPER_CALL_END
1259
1262
 
1260
1263
  [self setSynchronousShadowStateUpdatesEnabled:newScreenProps.synchronousShadowStateUpdatesEnabled];
1261
1264
 
1265
+ [self setIosOrientationInheritanceFixEnabled:newScreenProps.iosOrientationInheritanceFixEnabled];
1266
+
1262
1267
  #if !TARGET_OS_TV
1263
1268
  if (newScreenProps.statusBarHidden != oldScreenProps.statusBarHidden) {
1264
1269
  [self setStatusBarHidden:newScreenProps.statusBarHidden];
@@ -1407,7 +1412,6 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1407
1412
  @implementation RNSScreen {
1408
1413
  __weak id _previousFirstResponder;
1409
1414
  CGRect _lastViewFrame;
1410
- RNSScreenView *_initialView;
1411
1415
  UIView *_fakeView;
1412
1416
  CADisplayLink *_animationTimer;
1413
1417
  CGFloat _currentAlpha;
@@ -1428,7 +1432,6 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1428
1432
  _fakeView = [UIView new];
1429
1433
  _shouldNotify = YES;
1430
1434
  _isRemovedFromParent = NO;
1431
- _initialView = (RNSScreenView *)view;
1432
1435
  }
1433
1436
  return self;
1434
1437
  }
@@ -1751,9 +1754,13 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1751
1754
 
1752
1755
  - (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingForward:(BOOL)goingForward
1753
1756
  {
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
1757
+ if (![self.view isKindOfClass:[RNSScreenView class]]) {
1758
+ return;
1759
+ }
1760
+
1761
+ // if the screen was already deleted by React, there is no sense in sending progress
1762
+ // since on JS side the component is already not present
1763
+ if (!static_cast<RNSScreenView *>(self.view).isInvalidated) {
1757
1764
  [(RNSScreenView *)self.view notifyTransitionProgress:progress closing:closing goingForward:goingForward];
1758
1765
  }
1759
1766
  }
@@ -1907,11 +1914,9 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1907
1914
  return (int)[[self.screenView.reactSuperview reactSubviews] indexOfObject:view];
1908
1915
  }
1909
1916
 
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
1917
  - (RNSScreenView *)screenView
1913
1918
  {
1914
- return _initialView;
1919
+ return static_cast<RNSScreenView *>(self.view);
1915
1920
  }
1916
1921
 
1917
1922
  - (void)hideHeaderIfNecessary
@@ -1984,6 +1989,19 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1984
1989
  }
1985
1990
  }
1986
1991
 
1992
+ // If flag is enabled, we're doing same evaluation as `[self supportedInterfaceOrientations]`
1993
+ // but we fall back to `RNSOrientationInherit` if orientation is not set in order not to
1994
+ // override parent's orientation. For more details see:
1995
+ // https://github.com/software-mansion/react-native-screens/pull/4408
1996
+ if (self.screenView.iosOrientationInheritanceFixEnabled) {
1997
+ UIViewController *orientationVC = [self findChildVCForConfigAndTrait:RNSWindowTraitOrientation includingModals:YES];
1998
+ if ([orientationVC isKindOfClass:[RNSScreen class]]) {
1999
+ return rnscreens::conversion::RNSOrientationFromUIInterfaceOrientationMask(
2000
+ ((RNSScreen *)orientationVC).screenView.screenOrientation);
2001
+ }
2002
+ return RNSOrientationInherit;
2003
+ }
2004
+
1987
2005
  return rnscreens::conversion::RNSOrientationFromUIInterfaceOrientationMask([self supportedInterfaceOrientations]);
1988
2006
  }
1989
2007
 
@@ -1991,18 +2009,22 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
1991
2009
 
1992
2010
  #pragma mark - Fabric specific
1993
2011
 
1994
- - (void)setViewToSnapshot
2012
+ - (void)addSnapshotToView
1995
2013
  {
1996
- UIView *superView = self.view.superview;
1997
2014
  // 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];
2015
+ if (self.view.window == nil) {
2016
+ return;
2005
2017
  }
2018
+
2019
+ // The snapshot is added inside the screen view instead of replacing it, so `self.view` remains
2020
+ // the view UIKit captured for the ongoing transition and is torn down (with the snapshot)
2021
+ // consistently. Replacing the view mid-transition made iOS 26 teardown re-insert the original
2022
+ // view into the hierarchy and remove only the snapshot, leaving a view that blocked all touches.
2023
+ UIView *snapshot = [self.view snapshotViewAfterScreenUpdates:self.screenView.snapshotAfterUpdates];
2024
+ snapshot.frame = self.view.bounds;
2025
+ // fill the whole screen view with the snapshot
2026
+ snapshot.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
2027
+ [self.view addSubview:snapshot];
2006
2028
  }
2007
2029
 
2008
2030
  @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
@@ -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
@@ -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
@@ -0,0 +1,64 @@
1
+ #import "RNSScrollToTopGuardGestureRecognizer.h"
2
+ #import "RNSDefines.h"
3
+
4
+ @implementation RNSScrollToTopGuardGestureRecognizer
5
+
6
+ #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
7
+
8
+ - (instancetype)init
9
+ {
10
+ if (self = [super initWithTarget:self action:nil]) {
11
+ self.cancelsTouchesInView = NO;
12
+ self.delegate = self;
13
+ }
14
+ return self;
15
+ }
16
+
17
+ #pragma mark - UIGestureRecognizerDelegate
18
+
19
+ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
20
+ shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
21
+ {
22
+ return YES;
23
+ }
24
+
25
+ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
26
+ shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
27
+ {
28
+ // We want to target tap gesture recognizers only (one responsible for scroll to top must be one).
29
+ if (![otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
30
+ return NO;
31
+ }
32
+
33
+ // We don't know the exact recognizer responsible for scroll to top so we block all
34
+ // gesture recognizers above us.
35
+ return ![otherGestureRecognizer.view isDescendantOfView:gestureRecognizer.view];
36
+ }
37
+
38
+ #pragma mark - Class methods
39
+
40
+ + (BOOL)shouldGuardScrollToTop
41
+ {
42
+ // The system scroll-to-top-on-header interaction has been present on iPadOS since iOS 26...
43
+ if (@available(iOS 26.0, *)) {
44
+ if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
45
+ return YES;
46
+ }
47
+ }
48
+ // ...and was extended to iPhone in iOS 27.
49
+ if (@available(iOS 27.0, *)) {
50
+ if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
51
+ return YES;
52
+ }
53
+ }
54
+ return NO;
55
+ }
56
+
57
+ + (void)applyToView:(nonnull UIView *)view
58
+ {
59
+ [view addGestureRecognizer:[RNSScrollToTopGuardGestureRecognizer new]];
60
+ }
61
+
62
+ #endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
63
+
64
+ @end
@@ -0,0 +1,36 @@
1
+ #pragma once
2
+
3
+ #import <Foundation/Foundation.h>
4
+ #import "RNSSplitAppearanceCoordinator.h"
5
+
6
+ @class RNSSplitHostComponentView;
7
+ @class RNSSplitHostController;
8
+
9
+ NS_ASSUME_NONNULL_BEGIN
10
+
11
+ /**
12
+ * @brief - Class responsible for applying all upcoming updates to SplitView.
13
+ *
14
+ * This class is synchronizing UISplitViewController configuration props which are affecting the SplitView appearance
15
+ * with props passed to RNSSplitHostComponentView from the ElementTree.
16
+ */
17
+ @interface RNSSplitAppearanceApplicator : NSObject
18
+
19
+ /**
20
+ * @brief Function responsible for applying all updates to SplitView in correct order
21
+ *
22
+ * It requests calling proper callbacks with batched SplitView updates on the AppearanceCoordinator object
23
+ *
24
+ * @param splitHost The view representing JS component which is sending updates.
25
+ * @param splitHostController The controller associated with the SplitView component which receives updates and
26
+ * manages the native layer.
27
+ * @param appearanceCoordinator The coordinator which is checking whether the update needs to be applied and if so, it
28
+ * executes the callback passed by this class.
29
+ */
30
+ - (void)updateAppearanceIfNeeded:(RNSSplitHostComponentView *)splitHost
31
+ splitHostController:(RNSSplitHostController *)splitHostController
32
+ appearanceCoordinator:(RNSSplitAppearanceCoordinator *)appearanceCoordinator;
33
+
34
+ @end
35
+
36
+ NS_ASSUME_NONNULL_END