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
|
@@ -85,6 +85,12 @@ class ScreenStackFragment :
|
|
|
85
85
|
|
|
86
86
|
private var lastInsetsCompat: WindowInsetsCompat? = null
|
|
87
87
|
|
|
88
|
+
// Container reference is captured at registration, because `screen.container` is already
|
|
89
|
+
// null during teardown. Necessary for unregistering inset & layout listeners in `onDestroyView`.
|
|
90
|
+
private var containerWithSheetListeners: ScreenContainer? = null
|
|
91
|
+
private var containerOnLayoutChangeListener: View.OnLayoutChangeListener? = null
|
|
92
|
+
private var containerOnApplyWindowInsetsListener: View.OnApplyWindowInsetsListener? = null
|
|
93
|
+
|
|
88
94
|
@SuppressLint("ValidFragment")
|
|
89
95
|
constructor(screenView: Screen) : super(screenView)
|
|
90
96
|
|
|
@@ -337,6 +343,7 @@ class ScreenStackFragment :
|
|
|
337
343
|
// - Screen.fragment
|
|
338
344
|
lastActiveHeaderConfig?.clearActionBarIfOwned(activity as? AppCompatActivity)
|
|
339
345
|
lastActiveHeaderConfig = null
|
|
346
|
+
detachInsetsAndLayoutListenersFromContainer()
|
|
340
347
|
super.onDestroyView()
|
|
341
348
|
}
|
|
342
349
|
|
|
@@ -522,15 +529,20 @@ class ScreenStackFragment :
|
|
|
522
529
|
// Mark: Avoiding top inset by BottomSheet
|
|
523
530
|
|
|
524
531
|
private fun attachInsetsAndLayoutListenersToBottomSheet(sheetTransitionCoordinator: BottomSheetTransitionCoordinator) {
|
|
525
|
-
screen.container?.
|
|
532
|
+
screen.container?.let { container ->
|
|
533
|
+
containerWithSheetListeners = container
|
|
534
|
+
|
|
526
535
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
536
|
+
val insetsListener =
|
|
537
|
+
View.OnApplyWindowInsetsListener { _, insets ->
|
|
538
|
+
val insetsCompat = WindowInsetsCompat.toWindowInsetsCompat(insets, container)
|
|
539
|
+
handleInsetsUpdateAndNotifyTransition(
|
|
540
|
+
insetsCompat,
|
|
541
|
+
)
|
|
542
|
+
insets
|
|
543
|
+
}
|
|
544
|
+
containerOnApplyWindowInsetsListener = insetsListener
|
|
545
|
+
container.setOnApplyWindowInsetsListener(insetsListener)
|
|
534
546
|
} else {
|
|
535
547
|
val bottomSheetWindowInsetListenerChain = requireBottomSheetWindowInsetsListenerChain()
|
|
536
548
|
bottomSheetWindowInsetListenerChain.addListener { _, windowInsets ->
|
|
@@ -540,11 +552,28 @@ class ScreenStackFragment :
|
|
|
540
552
|
windowInsets
|
|
541
553
|
}
|
|
542
554
|
}
|
|
555
|
+
|
|
556
|
+
val layoutChangeListener =
|
|
557
|
+
View.OnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
|
|
558
|
+
sheetTransitionCoordinator.onScreenContainerLayoutChanged(screen)
|
|
559
|
+
}
|
|
560
|
+
containerOnLayoutChangeListener = layoutChangeListener
|
|
561
|
+
container.addOnLayoutChangeListener(layoutChangeListener)
|
|
543
562
|
}
|
|
563
|
+
}
|
|
544
564
|
|
|
545
|
-
|
|
546
|
-
|
|
565
|
+
private fun detachInsetsAndLayoutListenersFromContainer() {
|
|
566
|
+
containerWithSheetListeners?.let { container ->
|
|
567
|
+
if (containerOnLayoutChangeListener != null) {
|
|
568
|
+
container.removeOnLayoutChangeListener(containerOnLayoutChangeListener)
|
|
569
|
+
}
|
|
570
|
+
if (containerOnApplyWindowInsetsListener != null) {
|
|
571
|
+
container.setOnApplyWindowInsetsListener(null)
|
|
572
|
+
}
|
|
547
573
|
}
|
|
574
|
+
containerWithSheetListeners = null
|
|
575
|
+
containerOnLayoutChangeListener = null
|
|
576
|
+
containerOnApplyWindowInsetsListener = null
|
|
548
577
|
}
|
|
549
578
|
|
|
550
579
|
private fun handleInsetsUpdateAndNotifyTransition(insetsCompat: WindowInsetsCompat) {
|
|
@@ -323,6 +323,11 @@ open class ScreenViewManager :
|
|
|
323
323
|
value: Boolean,
|
|
324
324
|
) = Unit
|
|
325
325
|
|
|
326
|
+
override fun setIosOrientationInheritanceFixEnabled(
|
|
327
|
+
view: Screen?,
|
|
328
|
+
value: Boolean,
|
|
329
|
+
) = Unit
|
|
330
|
+
|
|
326
331
|
// END mark: iOS-only
|
|
327
332
|
|
|
328
333
|
override fun setAndroidResetScreenShadowStateOnOrientationChangeEnabled(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.swmansion.rnscreens.modals.formsheet
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.coordinator
|
|
2
2
|
|
|
3
3
|
import android.os.Build
|
|
4
4
|
import android.widget.FrameLayout
|
|
@@ -6,6 +6,7 @@ import androidx.core.view.doOnNextLayout
|
|
|
6
6
|
import com.google.android.material.shape.CornerFamily
|
|
7
7
|
import com.google.android.material.shape.MaterialShapeDrawable
|
|
8
8
|
import com.google.android.material.shape.ShapeAppearanceModel
|
|
9
|
+
import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetConfig
|
|
9
10
|
import com.swmansion.rnscreens.utils.dpToPx
|
|
10
11
|
|
|
11
12
|
internal class FormSheetAppearanceCoordinator(
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
package com.swmansion.rnscreens.modals.formsheet
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.coordinator
|
|
2
2
|
|
|
3
3
|
import android.view.View
|
|
4
4
|
import android.widget.FrameLayout
|
|
5
5
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|
6
|
+
import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetDetents
|
|
6
7
|
|
|
7
8
|
internal class FormSheetBehaviorController(
|
|
8
9
|
private val sheetView: FrameLayout,
|
|
@@ -12,6 +13,7 @@ internal class FormSheetBehaviorController(
|
|
|
12
13
|
|
|
13
14
|
private var currentDetentsCount: Int = 1
|
|
14
15
|
private var lastEmittedDetentIndex: Int = FORM_SHEET_UNKNOWN_DETENT_INDEX
|
|
16
|
+
private var lastStableState: Int = BottomSheetBehavior.STATE_COLLAPSED
|
|
15
17
|
|
|
16
18
|
private val bottomSheetCallback =
|
|
17
19
|
object : BottomSheetBehavior.BottomSheetCallback() {
|
|
@@ -19,6 +21,8 @@ internal class FormSheetBehaviorController(
|
|
|
19
21
|
bottomSheet: View,
|
|
20
22
|
newState: Int,
|
|
21
23
|
) {
|
|
24
|
+
rememberStateIfStable(newState)
|
|
25
|
+
|
|
22
26
|
val index = mapStateToDetentIndex(newState)
|
|
23
27
|
if (index != FORM_SHEET_UNKNOWN_DETENT_INDEX && index != lastEmittedDetentIndex) {
|
|
24
28
|
lastEmittedDetentIndex = index
|
|
@@ -34,6 +38,7 @@ internal class FormSheetBehaviorController(
|
|
|
34
38
|
|
|
35
39
|
init {
|
|
36
40
|
behavior.isHideable = true
|
|
41
|
+
rememberStateIfStable(behavior.state)
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
internal fun setup() {
|
|
@@ -44,7 +49,29 @@ internal class FormSheetBehaviorController(
|
|
|
44
49
|
behavior.removeBottomSheetCallback(bottomSheetCallback)
|
|
45
50
|
}
|
|
46
51
|
|
|
52
|
+
internal fun restoreLastStableState() {
|
|
53
|
+
if (behavior.state != BottomSheetBehavior.STATE_HIDDEN) {
|
|
54
|
+
return
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
behavior.state = lastStableState
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private fun rememberStateIfStable(state: Int) {
|
|
61
|
+
val isVisibleRestingState =
|
|
62
|
+
state == BottomSheetBehavior.STATE_EXPANDED ||
|
|
63
|
+
state == BottomSheetBehavior.STATE_COLLAPSED ||
|
|
64
|
+
state == BottomSheetBehavior.STATE_HALF_EXPANDED
|
|
65
|
+
|
|
66
|
+
if (isVisibleRestingState) {
|
|
67
|
+
lastStableState = state
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
47
71
|
/**
|
|
72
|
+
* Expected to be called from the measure pass, before the sheet is measured (see
|
|
73
|
+
* `FormSheetAvailableHeightProvider`), so the metrics below are consumed by the ongoing traversal.
|
|
74
|
+
*
|
|
48
75
|
* @param detents - parsed detents configuration.
|
|
49
76
|
* @param sheetAvailableSpace - the full window height that detent fractions are measured against.
|
|
50
77
|
* Using the full height lets a BottomSheet with large detent configured to slide
|
|
@@ -53,7 +80,11 @@ internal class FormSheetBehaviorController(
|
|
|
53
80
|
* Used exclusively when the sheet is in `fitToContents` mode.
|
|
54
81
|
* @param nativeContainerPaddingBottom - the bottom system inset. In `fitToContents` mode, this is added to the
|
|
55
82
|
* BottomSheet's height to extend its background behind the system bars, while the inner content remains within
|
|
56
|
-
* the safe area.
|
|
83
|
+
* the safe area. For fractional detents it is subtracted from the collapsed peek height, which Material resolves
|
|
84
|
+
* above the inset, so the lowest detent lands at its fraction of [sheetAvailableSpace] like the other ones.
|
|
85
|
+
* @param keyboardLift - the part of the keyboard inset above [nativeContainerPaddingBottom]. Every resting position
|
|
86
|
+
* is extended by it so the sheet is pushed above the keyboard as far as [sheetAvailableSpace] allows,
|
|
87
|
+
* see [FormSheetDetents].
|
|
57
88
|
* @param initialDetentIndex - the index of the detent the sheet should snap to while opening.
|
|
58
89
|
* @param applyInitialDetent - whether the sheet should forcefully snap to the initial detent state.
|
|
59
90
|
* This should typically be `true` only when the sheet transitions from closed to open.
|
|
@@ -63,6 +94,7 @@ internal class FormSheetBehaviorController(
|
|
|
63
94
|
sheetAvailableSpace: Int,
|
|
64
95
|
contentHeightForFitToContents: Int = 0,
|
|
65
96
|
nativeContainerPaddingBottom: Int = 0,
|
|
97
|
+
keyboardLift: Int = 0,
|
|
66
98
|
initialDetentIndex: Int = 0,
|
|
67
99
|
applyInitialDetent: Boolean = false,
|
|
68
100
|
) {
|
|
@@ -73,22 +105,39 @@ internal class FormSheetBehaviorController(
|
|
|
73
105
|
}
|
|
74
106
|
|
|
75
107
|
if (detents.isFitToContents) {
|
|
76
|
-
configureFitToContents(
|
|
108
|
+
configureFitToContents(
|
|
109
|
+
detents,
|
|
110
|
+
sheetAvailableSpace,
|
|
111
|
+
contentHeightForFitToContents,
|
|
112
|
+
nativeContainerPaddingBottom,
|
|
113
|
+
keyboardLift,
|
|
114
|
+
)
|
|
77
115
|
} else {
|
|
78
116
|
when (detents.count) {
|
|
79
|
-
1 -> configureSingleDetent(detents, sheetAvailableSpace)
|
|
80
|
-
2 ->
|
|
81
|
-
|
|
117
|
+
1 -> configureSingleDetent(detents, sheetAvailableSpace, keyboardLift)
|
|
118
|
+
2 ->
|
|
119
|
+
configureTwoDetents(
|
|
120
|
+
detents,
|
|
121
|
+
sheetAvailableSpace,
|
|
122
|
+
nativeContainerPaddingBottom,
|
|
123
|
+
keyboardLift,
|
|
124
|
+
initialDetentIndex,
|
|
125
|
+
applyInitialDetent,
|
|
126
|
+
)
|
|
127
|
+
3 ->
|
|
128
|
+
configureThreeDetents(
|
|
129
|
+
detents,
|
|
130
|
+
sheetAvailableSpace,
|
|
131
|
+
nativeContainerPaddingBottom,
|
|
132
|
+
keyboardLift,
|
|
133
|
+
initialDetentIndex,
|
|
134
|
+
applyInitialDetent,
|
|
135
|
+
)
|
|
82
136
|
else -> throw IllegalStateException(
|
|
83
137
|
"[RNScreens] Unsupported detent count ${detents.count}.",
|
|
84
138
|
)
|
|
85
139
|
}
|
|
86
140
|
}
|
|
87
|
-
|
|
88
|
-
// Metrics were mutated on an already-measured sheet; force a fresh layout
|
|
89
|
-
// pass so the behavior re-settles to the new detent instead of keeping its
|
|
90
|
-
// stale height.
|
|
91
|
-
sheetView.requestLayout()
|
|
92
141
|
}
|
|
93
142
|
|
|
94
143
|
private fun configureFitToContents(
|
|
@@ -96,33 +145,37 @@ internal class FormSheetBehaviorController(
|
|
|
96
145
|
sheetAvailableSpace: Int,
|
|
97
146
|
contentHeight: Int,
|
|
98
147
|
bottomInset: Int,
|
|
148
|
+
keyboardLift: Int,
|
|
99
149
|
) = behavior.apply {
|
|
100
150
|
skipCollapsed = true
|
|
101
151
|
isFitToContents = true
|
|
102
|
-
maxHeight = detents.maxAllowedHeightForFitToContents(sheetAvailableSpace, contentHeight, bottomInset)
|
|
152
|
+
maxHeight = detents.maxAllowedHeightForFitToContents(sheetAvailableSpace, contentHeight, bottomInset, keyboardLift)
|
|
103
153
|
state = BottomSheetBehavior.STATE_EXPANDED
|
|
104
154
|
}
|
|
105
155
|
|
|
106
156
|
private fun configureSingleDetent(
|
|
107
157
|
detents: FormSheetDetents,
|
|
108
158
|
sheetAvailableSpace: Int,
|
|
159
|
+
keyboardLift: Int,
|
|
109
160
|
) = behavior.apply {
|
|
110
161
|
skipCollapsed = true
|
|
111
162
|
isFitToContents = true
|
|
112
|
-
maxHeight = detents.maxAllowedHeight(sheetAvailableSpace)
|
|
163
|
+
maxHeight = detents.maxAllowedHeight(sheetAvailableSpace, keyboardLift)
|
|
113
164
|
state = BottomSheetBehavior.STATE_EXPANDED
|
|
114
165
|
}
|
|
115
166
|
|
|
116
167
|
private fun configureTwoDetents(
|
|
117
168
|
detents: FormSheetDetents,
|
|
118
169
|
sheetAvailableSpace: Int,
|
|
170
|
+
bottomInset: Int,
|
|
171
|
+
keyboardLift: Int,
|
|
119
172
|
initialDetentIndex: Int,
|
|
120
173
|
applyInitialDetent: Boolean,
|
|
121
174
|
) = behavior.apply {
|
|
122
175
|
skipCollapsed = false
|
|
123
176
|
isFitToContents = true
|
|
124
|
-
peekHeight = detents.
|
|
125
|
-
maxHeight = detents.maxAllowedHeight(sheetAvailableSpace)
|
|
177
|
+
peekHeight = detents.peekHeight(sheetAvailableSpace, bottomInset, keyboardLift)
|
|
178
|
+
maxHeight = detents.maxAllowedHeight(sheetAvailableSpace, keyboardLift)
|
|
126
179
|
if (applyInitialDetent) {
|
|
127
180
|
state = resolveStateFromIndex(initialDetentIndex, detents.count)
|
|
128
181
|
}
|
|
@@ -131,15 +184,17 @@ internal class FormSheetBehaviorController(
|
|
|
131
184
|
private fun configureThreeDetents(
|
|
132
185
|
detents: FormSheetDetents,
|
|
133
186
|
sheetAvailableSpace: Int,
|
|
187
|
+
bottomInset: Int,
|
|
188
|
+
keyboardLift: Int,
|
|
134
189
|
initialDetentIndex: Int,
|
|
135
190
|
applyInitialDetent: Boolean,
|
|
136
191
|
) = behavior.apply {
|
|
137
192
|
skipCollapsed = false
|
|
138
193
|
isFitToContents = false
|
|
139
|
-
peekHeight = detents.
|
|
140
|
-
halfExpandedRatio = detents.halfExpandedRatio()
|
|
141
|
-
expandedOffset = detents.expandedOffsetFromTop(sheetAvailableSpace)
|
|
142
|
-
maxHeight = detents.maxAllowedHeight(sheetAvailableSpace)
|
|
194
|
+
peekHeight = detents.peekHeight(sheetAvailableSpace, bottomInset, keyboardLift)
|
|
195
|
+
halfExpandedRatio = detents.halfExpandedRatio(sheetAvailableSpace, keyboardLift)
|
|
196
|
+
expandedOffset = detents.expandedOffsetFromTop(sheetAvailableSpace, keyboardLift = keyboardLift)
|
|
197
|
+
maxHeight = detents.maxAllowedHeight(sheetAvailableSpace, keyboardLift)
|
|
143
198
|
if (applyInitialDetent) {
|
|
144
199
|
state = resolveStateFromIndex(initialDetentIndex, detents.count)
|
|
145
200
|
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.coordinator
|
|
2
|
+
|
|
3
|
+
import android.view.ViewGroup
|
|
4
|
+
import android.widget.FrameLayout
|
|
5
|
+
import androidx.core.view.ViewCompat
|
|
6
|
+
import androidx.core.view.WindowInsetsCompat
|
|
7
|
+
import com.swmansion.rnscreens.modals.formsheet.native.core.FormSheetAvailableHeightProvider
|
|
8
|
+
import com.swmansion.rnscreens.modals.formsheet.native.core.FormSheetContainer
|
|
9
|
+
import com.swmansion.rnscreens.modals.formsheet.native.core.FormSheetDialog
|
|
10
|
+
import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeDelegate
|
|
11
|
+
import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetDetents
|
|
12
|
+
|
|
13
|
+
internal class FormSheetDimensionsCoordinator(
|
|
14
|
+
private val dialog: FormSheetDialog,
|
|
15
|
+
private val container: FormSheetContainer,
|
|
16
|
+
private val behaviorController: FormSheetBehaviorController?,
|
|
17
|
+
) : FormSheetContentSizeChangeDelegate,
|
|
18
|
+
FormSheetAvailableHeightProvider.OnAvailableHeightMeasuredListener {
|
|
19
|
+
private var lastTopInset = 0
|
|
20
|
+
private var lastBottomInset = 0
|
|
21
|
+
private var lastImeInset = 0
|
|
22
|
+
private var currentDetents: FormSheetDetents? = null
|
|
23
|
+
private var currentInitialDetentIndex: Int = 0
|
|
24
|
+
private var shouldApplyInitialDetent: Boolean = false
|
|
25
|
+
|
|
26
|
+
private var currentContentHeight: Int = 0
|
|
27
|
+
|
|
28
|
+
// Height the metrics were last resolved against. Any other value reported by the measure pass
|
|
29
|
+
// means the window has been resized and metrics have to be recomputed.
|
|
30
|
+
private var resolvedAvailableSpace: Int = 0
|
|
31
|
+
private var isGeometryDirty: Boolean = false
|
|
32
|
+
|
|
33
|
+
internal fun setup() {
|
|
34
|
+
dialog.availableHeightProvider.availableHeightListener = this
|
|
35
|
+
setupWindowInsetsListener()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
private fun setupWindowInsetsListener() {
|
|
39
|
+
ViewCompat.setOnApplyWindowInsetsListener(container) { _, insets ->
|
|
40
|
+
val topInset = getTopInset(insets)
|
|
41
|
+
val bottomInset = getBottomInset(insets)
|
|
42
|
+
val imeInset = getImeInset(insets)
|
|
43
|
+
if (topInset != lastTopInset || bottomInset != lastBottomInset || imeInset != lastImeInset) {
|
|
44
|
+
lastTopInset = topInset
|
|
45
|
+
lastBottomInset = bottomInset
|
|
46
|
+
lastImeInset = imeInset
|
|
47
|
+
invalidateGeometry()
|
|
48
|
+
}
|
|
49
|
+
insets
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
override fun onContentHeightChanged(newHeight: Int) {
|
|
54
|
+
if (currentContentHeight != newHeight) {
|
|
55
|
+
currentContentHeight = newHeight
|
|
56
|
+
invalidateGeometry()
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
internal fun updateFormSheetDimensions(
|
|
61
|
+
detents: FormSheetDetents?,
|
|
62
|
+
initialDetentIndex: Int = 0,
|
|
63
|
+
applyInitialDetent: Boolean = false,
|
|
64
|
+
) {
|
|
65
|
+
currentDetents = detents
|
|
66
|
+
currentInitialDetentIndex = initialDetentIndex
|
|
67
|
+
shouldApplyInitialDetent = applyInitialDetent
|
|
68
|
+
invalidateGeometry()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Schedules a measure pass; the metrics are resolved from there. The provider is a sibling of the sheet
|
|
72
|
+
// subtree, not an ancestor, so it has to be asked for a re-measure explicitly. No-op while the dialog
|
|
73
|
+
// is not shown - the first traversal after `show()` measures everything anyway.
|
|
74
|
+
private fun invalidateGeometry() {
|
|
75
|
+
isGeometryDirty = true
|
|
76
|
+
dialog.availableHeightProvider.requestLayout()
|
|
77
|
+
container.requestLayout()
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
override fun onAvailableHeightMeasured(height: Int) {
|
|
81
|
+
if (!isGeometryDirty && height == resolvedAvailableSpace) {
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
isGeometryDirty = false
|
|
85
|
+
resolvedAvailableSpace = height
|
|
86
|
+
resolveGeometry(height)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* For Yoga we require the container height to be "stable" to avoid updating content size in flight.
|
|
91
|
+
* If left as MATCH_PARENT, BottomSheetDialog dynamically applies insets as padding when sheet overflows
|
|
92
|
+
* status bar or display cutout. This causes Yoga to recalculate the layout, resulting in UI flickering
|
|
93
|
+
* during the drag gesture. By calculating and enforcing a static height that explicitly subtracts
|
|
94
|
+
* the system insets, we completely bypass these redundant layout passes.
|
|
95
|
+
*
|
|
96
|
+
* Runs inside the measure pass of `FormSheetAvailableHeightProvider`, i.e. before Material's container, the sheet and
|
|
97
|
+
* our container are measured, so the values applied here are picked up by the very same traversal.
|
|
98
|
+
*/
|
|
99
|
+
private fun resolveGeometry(sheetAvailableSpace: Int) {
|
|
100
|
+
currentDetents?.let { detents ->
|
|
101
|
+
behaviorController?.updateSheetBehavior(
|
|
102
|
+
detents = detents,
|
|
103
|
+
sheetAvailableSpace = sheetAvailableSpace,
|
|
104
|
+
contentHeightForFitToContents = currentContentHeight,
|
|
105
|
+
nativeContainerPaddingBottom = lastBottomInset,
|
|
106
|
+
keyboardLift = keyboardLift,
|
|
107
|
+
initialDetentIndex = currentInitialDetentIndex,
|
|
108
|
+
applyInitialDetent = shouldApplyInitialDetent,
|
|
109
|
+
)
|
|
110
|
+
shouldApplyInitialDetent = false
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
val sheetContainerHeight =
|
|
114
|
+
currentDetents?.sheetContainerHeight(
|
|
115
|
+
sheetAvailableSpace,
|
|
116
|
+
lastTopInset,
|
|
117
|
+
lastBottomInset,
|
|
118
|
+
currentContentHeight,
|
|
119
|
+
keyboardLift,
|
|
120
|
+
) ?: (sheetAvailableSpace - lastTopInset - lastBottomInset - keyboardLift).coerceAtLeast(0)
|
|
121
|
+
|
|
122
|
+
val layoutParams =
|
|
123
|
+
container.layoutParams
|
|
124
|
+
?: FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, sheetContainerHeight)
|
|
125
|
+
|
|
126
|
+
if (layoutParams.width != ViewGroup.LayoutParams.MATCH_PARENT || layoutParams.height != sheetContainerHeight) {
|
|
127
|
+
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT
|
|
128
|
+
layoutParams.height = sheetContainerHeight
|
|
129
|
+
container.layoutParams = layoutParams
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* The part of the keyboard inset that sticks out above the bottom system inset. Material pads the sheet by
|
|
135
|
+
* the larger of the two, so this is exactly how much the sheet has to be extended to keep its detent-sized
|
|
136
|
+
* part above the keyboard.
|
|
137
|
+
*/
|
|
138
|
+
private val keyboardLift: Int
|
|
139
|
+
get() = (lastImeInset - lastBottomInset).coerceAtLeast(0)
|
|
140
|
+
|
|
141
|
+
private fun getImeInset(insetsCompat: WindowInsetsCompat): Int = insetsCompat.getInsets(WindowInsetsCompat.Type.ime()).bottom
|
|
142
|
+
|
|
143
|
+
private fun getTopInset(insetsCompat: WindowInsetsCompat): Int =
|
|
144
|
+
insetsCompat
|
|
145
|
+
.getInsets(
|
|
146
|
+
WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout(),
|
|
147
|
+
).top
|
|
148
|
+
|
|
149
|
+
private fun getBottomInset(insetsCompat: WindowInsetsCompat): Int =
|
|
150
|
+
insetsCompat
|
|
151
|
+
.getInsets(
|
|
152
|
+
WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout(),
|
|
153
|
+
).bottom
|
|
154
|
+
|
|
155
|
+
internal fun destroy() {
|
|
156
|
+
dialog.availableHeightProvider.availableHeightListener = null
|
|
157
|
+
ViewCompat.setOnApplyWindowInsetsListener(container, null)
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.coordinator
|
|
2
|
+
|
|
3
|
+
import android.widget.FrameLayout
|
|
4
|
+
import androidx.core.view.ViewCompat
|
|
5
|
+
import androidx.core.view.WindowInsetsAnimationCompat
|
|
6
|
+
import androidx.core.view.WindowInsetsCompat
|
|
7
|
+
import androidx.core.view.doOnLayout
|
|
8
|
+
|
|
9
|
+
internal class FormSheetKeyboardCoordinator(
|
|
10
|
+
private val bottomSheetView: FrameLayout,
|
|
11
|
+
) {
|
|
12
|
+
/**
|
|
13
|
+
* Whether the sheet should track the keyboard animation. Kept `false` while an enter / exit
|
|
14
|
+
* transition owns `translationY`. Tracking the keyboard (`true`) should be allowed only when
|
|
15
|
+
* the sheet is in PRESENTED state.
|
|
16
|
+
*/
|
|
17
|
+
internal var isTrackingEnabled: Boolean = false
|
|
18
|
+
|
|
19
|
+
private val insetsAnimationCallback = KeyboardInsetsAnimationCallback()
|
|
20
|
+
|
|
21
|
+
internal fun setup() {
|
|
22
|
+
// BottomSheetBehavior registers an internal `WindowInsetsAnimationCallback` on the
|
|
23
|
+
// sheet view during its first `onLayoutChild`. That callback drives `translationY` to track
|
|
24
|
+
// animated inset changes, what interferes with our slide-in custom animation.
|
|
25
|
+
//
|
|
26
|
+
// We manage insets ourselves by setting a fixed height for FormSheetContainer, so we can
|
|
27
|
+
// clear the Material's callback to remove the conflict entirely.
|
|
28
|
+
//
|
|
29
|
+
// This method must run after the first layout pass.
|
|
30
|
+
bottomSheetView.doOnLayout {
|
|
31
|
+
ViewCompat.setWindowInsetsAnimationCallback(it, insetsAnimationCallback)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
internal fun destroy() {
|
|
36
|
+
ViewCompat.setWindowInsetsAnimationCallback(bottomSheetView, null)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private inner class KeyboardInsetsAnimationCallback : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_STOP) {
|
|
40
|
+
private var startTop = 0
|
|
41
|
+
private var startTranslationY = 0f
|
|
42
|
+
|
|
43
|
+
// Decided once per keyboard animation, in `onPrepare`. Tracking can't be picked up mid-animation
|
|
44
|
+
// because of no start position to translate from.
|
|
45
|
+
private var isTracking = false
|
|
46
|
+
|
|
47
|
+
private val isActive: Boolean
|
|
48
|
+
get() = isTracking && isTrackingEnabled
|
|
49
|
+
|
|
50
|
+
override fun onPrepare(animation: WindowInsetsAnimationCompat) {
|
|
51
|
+
if (!animation.isKeyboardAnimation() || !isTrackingEnabled) {
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Saving sheet's position before applying keyboard insets.
|
|
56
|
+
startTop = bottomSheetView.top
|
|
57
|
+
isTracking = true
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
override fun onStart(
|
|
61
|
+
animation: WindowInsetsAnimationCompat,
|
|
62
|
+
bounds: WindowInsetsAnimationCompat.BoundsCompat,
|
|
63
|
+
): WindowInsetsAnimationCompat.BoundsCompat {
|
|
64
|
+
if (!animation.isKeyboardAnimation() || !isActive) {
|
|
65
|
+
return bounds
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// The end sheet position is known - move the sheet and let the animation progress
|
|
69
|
+
// bring it to the new position.
|
|
70
|
+
startTranslationY = (startTop - bottomSheetView.top).toFloat()
|
|
71
|
+
bottomSheetView.translationY = startTranslationY
|
|
72
|
+
return bounds
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
override fun onProgress(
|
|
76
|
+
insets: WindowInsetsCompat,
|
|
77
|
+
runningAnimations: List<WindowInsetsAnimationCompat>,
|
|
78
|
+
): WindowInsetsCompat {
|
|
79
|
+
if (!isActive) {
|
|
80
|
+
return insets
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
val keyboardAnimation = runningAnimations.firstOrNull { it.isKeyboardAnimation() } ?: return insets
|
|
84
|
+
bottomSheetView.translationY = startTranslationY * (1f - keyboardAnimation.interpolatedFraction)
|
|
85
|
+
return insets
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
override fun onEnd(animation: WindowInsetsAnimationCompat) {
|
|
89
|
+
if (!animation.isKeyboardAnimation()) {
|
|
90
|
+
return
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (isActive) {
|
|
94
|
+
bottomSheetView.translationY = 0f
|
|
95
|
+
}
|
|
96
|
+
isTracking = false
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private fun WindowInsetsAnimationCompat.isKeyboardAnimation(): Boolean = typeMask and WindowInsetsCompat.Type.ime() != 0
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.coordinator
|
|
2
|
+
|
|
3
|
+
import androidx.activity.OnBackPressedCallback
|
|
4
|
+
import com.swmansion.rnscreens.modals.formsheet.native.core.FormSheetDialog
|
|
5
|
+
|
|
6
|
+
internal class FormSheetNativeDismissCoordinator(
|
|
7
|
+
private val dialog: FormSheetDialog,
|
|
8
|
+
private val behaviorController: FormSheetBehaviorController?,
|
|
9
|
+
private val onDismissAllowed: () -> Unit,
|
|
10
|
+
private val onDismissPrevented: () -> Unit,
|
|
11
|
+
) : FormSheetDialog.CancelRequestInterceptor {
|
|
12
|
+
private val preventNativeDismissBackPressCallback =
|
|
13
|
+
object : OnBackPressedCallback(false) {
|
|
14
|
+
override fun handleOnBackPressed() {
|
|
15
|
+
handleCancelRequest()
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
internal var shouldPreventDismiss: Boolean = false
|
|
20
|
+
set(value) {
|
|
21
|
+
field = value
|
|
22
|
+
preventNativeDismissBackPressCallback.isEnabled = value
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
internal fun setup() {
|
|
26
|
+
dialog.cancelRequestInterceptor = this
|
|
27
|
+
dialog.onBackPressedDispatcher.addCallback(preventNativeDismissBackPressCallback)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
internal fun destroy() {
|
|
31
|
+
dialog.cancelRequestInterceptor = null
|
|
32
|
+
preventNativeDismissBackPressCallback.remove()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
override fun handleCancelRequest() {
|
|
36
|
+
if (shouldPreventDismiss) {
|
|
37
|
+
onDismissPrevented()
|
|
38
|
+
behaviorController?.restoreLastStableState()
|
|
39
|
+
return
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
onDismissAllowed()
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.core
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.View
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* View installed as the first child of the window's `android.R.id.content`, as a sibling
|
|
8
|
+
* of Material's dialog `container` - nothing in Material's hierarchy is moved.
|
|
9
|
+
*
|
|
10
|
+
* Every metric we hand to `BottomSheetBehavior` and the height of [FormSheetContainer] is derived from
|
|
11
|
+
* the height the sheet is measured against. The measure pass is the only point where that height is known
|
|
12
|
+
* *before* the sheet gets measured. `FrameLayout` measures its children in index order, so the provider reports
|
|
13
|
+
* the height right before Material's `container`, the coordinator and the sheet are measured in the same
|
|
14
|
+
* traversal, keeping those values in sync with window resizes, e.g. orientation change.
|
|
15
|
+
*/
|
|
16
|
+
internal class FormSheetAvailableHeightProvider(
|
|
17
|
+
context: Context,
|
|
18
|
+
) : View(context) {
|
|
19
|
+
internal fun interface OnAvailableHeightMeasuredListener {
|
|
20
|
+
/**
|
|
21
|
+
* Invoked at the beginning of every measure pass with the height the sheet is about
|
|
22
|
+
* to be measured against.
|
|
23
|
+
*/
|
|
24
|
+
fun onAvailableHeightMeasured(height: Int)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
internal var availableHeightListener: OnAvailableHeightMeasuredListener? = null
|
|
28
|
+
|
|
29
|
+
init {
|
|
30
|
+
visibility = INVISIBLE
|
|
31
|
+
importantForAccessibility = IMPORTANT_FOR_ACCESSIBILITY_NO
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override fun onMeasure(
|
|
35
|
+
widthMeasureSpec: Int,
|
|
36
|
+
heightMeasureSpec: Int,
|
|
37
|
+
) {
|
|
38
|
+
val height = MeasureSpec.getSize(heightMeasureSpec)
|
|
39
|
+
if (MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.UNSPECIFIED && height > 0) {
|
|
40
|
+
availableHeightListener?.onAvailableHeightMeasured(height)
|
|
41
|
+
}
|
|
42
|
+
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
|
|
43
|
+
}
|
|
44
|
+
}
|