react-native-screens 5.0.0-alpha.1 → 5.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +87 -0
- package/README.md +0 -8
- package/RNScreens.podspec +2 -6
- package/android/build.gradle +26 -1
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +5 -0
- 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/common/container/Container.kt +8 -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/helpers/PropIconResolver.kt +17 -23
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +25 -7
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackFragment.kt +39 -10
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenViewManager.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAppearanceCoordinator.kt → native/coordinator/FormSheetAppearanceCoordinator.kt} +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetBehaviorController.kt → native/coordinator/FormSheetBehaviorController.kt} +74 -19
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +159 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +44 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetAvailableHeightProvider.kt +44 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContainer.kt → native/core/FormSheetContainer.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialog.kt +115 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +89 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeDelegate.kt → native/interfaces/FormSheetContentSizeChangeDelegate.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeProvider.kt → native/interfaces/FormSheetContentSizeChangeProvider.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogEventEmitter.kt → native/interfaces/FormSheetDialogEventEmitter.kt} +5 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetConfig.kt → native/model/FormSheetConfig.kt} +5 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +152 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAnimatorFactory.kt → native/presentation/FormSheetAnimatorFactory.kt} +9 -10
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDimmingManager.kt +115 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDismissalOrigin.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentation.kt +173 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +290 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationState.kt → native/presentation/FormSheetPresentationState.kt} +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetStackRegistry.kt +28 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapper.kt → react/contentwrapper/FormSheetContentWrapper.kt} +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapperViewManager.kt → react/contentwrapper/FormSheetContentWrapperViewManager.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetentChangedEvent.kt → react/event/FormSheetDetentChangedEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidAppearEvent.kt → react/event/FormSheetDidAppearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidDisappearEvent.kt → react/event/FormSheetDidDisappearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetDismissEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetNativeDismissEvent.kt → react/event/FormSheetNativeDismissEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetNativeDismissPreventedEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetSyncFlushEvent.kt → react/event/FormSheetSyncFlushEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillAppearEvent.kt → react/event/FormSheetWillAppearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillDisappearEvent.kt → react/event/FormSheetWillDisappearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentView.kt → react/host/FormSheetContentView.kt} +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHost.kt → react/host/FormSheetHost.kt} +6 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostEventEmitter.kt → react/host/FormSheetHostEventEmitter.kt} +23 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostViewManager.kt → react/host/FormSheetHostViewManager.kt} +13 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +380 -457
- 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 +150 -182
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderFrameSynchronizer.kt +63 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +240 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayoutBehavior.kt → appbar/StackHeaderAppBarLayoutBehavior.kt} +1 -1
- 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/{StackHeaderScrollingViewBehavior.kt → appbar/StackHeaderScrollingViewBehavior.kt} +1 -1
- 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 +192 -167
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +393 -13
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +0 -4
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +33 -3
- 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 +9 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +195 -0
- 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 +43 -21
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +8 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementConfig.kt → model/StackHeaderToolbarMenuElementConfig.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupConfig.kt → model/StackHeaderToolbarMenuGroupConfig.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemConfig.kt → model/StackHeaderToolbarMenuItemConfig.kt} +2 -4
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemDefaults.kt → model/StackHeaderToolbarMenuItemDefaults.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemIconSource.kt → model/StackHeaderToolbarMenuItemIconSource.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemShowAsAction.kt → model/StackHeaderToolbarMenuItemShowAsAction.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemType.kt → model/StackHeaderToolbarMenuItemType.kt} +1 -1
- 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/{StackHeaderToolbarFieldUpdate.kt → update/StackHeaderToolbarFieldUpdate.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +84 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuUpdateQueue.kt → update/StackHeaderToolbarMenuUpdateQueue.kt} +24 -52
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueueDelegate.kt +9 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +103 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +13 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +20 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +2 -4
- 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 +46 -25
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +10 -0
- 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 +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +7 -0
- 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/common/cpp/react/renderer/components/rnscreens/legacy/RNSScreenShadowNode.cpp +10 -5
- package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
- package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
- package/ios/RNSEnums.h +2 -2
- package/ios/RNSOrientationProviding.h +0 -2
- package/ios/RNSReactMountingTransactionObserving.h +15 -0
- package/ios/conversion/RNSConversions.h +7 -108
- package/ios/legacy/RNSBarButtonItem.mm +12 -5
- package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
- package/ios/legacy/RNSModalScreen.mm +1 -1
- package/ios/legacy/RNSScreen.h +8 -1
- package/ios/legacy/RNSScreen.mm +47 -36
- package/ios/legacy/RNSScreenContentWrapper.mm +9 -0
- package/ios/legacy/RNSScreenFooter.mm +2 -0
- package/ios/legacy/RNSScreenStack.mm +9 -4
- package/ios/legacy/RNSScreenStackHeaderConfig.mm +3 -1
- package/ios/legacy/RNSScreenStackHeaderSubview.mm +1 -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/RNSFormSheetContentWrapperComponentView.mm +9 -0
- 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 +2 -2
- package/ios/scroll-to-top-guard/RNSScrollToTopGuard.h +17 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuard.mm +57 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.h +28 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.mm +64 -0
- package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
- package/ios/split/RNSSplitAppearanceApplicator.h +36 -0
- package/ios/split/RNSSplitAppearanceApplicator.mm +182 -0
- package/ios/split/RNSSplitAppearanceCoordinator.h +26 -0
- package/ios/split/RNSSplitAppearanceCoordinator.mm +27 -0
- package/ios/split/RNSSplitAppearanceUpdateFlags.h +14 -0
- 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 +56 -7
- package/ios/split/RNSSplitHostController.h +105 -0
- package/ios/split/RNSSplitHostController.mm +492 -0
- package/ios/split/RNSSplitHostProviders.h +67 -0
- package/ios/split/RNSSplitNavigationController.h +31 -0
- package/ios/split/RNSSplitNavigationController.mm +44 -0
- package/ios/split/RNSSplitNavigationControllerFrameObserver.h +32 -0
- package/ios/split/RNSSplitNavigationControllerFrameObserver.mm +80 -0
- package/ios/split/RNSSplitNavigationControllerFrameOriginChangeDelegate.h +15 -0
- package/ios/split/RNSSplitScreenComponentView.h +0 -39
- package/ios/split/RNSSplitScreenComponentView.mm +35 -19
- package/ios/split/RNSSplitScreenController.h +68 -0
- package/ios/split/RNSSplitScreenController.mm +113 -0
- 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 +32 -0
- package/ios/stack/conversion/RNSConversions-Stack.mm +55 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +11 -1
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +108 -38
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +9 -0
- package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
- package/ios/stack/header/RNSStackHeaderItemComponentView.h +3 -1
- package/ios/stack/header/RNSStackHeaderItemComponentView.mm +15 -2
- package/ios/stack/header/RNSStackHeaderItemDataProviding.h +2 -0
- package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +9 -0
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +15 -0
- package/ios/stack/header/RNSStackHeaderMenuFinder.h +18 -3
- package/ios/stack/header/RNSStackHeaderMenuFinder.mm +21 -3
- package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
- package/ios/stack/host/RNSStackHostComponentView.mm +3 -1
- 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 +14 -6
- package/ios/stack/host/RNSStackOperation.h +0 -2
- package/ios/stack/screen/RNSStackScreenComponentView.mm +9 -4
- package/ios/stack/screen/RNSStackScreenController.mm +12 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +14 -1
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +159 -28
- package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +40 -9
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +4 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +5 -2
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
- package/ios/tabs/conversion/RNSConversions-Tabs.h +78 -0
- package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +8 -71
- package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
- package/ios/tabs/host/RNSTabBarController.h +5 -12
- package/ios/tabs/host/RNSTabBarController.mm +1 -1
- package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
- package/ios/tabs/host/RNSTabsHostComponentView.mm +10 -3
- package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
- package/ios/tabs/screen/RNSTabsScreenComponentView.mm +20 -5
- package/ios/utils/RNSDefines.h +3 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +25 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js +24 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
- package/lib/commonjs/components/scroll-to-top-guard/index.js +13 -0
- package/lib/commonjs/components/scroll-to-top-guard/index.js.map +1 -0
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +34 -19
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +44 -13
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js +33 -2
- package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/utils.js +6 -9
- package/lib/commonjs/components/stack/header/utils.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.js +9 -6
- package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
- package/lib/commonjs/components/stack/index.js.map +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/commonjs/experimental/index.js +11 -0
- package/lib/commonjs/experimental/index.js.map +1 -1
- package/lib/commonjs/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackHeaderConfigNativeComponent.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/legacy/SearchBarNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +12 -0
- package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/split/SplitHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/split/SplitScreenNativeComponent.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/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostAndroidNativeComponent.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.map +1 -1
- package/lib/commonjs/flags.js +22 -1
- package/lib/commonjs/flags.js.map +1 -1
- package/lib/commonjs/legacy/components/Screen.js +6 -1
- package/lib/commonjs/legacy/components/Screen.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js +5 -0
- package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/commonjs/legacy/components/SearchBar.js +16 -16
- package/lib/commonjs/legacy/components/SearchBar.js.map +1 -1
- package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js +3 -0
- package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
- package/lib/commonjs/legacy/gesture-handler/fabricUtils.js.map +1 -1
- package/lib/commonjs/legacy/useTransitionProgress.js.map +1 -1
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +20 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js +18 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
- package/lib/module/components/scroll-to-top-guard/index.js +2 -0
- package/lib/module/components/scroll-to-top-guard/index.js.map +1 -0
- package/lib/module/components/stack/header/StackHeaderConfig.android.js +35 -20
- package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js +48 -17
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/module/components/stack/header/ios/iconUtils.ios.js +31 -2
- package/lib/module/components/stack/header/ios/iconUtils.ios.js.map +1 -1
- package/lib/module/components/stack/header/utils.js +5 -8
- package/lib/module/components/stack/header/utils.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.js +9 -6
- package/lib/module/components/stack/host/StackHost.js.map +1 -1
- package/lib/module/components/stack/index.js.map +1 -1
- package/lib/module/components/tabs/host/TabsHost.ios.js +1 -0
- package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/module/experimental/index.js +1 -0
- package/lib/module/experimental/index.js.map +1 -1
- package/lib/module/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackHeaderConfigNativeComponent.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/legacy/SearchBarNativeComponent.js.map +1 -1
- package/lib/module/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
- package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +7 -0
- package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
- package/lib/module/fabric/split/SplitHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/split/SplitScreenNativeComponent.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/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostAndroidNativeComponent.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.map +1 -1
- package/lib/module/flags.js +22 -1
- package/lib/module/flags.js.map +1 -1
- package/lib/module/legacy/components/Screen.js +6 -1
- package/lib/module/legacy/components/Screen.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackHeaderConfig.js +5 -0
- package/lib/module/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/module/legacy/components/SearchBar.js +17 -17
- package/lib/module/legacy/components/SearchBar.js.map +1 -1
- package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js +4 -0
- package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
- package/lib/module/legacy/gesture-handler/fabricUtils.js.map +1 -1
- package/lib/module/legacy/useTransitionProgress.js.map +1 -1
- package/lib/module/private/hooks/useRenderDebugInfo.js.map +1 -1
- package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +3 -3
- package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts +5 -2
- package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts.map +1 -1
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts +15 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts.map +1 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts +12 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts.map +1 -0
- package/lib/typescript/components/scroll-to-top-guard/index.d.ts +2 -0
- package/lib/typescript/components/scroll-to-top-guard/index.d.ts.map +1 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +639 -20
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +239 -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 +2 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +5 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.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 +2 -0
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts +3 -0
- package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/utils.d.ts +1 -2
- package/lib/typescript/components/stack/header/utils.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 +26 -2
- package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.web.d.ts +6 -2
- package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
- package/lib/typescript/components/stack/index.d.ts +2 -2
- package/lib/typescript/components/stack/index.d.ts.map +1 -1
- package/lib/typescript/components/stack/screen/StackScreen.web.d.ts +5 -2
- package/lib/typescript/components/stack/screen/StackScreen.web.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +16 -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/host/TabsHost.web.d.ts +5 -2
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts +7 -3
- package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +5 -2
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +1 -1
- package/lib/typescript/experimental/index.d.ts +1 -0
- package/lib/typescript/experimental/index.d.ts.map +1 -1
- package/lib/typescript/fabric/NativeScreensModule.d.ts +1 -1
- package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts +3 -2
- package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts +3 -2
- package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts +3 -3
- package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts +6 -6
- package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts +6 -0
- package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +53 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +27 -2
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +4 -2
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +4 -2
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +3 -2
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/flags.d.ts +13 -0
- package/lib/typescript/flags.d.ts.map +1 -1
- package/lib/typescript/legacy/TransitionProgressContext.d.ts +1 -1
- package/lib/typescript/legacy/TransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/legacy/components/Screen.d.ts +5 -3
- package/lib/typescript/legacy/components/Screen.d.ts.map +1 -1
- package/lib/typescript/legacy/components/Screen.web.d.ts +10 -2
- package/lib/typescript/legacy/components/Screen.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContainer.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContainer.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenFooter.web.d.ts +10 -3
- package/lib/typescript/legacy/components/ScreenFooter.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts +10 -3
- package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStack.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenStack.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts +3 -1
- package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts +3 -2
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
- package/lib/typescript/legacy/components/SearchBar.d.ts +3 -3
- package/lib/typescript/legacy/components/SearchBar.d.ts.map +1 -1
- package/lib/typescript/legacy/components/SearchBar.web.d.ts +5 -2
- package/lib/typescript/legacy/components/SearchBar.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +15 -12
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
- package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts +3 -2
- package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts.map +1 -1
- package/lib/typescript/legacy/types.d.ts +25 -5
- package/lib/typescript/legacy/types.d.ts.map +1 -1
- package/lib/typescript/legacy/useTransitionProgress.d.ts +2 -5
- package/lib/typescript/legacy/useTransitionProgress.d.ts.map +1 -1
- package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts +2 -2
- package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts.map +1 -1
- package/package.json +18 -17
- package/react-native.config.js +3 -0
- package/src/components/modals/form-sheet/FormSheet.types.ts +3 -3
- package/src/components/scroll-to-top-guard/ScrollToTopGuard.ios.tsx +17 -0
- package/src/components/scroll-to-top-guard/ScrollToTopGuard.tsx +18 -0
- package/src/components/scroll-to-top-guard/index.ts +1 -0
- package/src/components/stack/header/StackHeaderConfig.android.tsx +48 -23
- package/src/components/stack/header/StackHeaderConfig.android.types.ts +660 -20
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +77 -23
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +251 -2
- package/src/components/stack/header/StackHeaderConfig.types.ts +2 -2
- package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +1 -23
- package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +2 -0
- package/src/components/stack/header/ios/iconUtils.ios.ts +38 -2
- package/src/components/stack/header/utils.ts +6 -11
- package/src/components/stack/host/StackHost.tsx +4 -2
- package/src/components/stack/host/StackHost.types.ts +28 -4
- package/src/components/stack/index.ts +6 -1
- package/src/components/tabs/host/TabsHost.ios.tsx +1 -0
- package/src/components/tabs/host/TabsHost.ios.types.ts +16 -0
- package/src/components/tabs/host/TabsHost.types.ts +3 -0
- package/src/components/tabs/screen/TabsScreen.types.ts +7 -3
- package/src/experimental/index.ts +1 -0
- package/src/fabric/ScrollViewMarkerNativeComponent.ts +8 -2
- package/src/fabric/legacy/FullWindowOverlayNativeComponent.ts +6 -2
- package/src/fabric/legacy/ModalScreenNativeComponent.ts +8 -2
- package/src/fabric/legacy/ScreenContainerNativeComponent.ts +5 -2
- package/src/fabric/legacy/ScreenContentWrapperNativeComponent.ts +2 -2
- package/src/fabric/legacy/ScreenFooterNativeComponent.ts +5 -2
- package/src/fabric/legacy/ScreenNativeComponent.ts +8 -2
- package/src/fabric/legacy/ScreenNavigationContainerNativeComponent.ts +2 -2
- package/src/fabric/legacy/ScreenStackHeaderConfigNativeComponent.ts +8 -3
- package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -2
- package/src/fabric/legacy/ScreenStackNativeComponent.ts +10 -2
- package/src/fabric/legacy/SearchBarNativeComponent.ts +10 -7
- package/src/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.ts +2 -2
- package/src/fabric/modals/form-sheet/FormSheetHostNativeComponent.ts +7 -2
- package/src/fabric/safe-area/SafeAreaViewNativeComponent.ts +6 -2
- package/src/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.ts +10 -0
- package/src/fabric/split/SplitHostNativeComponent.ts +5 -2
- package/src/fabric/split/SplitScreenNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +81 -1
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +39 -2
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +4 -1
- package/src/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHeaderSubviewAndroidNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHostNativeComponent.ts +15 -3
- package/src/fabric/stack/StackScreenNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsBottomAccessoryContentNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsBottomAccessoryNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsHostAndroidNativeComponent.ts +7 -2
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +8 -2
- package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +2 -1
- package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +2 -1
- package/src/flags.ts +26 -0
- package/src/legacy/TransitionProgressContext.tsx +1 -1
- package/src/legacy/components/Screen.tsx +14 -6
- package/src/legacy/components/ScreenStackHeaderConfig.tsx +7 -1
- package/src/legacy/components/ScreenStackItem.tsx +3 -4
- package/src/legacy/components/SearchBar.tsx +34 -44
- package/src/legacy/components/helpers/prepareHeaderBarButtonItems.ts +7 -1
- package/src/legacy/gesture-handler/fabricUtils.ts +5 -2
- package/src/legacy/types.ts +28 -5
- package/src/legacy/useTransitionProgress.tsx +4 -2
- package/src/private/hooks/useRenderDebugInfo.tsx +2 -2
- 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/FormSheetDetents.kt +0 -106
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDialog.kt +0 -60
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDialogManager.kt +0 -138
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetDimensionsCoordinator.kt +0 -131
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetNativeDismissCoordinator.kt +0 -25
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetPresentationManager.kt +0 -207
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderAppBarLayout.kt +0 -113
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuConfig.kt +0 -60
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuElementOptions.kt +0 -32
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuGroupMetadata.kt +0 -16
- package/ios/ReactMountingTransactionObserving.swift +0 -7
- package/ios/bridging/Swift-Bridging.h +0 -7
- 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/ios/orientation/RNSOrientationProviding.swift +0 -6
- package/ios/orientation/RNSOrientationSwift.swift +0 -14
- package/ios/split/RNSSplitAppearanceApplicator.swift +0 -199
- package/ios/split/RNSSplitAppearanceCoordinator.swift +0 -26
- package/ios/split/RNSSplitAppearanceUpdateFlags.swift +0 -11
- package/ios/split/RNSSplitHostController.swift +0 -570
- package/ios/split/RNSSplitNavigationController.swift +0 -46
- package/ios/split/RNSSplitScreenController.swift +0 -133
- package/ios/utils/RNSLog.swift +0 -6
- /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
|
@@ -1,46 +1,4 @@
|
|
|
1
|
-
package com.swmansion.rnscreens.stack.header.toolbar
|
|
2
|
-
|
|
3
|
-
import android.graphics.drawable.Drawable
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* A single toolbar menu element update carried by an `updateToolbarMenuElements`
|
|
7
|
-
* view command, before its icon (if any) has been resolved.
|
|
8
|
-
*/
|
|
9
|
-
internal data class StackHeaderToolbarMenuElementRawUpdate(
|
|
10
|
-
val id: String,
|
|
11
|
-
val options: StackHeaderToolbarMenuElementOptions,
|
|
12
|
-
val iconSource: StackHeaderToolbarMenuItemIconSource?,
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A single toolbar menu element update whose icon has already been resolved and merged
|
|
17
|
-
* into [options], ready to be applied to the toolbar.
|
|
18
|
-
*/
|
|
19
|
-
internal data class StackHeaderToolbarMenuElementUpdate(
|
|
20
|
-
val id: String,
|
|
21
|
-
val options: StackHeaderToolbarMenuElementOptions,
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Resolves the icon for a single menu element update.
|
|
26
|
-
*
|
|
27
|
-
* [onResolved] must be invoked exactly once — synchronously or asynchronously, always on the
|
|
28
|
-
* main thread — with the resolved icon to merge into the element's options.
|
|
29
|
-
*/
|
|
30
|
-
internal fun interface StackHeaderToolbarMenuIconResolver {
|
|
31
|
-
fun resolve(
|
|
32
|
-
iconSource: StackHeaderToolbarMenuItemIconSource,
|
|
33
|
-
onResolved: (icon: StackHeaderToolbarFieldUpdate<Drawable>) -> Unit,
|
|
34
|
-
)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Receives a fully-resolved batch of menu element updates, to be applied to the toolbar
|
|
39
|
-
* atomically.
|
|
40
|
-
*/
|
|
41
|
-
internal fun interface StackHeaderToolbarMenuUpdateQueueDelegate {
|
|
42
|
-
fun onUpdatesResolved(updates: List<StackHeaderToolbarMenuElementUpdate>)
|
|
43
|
-
}
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.toolbar.update
|
|
44
2
|
|
|
45
3
|
/**
|
|
46
4
|
* Serial, FIFO queue for `updateToolbarMenuElements` view command batches.
|
|
@@ -65,6 +23,7 @@ internal class StackHeaderToolbarMenuUpdateQueue(
|
|
|
65
23
|
private val pendingBatches = ArrayDeque<List<StackHeaderToolbarMenuElementRawUpdate>>()
|
|
66
24
|
private var isProcessing = false
|
|
67
25
|
private var isTornDown = false
|
|
26
|
+
private var generation = 0
|
|
68
27
|
|
|
69
28
|
internal fun enqueue(batch: List<StackHeaderToolbarMenuElementRawUpdate>) {
|
|
70
29
|
if (batch.isEmpty()) {
|
|
@@ -76,6 +35,18 @@ internal class StackHeaderToolbarMenuUpdateQueue(
|
|
|
76
35
|
}
|
|
77
36
|
}
|
|
78
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Drops every batch that has not been applied yet, including one whose
|
|
40
|
+
* icons are still resolving — its eventual dispatch becomes a no-op. Used
|
|
41
|
+
* when the menu configuration is replaced: commands sent against the old
|
|
42
|
+
* menu must never touch the new one. The queue stays usable.
|
|
43
|
+
*/
|
|
44
|
+
internal fun clearPending() {
|
|
45
|
+
pendingBatches.clear()
|
|
46
|
+
generation++
|
|
47
|
+
isProcessing = false
|
|
48
|
+
}
|
|
49
|
+
|
|
79
50
|
internal fun tearDown() {
|
|
80
51
|
pendingBatches.clear()
|
|
81
52
|
isTornDown = true
|
|
@@ -90,11 +61,12 @@ internal class StackHeaderToolbarMenuUpdateQueue(
|
|
|
90
61
|
return
|
|
91
62
|
}
|
|
92
63
|
isProcessing = true
|
|
64
|
+
val batchGeneration = generation
|
|
93
65
|
|
|
94
66
|
val updates = arrayOfNulls<StackHeaderToolbarMenuElementUpdate>(batch.size)
|
|
95
67
|
var outstanding = batch.size
|
|
96
68
|
|
|
97
|
-
var
|
|
69
|
+
var inSyncDispatchLoop = true
|
|
98
70
|
|
|
99
71
|
fun dispatchResolvedBatch() {
|
|
100
72
|
pendingBatches.removeFirst()
|
|
@@ -105,20 +77,20 @@ internal class StackHeaderToolbarMenuUpdateQueue(
|
|
|
105
77
|
index: Int,
|
|
106
78
|
options: StackHeaderToolbarMenuElementOptions,
|
|
107
79
|
) {
|
|
108
|
-
|
|
109
|
-
|
|
80
|
+
if (isTornDown || batchGeneration != generation) {
|
|
81
|
+
return
|
|
110
82
|
}
|
|
111
83
|
|
|
112
|
-
|
|
113
|
-
|
|
84
|
+
check(updates[index] == null) {
|
|
85
|
+
"[RNScreens] Unexpected duplicated element resolution."
|
|
114
86
|
}
|
|
115
87
|
|
|
116
|
-
updates[index] = StackHeaderToolbarMenuElementUpdate(batch[index].id, options)
|
|
88
|
+
updates[index] = StackHeaderToolbarMenuElementUpdate(batch[index].id, options, batch[index].checked)
|
|
117
89
|
outstanding -= 1
|
|
118
90
|
|
|
119
91
|
// A synchronous completion is applied by the loop below; only an asynchronous one
|
|
120
92
|
// advances the queue processing from here.
|
|
121
|
-
if (outstanding == 0 && !
|
|
93
|
+
if (outstanding == 0 && !inSyncDispatchLoop) {
|
|
122
94
|
dispatchResolvedBatch()
|
|
123
95
|
processNext()
|
|
124
96
|
}
|
|
@@ -130,11 +102,11 @@ internal class StackHeaderToolbarMenuUpdateQueue(
|
|
|
130
102
|
onElementResolved(index, update.options)
|
|
131
103
|
} else {
|
|
132
104
|
iconResolver.resolve(iconSource) { icon ->
|
|
133
|
-
onElementResolved(index, update.options.copy(icon = icon))
|
|
105
|
+
onElementResolved(index, update.options.copy(icon = StackHeaderToolbarFieldUpdate.from(icon)))
|
|
134
106
|
}
|
|
135
107
|
}
|
|
136
108
|
}
|
|
137
|
-
|
|
109
|
+
inSyncDispatchLoop = false
|
|
138
110
|
|
|
139
111
|
if (outstanding > 0) {
|
|
140
112
|
// An icon is still loading asynchronously; its callback will apply the batch
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.toolbar.update
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Receives a fully-resolved batch of menu element updates, to be applied to the toolbar
|
|
5
|
+
* atomically.
|
|
6
|
+
*/
|
|
7
|
+
internal fun interface StackHeaderToolbarMenuUpdateQueueDelegate {
|
|
8
|
+
fun onUpdatesResolved(updates: List<StackHeaderToolbarMenuElementUpdate>)
|
|
9
|
+
}
|
|
@@ -2,18 +2,26 @@ package com.swmansion.rnscreens.stack.host
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
|
+
import android.content.res.Configuration
|
|
5
6
|
import android.util.Log
|
|
6
7
|
import android.view.ViewGroup
|
|
7
8
|
import android.widget.FrameLayout
|
|
8
9
|
import androidx.fragment.app.Fragment
|
|
9
10
|
import androidx.fragment.app.FragmentManager
|
|
11
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorScheme
|
|
12
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeCoordinator
|
|
13
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeListener
|
|
14
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeProviding
|
|
10
15
|
import com.swmansion.rnscreens.common.container.Container
|
|
16
|
+
import com.swmansion.rnscreens.common.container.ContainerItem
|
|
11
17
|
import com.swmansion.rnscreens.common.container.ParentContainerItemRegistry
|
|
12
18
|
import com.swmansion.rnscreens.ext.isMeasured
|
|
13
19
|
import com.swmansion.rnscreens.helpers.FragmentManagerHelper
|
|
14
20
|
import com.swmansion.rnscreens.helpers.ViewIdGenerator
|
|
21
|
+
import com.swmansion.rnscreens.stack.header.StackHeaderBackPressHandler
|
|
15
22
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
16
23
|
import com.swmansion.rnscreens.stack.screen.StackScreenFragment
|
|
24
|
+
import com.swmansion.rnscreens.stack.screen.StackScreenFragmentDelegate
|
|
17
25
|
import com.swmansion.rnscreens.utils.RNSLog
|
|
18
26
|
import java.lang.ref.WeakReference
|
|
19
27
|
|
|
@@ -23,7 +31,10 @@ internal class StackContainer(
|
|
|
23
31
|
private val delegate: WeakReference<StackContainerDelegate>,
|
|
24
32
|
) : FrameLayout(context),
|
|
25
33
|
Container,
|
|
26
|
-
FragmentManager.OnBackStackChangedListener
|
|
34
|
+
FragmentManager.OnBackStackChangedListener,
|
|
35
|
+
ColorSchemeProviding,
|
|
36
|
+
StackHeaderBackPressHandler,
|
|
37
|
+
StackScreenFragmentDelegate {
|
|
27
38
|
private var fragmentManager: FragmentManager? = null
|
|
28
39
|
|
|
29
40
|
private fun requireFragmentManager(): FragmentManager =
|
|
@@ -51,6 +62,20 @@ internal class StackContainer(
|
|
|
51
62
|
private val fragmentOpExecutor: FragmentOperationExecutor = FragmentOperationExecutor()
|
|
52
63
|
private val fragmentOps: MutableList<FragmentOperation> = arrayListOf()
|
|
53
64
|
|
|
65
|
+
// region Color Scheme
|
|
66
|
+
|
|
67
|
+
private val colorSchemeCoordinator = ColorSchemeCoordinator()
|
|
68
|
+
|
|
69
|
+
internal var colorScheme: ColorScheme by colorSchemeCoordinator::colorScheme
|
|
70
|
+
|
|
71
|
+
override fun getResolvedUiNightMode() = colorSchemeCoordinator.getResolvedUiNightMode()
|
|
72
|
+
|
|
73
|
+
override fun addColorSchemeListener(listener: ColorSchemeListener) = colorSchemeCoordinator.addColorSchemeListener(listener)
|
|
74
|
+
|
|
75
|
+
override fun removeColorSchemeListener(listener: ColorSchemeListener) = colorSchemeCoordinator.removeColorSchemeListener(listener)
|
|
76
|
+
|
|
77
|
+
// endregion
|
|
78
|
+
|
|
54
79
|
init {
|
|
55
80
|
id = ViewIdGenerator.generateViewId()
|
|
56
81
|
}
|
|
@@ -62,6 +87,10 @@ internal class StackContainer(
|
|
|
62
87
|
parentContainerRegistry.attach(this)
|
|
63
88
|
setupFragmentManger()
|
|
64
89
|
|
|
90
|
+
// StackContainer only provides container-level color scheme configuration for its screens
|
|
91
|
+
// but doesn't use any color scheme-dependent views, so we don't need the callback.
|
|
92
|
+
colorSchemeCoordinator.setup(this, null)
|
|
93
|
+
|
|
65
94
|
// Following line works with a couple of assumptions.
|
|
66
95
|
// First, that this view is laid out by our parent view, which is a component view.
|
|
67
96
|
// Component views on new architecture receive their first layout after the view hierarchy is
|
|
@@ -81,8 +110,16 @@ internal class StackContainer(
|
|
|
81
110
|
requireFragmentManager().removeOnBackStackChangedListener(this)
|
|
82
111
|
fragmentManager = null
|
|
83
112
|
parentContainerRegistry.detach(this)
|
|
113
|
+
colorSchemeCoordinator.teardown()
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
override fun onConfigurationChanged(newConfig: Configuration?) {
|
|
117
|
+
super.onConfigurationChanged(newConfig)
|
|
118
|
+
colorSchemeCoordinator.onConfigurationChanged(newConfig)
|
|
84
119
|
}
|
|
85
120
|
|
|
121
|
+
override fun onFragmentConfigurationChanged(config: Configuration) = onConfigurationChanged(config)
|
|
122
|
+
|
|
86
123
|
internal fun setupFragmentManger() {
|
|
87
124
|
fragmentManager =
|
|
88
125
|
checkNotNull(FragmentManagerHelper.findFragmentManagerForView(this)) {
|
|
@@ -164,7 +201,8 @@ internal class StackContainer(
|
|
|
164
201
|
}
|
|
165
202
|
|
|
166
203
|
pendingPushOperations.forEach { operation ->
|
|
167
|
-
val newFragment =
|
|
204
|
+
val newFragment =
|
|
205
|
+
createFragmentForScreen(operation.screen, canNavigateBack = stackModel.isNotEmpty())
|
|
168
206
|
|
|
169
207
|
fragmentOps.add(
|
|
170
208
|
AddAndSetAsPrimaryOp(
|
|
@@ -205,7 +243,12 @@ internal class StackContainer(
|
|
|
205
243
|
screen: StackScreen,
|
|
206
244
|
canNavigateBack: Boolean,
|
|
207
245
|
): StackScreenFragment =
|
|
208
|
-
StackScreenFragment(
|
|
246
|
+
StackScreenFragment(
|
|
247
|
+
screen,
|
|
248
|
+
canNavigateBack,
|
|
249
|
+
WeakReference(this),
|
|
250
|
+
backPressHandler = WeakReference(this),
|
|
251
|
+
).also {
|
|
209
252
|
Log.d(TAG, "Created Fragment $it for screen ${screen.screenKey}")
|
|
210
253
|
}
|
|
211
254
|
|
|
@@ -290,6 +333,63 @@ internal class StackContainer(
|
|
|
290
333
|
?.stackScreen
|
|
291
334
|
?.findContentScrollView()
|
|
292
335
|
|
|
336
|
+
// Asked when this container's whole subtree is about to be dismissed (the screen
|
|
337
|
+
// hosting this container is popped) - every item gets a vote, back-to-front, so
|
|
338
|
+
// the deepest preventing screen wins.
|
|
339
|
+
override fun wantsToPreventStackNativeDismiss(): ContainerItem? =
|
|
340
|
+
stackModel
|
|
341
|
+
.asReversed()
|
|
342
|
+
.firstNotNullOfOrNull { it.stackScreen.wantsToPreventStackNativeDismiss() }
|
|
343
|
+
|
|
344
|
+
// endregion
|
|
345
|
+
|
|
346
|
+
// region Header back button
|
|
347
|
+
|
|
348
|
+
override fun handleHeaderBackButtonPress(pressedScreen: StackScreen) {
|
|
349
|
+
val fragmentManager = fragmentManager
|
|
350
|
+
if (fragmentManager == null) {
|
|
351
|
+
Log.w(TAG, "[RNScreens] Ignoring header back button press - container is detached")
|
|
352
|
+
return
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
val topScreen = stackModel.lastOrNull()?.stackScreen
|
|
356
|
+
if (topScreen !== pressedScreen || stackModel.size <= 1) {
|
|
357
|
+
Log.w(
|
|
358
|
+
TAG,
|
|
359
|
+
"[RNScreens] Ignoring header back button press for non-top screen ${pressedScreen.screenKey}",
|
|
360
|
+
)
|
|
361
|
+
return
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// This pop dismisses only the top screen (together with its subtree), therefore
|
|
365
|
+
// only the top item is asked - screens below the top get no vote at this level.
|
|
366
|
+
val vetoingItem = topScreen.wantsToPreventStackNativeDismiss()
|
|
367
|
+
if (vetoingItem != null) {
|
|
368
|
+
// Only a StackScreen can veto - TabsScreen has no own flag and only forwards.
|
|
369
|
+
val vetoingScreen = vetoingItem as? StackScreen
|
|
370
|
+
if (vetoingScreen != null) {
|
|
371
|
+
vetoingScreen.onNativeDismissPrevented()
|
|
372
|
+
} else {
|
|
373
|
+
Log.w(
|
|
374
|
+
TAG,
|
|
375
|
+
"[RNScreens] Unexpected vetoing item type: ${vetoingItem.javaClass.simpleName}",
|
|
376
|
+
)
|
|
377
|
+
}
|
|
378
|
+
return
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Mirrors FragmentManager's internal OnBackPressedCallback, which also runs
|
|
382
|
+
// popBackStackImmediate. The synchronous pop makes the top-screen guard above
|
|
383
|
+
// reliable against double taps: onBackStackChangeCommitted -> onNativeFragmentPop
|
|
384
|
+
// updates stackModel before this call returns.
|
|
385
|
+
fragmentManager.popBackStackImmediate(
|
|
386
|
+
// key MUST BE present, otherwise the navigation action will be delegated to child primary navigation
|
|
387
|
+
// fragment.
|
|
388
|
+
checkNotNull(pressedScreen.screenKey) { "[RNScreens] Screen key is required" },
|
|
389
|
+
FragmentManager.POP_BACK_STACK_INCLUSIVE,
|
|
390
|
+
)
|
|
391
|
+
}
|
|
392
|
+
|
|
293
393
|
// endregion
|
|
294
394
|
|
|
295
395
|
companion object {
|
|
@@ -8,6 +8,7 @@ import com.facebook.react.bridge.UIManagerListener
|
|
|
8
8
|
import com.facebook.react.common.annotations.UnstableReactNativeAPI
|
|
9
9
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
10
10
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
11
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorScheme
|
|
11
12
|
import com.swmansion.rnscreens.helpers.getFabricUIManagerNotNull
|
|
12
13
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
13
14
|
import com.swmansion.rnscreens.utils.RNSLog
|
|
@@ -26,6 +27,8 @@ class StackHost(
|
|
|
26
27
|
private val containerUpdateCoordinator = StackContainerUpdateCoordinator()
|
|
27
28
|
private var isLayoutEnqueued = false
|
|
28
29
|
|
|
30
|
+
internal var colorScheme: ColorScheme by container::colorScheme
|
|
31
|
+
|
|
29
32
|
init {
|
|
30
33
|
addView(container)
|
|
31
34
|
|
|
@@ -119,6 +122,16 @@ class StackHost(
|
|
|
119
122
|
refreshLayout()
|
|
120
123
|
}
|
|
121
124
|
|
|
125
|
+
// On window configuration changes ViewRootImpl calls forceLayout() recursively on every view
|
|
126
|
+
// in the hierarchy, bypassing requestLayout(). React views never lay out their children during
|
|
127
|
+
// framework traversals, so nothing would clear the force-layout flags in our subtree — and once
|
|
128
|
+
// they are set, any subsequent requestLayout() from a descendant short-circuits before reaching
|
|
129
|
+
// the override above, permanently disabling the manual pass. Schedule it from here as well.
|
|
130
|
+
override fun forceLayout() {
|
|
131
|
+
super.forceLayout()
|
|
132
|
+
refreshLayout()
|
|
133
|
+
}
|
|
134
|
+
|
|
122
135
|
private fun refreshLayout() {
|
|
123
136
|
if (!isLayoutEnqueued) {
|
|
124
137
|
isLayoutEnqueued = true
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.host
|
|
2
2
|
|
|
3
3
|
import android.view.View
|
|
4
|
+
import com.facebook.react.bridge.JSApplicationIllegalArgumentException
|
|
4
5
|
import com.facebook.react.module.annotations.ReactModule
|
|
5
6
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
7
|
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
8
|
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
8
9
|
import com.facebook.react.viewmanagers.RNSStackHostManagerDelegate
|
|
9
10
|
import com.facebook.react.viewmanagers.RNSStackHostManagerInterface
|
|
11
|
+
import com.swmansion.rnscreens.common.colorscheme.ColorScheme
|
|
10
12
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
11
13
|
|
|
12
14
|
@ReactModule(name = StackHostViewManager.REACT_CLASS)
|
|
@@ -70,6 +72,18 @@ class StackHostViewManager :
|
|
|
70
72
|
*/
|
|
71
73
|
override fun needsCustomLayoutForChildren() = true
|
|
72
74
|
|
|
75
|
+
override fun setColorScheme(
|
|
76
|
+
view: StackHost,
|
|
77
|
+
value: String?,
|
|
78
|
+
) {
|
|
79
|
+
when (value) {
|
|
80
|
+
null, "inherit" -> view.colorScheme = ColorScheme.INHERIT
|
|
81
|
+
"light" -> view.colorScheme = ColorScheme.LIGHT
|
|
82
|
+
"dark" -> view.colorScheme = ColorScheme.DARK
|
|
83
|
+
else -> throw JSApplicationIllegalArgumentException("[RNScreens] Invalid color scheme: $value.")
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
73
87
|
companion object {
|
|
74
88
|
const val REACT_CLASS = "RNSStackHost"
|
|
75
89
|
}
|
|
@@ -131,6 +131,7 @@ class StackScreen(
|
|
|
131
131
|
scrollView: ViewGroup,
|
|
132
132
|
) {
|
|
133
133
|
containerItemSupport.registerScrollView(scrollView)
|
|
134
|
+
headerConfig?.onContentScrollViewChanged()
|
|
134
135
|
}
|
|
135
136
|
|
|
136
137
|
// endregion
|
|
@@ -174,4 +175,8 @@ class StackScreen(
|
|
|
174
175
|
override fun resolveNestedContainer(): Container? = containerItemSupport.resolveNestedContainer()
|
|
175
176
|
|
|
176
177
|
override fun findContentScrollView(): ViewGroup? = containerItemSupport.findContentScrollView(this)
|
|
178
|
+
|
|
179
|
+
override fun wantsToPreventStackNativeDismiss(): ContainerItem? =
|
|
180
|
+
resolveNestedContainer()?.wantsToPreventStackNativeDismiss()
|
|
181
|
+
?: takeIf { isPreventNativeDismissEnabled }
|
|
177
182
|
}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.screen
|
|
2
2
|
|
|
3
|
+
import android.content.res.Configuration
|
|
3
4
|
import android.os.Bundle
|
|
5
|
+
import android.util.Log
|
|
4
6
|
import android.view.Gravity
|
|
5
7
|
import android.view.LayoutInflater
|
|
6
8
|
import android.view.View
|
|
7
9
|
import android.view.ViewGroup
|
|
8
10
|
import androidx.fragment.app.Fragment
|
|
9
11
|
import androidx.transition.Slide
|
|
12
|
+
import com.swmansion.rnscreens.stack.header.StackHeaderBackPressHandler
|
|
10
13
|
import com.swmansion.rnscreens.stack.header.StackHeaderCoordinatorLayout
|
|
14
|
+
import java.lang.ref.WeakReference
|
|
11
15
|
|
|
12
16
|
internal class StackScreenFragment(
|
|
13
17
|
internal val stackScreen: StackScreen,
|
|
14
18
|
private val canNavigateBack: Boolean,
|
|
19
|
+
private val delegate: WeakReference<StackScreenFragmentDelegate>,
|
|
20
|
+
private val backPressHandler: WeakReference<StackHeaderBackPressHandler>,
|
|
15
21
|
) : Fragment() {
|
|
16
22
|
private var screenLifecycleEventEmitter: StackScreenAppearanceEventsEmitter? = null
|
|
17
23
|
|
|
@@ -45,7 +51,11 @@ internal class StackScreenFragment(
|
|
|
45
51
|
inflater: LayoutInflater,
|
|
46
52
|
container: ViewGroup?,
|
|
47
53
|
savedInstanceState: Bundle?,
|
|
48
|
-
): View =
|
|
54
|
+
): View =
|
|
55
|
+
StackHeaderCoordinatorLayout(requireContext(), stackScreen, canNavigateBack) { pressedScreen ->
|
|
56
|
+
backPressHandler.get()?.handleHeaderBackButtonPress(pressedScreen)
|
|
57
|
+
?: Log.w(TAG, "[RNScreens] Header back button press dropped - handler is gone")
|
|
58
|
+
}
|
|
49
59
|
|
|
50
60
|
override fun onViewCreated(
|
|
51
61
|
view: View,
|
|
@@ -71,6 +81,11 @@ internal class StackScreenFragment(
|
|
|
71
81
|
teardownPreventNativeDismissCallback()
|
|
72
82
|
}
|
|
73
83
|
|
|
84
|
+
override fun onConfigurationChanged(newConfig: Configuration) {
|
|
85
|
+
super.onConfigurationChanged(newConfig)
|
|
86
|
+
delegate.get()?.onFragmentConfigurationChanged(newConfig)
|
|
87
|
+
}
|
|
88
|
+
|
|
74
89
|
/**
|
|
75
90
|
* Notifies this fragment that it has become "top fragment" in its fragment manager.
|
|
76
91
|
* Call this only if the lifecycle of the fragment is at least at CREATED.
|
|
@@ -109,4 +124,8 @@ internal class StackScreenFragment(
|
|
|
109
124
|
requireNativeDismissBackPressedCallback.remove()
|
|
110
125
|
preventNativeDismissBackPressedCallback = null
|
|
111
126
|
}
|
|
127
|
+
|
|
128
|
+
companion object {
|
|
129
|
+
private const val TAG = "StackScreenFragment"
|
|
130
|
+
}
|
|
112
131
|
}
|
package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.screen
|
|
2
|
+
|
|
3
|
+
import android.content.res.Configuration
|
|
4
|
+
|
|
5
|
+
internal interface StackScreenFragmentDelegate {
|
|
6
|
+
/**
|
|
7
|
+
* Notifies the delegate that the fragment received a configuration update,
|
|
8
|
+
* e.g. theme change from JS via Appearance.setColorScheme. Fragments are
|
|
9
|
+
* the only place where such updates are delivered reliably.
|
|
10
|
+
*/
|
|
11
|
+
fun onFragmentConfigurationChanged(config: Configuration)
|
|
12
|
+
}
|
package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt
CHANGED
|
@@ -4,7 +4,6 @@ import android.content.Context
|
|
|
4
4
|
import android.view.MenuItem
|
|
5
5
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
|
6
6
|
import com.swmansion.rnscreens.tabs.container.TabsContainer
|
|
7
|
-
import com.swmansion.rnscreens.tabs.container.menuItemIdForFragmentAtIndex
|
|
8
7
|
import com.swmansion.rnscreens.tabs.screen.TabsScreen
|
|
9
8
|
import com.swmansion.rnscreens.tabs.screen.TabsScreenFragment
|
|
10
9
|
|
|
@@ -28,13 +27,12 @@ internal class TabsAppearanceCoordinator(
|
|
|
28
27
|
context: Context,
|
|
29
28
|
tabsAppearance: TabsAppearance?,
|
|
30
29
|
) {
|
|
31
|
-
tabsScreenFragments.
|
|
32
|
-
val menuItemId =
|
|
30
|
+
tabsScreenFragments.forEach { fragment ->
|
|
31
|
+
val menuItemId = fragment.menuItemId
|
|
33
32
|
val menuItem =
|
|
34
33
|
checkNotNull(bottomNavigationView.menu.findItem(menuItemId)) {
|
|
35
34
|
"[RNScreens] Missing MenuItem for id: $menuItemId"
|
|
36
35
|
}
|
|
37
|
-
check(menuItem.itemId == menuItemId) { "[RNScreens] Illegal state: menu items are shuffled" }
|
|
38
36
|
updateMenuItemAppearance(context, menuItem, fragment.tabsScreen, tabsAppearance)
|
|
39
37
|
}
|
|
40
38
|
}
|
|
@@ -2,30 +2,12 @@ package com.swmansion.rnscreens.tabs.container
|
|
|
2
2
|
|
|
3
3
|
import android.view.Menu
|
|
4
4
|
import android.view.MenuItem
|
|
5
|
-
import com.swmansion.rnscreens.tabs.screen.
|
|
5
|
+
import com.swmansion.rnscreens.tabs.screen.TabsScreenFragment
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Compute MenuItem id for a fragment at given index in "tabsModel" of TabsContainer
|
|
11
|
-
*/
|
|
12
|
-
internal fun menuItemIdForFragmentAtIndex(fragmentIndex: Int): Int = fragmentIndex + 1
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Compute fragment index in "tabsModel" of TabsContainer for a MenuItem with given id.
|
|
16
|
-
*/
|
|
17
|
-
internal fun fragmentIndexForMenuItemId(menuItemId: Int): Int {
|
|
18
|
-
check(menuItemId >= 1) { "[RNScreens] MenuItem id must not be less than 1" }
|
|
19
|
-
return menuItemId - 1
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
internal fun Menu.getOrCreateMenuItemForFragmentAt(
|
|
23
|
-
index: Int,
|
|
24
|
-
tabsScreen: TabsScreen,
|
|
25
|
-
): MenuItem =
|
|
26
|
-
this.findItem(menuItemIdForFragmentAtIndex(index)) ?: this.add(
|
|
7
|
+
internal fun Menu.getOrCreateMenuItemForFragment(fragment: TabsScreenFragment): MenuItem =
|
|
8
|
+
this.findItem(fragment.menuItemId) ?: this.add(
|
|
27
9
|
Menu.NONE,
|
|
28
|
-
|
|
10
|
+
fragment.menuItemId,
|
|
29
11
|
Menu.NONE,
|
|
30
|
-
tabsScreen.tabTitle,
|
|
12
|
+
fragment.tabsScreen.tabTitle,
|
|
31
13
|
)
|
|
@@ -24,6 +24,7 @@ import com.swmansion.rnscreens.common.colorscheme.ColorSchemeCoordinator
|
|
|
24
24
|
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeListener
|
|
25
25
|
import com.swmansion.rnscreens.common.colorscheme.ColorSchemeProviding
|
|
26
26
|
import com.swmansion.rnscreens.common.container.Container
|
|
27
|
+
import com.swmansion.rnscreens.common.container.ContainerItem
|
|
27
28
|
import com.swmansion.rnscreens.common.container.ParentContainerItemRegistry
|
|
28
29
|
import com.swmansion.rnscreens.helpers.FragmentManagerHelper
|
|
29
30
|
import com.swmansion.rnscreens.helpers.ViewFinder
|
|
@@ -67,7 +68,8 @@ class TabsContainer internal constructor(
|
|
|
67
68
|
val selectedTabScreen = this@TabsContainer.selectedTab.tabsScreen
|
|
68
69
|
|
|
69
70
|
if (selectedTabScreen.shouldUseRepeatedTabSelectionPopToRootSpecialEffect) {
|
|
70
|
-
val screenStack =
|
|
71
|
+
val screenStack =
|
|
72
|
+
ViewFinder.findScreenStackInFirstDescendantChain(selectedTabScreen)
|
|
71
73
|
if (screenStack != null && screenStack.popToRoot()) {
|
|
72
74
|
return true
|
|
73
75
|
}
|
|
@@ -492,7 +494,10 @@ class TabsContainer internal constructor(
|
|
|
492
494
|
|
|
493
495
|
private fun performSelectedTabUpdate() {
|
|
494
496
|
if (pendingStateUpdateRequest == null) {
|
|
495
|
-
RNSLog.w(
|
|
497
|
+
RNSLog.w(
|
|
498
|
+
TAG,
|
|
499
|
+
"TabsContainer::performSelectedTabUpdate called w/o pending operation; skipping update",
|
|
500
|
+
)
|
|
496
501
|
return
|
|
497
502
|
}
|
|
498
503
|
|
|
@@ -516,7 +521,10 @@ class TabsContainer internal constructor(
|
|
|
516
521
|
if (bottomNavigationView.selectedItemId != nextSelectedMenuItemId || navState.isEmpty()) {
|
|
517
522
|
isInExternalOperationContext = true
|
|
518
523
|
// This triggers on OnMenuItemClicked callback, where we perform actual update from
|
|
519
|
-
bottomNavigationView.setSelectedItemIdWithActionOrigin(
|
|
524
|
+
bottomNavigationView.setSelectedItemIdWithActionOrigin(
|
|
525
|
+
nextSelectedMenuItemId,
|
|
526
|
+
stateUpdateRequest.actionOrigin,
|
|
527
|
+
)
|
|
520
528
|
isInExternalOperationContext = false
|
|
521
529
|
} else {
|
|
522
530
|
observerRegistry.emitOnNavigationStateUpdateRejected(
|
|
@@ -530,17 +538,19 @@ class TabsContainer internal constructor(
|
|
|
530
538
|
}
|
|
531
539
|
|
|
532
540
|
private fun updateNavigationMenuStructure() {
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
541
|
+
val menu = bottomNavigationView.menu
|
|
542
|
+
val isMenuInSync =
|
|
543
|
+
menu.size == tabsModel.size &&
|
|
544
|
+
tabsModel.withIndex().all { (index, fragment) ->
|
|
545
|
+
menu.getItem(index).itemId == fragment.menuItemId
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
if (isMenuInSync) {
|
|
549
|
+
return
|
|
550
|
+
}
|
|
551
|
+
menu.clear()
|
|
552
|
+
tabsModel.forEach { fragment ->
|
|
553
|
+
menu.getOrCreateMenuItemForFragment(fragment)
|
|
544
554
|
}
|
|
545
555
|
}
|
|
546
556
|
|
|
@@ -573,7 +583,10 @@ class TabsContainer internal constructor(
|
|
|
573
583
|
}
|
|
574
584
|
|
|
575
585
|
progressNavigationState(nextSelectedFragment.requireScreenKey, actionOrigin)
|
|
576
|
-
applyNextSelectedFragmentToFragmentManagerSync(
|
|
586
|
+
applyNextSelectedFragmentToFragmentManagerSync(
|
|
587
|
+
currentSelectedFragment,
|
|
588
|
+
nextSelectedFragment,
|
|
589
|
+
)
|
|
577
590
|
return true
|
|
578
591
|
}
|
|
579
592
|
|
|
@@ -643,7 +656,8 @@ class TabsContainer internal constructor(
|
|
|
643
656
|
return false
|
|
644
657
|
}
|
|
645
658
|
|
|
646
|
-
val stateChanged =
|
|
659
|
+
val stateChanged =
|
|
660
|
+
updateNavigationStateAndSelectedFragment(nextSelectedFragment, actionOrigin)
|
|
647
661
|
|
|
648
662
|
val hasTriggeredSpecialEffect =
|
|
649
663
|
if (isRepeated) specialEffectsHandler.handleRepeatedTabSelection() else false
|
|
@@ -688,7 +702,8 @@ class TabsContainer internal constructor(
|
|
|
688
702
|
|
|
689
703
|
// We expect at most a single fragment added (detached fragments are not returned from
|
|
690
704
|
// FragmentManager.getFragments call) and it being the currently selected tab.
|
|
691
|
-
val isInUpToDateState =
|
|
705
|
+
val isInUpToDateState =
|
|
706
|
+
currentFragments.size == 1 && currentFragments.first() === selectedTab
|
|
692
707
|
if (isInUpToDateState) {
|
|
693
708
|
return
|
|
694
709
|
} else if (currentFragments.isEmpty()) {
|
|
@@ -717,12 +732,10 @@ class TabsContainer internal constructor(
|
|
|
717
732
|
appearanceCoordinator.updateTabAppearance(themedContext, this)
|
|
718
733
|
}
|
|
719
734
|
|
|
720
|
-
private fun getFragmentForMenuItemId(itemId: Int): TabsScreenFragment? = tabsModel.
|
|
735
|
+
private fun getFragmentForMenuItemId(itemId: Int): TabsScreenFragment? = tabsModel.find { it.menuItemId == itemId }
|
|
721
736
|
|
|
722
737
|
private fun getMenuItemIdForFragment(tabsScreenFragment: TabsScreenFragment): Int? =
|
|
723
|
-
tabsModel.
|
|
724
|
-
menuItemIdForFragmentAtIndex(it)
|
|
725
|
-
}
|
|
738
|
+
tabsScreenFragment.menuItemId.takeIf { tabsModel.any { it === tabsScreenFragment } }
|
|
726
739
|
|
|
727
740
|
private fun getSelectedTabsScreenFragmentId(): Int? =
|
|
728
741
|
tabsModel
|
|
@@ -731,10 +744,9 @@ class TabsContainer internal constructor(
|
|
|
731
744
|
|
|
732
745
|
private fun getMenuItemForTabsScreen(tabsScreen: TabsScreen): MenuItem? =
|
|
733
746
|
tabsModel
|
|
734
|
-
.
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
bottomNavigationView.menu.findItem(menuItemIdForFragmentAtIndex(index))
|
|
747
|
+
.find { it.tabsScreen === tabsScreen }
|
|
748
|
+
?.let { fragment ->
|
|
749
|
+
bottomNavigationView.menu.findItem(fragment.menuItemId)
|
|
738
750
|
}
|
|
739
751
|
|
|
740
752
|
private fun getFragmentForScreenKey(screenKey: String): TabsScreenFragment? = tabsModel.find { it.requireScreenKey == screenKey }
|
|
@@ -780,6 +792,15 @@ class TabsContainer internal constructor(
|
|
|
780
792
|
return selectedTab.tabsScreen.findContentScrollView()
|
|
781
793
|
}
|
|
782
794
|
|
|
795
|
+
// Only the active item is consulted - a preventing screen inside an inactive tab
|
|
796
|
+
// does not veto the dismissal.
|
|
797
|
+
override fun wantsToPreventStackNativeDismiss(): ContainerItem? =
|
|
798
|
+
if (navState.isNotEmpty()) {
|
|
799
|
+
selectedTab.tabsScreen.wantsToPreventStackNativeDismiss()
|
|
800
|
+
} else {
|
|
801
|
+
null
|
|
802
|
+
}
|
|
803
|
+
|
|
783
804
|
// endregion
|
|
784
805
|
|
|
785
806
|
companion object {
|