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
package/README.md CHANGED
@@ -256,9 +256,8 @@ React native screens library is licensed under [The MIT License](LICENSE).
256
256
 
257
257
  ## Credits
258
258
 
259
- This project has been build and is maintained thanks to the support from [Shopify](https://shopify.com), [Expo.io](https://expo.io), and [Software Mansion](https://swmansion.com).
259
+ This project has been built and is maintained thanks to the support from [Expo.io](https://expo.io) and [Software Mansion](https://swmansion.com).
260
260
 
261
- [![shopify](https://avatars1.githubusercontent.com/u/8085?v=3&s=100 'Shopify.com')](https://shopify.com)
262
261
  [![expo](https://avatars2.githubusercontent.com/u/12504344?v=3&s=100 'Expo.io')](https://expo.io)
263
262
  [![swm](https://logo.swmansion.com/logo?color=white&variant=desktop&width=150&tag=react-native-reanimated-github 'Software Mansion')](https://swmansion.com)
264
263
 
package/RNScreens.podspec CHANGED
@@ -6,7 +6,7 @@ debug_logging_enabled = ENV['RNS_DEBUG_LOGGING'] == '1'
6
6
  use_cxxbridge = ENV['RNS_USE_CXXBRIDGE'] == '1'
7
7
 
8
8
 
9
- source_files_exts = '{h,m,mm,cpp,swift}'
9
+ source_files_exts = '{h,m,mm,cpp}'
10
10
  source_files = ["ios/**/*.#{source_files_exts}"]
11
11
 
12
12
  min_supported_ios_version = "15.1"
@@ -14,17 +14,14 @@ min_supported_tvos_version = "15.1"
14
14
  min_supported_visionos_version = "1.0"
15
15
 
16
16
  rnscreens_cpp_flags = []
17
- rnscreens_swift_flags = []
18
17
 
19
18
  if debug_logging_enabled
20
19
  rnscreens_cpp_flags << "-DRNS_DEBUG_LOGGING=1"
21
- rnscreens_swift_flags << "-DRNS_DEBUG_LOGGING"
22
20
  end
23
21
  rnscreens_cpp_flags << "-DRNS_USE_CXXBRIDGE=1" if use_cxxbridge
24
22
 
25
23
  rnscreens_config = {
26
- 'OTHER_CPLUSPLUSFLAGS' => rnscreens_cpp_flags.join(" "),
27
- 'OTHER_SWIFT_FLAGS' => rnscreens_swift_flags.join(" ")
24
+ 'OTHER_CPLUSPLUSFLAGS' => rnscreens_cpp_flags.join(" ")
28
25
  }
29
26
 
30
27
  rnscreens_config['DEFINES_MODULE'] = 'YES'
@@ -42,7 +39,6 @@ Pod::Spec.new do |s|
42
39
  s.platforms = { :ios => min_supported_ios_version, :tvos => min_supported_tvos_version, :visionos => min_supported_visionos_version }
43
40
  s.source = { :git => "https://github.com/software-mansion/react-native-screens.git", :tag => "#{s.version}" }
44
41
  s.source_files = source_files
45
- s.project_header_files = "ios/bridging/Swift-Bridging.h"
46
42
  s.requires_arc = true
47
43
 
48
44
  if debug_logging_enabled
@@ -82,7 +82,27 @@ if (isRunningInContextOfScreensRepo()) {
82
82
  apply plugin: "com.facebook.react"
83
83
  }
84
84
  apply plugin: 'com.android.library'
85
- apply plugin: 'kotlin-android'
85
+
86
+ // AGP 9 ships built-in Kotlin support enabled by default. When it is active, AGP compiles
87
+ // our Kotlin sources itself and *additionally* applying the Kotlin Android plugin fails the build.
88
+ // Consuming apps may opt out with `android.builtInKotlin=false` in which case AGP does NOT
89
+ // provide Kotlin and we MUST apply the plugin ourselves.
90
+ // AGP < 9 had no built-in Kotlin at all, so we always apply it there.
91
+ def shouldEnableAgpFallback() {
92
+ def agpMajorVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger()
93
+ if (agpMajorVersion <= 8) {
94
+ return true
95
+ }
96
+
97
+ def propertyVal = providers.gradleProperty("android.builtInKotlin").orNull
98
+ def isBuiltInKotlinEnabled = propertyVal != null ? propertyVal.toBoolean() : true
99
+
100
+ return !isBuiltInKotlinEnabled
101
+ }
102
+
103
+ if (shouldEnableAgpFallback()) {
104
+ apply plugin: 'kotlin-android'
105
+ }
86
106
 
87
107
  def reactNativeArchitectures() {
88
108
  def value = project.getProperties().get("reactNativeArchitectures")
@@ -165,6 +185,11 @@ android {
165
185
  }
166
186
  sourceSets.main {
167
187
  ext.androidResDir = "src/main/res"
188
+ kotlin {
189
+ srcDirs += [
190
+ "src/fabric/java",
191
+ ]
192
+ }
168
193
  java {
169
194
  srcDirs += [
170
195
  "src/fabric/java",
@@ -64,6 +64,11 @@ class NativeProxy {
64
64
 
65
65
  val screen = weakScreeRef.get()
66
66
  if (screen is Screen) {
67
+ // Fabric's mounting transaction removes the screen on a Choreographer frame callback,
68
+ // which can execute before `startRemovalTransition` (scheduled via `Handler.post`).
69
+ // To prevent `Screen.isBeingRemoved` from being read as false during teardown,
70
+ // we must set this flag synchronously here.
71
+ screen.markAsBeingRemoved()
67
72
  val isScheduled =
68
73
  screen.post {
69
74
  screen.startRemovalTransition()
@@ -18,8 +18,8 @@ import com.swmansion.rnscreens.legacy.ScreenStackViewManager
18
18
  import com.swmansion.rnscreens.legacy.ScreenViewManager
19
19
  import com.swmansion.rnscreens.legacy.SearchBarManager
20
20
  import com.swmansion.rnscreens.legacy.utils.ScreenDummyLayoutHelper
21
- import com.swmansion.rnscreens.modals.formsheet.FormSheetContentWrapperViewManager
22
- import com.swmansion.rnscreens.modals.formsheet.FormSheetHostViewManager
21
+ import com.swmansion.rnscreens.modals.formsheet.react.contentwrapper.FormSheetContentWrapperViewManager
22
+ import com.swmansion.rnscreens.modals.formsheet.react.host.FormSheetHostViewManager
23
23
  import com.swmansion.rnscreens.safearea.SafeAreaViewManager
24
24
  import com.swmansion.rnscreens.scrollviewmarker.ScrollViewMarkerViewManager
25
25
  import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigViewManager
@@ -71,7 +71,14 @@ class Screen(
71
71
  private set
72
72
  var screenId: String? = null
73
73
  var isStatusBarAnimated: Boolean? = null
74
+
75
+ // Can be set on the mounting coordinator's thread (see `markAsBeingRemoved`), read on the UI thread.
76
+ @Volatile
74
77
  var isBeingRemoved = false
78
+ private set
79
+
80
+ // Keeps `startTransitionRecursive` / `endTransitionRecursive` calls paired. Should be used on UI thread only.
81
+ private var isRemovalTransitionStarted = false
75
82
 
76
83
  // Props for controlling modal presentation
77
84
  var isSheetGrabberVisible: Boolean = false
@@ -439,19 +446,28 @@ class Screen(
439
446
 
440
447
  var nativeBackButtonDismissalEnabled: Boolean = true
441
448
 
449
+ /**
450
+ * Marks this screen as being removed from the native stack. Safe to call off the UI thread;
451
+ * must run before the mount transaction removing this screen executes.
452
+ */
453
+ fun markAsBeingRemoved() {
454
+ isBeingRemoved = true
455
+ }
456
+
442
457
  fun startRemovalTransition() {
443
- if (!isBeingRemoved) {
444
- isBeingRemoved = true
458
+ isBeingRemoved = true
459
+ if (!isRemovalTransitionStarted) {
460
+ isRemovalTransitionStarted = true
445
461
  startTransitionRecursive(this)
446
462
  }
447
463
  }
448
464
 
449
465
  fun endRemovalTransition() {
450
- if (!isBeingRemoved) {
451
- return
466
+ if (isRemovalTransitionStarted) {
467
+ isRemovalTransitionStarted = false
468
+ isBeingRemoved = false
469
+ endTransitionRecursive(this)
452
470
  }
453
- isBeingRemoved = false
454
- endTransitionRecursive(this)
455
471
  }
456
472
 
457
473
  private fun endTransitionRecursive(parent: ViewGroup) {
@@ -85,6 +85,12 @@ class ScreenStackFragment :
85
85
 
86
86
  private var lastInsetsCompat: WindowInsetsCompat? = null
87
87
 
88
+ // Container reference is captured at registration, because `screen.container` is already
89
+ // null during teardown. Necessary for unregistering inset & layout listeners in `onDestroyView`.
90
+ private var containerWithSheetListeners: ScreenContainer? = null
91
+ private var containerOnLayoutChangeListener: View.OnLayoutChangeListener? = null
92
+ private var containerOnApplyWindowInsetsListener: View.OnApplyWindowInsetsListener? = null
93
+
88
94
  @SuppressLint("ValidFragment")
89
95
  constructor(screenView: Screen) : super(screenView)
90
96
 
@@ -337,6 +343,7 @@ class ScreenStackFragment :
337
343
  // - Screen.fragment
338
344
  lastActiveHeaderConfig?.clearActionBarIfOwned(activity as? AppCompatActivity)
339
345
  lastActiveHeaderConfig = null
346
+ detachInsetsAndLayoutListenersFromContainer()
340
347
  super.onDestroyView()
341
348
  }
342
349
 
@@ -522,15 +529,20 @@ class ScreenStackFragment :
522
529
  // Mark: Avoiding top inset by BottomSheet
523
530
 
524
531
  private fun attachInsetsAndLayoutListenersToBottomSheet(sheetTransitionCoordinator: BottomSheetTransitionCoordinator) {
525
- screen.container?.apply {
532
+ screen.container?.let { container ->
533
+ containerWithSheetListeners = container
534
+
526
535
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
527
- setOnApplyWindowInsetsListener { _, insets ->
528
- val insetsCompat = WindowInsetsCompat.toWindowInsetsCompat(insets, this)
529
- handleInsetsUpdateAndNotifyTransition(
530
- insetsCompat,
531
- )
532
- insets
533
- }
536
+ val insetsListener =
537
+ View.OnApplyWindowInsetsListener { _, insets ->
538
+ val insetsCompat = WindowInsetsCompat.toWindowInsetsCompat(insets, container)
539
+ handleInsetsUpdateAndNotifyTransition(
540
+ insetsCompat,
541
+ )
542
+ insets
543
+ }
544
+ containerOnApplyWindowInsetsListener = insetsListener
545
+ container.setOnApplyWindowInsetsListener(insetsListener)
534
546
  } else {
535
547
  val bottomSheetWindowInsetListenerChain = requireBottomSheetWindowInsetsListenerChain()
536
548
  bottomSheetWindowInsetListenerChain.addListener { _, windowInsets ->
@@ -540,11 +552,28 @@ class ScreenStackFragment :
540
552
  windowInsets
541
553
  }
542
554
  }
555
+
556
+ val layoutChangeListener =
557
+ View.OnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
558
+ sheetTransitionCoordinator.onScreenContainerLayoutChanged(screen)
559
+ }
560
+ containerOnLayoutChangeListener = layoutChangeListener
561
+ container.addOnLayoutChangeListener(layoutChangeListener)
543
562
  }
563
+ }
544
564
 
545
- screen.container?.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
546
- sheetTransitionCoordinator.onScreenContainerLayoutChanged(screen)
565
+ private fun detachInsetsAndLayoutListenersFromContainer() {
566
+ containerWithSheetListeners?.let { container ->
567
+ if (containerOnLayoutChangeListener != null) {
568
+ container.removeOnLayoutChangeListener(containerOnLayoutChangeListener)
569
+ }
570
+ if (containerOnApplyWindowInsetsListener != null) {
571
+ container.setOnApplyWindowInsetsListener(null)
572
+ }
547
573
  }
574
+ containerWithSheetListeners = null
575
+ containerOnLayoutChangeListener = null
576
+ containerOnApplyWindowInsetsListener = null
548
577
  }
549
578
 
550
579
  private fun handleInsetsUpdateAndNotifyTransition(insetsCompat: WindowInsetsCompat) {
@@ -323,6 +323,11 @@ open class ScreenViewManager :
323
323
  value: Boolean,
324
324
  ) = Unit
325
325
 
326
+ override fun setIosOrientationInheritanceFixEnabled(
327
+ view: Screen?,
328
+ value: Boolean,
329
+ ) = Unit
330
+
326
331
  // END mark: iOS-only
327
332
 
328
333
  override fun setAndroidResetScreenShadowStateOnOrientationChangeEnabled(
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.coordinator
2
2
 
3
3
  import android.os.Build
4
4
  import android.widget.FrameLayout
@@ -6,6 +6,7 @@ import androidx.core.view.doOnNextLayout
6
6
  import com.google.android.material.shape.CornerFamily
7
7
  import com.google.android.material.shape.MaterialShapeDrawable
8
8
  import com.google.android.material.shape.ShapeAppearanceModel
9
+ import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetConfig
9
10
  import com.swmansion.rnscreens.utils.dpToPx
10
11
 
11
12
  internal class FormSheetAppearanceCoordinator(
@@ -1,8 +1,9 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.coordinator
2
2
 
3
3
  import android.view.View
4
4
  import android.widget.FrameLayout
5
5
  import com.google.android.material.bottomsheet.BottomSheetBehavior
6
+ import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetDetents
6
7
 
7
8
  internal class FormSheetBehaviorController(
8
9
  private val sheetView: FrameLayout,
@@ -12,6 +13,7 @@ internal class FormSheetBehaviorController(
12
13
 
13
14
  private var currentDetentsCount: Int = 1
14
15
  private var lastEmittedDetentIndex: Int = FORM_SHEET_UNKNOWN_DETENT_INDEX
16
+ private var lastStableState: Int = BottomSheetBehavior.STATE_COLLAPSED
15
17
 
16
18
  private val bottomSheetCallback =
17
19
  object : BottomSheetBehavior.BottomSheetCallback() {
@@ -19,6 +21,8 @@ internal class FormSheetBehaviorController(
19
21
  bottomSheet: View,
20
22
  newState: Int,
21
23
  ) {
24
+ rememberStateIfStable(newState)
25
+
22
26
  val index = mapStateToDetentIndex(newState)
23
27
  if (index != FORM_SHEET_UNKNOWN_DETENT_INDEX && index != lastEmittedDetentIndex) {
24
28
  lastEmittedDetentIndex = index
@@ -34,6 +38,7 @@ internal class FormSheetBehaviorController(
34
38
 
35
39
  init {
36
40
  behavior.isHideable = true
41
+ rememberStateIfStable(behavior.state)
37
42
  }
38
43
 
39
44
  internal fun setup() {
@@ -44,6 +49,25 @@ internal class FormSheetBehaviorController(
44
49
  behavior.removeBottomSheetCallback(bottomSheetCallback)
45
50
  }
46
51
 
52
+ internal fun restoreLastStableState() {
53
+ if (behavior.state != BottomSheetBehavior.STATE_HIDDEN) {
54
+ return
55
+ }
56
+
57
+ behavior.state = lastStableState
58
+ }
59
+
60
+ private fun rememberStateIfStable(state: Int) {
61
+ val isVisibleRestingState =
62
+ state == BottomSheetBehavior.STATE_EXPANDED ||
63
+ state == BottomSheetBehavior.STATE_COLLAPSED ||
64
+ state == BottomSheetBehavior.STATE_HALF_EXPANDED
65
+
66
+ if (isVisibleRestingState) {
67
+ lastStableState = state
68
+ }
69
+ }
70
+
47
71
  /**
48
72
  * @param detents - parsed detents configuration.
49
73
  * @param sheetAvailableSpace - the full window height that detent fractions are measured against.
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.coordinator
2
2
 
3
3
  import android.view.ViewGroup
4
4
  import android.widget.FrameLayout
@@ -6,6 +6,9 @@ import androidx.core.view.ViewCompat
6
6
  import androidx.core.view.WindowInsetsCompat
7
7
  import androidx.core.view.doOnLayout
8
8
  import com.google.android.material.bottomsheet.BottomSheetDialog
9
+ import com.swmansion.rnscreens.modals.formsheet.native.core.FormSheetContainer
10
+ import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeDelegate
11
+ import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetDetents
9
12
 
10
13
  internal class FormSheetDimensionsCoordinator(
11
14
  private val dialog: BottomSheetDialog,
@@ -0,0 +1,50 @@
1
+ package com.swmansion.rnscreens.modals.formsheet.native.coordinator
2
+
3
+ import androidx.activity.OnBackPressedCallback
4
+ import com.swmansion.rnscreens.modals.dimmingview.DimmingViewManager
5
+ import com.swmansion.rnscreens.modals.formsheet.native.core.FormSheetDialog
6
+
7
+ internal class FormSheetNativeDismissCoordinator(
8
+ private val dialog: FormSheetDialog,
9
+ private val behaviorController: FormSheetBehaviorController?,
10
+ private val dimmingManager: DimmingViewManager,
11
+ private val onDismissAllowed: () -> Unit,
12
+ private val onDismissPrevented: () -> Unit,
13
+ ) : FormSheetDialog.CancelRequestInterceptor {
14
+ private val preventNativeDismissBackPressCallback =
15
+ object : OnBackPressedCallback(false) {
16
+ override fun handleOnBackPressed() {
17
+ handleCancelRequest()
18
+ }
19
+ }
20
+
21
+ internal var shouldPreventDismiss: Boolean = false
22
+ set(value) {
23
+ field = value
24
+ preventNativeDismissBackPressCallback.isEnabled = value
25
+ }
26
+
27
+ internal fun setup() {
28
+ dialog.cancelRequestInterceptor = this
29
+ dialog.onBackPressedDispatcher.addCallback(preventNativeDismissBackPressCallback)
30
+ // Backdrop taps go through `cancel()` rather than dismissing directly, so that they are
31
+ // subject to the very same interception as the back press and the swipe down.
32
+ dimmingManager.setOnBackdropClickListener { dialog.cancel() }
33
+ }
34
+
35
+ internal fun destroy() {
36
+ dialog.cancelRequestInterceptor = null
37
+ preventNativeDismissBackPressCallback.remove()
38
+ dimmingManager.setOnBackdropClickListener(null)
39
+ }
40
+
41
+ override fun handleCancelRequest() {
42
+ if (shouldPreventDismiss) {
43
+ onDismissPrevented()
44
+ behaviorController?.restoreLastStableState()
45
+ return
46
+ }
47
+
48
+ onDismissAllowed()
49
+ }
50
+ }
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.core
2
2
 
3
3
  import android.annotation.SuppressLint
4
4
  import android.content.Context
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.core
2
2
 
3
3
  import android.content.Context
4
4
  import android.os.Bundle
@@ -20,6 +20,19 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
20
20
  internal class FormSheetDialog(
21
21
  context: Context,
22
22
  ) : BottomSheetDialog(context) {
23
+ internal fun interface CancelRequestInterceptor {
24
+ /**
25
+ * Invoked in place of the dialog's default cancellation whenever an interceptor is attached.
26
+ *
27
+ * The interceptor fully owns the outcome - either for native dismissal prevention or for driving
28
+ * a custom animated dismissal when allowed. Either way, the dialog skips
29
+ * [BottomSheetDialog.cancel], which would tear the window down synchronously.
30
+ */
31
+ fun handleCancelRequest()
32
+ }
33
+
34
+ internal var cancelRequestInterceptor: CancelRequestInterceptor? = null
35
+
23
36
  override fun onCreate(savedInstanceState: Bundle?) {
24
37
  super.onCreate(savedInstanceState)
25
38
 
@@ -35,6 +48,16 @@ internal class FormSheetDialog(
35
48
  forceEdgeToEdge()
36
49
  }
37
50
 
51
+ override fun cancel() {
52
+ val interceptor = cancelRequestInterceptor
53
+ if (interceptor == null) {
54
+ super.cancel()
55
+ return
56
+ }
57
+
58
+ interceptor.handleCancelRequest()
59
+ }
60
+
38
61
  /**
39
62
  * Material's [BottomSheetDialog] only draws edge-to-edge when its theme opts in via the
40
63
  * `enableEdgeToEdge` attribute AND the navigation bar is translucent (see
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.core
2
2
 
3
3
  import android.content.Context
4
4
  import android.util.Log
@@ -6,6 +6,15 @@ import android.view.ContextThemeWrapper
6
6
  import android.view.View
7
7
  import android.widget.FrameLayout
8
8
  import com.swmansion.rnscreens.modals.dimmingview.DimmingViewManager
9
+ import com.swmansion.rnscreens.modals.formsheet.native.coordinator.FormSheetAppearanceCoordinator
10
+ import com.swmansion.rnscreens.modals.formsheet.native.coordinator.FormSheetBehaviorController
11
+ import com.swmansion.rnscreens.modals.formsheet.native.coordinator.FormSheetDimensionsCoordinator
12
+ import com.swmansion.rnscreens.modals.formsheet.native.coordinator.FormSheetNativeDismissCoordinator
13
+ import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeDelegate
14
+ import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetDialogEventEmitter
15
+ import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetConfig
16
+ import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetDetents
17
+ import com.swmansion.rnscreens.modals.formsheet.native.presentation.FormSheetPresentationManager
9
18
  import kotlin.properties.Delegates
10
19
 
11
20
  class FormSheetDialogManager(
@@ -60,6 +69,15 @@ class FormSheetDialogManager(
60
69
  onNativeDismiss = { eventEmitter?.emitOnNativeDismissEvent() },
61
70
  )
62
71
 
72
+ private val nativeDismissCoordinator =
73
+ FormSheetNativeDismissCoordinator(
74
+ dialog = dialog,
75
+ behaviorController = behaviorController,
76
+ dimmingManager = dimmingManager,
77
+ onDismissAllowed = { presentationManager.handleNativeDismiss() },
78
+ onDismissPrevented = { eventEmitter?.emitOnNativeDismissPreventedEvent() },
79
+ )
80
+
63
81
  internal var eventEmitter: FormSheetDialogEventEmitter? by Delegates.observable(null) { _, _, newValue ->
64
82
  presentationManager.appearanceEventEmitter = newValue
65
83
  }
@@ -69,6 +87,7 @@ class FormSheetDialogManager(
69
87
 
70
88
  init {
71
89
  presentationManager.setup()
90
+ nativeDismissCoordinator.setup()
72
91
  appearanceCoordinator.setup()
73
92
  dimensionsCoordinator.setup()
74
93
  behaviorController?.setup()
@@ -103,6 +122,10 @@ class FormSheetDialogManager(
103
122
  appearanceCoordinator.updateBackgroundColor(newConfig.nativeContainerBackgroundColor)
104
123
  }
105
124
 
125
+ if (oldConfig.shouldPreventNativeDismiss != newConfig.shouldPreventNativeDismiss) {
126
+ nativeDismissCoordinator.shouldPreventDismiss = newConfig.shouldPreventNativeDismiss
127
+ }
128
+
106
129
  if (oldConfig.isOpen != newConfig.isOpen) {
107
130
  presentationManager.updatePresentationState(newConfig.isOpen)
108
131
  }
@@ -127,6 +150,7 @@ class FormSheetDialogManager(
127
150
 
128
151
  internal fun destroy() {
129
152
  behaviorController?.destroy()
153
+ nativeDismissCoordinator.destroy()
130
154
  presentationManager.destroy()
131
155
  dimensionsCoordinator.destroy()
132
156
  dialog.dismiss()
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.interfaces
2
2
 
3
3
  interface FormSheetContentSizeChangeDelegate {
4
4
  fun onContentHeightChanged(newHeight: Int)
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.interfaces
2
2
 
3
3
  interface FormSheetContentSizeChangeProvider {
4
4
  fun setContentSizeChangeDelegate(delegate: FormSheetContentSizeChangeDelegate?)
@@ -1,9 +1,11 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.interfaces
2
2
 
3
3
  import com.swmansion.rnscreens.common.event.ViewAppearanceEventEmitter
4
4
 
5
5
  internal interface FormSheetDialogEventEmitter : ViewAppearanceEventEmitter {
6
6
  fun emitOnNativeDismissEvent()
7
7
 
8
+ fun emitOnNativeDismissPreventedEvent()
9
+
8
10
  fun emitOnDetentChanged(index: Int)
9
11
  }
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.model
2
2
 
3
3
  internal data class FormSheetConfig(
4
4
  val isOpen: Boolean = false,
@@ -6,8 +6,12 @@ internal data class FormSheetConfig(
6
6
  val prefersGrabberVisible: Boolean = false,
7
7
  val initialDetentIndex: Int = 0,
8
8
  val preferredCornerRadius: Float = SYSTEM_DEFAULT_CORNER_RADIUS,
9
+ val preventNativeDismiss: Boolean = false,
9
10
  val nativeContainerBackgroundColor: Int? = null,
10
11
  ) {
12
+ val shouldPreventNativeDismiss: Boolean
13
+ get() = preventNativeDismiss && isOpen
14
+
11
15
  companion object {
12
16
  const val SYSTEM_DEFAULT_CORNER_RADIUS = -1f
13
17
  }
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.model
2
2
 
3
3
  internal class FormSheetDetents(
4
4
  rawDetents: List<Double>,
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.presentation
2
2
 
3
3
  import android.animation.Animator
4
4
  import android.animation.AnimatorSet
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.presentation
2
2
 
3
3
  import android.animation.Animator
4
4
  import android.animation.AnimatorListenerAdapter
@@ -6,6 +6,7 @@ import android.view.View
6
6
  import com.google.android.material.bottomsheet.BottomSheetBehavior
7
7
  import com.swmansion.rnscreens.common.event.ViewAppearanceEventEmitter
8
8
  import com.swmansion.rnscreens.modals.dimmingview.DimmingViewManager
9
+ import com.swmansion.rnscreens.modals.formsheet.native.core.FormSheetDialog
9
10
 
10
11
  internal class FormSheetPresentationManager(
11
12
  private val dialog: FormSheetDialog,
@@ -21,18 +22,10 @@ internal class FormSheetPresentationManager(
21
22
  private val animatorFactory = FormSheetAnimatorFactory(dimmingManager)
22
23
  private var currentSheetAnimator: Animator? = null
23
24
 
24
- private val nativeDismissCoordinator =
25
- FormSheetNativeDismissCoordinator(
26
- dialog = dialog,
27
- dimmingManager = dimmingManager,
28
- onNativeDismiss = { handleNativeDismiss() },
29
- )
30
-
31
25
  internal fun setup() {
32
26
  bottomSheetView?.let { view ->
33
27
  dimmingManager.attachToBehavior(BottomSheetBehavior.from(view))
34
28
  }
35
- nativeDismissCoordinator.setup()
36
29
  }
37
30
 
38
31
  internal fun updatePresentationState(isOpen: Boolean) {
@@ -164,7 +157,7 @@ internal class FormSheetPresentationManager(
164
157
  }
165
158
  }
166
159
 
167
- private fun handleNativeDismiss() {
160
+ internal fun handleNativeDismiss() {
168
161
  if (state == FormSheetPresentationState.DISMISSING || state == FormSheetPresentationState.DISMISSED) {
169
162
  return
170
163
  }
@@ -201,7 +194,5 @@ internal class FormSheetPresentationManager(
201
194
  dialog.setOnShowListener(null)
202
195
 
203
196
  state = FormSheetPresentationState.DISMISSED
204
-
205
- nativeDismissCoordinator.destroy()
206
197
  }
207
198
  }
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.native.presentation
2
2
 
3
3
  internal enum class FormSheetPresentationState {
4
4
  /**
@@ -1,7 +1,9 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.react.contentwrapper
2
2
 
3
3
  import android.content.Context
4
4
  import com.facebook.react.views.view.ReactViewGroup
5
+ import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeDelegate
6
+ import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeProvider
5
7
 
6
8
  class FormSheetContentWrapper(
7
9
  context: Context,
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.react.contentwrapper
2
2
 
3
3
  import com.facebook.react.module.annotations.ReactModule
4
4
  import com.facebook.react.uimanager.ThemedReactContext
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet
1
+ package com.swmansion.rnscreens.modals.formsheet.react.event
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap