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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/Package.swift +87 -0
  2. package/README.md +0 -11
  3. package/android/build.gradle +1 -0
  4. package/android/consumer-rules.pro +3 -0
  5. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderConfigViewGroup.kt +2 -0
  6. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderSubviewViewGroup.kt +2 -0
  7. package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledViewGroup.kt +18 -3
  8. package/android/src/main/cpp/NativeProxy.cpp +30 -6
  9. package/android/src/main/cpp/NativeProxy.h +7 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +7 -3
  12. package/android/src/main/java/com/swmansion/rnscreens/common/colorscheme/ColorSchemeCoordinator.kt +11 -1
  13. package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +17 -0
  14. package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
  16. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetAppearanceCoordinator.kt +2 -2
  19. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetBehaviorController.kt +51 -20
  20. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetDimensionsCoordinator.kt +159 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
  22. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetNativeDismissCoordinator.kt +2 -8
  23. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetAvailableHeightProvider.kt +44 -0
  24. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetContainer.kt +1 -1
  25. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialog.kt +36 -4
  26. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetDialogManager.kt +107 -0
  27. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeDelegate.kt +1 -1
  28. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeProvider.kt +1 -1
  29. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetDialogEventEmitter.kt +3 -1
  30. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetConfig.kt +1 -1
  31. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/model/FormSheetDetents.kt +152 -0
  32. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetAnimatorFactory.kt +9 -10
  33. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDimmingManager.kt +103 -0
  34. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDismissalOrigin.kt +22 -0
  35. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentation.kt +173 -0
  36. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentationManager.kt +290 -0
  37. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationState.kt +2 -2
  38. package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetStackRegistry.kt +28 -0
  39. package/android/src/main/java/com/swmansion/rnscreens/ext/FragmentManagerExt.kt +6 -0
  40. package/android/src/main/java/com/swmansion/rnscreens/helpers/FragmentManagerHelper.kt +0 -3
  41. package/android/src/main/java/com/swmansion/rnscreens/helpers/NoTintDrawable.kt +31 -0
  42. package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
  43. package/android/src/main/java/com/swmansion/rnscreens/helpers/ViewFinder.kt +0 -17
  44. package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +32 -3
  45. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenContainer.kt +35 -3
  46. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +15 -0
  47. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderConfig.kt +7 -1
  48. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderSubviewManager.kt +7 -0
  49. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackViewManager.kt +6 -0
  50. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/DimmingView.kt +2 -0
  51. package/android/src/main/java/com/swmansion/rnscreens/legacy/stack/views/ScreensCoordinatorLayout.kt +2 -0
  52. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapper.kt +3 -3
  53. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapperViewManager.kt +1 -1
  54. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDetentChangedEvent.kt +1 -1
  55. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidAppearEvent.kt +1 -1
  56. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidDisappearEvent.kt +1 -1
  57. package/android/src/main/java/com/swmansion/rnscreens/react/modals/formsheet/event/FormSheetDismissEvent.kt +29 -0
  58. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissEvent.kt +1 -1
  59. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissPreventedEvent.kt +1 -1
  60. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetSyncFlushEvent.kt +1 -1
  61. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillAppearEvent.kt +1 -1
  62. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillDisappearEvent.kt +1 -1
  63. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetContentView.kt +3 -3
  64. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHost.kt +5 -3
  65. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostEventEmitter.kt +17 -10
  66. package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostViewManager.kt +11 -9
  67. package/android/src/main/java/com/swmansion/rnscreens/safearea/OnInterfaceInsetsChangeListener.kt +15 -0
  68. package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaProvider.kt +8 -8
  69. package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaView.kt +3 -2
  70. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +360 -101
  71. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
  72. package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +211 -113
  73. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +156 -24
  74. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
  75. package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderToolbar.kt +74 -0
  76. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
  77. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +162 -228
  78. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +385 -12
  79. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +5 -6
  80. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +29 -6
  81. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
  82. package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +8 -7
  83. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +27 -280
  84. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
  85. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
  86. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +28 -20
  87. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +3 -55
  88. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +1 -10
  89. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuItemConfig.kt +1 -3
  90. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
  91. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +57 -6
  92. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +3 -1
  93. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +1 -0
  94. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +4 -3
  95. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueue.kt +23 -9
  96. package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperation.kt +1 -0
  97. package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperationExecutor.kt +2 -1
  98. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +159 -21
  99. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerDelegate.kt +7 -0
  100. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerUpdateCoordinator.kt +5 -3
  101. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +27 -5
  102. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
  103. package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackUpdateBatchStateProviding.kt +10 -0
  104. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/PreventNativeDismissCallback.kt +2 -2
  105. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +4 -0
  106. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +50 -10
  107. package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
  108. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceApplicator.kt +106 -10
  109. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +46 -7
  110. package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceModel.kt +3 -0
  111. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/CustomBottomNavigationView.kt +21 -1
  112. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
  113. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +72 -36
  114. package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainerDelegate.kt +11 -0
  115. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +22 -2
  116. package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
  117. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +58 -17
  118. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenDelegate.kt +6 -0
  119. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
  120. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIcon.kt +82 -0
  121. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIconTinting.kt +17 -0
  122. package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenViewManager.kt +26 -19
  123. package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +20 -6
  124. package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +22 -6
  125. package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
  126. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
  127. package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
  128. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
  129. package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
  130. package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
  131. package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
  132. package/ios/RNSEnums.h +16 -1
  133. package/ios/conversion/RNSConversions.h +7 -108
  134. package/ios/helpers/image/RNSImageLoadingHelper.h +7 -0
  135. package/ios/helpers/image/RNSImageLoadingHelper.mm +9 -0
  136. package/ios/legacy/RNSBarButtonItem.mm +15 -0
  137. package/ios/legacy/RNSConvert.h +6 -0
  138. package/ios/legacy/RNSConvert.mm +17 -0
  139. package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
  140. package/ios/legacy/RNSModalScreen.mm +1 -1
  141. package/ios/legacy/RNSNavigationBar.h +31 -0
  142. package/ios/legacy/RNSNavigationBar.mm +15 -0
  143. package/ios/legacy/RNSScreen.mm +130 -31
  144. package/ios/legacy/RNSScreenContentWrapper.mm +4 -1
  145. package/ios/legacy/RNSScreenStack.mm +202 -15
  146. package/ios/legacy/RNSScreenStackHeaderConfig.h +30 -0
  147. package/ios/legacy/RNSScreenStackHeaderConfig.mm +72 -17
  148. package/ios/legacy/RNSScreenStackHeaderSubview.mm +34 -1
  149. package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
  150. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
  151. package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
  152. package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
  153. package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
  154. package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
  155. package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
  156. package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
  157. package/ios/safe-area/RNSSafeAreaViewComponentView.mm +3 -14
  158. package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
  159. package/ios/split/RNSSplitAppearanceApplicator.h +4 -4
  160. package/ios/split/RNSSplitAppearanceApplicator.mm +53 -56
  161. package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
  162. package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
  163. package/ios/split/RNSSplitHostComponentView.h +5 -15
  164. package/ios/split/RNSSplitHostComponentView.mm +55 -6
  165. package/ios/split/RNSSplitHostController.h +25 -6
  166. package/ios/split/RNSSplitHostController.mm +24 -92
  167. package/ios/split/RNSSplitHostProviders.h +67 -0
  168. package/ios/split/RNSSplitScreenComponentView.h +0 -39
  169. package/ios/split/RNSSplitScreenComponentView.mm +27 -10
  170. package/ios/split/RNSSplitScreenController.h +26 -3
  171. package/ios/split/RNSSplitScreenController.mm +13 -30
  172. package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
  173. package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
  174. package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
  175. package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
  176. package/ios/stack/conversion/RNSConversions-Stack.h +62 -0
  177. package/ios/stack/conversion/RNSConversions-Stack.mm +134 -0
  178. package/ios/stack/header/RNSHeaderItemVisibilityPriority.h +9 -0
  179. package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
  180. package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
  181. package/ios/stack/header/RNSStackHeaderConfigComponentView.h +14 -1
  182. package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +103 -37
  183. package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +11 -0
  184. package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
  185. package/ios/stack/header/RNSStackHeaderContentFactory.mm +3 -0
  186. package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
  187. package/ios/stack/header/RNSStackHeaderItemComponentView.h +12 -3
  188. package/ios/stack/header/RNSStackHeaderItemComponentView.mm +72 -5
  189. package/ios/stack/header/RNSStackHeaderItemDataProviding.h +7 -0
  190. package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
  191. package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
  192. package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +13 -0
  193. package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +24 -0
  194. package/ios/stack/header/RNSStackHeaderMenuFinder.h +8 -1
  195. package/ios/stack/header/RNSStackHeaderMenuFinder.mm +26 -9
  196. package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
  197. package/ios/stack/host/RNSStackNavigationBar.h +25 -0
  198. package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
  199. package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
  200. package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
  201. package/ios/stack/host/RNSStackNavigationController.mm +13 -5
  202. package/ios/stack/host/RNSStackOperation.h +0 -2
  203. package/ios/stack/screen/RNSStackScreenComponentView.h +2 -1
  204. package/ios/stack/screen/RNSStackScreenComponentView.mm +32 -2
  205. package/ios/stack/screen/RNSStackScreenController.mm +12 -0
  206. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +8 -0
  207. package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +179 -24
  208. package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +110 -16
  209. package/ios/tabs/RNSTabBarItemCoordinator.h +16 -0
  210. package/ios/tabs/RNSTabBarItemCoordinator.mm +143 -0
  211. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
  212. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +1 -1
  213. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +1 -1
  214. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
  215. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
  216. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h +24 -0
  217. package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm +22 -0
  218. package/ios/tabs/conversion/RNSConversions-Tabs.h +100 -0
  219. package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +105 -74
  220. package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
  221. package/ios/tabs/host/RNSTabBarController.h +16 -0
  222. package/ios/tabs/host/RNSTabBarController.mm +516 -107
  223. package/ios/tabs/host/RNSTabsHostComponentView.h +4 -0
  224. package/ios/tabs/host/RNSTabsHostComponentView.mm +41 -4
  225. package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
  226. package/ios/tabs/screen/RNSTabsScreenComponentView.h +21 -0
  227. package/ios/tabs/screen/RNSTabsScreenComponentView.mm +56 -56
  228. package/ios/tabs/screen/RNSTabsScreenViewController.mm +1 -0
  229. package/ios/utils/RNSDefines.h +15 -7
  230. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +37 -21
  231. package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  232. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +41 -4
  233. package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  234. package/lib/commonjs/components/stack/header/StackHeaderConfig.js +17 -0
  235. package/lib/commonjs/components/stack/header/StackHeaderConfig.js.map +1 -0
  236. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
  237. package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  238. package/lib/commonjs/components/stack/host/StackHost.js +17 -7
  239. package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
  240. package/lib/commonjs/components/stack/host/StackHost.web.js +0 -2
  241. package/lib/commonjs/components/stack/host/StackHost.web.js.map +1 -1
  242. package/lib/commonjs/components/stack/index.js.map +1 -1
  243. package/lib/commonjs/components/tabs/host/TabsHost.ios.js +3 -0
  244. package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
  245. package/lib/commonjs/components/tabs/host/{TabsHost.web.js → TabsHost.js} +1 -1
  246. package/lib/commonjs/components/tabs/host/TabsHost.js.map +1 -0
  247. package/lib/commonjs/components/tabs/index.js.map +1 -1
  248. package/lib/commonjs/components/tabs/screen/TabsScreen.android.js +3 -1
  249. package/lib/commonjs/components/tabs/screen/TabsScreen.android.js.map +1 -1
  250. package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js +10 -1
  251. package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js.map +1 -1
  252. package/lib/commonjs/components/tabs/screen/{TabsScreen.web.js → TabsScreen.js} +1 -1
  253. package/lib/commonjs/components/tabs/screen/TabsScreen.js.map +1 -0
  254. package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js → tabs/screen/TabsScreenIcon.types.js} +1 -1
  255. package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
  256. package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  257. package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  258. package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  259. package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  260. package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  261. package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
  262. package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  263. package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  264. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
  265. package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  266. package/lib/commonjs/legacy/components/ScreenStackItem.js +31 -11
  267. package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
  268. package/lib/module/components/stack/header/StackHeaderConfig.android.js +39 -23
  269. package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
  270. package/lib/module/components/stack/header/StackHeaderConfig.ios.js +43 -6
  271. package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
  272. package/lib/module/components/stack/header/StackHeaderConfig.js +10 -0
  273. package/lib/module/components/stack/header/StackHeaderConfig.js.map +1 -0
  274. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
  275. package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
  276. package/lib/module/components/stack/host/StackHost.js +18 -8
  277. package/lib/module/components/stack/host/StackHost.js.map +1 -1
  278. package/lib/module/components/stack/host/StackHost.web.js +0 -3
  279. package/lib/module/components/stack/host/StackHost.web.js.map +1 -1
  280. package/lib/module/components/stack/index.js.map +1 -1
  281. package/lib/module/components/tabs/host/TabsHost.ios.js +3 -0
  282. package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
  283. package/{src/components/tabs/host/TabsHost.web.tsx → lib/module/components/tabs/host/TabsHost.js} +1 -2
  284. package/lib/module/components/tabs/host/TabsHost.js.map +1 -0
  285. package/lib/module/components/tabs/index.js.map +1 -1
  286. package/lib/module/components/tabs/screen/TabsScreen.android.js +3 -1
  287. package/lib/module/components/tabs/screen/TabsScreen.android.js.map +1 -1
  288. package/lib/module/components/tabs/screen/TabsScreen.ios.js +10 -1
  289. package/lib/module/components/tabs/screen/TabsScreen.ios.js.map +1 -1
  290. package/{src/components/tabs/screen/TabsScreen.web.tsx → lib/module/components/tabs/screen/TabsScreen.js} +1 -2
  291. package/lib/module/components/tabs/screen/TabsScreen.js.map +1 -0
  292. package/lib/module/components/tabs/screen/TabsScreenIcon.types.js +2 -0
  293. package/lib/module/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
  294. package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  295. package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
  296. package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
  297. package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
  298. package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
  299. package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
  300. package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
  301. package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
  302. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
  303. package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
  304. package/lib/module/legacy/components/ScreenStackItem.js +31 -11
  305. package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
  306. package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +1 -1
  307. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts +6 -3
  308. package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
  309. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +620 -24
  310. package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
  311. package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts +8 -0
  312. package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts.map +1 -0
  313. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts +6 -3
  314. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
  315. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +361 -2
  316. package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
  317. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +4 -2
  318. package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts.map +1 -1
  319. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
  320. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +7 -0
  321. package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
  322. package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
  323. package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
  324. package/lib/typescript/components/stack/host/StackHost.types.d.ts +47 -0
  325. package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
  326. package/lib/typescript/components/stack/host/StackHost.web.d.ts +1 -3
  327. package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
  328. package/lib/typescript/components/stack/index.d.ts +4 -3
  329. package/lib/typescript/components/stack/index.d.ts.map +1 -1
  330. package/lib/typescript/components/tabs/host/TabsHost.d.ts +5 -0
  331. package/lib/typescript/components/tabs/host/TabsHost.d.ts.map +1 -0
  332. package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
  333. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +72 -0
  334. package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
  335. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
  336. package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
  337. package/lib/typescript/components/tabs/index.d.ts +4 -6
  338. package/lib/typescript/components/tabs/index.d.ts.map +1 -1
  339. package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts.map +1 -1
  340. package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts +42 -7
  341. package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts.map +1 -1
  342. package/lib/typescript/components/tabs/screen/TabsScreen.d.ts +5 -0
  343. package/lib/typescript/components/tabs/screen/TabsScreen.d.ts.map +1 -0
  344. package/lib/typescript/components/tabs/screen/TabsScreen.ios.d.ts.map +1 -1
  345. package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts +78 -13
  346. package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts.map +1 -1
  347. package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts +91 -0
  348. package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts.map +1 -0
  349. package/lib/typescript/components/tabs/screen/index.d.ts +1 -0
  350. package/lib/typescript/components/tabs/screen/index.d.ts.map +1 -1
  351. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -0
  352. package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
  353. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +1 -0
  354. package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
  355. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +52 -0
  356. package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
  357. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +29 -1
  358. package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
  359. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +8 -0
  360. package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
  361. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +3 -1
  362. package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
  363. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +4 -0
  364. package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
  365. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +6 -0
  366. package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
  367. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +10 -1
  368. package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
  369. package/lib/typescript/legacy/components/ScreenStackItem.d.ts +25 -0
  370. package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
  371. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +4 -0
  372. package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
  373. package/lib/typescript/legacy/types.d.ts +30 -0
  374. package/lib/typescript/legacy/types.d.ts.map +1 -1
  375. package/package.json +11 -8
  376. package/react-native.config.js +3 -0
  377. package/src/components/modals/form-sheet/FormSheet.types.ts +1 -1
  378. package/src/components/stack/header/StackHeaderConfig.android.tsx +54 -43
  379. package/src/components/stack/header/StackHeaderConfig.android.types.ts +641 -24
  380. package/src/components/stack/header/StackHeaderConfig.ios.tsx +55 -17
  381. package/src/components/stack/header/StackHeaderConfig.ios.types.ts +384 -2
  382. package/src/components/stack/header/StackHeaderConfig.tsx +12 -0
  383. package/src/components/stack/header/StackHeaderConfig.types.ts +4 -2
  384. package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +9 -1
  385. package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +7 -0
  386. package/src/components/stack/host/StackHost.tsx +12 -3
  387. package/src/components/stack/host/StackHost.types.ts +50 -0
  388. package/src/components/stack/host/StackHost.web.tsx +1 -4
  389. package/src/components/stack/index.ts +14 -1
  390. package/src/components/tabs/host/TabsHost.ios.tsx +3 -0
  391. package/src/components/tabs/host/TabsHost.ios.types.ts +76 -0
  392. package/src/components/tabs/host/TabsHost.tsx +7 -0
  393. package/src/components/tabs/host/TabsHost.types.ts +3 -0
  394. package/src/components/tabs/index.ts +9 -0
  395. package/src/components/tabs/screen/TabsScreen.android.tsx +8 -3
  396. package/src/components/tabs/screen/TabsScreen.android.types.ts +42 -7
  397. package/src/components/tabs/screen/TabsScreen.ios.tsx +22 -5
  398. package/src/components/tabs/screen/TabsScreen.ios.types.ts +79 -17
  399. package/src/components/tabs/screen/TabsScreen.tsx +7 -0
  400. package/src/components/tabs/screen/TabsScreenIcon.types.ts +117 -0
  401. package/src/components/tabs/screen/index.ts +1 -0
  402. package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -0
  403. package/src/fabric/legacy/ScreenStackNativeComponent.ts +2 -0
  404. package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +78 -0
  405. package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +43 -0
  406. package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +13 -0
  407. package/src/fabric/stack/StackHostNativeComponent.ts +11 -2
  408. package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +8 -0
  409. package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +9 -0
  410. package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +20 -2
  411. package/src/legacy/components/ScreenStackItem.tsx +59 -12
  412. package/src/legacy/types.ts +31 -0
  413. package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenModalFragment.kt +0 -281
  414. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogRootView.kt +0 -104
  415. package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogScreen.kt +0 -26
  416. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
  417. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
  418. package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
  419. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +0 -134
  420. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +0 -162
  421. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +0 -106
  422. package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +0 -198
  423. package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +0 -83
  424. package/ios/conversion/RNSConversions-Stack.h +0 -32
  425. package/ios/conversion/RNSConversions-Stack.mm +0 -41
  426. package/ios/conversion/always_false.h +0 -31
  427. package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js +0 -10
  428. package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js.map +0 -1
  429. package/lib/commonjs/components/tabs/host/TabsHost.d.js +0 -2
  430. package/lib/commonjs/components/tabs/host/TabsHost.d.js.map +0 -1
  431. package/lib/commonjs/components/tabs/host/TabsHost.web.js.map +0 -1
  432. package/lib/commonjs/components/tabs/screen/TabsScreen.d.js +0 -2
  433. package/lib/commonjs/components/tabs/screen/TabsScreen.d.js.map +0 -1
  434. package/lib/commonjs/components/tabs/screen/TabsScreen.web.js.map +0 -1
  435. package/lib/module/components/stack/header/StackHeaderConfig.d.js +0 -2
  436. package/lib/module/components/stack/header/StackHeaderConfig.web.js +0 -4
  437. package/lib/module/components/stack/header/StackHeaderConfig.web.js.map +0 -1
  438. package/lib/module/components/tabs/host/TabsHost.d.js +0 -2
  439. package/lib/module/components/tabs/host/TabsHost.d.js.map +0 -1
  440. package/lib/module/components/tabs/host/TabsHost.web.js +0 -4
  441. package/lib/module/components/tabs/host/TabsHost.web.js.map +0 -1
  442. package/lib/module/components/tabs/screen/TabsScreen.d.js +0 -2
  443. package/lib/module/components/tabs/screen/TabsScreen.d.js.map +0 -1
  444. package/lib/module/components/tabs/screen/TabsScreen.web.js +0 -4
  445. package/lib/module/components/tabs/screen/TabsScreen.web.js.map +0 -1
  446. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +0 -7
  447. package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +0 -1
  448. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +0 -7
  449. package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +0 -1
  450. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +0 -7
  451. package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +0 -1
  452. package/src/components/stack/header/StackHeaderConfig.d.ts +0 -22
  453. package/src/components/stack/header/StackHeaderConfig.web.tsx +0 -5
  454. package/src/components/tabs/host/TabsHost.d.ts +0 -12
  455. package/src/components/tabs/screen/TabsScreen.d.ts +0 -12
  456. /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
package/Package.swift ADDED
@@ -0,0 +1,87 @@
1
+ // swift-tools-version: 6.0
2
+ import PackageDescription
3
+
4
+ // Header search paths for quoted cross-directory imports (SPM has no CocoaPods header maps).
5
+ // Keep in sync when adding new ios/ subdirectories that contain headers.
6
+ let headerSearchPaths: [String] = [
7
+ "ios",
8
+ "ios/bridging",
9
+ "ios/conversion",
10
+ "ios/helpers/container",
11
+ "ios/helpers/image",
12
+ "ios/helpers/scroll-view",
13
+ "ios/legacy",
14
+ "ios/legacy/events",
15
+ "ios/legacy/integrations",
16
+ "ios/legacy/utils",
17
+ "ios/modals/form-sheet",
18
+ "ios/modals/utils",
19
+ "ios/safe-area",
20
+ "ios/scroll-to-top-guard",
21
+ "ios/scroll-view-marker",
22
+ "ios/scroll-view-marker/conversion",
23
+ "ios/split",
24
+ "ios/split/conversion",
25
+ "ios/stack",
26
+ "ios/stack/conversion",
27
+ "ios/stack/header",
28
+ "ios/stack/host",
29
+ "ios/stack/screen",
30
+ "ios/tabs",
31
+ "ios/tabs/bottom-accessory",
32
+ "ios/tabs/conversion",
33
+ "ios/tabs/extensions",
34
+ "ios/tabs/host",
35
+ "ios/tabs/screen",
36
+ "ios/utils",
37
+ "ios/utils/extensions",
38
+ "common/cpp",
39
+ "cpp/legacy",
40
+ ]
41
+
42
+ let cSettings: [CSetting] = headerSearchPaths.map { .headerSearchPath($0) }
43
+
44
+ let cxxSettings: [CXXSetting] = [
45
+ .define("DEBUG", .when(configuration: .debug)),
46
+ .define("NDEBUG", .when(configuration: .release)),
47
+ ] + headerSearchPaths.map { .headerSearchPath($0) }
48
+
49
+ let package = Package(
50
+ name: "RNScreens",
51
+ platforms: [.iOS(.v15)],
52
+ products: [
53
+ .library(name: "RNScreens", targets: ["RNScreens"]),
54
+ ],
55
+ dependencies: [
56
+ // Resolved from the autolinker symlink `<app>/ios/build/generated/autolinking/libs/RNScreens`,
57
+ // not from node_modules: `../../../../xcframeworks` -> `<app>/ios/build/xcframeworks`,
58
+ // `../../../ios` -> `<app>/ios/build/generated/ios`. Same layout `npx react-native spm scaffold` emits.
59
+ // Making this self-contained (remote RN package URL + shipping our own codegen output) is blocked
60
+ // on RN publishing a remote SPM package and would require `codegenConfig.includesGeneratedCode`, see:
61
+ // https://github.com/react/react-native/blob/v0.87.1/packages/react-native/scripts/spm/__docs__/spm-header-paths-contract.md#hand-authored-community-library-contract
62
+ .package(name: "ReactNative", path: "../../../../xcframeworks"),
63
+ .package(name: "React-GeneratedCode", path: "../../../ios"),
64
+ ],
65
+ targets: [
66
+ .target(
67
+ name: "RNScreens",
68
+ dependencies: [
69
+ .product(name: "ReactHeaders", package: "ReactNative"),
70
+ .product(name: "ReactNativeHeaders", package: "ReactNative"),
71
+ .product(name: "ReactNativeDependenciesHeaders", package: "ReactNative"),
72
+ .product(name: "ReactAppHeaders", package: "React-GeneratedCode"),
73
+ ],
74
+ path: ".",
75
+ exclude: ["ios/RNScreens.xcodeproj"],
76
+ sources: ["ios", "common/cpp", "cpp"],
77
+ publicHeadersPath: "ios",
78
+ cSettings: cSettings,
79
+ cxxSettings: cxxSettings,
80
+ linkerSettings: [
81
+ .linkedFramework("UIKit"),
82
+ .linkedFramework("Foundation"),
83
+ ]
84
+ ),
85
+ ],
86
+ cxxLanguageStandard: .cxx20
87
+ )
package/README.md CHANGED
@@ -6,10 +6,6 @@
6
6
 
7
7
  This project aims to expose native navigation container components to React Native. It is not designed to be used as a standalone library but rather as a dependency of a [full-featured navigation library](https://github.com/react-navigation/react-navigation).
8
8
 
9
- ## Fabric
10
-
11
- To learn about how to use `react-native-screens` with Fabric architecture, head over to [Fabric README](README-Fabric.md). Instructions on how to run Fabric Example within this repo can be found in the [FabricExample README](FabricExample/README.md).
12
-
13
9
  ## Supported platforms
14
10
 
15
11
  - [x] iOS
@@ -254,13 +250,6 @@ There are many ways to contribute to this project. See [CONTRIBUTING](https://gi
254
250
 
255
251
  React native screens library is licensed under [The MIT License](LICENSE).
256
252
 
257
- ## Credits
258
-
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
-
261
- [![expo](https://avatars2.githubusercontent.com/u/12504344?v=3&s=100 'Expo.io')](https://expo.io)
262
- [![swm](https://logo.swmansion.com/logo?color=white&variant=desktop&width=150&tag=react-native-reanimated-github 'Software Mansion')](https://swmansion.com)
263
-
264
253
  ## React Native Screens is created by Software Mansion
265
254
 
266
255
  Since 2012 [Software Mansion](https://swmansion.com) is a software agency with experience in building web and mobile apps. We are Core React Native Contributors and experts in dealing with all kinds of React Native issues. We can help you build your next dream product – [Hire us](https://swmansion.com/contact/projects?utm_source=screens&utm_medium=readme).
@@ -141,6 +141,7 @@ android {
141
141
  versionCode 1
142
142
  versionName "1.0"
143
143
  buildConfigField "boolean", "RNS_DEBUG_LOGGING", areDebugLogsEnabled().toString()
144
+ consumerProguardFiles "consumer-rules.pro"
144
145
  ndk {
145
146
  abiFilters (*reactNativeArchitectures())
146
147
  }
@@ -0,0 +1,3 @@
1
+ # RNScreensFragmentFactory recognises library fragments by their package-name prefix when
2
+ # restoring saved state. Keep their names so R8 can't rename or repackage them.
3
+ -keepnames class com.swmansion.rnscreens.** extends androidx.fragment.app.Fragment
@@ -71,6 +71,8 @@ abstract class FabricEnabledHeaderConfigViewGroup(
71
71
  mStateWrapper?.updateState(map)
72
72
  }
73
73
 
74
+ override fun shouldDelayChildPressedState(): Boolean = false
75
+
74
76
  companion object {
75
77
  private const val DELTA = 0.9f
76
78
  }
@@ -72,6 +72,8 @@ abstract class FabricEnabledHeaderSubviewViewGroup(
72
72
  mStateWrapper?.updateState(map)
73
73
  }
74
74
 
75
+ override fun shouldDelayChildPressedState(): Boolean = false
76
+
75
77
  companion object {
76
78
  private const val DELTA = 0.9f
77
79
  }
@@ -18,6 +18,14 @@ abstract class FabricEnabledViewGroup(
18
18
  private var lastHeight = 0f
19
19
  private var lastHeaderHeight = 0f
20
20
 
21
+ protected var isStateInvalidated = false
22
+ private set
23
+
24
+ // A detached screen can miss native layout changes while the commit hook resets its shadow state.
25
+ protected fun invalidateState() {
26
+ isStateInvalidated = true
27
+ }
28
+
21
29
  fun setStateWrapper(wrapper: StateWrapper?) {
22
30
  mStateWrapper = wrapper
23
31
  }
@@ -36,15 +44,20 @@ abstract class FabricEnabledViewGroup(
36
44
  val realHeaderHeight: Float = pxToDp(headerHeight.toFloat())
37
45
 
38
46
  // Check incoming state values. If they're already the correct value, return early to prevent
39
- // infinite UpdateState/SetState loop.
47
+ // an infinite UpdateState/SetState loop. The state-invalidated flag forces the update when the
48
+ // commit hook has reset the state while the screen was detached from the native hierarchy
49
+ // - the screen may have missed some layout changes in the meantime (see #4336 and #4760).
40
50
  val delta = 0.9f
41
- if (abs(lastWidth - realWidth) < delta &&
51
+ if (!isStateInvalidated &&
52
+ abs(lastWidth - realWidth) < delta &&
42
53
  abs(lastHeight - realHeight) < delta &&
43
54
  abs(lastHeaderHeight - realHeaderHeight) < delta
44
55
  ) {
45
56
  return
46
57
  }
47
58
 
59
+ val stateWrapper = mStateWrapper ?: return
60
+ isStateInvalidated = false
48
61
  lastWidth = realWidth
49
62
  lastHeight = realHeight
50
63
  lastHeaderHeight = realHeaderHeight
@@ -55,6 +68,8 @@ abstract class FabricEnabledViewGroup(
55
68
  putDouble("contentOffsetX", 0.0)
56
69
  putDouble("contentOffsetY", realHeaderHeight.toDouble())
57
70
  }
58
- mStateWrapper?.updateState(map)
71
+ stateWrapper.updateState(map)
59
72
  }
73
+
74
+ override fun shouldDelayChildPressedState(): Boolean = false
60
75
  }
@@ -2,6 +2,7 @@
2
2
  #include <react/fabric/Binding.h>
3
3
  #include <react/renderer/scheduler/Scheduler.h>
4
4
 
5
+ #include <memory>
5
6
  #include <string>
6
7
 
7
8
  #include "NativeProxy.h"
@@ -11,6 +12,19 @@ using namespace react;
11
12
 
12
13
  namespace rnscreens {
13
14
 
15
+ namespace {
16
+ // Keep this listener process-lifetime to avoid races during initialization,
17
+ // when nativeAddMutationsListener() can be called concurrently from different
18
+ // threads. A function-local static initializes thread-safely, and an immortal
19
+ // instance suits core's delegate list, which is append-only. For more details:
20
+ // https://github.com/software-mansion/react-native-screens/pull/4413
21
+ const std::shared_ptr<RNSScreenRemovalListener> &removalListener() {
22
+ static const std::shared_ptr<RNSScreenRemovalListener> instance =
23
+ std::make_shared<RNSScreenRemovalListener>();
24
+ return instance;
25
+ }
26
+ } // namespace
27
+
14
28
  NativeProxy::NativeProxy(jni::alias_ref<NativeProxy::javaobject> jThis)
15
29
  : javaPart_(jni::make_global(jThis)) {}
16
30
 
@@ -32,13 +46,18 @@ void NativeProxy::nativeAddMutationsListener(
32
46
  auto uiManager =
33
47
  fabricUIManager->getBinding()->getScheduler()->getUIManager();
34
48
 
35
- if (!screenRemovalListener_) {
36
- screenRemovalListener_ =
37
- std::make_shared<RNSScreenRemovalListener>([this](int tag) {
49
+ {
50
+ // Capture a copy of the global ref, never `this`: the listener outlives
51
+ // this NativeProxy, and the old live read of javaPart_ at call time raced
52
+ // invalidateNative(). installMutex_ keeps the copy from racing the
53
+ // invalidation write and keeps the stored token matching the last install.
54
+ std::lock_guard<std::mutex> lock(installMutex_);
55
+ removalListenerToken_ =
56
+ removalListener()->setListener([javaPart = javaPart_](int tag) {
38
57
  static const auto method =
39
- javaPart_->getClass()->getMethod<void(jint)>(
58
+ javaPart->getClass()->getMethod<void(jint)>(
40
59
  "notifyScreenRemoved");
41
- method(javaPart_, tag);
60
+ method(javaPart, tag);
42
61
  });
43
62
  }
44
63
 
@@ -79,7 +98,7 @@ void NativeProxy::addMountingCoordinatorIfNeeded(
79
98
  });
80
99
 
81
100
  if (!wasRegistered) {
82
- coordinator->setMountingOverrideDelegate(screenRemovalListener_);
101
+ coordinator->setMountingOverrideDelegate(removalListener());
83
102
  coordinatorsWithMountingOverrides_.push_back(coordinator);
84
103
  }
85
104
  }
@@ -90,6 +109,11 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybrid(
90
109
  }
91
110
 
92
111
  void NativeProxy::invalidateNative() {
112
+ // Disarm before the hybrid is collected; also releases the captured global
113
+ // ref so the Java NativeProxy stays collectable. Serialized with the install
114
+ // path so the token is never stale and javaPart_ is not nulled mid-capture.
115
+ std::lock_guard<std::mutex> lock(installMutex_);
116
+ removalListener()->clearListener(removalListenerToken_);
93
117
  javaPart_ = nullptr;
94
118
  }
95
119
 
@@ -4,6 +4,7 @@
4
4
  #include <react/fabric/JFabricUIManager.h>
5
5
  #include "RNSScreenRemovalListener.h"
6
6
 
7
+ #include <cstdint>
7
8
  #include <mutex>
8
9
  #include <string>
9
10
 
@@ -13,7 +14,6 @@ using namespace facebook::jni;
13
14
 
14
15
  class NativeProxy : public jni::HybridClass<NativeProxy> {
15
16
  public:
16
- std::shared_ptr<RNSScreenRemovalListener> screenRemovalListener_;
17
17
  std::vector<std::weak_ptr<const facebook::react::MountingCoordinator>>
18
18
  coordinatorsWithMountingOverrides_;
19
19
  static auto constexpr kJavaDescriptor =
@@ -28,6 +28,12 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
28
28
 
29
29
  std::mutex coordinatorsMutex_;
30
30
 
31
+ // Serializes callback install (nativeAddMutationsListener) with
32
+ // invalidateNative: the install-time copy of javaPart_ must not race the
33
+ // invalidation write, and the stored token must match the last install.
34
+ std::mutex installMutex_;
35
+ uint64_t removalListenerToken_{0};
36
+
31
37
  explicit NativeProxy(jni::alias_ref<NativeProxy::javaobject> jThis);
32
38
 
33
39
  void nativeAddMutationsListener(
@@ -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.react.contentwrapper.FormSheetContentWrapperViewManager
22
- import com.swmansion.rnscreens.modals.formsheet.react.host.FormSheetHostViewManager
21
+ import com.swmansion.rnscreens.react.modals.formsheet.contentwrapper.FormSheetContentWrapperViewManager
22
+ import com.swmansion.rnscreens.react.modals.formsheet.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
@@ -57,10 +57,14 @@ class ScreensModule(
57
57
  }
58
58
 
59
59
  private fun setupFabric() {
60
- val fabricUIManager =
61
- UIManagerHelper.getUIManager(reactContext, UIManagerType.FABRIC) as FabricUIManager
60
+ // Null when the host has no live ReactInstance. In bridgeless mode this happens only while
61
+ // the instance owning this module is being torn down (reload / destroy): ReactHostImpl
62
+ // drops its instance reference before it stops the JS thread, so JS can still create this
63
+ // module. There is nothing to set up then, the module gets invalidated right after.
64
+ // See https://github.com/software-mansion/react-native-screens/issues/4699
65
+ val uiManager = UIManagerHelper.getUIManager(reactContext, UIManagerType.FABRIC) ?: return
62
66
  proxy?.apply {
63
- nativeAddMutationsListener(fabricUIManager)
67
+ nativeAddMutationsListener(uiManager as FabricUIManager)
64
68
  }
65
69
  }
66
70
 
@@ -3,6 +3,7 @@ package com.swmansion.rnscreens.common.colorscheme
3
3
  import android.content.res.Configuration
4
4
  import android.view.View
5
5
  import android.view.ViewParent
6
+ import java.lang.ref.WeakReference
6
7
  import kotlin.properties.Delegates
7
8
 
8
9
  internal typealias OnUiNightModeResolvedCallback = (nightMode: Int) -> Unit
@@ -16,6 +17,15 @@ internal class ColorSchemeCoordinator :
16
17
  }
17
18
  }
18
19
  private var parentProvider: ColorSchemeProviding? = null
20
+
21
+ /**
22
+ * Parent provider known from ownership, taking precedence over the view-tree walk
23
+ * in [setup]. Set it when the owner knows its provider statically (e.g. a fragment's
24
+ * root view always resolves through the container that created the fragment) - the
25
+ * walk is unreliable there: transitions reparent an exiting fragment's view into the
26
+ * container's ViewGroupOverlay, whose parent chain ends in null. Survives [teardown].
27
+ */
28
+ internal var explicitParentProvider: WeakReference<ColorSchemeProviding>? = null
19
29
  private var systemUiNightMode: Int = Configuration.UI_MODE_NIGHT_NO
20
30
  private var lastAppliedUiNightMode: Int? = null
21
31
  private val childListeners = mutableListOf<ColorSchemeListener>()
@@ -60,7 +70,7 @@ internal class ColorSchemeCoordinator :
60
70
 
61
71
  systemUiNightMode =
62
72
  hostView.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
63
- parentProvider = findParentColorSchemeProvider(hostView)
73
+ parentProvider = explicitParentProvider?.get() ?: findParentColorSchemeProvider(hostView)
64
74
  parentProvider?.addColorSchemeListener(this)
65
75
  onUiNightModeResolved = onUiNightModeResolvedCallback
66
76
  isSetUp = true
@@ -9,4 +9,21 @@ interface Container {
9
9
  * (if any).
10
10
  */
11
11
  fun resolveCurrentContentScrollView(): ViewGroup?
12
+
13
+ /**
14
+ * Asked when this container's whole subtree is about to be natively dismissed,
15
+ * e.g. the screen hosting this container is popped. Returns the item that
16
+ * vetoes the dismissal via `preventNativeDismiss`, or null when nothing
17
+ * in the subtree does.
18
+ */
19
+ fun wantsToPreventStackNativeDismiss(): ContainerItem?
20
+
21
+ /**
22
+ * Asks the container to pop its own stack to the root, if it can. If it has nothing
23
+ * to pop (or can't pop), the request is forwarded to the nested container of its
24
+ * active item.
25
+ *
26
+ * @return `true` if a pop was performed or requested (here or in a nested container), `false` otherwise.
27
+ */
28
+ fun requestPopToRoot(): Boolean
12
29
  }
@@ -2,7 +2,7 @@ package com.swmansion.rnscreens.common.container
2
2
 
3
3
  import android.view.ViewGroup
4
4
 
5
- internal interface ContainerItem {
5
+ interface ContainerItem {
6
6
  // region Nested Container handling
7
7
 
8
8
  /**
@@ -27,4 +27,16 @@ internal interface ContainerItem {
27
27
  fun findContentScrollView(): ViewGroup?
28
28
 
29
29
  // endregion
30
+
31
+ // region Native dismissal
32
+
33
+ /**
34
+ * Asked when this item (screen) is about to be natively dismissed together
35
+ * with its subtree. The nested container (if any) is consulted first; its
36
+ * non-null answer wins, otherwise the item answers for itself, returning
37
+ * itself when it vetoes the dismissal or null otherwise.
38
+ */
39
+ fun wantsToPreventStackNativeDismiss(): ContainerItem?
40
+
41
+ // endregion
30
42
  }
@@ -0,0 +1,62 @@
1
+ package com.swmansion.rnscreens.common.text
2
+
3
+ import android.content.res.AssetManager
4
+ import android.graphics.Typeface
5
+ import android.os.Build
6
+ import com.facebook.react.common.ReactConstants
7
+ import com.facebook.react.common.assets.ReactFontManager.TypefaceStyle
8
+ import com.facebook.react.views.text.ReactTypefaceUtils
9
+ import kotlin.properties.Delegates
10
+ import kotlin.properties.ReadWriteProperty
11
+
12
+ /**
13
+ * [TextAppearance] driven by React props. Font family, weight and style are kept as the raw
14
+ * React values and turned into a [Typeface]. [onChanged] is invoked whenever a property
15
+ * actually changes value.
16
+ */
17
+ internal class ReactTextAppearance(
18
+ private val assets: AssetManager,
19
+ onChanged: () -> Unit,
20
+ ) : TextAppearance {
21
+ override var color: Int? by changeNotifying(onChanged)
22
+ override var fontSize: Float? by changeNotifying(onChanged)
23
+ internal var fontFamily: String? by changeNotifying(onChanged)
24
+ internal var fontWeight: String? by changeNotifying(onChanged)
25
+ internal var fontStyle: String? by changeNotifying(onChanged)
26
+
27
+ override fun resolveTypeface(base: Typeface): Typeface {
28
+ val weight = ReactTypefaceUtils.parseFontWeight(fontWeight)
29
+ val style = ReactTypefaceUtils.parseFontStyle(fontStyle)
30
+
31
+ if (fontFamily == null && weight == ReactConstants.UNSET && style == ReactConstants.UNSET) {
32
+ return base
33
+ }
34
+
35
+ // ReactFontManager.TypefaceStyle turns an unset weight into 400 and an unset style into
36
+ // "not italic" rather than deriving them from the base. This would drop default styling
37
+ // from base typeface. Resolve both up front so it never receives UNSET style or weight.
38
+ return ReactTypefaceUtils.applyStyles(
39
+ base,
40
+ if (style != ReactConstants.UNSET) style else base.resolveStyle(),
41
+ if (weight != ReactConstants.UNSET) weight else base.resolveWeight(),
42
+ fontFamily,
43
+ assets,
44
+ )
45
+ }
46
+ }
47
+
48
+ private fun <T> changeNotifying(onChanged: () -> Unit): ReadWriteProperty<Any?, T?> =
49
+ Delegates.observable(null) { _, old, new -> if (old != new) onChanged() }
50
+
51
+ /**
52
+ * Numeric weight of this typeface. [Typeface.getWeight] requires API 28; below it only bold
53
+ * can be told apart from regular.
54
+ */
55
+ private fun Typeface.resolveWeight(): Int =
56
+ when {
57
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> weight
58
+ isBold -> TypefaceStyle.BOLD
59
+ else -> TypefaceStyle.NORMAL
60
+ }
61
+
62
+ private fun Typeface.resolveStyle(): Int = if (isItalic) Typeface.ITALIC else Typeface.NORMAL
@@ -0,0 +1,20 @@
1
+ package com.swmansion.rnscreens.common.text
2
+
3
+ import android.graphics.Typeface
4
+
5
+ /**
6
+ * Provides text styling for some given part of the interface. Interface is React-agnostic. A `null`
7
+ * value means "keep the default".
8
+ */
9
+ internal interface TextAppearance {
10
+ val color: Int?
11
+
12
+ /** Font size in SP. */
13
+ val fontSize: Float?
14
+
15
+ /**
16
+ * Returns the modified typeface based on [base] typeface. Properties that are not overridden
17
+ * are inherited from [base], which is returned unchanged when there are no overrides at all.
18
+ */
19
+ fun resolveTypeface(base: Typeface): Typeface
20
+ }
@@ -0,0 +1,65 @@
1
+ package com.swmansion.rnscreens.common.text
2
+
3
+ import android.content.Context
4
+ import android.graphics.Typeface
5
+ import androidx.annotation.AttrRes
6
+ import com.swmansion.rnscreens.utils.resolveColorAttr
7
+ import com.swmansion.rnscreens.utils.resolveStyleResAttr
8
+
9
+ /**
10
+ * Default text styling of a single title/subtitle slot, resolved from the M3 type-scale
11
+ * style behind [textAppearanceAttr] and the color behind [textColorAttr].
12
+ *
13
+ * Resolved from the style rather than read back from the widget: Material resolves a slot's
14
+ * default typeface asynchronously, so until that lands the widget reports [Typeface.DEFAULT].
15
+ */
16
+ internal class TextAppearanceDefaults(
17
+ val color: Int,
18
+ val textSizePx: Float,
19
+ val typeface: Typeface,
20
+ ) {
21
+ companion object {
22
+ fun resolve(
23
+ context: Context,
24
+ @AttrRes textAppearanceAttr: Int,
25
+ @AttrRes textColorAttr: Int,
26
+ ): TextAppearanceDefaults {
27
+ val appearanceRes = resolveStyleResAttr(context, textAppearanceAttr)
28
+ val attrs = context.obtainStyledAttributes(appearanceRes, APPEARANCE_ATTRS)
29
+ try {
30
+ val textSizePx = attrs.getDimension(IDX_TEXT_SIZE, 0f)
31
+ require(textSizePx > 0f) { "[RNScreens] Text appearance defines no text size." }
32
+
33
+ // android:fontFamily is either a font resource (@font/…, resolvable only
34
+ // asynchronously) or a family name. The M3 type scale always declares a family
35
+ // name (@string/m3_ref_typeface_* — "sans-serif" / "sans-serif-medium"),
36
+ // so we can unconditionally take the synchronous path (Material's own fallback and
37
+ // AppCompatTextHelper do the same).
38
+ val textStyle = attrs.getInt(IDX_TEXT_STYLE, Typeface.NORMAL)
39
+ val typeface =
40
+ attrs.getString(IDX_FONT_FAMILY)?.let { Typeface.create(it, textStyle) }
41
+ ?: Typeface.defaultFromStyle(textStyle)
42
+
43
+ return TextAppearanceDefaults(
44
+ resolveColorAttr(context, textColorAttr),
45
+ textSizePx,
46
+ typeface,
47
+ )
48
+ } finally {
49
+ attrs.recycle()
50
+ }
51
+ }
52
+
53
+ // Framework attr ids are compile-time constants; the array must stay sorted
54
+ // ascending (obtainStyledAttributes requirement).
55
+ private val APPEARANCE_ATTRS =
56
+ intArrayOf(
57
+ android.R.attr.textSize,
58
+ android.R.attr.textStyle,
59
+ android.R.attr.fontFamily,
60
+ )
61
+ private const val IDX_TEXT_SIZE = 0
62
+ private const val IDX_TEXT_STYLE = 1
63
+ private const val IDX_FONT_FAMILY = 2
64
+ }
65
+ }
@@ -1,4 +1,4 @@
1
- package com.swmansion.rnscreens.modals.formsheet.native.coordinator
1
+ package com.swmansion.rnscreens.core.modals.formsheet.coordinator
2
2
 
3
3
  import android.os.Build
4
4
  import android.widget.FrameLayout
@@ -6,7 +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
+ import com.swmansion.rnscreens.core.modals.formsheet.model.FormSheetConfig
10
10
  import com.swmansion.rnscreens.utils.dpToPx
11
11
 
12
12
  internal class FormSheetAppearanceCoordinator(