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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/Package.swift +87 -0
  2. package/README.md +0 -7
  3. package/android/src/main/cpp/NativeProxy.cpp +30 -6
  4. package/android/src/main/cpp/NativeProxy.h +7 -1
  5. package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +8 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
  7. package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
  8. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
  9. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
  10. package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
  11. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +3 -1
  12. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +2 -0
  13. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetBehaviorController.kt +49 -18
  14. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +65 -40
  15. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
  16. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +0 -6
  17. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetAvailableHeightProvider.kt +44 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialog.kt +35 -3
  19. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +33 -106
  20. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/interfaces/FormSheetDialogEventEmitter.kt +2 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +61 -15
  22. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetAnimatorFactory.kt +8 -9
  23. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDimmingManager.kt +115 -0
  24. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDismissalOrigin.kt +22 -0
  25. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentation.kt +173 -0
  26. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +141 -49
  27. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationState.kt +1 -1
  28. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetStackRegistry.kt +28 -0
  29. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetDismissEvent.kt +29 -0
  30. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/host/FormSheetHostEventEmitter.kt +7 -0
  31. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/host/FormSheetHostViewManager.kt +2 -0
  32. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +369 -58
  33. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
  34. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +143 -98
  35. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +155 -23
  36. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
  37. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
  38. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +170 -167
  39. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +385 -12
  40. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +0 -4
  41. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +32 -3
  42. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
  43. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +7 -2
  44. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +27 -280
  45. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
  46. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
  47. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +28 -20
  48. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +3 -55
  49. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +1 -10
  50. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuItemConfig.kt +1 -3
  51. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
  52. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +57 -6
  53. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +3 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +1 -0
  55. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +4 -3
  56. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueue.kt +23 -9
  57. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +103 -3
  58. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +13 -0
  59. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
  60. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +4 -0
  61. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +20 -1
  62. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
  63. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +2 -4
  64. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
  65. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +46 -25
  66. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +10 -0
  67. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
  68. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +17 -0
  69. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
  70. package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +7 -0
  71. package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
  72. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
  73. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
  74. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
  75. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
  76. package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
  77. package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
  78. package/ios/RNSEnums.h +2 -0
  79. package/ios/conversion/RNSConversions.h +7 -108
  80. package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
  81. package/ios/legacy/RNSModalScreen.mm +1 -1
  82. package/ios/legacy/RNSScreen.mm +8 -19
  83. package/ios/legacy/RNSScreenStackHeaderConfig.mm +3 -1
  84. package/ios/legacy/RNSScreenStackHeaderSubview.mm +1 -1
  85. package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
  86. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
  87. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
  88. package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
  89. package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
  90. package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
  91. package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
  92. package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
  93. package/ios/safe-area/RNSSafeAreaViewComponentView.mm +2 -2
  94. package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
  95. package/ios/split/RNSSplitAppearanceApplicator.h +4 -4
  96. package/ios/split/RNSSplitAppearanceApplicator.mm +53 -56
  97. package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
  98. package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
  99. package/ios/split/RNSSplitHostComponentView.h +5 -15
  100. package/ios/split/RNSSplitHostComponentView.mm +55 -6
  101. package/ios/split/RNSSplitHostController.h +25 -6
  102. package/ios/split/RNSSplitHostController.mm +24 -92
  103. package/ios/split/RNSSplitHostProviders.h +67 -0
  104. package/ios/split/RNSSplitScreenComponentView.h +0 -39
  105. package/ios/split/RNSSplitScreenComponentView.mm +27 -10
  106. package/ios/split/RNSSplitScreenController.h +26 -3
  107. package/ios/split/RNSSplitScreenController.mm +13 -30
  108. package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
  109. package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
  110. package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
  111. package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
  112. package/ios/stack/conversion/RNSConversions-Stack.h +32 -0
  113. package/ios/stack/conversion/RNSConversions-Stack.mm +55 -0
  114. package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
  115. package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
  116. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +10 -1
  117. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +67 -35
  118. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +6 -0
  119. package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
  120. package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
  121. package/ios/stack/header/RNSStackHeaderItemComponentView.h +3 -1
  122. package/ios/stack/header/RNSStackHeaderItemComponentView.mm +15 -2
  123. package/ios/stack/header/RNSStackHeaderItemDataProviding.h +2 -0
  124. package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
  125. package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
  126. package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
  127. package/ios/stack/host/RNSStackNavigationBar.h +25 -0
  128. package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
  129. package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
  130. package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
  131. package/ios/stack/host/RNSStackNavigationController.mm +13 -5
  132. package/ios/stack/host/RNSStackOperation.h +0 -2
  133. package/ios/stack/screen/RNSStackScreenComponentView.mm +9 -2
  134. package/ios/stack/screen/RNSStackScreenController.mm +12 -0
  135. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +8 -0
  136. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +98 -16
  137. package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +40 -9
  138. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
  139. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +1 -1
  140. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +1 -1
  141. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
  142. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
  143. package/ios/tabs/conversion/RNSConversions-Tabs.h +78 -0
  144. package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +8 -71
  145. package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
  146. package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
  147. package/ios/tabs/host/RNSTabsHostComponentView.mm +10 -3
  148. package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
  149. package/ios/tabs/screen/RNSTabsScreenComponentView.mm +20 -5
  150. package/ios/utils/RNSDefines.h +3 -0
  151. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +34 -19
  152. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  153. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +33 -1
  154. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  155. package/lib/commonjs/components/stack/host/StackHost.js +9 -6
  156. package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
  157. package/lib/commonjs/components/stack/index.js.map +1 -1
  158. package/lib/commonjs/components/tabs/host/TabsHost.ios.js +1 -0
  159. package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
  160. package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  161. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  162. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  163. package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
  164. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  165. package/lib/module/components/stack/header/StackHeaderConfig.android.js +35 -20
  166. package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  167. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +34 -2
  168. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  169. package/lib/module/components/stack/host/StackHost.js +9 -6
  170. package/lib/module/components/stack/host/StackHost.js.map +1 -1
  171. package/lib/module/components/stack/index.js.map +1 -1
  172. package/lib/module/components/tabs/host/TabsHost.ios.js +1 -0
  173. package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
  174. package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  175. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  176. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  177. package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
  178. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  179. package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +1 -1
  180. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
  181. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +616 -21
  182. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  183. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  184. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +226 -2
  185. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  186. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +2 -2
  187. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +2 -0
  188. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
  189. package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
  190. package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
  191. package/lib/typescript/components/stack/host/StackHost.types.d.ts +24 -0
  192. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  193. package/lib/typescript/components/stack/index.d.ts +2 -2
  194. package/lib/typescript/components/stack/index.d.ts.map +1 -1
  195. package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
  196. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +16 -0
  197. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
  198. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
  199. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
  200. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +52 -0
  201. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
  202. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +25 -1
  203. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  204. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +2 -0
  205. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  206. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +3 -1
  207. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
  208. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +1 -0
  209. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  210. package/package.json +8 -7
  211. package/react-native.config.js +3 -0
  212. package/src/components/modals/form-sheet/FormSheet.types.ts +1 -1
  213. package/src/components/stack/header/StackHeaderConfig.android.tsx +48 -23
  214. package/src/components/stack/header/StackHeaderConfig.android.types.ts +637 -21
  215. package/src/components/stack/header/StackHeaderConfig.ios.tsx +45 -1
  216. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +238 -2
  217. package/src/components/stack/header/StackHeaderConfig.types.ts +2 -2
  218. package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +2 -0
  219. package/src/components/stack/host/StackHost.tsx +4 -2
  220. package/src/components/stack/host/StackHost.types.ts +26 -0
  221. package/src/components/stack/index.ts +6 -1
  222. package/src/components/tabs/host/TabsHost.ios.tsx +1 -0
  223. package/src/components/tabs/host/TabsHost.ios.types.ts +16 -0
  224. package/src/components/tabs/host/TabsHost.types.ts +3 -0
  225. package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +78 -0
  226. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +32 -0
  227. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +2 -0
  228. package/src/fabric/stack/StackHostNativeComponent.ts +11 -2
  229. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +1 -0
  230. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
  231. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
  232. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
  233. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +0 -83
  234. package/ios/conversion/RNSConversions-Stack.h +0 -32
  235. package/ios/conversion/RNSConversions-Stack.mm +0 -41
  236. package/ios/conversion/always_false.h +0 -31
  237. /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
@@ -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
@@ -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
  #if defined(__cplusplus)
6
7
  #import <react/renderer/core/State.h>
@@ -10,8 +11,6 @@ namespace react = facebook::react;
10
11
 
11
12
  NS_ASSUME_NONNULL_BEGIN
12
13
 
13
- @class RNSSplitScreenComponentView;
14
-
15
14
  /**
16
15
  * @class RNSSplitScreenShadowStateProxy
17
16
  * @brief Manages communication between native UIView layout and associated React Native ShadowNode state.
@@ -21,44 +20,6 @@ NS_ASSUME_NONNULL_BEGIN
21
20
  */
22
21
  @interface RNSSplitScreenShadowStateProxy : NSObject
23
22
 
24
- /**
25
- * @brief Triggers a shadow state update for the given SplitScreen component.
26
- *
27
- * Internally uses the component’s frame in UIWindow coordinates to update the Shadow Tree state.
28
- *
29
- * @param screenComponentView An instance of RNSSplitScreenComponentView whose state should be updated.
30
- */
31
- - (void)updateShadowStateOfComponent:(RNSSplitScreenComponentView *)screenComponentView;
32
-
33
- /**
34
- * @brief Triggers a shadow state update for the given SplitScreen component in the context of a given ancestor
35
- * view.
36
- *
37
- * Converts the split view screen's local frame to coordinates of the specified ancestor view
38
- * before applying the update to the Shadow Tree. If the ancestor haven't been defined frame is calculated relatively to
39
- * the UIWindow.
40
- *
41
- * @param screenComponentView An instance of RNSSplitScreenComponentView whose state should be updated.
42
- * @param ancestorView An optional UIView in whose coordinate space the frame should be computed.
43
- */
44
- - (void)updateShadowStateOfComponent:(RNSSplitScreenComponentView *)screenComponentView
45
- inContextOfAncestorView:(UIView *_Nullable)ancestorView;
46
-
47
- /**
48
- * @brief Send an update to ShadowNode state with given frame if needed.
49
- *
50
- * Converts the frame to coordinates of the specified ancestor view,
51
- * before applying the update to the Shadow Tree.
52
- *
53
- * @param screenComponentView an instance of RNSSplitScreenComponentView whose state should be updated,
54
- * @param frame frame to update the shadow state with; it must be in coordinate system of `screenComponentView`,
55
- * @param ancestorView coordinate-system provider view, relative to which the frame should be converted before sending
56
- * the update.
57
- */
58
- - (void)updateShadowStateOfComponent:(RNSSplitScreenComponentView *)screenComponentView
59
- withFrame:(CGRect)frame
60
- inContextOfAncestorView:(nonnull UIView *)ancestorView;
61
-
62
23
  /**
63
24
  * @brief Send an update to ShadowNode state with given layout metrics.
64
25
  *
@@ -1,9 +1,8 @@
1
1
  #import "RNSSplitScreenShadowStateProxy.h"
2
- #import "RNSSplitScreenComponentView.h"
3
2
 
4
3
  #import <React/RCTAssert.h>
5
4
  #import <React/RCTConversions.h>
6
- #import <rnscreens/RNSSplitScreenShadowNode.h>
5
+ #import <react/renderer/components/rnscreens/RNSSplitScreenShadowNode.h>
7
6
 
8
7
  namespace react = facebook::react;
9
8
 
@@ -21,21 +20,6 @@ namespace react = facebook::react;
21
20
  return self;
22
21
  }
23
22
 
24
- - (void)updateShadowStateOfComponent:(RNSSplitScreenComponentView *)screenComponentView
25
- {
26
- [self updateShadowStateOfComponent:screenComponentView inContextOfAncestorView:nil];
27
- }
28
-
29
- - (void)updateShadowStateOfComponent:(RNSSplitScreenComponentView *)screenComponentView
30
- inContextOfAncestorView:(UIView *_Nullable)ancestorView
31
- {
32
- CGRect frame = screenComponentView.frame;
33
- if (ancestorView != nil) {
34
- frame = [screenComponentView convertRect:frame toView:ancestorView];
35
- }
36
- [self updateShadowStateWithFrame:frame];
37
- }
38
-
39
23
  - (void)updateShadowStateWithFrame:(CGRect)frame
40
24
  {
41
25
  if (_state == nullptr) {
@@ -50,15 +34,6 @@ namespace react = facebook::react;
50
34
  }
51
35
  }
52
36
 
53
- - (void)updateShadowStateOfComponent:(RNSSplitScreenComponentView *)screenComponentView
54
- withFrame:(CGRect)frame
55
- inContextOfAncestorView:(nonnull UIView *)ancestorView
56
- {
57
- RCTAssert(ancestorView != nil, @"[RNScreens] ancestorView must not be nil");
58
- CGRect convertedFrame = [screenComponentView convertRect:frame toView:ancestorView];
59
- [self updateShadowStateWithFrame:convertedFrame];
60
- }
61
-
62
37
  - (void)updateState:(react::State::Shared const &)state oldState:(react::State::Shared const &)oldState
63
38
  {
64
39
  _state = std::static_pointer_cast<const react::RNSSplitScreenShadowNode::ConcreteState>(state);
@@ -0,0 +1,56 @@
1
+ #pragma once
2
+
3
+ #if defined(__cplusplus)
4
+
5
+ #import <UIKit/UIKit.h>
6
+ #import <react/renderer/components/rnscreens/Props.h>
7
+ #import <optional>
8
+ #import <string>
9
+ #import "RNSEnums.h"
10
+
11
+ namespace rnscreens::conversion {
12
+
13
+ namespace react = facebook::react;
14
+
15
+ #pragma mark SplitHost props
16
+
17
+ UISplitViewControllerSplitBehavior SplitViewPreferredSplitBehaviorFromHostProp(
18
+ react::RNSSplitHostPreferredSplitBehavior behavior);
19
+
20
+ UISplitViewControllerPrimaryEdge SplitViewPrimaryEdgeFromHostProp(
21
+ react::RNSSplitHostPrimaryEdge primaryEdge);
22
+
23
+ UISplitViewControllerDisplayMode SplitViewPreferredDisplayModeFromHostProp(
24
+ react::RNSSplitHostPreferredDisplayMode displayMode);
25
+
26
+ #if !TARGET_OS_TV
27
+ UISplitViewControllerBackgroundStyle
28
+ SplitViewPrimaryBackgroundStyleFromHostProp(
29
+ react::RNSSplitHostPrimaryBackgroundStyle primaryBackgroundStyle);
30
+ #endif // !TARGET_OS_TV
31
+
32
+ UISplitViewControllerDisplayModeButtonVisibility
33
+ SplitViewDisplayModeButtonVisibilityFromHostProp(
34
+ react::RNSSplitHostDisplayModeButtonVisibility displayModeButtonVisibility);
35
+
36
+ std::string UISplitViewControllerDisplayModeToString(
37
+ UISplitViewControllerDisplayMode displayMode);
38
+
39
+ std::optional<UISplitViewControllerColumn>
40
+ SplitViewTopColumnForCollapsingFromHostProp(
41
+ react::RNSSplitHostTopColumnForCollapsing topColumnForCollapsing);
42
+
43
+ RNSOrientation RNSOrientationFromRNSSplitHostOrientation(
44
+ react::RNSSplitHostOrientation orientation);
45
+
46
+ UIUserInterfaceStyle UIUserInterfaceStyleFromHostProp(
47
+ react::RNSSplitHostColorScheme colorScheme);
48
+
49
+ #pragma mark SplitScreen props
50
+
51
+ RNSSplitScreenColumnType RNSSplitScreenColumnTypeFromScreenProp(
52
+ react::RNSSplitScreenColumnType columnType);
53
+
54
+ }; // namespace rnscreens::conversion
55
+
56
+ #endif // defined(__cplusplus)
@@ -1,7 +1,10 @@
1
- #import "RNSConversions.h"
1
+ #import "RNSConversions-SplitView.h"
2
+ #import <React/RCTLog.h>
2
3
 
3
4
  namespace rnscreens::conversion {
4
5
 
6
+ namespace react = facebook::react;
7
+
5
8
  #pragma mark SplitHost props
6
9
 
7
10
  UISplitViewControllerSplitBehavior SplitViewPreferredSplitBehaviorFromHostProp(
@@ -0,0 +1,32 @@
1
+ #pragma once
2
+
3
+ #if defined(__cplusplus)
4
+
5
+ #import <react/renderer/components/rnscreens/Props.h>
6
+ #import "RNSHeaderItemPlacement.h"
7
+ #import "RNSHeaderItemSpacerPlacement.h"
8
+ #import "RNSStackScreenComponentView.h"
9
+
10
+ namespace rnscreens::conversion {
11
+
12
+ namespace react = facebook::react;
13
+
14
+ RNSStackScreenActivityMode
15
+ RNSStackScreenActivityModeFromReactRNSStackScreenActivityMode(
16
+ react::RNSStackScreenActivityMode mode);
17
+
18
+ RNSHeaderItemPlacement
19
+ RNSHeaderItemPlacementFromReactRNSStackHeaderItemIOSPlacement(
20
+ react::RNSStackHeaderItemIOSPlacement placement);
21
+
22
+ RNSHeaderItemSpacerPlacement
23
+ RNSHeaderItemSpacerPlacementFromReactRNSStackHeaderItemSpacerIOSPlacement(
24
+ react::RNSStackHeaderItemSpacerIOSPlacement placement);
25
+
26
+ UINavigationItemBackButtonDisplayMode
27
+ UINavigationItemBackButtonDisplayModeFromReactRNSStackHeaderConfigIOSBackButtonDisplayMode(
28
+ react::RNSStackHeaderConfigIOSBackButtonDisplayMode displayMode);
29
+
30
+ }; // namespace rnscreens::conversion
31
+
32
+ #endif // defined(__cplusplus)
@@ -0,0 +1,55 @@
1
+ #import "RNSConversions-Stack.h"
2
+
3
+ namespace rnscreens::conversion {
4
+
5
+ namespace react = facebook::react;
6
+
7
+ RNSStackScreenActivityMode RNSStackScreenActivityModeFromReactRNSStackScreenActivityMode(
8
+ react::RNSStackScreenActivityMode mode)
9
+ {
10
+ return static_cast<RNSStackScreenActivityMode>(mode);
11
+ }
12
+
13
+ RNSHeaderItemPlacement RNSHeaderItemPlacementFromReactRNSStackHeaderItemIOSPlacement(
14
+ react::RNSStackHeaderItemIOSPlacement placement)
15
+ {
16
+ switch (placement) {
17
+ case react::RNSStackHeaderItemIOSPlacement::Leading:
18
+ return RNSHeaderItemPlacementLeading;
19
+ case react::RNSStackHeaderItemIOSPlacement::Trailing:
20
+ return RNSHeaderItemPlacementTrailing;
21
+ case react::RNSStackHeaderItemIOSPlacement::Title:
22
+ return RNSHeaderItemPlacementTitle;
23
+ case react::RNSStackHeaderItemIOSPlacement::Subtitle:
24
+ return RNSHeaderItemPlacementSubtitle;
25
+ case react::RNSStackHeaderItemIOSPlacement::LargeSubtitle:
26
+ return RNSHeaderItemPlacementLargeSubtitle;
27
+ }
28
+ }
29
+
30
+ RNSHeaderItemSpacerPlacement RNSHeaderItemSpacerPlacementFromReactRNSStackHeaderItemSpacerIOSPlacement(
31
+ react::RNSStackHeaderItemSpacerIOSPlacement placement)
32
+ {
33
+ switch (placement) {
34
+ case react::RNSStackHeaderItemSpacerIOSPlacement::Leading:
35
+ return RNSHeaderItemSpacerPlacementLeading;
36
+ case react::RNSStackHeaderItemSpacerIOSPlacement::Trailing:
37
+ return RNSHeaderItemSpacerPlacementTrailing;
38
+ }
39
+ }
40
+
41
+ UINavigationItemBackButtonDisplayMode
42
+ UINavigationItemBackButtonDisplayModeFromReactRNSStackHeaderConfigIOSBackButtonDisplayMode(
43
+ react::RNSStackHeaderConfigIOSBackButtonDisplayMode displayMode)
44
+ {
45
+ switch (displayMode) {
46
+ case react::RNSStackHeaderConfigIOSBackButtonDisplayMode::Default:
47
+ return UINavigationItemBackButtonDisplayModeDefault;
48
+ case react::RNSStackHeaderConfigIOSBackButtonDisplayMode::Generic:
49
+ return UINavigationItemBackButtonDisplayModeGeneric;
50
+ case react::RNSStackHeaderConfigIOSBackButtonDisplayMode::Minimal:
51
+ return UINavigationItemBackButtonDisplayModeMinimal;
52
+ }
53
+ }
54
+
55
+ }; // namespace rnscreens::conversion
@@ -0,0 +1,26 @@
1
+ #pragma once
2
+
3
+ #import <UIKit/UIKit.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ @interface RNSStackHeaderAppearanceMapper : NSObject
8
+
9
+ /**
10
+ * Maps appearance props to a UINavigationBarAppearance object.
11
+ * `appearanceDict` should be an NSDictionary with a flat structure, where entries correspond
12
+ * to UIKit attributes, e.g. `titleFontFamily`, `subtitleFontColor`, or empty, for UIKit defaults.
13
+ */
14
+ + (nullable UINavigationBarAppearance *)appearanceFromDictionary:(nullable NSDictionary *)appearanceDict;
15
+
16
+ /**
17
+ * Maps scroll edge appearance props to a UINavigationBarAppearance object.
18
+ * `appearanceDict` should be an NSDictionary with a flat structure, where entries correspond
19
+ * to UIKit attributes, e.g. `titleFontFamily`, `subtitleFontColor`, or empty, for UIKit defaults.
20
+ * The appearance object is built with transparent background configured by default, matching UIKit.
21
+ */
22
+ + (nullable UINavigationBarAppearance *)scrollEdgeAppearanceFromDictionary:(nullable NSDictionary *)appearanceDict;
23
+
24
+ @end
25
+
26
+ NS_ASSUME_NONNULL_END