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
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.core
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.os.Bundle
|
|
5
|
+
import android.util.Log
|
|
6
|
+
import android.view.View
|
|
7
|
+
import android.view.ViewGroup
|
|
8
|
+
import android.view.Window
|
|
9
|
+
import android.view.WindowManager
|
|
10
|
+
import android.widget.FrameLayout
|
|
11
|
+
import androidx.core.view.WindowCompat
|
|
12
|
+
import com.google.android.material.bottomsheet.BottomSheetDialog
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* A custom BottomSheetDialog override used to render the FormSheet native component.
|
|
16
|
+
*
|
|
17
|
+
* We enforce edge-to-edge rendering, bypassing standard Material checks.
|
|
18
|
+
* This is required because our custom dimming logic needs the Dialog to span
|
|
19
|
+
* the entire screen. The FormSheetContainer is sized manually against the system insets.
|
|
20
|
+
*/
|
|
21
|
+
internal class FormSheetDialog(
|
|
22
|
+
context: Context,
|
|
23
|
+
) : BottomSheetDialog(context) {
|
|
24
|
+
internal fun interface CancelRequestInterceptor {
|
|
25
|
+
/**
|
|
26
|
+
* Invoked in place of the dialog's default cancellation whenever an interceptor is attached.
|
|
27
|
+
*
|
|
28
|
+
* The interceptor fully owns the outcome - either for native dismissal prevention or for driving
|
|
29
|
+
* a custom animated dismissal when allowed. Either way, the dialog skips
|
|
30
|
+
* [BottomSheetDialog.cancel], which would tear the window down synchronously.
|
|
31
|
+
*/
|
|
32
|
+
fun handleCancelRequest()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
internal var cancelRequestInterceptor: CancelRequestInterceptor? = null
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Installed next to Material's content once the dialog is created. Reports the height the sheet
|
|
39
|
+
* is measured against so the sheet metrics can be resolved before the sheet itself is measured.
|
|
40
|
+
*/
|
|
41
|
+
internal val availableHeightProvider = FormSheetAvailableHeightProvider(context)
|
|
42
|
+
|
|
43
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
44
|
+
super.onCreate(savedInstanceState)
|
|
45
|
+
|
|
46
|
+
hideNativeDimmingView(window)
|
|
47
|
+
disableNativeWindowAnimation(window)
|
|
48
|
+
|
|
49
|
+
setupBottomSheetHeight()
|
|
50
|
+
installAvailableHeightProvider()
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
override fun onAttachedToWindow() {
|
|
54
|
+
super.onAttachedToWindow()
|
|
55
|
+
|
|
56
|
+
forceEdgeToEdge()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
override fun cancel() {
|
|
60
|
+
val interceptor = cancelRequestInterceptor
|
|
61
|
+
if (interceptor == null) {
|
|
62
|
+
super.cancel()
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
interceptor.handleCancelRequest()
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Material's [BottomSheetDialog] only draws edge-to-edge when its theme opts in via the
|
|
71
|
+
* `enableEdgeToEdge` attribute AND the navigation bar is translucent (see
|
|
72
|
+
* `BottomSheetDialog#onAttachedToWindow`).
|
|
73
|
+
*
|
|
74
|
+
* We force edge-to-edge on every API level so the window content always spans the whole
|
|
75
|
+
* screen.
|
|
76
|
+
*/
|
|
77
|
+
private fun forceEdgeToEdge() {
|
|
78
|
+
val window = window ?: return
|
|
79
|
+
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
80
|
+
findViewById<View>(com.google.android.material.R.id.container)?.fitsSystemWindows = false
|
|
81
|
+
findViewById<View>(com.google.android.material.R.id.coordinator)?.fitsSystemWindows = false
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private fun hideNativeDimmingView(window: Window?) = window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
|
|
85
|
+
|
|
86
|
+
private fun disableNativeWindowAnimation(window: Window?) = window?.setWindowAnimations(0)
|
|
87
|
+
|
|
88
|
+
private fun setupBottomSheetHeight() {
|
|
89
|
+
val bottomSheetView = findViewById<FrameLayout>(com.google.android.material.R.id.design_bottom_sheet)
|
|
90
|
+
bottomSheetView?.layoutParams?.height = ViewGroup.LayoutParams.MATCH_PARENT
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private fun installAvailableHeightProvider() {
|
|
94
|
+
if (availableHeightProvider.parent != null) {
|
|
95
|
+
return
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
val contentParent = findViewById<ViewGroup>(android.R.id.content)
|
|
99
|
+
if (contentParent == null) {
|
|
100
|
+
Log.e(TAG, "[RNScreens] Window content view not found; the sheet dimensions won't be resolved.")
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// FrameLayout measures its children in order, so the provider reports the height before Material's container
|
|
105
|
+
contentParent.addView(
|
|
106
|
+
availableHeightProvider,
|
|
107
|
+
0,
|
|
108
|
+
FrameLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT),
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
companion object {
|
|
113
|
+
private const val TAG = "FormSheetDialog"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.core
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.ContextThemeWrapper
|
|
5
|
+
import android.view.View
|
|
6
|
+
import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetContentSizeChangeDelegate
|
|
7
|
+
import com.swmansion.rnscreens.modals.formsheet.native.interfaces.FormSheetDialogEventEmitter
|
|
8
|
+
import com.swmansion.rnscreens.modals.formsheet.native.model.FormSheetConfig
|
|
9
|
+
import com.swmansion.rnscreens.modals.formsheet.native.presentation.FormSheetDimmingManager
|
|
10
|
+
import com.swmansion.rnscreens.modals.formsheet.native.presentation.FormSheetPresentation
|
|
11
|
+
import com.swmansion.rnscreens.modals.formsheet.native.presentation.FormSheetPresentationManager
|
|
12
|
+
import kotlin.properties.Delegates
|
|
13
|
+
|
|
14
|
+
class FormSheetDialogManager(
|
|
15
|
+
context: Context,
|
|
16
|
+
private val contentView: View,
|
|
17
|
+
) {
|
|
18
|
+
private var formSheetConfig = FormSheetConfig()
|
|
19
|
+
|
|
20
|
+
private val themedContext =
|
|
21
|
+
ContextThemeWrapper(
|
|
22
|
+
context,
|
|
23
|
+
com.google.android.material.R.style.Theme_Material3_DayNight_NoActionBar,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
// Eagerly create the container so it's always ready for the provided content view
|
|
27
|
+
private val container = FormSheetContainer(themedContext, contentView)
|
|
28
|
+
|
|
29
|
+
// The React content only reports height changes, so a new presentation is seeded with the
|
|
30
|
+
// last known value.
|
|
31
|
+
private var lastContentHeight = 0
|
|
32
|
+
|
|
33
|
+
private val presentationCallbacks =
|
|
34
|
+
object : FormSheetPresentation.Callbacks {
|
|
35
|
+
override fun onDetentChanged(index: Int) {
|
|
36
|
+
eventEmitter?.emitOnDetentChanged(index)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override fun onNativeDismissAllowed() {
|
|
40
|
+
presentationManager.handleNativeDismiss()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
override fun onNativeDismissPrevented() {
|
|
44
|
+
eventEmitter?.emitOnNativeDismissPreventedEvent()
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private val dimmingManager = FormSheetDimmingManager(context)
|
|
49
|
+
|
|
50
|
+
private val presentationManager =
|
|
51
|
+
FormSheetPresentationManager(
|
|
52
|
+
presentationFactory = ::createPresentation,
|
|
53
|
+
dimmingManager = dimmingManager,
|
|
54
|
+
onNativeDismiss = { eventEmitter?.emitOnNativeDismissEvent() },
|
|
55
|
+
onDismiss = { eventEmitter?.emitOnDismissEvent() },
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
internal var eventEmitter: FormSheetDialogEventEmitter? by Delegates.observable(null) { _, _, newValue ->
|
|
59
|
+
presentationManager.appearanceEventEmitter = newValue
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
internal val contentSizeChangeDelegate: FormSheetContentSizeChangeDelegate =
|
|
63
|
+
object : FormSheetContentSizeChangeDelegate {
|
|
64
|
+
override fun onContentHeightChanged(newHeight: Int) {
|
|
65
|
+
lastContentHeight = newHeight
|
|
66
|
+
presentationManager.currentPresentation?.onContentHeightChanged(newHeight)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private fun createPresentation(): FormSheetPresentation =
|
|
71
|
+
FormSheetPresentation(themedContext, container, presentationCallbacks).also {
|
|
72
|
+
it.applyInitialConfig(formSheetConfig, lastContentHeight)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
internal fun applyConfig(newConfig: FormSheetConfig) {
|
|
76
|
+
val oldConfig = formSheetConfig
|
|
77
|
+
formSheetConfig = newConfig
|
|
78
|
+
|
|
79
|
+
presentationManager.currentPresentation?.applyConfigUpdate(oldConfig, newConfig)
|
|
80
|
+
|
|
81
|
+
if (oldConfig.isOpen != newConfig.isOpen) {
|
|
82
|
+
presentationManager.requestProgrammaticStateUpdate(newConfig.isOpen)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
internal fun destroy() {
|
|
87
|
+
presentationManager.destroy()
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
package com.swmansion.rnscreens.modals.formsheet
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.interfaces
|
|
2
2
|
|
|
3
3
|
import com.swmansion.rnscreens.common.event.ViewAppearanceEventEmitter
|
|
4
4
|
|
|
5
5
|
internal interface FormSheetDialogEventEmitter : ViewAppearanceEventEmitter {
|
|
6
|
+
fun emitOnDismissEvent()
|
|
7
|
+
|
|
6
8
|
fun emitOnNativeDismissEvent()
|
|
7
9
|
|
|
10
|
+
fun emitOnNativeDismissPreventedEvent()
|
|
11
|
+
|
|
8
12
|
fun emitOnDetentChanged(index: Int)
|
|
9
13
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.swmansion.rnscreens.modals.formsheet
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.model
|
|
2
2
|
|
|
3
3
|
internal data class FormSheetConfig(
|
|
4
4
|
val isOpen: Boolean = false,
|
|
@@ -6,8 +6,12 @@ internal data class FormSheetConfig(
|
|
|
6
6
|
val prefersGrabberVisible: Boolean = false,
|
|
7
7
|
val initialDetentIndex: Int = 0,
|
|
8
8
|
val preferredCornerRadius: Float = SYSTEM_DEFAULT_CORNER_RADIUS,
|
|
9
|
+
val preventNativeDismiss: Boolean = false,
|
|
9
10
|
val nativeContainerBackgroundColor: Int? = null,
|
|
10
11
|
) {
|
|
12
|
+
val shouldPreventNativeDismiss: Boolean
|
|
13
|
+
get() = preventNativeDismiss && isOpen
|
|
14
|
+
|
|
11
15
|
companion object {
|
|
12
16
|
const val SYSTEM_DEFAULT_CORNER_RADIUS = -1f
|
|
13
17
|
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.model
|
|
2
|
+
|
|
3
|
+
import kotlin.math.roundToInt
|
|
4
|
+
|
|
5
|
+
internal class FormSheetDetents(
|
|
6
|
+
rawDetents: List<Double>,
|
|
7
|
+
) {
|
|
8
|
+
private val detents: List<Double> = rawDetents.toList()
|
|
9
|
+
|
|
10
|
+
init {
|
|
11
|
+
require(detents.isNotEmpty()) { "[RNScreens] At least one detent must be provided." }
|
|
12
|
+
require(detents.size <= MAX_DETENTS) { "[RNScreens] Maximum of $MAX_DETENTS detents supported, got ${detents.size}." }
|
|
13
|
+
|
|
14
|
+
// Valid fitToContents configuration is a single detent with value -1.0.
|
|
15
|
+
// For any other configuration, we should validate provided detents array.
|
|
16
|
+
if (!isFitToContents) {
|
|
17
|
+
detents.forEach {
|
|
18
|
+
require(it in 0.0..1.0) {
|
|
19
|
+
"[RNScreens] Detent values must be within 0.0 and 1.0, got $it."
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
require(detents == detents.distinct().sorted()) {
|
|
24
|
+
"[RNScreens] Detents must be sorted in strictly ascending order."
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
internal val isFitToContents: Boolean
|
|
30
|
+
get() = detents.size == 1 && detents[0] == FIT_TO_CONTENTS_DETENT_VALUE
|
|
31
|
+
|
|
32
|
+
internal val count: Int get() = detents.size
|
|
33
|
+
|
|
34
|
+
private fun heightFractionAt(index: Int): Double = detents[index]
|
|
35
|
+
|
|
36
|
+
// Height of the sheet resting at the given detent, measured down to the bottom edge of the container.
|
|
37
|
+
private fun heightAt(
|
|
38
|
+
index: Int,
|
|
39
|
+
containerHeight: Int,
|
|
40
|
+
keyboardLift: Int,
|
|
41
|
+
): Int = ((heightFractionAt(index) * containerHeight).roundToInt() + keyboardLift).coerceAtMost(containerHeight)
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Height handed to Material as `peekHeight`. Material treats the peek height as the content height above
|
|
45
|
+
* the bottom inset and adds that inset back (`BottomSheetBehavior.calculatePeekHeight`), while every
|
|
46
|
+
* other metric (`maxHeight`, `halfExpandedRatio`) describes the sheet down to the screen edge. The inset is
|
|
47
|
+
* subtracted here so the lowest detent is resolved against the same reference as the other ones.
|
|
48
|
+
* Material's inset covers the keyboard as well, so the lift is subtracted along with the system inset.
|
|
49
|
+
*/
|
|
50
|
+
internal fun peekHeight(
|
|
51
|
+
containerHeight: Int,
|
|
52
|
+
bottomInset: Int,
|
|
53
|
+
keyboardLift: Int = 0,
|
|
54
|
+
): Int = (heightAt(0, containerHeight, keyboardLift) - bottomInset - keyboardLift).coerceAtLeast(0)
|
|
55
|
+
|
|
56
|
+
internal fun maxAllowedHeight(
|
|
57
|
+
containerHeight: Int,
|
|
58
|
+
keyboardLift: Int = 0,
|
|
59
|
+
): Int = heightAt(count - 1, containerHeight, keyboardLift)
|
|
60
|
+
|
|
61
|
+
internal fun maxAllowedHeightForFitToContents(
|
|
62
|
+
containerHeight: Int,
|
|
63
|
+
contentHeight: Int,
|
|
64
|
+
bottomInset: Int,
|
|
65
|
+
keyboardLift: Int = 0,
|
|
66
|
+
): Int {
|
|
67
|
+
/*
|
|
68
|
+
* We add the `bottomInset` and the `keyboardLift` to the `contentHeight` so that the Material BottomSheet
|
|
69
|
+
* is laid out behind the system navigation bar or the keyboard. The sheet's container covers the insets,
|
|
70
|
+
* while the RN content is strictly constrained to `contentHeight`.
|
|
71
|
+
*/
|
|
72
|
+
if (contentHeight <= 0) {
|
|
73
|
+
// Avoid collapsing the sheet before the React content has been laid out and measured.
|
|
74
|
+
return containerHeight
|
|
75
|
+
}
|
|
76
|
+
return (contentHeight + bottomInset + keyboardLift).coerceAtMost(containerHeight)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Ratio of the middle detent's sheet height to the container height, handed to Material as `halfExpandedRatio`.
|
|
81
|
+
* Material resolves the half-expanded position from it as `(int) (parentHeight * (1 - ratio))`.
|
|
82
|
+
*
|
|
83
|
+
* The keyboard lift can push both the middle and the largest detent to the top of the container. Material needs
|
|
84
|
+
* the half-expanded position strictly below the expanded one so the middle detent is kept at least
|
|
85
|
+
* [MIDDLE_DETENT_MIN_GAP] px shorter than the largest one.
|
|
86
|
+
*/
|
|
87
|
+
internal fun halfExpandedRatio(
|
|
88
|
+
containerHeight: Int,
|
|
89
|
+
keyboardLift: Int = 0,
|
|
90
|
+
): Float {
|
|
91
|
+
check(count == MAX_DETENTS) { "[RNScreens] Exactly $MAX_DETENTS detents are required for halfExpandedRatio." }
|
|
92
|
+
val middleDetentHeight =
|
|
93
|
+
heightAt(1, containerHeight, keyboardLift)
|
|
94
|
+
.coerceAtMost(maxAllowedHeight(containerHeight, keyboardLift) - MIDDLE_DETENT_MIN_GAP)
|
|
95
|
+
.coerceAtLeast(1)
|
|
96
|
+
return middleDetentHeight.toFloat() / containerHeight
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
internal fun expandedOffsetFromTop(
|
|
100
|
+
containerHeight: Int,
|
|
101
|
+
topInset: Int = 0,
|
|
102
|
+
keyboardLift: Int = 0,
|
|
103
|
+
): Int {
|
|
104
|
+
check(count == MAX_DETENTS) { "[RNScreens] Exactly $MAX_DETENTS detents are required for expandedOffsetFromTop." }
|
|
105
|
+
return largestDetentTopOffset(containerHeight, keyboardLift) + topInset
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Distance from the top of the window to the top of the largest detent's surface.
|
|
109
|
+
private fun largestDetentTopOffset(
|
|
110
|
+
containerHeight: Int,
|
|
111
|
+
keyboardLift: Int,
|
|
112
|
+
): Int = containerHeight - maxAllowedHeight(containerHeight, keyboardLift)
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Material's BottomSheetDialog dynamically applies padding when its content overlaps
|
|
116
|
+
* system insets. To prevent recalculating the size, we pre-calculate a static height
|
|
117
|
+
* inside safe area bounds.
|
|
118
|
+
*/
|
|
119
|
+
internal fun sheetContainerHeight(
|
|
120
|
+
containerHeight: Int,
|
|
121
|
+
topInset: Int,
|
|
122
|
+
bottomInset: Int,
|
|
123
|
+
contentHeight: Int = 0,
|
|
124
|
+
keyboardLift: Int = 0,
|
|
125
|
+
): Int {
|
|
126
|
+
val bottomPadding = bottomInset + keyboardLift
|
|
127
|
+
|
|
128
|
+
if (isFitToContents) {
|
|
129
|
+
// Until we have a measured content height, fall back to a safe-area height so Yoga can lay out.
|
|
130
|
+
if (contentHeight <= 0) {
|
|
131
|
+
return (containerHeight - topInset - bottomPadding).coerceAtLeast(0)
|
|
132
|
+
}
|
|
133
|
+
// Content taller than the safe area is aligned with it.
|
|
134
|
+
return contentHeight.coerceAtMost((containerHeight - topInset - bottomPadding).coerceAtLeast(0))
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Bottom padding is always fully subtracted because the sheet is in its dedicated window and it's
|
|
138
|
+
// anchored to the bottom.
|
|
139
|
+
// Top inset is subtracted only by the amount the sheet actually overlaps it.
|
|
140
|
+
val topOverlap = (topInset - largestDetentTopOffset(containerHeight, keyboardLift)).coerceAtLeast(0)
|
|
141
|
+
return (maxAllowedHeight(containerHeight, keyboardLift) - topOverlap - bottomPadding).coerceAtLeast(0)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
companion object {
|
|
145
|
+
const val MAX_DETENTS = 3
|
|
146
|
+
const val FIT_TO_CONTENTS_DETENT_VALUE = -1.0
|
|
147
|
+
|
|
148
|
+
// Material resolves the half-expanded position in float precision and the truncation to int can eat 1 px
|
|
149
|
+
// which would put the middle detent back on the expanded position.
|
|
150
|
+
private const val MIDDLE_DETENT_MIN_GAP = 2
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
package com.swmansion.rnscreens.modals.formsheet
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.presentation
|
|
2
2
|
|
|
3
3
|
import android.animation.Animator
|
|
4
4
|
import android.animation.AnimatorSet
|
|
5
5
|
import android.animation.ValueAnimator
|
|
6
6
|
import android.view.View
|
|
7
|
-
import androidx.core.animation.doOnStart
|
|
8
|
-
import com.swmansion.rnscreens.modals.dimmingview.DimmingViewManager
|
|
9
7
|
|
|
10
8
|
internal class FormSheetAnimatorFactory(
|
|
11
|
-
private val dimmingManager:
|
|
9
|
+
private val dimmingManager: FormSheetDimmingManager,
|
|
12
10
|
) {
|
|
13
11
|
// TODO: @t0maboro - consider exposing as a prop
|
|
14
12
|
val animationDuration = 250L
|
|
@@ -18,7 +16,7 @@ internal class FormSheetAnimatorFactory(
|
|
|
18
16
|
isInterrupting: Boolean = false,
|
|
19
17
|
): Animator {
|
|
20
18
|
val startY = if (isInterrupting) view.translationY else view.height.toFloat()
|
|
21
|
-
val startAlpha = if (isInterrupting) dimmingManager.
|
|
19
|
+
val startAlpha = if (isInterrupting) dimmingManager.dimmingAlpha else 0f
|
|
22
20
|
|
|
23
21
|
val slideAnimator =
|
|
24
22
|
ValueAnimator.ofFloat(startY, 0f).apply {
|
|
@@ -30,14 +28,13 @@ internal class FormSheetAnimatorFactory(
|
|
|
30
28
|
val alphaAnimator =
|
|
31
29
|
ValueAnimator.ofFloat(startAlpha, dimmingManager.maxAlpha).apply {
|
|
32
30
|
addUpdateListener { animation ->
|
|
33
|
-
dimmingManager.
|
|
31
|
+
dimmingManager.dimmingAlpha = animation.animatedValue as Float
|
|
34
32
|
}
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
return AnimatorSet().apply {
|
|
38
36
|
playTogether(slideAnimator, alphaAnimator)
|
|
39
37
|
duration = animationDuration
|
|
40
|
-
doOnStart { view.translationY = startY }
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
40
|
|
|
@@ -45,8 +42,10 @@ internal class FormSheetAnimatorFactory(
|
|
|
45
42
|
view: View,
|
|
46
43
|
isInterrupting: Boolean = false,
|
|
47
44
|
): Animator {
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
// Always leave from the current translation: besides an interrupted enter animation, the sheet
|
|
46
|
+
// may be mid-way through tracking the keyboard animation when the dismissal starts.
|
|
47
|
+
val startY = view.translationY
|
|
48
|
+
val startAlpha = if (isInterrupting) dimmingManager.dimmingAlpha else dimmingManager.maxAlpha
|
|
50
49
|
|
|
51
50
|
val slideAnimator =
|
|
52
51
|
ValueAnimator.ofFloat(startY, view.height.toFloat()).apply {
|
|
@@ -58,7 +57,7 @@ internal class FormSheetAnimatorFactory(
|
|
|
58
57
|
val alphaAnimator =
|
|
59
58
|
ValueAnimator.ofFloat(startAlpha, 0f).apply {
|
|
60
59
|
addUpdateListener { animation ->
|
|
61
|
-
dimmingManager.
|
|
60
|
+
dimmingManager.dimmingAlpha = animation.animatedValue as Float
|
|
62
61
|
}
|
|
63
62
|
}
|
|
64
63
|
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.presentation
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.content.Context
|
|
5
|
+
import android.content.ContextWrapper
|
|
6
|
+
import android.graphics.Color
|
|
7
|
+
import android.graphics.drawable.ColorDrawable
|
|
8
|
+
import android.util.Log
|
|
9
|
+
import android.view.View
|
|
10
|
+
import com.facebook.react.bridge.ReactContext
|
|
11
|
+
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|
12
|
+
import kotlin.math.roundToInt
|
|
13
|
+
|
|
14
|
+
internal class FormSheetDimmingManager(
|
|
15
|
+
private val context: Context,
|
|
16
|
+
) {
|
|
17
|
+
// TODO: @t0maboro - consider exposing as a prop
|
|
18
|
+
internal val maxAlpha: Float = MAX_DIMMING_ALPHA_FRACTION
|
|
19
|
+
|
|
20
|
+
internal var isTransitionAnimationRunning: Boolean = false
|
|
21
|
+
|
|
22
|
+
// The drawable rendering this sheet's dimming, added to the overlay of dimmingHost which is
|
|
23
|
+
// Material's `design_bottom_sheet` component or the DecorView of the main application content.
|
|
24
|
+
private var dimmingDrawable: ColorDrawable? = null
|
|
25
|
+
private var dimmingHost: View? = null
|
|
26
|
+
|
|
27
|
+
private val dimmingHostLayoutListener =
|
|
28
|
+
View.OnLayoutChangeListener { view, _, _, _, _, _, _, _, _ ->
|
|
29
|
+
dimmingDrawable?.setBounds(0, 0, view.width, view.height)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
internal var dimmingAlpha: Float = 0f
|
|
33
|
+
set(value) {
|
|
34
|
+
field = value
|
|
35
|
+
// We're transforming the value, because View.alpha is within [0.0, 1.0] range,
|
|
36
|
+
// while Drawable.alpha is an Integer in [0, 255] range.
|
|
37
|
+
dimmingDrawable?.alpha = (value * MAX_DRAWABLE_OVERLAY_ALPHA).roundToInt().coerceIn(0, MAX_DRAWABLE_OVERLAY_ALPHA)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Called when the sheet is presented. [belowSheetView] is the `design_bottom_sheet` of the
|
|
42
|
+
* sheet directly below in the stack, or null when this sheet is the bottom-most one - the
|
|
43
|
+
* dimming then goes onto the decor of the activity hosting the sheets.
|
|
44
|
+
*/
|
|
45
|
+
internal fun attachDimming(belowSheetView: View?) {
|
|
46
|
+
val host = belowSheetView ?: resolveActivityDecorView()
|
|
47
|
+
if (host == null) {
|
|
48
|
+
Log.e(TAG, "[RNScreens] Neither a sheet below nor an activity decor found; the sheet will present undimmed.")
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
dimmingHost = host
|
|
53
|
+
dimmingDrawable =
|
|
54
|
+
ColorDrawable(Color.BLACK).apply {
|
|
55
|
+
alpha = 0
|
|
56
|
+
setBounds(0, 0, host.width, host.height)
|
|
57
|
+
}
|
|
58
|
+
host.overlay.add(dimmingDrawable!!)
|
|
59
|
+
host.addOnLayoutChangeListener(dimmingHostLayoutListener)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
internal fun detachDimming() {
|
|
63
|
+
dimmingHost?.removeOnLayoutChangeListener(dimmingHostLayoutListener)
|
|
64
|
+
dimmingDrawable?.let { dimmingHost?.overlay?.remove(it) }
|
|
65
|
+
dimmingHost = null
|
|
66
|
+
dimmingDrawable = null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
internal fun attachToBehavior(behavior: BottomSheetBehavior<*>) {
|
|
70
|
+
behavior.addBottomSheetCallback(
|
|
71
|
+
object : BottomSheetBehavior.BottomSheetCallback() {
|
|
72
|
+
override fun onStateChanged(
|
|
73
|
+
bottomSheet: View,
|
|
74
|
+
newState: Int,
|
|
75
|
+
) = Unit
|
|
76
|
+
|
|
77
|
+
override fun onSlide(
|
|
78
|
+
bottomSheet: View,
|
|
79
|
+
slideOffset: Float,
|
|
80
|
+
) {
|
|
81
|
+
// Prevent system updates from overriding alpha while running custom enter/exit animation.
|
|
82
|
+
// When initialDetentIndex is snapping to a high detent, BottomSheetBehavior fires onSlide
|
|
83
|
+
// events that conflict with our manual alpha animator, causing the backdrop to flash.
|
|
84
|
+
if (isTransitionAnimationRunning) {
|
|
85
|
+
return
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
val fraction = if (slideOffset >= 0) 1f else 1f + slideOffset
|
|
89
|
+
dimmingAlpha = fraction * maxAlpha
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private fun resolveActivityDecorView(): View? {
|
|
96
|
+
var current: Context? = context
|
|
97
|
+
while (current is ContextWrapper) {
|
|
98
|
+
if (current is Activity) {
|
|
99
|
+
return current.window?.decorView
|
|
100
|
+
}
|
|
101
|
+
if (current is ReactContext) {
|
|
102
|
+
return current.currentActivity?.window?.decorView
|
|
103
|
+
}
|
|
104
|
+
current = current.baseContext
|
|
105
|
+
}
|
|
106
|
+
return null
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
companion object {
|
|
110
|
+
const val TAG = "FormSheetDimmingManager"
|
|
111
|
+
|
|
112
|
+
private const val MAX_DIMMING_ALPHA_FRACTION = 0.3f
|
|
113
|
+
private const val MAX_DRAWABLE_OVERLAY_ALPHA = 255
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.modals.formsheet.native.presentation
|
|
2
|
+
|
|
3
|
+
internal enum class FormSheetDismissalOrigin {
|
|
4
|
+
/**
|
|
5
|
+
* No dismissal request is pending. Completing a dismissal with this
|
|
6
|
+
* origin should report an error.
|
|
7
|
+
*/
|
|
8
|
+
UNSPECIFIED,
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The dismissal was requested from JS by setting `isOpen = false`.
|
|
12
|
+
* Emits `onDismiss`.
|
|
13
|
+
*/
|
|
14
|
+
PROGRAMMATIC_JS,
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The dismissal was initiated by the user (swiping the sheet down,
|
|
18
|
+
* triggering the native back button, or tapping the backdrop).
|
|
19
|
+
* Emits `onNativeDismiss`.
|
|
20
|
+
*/
|
|
21
|
+
USER,
|
|
22
|
+
}
|