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.
- package/Package.swift +87 -0
- package/README.md +0 -11
- package/android/build.gradle +1 -0
- package/android/consumer-rules.pro +3 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderConfigViewGroup.kt +2 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderSubviewViewGroup.kt +2 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledViewGroup.kt +18 -3
- package/android/src/main/cpp/NativeProxy.cpp +30 -6
- package/android/src/main/cpp/NativeProxy.h +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +7 -3
- package/android/src/main/java/com/swmansion/rnscreens/common/colorscheme/ColorSchemeCoordinator.kt +11 -1
- package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
- package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetAppearanceCoordinator.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetBehaviorController.kt +51 -20
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetDimensionsCoordinator.kt +159 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetNativeDismissCoordinator.kt +2 -8
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetAvailableHeightProvider.kt +44 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetContainer.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialog.kt +36 -4
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetDialogManager.kt +107 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeDelegate.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeProvider.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetDialogEventEmitter.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetConfig.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/model/FormSheetDetents.kt +152 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetAnimatorFactory.kt +9 -10
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDimmingManager.kt +103 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDismissalOrigin.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentation.kt +173 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentationManager.kt +290 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationState.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetStackRegistry.kt +28 -0
- package/android/src/main/java/com/swmansion/rnscreens/ext/FragmentManagerExt.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/helpers/FragmentManagerHelper.kt +0 -3
- package/android/src/main/java/com/swmansion/rnscreens/helpers/NoTintDrawable.kt +31 -0
- package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
- package/android/src/main/java/com/swmansion/rnscreens/helpers/ViewFinder.kt +0 -17
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +32 -3
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenContainer.kt +35 -3
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderConfig.kt +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderSubviewManager.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackViewManager.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/DimmingView.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/stack/views/ScreensCoordinatorLayout.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapper.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapperViewManager.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDetentChangedEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidAppearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidDisappearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/react/modals/formsheet/event/FormSheetDismissEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissPreventedEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetSyncFlushEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillAppearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillDisappearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetContentView.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHost.kt +5 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostEventEmitter.kt +17 -10
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostViewManager.kt +11 -9
- package/android/src/main/java/com/swmansion/rnscreens/safearea/OnInterfaceInsetsChangeListener.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaProvider.kt +8 -8
- package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaView.kt +3 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +360 -101
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +211 -113
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +156 -24
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderToolbar.kt +74 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +162 -228
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +385 -12
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +5 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +29 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +8 -7
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +27 -280
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +28 -20
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +3 -55
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +1 -10
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuItemConfig.kt +1 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +57 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +4 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueue.kt +23 -9
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperation.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperationExecutor.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +159 -21
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerDelegate.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerUpdateCoordinator.kt +5 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +27 -5
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackUpdateBatchStateProviding.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/PreventNativeDismissCallback.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +50 -10
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceApplicator.kt +106 -10
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +46 -7
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceModel.kt +3 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/CustomBottomNavigationView.kt +21 -1
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +72 -36
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainerDelegate.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +22 -2
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +58 -17
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenDelegate.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIcon.kt +82 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIconTinting.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenViewManager.kt +26 -19
- package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +20 -6
- package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +22 -6
- package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
- package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
- package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
- package/ios/RNSEnums.h +16 -1
- package/ios/conversion/RNSConversions.h +7 -108
- package/ios/helpers/image/RNSImageLoadingHelper.h +7 -0
- package/ios/helpers/image/RNSImageLoadingHelper.mm +9 -0
- package/ios/legacy/RNSBarButtonItem.mm +15 -0
- package/ios/legacy/RNSConvert.h +6 -0
- package/ios/legacy/RNSConvert.mm +17 -0
- package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
- package/ios/legacy/RNSModalScreen.mm +1 -1
- package/ios/legacy/RNSNavigationBar.h +31 -0
- package/ios/legacy/RNSNavigationBar.mm +15 -0
- package/ios/legacy/RNSScreen.mm +130 -31
- package/ios/legacy/RNSScreenContentWrapper.mm +4 -1
- package/ios/legacy/RNSScreenStack.mm +202 -15
- package/ios/legacy/RNSScreenStackHeaderConfig.h +30 -0
- package/ios/legacy/RNSScreenStackHeaderConfig.mm +72 -17
- package/ios/legacy/RNSScreenStackHeaderSubview.mm +34 -1
- package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
- package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
- package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
- package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
- package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
- package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
- package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
- package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
- package/ios/safe-area/RNSSafeAreaViewComponentView.mm +3 -14
- package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
- package/ios/split/RNSSplitAppearanceApplicator.h +4 -4
- package/ios/split/RNSSplitAppearanceApplicator.mm +53 -56
- package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
- package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
- package/ios/split/RNSSplitHostComponentView.h +5 -15
- package/ios/split/RNSSplitHostComponentView.mm +55 -6
- package/ios/split/RNSSplitHostController.h +25 -6
- package/ios/split/RNSSplitHostController.mm +24 -92
- package/ios/split/RNSSplitHostProviders.h +67 -0
- package/ios/split/RNSSplitScreenComponentView.h +0 -39
- package/ios/split/RNSSplitScreenComponentView.mm +27 -10
- package/ios/split/RNSSplitScreenController.h +26 -3
- package/ios/split/RNSSplitScreenController.mm +13 -30
- package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
- package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
- package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
- package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
- package/ios/stack/conversion/RNSConversions-Stack.h +62 -0
- package/ios/stack/conversion/RNSConversions-Stack.mm +134 -0
- package/ios/stack/header/RNSHeaderItemVisibilityPriority.h +9 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +14 -1
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +103 -37
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +11 -0
- package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderContentFactory.mm +3 -0
- package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
- package/ios/stack/header/RNSStackHeaderItemComponentView.h +12 -3
- package/ios/stack/header/RNSStackHeaderItemComponentView.mm +72 -5
- package/ios/stack/header/RNSStackHeaderItemDataProviding.h +7 -0
- package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +13 -0
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +24 -0
- package/ios/stack/header/RNSStackHeaderMenuFinder.h +8 -1
- package/ios/stack/header/RNSStackHeaderMenuFinder.mm +26 -9
- package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
- package/ios/stack/host/RNSStackNavigationBar.h +25 -0
- package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
- package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
- package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
- package/ios/stack/host/RNSStackNavigationController.mm +13 -5
- package/ios/stack/host/RNSStackOperation.h +0 -2
- package/ios/stack/screen/RNSStackScreenComponentView.h +2 -1
- package/ios/stack/screen/RNSStackScreenComponentView.mm +32 -2
- package/ios/stack/screen/RNSStackScreenController.mm +12 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +8 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +179 -24
- package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +110 -16
- package/ios/tabs/RNSTabBarItemCoordinator.h +16 -0
- package/ios/tabs/RNSTabBarItemCoordinator.mm +143 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h +24 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm +22 -0
- package/ios/tabs/conversion/RNSConversions-Tabs.h +100 -0
- package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +105 -74
- package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
- package/ios/tabs/host/RNSTabBarController.h +16 -0
- package/ios/tabs/host/RNSTabBarController.mm +516 -107
- package/ios/tabs/host/RNSTabsHostComponentView.h +4 -0
- package/ios/tabs/host/RNSTabsHostComponentView.mm +41 -4
- package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
- package/ios/tabs/screen/RNSTabsScreenComponentView.h +21 -0
- package/ios/tabs/screen/RNSTabsScreenComponentView.mm +56 -56
- package/ios/tabs/screen/RNSTabsScreenViewController.mm +1 -0
- package/ios/utils/RNSDefines.h +15 -7
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +37 -21
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +41 -4
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.js +17 -0
- package/lib/commonjs/components/stack/header/StackHeaderConfig.js.map +1 -0
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.js +17 -7
- package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.web.js +0 -2
- package/lib/commonjs/components/stack/host/StackHost.web.js.map +1 -1
- package/lib/commonjs/components/stack/index.js.map +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js +3 -0
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/commonjs/components/tabs/host/{TabsHost.web.js → TabsHost.js} +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.js.map +1 -0
- package/lib/commonjs/components/tabs/index.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.js +3 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js +10 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/{TabsScreen.web.js → TabsScreen.js} +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.js.map +1 -0
- package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js → tabs/screen/TabsScreenIcon.types.js} +1 -1
- package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackItem.js +31 -11
- package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.android.js +39 -23
- package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js +43 -6
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.js +10 -0
- package/lib/module/components/stack/header/StackHeaderConfig.js.map +1 -0
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.js +18 -8
- package/lib/module/components/stack/host/StackHost.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.web.js +0 -3
- package/lib/module/components/stack/host/StackHost.web.js.map +1 -1
- package/lib/module/components/stack/index.js.map +1 -1
- package/lib/module/components/tabs/host/TabsHost.ios.js +3 -0
- package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/{src/components/tabs/host/TabsHost.web.tsx → lib/module/components/tabs/host/TabsHost.js} +1 -2
- package/lib/module/components/tabs/host/TabsHost.js.map +1 -0
- package/lib/module/components/tabs/index.js.map +1 -1
- package/lib/module/components/tabs/screen/TabsScreen.android.js +3 -1
- package/lib/module/components/tabs/screen/TabsScreen.android.js.map +1 -1
- package/lib/module/components/tabs/screen/TabsScreen.ios.js +10 -1
- package/lib/module/components/tabs/screen/TabsScreen.ios.js.map +1 -1
- package/{src/components/tabs/screen/TabsScreen.web.tsx → lib/module/components/tabs/screen/TabsScreen.js} +1 -2
- package/lib/module/components/tabs/screen/TabsScreen.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreenIcon.types.js +2 -0
- package/lib/module/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.js.map} +1 -1
- package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js +1 -1
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackItem.js +31 -11
- package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts +6 -3
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +620 -24
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts +8 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts.map +1 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts +6 -3
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +361 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +4 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +7 -0
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.types.d.ts +47 -0
- package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.web.d.ts +1 -3
- package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
- package/lib/typescript/components/stack/index.d.ts +4 -3
- package/lib/typescript/components/stack/index.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.d.ts +5 -0
- package/lib/typescript/components/tabs/host/TabsHost.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +72 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/index.d.ts +4 -6
- package/lib/typescript/components/tabs/index.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts +42 -7
- package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.d.ts +5 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts +78 -13
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts +91 -0
- package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/index.d.ts +1 -0
- package/lib/typescript/components/tabs/screen/index.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -0
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +52 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +29 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +8 -0
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +3 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +4 -0
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +6 -0
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +10 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts +25 -0
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +4 -0
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
- package/lib/typescript/legacy/types.d.ts +30 -0
- package/lib/typescript/legacy/types.d.ts.map +1 -1
- package/package.json +11 -8
- package/react-native.config.js +3 -0
- package/src/components/modals/form-sheet/FormSheet.types.ts +1 -1
- package/src/components/stack/header/StackHeaderConfig.android.tsx +54 -43
- package/src/components/stack/header/StackHeaderConfig.android.types.ts +641 -24
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +55 -17
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +384 -2
- package/src/components/stack/header/StackHeaderConfig.tsx +12 -0
- package/src/components/stack/header/StackHeaderConfig.types.ts +4 -2
- package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +9 -1
- package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +7 -0
- package/src/components/stack/host/StackHost.tsx +12 -3
- package/src/components/stack/host/StackHost.types.ts +50 -0
- package/src/components/stack/host/StackHost.web.tsx +1 -4
- package/src/components/stack/index.ts +14 -1
- package/src/components/tabs/host/TabsHost.ios.tsx +3 -0
- package/src/components/tabs/host/TabsHost.ios.types.ts +76 -0
- package/src/components/tabs/host/TabsHost.tsx +7 -0
- package/src/components/tabs/host/TabsHost.types.ts +3 -0
- package/src/components/tabs/index.ts +9 -0
- package/src/components/tabs/screen/TabsScreen.android.tsx +8 -3
- package/src/components/tabs/screen/TabsScreen.android.types.ts +42 -7
- package/src/components/tabs/screen/TabsScreen.ios.tsx +22 -5
- package/src/components/tabs/screen/TabsScreen.ios.types.ts +79 -17
- package/src/components/tabs/screen/TabsScreen.tsx +7 -0
- package/src/components/tabs/screen/TabsScreenIcon.types.ts +117 -0
- package/src/components/tabs/screen/index.ts +1 -0
- package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -0
- package/src/fabric/legacy/ScreenStackNativeComponent.ts +2 -0
- package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +78 -0
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +43 -0
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +13 -0
- package/src/fabric/stack/StackHostNativeComponent.ts +11 -2
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +8 -0
- package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +9 -0
- package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +20 -2
- package/src/legacy/components/ScreenStackItem.tsx +59 -12
- package/src/legacy/types.ts +31 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenModalFragment.kt +0 -281
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogRootView.kt +0 -104
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogScreen.kt +0 -26
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +0 -134
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +0 -162
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +0 -106
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +0 -198
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +0 -83
- package/ios/conversion/RNSConversions-Stack.h +0 -32
- package/ios/conversion/RNSConversions-Stack.mm +0 -41
- package/ios/conversion/always_false.h +0 -31
- package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js +0 -10
- package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js.map +0 -1
- package/lib/commonjs/components/tabs/host/TabsHost.d.js +0 -2
- package/lib/commonjs/components/tabs/host/TabsHost.d.js.map +0 -1
- package/lib/commonjs/components/tabs/host/TabsHost.web.js.map +0 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.d.js +0 -2
- package/lib/commonjs/components/tabs/screen/TabsScreen.d.js.map +0 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.web.js.map +0 -1
- package/lib/module/components/stack/header/StackHeaderConfig.d.js +0 -2
- package/lib/module/components/stack/header/StackHeaderConfig.web.js +0 -4
- package/lib/module/components/stack/header/StackHeaderConfig.web.js.map +0 -1
- package/lib/module/components/tabs/host/TabsHost.d.js +0 -2
- package/lib/module/components/tabs/host/TabsHost.d.js.map +0 -1
- package/lib/module/components/tabs/host/TabsHost.web.js +0 -4
- package/lib/module/components/tabs/host/TabsHost.web.js.map +0 -1
- package/lib/module/components/tabs/screen/TabsScreen.d.js +0 -2
- package/lib/module/components/tabs/screen/TabsScreen.d.js.map +0 -1
- package/lib/module/components/tabs/screen/TabsScreen.web.js +0 -4
- package/lib/module/components/tabs/screen/TabsScreen.web.js.map +0 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +0 -7
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +0 -1
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +0 -7
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +0 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +0 -7
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +0 -1
- package/src/components/stack/header/StackHeaderConfig.d.ts +0 -22
- package/src/components/stack/header/StackHeaderConfig.web.tsx +0 -5
- package/src/components/tabs/host/TabsHost.d.ts +0 -12
- package/src/components/tabs/screen/TabsScreen.d.ts +0 -12
- /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
|
-
[](https://expo.io)
|
|
262
|
-
[](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).
|
package/android/build.gradle
CHANGED
|
@@ -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 (
|
|
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
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
58
|
+
javaPart->getClass()->getMethod<void(jint)>(
|
|
40
59
|
"notifyScreenRemoved");
|
|
41
|
-
method(
|
|
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(
|
|
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.
|
|
22
|
-
import com.swmansion.rnscreens.modals.formsheet.
|
|
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
|
-
|
|
61
|
-
|
|
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(
|
|
67
|
+
nativeAddMutationsListener(uiManager as FabricUIManager)
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
|
package/android/src/main/java/com/swmansion/rnscreens/common/colorscheme/ColorSchemeCoordinator.kt
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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.
|
|
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(
|