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

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 (456) hide show
  1. package/Package.swift +87 -0
  2. package/README.md +0 -11
  3. package/android/build.gradle +1 -0
  4. package/android/consumer-rules.pro +3 -0
  5. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderConfigViewGroup.kt +2 -0
  6. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderSubviewViewGroup.kt +2 -0
  7. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledViewGroup.kt +18 -3
  8. package/android/src/main/cpp/NativeProxy.cpp +30 -6
  9. package/android/src/main/cpp/NativeProxy.h +7 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +7 -3
  12. package/android/src/main/java/com/swmansion/rnscreens/common/colorscheme/ColorSchemeCoordinator.kt +11 -1
  13. package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +17 -0
  14. package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
  16. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetAppearanceCoordinator.kt +2 -2
  19. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetBehaviorController.kt +51 -20
  20. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetDimensionsCoordinator.kt +159 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
  22. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetNativeDismissCoordinator.kt +2 -8
  23. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetAvailableHeightProvider.kt +44 -0
  24. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetContainer.kt +1 -1
  25. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialog.kt +36 -4
  26. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetDialogManager.kt +107 -0
  27. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeDelegate.kt +1 -1
  28. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeProvider.kt +1 -1
  29. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetDialogEventEmitter.kt +3 -1
  30. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetConfig.kt +1 -1
  31. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/model/FormSheetDetents.kt +152 -0
  32. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetAnimatorFactory.kt +9 -10
  33. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDimmingManager.kt +103 -0
  34. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDismissalOrigin.kt +22 -0
  35. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentation.kt +173 -0
  36. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentationManager.kt +290 -0
  37. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationState.kt +2 -2
  38. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetStackRegistry.kt +28 -0
  39. package/android/src/main/java/com/swmansion/rnscreens/ext/FragmentManagerExt.kt +6 -0
  40. package/android/src/main/java/com/swmansion/rnscreens/helpers/FragmentManagerHelper.kt +0 -3
  41. package/android/src/main/java/com/swmansion/rnscreens/helpers/NoTintDrawable.kt +31 -0
  42. package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
  43. package/android/src/main/java/com/swmansion/rnscreens/helpers/ViewFinder.kt +0 -17
  44. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +32 -3
  45. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenContainer.kt +35 -3
  46. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +15 -0
  47. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderConfig.kt +7 -1
  48. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderSubviewManager.kt +7 -0
  49. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackViewManager.kt +6 -0
  50. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/DimmingView.kt +2 -0
  51. package/android/src/main/java/com/swmansion/rnscreens/legacy/stack/views/ScreensCoordinatorLayout.kt +2 -0
  52. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapper.kt +3 -3
  53. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapperViewManager.kt +1 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDetentChangedEvent.kt +1 -1
  55. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidAppearEvent.kt +1 -1
  56. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidDisappearEvent.kt +1 -1
  57. package/android/src/main/java/com/swmansion/rnscreens/react/modals/formsheet/event/FormSheetDismissEvent.kt +29 -0
  58. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissEvent.kt +1 -1
  59. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissPreventedEvent.kt +1 -1
  60. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetSyncFlushEvent.kt +1 -1
  61. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillAppearEvent.kt +1 -1
  62. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillDisappearEvent.kt +1 -1
  63. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetContentView.kt +3 -3
  64. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHost.kt +5 -3
  65. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostEventEmitter.kt +17 -10
  66. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostViewManager.kt +11 -9
  67. package/android/src/main/java/com/swmansion/rnscreens/safearea/OnInterfaceInsetsChangeListener.kt +15 -0
  68. package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaProvider.kt +8 -8
  69. package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaView.kt +3 -2
  70. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +360 -101
  71. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
  72. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +211 -113
  73. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +156 -24
  74. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
  75. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderToolbar.kt +74 -0
  76. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
  77. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +162 -228
  78. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +385 -12
  79. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +5 -6
  80. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +29 -6
  81. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
  82. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +8 -7
  83. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +27 -280
  84. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
  85. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
  86. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +28 -20
  87. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +3 -55
  88. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +1 -10
  89. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuItemConfig.kt +1 -3
  90. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
  91. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +57 -6
  92. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +3 -1
  93. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +1 -0
  94. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +4 -3
  95. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueue.kt +23 -9
  96. package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperation.kt +1 -0
  97. package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperationExecutor.kt +2 -1
  98. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +159 -21
  99. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerDelegate.kt +7 -0
  100. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerUpdateCoordinator.kt +5 -3
  101. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +27 -5
  102. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
  103. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackUpdateBatchStateProviding.kt +10 -0
  104. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/PreventNativeDismissCallback.kt +2 -2
  105. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +4 -0
  106. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +50 -10
  107. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
  108. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceApplicator.kt +106 -10
  109. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +46 -7
  110. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceModel.kt +3 -0
  111. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/CustomBottomNavigationView.kt +21 -1
  112. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
  113. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +72 -36
  114. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainerDelegate.kt +11 -0
  115. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +22 -2
  116. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
  117. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +58 -17
  118. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenDelegate.kt +6 -0
  119. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
  120. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIcon.kt +82 -0
  121. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIconTinting.kt +17 -0
  122. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenViewManager.kt +26 -19
  123. package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +20 -6
  124. package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +22 -6
  125. package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
  126. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
  127. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
  128. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
  129. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
  130. package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
  131. package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
  132. package/ios/RNSEnums.h +16 -1
  133. package/ios/conversion/RNSConversions.h +7 -108
  134. package/ios/helpers/image/RNSImageLoadingHelper.h +7 -0
  135. package/ios/helpers/image/RNSImageLoadingHelper.mm +9 -0
  136. package/ios/legacy/RNSBarButtonItem.mm +15 -0
  137. package/ios/legacy/RNSConvert.h +6 -0
  138. package/ios/legacy/RNSConvert.mm +17 -0
  139. package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
  140. package/ios/legacy/RNSModalScreen.mm +1 -1
  141. package/ios/legacy/RNSNavigationBar.h +31 -0
  142. package/ios/legacy/RNSNavigationBar.mm +15 -0
  143. package/ios/legacy/RNSScreen.mm +130 -31
  144. package/ios/legacy/RNSScreenContentWrapper.mm +4 -1
  145. package/ios/legacy/RNSScreenStack.mm +202 -15
  146. package/ios/legacy/RNSScreenStackHeaderConfig.h +30 -0
  147. package/ios/legacy/RNSScreenStackHeaderConfig.mm +72 -17
  148. package/ios/legacy/RNSScreenStackHeaderSubview.mm +34 -1
  149. package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
  150. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
  151. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
  152. package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
  153. package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
  154. package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
  155. package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
  156. package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
  157. package/ios/safe-area/RNSSafeAreaViewComponentView.mm +3 -14
  158. package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
  159. package/ios/split/RNSSplitAppearanceApplicator.h +4 -4
  160. package/ios/split/RNSSplitAppearanceApplicator.mm +53 -56
  161. package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
  162. package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
  163. package/ios/split/RNSSplitHostComponentView.h +5 -15
  164. package/ios/split/RNSSplitHostComponentView.mm +55 -6
  165. package/ios/split/RNSSplitHostController.h +25 -6
  166. package/ios/split/RNSSplitHostController.mm +24 -92
  167. package/ios/split/RNSSplitHostProviders.h +67 -0
  168. package/ios/split/RNSSplitScreenComponentView.h +0 -39
  169. package/ios/split/RNSSplitScreenComponentView.mm +27 -10
  170. package/ios/split/RNSSplitScreenController.h +26 -3
  171. package/ios/split/RNSSplitScreenController.mm +13 -30
  172. package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
  173. package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
  174. package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
  175. package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
  176. package/ios/stack/conversion/RNSConversions-Stack.h +62 -0
  177. package/ios/stack/conversion/RNSConversions-Stack.mm +134 -0
  178. package/ios/stack/header/RNSHeaderItemVisibilityPriority.h +9 -0
  179. package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
  180. package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
  181. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +14 -1
  182. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +103 -37
  183. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +11 -0
  184. package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
  185. package/ios/stack/header/RNSStackHeaderContentFactory.mm +3 -0
  186. package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
  187. package/ios/stack/header/RNSStackHeaderItemComponentView.h +12 -3
  188. package/ios/stack/header/RNSStackHeaderItemComponentView.mm +72 -5
  189. package/ios/stack/header/RNSStackHeaderItemDataProviding.h +7 -0
  190. package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
  191. package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
  192. package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +13 -0
  193. package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +24 -0
  194. package/ios/stack/header/RNSStackHeaderMenuFinder.h +8 -1
  195. package/ios/stack/header/RNSStackHeaderMenuFinder.mm +26 -9
  196. package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
  197. package/ios/stack/host/RNSStackNavigationBar.h +25 -0
  198. package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
  199. package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
  200. package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
  201. package/ios/stack/host/RNSStackNavigationController.mm +13 -5
  202. package/ios/stack/host/RNSStackOperation.h +0 -2
  203. package/ios/stack/screen/RNSStackScreenComponentView.h +2 -1
  204. package/ios/stack/screen/RNSStackScreenComponentView.mm +32 -2
  205. package/ios/stack/screen/RNSStackScreenController.mm +12 -0
  206. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +8 -0
  207. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +179 -24
  208. package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +110 -16
  209. package/ios/tabs/RNSTabBarItemCoordinator.h +16 -0
  210. package/ios/tabs/RNSTabBarItemCoordinator.mm +143 -0
  211. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
  212. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +1 -1
  213. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +1 -1
  214. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
  215. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
  216. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h +24 -0
  217. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm +22 -0
  218. package/ios/tabs/conversion/RNSConversions-Tabs.h +100 -0
  219. package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +105 -74
  220. package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
  221. package/ios/tabs/host/RNSTabBarController.h +16 -0
  222. package/ios/tabs/host/RNSTabBarController.mm +516 -107
  223. package/ios/tabs/host/RNSTabsHostComponentView.h +4 -0
  224. package/ios/tabs/host/RNSTabsHostComponentView.mm +41 -4
  225. package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
  226. package/ios/tabs/screen/RNSTabsScreenComponentView.h +21 -0
  227. package/ios/tabs/screen/RNSTabsScreenComponentView.mm +56 -56
  228. package/ios/tabs/screen/RNSTabsScreenViewController.mm +1 -0
  229. package/ios/utils/RNSDefines.h +15 -7
  230. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +37 -21
  231. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  232. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +41 -4
  233. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  234. package/lib/commonjs/components/stack/header/StackHeaderConfig.js +17 -0
  235. package/lib/commonjs/components/stack/header/StackHeaderConfig.js.map +1 -0
  236. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
  237. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  238. package/lib/commonjs/components/stack/host/StackHost.js +17 -7
  239. package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
  240. package/lib/commonjs/components/stack/host/StackHost.web.js +0 -2
  241. package/lib/commonjs/components/stack/host/StackHost.web.js.map +1 -1
  242. package/lib/commonjs/components/stack/index.js.map +1 -1
  243. package/lib/commonjs/components/tabs/host/TabsHost.ios.js +3 -0
  244. package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
  245. package/lib/commonjs/components/tabs/host/{TabsHost.web.js → TabsHost.js} +1 -1
  246. package/lib/commonjs/components/tabs/host/TabsHost.js.map +1 -0
  247. package/lib/commonjs/components/tabs/index.js.map +1 -1
  248. package/lib/commonjs/components/tabs/screen/TabsScreen.android.js +3 -1
  249. package/lib/commonjs/components/tabs/screen/TabsScreen.android.js.map +1 -1
  250. package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js +10 -1
  251. package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js.map +1 -1
  252. package/lib/commonjs/components/tabs/screen/{TabsScreen.web.js → TabsScreen.js} +1 -1
  253. package/lib/commonjs/components/tabs/screen/TabsScreen.js.map +1 -0
  254. package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js → tabs/screen/TabsScreenIcon.types.js} +1 -1
  255. package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
  256. package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  257. package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  258. package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  259. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  260. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  261. package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
  262. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  263. package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  264. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
  265. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  266. package/lib/commonjs/legacy/components/ScreenStackItem.js +31 -11
  267. package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
  268. package/lib/module/components/stack/header/StackHeaderConfig.android.js +39 -23
  269. package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  270. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +43 -6
  271. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  272. package/lib/module/components/stack/header/StackHeaderConfig.js +10 -0
  273. package/lib/module/components/stack/header/StackHeaderConfig.js.map +1 -0
  274. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
  275. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  276. package/lib/module/components/stack/host/StackHost.js +18 -8
  277. package/lib/module/components/stack/host/StackHost.js.map +1 -1
  278. package/lib/module/components/stack/host/StackHost.web.js +0 -3
  279. package/lib/module/components/stack/host/StackHost.web.js.map +1 -1
  280. package/lib/module/components/stack/index.js.map +1 -1
  281. package/lib/module/components/tabs/host/TabsHost.ios.js +3 -0
  282. package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
  283. package/{src/components/tabs/host/TabsHost.web.tsx → lib/module/components/tabs/host/TabsHost.js} +1 -2
  284. package/lib/module/components/tabs/host/TabsHost.js.map +1 -0
  285. package/lib/module/components/tabs/index.js.map +1 -1
  286. package/lib/module/components/tabs/screen/TabsScreen.android.js +3 -1
  287. package/lib/module/components/tabs/screen/TabsScreen.android.js.map +1 -1
  288. package/lib/module/components/tabs/screen/TabsScreen.ios.js +10 -1
  289. package/lib/module/components/tabs/screen/TabsScreen.ios.js.map +1 -1
  290. package/{src/components/tabs/screen/TabsScreen.web.tsx → lib/module/components/tabs/screen/TabsScreen.js} +1 -2
  291. package/lib/module/components/tabs/screen/TabsScreen.js.map +1 -0
  292. package/lib/module/components/tabs/screen/TabsScreenIcon.types.js +2 -0
  293. package/lib/module/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
  294. package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  295. package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  296. package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  297. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  298. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  299. package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
  300. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  301. package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  302. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
  303. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  304. package/lib/module/legacy/components/ScreenStackItem.js +31 -11
  305. package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
  306. package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +1 -1
  307. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts +6 -3
  308. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
  309. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +620 -24
  310. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  311. package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts +8 -0
  312. package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts.map +1 -0
  313. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts +6 -3
  314. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  315. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +361 -2
  316. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  317. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +4 -2
  318. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts.map +1 -1
  319. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
  320. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +7 -0
  321. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
  322. package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
  323. package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
  324. package/lib/typescript/components/stack/host/StackHost.types.d.ts +47 -0
  325. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  326. package/lib/typescript/components/stack/host/StackHost.web.d.ts +1 -3
  327. package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
  328. package/lib/typescript/components/stack/index.d.ts +4 -3
  329. package/lib/typescript/components/stack/index.d.ts.map +1 -1
  330. package/lib/typescript/components/tabs/host/TabsHost.d.ts +5 -0
  331. package/lib/typescript/components/tabs/host/TabsHost.d.ts.map +1 -0
  332. package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
  333. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +72 -0
  334. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
  335. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
  336. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
  337. package/lib/typescript/components/tabs/index.d.ts +4 -6
  338. package/lib/typescript/components/tabs/index.d.ts.map +1 -1
  339. package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts.map +1 -1
  340. package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts +42 -7
  341. package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts.map +1 -1
  342. package/lib/typescript/components/tabs/screen/TabsScreen.d.ts +5 -0
  343. package/lib/typescript/components/tabs/screen/TabsScreen.d.ts.map +1 -0
  344. package/lib/typescript/components/tabs/screen/TabsScreen.ios.d.ts.map +1 -1
  345. package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts +78 -13
  346. package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts.map +1 -1
  347. package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts +91 -0
  348. package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts.map +1 -0
  349. package/lib/typescript/components/tabs/screen/index.d.ts +1 -0
  350. package/lib/typescript/components/tabs/screen/index.d.ts.map +1 -1
  351. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -0
  352. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
  353. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +1 -0
  354. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
  355. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +52 -0
  356. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
  357. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +29 -1
  358. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  359. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +8 -0
  360. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  361. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +3 -1
  362. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
  363. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +4 -0
  364. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  365. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +6 -0
  366. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
  367. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +10 -1
  368. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
  369. package/lib/typescript/legacy/components/ScreenStackItem.d.ts +25 -0
  370. package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
  371. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +4 -0
  372. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
  373. package/lib/typescript/legacy/types.d.ts +30 -0
  374. package/lib/typescript/legacy/types.d.ts.map +1 -1
  375. package/package.json +11 -8
  376. package/react-native.config.js +3 -0
  377. package/src/components/modals/form-sheet/FormSheet.types.ts +1 -1
  378. package/src/components/stack/header/StackHeaderConfig.android.tsx +54 -43
  379. package/src/components/stack/header/StackHeaderConfig.android.types.ts +641 -24
  380. package/src/components/stack/header/StackHeaderConfig.ios.tsx +55 -17
  381. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +384 -2
  382. package/src/components/stack/header/StackHeaderConfig.tsx +12 -0
  383. package/src/components/stack/header/StackHeaderConfig.types.ts +4 -2
  384. package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +9 -1
  385. package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +7 -0
  386. package/src/components/stack/host/StackHost.tsx +12 -3
  387. package/src/components/stack/host/StackHost.types.ts +50 -0
  388. package/src/components/stack/host/StackHost.web.tsx +1 -4
  389. package/src/components/stack/index.ts +14 -1
  390. package/src/components/tabs/host/TabsHost.ios.tsx +3 -0
  391. package/src/components/tabs/host/TabsHost.ios.types.ts +76 -0
  392. package/src/components/tabs/host/TabsHost.tsx +7 -0
  393. package/src/components/tabs/host/TabsHost.types.ts +3 -0
  394. package/src/components/tabs/index.ts +9 -0
  395. package/src/components/tabs/screen/TabsScreen.android.tsx +8 -3
  396. package/src/components/tabs/screen/TabsScreen.android.types.ts +42 -7
  397. package/src/components/tabs/screen/TabsScreen.ios.tsx +22 -5
  398. package/src/components/tabs/screen/TabsScreen.ios.types.ts +79 -17
  399. package/src/components/tabs/screen/TabsScreen.tsx +7 -0
  400. package/src/components/tabs/screen/TabsScreenIcon.types.ts +117 -0
  401. package/src/components/tabs/screen/index.ts +1 -0
  402. package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -0
  403. package/src/fabric/legacy/ScreenStackNativeComponent.ts +2 -0
  404. package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +78 -0
  405. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +43 -0
  406. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +13 -0
  407. package/src/fabric/stack/StackHostNativeComponent.ts +11 -2
  408. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +8 -0
  409. package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +9 -0
  410. package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +20 -2
  411. package/src/legacy/components/ScreenStackItem.tsx +59 -12
  412. package/src/legacy/types.ts +31 -0
  413. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenModalFragment.kt +0 -281
  414. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogRootView.kt +0 -104
  415. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogScreen.kt +0 -26
  416. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
  417. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
  418. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
  419. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +0 -134
  420. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +0 -162
  421. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +0 -106
  422. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +0 -198
  423. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +0 -83
  424. package/ios/conversion/RNSConversions-Stack.h +0 -32
  425. package/ios/conversion/RNSConversions-Stack.mm +0 -41
  426. package/ios/conversion/always_false.h +0 -31
  427. package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js +0 -10
  428. package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js.map +0 -1
  429. package/lib/commonjs/components/tabs/host/TabsHost.d.js +0 -2
  430. package/lib/commonjs/components/tabs/host/TabsHost.d.js.map +0 -1
  431. package/lib/commonjs/components/tabs/host/TabsHost.web.js.map +0 -1
  432. package/lib/commonjs/components/tabs/screen/TabsScreen.d.js +0 -2
  433. package/lib/commonjs/components/tabs/screen/TabsScreen.d.js.map +0 -1
  434. package/lib/commonjs/components/tabs/screen/TabsScreen.web.js.map +0 -1
  435. package/lib/module/components/stack/header/StackHeaderConfig.d.js +0 -2
  436. package/lib/module/components/stack/header/StackHeaderConfig.web.js +0 -4
  437. package/lib/module/components/stack/header/StackHeaderConfig.web.js.map +0 -1
  438. package/lib/module/components/tabs/host/TabsHost.d.js +0 -2
  439. package/lib/module/components/tabs/host/TabsHost.d.js.map +0 -1
  440. package/lib/module/components/tabs/host/TabsHost.web.js +0 -4
  441. package/lib/module/components/tabs/host/TabsHost.web.js.map +0 -1
  442. package/lib/module/components/tabs/screen/TabsScreen.d.js +0 -2
  443. package/lib/module/components/tabs/screen/TabsScreen.d.js.map +0 -1
  444. package/lib/module/components/tabs/screen/TabsScreen.web.js +0 -4
  445. package/lib/module/components/tabs/screen/TabsScreen.web.js.map +0 -1
  446. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +0 -7
  447. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +0 -1
  448. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +0 -7
  449. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +0 -1
  450. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +0 -7
  451. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +0 -1
  452. package/src/components/stack/header/StackHeaderConfig.d.ts +0 -22
  453. package/src/components/stack/header/StackHeaderConfig.web.tsx +0 -5
  454. package/src/components/tabs/host/TabsHost.d.ts +0 -12
  455. package/src/components/tabs/screen/TabsScreen.d.ts +0 -12
  456. /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
@@ -3,31 +3,50 @@
3
3
  #import <UIKit/UIKit.h>
4
4
  #import "RNSOrientationProviding.h"
5
5
  #import "RNSReactMountingTransactionObserving.h"
6
+ #import "RNSSplitHostProviders.h"
6
7
 
7
- @class RNSSplitHostComponentView;
8
+ @class RNSSplitHostController;
8
9
 
9
10
  NS_ASSUME_NONNULL_BEGIN
10
11
 
12
+ /**
13
+ * @protocol RNSSplitHostControllerEventsDelegate
14
+ * @brief Receives UISplitViewController lifecycle notifications from the Split host controller.
15
+ */
16
+ @protocol RNSSplitHostControllerEventsDelegate <NSObject>
17
+
18
+ - (void)splitHostControllerDidCollapse:(RNSSplitHostController *)controller;
19
+ - (void)splitHostControllerDidExpand:(RNSSplitHostController *)controller;
20
+ - (void)splitHostController:(RNSSplitHostController *)controller
21
+ willChangeDisplayModeFrom:(UISplitViewControllerDisplayMode)fromDisplayMode
22
+ to:(UISplitViewControllerDisplayMode)toDisplayMode;
23
+ - (void)splitHostControllerDidHideInspector:(RNSSplitHostController *)controller;
24
+
25
+ @end
26
+
11
27
  /**
12
28
  * @class RNSSplitHostController
13
29
  * @brief A controller associated with the RN native component representing Split host.
14
30
  *
15
- * Manages a collection of RNSSplitScreenComponentView instances,
16
- * synchronizes appearance settings with props, observes component lifecycle, and emits events.
31
+ * Installs the column controllers, synchronizes appearance settings with the configuration exposed by the providers,
32
+ * observes the UISplitViewController lifecycle and reports it to the delegate.
17
33
  */
18
34
  @interface RNSSplitHostController
19
35
  : UISplitViewController <RNSReactMountingTransactionObserving, RNSOrientationProviding>
20
36
 
37
+ @property (nonatomic, weak, nullable) id<RNSSplitHostControllerEventsDelegate> eventsDelegate;
38
+ @property (nonatomic, weak, nullable) id<RNSSplitHostAppearanceProvider> appearanceProvider;
39
+ @property (nonatomic, weak, nullable) id<RNSSplitHostBehaviorProvider> behaviorProvider;
40
+ @property (nonatomic, weak, nullable) id<RNSSplitHostColumnsProvider> columnsProvider;
41
+
21
42
  /**
22
43
  * @brief Initializes the Split host controller with provided style.
23
44
  *
24
45
  * The style for the Split component can be passed only in the initialization method and cannot be changed dynamically.
25
46
  *
26
- * @param splitHostComponentView The view managed by this controller.
27
47
  * @param numberOfColumns Expected number of visible columns.
28
48
  */
29
- - (instancetype)initWithSplitHostComponentView:(RNSSplitHostComponentView *)splitHostComponentView
30
- numberOfColumns:(NSInteger)numberOfColumns;
49
+ - (instancetype)initWithNumberOfColumns:(NSInteger)numberOfColumns;
31
50
 
32
51
  #pragma mark - Signals
33
52
 
@@ -4,15 +4,13 @@
4
4
  #import "RNSDefines.h"
5
5
  #import "RNSSplitAppearanceApplicator.h"
6
6
  #import "RNSSplitAppearanceCoordinator.h"
7
- #import "RNSSplitHostComponentView.h"
8
7
  #import "RNSSplitNavigationController.h"
9
8
  #import "RNSSplitNavigationControllerFrameOriginChangeDelegate.h"
10
- #import "RNSSplitScreenComponentView.h"
11
9
  #import "RNSSplitScreenController.h"
12
10
 
13
- static const NSInteger minNumberOfColumns = 2;
14
- static const NSInteger maxNumberOfColumns = 3;
15
- static const NSInteger maxNumberOfInspectors = 1;
11
+ [[maybe_unused]] static const NSInteger minNumberOfColumns = 2;
12
+ [[maybe_unused]] static const NSInteger maxNumberOfColumns = 3;
13
+ [[maybe_unused]] static const NSInteger maxNumberOfInspectors = 1;
16
14
 
17
15
  @interface RNSSplitHostController () <UISplitViewControllerDelegate,
18
16
  RNSSplitNavigationControllerFrameOriginChangeDelegate>
@@ -24,8 +22,6 @@ static const NSInteger maxNumberOfInspectors = 1;
24
22
  RNSSplitAppearanceCoordinator *_splitAppearanceCoordinator;
25
23
  RNSSplitAppearanceApplicator *_splitAppearanceApplicator;
26
24
 
27
- RNSSplitHostComponentView *_splitHostComponentView;
28
-
29
25
  /**
30
26
  * This variable is keeping the value of how many columns were set in the initial render. It's used for validation,
31
27
  * because Split doesn't support changing number of columns dynamically.
@@ -43,11 +39,9 @@ static const NSInteger maxNumberOfInspectors = 1;
43
39
  NSMutableSet<NSNumber *> *_visibleColumns;
44
40
  }
45
41
 
46
- - (instancetype)initWithSplitHostComponentView:(RNSSplitHostComponentView *)splitHostComponentView
47
- numberOfColumns:(NSInteger)numberOfColumns
42
+ - (instancetype)initWithNumberOfColumns:(NSInteger)numberOfColumns
48
43
  {
49
44
  if (self = [super initWithStyle:[RNSSplitHostController styleByNumberOfColumns:numberOfColumns]]) {
50
- _splitHostComponentView = splitHostComponentView;
51
45
  _splitAppearanceCoordinator = [RNSSplitAppearanceCoordinator new];
52
46
  _splitAppearanceApplicator = [RNSSplitAppearanceApplicator new];
53
47
  _fixedColumnsCount = numberOfColumns;
@@ -60,11 +54,6 @@ static const NSInteger maxNumberOfInspectors = 1;
60
54
  return self;
61
55
  }
62
56
 
63
- - (RNSSplitHostComponentEventEmitter *)reactEventEmitter
64
- {
65
- return [_splitHostComponentView reactEventEmitter];
66
- }
67
-
68
57
  #pragma mark - Signals
69
58
 
70
59
  - (void)setNeedsUpdateOfChildViewControllers
@@ -114,18 +103,16 @@ static const NSInteger maxNumberOfInspectors = 1;
114
103
  RCTAssert(_needsChildViewControllersUpdate,
115
104
  @"[RNScreens] Child view controller must be invalidated when update is forced!");
116
105
 
117
- NSArray<RNSSplitScreenComponentView *> *currentColumns = [self filterSubviewsOfType:RNSSplitScreenColumnTypeColumn
118
- in:self.splitReactSubviews];
119
- NSArray<RNSSplitScreenComponentView *> *currentInspectors =
120
- [self filterSubviewsOfType:RNSSplitScreenColumnTypeInspector in:self.splitReactSubviews];
106
+ NSArray<RNSSplitScreenController *> *currentColumns = [self.columnsProvider columnControllers];
107
+ NSArray<RNSSplitScreenController *> *currentInspectors = [self.columnsProvider inspectorControllers];
121
108
 
122
109
  [self validateColumns:currentColumns];
123
110
  [self validateInspectors:currentInspectors];
124
111
 
125
112
  NSMutableArray<RNSSplitNavigationController *> *currentViewControllers =
126
113
  [NSMutableArray arrayWithCapacity:currentColumns.count];
127
- for (RNSSplitScreenComponentView *column in currentColumns) {
128
- [currentViewControllers addObject:[[RNSSplitNavigationController alloc] initWithRootViewController:column.controller
114
+ for (RNSSplitScreenController *columnController in currentColumns) {
115
+ [currentViewControllers addObject:[[RNSSplitNavigationController alloc] initWithRootViewController:columnController
129
116
  frameOriginChangeDelegate:self]];
130
117
  }
131
118
 
@@ -142,7 +129,7 @@ static const NSInteger maxNumberOfInspectors = 1;
142
129
 
143
130
  - (void)updateSplitAppearanceIfNeeded
144
131
  {
145
- [_splitAppearanceApplicator updateAppearanceIfNeeded:_splitHostComponentView
132
+ [_splitAppearanceApplicator updateAppearanceIfNeeded:self.appearanceProvider
146
133
  splitHostController:self
147
134
  appearanceCoordinator:_splitAppearanceCoordinator];
148
135
  }
@@ -184,29 +171,6 @@ static const NSInteger maxNumberOfInspectors = 1;
184
171
  }
185
172
  }
186
173
 
187
- /**
188
- * @brief Filters the given subviews array by a specific column type.
189
- *
190
- * Iterates over the provided subviews array and returns only the elements that match
191
- * the specified RNSSplitScreenColumnType (e.g., .column, .inspector).
192
- *
193
- * @param type The target RNSSplitScreenColumnType to filter for.
194
- * @param subviews The array of RNSSplitScreenComponentView elements to filter.
195
- * @return A filtered array of RNSSplitScreenComponentView objects with the specified column type.
196
- */
197
- - (NSArray<RNSSplitScreenComponentView *> *)filterSubviewsOfType:(RNSSplitScreenColumnType)type
198
- in:(NSArray<RNSSplitScreenComponentView *> *)subviews
199
- {
200
- NSMutableArray<RNSSplitScreenComponentView *> *filteredSubviews = [NSMutableArray array];
201
- for (RNSSplitScreenComponentView *subview in subviews) {
202
- if (subview.columnType == type) {
203
- [filteredSubviews addObject:subview];
204
- }
205
- }
206
-
207
- return filteredSubviews;
208
- }
209
-
210
174
  #pragma mark - Public setters
211
175
 
212
176
  - (void)toggleSplitViewInspector:(BOOL)showInspector
@@ -278,7 +242,7 @@ static const NSInteger maxNumberOfInspectors = 1;
278
242
 
279
243
  - (RNSOrientation)evaluateOrientation
280
244
  {
281
- return _splitHostComponentView.orientation;
245
+ return self.appearanceProvider.orientation;
282
246
  }
283
247
 
284
248
  #pragma mark - Validators
@@ -286,17 +250,12 @@ static const NSInteger maxNumberOfInspectors = 1;
286
250
  /** @brief Validates that child structure meets required constraints defined for columns and the inspector. */
287
251
  - (void)validateSplitViewHierarchy
288
252
  {
289
- NSArray<RNSSplitScreenComponentView *> *columns = [self filterSubviewsOfType:RNSSplitScreenColumnTypeColumn
290
- in:self.splitReactSubviews];
291
- NSArray<RNSSplitScreenComponentView *> *inspectors = [self filterSubviewsOfType:RNSSplitScreenColumnTypeInspector
292
- in:self.splitReactSubviews];
293
-
294
- [self validateColumns:columns];
295
- [self validateInspectors:inspectors];
253
+ [self validateColumns:[self.columnsProvider columnControllers]];
254
+ [self validateInspectors:[self.columnsProvider inspectorControllers]];
296
255
  }
297
256
 
298
257
  /** @brief Ensures that number of columns is valid and hasn't changed dynamically. */
299
- - (void)validateColumns:(NSArray<RNSSplitScreenComponentView *> *)columns
258
+ - (void)validateColumns:(NSArray<RNSSplitScreenController *> *)columns
300
259
  {
301
260
  RCTAssert((NSInteger)columns.count >= minNumberOfColumns && (NSInteger)columns.count <= maxNumberOfColumns,
302
261
  @"[RNScreens] Split can only have from %ld to %ld columns",
@@ -308,7 +267,7 @@ static const NSInteger maxNumberOfInspectors = 1;
308
267
  }
309
268
 
310
269
  /** @brief Ensures that at most one inspector is present. */
311
- - (void)validateInspectors:(NSArray<RNSSplitScreenComponentView *> *)inspectors
270
+ - (void)validateInspectors:(NSArray<RNSSplitScreenController *> *)inspectors
312
271
  {
313
272
  RCTAssert((NSInteger)inspectors.count <= maxNumberOfInspectors,
314
273
  @"[RNScreens] Split can only have %ld inspector",
@@ -356,33 +315,6 @@ static const NSInteger maxNumberOfInspectors = 1;
356
315
  return splitScreenControllers;
357
316
  }
358
317
 
359
- /**
360
- * @brief Gets all React subviews of type RNSSplitScreenComponentView.
361
- *
362
- * Accesses all the subviews from the reactSubviews collection. It asserts that each one is a
363
- * RNSSplitScreenComponentView.
364
- *
365
- * @return An array of RNSSplitScreenComponentView subviews which are children of the host component view.
366
- */
367
- - (NSArray<RNSSplitScreenComponentView *> *)splitReactSubviews
368
- {
369
- NSArray<RNSSplitScreenComponentView *> *reactSubviews = [_splitHostComponentView reactSubviews];
370
- NSMutableArray<RNSSplitScreenComponentView *> *splitReactSubviews =
371
- [NSMutableArray arrayWithCapacity:reactSubviews.count];
372
-
373
- for (RNSSplitScreenComponentView *subview in reactSubviews) {
374
- RCTAssert([subview isKindOfClass:RNSSplitScreenComponentView.class],
375
- @"[RNScreens] Expected RNSSplitScreenComponentView but got %@",
376
- NSStringFromClass(subview.class));
377
-
378
- if ([subview isKindOfClass:RNSSplitScreenComponentView.class]) {
379
- [splitReactSubviews addObject:subview];
380
- }
381
- }
382
-
383
- return splitReactSubviews;
384
- }
385
-
386
318
  #pragma mark - RNSSplitNavigationControllerFrameOriginChangeDelegate
387
319
 
388
320
  /**
@@ -407,16 +339,16 @@ static const NSInteger maxNumberOfInspectors = 1;
407
339
  *
408
340
  * Attaches a view controller for the inspector column.
409
341
  *
410
- * @param inspectors An array of inspector-type RNSSplitScreenComponentView subviews.
342
+ * @param inspectors An array of controllers of the inspector-type columns.
411
343
  */
412
- - (void)maybeSetupInspector:(NSArray<RNSSplitScreenComponentView *> *)inspectors
344
+ - (void)maybeSetupInspector:(NSArray<RNSSplitScreenController *> *)inspectors
413
345
  {
414
346
  #if !TARGET_OS_TV
415
347
  if (@available(iOS 26.0, *)) {
416
- RNSSplitScreenComponentView *inspector = inspectors.firstObject;
348
+ RNSSplitScreenController *inspector = inspectors.firstObject;
417
349
  if (inspector != nil) {
418
350
  RNSSplitNavigationController *inspectorViewController =
419
- [[RNSSplitNavigationController alloc] initWithRootViewController:inspector.controller];
351
+ [[RNSSplitNavigationController alloc] initWithRootViewController:inspector];
420
352
  [self setViewController:inspectorViewController forColumn:UISplitViewControllerColumnInspector];
421
353
  }
422
354
  }
@@ -469,12 +401,12 @@ static const NSInteger maxNumberOfInspectors = 1;
469
401
 
470
402
  - (void)splitViewControllerDidCollapse:(UISplitViewController *)svc
471
403
  {
472
- [[self reactEventEmitter] emitOnCollapse];
404
+ [self.eventsDelegate splitHostControllerDidCollapse:self];
473
405
  }
474
406
 
475
407
  - (void)splitViewControllerDidExpand:(UISplitViewController *)svc
476
408
  {
477
- [[self reactEventEmitter] emitOnExpand];
409
+ [self.eventsDelegate splitHostControllerDidExpand:self];
478
410
  }
479
411
 
480
412
  #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
@@ -508,7 +440,7 @@ static const NSInteger maxNumberOfInspectors = 1;
508
440
  UIViewController *inspectorViewController = [self viewControllerForColumn:UISplitViewControllerColumnInspector];
509
441
  if (inspectorViewController != nil) {
510
442
  if (inspectorViewController.view.window == nil) {
511
- [[self reactEventEmitter] emitOnHideInspector];
443
+ [self.eventsDelegate splitHostControllerDidHideInspector:self];
512
444
  }
513
445
  }
514
446
  }
@@ -521,7 +453,7 @@ static const NSInteger maxNumberOfInspectors = 1;
521
453
  willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode
522
454
  {
523
455
  if (self.displayMode != displayMode) {
524
- [[self reactEventEmitter] emitOnDisplayModeWillChangeFrom:self.displayMode to:displayMode];
456
+ [self.eventsDelegate splitHostController:self willChangeDisplayModeFrom:self.displayMode to:displayMode];
525
457
  }
526
458
 
527
459
  __weak auto weakSelf = self;
@@ -550,8 +482,8 @@ static const NSInteger maxNumberOfInspectors = 1;
550
482
  - (UISplitViewControllerColumn)splitViewController:(UISplitViewController *)svc
551
483
  topColumnForCollapsingToProposedTopColumn:(UISplitViewControllerColumn)proposedTopColumn
552
484
  {
553
- if (_splitHostComponentView.hasCustomTopColumnForCollapsing) {
554
- return _splitHostComponentView.topColumnForCollapsingColumn;
485
+ if (self.behaviorProvider.hasCustomTopColumnForCollapsing) {
486
+ return self.behaviorProvider.topColumnForCollapsingColumn;
555
487
  }
556
488
 
557
489
  return proposedTopColumn;
@@ -0,0 +1,67 @@
1
+ #pragma once
2
+
3
+ #import <UIKit/UIKit.h>
4
+ #import "RNSDefines.h"
5
+ #import "RNSEnums.h"
6
+
7
+ NS_ASSUME_NONNULL_BEGIN
8
+
9
+ @class RNSSplitScreenController;
10
+
11
+ /**
12
+ * @brief Configuration of the UISplitViewController appearance.
13
+ */
14
+ @protocol RNSSplitHostAppearanceProvider <NSObject>
15
+
16
+ - (UISplitViewControllerSplitBehavior)preferredSplitBehavior;
17
+ - (UISplitViewControllerPrimaryEdge)primaryEdge;
18
+ - (UISplitViewControllerDisplayMode)preferredDisplayMode;
19
+ - (UISplitViewControllerDisplayModeButtonVisibility)displayModeButtonVisibility;
20
+ #if !TARGET_OS_TV
21
+ - (UISplitViewControllerBackgroundStyle)primaryBackgroundStyle;
22
+ #endif // !TARGET_OS_TV
23
+ - (BOOL)presentsWithGesture;
24
+ - (BOOL)showSecondaryToggleButton;
25
+ - (BOOL)showInspector;
26
+
27
+ - (double)minimumPrimaryColumnWidth;
28
+ - (double)maximumPrimaryColumnWidth;
29
+ - (double)preferredPrimaryColumnWidthOrFraction;
30
+ - (double)minimumSupplementaryColumnWidth;
31
+ - (double)maximumSupplementaryColumnWidth;
32
+ - (double)preferredSupplementaryColumnWidthOrFraction;
33
+
34
+ #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
35
+ - (double)minimumSecondaryColumnWidth;
36
+ - (double)preferredSecondaryColumnWidthOrFraction;
37
+ - (double)minimumInspectorColumnWidth;
38
+ - (double)maximumInspectorColumnWidth;
39
+ - (double)preferredInspectorColumnWidthOrFraction;
40
+ #endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
41
+
42
+ - (RNSOrientation)orientation;
43
+ - (UIUserInterfaceStyle)colorScheme;
44
+
45
+ @end
46
+
47
+ /**
48
+ * @brief Behavior consulted by the UISplitViewController delegate callbacks.
49
+ */
50
+ @protocol RNSSplitHostBehaviorProvider <NSObject>
51
+
52
+ - (BOOL)hasCustomTopColumnForCollapsing;
53
+ - (UISplitViewControllerColumn)topColumnForCollapsingColumn;
54
+
55
+ @end
56
+
57
+ /**
58
+ * @brief Controllers of the columns mounted in the host, in React order, split by column type.
59
+ */
60
+ @protocol RNSSplitHostColumnsProvider <NSObject>
61
+
62
+ - (NSArray<RNSSplitScreenController *> *)columnControllers;
63
+ - (NSArray<RNSSplitScreenController *> *)inspectorControllers;
64
+
65
+ @end
66
+
67
+ NS_ASSUME_NONNULL_END
@@ -3,8 +3,6 @@
3
3
  #import "RNSEnums.h"
4
4
  #import "RNSReactBaseView.h"
5
5
  #import "RNSSafeAreaProviding.h"
6
- #import "RNSSplitScreenComponentEventEmitter.h"
7
- #import "RNSSplitScreenShadowStateProxy.h"
8
6
 
9
7
  NS_ASSUME_NONNULL_BEGIN
10
8
 
@@ -25,26 +23,6 @@ NS_ASSUME_NONNULL_BEGIN
25
23
 
26
24
  @end
27
25
 
28
- #pragma mark - ShadowTreeState
29
-
30
- /**
31
- * @category ShadowTreeState
32
- * @brief Interactions between the host component and the associated ShadowNode.
33
- */
34
- @interface RNSSplitScreenComponentView ()
35
-
36
- /**
37
- * @brief Getter for the proxy object that interfaces with the Shadow Tree state for this screen.
38
- *
39
- * The ShadowStateProxy is the object that's responsible for sending layout updates coming from the Host tree to the
40
- * ShadowTree.
41
- *
42
- * @return A pointer to a RNSSplitScreenShadowStateProxy instance.
43
- */
44
- - (nonnull RNSSplitScreenShadowStateProxy *)shadowStateProxy;
45
-
46
- @end
47
-
48
26
  #pragma mark - Props
49
27
 
50
28
  /**
@@ -60,21 +38,4 @@ NS_ASSUME_NONNULL_BEGIN
60
38
 
61
39
  @end
62
40
 
63
- #pragma mark - Events
64
-
65
- /**
66
- * @category Events
67
- * @brief APIs related to event emission to React Native.
68
- */
69
- @interface RNSSplitScreenComponentView ()
70
-
71
- /**
72
- * @brief Getter for the component's event emitter used for emitting events to React.
73
- *
74
- * @return A pointer to RNSSplitScreenComponentEventEmitter instance.
75
- */
76
- - (nonnull RNSSplitScreenComponentEventEmitter *)reactEventEmitter;
77
-
78
- @end
79
-
80
41
  NS_ASSUME_NONNULL_END
@@ -1,13 +1,18 @@
1
1
  #import "RNSSplitScreenComponentView.h"
2
2
  #import <React/RCTAssert.h>
3
3
  #import <React/RCTSurfaceTouchHandler.h>
4
- #import <rnscreens/RNSSplitScreenComponentDescriptor.h>
5
- #import "RNSConversions.h"
4
+ #import <react/renderer/components/rnscreens/RNSSplitScreenComponentDescriptor.h>
5
+ #import "RNSConversions-SplitView.h"
6
6
  #import "RNSSafeAreaViewNotifications.h"
7
+ #import "RNSSplitScreenComponentEventEmitter.h"
7
8
  #import "RNSSplitScreenController.h"
9
+ #import "RNSSplitScreenShadowStateProxy.h"
8
10
 
9
11
  namespace react = facebook::react;
10
12
 
13
+ @interface RNSSplitScreenComponentView () <RNSSplitScreenControllerDelegate>
14
+ @end
15
+
11
16
  @implementation RNSSplitScreenComponentView {
12
17
  RNSSplitScreenComponentEventEmitter *_Nonnull _reactEventEmitter;
13
18
  RNSSplitScreenController *_Nullable _controller;
@@ -49,6 +54,7 @@ namespace react = facebook::react;
49
54
  {
50
55
  _controller = [[RNSSplitScreenController alloc] initWithSplitScreenComponentView:self];
51
56
  _controller.view = self;
57
+ _controller.delegate = self;
52
58
  }
53
59
 
54
60
  - (void)didMoveToWindow
@@ -108,20 +114,31 @@ namespace react = facebook::react;
108
114
  [super layoutSubviews];
109
115
  }
110
116
 
111
- #pragma mark - ShadowTreeState
117
+ #pragma mark - RNSSplitScreenControllerDelegate
118
+
119
+ - (void)splitScreenController:(RNSSplitScreenController *)controller didChangeColumnFrame:(CGRect)frame
120
+ {
121
+ [_shadowStateProxy updateShadowStateWithFrame:frame];
122
+ }
123
+
124
+ - (void)splitScreenControllerWillAppear:(RNSSplitScreenController *)controller
125
+ {
126
+ [_reactEventEmitter emitOnWillAppear];
127
+ }
112
128
 
113
- - (nonnull RNSSplitScreenShadowStateProxy *)shadowStateProxy
129
+ - (void)splitScreenControllerDidAppear:(RNSSplitScreenController *)controller
114
130
  {
115
- RCTAssert(_shadowStateProxy != nil, @"[RNScreens] Attempt to access uninitialized _shadowStateProxy");
116
- return _shadowStateProxy;
131
+ [_reactEventEmitter emitOnDidAppear];
117
132
  }
118
133
 
119
- #pragma mark - Events
134
+ - (void)splitScreenControllerWillDisappear:(RNSSplitScreenController *)controller
135
+ {
136
+ [_reactEventEmitter emitOnWillDisappear];
137
+ }
120
138
 
121
- - (nonnull RNSSplitScreenComponentEventEmitter *)reactEventEmitter
139
+ - (void)splitScreenControllerDidDisappear:(RNSSplitScreenController *)controller
122
140
  {
123
- RCTAssert(_reactEventEmitter != nil, @"[RNScreens] Attempt to access uninitialized _reactEventEmitter");
124
- return _reactEventEmitter;
141
+ [_reactEventEmitter emitOnDidDisappear];
125
142
  }
126
143
 
127
144
  #pragma mark - RNSSafeAreaProviding
@@ -3,18 +3,41 @@
3
3
  #import <UIKit/UIKit.h>
4
4
 
5
5
  @class RNSSplitScreenComponentView;
6
+ @class RNSSplitScreenController;
6
7
 
7
8
  NS_ASSUME_NONNULL_BEGIN
8
9
 
10
+ /**
11
+ * @protocol RNSSplitScreenControllerDelegate
12
+ * @brief Receives layout and lifecycle notifications of a Split column from its controller.
13
+ */
14
+ @protocol RNSSplitScreenControllerDelegate <NSObject>
15
+
16
+ /**
17
+ * @brief Called whenever the column frame changes.
18
+ *
19
+ * @param frame The column frame in the coordinate space of the SplitHost controller's view, or the column view frame
20
+ * as is when the column is presented outside the SplitHost subtree (e.g. the inspector as a modal).
21
+ */
22
+ - (void)splitScreenController:(RNSSplitScreenController *)controller didChangeColumnFrame:(CGRect)frame;
23
+
24
+ - (void)splitScreenControllerWillAppear:(RNSSplitScreenController *)controller;
25
+ - (void)splitScreenControllerDidAppear:(RNSSplitScreenController *)controller;
26
+ - (void)splitScreenControllerWillDisappear:(RNSSplitScreenController *)controller;
27
+ - (void)splitScreenControllerDidDisappear:(RNSSplitScreenController *)controller;
28
+
29
+ @end
30
+
9
31
  /**
10
32
  * @class RNSSplitScreenController
11
33
  * @brief A UIViewController subclass that manages a Split column in a UISplitViewController.
12
34
  *
13
- * Associated with a RNSSplitScreenComponentView, it handles layout synchronization with the
14
- * Shadow Tree, emits React lifecycle events, and interacts with the SplitHost hierarchy.
35
+ * It observes the column layout and lifecycle and reports them to its delegate.
15
36
  */
16
37
  @interface RNSSplitScreenController : UIViewController
17
38
 
39
+ @property (nonatomic, weak, nullable) id<RNSSplitScreenControllerDelegate> delegate;
40
+
18
41
  - (instancetype)initWithSplitScreenComponentView:(RNSSplitScreenComponentView *)splitScreenComponentView;
19
42
 
20
43
  #pragma mark - Signals
@@ -33,7 +56,7 @@ NS_ASSUME_NONNULL_BEGIN
33
56
  #pragma mark - Layout
34
57
 
35
58
  /**
36
- * @brief Request ShadowNode state update when the Split screen frame origin has changed.
59
+ * @brief Reports the column frame change after the Split repositioned its columns.
37
60
  *
38
61
  * @param splitViewController The UISplitViewController whose layout positioning changed, represented by
39
62
  * RNSSplitHostController.
@@ -18,16 +18,6 @@
18
18
  return self;
19
19
  }
20
20
 
21
- - (RNSSplitScreenShadowStateProxy *)shadowStateProxy
22
- {
23
- return [_splitScreenComponentView shadowStateProxy];
24
- }
25
-
26
- - (RNSSplitScreenComponentEventEmitter *)reactEventEmitter
27
- {
28
- return [_splitScreenComponentView reactEventEmitter];
29
- }
30
-
31
21
  /**
32
22
  * @brief Searching for the SplitHost controller
33
23
  *
@@ -69,36 +59,29 @@
69
59
  {
70
60
  [super viewDidLayoutSubviews];
71
61
 
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
62
  // For modals, which are presented outside the SplitHost subtree (and RN hierarchy),
85
63
  // we're attaching our touch handler and we don't need to apply any offset corrections,
86
64
  // because it's positioned relatively to our RNSSplitScreenComponentView
87
65
  if (![self isInSplitHostSubtree]) {
88
- [[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView];
66
+ [_delegate splitScreenController:self didChangeColumnFrame:self.view.frame];
89
67
  return;
90
68
  }
91
69
 
92
70
  UIView *ancestorView = [self findSplitHostController].view;
93
71
  RCTAssert(ancestorView != nil, @"[RNScreens] Expected to find RNSSplitHost component for RNSSplitScreen component");
94
72
 
95
- [[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView inContextOfAncestorView:ancestorView];
73
+ [self reportColumnFrameInContextOfView:ancestorView];
96
74
  }
97
75
 
98
76
  - (void)columnPositioningDidChangeInSplitViewController:(UISplitViewController *)splitViewController
99
77
  {
100
- [[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView
101
- inContextOfAncestorView:splitViewController.view];
78
+ [self reportColumnFrameInContextOfView:splitViewController.view];
79
+ }
80
+
81
+ - (void)reportColumnFrameInContextOfView:(UIView *)ancestorView
82
+ {
83
+ CGRect frame = [self.view convertRect:self.view.frame toView:ancestorView];
84
+ [_delegate splitScreenController:self didChangeColumnFrame:frame];
102
85
  }
103
86
 
104
87
  #pragma mark - Events
@@ -106,25 +89,25 @@
106
89
  - (void)viewWillAppear:(BOOL)animated
107
90
  {
108
91
  [super viewWillAppear:animated];
109
- [[self reactEventEmitter] emitOnWillAppear];
92
+ [_delegate splitScreenControllerWillAppear:self];
110
93
  }
111
94
 
112
95
  - (void)viewDidAppear:(BOOL)animated
113
96
  {
114
97
  [super viewDidAppear:animated];
115
- [[self reactEventEmitter] emitOnDidAppear];
98
+ [_delegate splitScreenControllerDidAppear:self];
116
99
  }
117
100
 
118
101
  - (void)viewWillDisappear:(BOOL)animated
119
102
  {
120
103
  [super viewWillDisappear:animated];
121
- [[self reactEventEmitter] emitOnWillDisappear];
104
+ [_delegate splitScreenControllerWillDisappear:self];
122
105
  }
123
106
 
124
107
  - (void)viewDidDisappear:(BOOL)animated
125
108
  {
126
109
  [super viewDidDisappear:animated];
127
- [[self reactEventEmitter] emitOnDidDisappear];
110
+ [_delegate splitScreenControllerDidDisappear:self];
128
111
  }
129
112
 
130
113
  @end