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,80 @@
1
+ #import "RNSSplitNavigationControllerFrameObserver.h"
2
+ #import "RNSSplitNavigationControllerFrameOriginChangeDelegate.h"
3
+
4
+ static void *RNSSplitNavigationViewFrameContext = &RNSSplitNavigationViewFrameContext;
5
+
6
+ @implementation RNSSplitNavigationControllerFrameObserver {
7
+ RNSSplitNavigationController *__weak _navigationController;
8
+ id<RNSSplitNavigationControllerFrameOriginChangeDelegate> __weak _frameOriginChangeDelegate;
9
+ UIView *__weak _observedView;
10
+ }
11
+
12
+ - (instancetype)initWithSplitNavigationController:(RNSSplitNavigationController *)navigationController
13
+ delegate:(id<RNSSplitNavigationControllerFrameOriginChangeDelegate>)
14
+ frameOriginChangeDelegate
15
+ {
16
+ if (self = [super init]) {
17
+ _navigationController = navigationController;
18
+ _frameOriginChangeDelegate = frameOriginChangeDelegate;
19
+ }
20
+
21
+ return self;
22
+ }
23
+
24
+ #pragma mark - Observing view frame changes
25
+
26
+ - (void)registerForViewFrameChanges
27
+ {
28
+ [self unregisterForViewFrameChanges];
29
+
30
+ UIView *view = _navigationController.viewIfLoaded;
31
+ if (view == nil) {
32
+ return;
33
+ }
34
+
35
+ [view addObserver:self
36
+ forKeyPath:@"frame"
37
+ options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
38
+ context:RNSSplitNavigationViewFrameContext];
39
+ _observedView = view;
40
+ }
41
+
42
+ - (void)unregisterForViewFrameChanges
43
+ {
44
+ [_observedView removeObserver:self forKeyPath:@"frame" context:RNSSplitNavigationViewFrameContext];
45
+ _observedView = nil;
46
+ }
47
+
48
+ - (void)observeValueForKeyPath:(NSString *)keyPath
49
+ ofObject:(id)object
50
+ change:(NSDictionary<NSKeyValueChangeKey, id> *)change
51
+ context:(void *)context
52
+ {
53
+ if (context != RNSSplitNavigationViewFrameContext) {
54
+ [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
55
+ return;
56
+ }
57
+
58
+ id oldValue = change[NSKeyValueChangeOldKey];
59
+ id newValue = change[NSKeyValueChangeNewKey];
60
+ if (![oldValue isKindOfClass:[NSValue class]] || ![newValue isKindOfClass:[NSValue class]]) {
61
+ return;
62
+ }
63
+
64
+ CGRect oldFrame = [oldValue CGRectValue];
65
+ CGRect newFrame = [newValue CGRectValue];
66
+
67
+ if (!CGPointEqualToPoint(oldFrame.origin, newFrame.origin)) {
68
+ RNSSplitNavigationController *navigationController = _navigationController;
69
+ if (navigationController != nil) {
70
+ [_frameOriginChangeDelegate splitNavigationControllerFrameOriginDidChange:navigationController];
71
+ }
72
+ }
73
+ }
74
+
75
+ - (void)dealloc
76
+ {
77
+ [self unregisterForViewFrameChanges];
78
+ }
79
+
80
+ @end
@@ -0,0 +1,15 @@
1
+ #pragma once
2
+
3
+ #import <UIKit/UIKit.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ @class RNSSplitNavigationController;
8
+
9
+ @protocol RNSSplitNavigationControllerFrameOriginChangeDelegate <NSObject>
10
+
11
+ - (void)splitNavigationControllerFrameOriginDidChange:(RNSSplitNavigationController *)splitNavCtrl;
12
+
13
+ @end
14
+
15
+ NS_ASSUME_NONNULL_END
@@ -4,8 +4,7 @@
4
4
  #import <rnscreens/RNSSplitScreenComponentDescriptor.h>
5
5
  #import "RNSConversions.h"
6
6
  #import "RNSSafeAreaViewNotifications.h"
7
-
8
- #import "Swift-Bridging.h"
7
+ #import "RNSSplitScreenController.h"
9
8
 
10
9
  namespace react = facebook::react;
11
10
 
@@ -97,13 +96,13 @@ namespace react = facebook::react;
97
96
 
98
97
  #pragma mark - Layout
99
98
 
100
- ///
101
- /// This override **should be considered as a workaround** for which I made some assumptions:
102
- /// 1. All parents of views with associated `UINavigationController` should have the same width as the SplitView column
103
- /// 2. I'm greedily aligning all native components which are extending `UINavigationController` - is covers both old and
104
- /// new stack implementations, however, it will have an impact on any other native component which will be extending
105
- /// from the same class.
106
- ///
99
+ /**
100
+ * This override **should be considered as a workaround** for which I made some assumptions:
101
+ * 1. All parents of views with associated `UINavigationController` should have the same width as the SplitView column
102
+ * 2. I'm greedily aligning all native components which are extending `UINavigationController` - is covers both old and
103
+ * new stack implementations, however, it will have an impact on any other native component which will be extending
104
+ * from the same class.
105
+ */
107
106
  - (void)layoutSubviews
108
107
  {
109
108
  [super layoutSubviews];
@@ -0,0 +1,45 @@
1
+ #pragma once
2
+
3
+ #import <UIKit/UIKit.h>
4
+
5
+ @class RNSSplitScreenComponentView;
6
+
7
+ NS_ASSUME_NONNULL_BEGIN
8
+
9
+ /**
10
+ * @class RNSSplitScreenController
11
+ * @brief A UIViewController subclass that manages a Split column in a UISplitViewController.
12
+ *
13
+ * Associated with a RNSSplitScreenComponentView, it handles layout synchronization with the
14
+ * Shadow Tree, emits React lifecycle events, and interacts with the SplitHost hierarchy.
15
+ */
16
+ @interface RNSSplitScreenController : UIViewController
17
+
18
+ - (instancetype)initWithSplitScreenComponentView:(RNSSplitScreenComponentView *)splitScreenComponentView;
19
+
20
+ #pragma mark - Signals
21
+
22
+ /**
23
+ * @brief Determines if this controller is nested inside a SplitHost hierarchy.
24
+ *
25
+ * Used to differentiate between screens embedded in the native host and modal presentations.
26
+ *
27
+ * @return true if inside RNSSplitHostController, false otherwise.
28
+ */
29
+ - (BOOL)isInSplitHostSubtree;
30
+
31
+ - (void)setNeedsLifecycleStateUpdate;
32
+
33
+ #pragma mark - Layout
34
+
35
+ /**
36
+ * @brief Request ShadowNode state update when the Split screen frame origin has changed.
37
+ *
38
+ * @param splitViewController The UISplitViewController whose layout positioning changed, represented by
39
+ * RNSSplitHostController.
40
+ */
41
+ - (void)columnPositioningDidChangeInSplitViewController:(UISplitViewController *)splitViewController;
42
+
43
+ @end
44
+
45
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,130 @@
1
+ #import "RNSSplitScreenController.h"
2
+
3
+ #import <React/RCTAssert.h>
4
+ #import "RNSSplitHostComponentView.h"
5
+ #import "RNSSplitHostController.h"
6
+ #import "RNSSplitScreenComponentView.h"
7
+
8
+ @implementation RNSSplitScreenController {
9
+ RNSSplitScreenComponentView *_splitScreenComponentView;
10
+ }
11
+
12
+ - (instancetype)initWithSplitScreenComponentView:(RNSSplitScreenComponentView *)splitScreenComponentView
13
+ {
14
+ if (self = [super init]) {
15
+ _splitScreenComponentView = splitScreenComponentView;
16
+ }
17
+
18
+ return self;
19
+ }
20
+
21
+ - (RNSSplitScreenShadowStateProxy *)shadowStateProxy
22
+ {
23
+ return [_splitScreenComponentView shadowStateProxy];
24
+ }
25
+
26
+ - (RNSSplitScreenComponentEventEmitter *)reactEventEmitter
27
+ {
28
+ return [_splitScreenComponentView reactEventEmitter];
29
+ }
30
+
31
+ /**
32
+ * @brief Searching for the SplitHost controller
33
+ *
34
+ * It checks whether the parent controller is our host controller.
35
+ * If we're outside the structure, e. g. for inspector represented as a modal,
36
+ * we're searching for that controller using a reference that Screen keeps for Host component view.
37
+ *
38
+ * @return If found - a RNSSplitHostController instance, otherwise nil.
39
+ */
40
+ - (nullable RNSSplitHostController *)findSplitHostController
41
+ {
42
+ if ([self.splitViewController isKindOfClass:RNSSplitHostController.class]) {
43
+ return (RNSSplitHostController *)self.splitViewController;
44
+ }
45
+
46
+ RNSSplitHostComponentView *splitHost = _splitScreenComponentView.splitHost;
47
+ if (splitHost != nil) {
48
+ return splitHost.splitHostController;
49
+ }
50
+
51
+ return nil;
52
+ }
53
+
54
+ - (BOOL)isInSplitHostSubtree
55
+ {
56
+ return [self.splitViewController isKindOfClass:RNSSplitHostController.class];
57
+ }
58
+
59
+ #pragma mark - Signals
60
+
61
+ - (void)setNeedsLifecycleStateUpdate
62
+ {
63
+ [[self findSplitHostController] setNeedsUpdateOfChildViewControllers];
64
+ }
65
+
66
+ #pragma mark - Layout
67
+
68
+ - (void)viewDidLayoutSubviews
69
+ {
70
+ [super viewDidLayoutSubviews];
71
+
72
+ [self updateShadowTreeState];
73
+ }
74
+
75
+ /**
76
+ * @brief Handles frame layout changes and updates Shadow Tree accordingly.
77
+ *
78
+ * Requests for the ShadowNode updates through the shadow state proxy.
79
+ * Differentiates cases when we're in the Host hierarchy to calculate frame relatively
80
+ * to the Host view from the modal case where we're passing absolute layout metrics to the ShadowNode.
81
+ */
82
+ - (void)updateShadowTreeState
83
+ {
84
+ // For modals, which are presented outside the SplitHost subtree (and RN hierarchy),
85
+ // we're attaching our touch handler and we don't need to apply any offset corrections,
86
+ // because it's positioned relatively to our RNSSplitScreenComponentView
87
+ if (![self isInSplitHostSubtree]) {
88
+ [[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView];
89
+ return;
90
+ }
91
+
92
+ UIView *ancestorView = [self findSplitHostController].view;
93
+ RCTAssert(ancestorView != nil, @"[RNScreens] Expected to find RNSSplitHost component for RNSSplitScreen component");
94
+
95
+ [[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView inContextOfAncestorView:ancestorView];
96
+ }
97
+
98
+ - (void)columnPositioningDidChangeInSplitViewController:(UISplitViewController *)splitViewController
99
+ {
100
+ [[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView
101
+ inContextOfAncestorView:splitViewController.view];
102
+ }
103
+
104
+ #pragma mark - Events
105
+
106
+ - (void)viewWillAppear:(BOOL)animated
107
+ {
108
+ [super viewWillAppear:animated];
109
+ [[self reactEventEmitter] emitOnWillAppear];
110
+ }
111
+
112
+ - (void)viewDidAppear:(BOOL)animated
113
+ {
114
+ [super viewDidAppear:animated];
115
+ [[self reactEventEmitter] emitOnDidAppear];
116
+ }
117
+
118
+ - (void)viewWillDisappear:(BOOL)animated
119
+ {
120
+ [super viewWillDisappear:animated];
121
+ [[self reactEventEmitter] emitOnWillDisappear];
122
+ }
123
+
124
+ - (void)viewDidDisappear:(BOOL)animated
125
+ {
126
+ [super viewDidDisappear:animated];
127
+ [[self reactEventEmitter] emitOnDidDisappear];
128
+ }
129
+
130
+ @end
@@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
21
21
  @property (nonatomic, readonly, nullable) NSString *largeTitle;
22
22
  @property (nonatomic, readonly, nullable) NSString *largeSubtitle;
23
23
  @property (nonatomic, readonly) BOOL largeTitleEnabled;
24
+ @property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *titleMenu;
24
25
  @property (nonatomic, readonly) NSArray<id> *children;
25
26
 
26
27
  - (void)resetProps;
@@ -1,10 +1,13 @@
1
1
  #import "RNSStackHeaderConfigComponentView.h"
2
+ #import "RNSConversions.h"
2
3
  #import "RNSImageLoadingHelper.h"
3
4
  #import "RNSStackHeaderConfigEventEmitter.h"
4
5
  #import "RNSStackHeaderConfigShadowStateProxy.h"
5
6
  #import "RNSStackHeaderItemComponentView.h"
6
7
  #import "RNSStackHeaderItemSpacerComponentView.h"
8
+ #import "RNSStackHeaderMenuCoordinator.h"
7
9
  #import "RNSStackHeaderMenuFinder.h"
10
+ #import "RNSStackHeaderMenuMapper.h"
8
11
  #import "RNSStackHeaderMenuUpdateOptions.h"
9
12
  #import "RNSStackNavigationController.h"
10
13
  #import "RNSStackScreenComponentView.h"
@@ -64,6 +67,7 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
64
67
  _largeTitle = nil;
65
68
  _largeSubtitle = nil;
66
69
  _largeTitleEnabled = NO;
70
+ _titleMenu = nil;
67
71
  }
68
72
 
69
73
  - (NSArray<id> *)children
@@ -270,7 +274,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
270
274
  }
271
275
 
272
276
  RNSMenuElementLocator *locator = [RNSStackHeaderMenuFinder findMenuElementWithId:menuItemId
273
- inHeaderItems:[self headerItems]];
277
+ inHeaderItems:[self headerItems]
278
+ titleMenu:_titleMenu];
274
279
  if (locator == nil) {
275
280
  RCTLogWarn(@"[RNScreens] setMenuItemOptions: element with id \"%@\" not found", menuItemId);
276
281
  return;
@@ -285,15 +290,15 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
285
290
  RNSStackHeaderMenuItemData *newItemData = [RNSMenuItemUpdateOptions applyOptions:updateOptions
286
291
  toMenuItem:oldItemData];
287
292
 
288
- if (updateOptions.hasToggleState) {
293
+ if (updateOptions.hasToggleState && locator.rootMenu != nil && locator.trackerItemId != nil) {
289
294
  BOOL isToggle = oldItemData.itemType == RNSMenuItemTypeToggle ||
290
- (oldItemData.itemType == RNSMenuItemTypeAutomatic && locator.headerItem.menu != nil &&
291
- [RNSStackHeaderMenuFinder singleSelectionRootForElementWithId:menuItemId
292
- inMenu:locator.headerItem.menu] != nil);
295
+ (oldItemData.itemType == RNSMenuItemTypeAutomatic &&
296
+ [RNSStackHeaderMenuFinder singleSelectionRootForElementWithId:menuItemId inMenu:locator.rootMenu] != nil);
293
297
  if (isToggle) {
294
298
  [[self headerCoordinator] setToggleState:updateOptions.toggleState
295
299
  forMenuElementId:menuItemId
296
- withItemId:locator.headerItem.itemId
300
+ trackerItemId:locator.trackerItemId
301
+ rootMenu:locator.rootMenu
297
302
  parentMenu:locator.searchResult.parentMenu];
298
303
  }
299
304
  }
@@ -308,8 +313,15 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
308
313
  parentMenu:locator.searchResult.parentMenu];
309
314
  break;
310
315
  case RNSMenuElementPositionTitle:
316
+ if (locator.searchResult.parentMenu != nil) {
317
+ _titleMenu = [RNSStackHeaderMenuCoordinator menu:_titleMenu
318
+ replacingChildWithId:menuItemId
319
+ withElement:newItemData];
320
+ }
321
+ [[self headerCoordinator] reapplyTitleMenu];
322
+ break;
311
323
  case RNSMenuElementPositionOverflow:
312
- // TODO: handle title menu and overflow menu
324
+ // TODO: handle overflow menu
313
325
  break;
314
326
  }
315
327
  }
@@ -322,7 +334,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
322
334
  }
323
335
 
324
336
  RNSMenuElementLocator *locator = [RNSStackHeaderMenuFinder findMenuElementWithId:menuElementId
325
- inHeaderItems:[self headerItems]];
337
+ inHeaderItems:[self headerItems]
338
+ titleMenu:_titleMenu];
326
339
  if (locator == nil) {
327
340
  RCTLogWarn(@"[RNScreens] setMenuOptions: element with id \"%@\" not found", menuElementId);
328
341
  return;
@@ -346,8 +359,17 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
346
359
  parentMenu:locator.searchResult.parentMenu];
347
360
  break;
348
361
  case RNSMenuElementPositionTitle:
362
+ if (locator.searchResult.parentMenu == nil) {
363
+ _titleMenu = (RNSStackHeaderMenuData *)newMenuItem;
364
+ } else {
365
+ _titleMenu = [RNSStackHeaderMenuCoordinator menu:_titleMenu
366
+ replacingChildWithId:menuElementId
367
+ withElement:newMenuItem];
368
+ }
369
+ [[self headerCoordinator] reapplyTitleMenu];
370
+ break;
349
371
  case RNSMenuElementPositionOverflow:
350
- // TODO: handle title menu and overflow menu
372
+ // TODO: handle overflow menu
351
373
  break;
352
374
  }
353
375
  }
@@ -396,6 +418,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
396
418
  const auto &newHeaderProps = *std::static_pointer_cast<const react::RNSStackHeaderConfigIOSProps>(props);
397
419
  const auto &oldHeaderProps = *std::static_pointer_cast<const react::RNSStackHeaderConfigIOSProps>(_props);
398
420
 
421
+ BOOL titleMenuDidChange = NO;
422
+
399
423
  if (oldHeaderProps.title != newHeaderProps.title) {
400
424
  _title = RCTNSStringFromStringNilIfEmpty(newHeaderProps.title);
401
425
  }
@@ -420,9 +444,23 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
420
444
  _largeTitleEnabled = newHeaderProps.largeTitleEnabled;
421
445
  }
422
446
 
447
+ if (oldHeaderProps.titleMenu != newHeaderProps.titleMenu) {
448
+ _titleMenu = [RNSStackHeaderMenuMapper
449
+ menuFromDictionary:rnscreens::conversion::RNSConvertFollyDynamicToId(newHeaderProps.titleMenu)];
450
+ titleMenuDidChange = YES;
451
+ }
452
+
423
453
  [super updateProps:props oldProps:oldProps];
424
454
 
425
455
  [[self headerCoordinator] applyConfigProperties];
456
+
457
+ if (titleMenuDidChange) {
458
+ // title menu is a prop on the navigation item, not on one of the bar button items
459
+ // thus it is not configured with matching RNSStackHeaderItemComponentView
460
+ // but here directly
461
+ [[self headerCoordinator] resetTitleMenuTracker];
462
+ [[self headerCoordinator] reapplyTitleMenu];
463
+ }
426
464
  }
427
465
 
428
466
  + (react::ComponentDescriptorProvider)componentDescriptorProvider
@@ -2,6 +2,8 @@
2
2
 
3
3
  #import <UIKit/UIKit.h>
4
4
 
5
+ @class RNSStackHeaderMenuData;
6
+
5
7
  NS_ASSUME_NONNULL_BEGIN
6
8
 
7
9
  @protocol RNSStackHeaderConfigDataProviding <NSObject>
@@ -12,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
12
14
  @property (nonatomic, readonly, nullable) NSString *largeTitle;
13
15
  @property (nonatomic, readonly, nullable) NSString *largeSubtitle;
14
16
  @property (nonatomic, readonly) BOOL largeTitleEnabled;
17
+ @property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *titleMenu;
15
18
 
16
19
  /**
17
20
  Children are expected to conform to either RNSStackHeaderItemDataProviding
@@ -35,6 +35,15 @@ NS_ASSUME_NONNULL_BEGIN
35
35
  */
36
36
  + (NSArray<NSString *> *)getToggleItemsIdsInMenu:(RNSStackHeaderMenuData *)menu;
37
37
 
38
+ /**
39
+ * Builds a UIMenu from the given menu data. Used for `UINavigationItem.titleMenuProvider`.
40
+ */
41
+ + (UIMenu *)buildUIMenuFromData:(RNSStackHeaderMenuData *)data
42
+ withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
43
+ stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
44
+ withImageLoader:(id<RNSImageLoading>)imageLoader
45
+ menuInvalidatedCallback:(nullable void (^)(void))onMenuInvalidated;
46
+
38
47
  /**
39
48
  * Constructs a new menu tree with the child matching `elementId` replaced by `newElement`.
40
49
  * Returns the original menu unchanged if no matching child is found in the subtree.
@@ -88,6 +88,21 @@
88
88
  return [UIMenu menuWithTitle:data.title image:menuImage identifier:nil options:options children:elements];
89
89
  }
90
90
 
91
+ + (UIMenu *)buildUIMenuFromData:(RNSStackHeaderMenuData *)data
92
+ withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
93
+ stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
94
+ withImageLoader:(id<RNSImageLoading>)imageLoader
95
+ menuInvalidatedCallback:(nullable void (^)(void))onMenuInvalidated
96
+ {
97
+ return [self buildMenuFromData:data
98
+ withHeaderEventsDelegate:delegate
99
+ stateTracker:tracker
100
+ singleSelectionRoot:nil
101
+ initialSingleSelectionStateClaimed:NULL
102
+ withImageLoader:imageLoader
103
+ menuInvalidatedCallback:onMenuInvalidated];
104
+ }
105
+
91
106
  + (nullable UIMenuElement *)buildElementFromData:(id<RNSStackHeaderMenuElement>)element
92
107
  withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
93
108
  stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
@@ -7,6 +7,8 @@
7
7
 
8
8
  NS_ASSUME_NONNULL_BEGIN
9
9
 
10
+ static NSString *const RNSTitleMenuTrackerItemId = @"__titleMenu__";
11
+
10
12
  @interface RNSStackHeaderMenuElementSearchResult : NSObject
11
13
 
12
14
  @property (nonatomic, strong, readonly) id<RNSStackHeaderMenuElement> element;
@@ -29,19 +31,32 @@ typedef NS_ENUM(NSInteger, RNSMenuElementPosition) {
29
31
  @property (nonatomic, readonly) RNSMenuElementPosition position;
30
32
  @property (nonatomic, weak, readonly, nullable) id<RNSStackHeaderItemDataProviding> headerItem;
31
33
 
34
+ /**
35
+ * Root menu tree that contains the found element. Used for singleSelectionRoot lookups.
36
+ */
37
+ @property (nonatomic, strong, readonly, nullable) RNSStackHeaderMenuData *rootMenu;
38
+
39
+ /**
40
+ * Tracker key for the toggle state tracker registry.
41
+ */
42
+ @property (nonatomic, copy, readonly, nullable) NSString *trackerItemId;
43
+
32
44
  - (instancetype)initWithSearchResult:(RNSStackHeaderMenuElementSearchResult *)searchResult
33
45
  position:(RNSMenuElementPosition)position
34
- headerItem:(nullable id<RNSStackHeaderItemDataProviding>)headerItem;
46
+ headerItem:(nullable id<RNSStackHeaderItemDataProviding>)headerItem
47
+ rootMenu:(nullable RNSStackHeaderMenuData *)rootMenu
48
+ trackerItemId:(nullable NSString *)trackerItemId;
35
49
 
36
50
  @end
37
51
 
38
52
  @interface RNSStackHeaderMenuFinder : NSObject
39
53
 
40
54
  /**
41
- * Searches all header items' menus for a menu element with the given ID.
55
+ * Searches all header items' menus and the title menu for a menu element with the given ID.
42
56
  */
43
57
  + (nullable RNSMenuElementLocator *)findMenuElementWithId:(NSString *)elementId
44
- inHeaderItems:(NSArray<id<RNSStackHeaderItemDataProviding>> *)items;
58
+ inHeaderItems:(NSArray<id<RNSStackHeaderItemDataProviding>> *)items
59
+ titleMenu:(nullable RNSStackHeaderMenuData *)titleMenu;
45
60
 
46
61
  /**
47
62
  * Recursively searches a single menu tree for an element with the given ID.
@@ -23,11 +23,15 @@
23
23
  - (instancetype)initWithSearchResult:(RNSStackHeaderMenuElementSearchResult *)searchResult
24
24
  position:(RNSMenuElementPosition)position
25
25
  headerItem:(nullable id<RNSStackHeaderItemDataProviding>)headerItem
26
+ rootMenu:(nullable RNSStackHeaderMenuData *)rootMenu
27
+ trackerItemId:(nullable NSString *)trackerItemId
26
28
  {
27
29
  if (self = [super init]) {
28
30
  _searchResult = searchResult;
29
31
  _position = position;
30
32
  _headerItem = headerItem;
33
+ _rootMenu = rootMenu;
34
+ _trackerItemId = [trackerItemId copy];
31
35
  }
32
36
  return self;
33
37
  }
@@ -40,6 +44,7 @@
40
44
 
41
45
  + (nullable RNSMenuElementLocator *)findMenuElementWithId:(NSString *)elementId
42
46
  inHeaderItems:(NSArray<id<RNSStackHeaderItemDataProviding>> *)items
47
+ titleMenu:(nullable RNSStackHeaderMenuData *)titleMenu
43
48
  {
44
49
  for (id<RNSStackHeaderItemDataProviding> item in items) {
45
50
  if (item.menu == nil || item.itemId == nil) {
@@ -49,11 +54,24 @@
49
54
  if (result != nil) {
50
55
  return [[RNSMenuElementLocator alloc] initWithSearchResult:result
51
56
  position:RNSMenuElementPositionItem
52
- headerItem:item];
57
+ headerItem:item
58
+ rootMenu:item.menu
59
+ trackerItemId:item.itemId];
53
60
  }
54
61
  }
55
- // TODO: search title menu (RNSMenuElementPositionTitle)
56
- // and overflow menu (RNSMenuElementPositionOverflow)
62
+
63
+ if (titleMenu != nil) {
64
+ RNSStackHeaderMenuElementSearchResult *result = [self findElementWithId:elementId inMenu:titleMenu];
65
+ if (result != nil) {
66
+ return [[RNSMenuElementLocator alloc] initWithSearchResult:result
67
+ position:RNSMenuElementPositionTitle
68
+ headerItem:nil
69
+ rootMenu:titleMenu
70
+ trackerItemId:RNSTitleMenuTrackerItemId];
71
+ }
72
+ }
73
+
74
+ // TODO: search overflow menu (RNSMenuElementPositionOverflow)
57
75
  return nil;
58
76
  }
59
77
 
@@ -15,7 +15,6 @@
15
15
  #import "RNSStackNavigationController.h"
16
16
  #import "RNSStackOperationCoordinator.h"
17
17
  #import "RNSStackScreenComponentView.h"
18
- #import "Swift-Bridging.h"
19
18
 
20
19
  namespace react = facebook::react;
21
20
 
@@ -38,6 +37,9 @@ namespace react = facebook::react;
38
37
 
39
38
  - (void)initState
40
39
  {
40
+ static const auto defaultProps = std::make_shared<const react::RNSStackHostProps>();
41
+ _props = defaultProps;
42
+
41
43
  _stackNavigationController = [RNSStackNavigationController new];
42
44
  _stackOperationCoordinator = [RNSStackOperationCoordinator new];
43
45
  _renderedScreens = [NSMutableArray new];
@@ -1,11 +1,11 @@
1
1
  #import "RNSStackNavigationController.h"
2
+ #import <React/RCTAssert.h>
2
3
  #import "RNSContainer.h"
3
4
  #import "RNSLog.h"
4
5
  #import "RNSParentContainerItemRegistry.h"
5
6
  #import "RNSStackOperation.h"
6
7
  #import "RNSStackScreenController.h"
7
8
  #import "RNSViewFrameChangeDelegate.h"
8
- #import "React/RCTAssert.h"
9
9
 
10
10
  @implementation RNSStackNavigationController {
11
11
  NSMutableArray<RNSPushOperation *> *_Nonnull _pendingPushOperations;
@@ -16,8 +16,6 @@
16
16
  #import "RNSStackScreenController.h"
17
17
  #import "RNSStackScreenHeaderCoordinator.h"
18
18
 
19
- #import "Swift-Bridging.h"
20
-
21
19
  namespace react = facebook::react;
22
20
 
23
21
  @interface RNSStackScreenComponentView () <RCTMountingTransactionObserving, RNSScrollViewSeeking>
@@ -30,9 +30,14 @@ NS_ASSUME_NONNULL_BEGIN
30
30
 
31
31
  - (void)resetTrackerForItemWithId:(nullable NSString *)itemId;
32
32
 
33
+ - (void)reapplyTitleMenu;
34
+
35
+ - (void)resetTitleMenuTracker;
36
+
33
37
  - (void)setToggleState:(BOOL)state
34
38
  forMenuElementId:(NSString *)elementId
35
- withItemId:(NSString *)itemId
39
+ trackerItemId:(NSString *)trackerItemId
40
+ rootMenu:(RNSStackHeaderMenuData *)rootMenu
36
41
  parentMenu:(nullable RNSStackHeaderMenuData *)parentMenu;
37
42
 
38
43
  - (void)clearHeaderConfiguration;