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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/README.md +1 -2
  2. package/RNScreens.podspec +2 -6
  3. package/android/build.gradle +26 -1
  4. package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +5 -0
  5. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
  6. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +22 -6
  7. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackFragment.kt +39 -10
  8. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenViewManager.kt +5 -0
  9. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAppearanceCoordinator.kt → native/coordinator/FormSheetAppearanceCoordinator.kt} +2 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetBehaviorController.kt → native/coordinator/FormSheetBehaviorController.kt} +25 -1
  11. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDimensionsCoordinator.kt → native/coordinator/FormSheetDimensionsCoordinator.kt} +4 -1
  12. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +50 -0
  13. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContainer.kt → native/core/FormSheetContainer.kt} +1 -1
  14. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialog.kt → native/core/FormSheetDialog.kt} +24 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogManager.kt → native/core/FormSheetDialogManager.kt} +25 -1
  16. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeDelegate.kt → native/interfaces/FormSheetContentSizeChangeDelegate.kt} +1 -1
  17. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeProvider.kt → native/interfaces/FormSheetContentSizeChangeProvider.kt} +1 -1
  18. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogEventEmitter.kt → native/interfaces/FormSheetDialogEventEmitter.kt} +3 -1
  19. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetConfig.kt → native/model/FormSheetConfig.kt} +5 -1
  20. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetents.kt → native/model/FormSheetDetents.kt} +1 -1
  21. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAnimatorFactory.kt → native/presentation/FormSheetAnimatorFactory.kt} +1 -1
  22. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationManager.kt → native/presentation/FormSheetPresentationManager.kt} +3 -12
  23. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationState.kt → native/presentation/FormSheetPresentationState.kt} +1 -1
  24. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapper.kt → react/contentwrapper/FormSheetContentWrapper.kt} +3 -1
  25. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapperViewManager.kt → react/contentwrapper/FormSheetContentWrapperViewManager.kt} +1 -1
  26. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetentChangedEvent.kt → react/event/FormSheetDetentChangedEvent.kt} +1 -1
  27. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidAppearEvent.kt → react/event/FormSheetDidAppearEvent.kt} +1 -1
  28. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidDisappearEvent.kt → react/event/FormSheetDidDisappearEvent.kt} +1 -1
  29. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetNativeDismissEvent.kt → react/event/FormSheetNativeDismissEvent.kt} +1 -1
  30. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetNativeDismissPreventedEvent.kt +29 -0
  31. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetSyncFlushEvent.kt → react/event/FormSheetSyncFlushEvent.kt} +1 -1
  32. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillAppearEvent.kt → react/event/FormSheetWillAppearEvent.kt} +1 -1
  33. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillDisappearEvent.kt → react/event/FormSheetWillDisappearEvent.kt} +1 -1
  34. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentView.kt → react/host/FormSheetContentView.kt} +3 -1
  35. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHost.kt → react/host/FormSheetHost.kt} +6 -1
  36. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostEventEmitter.kt → react/host/FormSheetHostEventEmitter.kt} +16 -1
  37. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostViewManager.kt → react/host/FormSheetHostViewManager.kt} +11 -2
  38. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +30 -418
  39. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +36 -113
  40. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderFrameSynchronizer.kt +63 -0
  41. package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayout.kt → appbar/StackHeaderAppBarLayout.kt} +1 -6
  42. package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayoutBehavior.kt → appbar/StackHeaderAppBarLayoutBehavior.kt} +1 -1
  43. package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderScrollingViewBehavior.kt → appbar/StackHeaderScrollingViewBehavior.kt} +1 -1
  44. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +28 -6
  45. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +8 -1
  46. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +1 -1
  47. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +2 -1
  48. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +2 -1
  49. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +448 -0
  50. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +17 -3
  51. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +83 -0
  52. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuConfig.kt → model/StackHeaderToolbarMenuConfig.kt} +1 -1
  53. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementConfig.kt → model/StackHeaderToolbarMenuElementConfig.kt} +1 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupConfig.kt → model/StackHeaderToolbarMenuGroupConfig.kt} +1 -1
  55. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupMetadata.kt → model/StackHeaderToolbarMenuGroupMetadata.kt} +5 -1
  56. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemConfig.kt → model/StackHeaderToolbarMenuItemConfig.kt} +1 -1
  57. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemDefaults.kt → model/StackHeaderToolbarMenuItemDefaults.kt} +1 -1
  58. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemIconSource.kt → model/StackHeaderToolbarMenuItemIconSource.kt} +1 -1
  59. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemShowAsAction.kt → model/StackHeaderToolbarMenuItemShowAsAction.kt} +1 -1
  60. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemType.kt → model/StackHeaderToolbarMenuItemType.kt} +1 -1
  61. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarFieldUpdate.kt → update/StackHeaderToolbarFieldUpdate.kt} +1 -1
  62. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementOptions.kt → update/StackHeaderToolbarMenuElementOptions.kt} +2 -1
  63. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +13 -0
  64. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +10 -0
  65. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +17 -0
  66. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuUpdateQueue.kt → update/StackHeaderToolbarMenuUpdateQueue.kt} +1 -43
  67. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueueDelegate.kt +9 -0
  68. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +1 -0
  69. package/common/cpp/react/renderer/components/rnscreens/legacy/RNSScreenShadowNode.cpp +10 -5
  70. package/ios/RNSEnums.h +0 -2
  71. package/ios/RNSOrientationProviding.h +0 -2
  72. package/ios/RNSReactMountingTransactionObserving.h +15 -0
  73. package/ios/legacy/RNSBarButtonItem.mm +12 -5
  74. package/ios/legacy/RNSScreen.h +8 -1
  75. package/ios/legacy/RNSScreen.mm +39 -17
  76. package/ios/legacy/RNSScreenContentWrapper.mm +9 -0
  77. package/ios/legacy/RNSScreenFooter.mm +2 -0
  78. package/ios/legacy/RNSScreenStack.mm +9 -4
  79. package/ios/modals/form-sheet/RNSFormSheetContentWrapperComponentView.mm +9 -0
  80. package/ios/scroll-to-top-guard/RNSScrollToTopGuard.h +17 -0
  81. package/ios/scroll-to-top-guard/RNSScrollToTopGuard.mm +57 -0
  82. package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.h +28 -0
  83. package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.mm +64 -0
  84. package/ios/split/RNSSplitAppearanceApplicator.h +36 -0
  85. package/ios/split/RNSSplitAppearanceApplicator.mm +185 -0
  86. package/ios/split/RNSSplitAppearanceCoordinator.h +26 -0
  87. package/ios/split/RNSSplitAppearanceCoordinator.mm +27 -0
  88. package/ios/split/RNSSplitAppearanceUpdateFlags.h +14 -0
  89. package/ios/split/RNSSplitHostComponentView.mm +1 -1
  90. package/ios/split/RNSSplitHostController.h +86 -0
  91. package/ios/split/RNSSplitHostController.mm +560 -0
  92. package/ios/split/RNSSplitNavigationController.h +31 -0
  93. package/ios/split/RNSSplitNavigationController.mm +44 -0
  94. package/ios/split/RNSSplitNavigationControllerFrameObserver.h +32 -0
  95. package/ios/split/RNSSplitNavigationControllerFrameObserver.mm +80 -0
  96. package/ios/split/RNSSplitNavigationControllerFrameOriginChangeDelegate.h +15 -0
  97. package/ios/split/RNSSplitScreenComponentView.mm +8 -9
  98. package/ios/split/RNSSplitScreenController.h +45 -0
  99. package/ios/split/RNSSplitScreenController.mm +130 -0
  100. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +1 -0
  101. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +47 -9
  102. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +3 -0
  103. package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +9 -0
  104. package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +15 -0
  105. package/ios/stack/header/RNSStackHeaderMenuFinder.h +18 -3
  106. package/ios/stack/header/RNSStackHeaderMenuFinder.mm +21 -3
  107. package/ios/stack/host/RNSStackHostComponentView.mm +3 -1
  108. package/ios/stack/host/RNSStackNavigationController.mm +1 -1
  109. package/ios/stack/screen/RNSStackScreenComponentView.mm +0 -2
  110. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +6 -1
  111. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +61 -12
  112. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +3 -0
  113. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +4 -1
  114. package/ios/tabs/host/RNSTabBarController.h +5 -12
  115. package/ios/tabs/host/RNSTabBarController.mm +1 -1
  116. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +25 -0
  117. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
  118. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js +24 -0
  119. package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
  120. package/lib/commonjs/components/scroll-to-top-guard/index.js +13 -0
  121. package/lib/commonjs/components/scroll-to-top-guard/index.js.map +1 -0
  122. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +11 -12
  123. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  124. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
  125. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  126. package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js +33 -2
  127. package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js.map +1 -1
  128. package/lib/commonjs/components/stack/header/utils.js +6 -9
  129. package/lib/commonjs/components/stack/header/utils.js.map +1 -1
  130. package/lib/commonjs/experimental/index.js +11 -0
  131. package/lib/commonjs/experimental/index.js.map +1 -1
  132. package/lib/commonjs/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
  133. package/lib/commonjs/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
  134. package/lib/commonjs/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
  135. package/lib/commonjs/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
  136. package/lib/commonjs/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
  137. package/lib/commonjs/fabric/legacy/ScreenNativeComponent.js.map +1 -1
  138. package/lib/commonjs/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  139. package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  140. package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  141. package/lib/commonjs/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
  142. package/lib/commonjs/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
  143. package/lib/commonjs/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
  144. package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +12 -0
  145. package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
  146. package/lib/commonjs/fabric/split/SplitHostNativeComponent.js.map +1 -1
  147. package/lib/commonjs/fabric/split/SplitScreenNativeComponent.js.map +1 -1
  148. package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  149. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  150. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  151. package/lib/commonjs/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
  152. package/lib/commonjs/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
  153. package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
  154. package/lib/commonjs/fabric/stack/StackScreenNativeComponent.js.map +1 -1
  155. package/lib/commonjs/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
  156. package/lib/commonjs/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
  157. package/lib/commonjs/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
  158. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  159. package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  160. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  161. package/lib/commonjs/flags.js +22 -1
  162. package/lib/commonjs/flags.js.map +1 -1
  163. package/lib/commonjs/legacy/components/Screen.js +6 -1
  164. package/lib/commonjs/legacy/components/Screen.js.map +1 -1
  165. package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js +5 -0
  166. package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
  167. package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
  168. package/lib/commonjs/legacy/components/SearchBar.js +16 -16
  169. package/lib/commonjs/legacy/components/SearchBar.js.map +1 -1
  170. package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js +3 -0
  171. package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
  172. package/lib/commonjs/legacy/gesture-handler/fabricUtils.js.map +1 -1
  173. package/lib/commonjs/legacy/useTransitionProgress.js.map +1 -1
  174. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +20 -0
  175. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
  176. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js +18 -0
  177. package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
  178. package/lib/module/components/scroll-to-top-guard/index.js +2 -0
  179. package/lib/module/components/scroll-to-top-guard/index.js.map +1 -0
  180. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +14 -15
  181. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  182. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
  183. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  184. package/lib/module/components/stack/header/ios/iconUtils.ios.js +31 -2
  185. package/lib/module/components/stack/header/ios/iconUtils.ios.js.map +1 -1
  186. package/lib/module/components/stack/header/utils.js +5 -8
  187. package/lib/module/components/stack/header/utils.js.map +1 -1
  188. package/lib/module/experimental/index.js +1 -0
  189. package/lib/module/experimental/index.js.map +1 -1
  190. package/lib/module/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
  191. package/lib/module/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
  192. package/lib/module/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
  193. package/lib/module/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
  194. package/lib/module/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
  195. package/lib/module/fabric/legacy/ScreenNativeComponent.js.map +1 -1
  196. package/lib/module/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  197. package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  198. package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  199. package/lib/module/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
  200. package/lib/module/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
  201. package/lib/module/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
  202. package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +7 -0
  203. package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
  204. package/lib/module/fabric/split/SplitHostNativeComponent.js.map +1 -1
  205. package/lib/module/fabric/split/SplitScreenNativeComponent.js.map +1 -1
  206. package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  207. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  208. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  209. package/lib/module/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
  210. package/lib/module/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
  211. package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
  212. package/lib/module/fabric/stack/StackScreenNativeComponent.js.map +1 -1
  213. package/lib/module/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
  214. package/lib/module/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
  215. package/lib/module/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
  216. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  217. package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  218. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  219. package/lib/module/flags.js +22 -1
  220. package/lib/module/flags.js.map +1 -1
  221. package/lib/module/legacy/components/Screen.js +6 -1
  222. package/lib/module/legacy/components/Screen.js.map +1 -1
  223. package/lib/module/legacy/components/ScreenStackHeaderConfig.js +5 -0
  224. package/lib/module/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
  225. package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
  226. package/lib/module/legacy/components/SearchBar.js +17 -17
  227. package/lib/module/legacy/components/SearchBar.js.map +1 -1
  228. package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js +4 -0
  229. package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
  230. package/lib/module/legacy/gesture-handler/fabricUtils.js.map +1 -1
  231. package/lib/module/legacy/useTransitionProgress.js.map +1 -1
  232. package/lib/module/private/hooks/useRenderDebugInfo.js.map +1 -1
  233. package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +2 -2
  234. package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts +5 -2
  235. package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts.map +1 -1
  236. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts +15 -0
  237. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts.map +1 -0
  238. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts +12 -0
  239. package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts.map +1 -0
  240. package/lib/typescript/components/scroll-to-top-guard/index.d.ts +2 -0
  241. package/lib/typescript/components/scroll-to-top-guard/index.d.ts.map +1 -0
  242. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +24 -0
  243. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  244. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  245. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +13 -0
  246. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  247. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +5 -2
  248. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +1 -1
  249. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
  250. package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts +3 -0
  251. package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts.map +1 -1
  252. package/lib/typescript/components/stack/header/utils.d.ts +1 -2
  253. package/lib/typescript/components/stack/header/utils.d.ts.map +1 -1
  254. package/lib/typescript/components/stack/host/StackHost.types.d.ts +2 -2
  255. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  256. package/lib/typescript/components/stack/host/StackHost.web.d.ts +6 -2
  257. package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
  258. package/lib/typescript/components/stack/screen/StackScreen.web.d.ts +5 -2
  259. package/lib/typescript/components/stack/screen/StackScreen.web.d.ts.map +1 -1
  260. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +5 -2
  261. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +1 -1
  262. package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts +7 -3
  263. package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts.map +1 -1
  264. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +5 -2
  265. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +1 -1
  266. package/lib/typescript/experimental/index.d.ts +1 -0
  267. package/lib/typescript/experimental/index.d.ts.map +1 -1
  268. package/lib/typescript/fabric/NativeScreensModule.d.ts +1 -1
  269. package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts +2 -2
  270. package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts.map +1 -1
  271. package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts +2 -2
  272. package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts.map +1 -1
  273. package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts +3 -2
  274. package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts.map +1 -1
  275. package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts +2 -2
  276. package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts.map +1 -1
  277. package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts +2 -2
  278. package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts.map +1 -1
  279. package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts +2 -2
  280. package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts.map +1 -1
  281. package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts +3 -2
  282. package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts.map +1 -1
  283. package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts +2 -2
  284. package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts.map +1 -1
  285. package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts +3 -3
  286. package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
  287. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
  288. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
  289. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +2 -2
  290. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
  291. package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts +6 -6
  292. package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts.map +1 -1
  293. package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts +2 -2
  294. package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts.map +1 -1
  295. package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts +2 -2
  296. package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts.map +1 -1
  297. package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts +2 -2
  298. package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts.map +1 -1
  299. package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts +6 -0
  300. package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts.map +1 -0
  301. package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts +1 -1
  302. package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts.map +1 -1
  303. package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts +2 -2
  304. package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts.map +1 -1
  305. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +1 -0
  306. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
  307. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +2 -1
  308. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  309. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +2 -2
  310. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  311. package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts +2 -2
  312. package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts.map +1 -1
  313. package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts +2 -2
  314. package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts.map +1 -1
  315. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +2 -2
  316. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
  317. package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts +2 -2
  318. package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts.map +1 -1
  319. package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts +2 -2
  320. package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts.map +1 -1
  321. package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts +2 -2
  322. package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts.map +1 -1
  323. package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts +2 -2
  324. package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts.map +1 -1
  325. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +2 -2
  326. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  327. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +2 -2
  328. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
  329. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +2 -2
  330. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
  331. package/lib/typescript/flags.d.ts +13 -0
  332. package/lib/typescript/flags.d.ts.map +1 -1
  333. package/lib/typescript/legacy/TransitionProgressContext.d.ts +1 -1
  334. package/lib/typescript/legacy/TransitionProgressContext.d.ts.map +1 -1
  335. package/lib/typescript/legacy/components/Screen.d.ts +5 -3
  336. package/lib/typescript/legacy/components/Screen.d.ts.map +1 -1
  337. package/lib/typescript/legacy/components/Screen.web.d.ts +10 -2
  338. package/lib/typescript/legacy/components/Screen.web.d.ts.map +1 -1
  339. package/lib/typescript/legacy/components/ScreenContainer.web.d.ts +5 -2
  340. package/lib/typescript/legacy/components/ScreenContainer.web.d.ts.map +1 -1
  341. package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts +5 -2
  342. package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts.map +1 -1
  343. package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts +5 -2
  344. package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts.map +1 -1
  345. package/lib/typescript/legacy/components/ScreenFooter.web.d.ts +10 -3
  346. package/lib/typescript/legacy/components/ScreenFooter.web.d.ts.map +1 -1
  347. package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts +10 -3
  348. package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts.map +1 -1
  349. package/lib/typescript/legacy/components/ScreenStack.web.d.ts +5 -2
  350. package/lib/typescript/legacy/components/ScreenStack.web.d.ts.map +1 -1
  351. package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts +3 -1
  352. package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts.map +1 -1
  353. package/lib/typescript/legacy/components/ScreenStackItem.d.ts +3 -2
  354. package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
  355. package/lib/typescript/legacy/components/SearchBar.d.ts +3 -3
  356. package/lib/typescript/legacy/components/SearchBar.d.ts.map +1 -1
  357. package/lib/typescript/legacy/components/SearchBar.web.d.ts +5 -2
  358. package/lib/typescript/legacy/components/SearchBar.web.d.ts.map +1 -1
  359. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +15 -12
  360. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
  361. package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts +3 -2
  362. package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts.map +1 -1
  363. package/lib/typescript/legacy/types.d.ts +25 -5
  364. package/lib/typescript/legacy/types.d.ts.map +1 -1
  365. package/lib/typescript/legacy/useTransitionProgress.d.ts +2 -5
  366. package/lib/typescript/legacy/useTransitionProgress.d.ts.map +1 -1
  367. package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts +2 -2
  368. package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts.map +1 -1
  369. package/package.json +17 -17
  370. package/src/components/modals/form-sheet/FormSheet.types.ts +2 -2
  371. package/src/components/scroll-to-top-guard/ScrollToTopGuard.ios.tsx +17 -0
  372. package/src/components/scroll-to-top-guard/ScrollToTopGuard.tsx +18 -0
  373. package/src/components/scroll-to-top-guard/index.ts +1 -0
  374. package/src/components/stack/header/StackHeaderConfig.android.types.ts +24 -0
  375. package/src/components/stack/header/StackHeaderConfig.ios.tsx +32 -22
  376. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +13 -0
  377. package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +1 -23
  378. package/src/components/stack/header/ios/iconUtils.ios.ts +38 -2
  379. package/src/components/stack/header/utils.ts +6 -11
  380. package/src/components/stack/host/StackHost.types.ts +2 -4
  381. package/src/components/tabs/screen/TabsScreen.types.ts +7 -3
  382. package/src/experimental/index.ts +1 -0
  383. package/src/fabric/ScrollViewMarkerNativeComponent.ts +8 -2
  384. package/src/fabric/legacy/FullWindowOverlayNativeComponent.ts +6 -2
  385. package/src/fabric/legacy/ModalScreenNativeComponent.ts +8 -2
  386. package/src/fabric/legacy/ScreenContainerNativeComponent.ts +5 -2
  387. package/src/fabric/legacy/ScreenContentWrapperNativeComponent.ts +2 -2
  388. package/src/fabric/legacy/ScreenFooterNativeComponent.ts +5 -2
  389. package/src/fabric/legacy/ScreenNativeComponent.ts +8 -2
  390. package/src/fabric/legacy/ScreenNavigationContainerNativeComponent.ts +2 -2
  391. package/src/fabric/legacy/ScreenStackHeaderConfigNativeComponent.ts +8 -3
  392. package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -2
  393. package/src/fabric/legacy/ScreenStackNativeComponent.ts +10 -2
  394. package/src/fabric/legacy/SearchBarNativeComponent.ts +10 -7
  395. package/src/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.ts +2 -2
  396. package/src/fabric/modals/form-sheet/FormSheetHostNativeComponent.ts +7 -2
  397. package/src/fabric/safe-area/SafeAreaViewNativeComponent.ts +6 -2
  398. package/src/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.ts +10 -0
  399. package/src/fabric/split/SplitHostNativeComponent.ts +5 -2
  400. package/src/fabric/split/SplitScreenNativeComponent.ts +6 -2
  401. package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +3 -1
  402. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +7 -2
  403. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +2 -1
  404. package/src/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.ts +6 -2
  405. package/src/fabric/stack/StackHeaderSubviewAndroidNativeComponent.ts +6 -2
  406. package/src/fabric/stack/StackHostNativeComponent.ts +5 -2
  407. package/src/fabric/stack/StackScreenNativeComponent.ts +6 -2
  408. package/src/fabric/tabs/TabsBottomAccessoryContentNativeComponent.ts +6 -2
  409. package/src/fabric/tabs/TabsBottomAccessoryNativeComponent.ts +6 -2
  410. package/src/fabric/tabs/TabsHostAndroidNativeComponent.ts +7 -2
  411. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +7 -2
  412. package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +2 -1
  413. package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +2 -1
  414. package/src/flags.ts +26 -0
  415. package/src/legacy/TransitionProgressContext.tsx +1 -1
  416. package/src/legacy/components/Screen.tsx +14 -6
  417. package/src/legacy/components/ScreenStackHeaderConfig.tsx +7 -1
  418. package/src/legacy/components/ScreenStackItem.tsx +3 -4
  419. package/src/legacy/components/SearchBar.tsx +34 -44
  420. package/src/legacy/components/helpers/prepareHeaderBarButtonItems.ts +7 -1
  421. package/src/legacy/gesture-handler/fabricUtils.ts +5 -2
  422. package/src/legacy/types.ts +28 -5
  423. package/src/legacy/useTransitionProgress.tsx +4 -2
  424. package/src/private/hooks/useRenderDebugInfo.tsx +2 -2
  425. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetNativeDismissCoordinator.kt +0 -25
  426. package/ios/ReactMountingTransactionObserving.swift +0 -7
  427. package/ios/bridging/Swift-Bridging.h +0 -7
  428. package/ios/orientation/RNSOrientationProviding.swift +0 -6
  429. package/ios/orientation/RNSOrientationSwift.swift +0 -14
  430. package/ios/split/RNSSplitAppearanceApplicator.swift +0 -199
  431. package/ios/split/RNSSplitAppearanceCoordinator.swift +0 -26
  432. package/ios/split/RNSSplitAppearanceUpdateFlags.swift +0 -11
  433. package/ios/split/RNSSplitHostController.swift +0 -570
  434. package/ios/split/RNSSplitNavigationController.swift +0 -46
  435. package/ios/split/RNSSplitScreenController.swift +0 -133
  436. package/ios/utils/RNSLog.swift +0 -6
@@ -1,570 +0,0 @@
1
- import Foundation
2
- import UIKit
3
-
4
- /// @class RNSSplitHostController
5
- /// @brief A controller associated with the RN native component representing Split host.
6
- ///
7
- /// Manages a collection of RNSSplitScreenComponentView instances,
8
- /// synchronizes appearance settings with props, observes component lifecycle, and emits events.
9
- @objc
10
- public class RNSSplitHostController: UISplitViewController, ReactMountingTransactionObserving,
11
- RNSOrientationProvidingSwift
12
- {
13
- private var needsChildViewControllersUpdate = false
14
-
15
- private var splitAppearanceCoordinator: RNSSplitAppearanceCoordinator
16
- private var splitAppearanceApplicator: RNSSplitAppearanceApplicator
17
-
18
- private var reactEventEmitter: RNSSplitHostComponentEventEmitter {
19
- return splitHostComponentView.reactEventEmitter()
20
- }
21
-
22
- private let splitHostComponentView: RNSSplitHostComponentView
23
-
24
- /// This variable is keeping the value of how many columns were set in the initial render. It's used for validation, because Split doesn't support changing number of columns dynamically.
25
- private let fixedColumnsCount: Int
26
-
27
- private let minNumberOfColumns: Int = 2
28
- private let maxNumberOfColumns: Int = 3
29
- private let maxNumberOfInspectors: Int = 1
30
-
31
- /// Tracks currently visible columns of the UISplitViewController.
32
- ///
33
- /// This set is kept in sync via `UISplitViewControllerDelegate` methods (`willShow` / `willHide`)
34
- /// to reflect which columns are currently rendered in the UI.
35
- /// It ensures that only visible columns are considered (e.g. for accessing topViewController),
36
- /// avoiding crashes when certain columns are collapsed or hidden.
37
- private var visibleColumns: Set<UISplitViewController.Column> = []
38
-
39
- ///
40
- /// @brief Initializes the Split host controller with provided style.
41
- ///
42
- /// The style for the Split component can be passed only in the initialization method and cannot be changed dynamically.
43
- ///
44
- /// @param splitHostComponentView The view managed by this controller.
45
- /// @param numberOfColumns Expected number of visible columns.
46
- ///
47
- @objc public init(
48
- splitHostComponentView: RNSSplitHostComponentView,
49
- numberOfColumns: Int
50
- ) {
51
- self.splitHostComponentView = splitHostComponentView
52
- self.splitAppearanceCoordinator = RNSSplitAppearanceCoordinator()
53
- self.splitAppearanceApplicator = RNSSplitAppearanceApplicator()
54
- self.fixedColumnsCount = numberOfColumns
55
-
56
- super.init(style: RNSSplitHostController.styleByNumberOfColumns(numberOfColumns))
57
-
58
- delegate = self
59
- }
60
-
61
- required init?(coder aDecoder: NSCoder) {
62
- return nil
63
- }
64
-
65
- // MARK: Signals
66
-
67
- @objc
68
- public func setNeedsUpdateOfChildViewControllers() {
69
- needsChildViewControllersUpdate = true
70
- }
71
-
72
- @objc
73
- public func setNeedsAppearanceUpdate() {
74
- splitAppearanceCoordinator.needs(.generalUpdate)
75
- }
76
-
77
- @objc
78
- public func setNeedsSecondaryScreenNavBarUpdate() {
79
- // We noticed a bug on the pure-native component, which is blocking dynamic updates for showsSecondaryOnlyButton.
80
- // Toggling this flag doesn't refresh the component and is updated after triggerig some other interaction, like changing layout.
81
- // We noticed that we can forcefully refresh navigation bar from UINavigationController level by toggling setNavigationBarHidden.
82
- // After some testing, it looks well and I haven't noticed any flicker - missing button is appearing naturally.
83
- // Please note that this is a hack rather than a solution so feel free to remove this code in case of any problems and treat the bug with toggling button as a platform's issue.
84
- splitAppearanceCoordinator.needs(.secondaryScreenNavBarUpdate)
85
- }
86
-
87
- @objc
88
- public func setNeedsDisplayModeUpdate() {
89
- splitAppearanceCoordinator.needs(.displayModeUpdate)
90
- }
91
-
92
- @objc
93
- public func setNeedsOrientationUpdate() {
94
- splitAppearanceCoordinator.needs(.orientationUpdate)
95
- }
96
-
97
- // MARK: Updating
98
-
99
- @objc
100
- public func updateChildViewControllersIfNeeded() {
101
- if needsChildViewControllersUpdate {
102
- updateChildViewControllers()
103
- }
104
- }
105
-
106
- ///
107
- /// @brief Creates and attaches the Split child controllers based on the current React subviews.
108
- ///
109
- /// It validates constraints for Split hierarchy and it will crash after recognizing an invalid state,
110
- /// e. g. dynamically changed number of columns or number of columns that isn't between defined bounds.
111
- /// If Split constraints are met, it attaches SplitScreen representatives to SplitHost component.
112
- ///
113
- @objc
114
- public func updateChildViewControllers() {
115
- precondition(
116
- needsChildViewControllersUpdate,
117
- "[RNScreens] Child view controller must be invalidated when update is forced!")
118
-
119
- let currentColumns = filterSubviews(
120
- ofType: RNSSplitScreenColumnType.column, in: splitReactSubviews)
121
- let currentInspectors = filterSubviews(
122
- ofType: RNSSplitScreenColumnType.inspector, in: splitReactSubviews)
123
-
124
- validateColumns(currentColumns)
125
- validateInspectors(currentInspectors)
126
-
127
- let currentViewControllers = currentColumns.map {
128
- RNSSplitNavigationController(rootViewController: $0.controller)
129
- }
130
-
131
- viewControllers = currentViewControllers
132
-
133
- #if compiler(>=6.2)
134
- maybeSetupInspector(currentInspectors)
135
- #endif
136
-
137
- for controller in currentViewControllers {
138
- controller.viewFrameOriginChangeObserver = self
139
- }
140
-
141
- needsChildViewControllersUpdate = false
142
- }
143
-
144
- func updateSplitAppearanceIfNeeded() {
145
- splitAppearanceApplicator.updateAppearanceIfNeeded(
146
- self.splitHostComponentView, self, self.splitAppearanceCoordinator)
147
- }
148
-
149
- ///
150
- /// @brief Triggering appearance updates on secondary column's UINavigationBar component
151
- ///
152
- /// It validates that the secondary VC is valid UINavigationController and it updates the navbar
153
- /// state by toggling it's visibility, what should be performed in a single batch of updates.
154
- ///
155
- public func refreshSecondaryNavBar() {
156
- let secondaryViewController = viewController(for: .secondary)
157
- assert(
158
- secondaryViewController != nil,
159
- "[RNScreens] Failed to refresh secondary nav bar. Secondary view controller is nil.")
160
- assert(
161
- secondaryViewController is UINavigationController,
162
- "[RNScreens] Expected UINavigationController but got \(type(of: secondaryViewController))")
163
- let navigationController = secondaryViewController as! UINavigationController
164
-
165
- /// The assumption is that it should come in a single batch and it won't cause any delays in rendering the content.
166
- navigationController.setNavigationBarHidden(true, animated: false)
167
- navigationController.setNavigationBarHidden(false, animated: false)
168
- }
169
-
170
- // MARK: Helpers
171
-
172
- ///
173
- /// @brief Gets the appropriate style for a specified number of columns.
174
- ///
175
- /// This utility maps a given number of columns to the corresponding UISplitViewController.Style.
176
- ///
177
- /// @param numberOfColumns The number of columns for the SplitView.
178
- /// @return A UISplitViewController.Style corresponding to the provided column count.
179
- ///
180
- static func styleByNumberOfColumns(_ numberOfColumns: Int) -> UISplitViewController.Style {
181
- switch numberOfColumns {
182
- case 2:
183
- return .doubleColumn
184
- case 3:
185
- return .tripleColumn
186
- default:
187
- return .unspecified
188
- }
189
- }
190
-
191
- ///
192
- /// @brief Filters the given subviews array by a specific column type.
193
- ///
194
- /// Iterates over the provided subviews array and returns only the elements that match
195
- /// the specified RNSSplitScreenColumnType (e.g., .column, .inspector).
196
- ///
197
- /// @param type The target RNSSplitScreenColumnType to filter for.
198
- /// @param subviews The array of RNSSplitScreenComponentView elements to filter.
199
- /// @return A filtered array of RNSSplitScreenComponentView objects with the specified column type.
200
- ///
201
- func filterSubviews(
202
- ofType type: RNSSplitScreenColumnType, in subviews: [RNSSplitScreenComponentView]
203
- ) -> [RNSSplitScreenComponentView] {
204
- return subviews.filter { $0.columnType == type }
205
- }
206
-
207
- // MARK: Public setters
208
-
209
- ///
210
- /// @brief Shows or hides the inspector screen.
211
- /// @remarks Inspector column is only available for iOS 26 or higher.
212
- ///
213
- /// @param showInspector Determines whether the inspector column should be visible.
214
- ///
215
- @objc
216
- public func toggleSplitViewInspector(_ showInspector: Bool) {
217
- #if compiler(>=6.2)
218
- if showInspector {
219
- maybeShowInspector()
220
- } else {
221
- maybeHideInspector()
222
- }
223
- #endif
224
- }
225
-
226
- ///
227
- /// @brief Programmatically shows a specific column identified by its string name.
228
- ///
229
- /// Maps the string column name to the corresponding `UISplitViewController.Column` and calls `show(_:)`.
230
- ///
231
- /// @param columnName A string representing the column to show: `"primary"`, `"supplementary"`, or `"secondary"`.
232
- ///
233
- @objc
234
- public func showColumnNamed(_ columnName: String) {
235
- guard let column = splitViewColumnFromString(columnName) else {
236
- assertionFailure("[RNScreens] Unknown column name: \(columnName)")
237
- return
238
- }
239
-
240
- show(column)
241
- }
242
-
243
- ///
244
- /// @brief Maps a string column name to its corresponding `UISplitViewController.Column` value.
245
- ///
246
- /// @param name The column name string: `"primary"`, `"supplementary"`, or `"secondary"`.
247
- /// @return The corresponding `UISplitViewController.Column`, or `nil` if the name is not recognized.
248
- ///
249
- private func splitViewColumnFromString(_ name: String) -> UISplitViewController.Column? {
250
- switch name {
251
- case "primary":
252
- return .primary
253
- case "supplementary":
254
- return .supplementary
255
- case "secondary":
256
- return .secondary
257
- default:
258
- return nil
259
- }
260
- }
261
-
262
- // MARK: ReactMountingTransactionObserving
263
-
264
- ///
265
- /// @brief Called before mounting transaction.
266
- ///
267
- @objc
268
- public func reactMountingTransactionWillMount() {
269
- // noop
270
- }
271
-
272
- ///
273
- /// @brief Called after mounting transaction.
274
- ///
275
- /// Updates children and the appearance, checks if the hierarchy is valid after applying updates.
276
- ///
277
- @objc
278
- public func reactMountingTransactionDidMount() {
279
- updateChildViewControllersIfNeeded()
280
- updateSplitAppearanceIfNeeded()
281
- validateSplitViewHierarchy()
282
- }
283
-
284
- // MARK: RNSSplitHostOrientationProviding
285
- @objc
286
- public func evaluateOrientation() -> RNSOrientationSwift {
287
- return convertToSwiftEnum(splitHostComponentView.orientation)
288
- }
289
-
290
- func convertToSwiftEnum(_ orientation: RNSOrientation) -> RNSOrientationSwift {
291
- switch orientation {
292
- case RNSOrientation.inherit:
293
- return .inherit
294
- case RNSOrientation.all:
295
- return .all
296
- case RNSOrientation.allButUpsideDown:
297
- return .allButUpsideDown
298
- case RNSOrientation.portrait:
299
- return .portrait
300
- case RNSOrientation.portraitUp:
301
- return .portraitUp
302
- case RNSOrientation.portraitDown:
303
- return .portraitDown
304
- case RNSOrientation.landscape:
305
- return .landscape
306
- case RNSOrientation.landscapeLeft:
307
- return .landscapeLeft
308
- case RNSOrientation.landscapeRight:
309
- return .landscapeRight
310
- @unknown default:
311
- return .inherit
312
- }
313
- }
314
-
315
- // MARK: Validators
316
-
317
- ///
318
- /// @brief Validates that child structure meets required constraints defined for columns and the inspector.
319
- ///
320
- func validateSplitViewHierarchy() {
321
- let columns = filterSubviews(
322
- ofType: RNSSplitScreenColumnType.column, in: splitReactSubviews)
323
- let inspectors = filterSubviews(
324
- ofType: RNSSplitScreenColumnType.inspector, in: splitReactSubviews)
325
-
326
- validateColumns(columns)
327
- validateInspectors(inspectors)
328
- }
329
-
330
- ///
331
- /// @brief Ensures that number of columns is valid and hasn't changed dynamically.
332
- ///
333
- func validateColumns(_ columns: [RNSSplitScreenComponentView]) {
334
- assert(
335
- columns.count >= minNumberOfColumns
336
- && columns.count <= maxNumberOfColumns,
337
- "[RNScreens] Split can only have from \(minNumberOfColumns) to \(maxNumberOfColumns) columns"
338
- )
339
-
340
- assert(
341
- columns.count == fixedColumnsCount,
342
- "[RNScreens] Split number of columns shouldn't change dynamically")
343
- }
344
-
345
- ///
346
- /// @brief Ensures that at most one inspector is present.
347
- ///
348
- func validateInspectors(_ inspectors: [RNSSplitScreenComponentView]) {
349
- assert(
350
- inspectors.count <= maxNumberOfInspectors,
351
- "[RNScreens] Split can only have \(maxNumberOfInspectors) inspector")
352
- }
353
- }
354
-
355
- extension RNSSplitHostController {
356
-
357
- ///
358
- /// @brief Gets the children RNSSplitScreenController instances.
359
- ///
360
- /// Accesses Split controllers associated with presented columns. It asserts that each view controller is a navigation controller and its topViewController is of type RNSSplitScreenController.
361
- ///
362
- /// @return An array of RNSSplitScreenController corresponding to current split view columns.
363
- ///
364
- var splitScreenControllers: [RNSSplitScreenController] {
365
- return visibleColumns.compactMap { column in
366
- let viewController = self.viewController(for: column)
367
- assert(viewController != nil, "[RNScreens] viewController for column \(column) is nil.")
368
-
369
- let splitNavigationController = viewController as? RNSSplitNavigationController
370
- assert(
371
- splitNavigationController != nil,
372
- "[RNScreens] Expected RNSSplitNavigationController but got \(type(of: viewController))")
373
-
374
- let maybeSplitScreenController = splitNavigationController?.topViewController
375
- assert(
376
- maybeSplitScreenController != nil,
377
- "[RNScreens] RNSSplitScreenController is nil for column \(column)")
378
- assert(
379
- maybeSplitScreenController is RNSSplitScreenController,
380
- "[RNScreens] Expected RNSSplitScreenController but got \(type(of: maybeSplitScreenController))"
381
- )
382
-
383
- return maybeSplitScreenController as? RNSSplitScreenController
384
- }
385
- }
386
-
387
- ///
388
- /// @brief Gets all React subviews of type RNSSplitScreenComponentView.
389
- ///
390
- /// Accesses all the subviews from the reactSubviews collection. It asserts that each one is a RNSSplitScreenComponentView.
391
- ///
392
- /// @return An array of RNSSplitScreenComponentView subviews which are children of the host component view.
393
- ///
394
- var splitReactSubviews: [RNSSplitScreenComponentView] {
395
- return self.splitHostComponentView.reactSubviews().lazy.map { subview in
396
- assert(
397
- subview is RNSSplitScreenComponentView,
398
- "[RNScreens] Expected RNSSplitScreenComponentView but got \(type(of: subview))")
399
-
400
- return subview as! RNSSplitScreenComponentView
401
- }
402
- }
403
- }
404
-
405
- extension RNSSplitHostController: RNSSplitNavigationControllerViewFrameObserver {
406
-
407
- ///
408
- /// @brief Notifies that an origin of parent RNSSplitNavigationController frame has changed.
409
- ///
410
- /// It iterates over children controllers and notifies them for the layout update.
411
- ///
412
- /// @param splitNavCtrl The navigation controller whose frame origin changed.
413
- ///
414
- func splitNavCtrlViewDidChangeFrameOrigin(
415
- _ splitNavCtrl: RNSSplitNavigationController
416
- ) {
417
- for controller in self.splitScreenControllers {
418
- controller.columnPositioningDidChangeIn(splitViewController: self)
419
- }
420
- }
421
- }
422
-
423
- /// This extension is a workaround for missing UISplitViewController symbols introduced in iOS 26,
424
- /// allowing the project to compile and run on iOS 18 or earlier versions.
425
-
426
- #if compiler(>=6.2)
427
- extension RNSSplitHostController {
428
-
429
- ///
430
- /// @brief Sets up the inspector column if available.
431
- /// @remarks Inspector columns is available only on iOS 26 or higher.
432
- ///
433
- /// Attaches a view controller for the inspector column.
434
- ///
435
- /// @param inspectors An array of inspector-type RNSSplitScreenComponentView subviews.
436
- ///
437
- func maybeSetupInspector(_ inspectors: [RNSSplitScreenComponentView]) {
438
- #if !os(tvOS)
439
- if #available(iOS 26.0, *) {
440
- let inspector = inspectors.first
441
- if inspector != nil {
442
- let inspectorViewController = RNSSplitNavigationController(
443
- rootViewController: inspector!.controller)
444
- setViewController(inspectorViewController, for: .inspector)
445
- }
446
- }
447
- #endif
448
- }
449
-
450
- ///
451
- /// @brief Shows the inspector column when available.
452
- /// @remarks Inspector columns is available only on iOS 26 or higher.
453
- ///
454
- /// Uses the UISplitViewController's new API introduced in iOS 26 to show the inspector column.
455
- ///
456
- func maybeShowInspector() {
457
- #if !os(tvOS)
458
- if #available(iOS 26.0, *) {
459
- show(.inspector)
460
- }
461
- #endif
462
- }
463
-
464
- ///
465
- /// @brief Hides the inspector column when available.
466
- /// @remarks Inspector columns is available only on iOS 26 or higher.
467
- ///
468
- /// Uses the UISplitViewController's new API introduced in iOS 26 to hide the inspector column.
469
- ///
470
- func maybeHideInspector() {
471
- #if !os(tvOS)
472
- if #available(iOS 26.0, *) {
473
- hide(.inspector)
474
- }
475
- #endif
476
- }
477
- }
478
- #endif
479
-
480
- extension RNSSplitHostController: UISplitViewControllerDelegate {
481
- public func splitViewController(
482
- _ svc: UISplitViewController, willShow column: UISplitViewController.Column
483
- ) {
484
- visibleColumns.insert(column)
485
- }
486
-
487
- public func splitViewController(
488
- _ svc: UISplitViewController, willHide column: UISplitViewController.Column
489
- ) {
490
- visibleColumns.remove(column)
491
- }
492
-
493
- public func splitViewControllerDidCollapse(_ svc: UISplitViewController) {
494
- reactEventEmitter.emitOnCollapse()
495
- }
496
-
497
- public func splitViewControllerDidExpand(_ svc: UISplitViewController) {
498
- reactEventEmitter.emitOnExpand()
499
- }
500
-
501
- #if compiler(>=6.2)
502
- ///
503
- /// @brief Called after a column in the split view controller has been hidden from the interface.
504
- ///
505
- /// Currently emits onHideInspector event for the inspector if applicable.
506
- ///
507
- /// @param svc The split view controller that just hid the column.
508
- /// @param column The column that was hidden.
509
- ///
510
- public func splitViewController(
511
- _ svc: UISplitViewController, didHide column: UISplitViewController.Column
512
- ) {
513
- #if !os(tvOS)
514
- if #available(iOS 26.0, *) {
515
- // TODO: we may consider removing this logic, because it could be handled by onViewDidDisappear on the column level
516
- // On the other hand, maybe dedicated event related to the inspector would be a better approach.
517
- // For now I am leaving it, but feel free to drop this method if there's any reason that `onDidDisappear` works better.
518
-
519
- if column != .inspector {
520
- return
521
- }
522
-
523
- // `didHide` for modal is called on finger down for dismiss, what is problematic, because we can cancel dismissing modal.
524
- // In this scenario, the modal inspector might receive an invalid state and will deviate from the JS value.
525
- // Therefore, for event emissions, we need to ensure that the view was detached from the view hierarchy, by checking its window.
526
- if let inspectorViewController = viewController(for: .inspector) {
527
- if inspectorViewController.view.window == nil {
528
- reactEventEmitter.emitOnHideInspector()
529
- }
530
- }
531
-
532
- }
533
- #endif
534
- }
535
- #endif
536
-
537
- @objc
538
- public func splitViewController(
539
- _ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode
540
- ) {
541
- if self.displayMode != displayMode {
542
- reactEventEmitter.emitOnDisplayModeWillChange(from: self.displayMode, to: displayMode)
543
- }
544
-
545
- let notifyColumnPositioningDidChange = { [weak self] in
546
- guard let self = self else { return }
547
- for controller in self.splitScreenControllers {
548
- controller.columnPositioningDidChangeIn(splitViewController: self)
549
- }
550
- }
551
-
552
- if let coordinator = svc.transitionCoordinator {
553
- coordinator.animate(alongsideTransition: nil) { _ in
554
- notifyColumnPositioningDidChange()
555
- }
556
- } else {
557
- notifyColumnPositioningDidChange()
558
- }
559
- }
560
-
561
- public func splitViewController(
562
- _ svc: UISplitViewController,
563
- topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column
564
- ) -> UISplitViewController.Column {
565
- if splitHostComponentView.hasCustomTopColumnForCollapsing {
566
- return splitHostComponentView.topColumnForCollapsingColumn
567
- }
568
- return proposedTopColumn
569
- }
570
- }
@@ -1,46 +0,0 @@
1
- import Foundation
2
- import UIKit
3
-
4
- /// @brief A protocol that observes origin changes in a RNSSplitNavigationController’s view frame.
5
- ///
6
- /// The subscriber will be notified when the view's origin changes.
7
- protocol RNSSplitNavigationControllerViewFrameObserver: AnyObject {
8
- func splitNavCtrlViewDidChangeFrameOrigin(
9
- _ splitNavCtrl: RNSSplitNavigationController)
10
- }
11
-
12
- /// @class RNSSplitNavigationController
13
- /// @brief A subclass of UINavigationController, creates a view that wraps view associated with RNSSplitScreenController.
14
- ///
15
- /// This subclass is responsible for tracking when the underlying view's frame origin changes,
16
- /// allowing for syncing the ShadowTree layout.
17
- ///
18
- /// It observes origin changes via key-value observer and notifies a delegate.
19
- @objc
20
- public class RNSSplitNavigationController: UINavigationController {
21
- private var viewFrameObservation: NSKeyValueObservation?
22
- weak var viewFrameOriginChangeObserver: RNSSplitNavigationControllerViewFrameObserver?
23
-
24
- ///
25
- /// @brief Called after the view controller’s view has been loaded.
26
- ///
27
- /// Sets up a frame-origin Key-Value Observer to monitor view position changes and propagate them via delegate to RNSSplitHostController.
28
- ///
29
- override public func viewDidLoad() {
30
- super.viewDidLoad()
31
-
32
- viewFrameObservation?.invalidate()
33
- viewFrameObservation = self.view.observe(\.frame, options: [.old, .new]) {
34
- [weak self] (view, change) in
35
- guard let oldFrame = change.oldValue, let newFrame = change.newValue else { return }
36
-
37
- if oldFrame.origin != newFrame.origin {
38
- self?.onViewOriginChange()
39
- }
40
- }
41
- }
42
-
43
- private func onViewOriginChange() {
44
- viewFrameOriginChangeObserver?.splitNavCtrlViewDidChangeFrameOrigin(self)
45
- }
46
- }