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
@@ -7,43 +7,33 @@
7
7
  #import "RNSFormSheetUpdateCoordinator.h"
8
8
  #import "RNSFormSheetUpdateFlags.h"
9
9
 
10
- @implementation RNSFormSheetConfigurationApplicator {
11
- BOOL _initialDetentApplied;
12
- }
13
-
14
- - (instancetype)init
15
- {
16
- if (self = [super init]) {
17
- _initialDetentApplied = NO;
18
- }
19
- return self;
20
- }
10
+ @implementation RNSFormSheetConfigurationApplicator
21
11
 
22
- - (void)resetInitialDetent
23
- {
24
- _initialDetentApplied = NO;
25
- }
26
-
27
- - (void)applyConfigurationIfNeededWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
12
+ + (void)applyConfigurationIfNeededWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
28
13
  behaviorProvider:(id<RNSFormSheetBehaviorProvider>)behaviorProvider
29
14
  controller:(RNSFormSheetContentController *)controller
30
15
  coordinator:(RNSFormSheetUpdateCoordinator *)coordinator
31
16
  {
32
- RNSFormSheetUpdateFlags configFlags = RNSFormSheetUpdateFlagsAppearance | RNSFormSheetUpdateFlagsBehavior;
17
+ RNSFormSheetUpdateFlags configFlags =
18
+ RNSFormSheetUpdateFlagsAppearance | RNSFormSheetUpdateFlagsBehavior | RNSFormSheetUpdateFlagsInitialDetent;
19
+
20
+ BOOL shouldSelectInitialDetent = [coordinator needsAny:RNSFormSheetUpdateFlagsInitialDetent];
33
21
 
34
22
  [coordinator updateIfAnyNeeded:configFlags
35
23
  performOperations:^{
36
24
  [self applyConfigurationWithAppearanceProvider:appearanceProvider
37
25
  behaviorProvider:behaviorProvider
38
- controller:controller];
26
+ controller:controller
27
+ selectInitialDetent:shouldSelectInitialDetent];
39
28
  }];
40
29
  }
41
30
 
42
31
  #pragma mark - Updaters
43
32
 
44
- - (void)applyConfigurationWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
33
+ + (void)applyConfigurationWithAppearanceProvider:(id<RNSFormSheetAppearanceProvider>)appearanceProvider
45
34
  behaviorProvider:(id<RNSFormSheetBehaviorProvider>)behaviorProvider
46
35
  controller:(RNSFormSheetContentController *)controller
36
+ selectInitialDetent:(BOOL)selectInitialDetent
47
37
  {
48
38
  #if !TARGET_OS_TV
49
39
  UISheetPresentationController *sheet = controller.sheetPresentationController;
@@ -57,11 +47,10 @@
57
47
  [RNSFormSheetDetentResolver buildSheetDetentsWithBehaviorProvider:behaviorProvider];
58
48
 
59
49
  UISheetPresentationControllerDetentIdentifier initialDetentIdentifier = nil;
60
- if (!_initialDetentApplied) {
50
+ if (selectInitialDetent) {
61
51
  initialDetentIdentifier =
62
52
  [RNSFormSheetDetentResolver initialDetentIdentifierForDetents:nativeDetents
63
53
  atRequestedIndex:behaviorProvider.initialDetentIndex];
64
- _initialDetentApplied = YES;
65
54
  }
66
55
 
67
56
  BOOL prefersScrollingExpands = behaviorProvider.prefersScrollingExpandsWhenScrolledToEdge;
@@ -43,7 +43,7 @@ NS_ASSUME_NONNULL_BEGIN
43
43
  - (void)setNeedsPresentationUpdate;
44
44
  - (void)setNeedsBehaviorUpdate;
45
45
  - (void)setNeedsAppearanceUpdate;
46
- - (void)setNeedsInitialDetentReset;
46
+ - (void)setNeedsInitialDetentUpdate;
47
47
 
48
48
  #pragma mark - Updates
49
49
 
@@ -20,12 +20,9 @@
20
20
 
21
21
  @implementation RNSFormSheetContentController {
22
22
  RNSFormSheetUpdateCoordinator *_Nonnull _updateCoordinator;
23
- RNSFormSheetConfigurationApplicator *_Nonnull _configurationApplicator;
24
23
  RNSFormSheetPresentationManager *_Nonnull _presentationManager;
25
24
 
26
25
  UITapGestureRecognizer *_Nullable _backdropTapGestureRecognizer;
27
-
28
- BOOL _needsInitialDetentReset;
29
26
  }
30
27
 
31
28
  - (instancetype)init
@@ -34,10 +31,7 @@
34
31
  self.modalPresentationStyle = UIModalPresentationFormSheet;
35
32
 
36
33
  _updateCoordinator = [RNSFormSheetUpdateCoordinator new];
37
- _configurationApplicator = [RNSFormSheetConfigurationApplicator new];
38
34
  _presentationManager = [RNSFormSheetPresentationManager new];
39
-
40
- _needsInitialDetentReset = NO;
41
35
  }
42
36
  return self;
43
37
  }
@@ -142,7 +136,7 @@
142
136
  // We must force a full configuration update for this new instance.
143
137
  [self setNeedsAppearanceUpdate];
144
138
  [self setNeedsBehaviorUpdate];
145
- [self setNeedsInitialDetentReset];
139
+ [self setNeedsInitialDetentUpdate];
146
140
  [self updateConfigurationIfNeeded];
147
141
  }
148
142
 
@@ -160,15 +154,10 @@
160
154
  return;
161
155
  }
162
156
 
163
- if (_needsInitialDetentReset) {
164
- _needsInitialDetentReset = NO;
165
- [_configurationApplicator resetInitialDetent];
166
- }
167
-
168
- [_configurationApplicator applyConfigurationIfNeededWithAppearanceProvider:appearanceProvider
169
- behaviorProvider:behaviorProvider
170
- controller:self
171
- coordinator:_updateCoordinator];
157
+ [RNSFormSheetConfigurationApplicator applyConfigurationIfNeededWithAppearanceProvider:appearanceProvider
158
+ behaviorProvider:behaviorProvider
159
+ controller:self
160
+ coordinator:_updateCoordinator];
172
161
  }
173
162
 
174
163
  #pragma mark - Signals
@@ -188,9 +177,9 @@
188
177
  [_updateCoordinator setNeeds:RNSFormSheetUpdateFlagsBehavior];
189
178
  }
190
179
 
191
- - (void)setNeedsInitialDetentReset
180
+ - (void)setNeedsInitialDetentUpdate
192
181
  {
193
- _needsInitialDetentReset = YES;
182
+ [_updateCoordinator setNeeds:RNSFormSheetUpdateFlagsInitialDetent];
194
183
  }
195
184
 
196
185
  #pragma mark - Updates
@@ -13,7 +13,7 @@
13
13
  #import <React/RCTSurfaceTouchHandler.h>
14
14
  #import <react/renderer/components/rnscreens/EventEmitters.h>
15
15
  #import <react/renderer/components/rnscreens/Props.h>
16
- #import <rnscreens/RNSFormSheetHostComponentDescriptor.h>
16
+ #import <react/renderer/components/rnscreens/RNSFormSheetHostComponentDescriptor.h>
17
17
 
18
18
  namespace react = facebook::react;
19
19
 
@@ -246,9 +246,9 @@ namespace react = facebook::react;
246
246
  // because UIKit destroys the presentationController after the modal is dismissed.
247
247
  [_controller setNeedsAppearanceUpdate];
248
248
  [_controller setNeedsBehaviorUpdate];
249
- // Reset the initial-detent applied flag when reopening so the
250
- // configured initialDetentIndex can be applied again.
251
- [_controller setNeedsInitialDetentReset];
249
+ // Request the configured initialDetentIndex to be selected
250
+ // again on the fresh presentation controller.
251
+ [_controller setNeedsInitialDetentUpdate];
252
252
  }
253
253
  }
254
254
 
@@ -1,8 +1,8 @@
1
1
  #import "RNSFormSheetHostShadowStateProxy.h"
2
2
 
3
3
  #import <React/RCTConversions.h>
4
- #import <rnscreens/RNSFormSheetHostShadowNode.h>
5
- #import <rnscreens/RNSFormSheetHostState.h>
4
+ #import <react/renderer/components/rnscreens/RNSFormSheetHostShadowNode.h>
5
+ #import <react/renderer/components/rnscreens/RNSFormSheetHostState.h>
6
6
 
7
7
  namespace react = facebook::react;
8
8
 
@@ -10,4 +10,7 @@ typedef NS_OPTIONS(NSUInteger, RNSFormSheetUpdateFlags) {
10
10
  RNSFormSheetUpdateFlagsAppearance = 1 << 1,
11
11
  // The sheet's behavioral layout (detents, scrolling config) needs to be re-applied.
12
12
  RNSFormSheetUpdateFlagsBehavior = 1 << 2,
13
+ // The sheet's selected detent needs to be (re)set to the configured `initialDetentIndex`.
14
+ // Requested once per presentation cycle, since UIKit recreates the presentation controller on every present.
15
+ RNSFormSheetUpdateFlagsInitialDetent = 1 << 3,
13
16
  };
@@ -3,19 +3,16 @@
3
3
 
4
4
  #import "RNSSafeAreaViewComponentView.h"
5
5
  #import <React/RCTConversions.h>
6
- #import <React/RCTUtils.h>
7
6
  #import "RNSSafeAreaProviding.h"
8
7
  #import "RNSSafeAreaViewNotifications.h"
9
8
 
10
9
  #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
11
10
  #import <react/renderer/components/rnscreens/Props.h>
12
- #import <rnscreens/RNSSafeAreaViewComponentDescriptor.h>
13
- #import <rnscreens/RNSSafeAreaViewState.h>
11
+ #import <react/renderer/components/rnscreens/RNSSafeAreaViewComponentDescriptor.h>
12
+ #import <react/renderer/components/rnscreens/RNSSafeAreaViewState.h>
14
13
 
15
14
  namespace react = facebook::react;
16
15
 
17
- static BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIEdgeInsets insets2, CGFloat threshold);
18
-
19
16
  #pragma mark - View implementation
20
17
 
21
18
  @implementation RNSSafeAreaViewComponentView {
@@ -87,7 +84,7 @@ static BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIE
87
84
 
88
85
  UIEdgeInsets safeAreaInsets = _providerView.providerSafeAreaInsets;
89
86
 
90
- if (UIEdgeInsetsEqualToEdgeInsetsWithThreshold(safeAreaInsets, _currentSafeAreaInsets, 1.0 / RCTScreenScale())) {
87
+ if (UIEdgeInsetsEqualToEdgeInsets(safeAreaInsets, _currentSafeAreaInsets)) {
91
88
  return;
92
89
  }
93
90
 
@@ -152,14 +149,6 @@ static BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIE
152
149
 
153
150
  @end
154
151
 
155
- #pragma mark - Utility functions
156
-
157
- static BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIEdgeInsets insets2, CGFloat threshold)
158
- {
159
- return ABS(insets1.left - insets2.left) <= threshold && ABS(insets1.right - insets2.right) <= threshold &&
160
- ABS(insets1.top - insets2.top) <= threshold && ABS(insets1.bottom - insets2.bottom) <= threshold;
161
- }
162
-
163
152
  #pragma mark - View class exposure
164
153
 
165
154
  Class<RCTComponentViewProtocol> RNSSafeAreaView(void)
@@ -1,9 +1,6 @@
1
1
  #import "RNSConversions-ScrollViewMarker.h"
2
-
3
2
  #import <React/RCTLog.h>
4
3
 
5
- namespace react = facebook::react;
6
-
7
4
  #define SWITCH_EDGE_EFFECT(X) \
8
5
  switch (edgeEffect) { \
9
6
  using enum react::X; \
@@ -29,6 +26,8 @@ namespace react = facebook::react;
29
26
 
30
27
  namespace rnscreens::conversion {
31
28
 
29
+ namespace react = facebook::react;
30
+
32
31
  EDGE_EFFECT_CONV_FUNC_IMPL(Left);
33
32
  EDGE_EFFECT_CONV_FUNC_IMPL(Top);
34
33
  EDGE_EFFECT_CONV_FUNC_IMPL(Right);
@@ -2,8 +2,8 @@
2
2
 
3
3
  #import <Foundation/Foundation.h>
4
4
  #import "RNSSplitAppearanceCoordinator.h"
5
+ #import "RNSSplitHostProviders.h"
5
6
 
6
- @class RNSSplitHostComponentView;
7
7
  @class RNSSplitHostController;
8
8
 
9
9
  NS_ASSUME_NONNULL_BEGIN
@@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN
12
12
  * @brief - Class responsible for applying all upcoming updates to SplitView.
13
13
  *
14
14
  * This class is synchronizing UISplitViewController configuration props which are affecting the SplitView appearance
15
- * with props passed to RNSSplitHostComponentView from the ElementTree.
15
+ * with the configuration exposed by the appearance provider.
16
16
  */
17
17
  @interface RNSSplitAppearanceApplicator : NSObject
18
18
 
@@ -21,13 +21,13 @@ NS_ASSUME_NONNULL_BEGIN
21
21
  *
22
22
  * It requests calling proper callbacks with batched SplitView updates on the AppearanceCoordinator object
23
23
  *
24
- * @param splitHost The view representing JS component which is sending updates.
24
+ * @param provider The provider of the appearance configuration.
25
25
  * @param splitHostController The controller associated with the SplitView component which receives updates and
26
26
  * manages the native layer.
27
27
  * @param appearanceCoordinator The coordinator which is checking whether the update needs to be applied and if so, it
28
28
  * executes the callback passed by this class.
29
29
  */
30
- - (void)updateAppearanceIfNeeded:(RNSSplitHostComponentView *)splitHost
30
+ - (void)updateAppearanceIfNeeded:(id<RNSSplitHostAppearanceProvider>)provider
31
31
  splitHostController:(RNSSplitHostController *)splitHostController
32
32
  appearanceCoordinator:(RNSSplitAppearanceCoordinator *)appearanceCoordinator;
33
33
 
@@ -3,12 +3,11 @@
3
3
  #import <React/RCTAssert.h>
4
4
  #import "RNSDefines.h"
5
5
  #import "RNSScreenWindowTraits.h"
6
- #import "RNSSplitHostComponentView.h"
7
6
  #import "RNSSplitHostController.h"
8
7
 
9
8
  @implementation RNSSplitAppearanceApplicator
10
9
 
11
- - (void)updateAppearanceIfNeeded:(RNSSplitHostComponentView *)splitHost
10
+ - (void)updateAppearanceIfNeeded:(id<RNSSplitHostAppearanceProvider>)provider
12
11
  splitHostController:(RNSSplitHostController *)splitHostController
13
12
  appearanceCoordinator:(RNSSplitAppearanceCoordinator *)appearanceCoordinator
14
13
  {
@@ -21,7 +20,7 @@
21
20
  return;
22
21
  }
23
22
 
24
- [strongSelf updateSplitViewConfigurationFor:splitHost withController:splitHostController];
23
+ [strongSelf updateSplitViewConfigurationFor:provider withController:splitHostController];
25
24
  }];
26
25
 
27
26
  [appearanceCoordinator updateIfNeeded:RNSSplitAppearanceUpdateFlagsSecondaryScreenNavBarUpdate
@@ -41,7 +40,7 @@
41
40
  return;
42
41
  }
43
42
 
44
- [strongSelf updateSplitViewDisplayModeFor:splitHost withController:splitHostController];
43
+ [strongSelf updateSplitViewDisplayModeFor:provider withController:splitHostController];
45
44
  }];
46
45
 
47
46
  [appearanceCoordinator updateIfNeeded:RNSSplitAppearanceUpdateFlagsOrientationUpdate
@@ -55,101 +54,99 @@
55
54
  *
56
55
  * It calls all setters on RNSSplitHostController that doesn't require any custom logic and conditions to be met.
57
56
  *
58
- * @param splitHost The view representing JS component which is sending updates.
57
+ * @param provider The provider of the appearance configuration.
59
58
  * @param splitHostController The controller associated with the SplitView component which receives updates and
60
59
  * manages the native layer.
61
60
  */
62
- - (void)updateSplitViewConfigurationFor:(RNSSplitHostComponentView *)splitHost
61
+ - (void)updateSplitViewConfigurationFor:(id<RNSSplitHostAppearanceProvider>)provider
63
62
  withController:(RNSSplitHostController *)splitHostController
64
63
  {
65
64
  // Step 1 - general settings
66
- splitHostController.displayModeButtonVisibility = splitHost.displayModeButtonVisibility;
67
- splitHostController.preferredSplitBehavior = splitHost.preferredSplitBehavior;
68
- splitHostController.overrideUserInterfaceStyle = splitHost.colorScheme;
65
+ splitHostController.displayModeButtonVisibility = provider.displayModeButtonVisibility;
66
+ splitHostController.preferredSplitBehavior = provider.preferredSplitBehavior;
67
+ splitHostController.overrideUserInterfaceStyle = provider.colorScheme;
69
68
  #if !TARGET_OS_TV
70
- splitHostController.primaryBackgroundStyle = splitHost.primaryBackgroundStyle;
69
+ splitHostController.primaryBackgroundStyle = provider.primaryBackgroundStyle;
71
70
  #endif
72
- splitHostController.presentsWithGesture = splitHost.presentsWithGesture;
73
- splitHostController.primaryEdge = splitHost.primaryEdge;
74
- splitHostController.showsSecondaryOnlyButton = splitHost.showSecondaryToggleButton;
71
+ splitHostController.presentsWithGesture = provider.presentsWithGesture;
72
+ splitHostController.primaryEdge = provider.primaryEdge;
73
+ splitHostController.showsSecondaryOnlyButton = provider.showSecondaryToggleButton;
75
74
 
76
75
  // Step 2.1 - validating column constraints
77
- [self validateColumnConstraintsWithMinWidth:splitHost.minimumPrimaryColumnWidth
78
- maxWidth:splitHost.maximumPrimaryColumnWidth];
76
+ [self validateColumnConstraintsWithMinWidth:provider.minimumPrimaryColumnWidth
77
+ maxWidth:provider.maximumPrimaryColumnWidth];
79
78
 
80
- [self validateColumnConstraintsWithMinWidth:splitHost.minimumSupplementaryColumnWidth
81
- maxWidth:splitHost.maximumSupplementaryColumnWidth];
79
+ [self validateColumnConstraintsWithMinWidth:provider.minimumSupplementaryColumnWidth
80
+ maxWidth:provider.maximumSupplementaryColumnWidth];
82
81
 
83
82
  #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) && !TARGET_OS_TV
84
83
  if (@available(iOS 26.0, *)) {
85
- [self validateColumnConstraintsWithMinWidth:splitHost.minimumInspectorColumnWidth
86
- maxWidth:splitHost.maximumInspectorColumnWidth];
84
+ [self validateColumnConstraintsWithMinWidth:provider.minimumInspectorColumnWidth
85
+ maxWidth:provider.maximumInspectorColumnWidth];
87
86
  }
88
87
  #endif
89
88
 
90
89
  // Step 2.2 - applying updates to columns
91
- if (splitHost.minimumPrimaryColumnWidth >= 0) {
92
- splitHostController.minimumPrimaryColumnWidth = splitHost.minimumPrimaryColumnWidth;
90
+ if (provider.minimumPrimaryColumnWidth >= 0) {
91
+ splitHostController.minimumPrimaryColumnWidth = provider.minimumPrimaryColumnWidth;
93
92
  }
94
93
 
95
- if (splitHost.maximumPrimaryColumnWidth >= 0) {
96
- splitHostController.maximumPrimaryColumnWidth = splitHost.maximumPrimaryColumnWidth;
94
+ if (provider.maximumPrimaryColumnWidth >= 0) {
95
+ splitHostController.maximumPrimaryColumnWidth = provider.maximumPrimaryColumnWidth;
97
96
  }
98
97
 
99
- if (splitHost.preferredPrimaryColumnWidthOrFraction >= 0 && splitHost.preferredPrimaryColumnWidthOrFraction < 1) {
100
- splitHostController.preferredPrimaryColumnWidthFraction = splitHost.preferredPrimaryColumnWidthOrFraction;
101
- } else if (splitHost.preferredPrimaryColumnWidthOrFraction >= 1) {
102
- splitHostController.preferredPrimaryColumnWidth = splitHost.preferredPrimaryColumnWidthOrFraction;
98
+ if (provider.preferredPrimaryColumnWidthOrFraction >= 0 && provider.preferredPrimaryColumnWidthOrFraction < 1) {
99
+ splitHostController.preferredPrimaryColumnWidthFraction = provider.preferredPrimaryColumnWidthOrFraction;
100
+ } else if (provider.preferredPrimaryColumnWidthOrFraction >= 1) {
101
+ splitHostController.preferredPrimaryColumnWidth = provider.preferredPrimaryColumnWidthOrFraction;
103
102
  }
104
103
 
105
- if (splitHost.minimumSupplementaryColumnWidth >= 0) {
106
- splitHostController.minimumSupplementaryColumnWidth = splitHost.minimumSupplementaryColumnWidth;
104
+ if (provider.minimumSupplementaryColumnWidth >= 0) {
105
+ splitHostController.minimumSupplementaryColumnWidth = provider.minimumSupplementaryColumnWidth;
107
106
  }
108
107
 
109
- if (splitHost.maximumSupplementaryColumnWidth >= 0) {
110
- splitHostController.maximumSupplementaryColumnWidth = splitHost.maximumSupplementaryColumnWidth;
108
+ if (provider.maximumSupplementaryColumnWidth >= 0) {
109
+ splitHostController.maximumSupplementaryColumnWidth = provider.maximumSupplementaryColumnWidth;
111
110
  }
112
111
 
113
- if (splitHost.preferredSupplementaryColumnWidthOrFraction >= 0 &&
114
- splitHost.preferredSupplementaryColumnWidthOrFraction < 1) {
112
+ if (provider.preferredSupplementaryColumnWidthOrFraction >= 0 &&
113
+ provider.preferredSupplementaryColumnWidthOrFraction < 1) {
115
114
  splitHostController.preferredSupplementaryColumnWidthFraction =
116
- splitHost.preferredSupplementaryColumnWidthOrFraction;
117
- } else if (splitHost.preferredSupplementaryColumnWidthOrFraction >= 1) {
118
- splitHostController.preferredSupplementaryColumnWidth = splitHost.preferredSupplementaryColumnWidthOrFraction;
115
+ provider.preferredSupplementaryColumnWidthOrFraction;
116
+ } else if (provider.preferredSupplementaryColumnWidthOrFraction >= 1) {
117
+ splitHostController.preferredSupplementaryColumnWidth = provider.preferredSupplementaryColumnWidthOrFraction;
119
118
  }
120
119
 
121
120
  #if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0) && !TARGET_OS_TV
122
121
  if (@available(iOS 26.0, *)) {
123
- if (splitHost.minimumSecondaryColumnWidth >= 0) {
124
- splitHostController.minimumSecondaryColumnWidth = splitHost.minimumSecondaryColumnWidth;
122
+ if (provider.minimumSecondaryColumnWidth >= 0) {
123
+ splitHostController.minimumSecondaryColumnWidth = provider.minimumSecondaryColumnWidth;
125
124
  }
126
125
 
127
- if (splitHost.preferredSecondaryColumnWidthOrFraction >= 0 &&
128
- splitHost.preferredSecondaryColumnWidthOrFraction < 1) {
129
- splitHostController.preferredSecondaryColumnWidthFraction = splitHost.preferredSecondaryColumnWidthOrFraction;
130
- } else if (splitHost.preferredSecondaryColumnWidthOrFraction >= 1) {
131
- splitHostController.preferredSecondaryColumnWidth = splitHost.preferredSecondaryColumnWidthOrFraction;
126
+ if (provider.preferredSecondaryColumnWidthOrFraction >= 0 && provider.preferredSecondaryColumnWidthOrFraction < 1) {
127
+ splitHostController.preferredSecondaryColumnWidthFraction = provider.preferredSecondaryColumnWidthOrFraction;
128
+ } else if (provider.preferredSecondaryColumnWidthOrFraction >= 1) {
129
+ splitHostController.preferredSecondaryColumnWidth = provider.preferredSecondaryColumnWidthOrFraction;
132
130
  }
133
131
 
134
- if (splitHost.minimumInspectorColumnWidth >= 0) {
135
- splitHostController.minimumInspectorColumnWidth = splitHost.minimumInspectorColumnWidth;
132
+ if (provider.minimumInspectorColumnWidth >= 0) {
133
+ splitHostController.minimumInspectorColumnWidth = provider.minimumInspectorColumnWidth;
136
134
  }
137
135
 
138
- if (splitHost.maximumInspectorColumnWidth >= 0) {
139
- splitHostController.maximumInspectorColumnWidth = splitHost.maximumInspectorColumnWidth;
136
+ if (provider.maximumInspectorColumnWidth >= 0) {
137
+ splitHostController.maximumInspectorColumnWidth = provider.maximumInspectorColumnWidth;
140
138
  }
141
139
 
142
- if (splitHost.preferredInspectorColumnWidthOrFraction >= 0 &&
143
- splitHost.preferredInspectorColumnWidthOrFraction < 1) {
144
- splitHostController.preferredInspectorColumnWidthFraction = splitHost.preferredInspectorColumnWidthOrFraction;
145
- } else if (splitHost.preferredInspectorColumnWidthOrFraction >= 1) {
146
- splitHostController.preferredInspectorColumnWidth = splitHost.preferredInspectorColumnWidthOrFraction;
140
+ if (provider.preferredInspectorColumnWidthOrFraction >= 0 && provider.preferredInspectorColumnWidthOrFraction < 1) {
141
+ splitHostController.preferredInspectorColumnWidthFraction = provider.preferredInspectorColumnWidthOrFraction;
142
+ } else if (provider.preferredInspectorColumnWidthOrFraction >= 1) {
143
+ splitHostController.preferredInspectorColumnWidth = provider.preferredInspectorColumnWidthOrFraction;
147
144
  }
148
145
  }
149
146
  #endif
150
147
 
151
148
  // Step 2.3 - manipulating with inspector column
152
- [splitHostController toggleSplitViewInspector:splitHost.showInspector];
149
+ [splitHostController toggleSplitViewInspector:provider.showInspector];
153
150
  }
154
151
 
155
152
  /**
@@ -160,14 +157,14 @@
160
157
  * executed natively, e. g. after showing/hiding a column by a swipe. In that case, any prop update incoming, would
161
158
  * reset `preferredDisplayMode` to the state from JS, what doesn't look good.
162
159
  *
163
- * @param splitHost The view representing JS component which is sending updates.
160
+ * @param provider The provider of the appearance configuration.
164
161
  * @param splitHostController The controller associated with the SplitView component which receives updates and
165
162
  * manages the native layer.
166
163
  */
167
- - (void)updateSplitViewDisplayModeFor:(RNSSplitHostComponentView *)splitHost
164
+ - (void)updateSplitViewDisplayModeFor:(id<RNSSplitHostAppearanceProvider>)provider
168
165
  withController:(RNSSplitHostController *)splitHostController
169
166
  {
170
- splitHostController.preferredDisplayMode = splitHost.preferredDisplayMode;
167
+ splitHostController.preferredDisplayMode = provider.preferredDisplayMode;
171
168
  }
172
169
 
173
170
  - (void)validateColumnConstraintsWithMinWidth:(CGFloat)minWidth maxWidth:(CGFloat)maxWidth
@@ -1,6 +1,7 @@
1
1
  #pragma once
2
2
 
3
3
  #import <Foundation/Foundation.h>
4
+ #import <UIKit/UIKit.h>
4
5
 
5
6
  // Hide C++ symbols from C compiler used when building Swift module
6
7
  #if defined(__cplusplus)
@@ -1,7 +1,7 @@
1
1
  #import "RNSSplitHostComponentEventEmitter.h"
2
2
  #import <React/RCTConversions.h>
3
3
  #import <React/RCTLog.h>
4
- #import "RNSConversions.h"
4
+ #import "RNSConversions-SplitView.h"
5
5
 
6
6
  @implementation RNSSplitHostComponentEventEmitter {
7
7
  std::shared_ptr<const react::RNSSplitHostEventEmitter> _reactEventEmitter;
@@ -3,7 +3,7 @@
3
3
  #import "RNSDefines.h"
4
4
  #import "RNSEnums.h"
5
5
  #import "RNSReactBaseView.h"
6
- #import "RNSSplitHostComponentEventEmitter.h"
6
+ #import "RNSSplitHostProviders.h"
7
7
 
8
8
  NS_ASSUME_NONNULL_BEGIN
9
9
 
@@ -17,7 +17,8 @@ NS_ASSUME_NONNULL_BEGIN
17
17
  * Responsible for managing multi-column layouts via associated native UISplitViewController.
18
18
  * Manages updates to the layout properties, column configuration, and event emission.
19
19
  */
20
- @interface RNSSplitHostComponentView : RNSReactBaseView
20
+ @interface RNSSplitHostComponentView
21
+ : RNSReactBaseView <RNSSplitHostAppearanceProvider, RNSSplitHostBehaviorProvider, RNSSplitHostColumnsProvider>
21
22
 
22
23
  - (nonnull NSMutableArray<RNSSplitScreenComponentView *> *)reactSubviews;
23
24
 
@@ -29,7 +30,8 @@ NS_ASSUME_NONNULL_BEGIN
29
30
 
30
31
  /**
31
32
  * @category Props
32
- * @brief Definitions for React Native props.
33
+ * @brief Definitions for React Native props. They back the appearance and behavior providers of the Split host
34
+ * controller.
33
35
  */
34
36
  @interface RNSSplitHostComponentView ()
35
37
 
@@ -66,16 +68,4 @@ NS_ASSUME_NONNULL_BEGIN
66
68
 
67
69
  @end
68
70
 
69
- #pragma mark - Events
70
-
71
- /**
72
- * @category Events
73
- * @brief APIs related to event emission to React Native.
74
- */
75
- @interface RNSSplitHostComponentView ()
76
-
77
- - (nonnull RNSSplitHostComponentEventEmitter *)reactEventEmitter;
78
-
79
- @end
80
-
81
71
  NS_ASSUME_NONNULL_END
@@ -6,10 +6,12 @@
6
6
  #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
7
7
 
8
8
  #import "RNSContainerHelpers.h"
9
- #import "RNSConversions.h"
9
+ #import "RNSConversions-SplitView.h"
10
10
  #import "RNSDefines.h"
11
+ #import "RNSSplitHostComponentEventEmitter.h"
11
12
  #import "RNSSplitHostController.h"
12
13
  #import "RNSSplitScreenComponentView.h"
14
+ #import "RNSSplitScreenController.h"
13
15
 
14
16
  namespace react = facebook::react;
15
17
 
@@ -18,7 +20,9 @@ static const CGFloat epsilon = 1e-6;
18
20
  #define COLUMN_METRIC_CHANGED(OLD, NEW, PROPERTY_NAME, EPSILON) \
19
21
  (fabs((OLD).columnMetrics.PROPERTY_NAME - (NEW).columnMetrics.PROPERTY_NAME) > (EPSILON))
20
22
 
21
- @interface RNSSplitHostComponentView () <RCTMountingTransactionObserving, RCTRNSSplitHostViewProtocol>
23
+ @interface RNSSplitHostComponentView () <RCTMountingTransactionObserving,
24
+ RCTRNSSplitHostViewProtocol,
25
+ RNSSplitHostControllerEventsDelegate>
22
26
  @end
23
27
 
24
28
  @implementation RNSSplitHostComponentView {
@@ -116,7 +120,11 @@ static const CGFloat epsilon = 1e-6;
116
120
  if (_controller == nil) {
117
121
  int numberOfColumns = [self getNumberOfColumns];
118
122
 
119
- _controller = [[RNSSplitHostController alloc] initWithSplitHostComponentView:self numberOfColumns:numberOfColumns];
123
+ _controller = [[RNSSplitHostController alloc] initWithNumberOfColumns:numberOfColumns];
124
+ _controller.eventsDelegate = self;
125
+ _controller.appearanceProvider = self;
126
+ _controller.behaviorProvider = self;
127
+ _controller.columnsProvider = self;
120
128
  }
121
129
  }
122
130
 
@@ -399,10 +407,51 @@ RNS_IGNORE_SUPER_CALL_END
399
407
 
400
408
  #pragma mark - Events
401
409
 
402
- - (nonnull RNSSplitHostComponentEventEmitter *)reactEventEmitter
410
+ #pragma mark - RNSSplitHostColumnsProvider
411
+
412
+ - (NSArray<RNSSplitScreenController *> *)columnControllers
413
+ {
414
+ return [self controllersOfColumnsWithType:RNSSplitScreenColumnTypeColumn];
415
+ }
416
+
417
+ - (NSArray<RNSSplitScreenController *> *)inspectorControllers
418
+ {
419
+ return [self controllersOfColumnsWithType:RNSSplitScreenColumnTypeInspector];
420
+ }
421
+
422
+ - (NSArray<RNSSplitScreenController *> *)controllersOfColumnsWithType:(RNSSplitScreenColumnType)columnType
423
+ {
424
+ NSMutableArray<RNSSplitScreenController *> *controllers = [NSMutableArray array];
425
+ for (RNSSplitScreenComponentView *column in _reactSubviews) {
426
+ if (column.columnType == columnType) {
427
+ [controllers addObject:column.controller];
428
+ }
429
+ }
430
+ return controllers;
431
+ }
432
+
433
+ #pragma mark - RNSSplitHostControllerEventsDelegate
434
+
435
+ - (void)splitHostControllerDidCollapse:(RNSSplitHostController *)controller
436
+ {
437
+ [_reactEventEmitter emitOnCollapse];
438
+ }
439
+
440
+ - (void)splitHostControllerDidExpand:(RNSSplitHostController *)controller
441
+ {
442
+ [_reactEventEmitter emitOnExpand];
443
+ }
444
+
445
+ - (void)splitHostController:(RNSSplitHostController *)controller
446
+ willChangeDisplayModeFrom:(UISplitViewControllerDisplayMode)fromDisplayMode
447
+ to:(UISplitViewControllerDisplayMode)toDisplayMode
448
+ {
449
+ [_reactEventEmitter emitOnDisplayModeWillChangeFrom:fromDisplayMode to:toDisplayMode];
450
+ }
451
+
452
+ - (void)splitHostControllerDidHideInspector:(RNSSplitHostController *)controller
403
453
  {
404
- RCTAssert(_reactEventEmitter != nil, @"[RNScreens] Attempt to access uninitialized _reactEventEmitter");
405
- return _reactEventEmitter;
454
+ [_reactEventEmitter emitOnHideInspector];
406
455
  }
407
456
 
408
457
  #pragma mark - Dynamic frameworks support