react-native-screens 5.0.0-alpha.1 → 5.0.0-alpha.2
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/README.md +1 -2
- 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/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +22 -6
- 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} +25 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDimensionsCoordinator.kt → native/coordinator/FormSheetDimensionsCoordinator.kt} +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +50 -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/{FormSheetDialog.kt → native/core/FormSheetDialog.kt} +24 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogManager.kt → native/core/FormSheetDialogManager.kt} +25 -1
- 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} +3 -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/{FormSheetDetents.kt → native/model/FormSheetDetents.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAnimatorFactory.kt → native/presentation/FormSheetAnimatorFactory.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationManager.kt → native/presentation/FormSheetPresentationManager.kt} +3 -12
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationState.kt → native/presentation/FormSheetPresentationState.kt} +1 -1
- 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/{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} +16 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostViewManager.kt → react/host/FormSheetHostViewManager.kt} +11 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +30 -418
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +36 -113
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderFrameSynchronizer.kt +63 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayout.kt → appbar/StackHeaderAppBarLayout.kt} +1 -6
- 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/{StackHeaderScrollingViewBehavior.kt → appbar/StackHeaderScrollingViewBehavior.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +28 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +8 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +448 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +17 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +83 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuConfig.kt → model/StackHeaderToolbarMenuConfig.kt} +1 -1
- 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/{StackHeaderToolbarMenuGroupMetadata.kt → model/StackHeaderToolbarMenuGroupMetadata.kt} +5 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemConfig.kt → model/StackHeaderToolbarMenuItemConfig.kt} +1 -1
- 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/{StackHeaderToolbarFieldUpdate.kt → update/StackHeaderToolbarFieldUpdate.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementOptions.kt → update/StackHeaderToolbarMenuElementOptions.kt} +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +13 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuUpdateQueue.kt → update/StackHeaderToolbarMenuUpdateQueue.kt} +1 -43
- 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/screen/StackScreen.kt +1 -0
- package/common/cpp/react/renderer/components/rnscreens/legacy/RNSScreenShadowNode.cpp +10 -5
- package/ios/RNSEnums.h +0 -2
- package/ios/RNSOrientationProviding.h +0 -2
- package/ios/RNSReactMountingTransactionObserving.h +15 -0
- package/ios/legacy/RNSBarButtonItem.mm +12 -5
- package/ios/legacy/RNSScreen.h +8 -1
- package/ios/legacy/RNSScreen.mm +39 -17
- package/ios/legacy/RNSScreenContentWrapper.mm +9 -0
- package/ios/legacy/RNSScreenFooter.mm +2 -0
- package/ios/legacy/RNSScreenStack.mm +9 -4
- package/ios/modals/form-sheet/RNSFormSheetContentWrapperComponentView.mm +9 -0
- 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/split/RNSSplitAppearanceApplicator.h +36 -0
- package/ios/split/RNSSplitAppearanceApplicator.mm +185 -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/RNSSplitHostComponentView.mm +1 -1
- package/ios/split/RNSSplitHostController.h +86 -0
- package/ios/split/RNSSplitHostController.mm +560 -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.mm +8 -9
- package/ios/split/RNSSplitScreenController.h +45 -0
- package/ios/split/RNSSplitScreenController.mm +130 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +1 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +47 -9
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +3 -0
- 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/host/RNSStackHostComponentView.mm +3 -1
- package/ios/stack/host/RNSStackNavigationController.mm +1 -1
- package/ios/stack/screen/RNSStackScreenComponentView.mm +0 -2
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +6 -1
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +61 -12
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +3 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +4 -1
- package/ios/tabs/host/RNSTabBarController.h +5 -12
- package/ios/tabs/host/RNSTabBarController.mm +1 -1
- 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.ios.js +11 -12
- 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/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.ios.js +14 -15
- 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/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 +2 -2
- 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.types.d.ts +24 -0
- 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 +13 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
- 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/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.types.d.ts +2 -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/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.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 +1 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +2 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +2 -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 +2 -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 +2 -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 +17 -17
- package/src/components/modals/form-sheet/FormSheet.types.ts +2 -2
- 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.types.ts +24 -0
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +32 -22
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +13 -0
- package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +1 -23
- 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.types.ts +2 -4
- 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 +3 -1
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +7 -2
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +2 -1
- package/src/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHeaderSubviewAndroidNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHostNativeComponent.ts +5 -2
- 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 +7 -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/formsheet/FormSheetNativeDismissCoordinator.kt +0 -25
- package/ios/ReactMountingTransactionObserving.swift +0 -7
- package/ios/bridging/Swift-Bridging.h +0 -7
- 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/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt
CHANGED
|
@@ -12,16 +12,23 @@ import com.facebook.react.bridge.ReactContext
|
|
|
12
12
|
import com.google.android.material.R
|
|
13
13
|
import com.google.android.material.appbar.AppBarLayout
|
|
14
14
|
import com.google.android.material.appbar.MaterialToolbar
|
|
15
|
+
import com.swmansion.rnscreens.stack.header.appbar.StackHeaderAppBarLayout
|
|
16
|
+
import com.swmansion.rnscreens.stack.header.appbar.StackHeaderScrollingViewBehavior
|
|
15
17
|
import com.swmansion.rnscreens.stack.header.config.OnHeaderConfigurationAttachListener
|
|
16
18
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigurationObserver
|
|
17
19
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigurationProviding
|
|
18
20
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderDelegate
|
|
19
21
|
import com.swmansion.rnscreens.stack.header.config.StackHeaderInvalidationFlags
|
|
20
|
-
import com.swmansion.rnscreens.stack.header.
|
|
21
|
-
import com.swmansion.rnscreens.stack.header.toolbar.
|
|
22
|
-
import com.swmansion.rnscreens.stack.header.toolbar.
|
|
22
|
+
import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuApplicator
|
|
23
|
+
import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuSelectionController
|
|
24
|
+
import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarMenuElementUpdate
|
|
23
25
|
import com.swmansion.rnscreens.stack.screen.StackScreen
|
|
24
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Root CoordinatorLayout for a screen's header: hosts the app bar and the
|
|
29
|
+
* content wrapper, wires header-config attach/observe, routes config
|
|
30
|
+
* invalidations to the applicators, and owns header lifecycle/teardown.
|
|
31
|
+
*/
|
|
25
32
|
@SuppressLint("ViewConstructor")
|
|
26
33
|
internal class StackHeaderCoordinatorLayout(
|
|
27
34
|
context: Context,
|
|
@@ -80,15 +87,15 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
80
87
|
// then emit a single coalesced event per affected group.
|
|
81
88
|
val affectedGroups = LinkedHashSet<String>()
|
|
82
89
|
for (update in updates) {
|
|
83
|
-
|
|
90
|
+
StackHeaderToolbarMenuApplicator.updateToolbarMenuElement(
|
|
84
91
|
toolbar,
|
|
85
|
-
|
|
92
|
+
selectionController.forwardIdMap,
|
|
86
93
|
update.id,
|
|
87
94
|
update.options,
|
|
88
95
|
)
|
|
89
96
|
val checked = update.options.checked
|
|
90
97
|
if (checked != null) {
|
|
91
|
-
applyGroupItemStateChange(toolbar, update.id, checked)?.let(affectedGroups::add)
|
|
98
|
+
selectionController.applyGroupItemStateChange(toolbar, update.id, checked)?.let(affectedGroups::add)
|
|
92
99
|
}
|
|
93
100
|
}
|
|
94
101
|
affectedGroups.forEach { groupId -> emitGroupSelection(toolbar, groupId) }
|
|
@@ -123,49 +130,7 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
123
130
|
val delegate = currentDelegate ?: return
|
|
124
131
|
val provider = currentProvider ?: return
|
|
125
132
|
val appBar = appBarLayout ?: return
|
|
126
|
-
|
|
127
|
-
// When config is transparent, the StackScreen is static so we need to offset the header
|
|
128
|
-
// config by the offset of the AppBarLayout (which is 0 or is negative). When config is
|
|
129
|
-
// opaque, the Screen always moves with the config, that's why we need to offset the
|
|
130
|
-
// header config by the negative value of AppBarLayout's height.
|
|
131
|
-
val configOffset = if (provider.transparent) appBar.top else appBar.top - appBar.bottom
|
|
132
|
-
|
|
133
|
-
delegate.onHeaderFrameChanged(
|
|
134
|
-
appBar.width,
|
|
135
|
-
appBar.height,
|
|
136
|
-
configOffset,
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
updateSubviewOffsets(appBar, provider)
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
private fun updateSubviewOffsets(
|
|
143
|
-
appBar: StackHeaderAppBarLayout,
|
|
144
|
-
config: StackHeaderConfigurationProviding,
|
|
145
|
-
) {
|
|
146
|
-
config.leadingSubview?.let { updateSubviewOffset(it, appBar) }
|
|
147
|
-
config.centerSubview?.let { updateSubviewOffset(it, appBar) }
|
|
148
|
-
config.trailingSubview?.let { updateSubviewOffset(it, appBar) }
|
|
149
|
-
config.backgroundSubview?.let { updateSubviewOffset(it, appBar) }
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
private fun updateSubviewOffset(
|
|
153
|
-
subview: StackHeaderSubviewProviding,
|
|
154
|
-
appBar: StackHeaderAppBarLayout,
|
|
155
|
-
) {
|
|
156
|
-
val view = subview.view
|
|
157
|
-
if (view.width == 0 && view.height == 0) return
|
|
158
|
-
|
|
159
|
-
val appBarPos = IntArray(2)
|
|
160
|
-
val subviewPos = IntArray(2)
|
|
161
|
-
appBar.getLocationInWindow(appBarPos)
|
|
162
|
-
view.getLocationInWindow(subviewPos)
|
|
163
|
-
|
|
164
|
-
currentDelegate?.onSubviewOriginChanged(
|
|
165
|
-
subview.type,
|
|
166
|
-
x = subviewPos[0] - appBarPos[0],
|
|
167
|
-
y = subviewPos[1] - appBarPos[1],
|
|
168
|
-
)
|
|
133
|
+
StackHeaderFrameSynchronizer.sync(appBar, provider, delegate)
|
|
169
134
|
}
|
|
170
135
|
|
|
171
136
|
// endregion
|
|
@@ -180,10 +145,9 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
180
145
|
|
|
181
146
|
private val applicator = StackHeaderApplicator(wrappedContext)
|
|
182
147
|
|
|
183
|
-
private
|
|
148
|
+
private val selectionController = StackHeaderToolbarMenuSelectionController()
|
|
184
149
|
|
|
185
|
-
private var
|
|
186
|
-
private var toolbarMenuGroupMetadata = StackHeaderToolbarMenuGroupMetadata.EMPTY
|
|
150
|
+
private var appBarLayout: StackHeaderAppBarLayout? = null
|
|
187
151
|
|
|
188
152
|
private val onNavigationIconClick: () -> Unit = {
|
|
189
153
|
val activity =
|
|
@@ -230,26 +194,36 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
230
194
|
provider.clearInvalidationFlags(StackHeaderInvalidationFlags.SCROLL_FLAGS)
|
|
231
195
|
}
|
|
232
196
|
|
|
197
|
+
if (needsRebuild || provider.invalidationFlags.containsAny(StackHeaderInvalidationFlags.LIFT_ON_SCROLL)) {
|
|
198
|
+
// Lift-on-scroll is disabled in transparent mode: there is no content
|
|
199
|
+
// scrolling behavior installed and the app bar overlays the content.
|
|
200
|
+
applicator.applyLiftOnScroll(
|
|
201
|
+
appBar,
|
|
202
|
+
enabled = provider.liftOnScroll && !provider.transparent,
|
|
203
|
+
targetScrollView = stackScreen.findContentScrollView(),
|
|
204
|
+
)
|
|
205
|
+
provider.clearInvalidationFlags(StackHeaderInvalidationFlags.LIFT_ON_SCROLL)
|
|
206
|
+
}
|
|
207
|
+
|
|
233
208
|
if (provider.invalidationFlags.containsAny(StackHeaderInvalidationFlags.TOOLBAR_MENU)) {
|
|
234
209
|
val (forwardIdMap, reverseIdMap) =
|
|
235
|
-
|
|
210
|
+
StackHeaderToolbarMenuApplicator.generateToolbarMenuItemMappings(
|
|
236
211
|
provider.toolbarMenu,
|
|
237
212
|
)
|
|
238
213
|
val forwardGroupIdMap =
|
|
239
|
-
|
|
214
|
+
StackHeaderToolbarMenuApplicator.generateToolbarMenuGroupMappings(
|
|
240
215
|
provider.toolbarMenu,
|
|
241
216
|
)
|
|
242
217
|
val groupMetadata =
|
|
243
|
-
|
|
218
|
+
StackHeaderToolbarMenuApplicator.computeGroupMetadata(
|
|
244
219
|
provider.toolbarMenu,
|
|
245
220
|
)
|
|
246
221
|
|
|
247
|
-
|
|
222
|
+
StackHeaderToolbarMenuApplicator.validateRadioInitialSelection(provider.toolbarMenu)
|
|
248
223
|
|
|
249
|
-
|
|
250
|
-
toolbarMenuGroupMetadata = groupMetadata
|
|
224
|
+
selectionController.setMenuMaps(forwardIdMap, groupMetadata)
|
|
251
225
|
|
|
252
|
-
|
|
226
|
+
StackHeaderToolbarMenuApplicator.rebuildToolbarMenu(
|
|
253
227
|
appBar.toolbar,
|
|
254
228
|
provider.toolbarMenu,
|
|
255
229
|
forwardIdMap,
|
|
@@ -258,7 +232,7 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
258
232
|
groupDividerEnabled = provider.toolbarMenuGroupDividerEnabled,
|
|
259
233
|
onItemClicked = { id, menuItem ->
|
|
260
234
|
if (menuItem.isCheckable) {
|
|
261
|
-
applyGroupItemStateChange(appBar.toolbar, id)?.let { groupId ->
|
|
235
|
+
selectionController.applyGroupItemStateChange(appBar.toolbar, id)?.let { groupId ->
|
|
262
236
|
emitGroupSelection(appBar.toolbar, groupId)
|
|
263
237
|
}
|
|
264
238
|
} else {
|
|
@@ -278,63 +252,13 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
278
252
|
|
|
279
253
|
// region Group selection
|
|
280
254
|
|
|
281
|
-
/**
|
|
282
|
-
* Mutates the checked state of [itemId] within its group and returns the id of the group
|
|
283
|
-
* whose selection changed, or `null` when nothing changed (the item is not in a group, an
|
|
284
|
-
* invalid attempt to uncheck a single-selection item, or the item was already in the
|
|
285
|
-
* target state). Does not emit — callers decide when to emit so that batched updates can
|
|
286
|
-
* coalesce into one event per group.
|
|
287
|
-
*/
|
|
288
|
-
private fun applyGroupItemStateChange(
|
|
289
|
-
toolbar: MaterialToolbar,
|
|
290
|
-
itemId: String,
|
|
291
|
-
explicitCheckedValue: Boolean? = null,
|
|
292
|
-
): String? {
|
|
293
|
-
val groupId = toolbarMenuGroupMetadata.itemGroupMap[itemId] ?: return null
|
|
294
|
-
val singleSelection = toolbarMenuGroupMetadata.groupSingleSelection[groupId] ?: return null
|
|
295
|
-
val intId = toolbarMenuForwardIdMap[itemId] ?: return null
|
|
296
|
-
val menuItem = toolbar.menu.findItem(intId) ?: return null
|
|
297
|
-
|
|
298
|
-
if (singleSelection && explicitCheckedValue == false) {
|
|
299
|
-
Log.w(
|
|
300
|
-
TAG,
|
|
301
|
-
"[RNScreens] Cannot uncheck item '$itemId' in single-selection group '$groupId'. " +
|
|
302
|
-
"Check a different item instead.",
|
|
303
|
-
)
|
|
304
|
-
return null
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
val newChecked =
|
|
308
|
-
if (singleSelection) {
|
|
309
|
-
true
|
|
310
|
-
} else {
|
|
311
|
-
explicitCheckedValue ?: !menuItem.isChecked
|
|
312
|
-
}
|
|
313
|
-
if (menuItem.isChecked == newChecked) return null
|
|
314
|
-
menuItem.isChecked = newChecked
|
|
315
|
-
|
|
316
|
-
return groupId
|
|
317
|
-
}
|
|
318
|
-
|
|
319
255
|
private fun emitGroupSelection(
|
|
320
256
|
toolbar: MaterialToolbar,
|
|
321
257
|
groupId: String,
|
|
322
258
|
) {
|
|
323
|
-
currentDelegate?.onGroupSelectionChanged(groupId, collectSelectedIds(toolbar, groupId))
|
|
259
|
+
currentDelegate?.onGroupSelectionChanged(groupId, selectionController.collectSelectedIds(toolbar, groupId))
|
|
324
260
|
}
|
|
325
261
|
|
|
326
|
-
private fun collectSelectedIds(
|
|
327
|
-
toolbar: MaterialToolbar,
|
|
328
|
-
groupId: String,
|
|
329
|
-
): List<String> =
|
|
330
|
-
toolbarMenuGroupMetadata
|
|
331
|
-
.groupMemberItems[groupId]
|
|
332
|
-
.orEmpty()
|
|
333
|
-
.filter { memberId ->
|
|
334
|
-
val intId = toolbarMenuForwardIdMap[memberId] ?: return@filter false
|
|
335
|
-
toolbar.menu.findItem(intId)?.isChecked == true
|
|
336
|
-
}
|
|
337
|
-
|
|
338
262
|
// endregion
|
|
339
263
|
|
|
340
264
|
// region Header lifecycle
|
|
@@ -345,8 +269,7 @@ internal class StackHeaderCoordinatorLayout(
|
|
|
345
269
|
removeView(it)
|
|
346
270
|
}
|
|
347
271
|
appBarLayout = null
|
|
348
|
-
|
|
349
|
-
toolbarMenuGroupMetadata = StackHeaderToolbarMenuGroupMetadata.EMPTY
|
|
272
|
+
selectionController.clear()
|
|
350
273
|
}
|
|
351
274
|
|
|
352
275
|
private fun removeHeader() {
|
package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderFrameSynchronizer.kt
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.header
|
|
2
|
+
|
|
3
|
+
import com.swmansion.rnscreens.stack.header.appbar.StackHeaderAppBarLayout
|
|
4
|
+
import com.swmansion.rnscreens.stack.header.config.StackHeaderConfigurationProviding
|
|
5
|
+
import com.swmansion.rnscreens.stack.header.config.StackHeaderDelegate
|
|
6
|
+
import com.swmansion.rnscreens.stack.header.subview.StackHeaderSubviewProviding
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Reports the header's frame and subview origins to the delegate as the app bar
|
|
10
|
+
* lays out or scrolls.
|
|
11
|
+
*/
|
|
12
|
+
internal object StackHeaderFrameSynchronizer {
|
|
13
|
+
internal fun sync(
|
|
14
|
+
appBar: StackHeaderAppBarLayout,
|
|
15
|
+
provider: StackHeaderConfigurationProviding,
|
|
16
|
+
delegate: StackHeaderDelegate,
|
|
17
|
+
) {
|
|
18
|
+
// When config is transparent, the StackScreen is static so we need to offset the header
|
|
19
|
+
// config by the offset of the AppBarLayout (which is 0 or is negative). When config is
|
|
20
|
+
// opaque, the Screen always moves with the config, that's why we need to offset the
|
|
21
|
+
// header config by the negative value of AppBarLayout's height.
|
|
22
|
+
val configOffset = if (provider.transparent) appBar.top else appBar.top - appBar.bottom
|
|
23
|
+
|
|
24
|
+
delegate.onHeaderFrameChanged(
|
|
25
|
+
appBar.width,
|
|
26
|
+
appBar.height,
|
|
27
|
+
configOffset,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
updateSubviewOffsets(appBar, provider, delegate)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private fun updateSubviewOffsets(
|
|
34
|
+
appBar: StackHeaderAppBarLayout,
|
|
35
|
+
config: StackHeaderConfigurationProviding,
|
|
36
|
+
delegate: StackHeaderDelegate,
|
|
37
|
+
) {
|
|
38
|
+
config.leadingSubview?.let { updateSubviewOffset(it, appBar, delegate) }
|
|
39
|
+
config.centerSubview?.let { updateSubviewOffset(it, appBar, delegate) }
|
|
40
|
+
config.trailingSubview?.let { updateSubviewOffset(it, appBar, delegate) }
|
|
41
|
+
config.backgroundSubview?.let { updateSubviewOffset(it, appBar, delegate) }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private fun updateSubviewOffset(
|
|
45
|
+
subview: StackHeaderSubviewProviding,
|
|
46
|
+
appBar: StackHeaderAppBarLayout,
|
|
47
|
+
delegate: StackHeaderDelegate,
|
|
48
|
+
) {
|
|
49
|
+
val view = subview.view
|
|
50
|
+
if (view.width == 0 && view.height == 0) return
|
|
51
|
+
|
|
52
|
+
val appBarPos = IntArray(2)
|
|
53
|
+
val subviewPos = IntArray(2)
|
|
54
|
+
appBar.getLocationInWindow(appBarPos)
|
|
55
|
+
view.getLocationInWindow(subviewPos)
|
|
56
|
+
|
|
57
|
+
delegate.onSubviewOriginChanged(
|
|
58
|
+
subview.type,
|
|
59
|
+
x = subviewPos[0] - appBarPos[0],
|
|
60
|
+
y = subviewPos[1] - appBarPos[1],
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package com.swmansion.rnscreens.stack.header
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.appbar
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
@@ -24,11 +24,6 @@ internal sealed class StackHeaderAppBarLayout(
|
|
|
24
24
|
behavior = StackHeaderAppBarLayoutBehavior()
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
// TODO: this should be exposed in the future via prop. Also, it might not work correctly
|
|
28
|
-
// until we set liftOnScrollView manually. Also, we should disable it in transparent
|
|
29
|
-
// mode or set elevation higher.
|
|
30
|
-
isLiftOnScroll = true
|
|
31
|
-
|
|
32
27
|
// TODO: this won't work with nested header but there were some problems with lift on scroll
|
|
33
28
|
// without it when I was researching this.
|
|
34
29
|
fitsSystemWindows = true
|
package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt
CHANGED
|
@@ -17,12 +17,12 @@ import com.swmansion.rnscreens.helpers.resolveImage
|
|
|
17
17
|
import com.swmansion.rnscreens.stack.header.subview.OnStackHeaderSubviewChangeListener
|
|
18
18
|
import com.swmansion.rnscreens.stack.header.subview.StackHeaderSubview
|
|
19
19
|
import com.swmansion.rnscreens.stack.header.subview.StackHeaderSubviewType
|
|
20
|
-
import com.swmansion.rnscreens.stack.header.toolbar.
|
|
21
|
-
import com.swmansion.rnscreens.stack.header.toolbar.
|
|
22
|
-
import com.swmansion.rnscreens.stack.header.toolbar.
|
|
23
|
-
import com.swmansion.rnscreens.stack.header.toolbar.
|
|
24
|
-
import com.swmansion.rnscreens.stack.header.toolbar.
|
|
25
|
-
import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuUpdateQueue
|
|
20
|
+
import com.swmansion.rnscreens.stack.header.toolbar.model.StackHeaderToolbarMenuConfig
|
|
21
|
+
import com.swmansion.rnscreens.stack.header.toolbar.model.StackHeaderToolbarMenuItemIconSource
|
|
22
|
+
import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarFieldUpdate
|
|
23
|
+
import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarMenuElementRawUpdate
|
|
24
|
+
import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarMenuIconResolver
|
|
25
|
+
import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarMenuUpdateQueue
|
|
26
26
|
import java.lang.ref.WeakReference
|
|
27
27
|
import kotlin.properties.Delegates
|
|
28
28
|
|
|
@@ -141,6 +141,11 @@ internal class StackHeaderConfig(
|
|
|
141
141
|
}
|
|
142
142
|
internal set
|
|
143
143
|
|
|
144
|
+
override var liftOnScroll: Boolean by Delegates.observable(true) { _, old, new ->
|
|
145
|
+
if (old != new) invalidate(StackHeaderInvalidationFlags.LIFT_ON_SCROLL)
|
|
146
|
+
}
|
|
147
|
+
internal set
|
|
148
|
+
|
|
144
149
|
override var toolbarMenu: StackHeaderToolbarMenuConfig
|
|
145
150
|
by Delegates.observable(StackHeaderToolbarMenuConfig(emptyList(), emptyList())) { _, old, new ->
|
|
146
151
|
if (old != new) invalidate(StackHeaderInvalidationFlags.TOOLBAR_MENU)
|
|
@@ -157,6 +162,23 @@ internal class StackHeaderConfig(
|
|
|
157
162
|
|
|
158
163
|
// endregion
|
|
159
164
|
|
|
165
|
+
// region Content scroll view
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Called by the owning [com.swmansion.rnscreens.stack.screen.StackScreen]
|
|
169
|
+
* when its content scroll view changes (e.g. a `ScrollViewMarker` registered
|
|
170
|
+
* one). Re-triggers lift-on-scroll so the coordinator can resolve and apply
|
|
171
|
+
* the up-to-date `liftOnScrollTargetView`.
|
|
172
|
+
*/
|
|
173
|
+
internal fun onContentScrollViewChanged() {
|
|
174
|
+
invalidate(StackHeaderInvalidationFlags.LIFT_ON_SCROLL)
|
|
175
|
+
if (!isInsideMountTransaction) {
|
|
176
|
+
flushUpdates()
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// endregion
|
|
181
|
+
|
|
160
182
|
// region Back button icon resolution
|
|
161
183
|
|
|
162
184
|
// Staging fields for back button icon resolution.
|
|
@@ -15,8 +15,8 @@ import com.facebook.react.uimanager.ViewManagerDelegate
|
|
|
15
15
|
import com.facebook.react.viewmanagers.RNSStackHeaderConfigAndroidManagerDelegate
|
|
16
16
|
import com.facebook.react.viewmanagers.RNSStackHeaderConfigAndroidManagerInterface
|
|
17
17
|
import com.swmansion.rnscreens.stack.header.subview.StackHeaderSubview
|
|
18
|
-
import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuElementRawUpdate
|
|
19
18
|
import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuMapper
|
|
19
|
+
import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarMenuElementRawUpdate
|
|
20
20
|
|
|
21
21
|
@ReactModule(name = StackHeaderConfigViewManager.REACT_CLASS)
|
|
22
22
|
internal open class StackHeaderConfigViewManager :
|
|
@@ -218,6 +218,13 @@ internal open class StackHeaderConfigViewManager :
|
|
|
218
218
|
view.scrollFlagSnap = value
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
+
override fun setLiftOnScroll(
|
|
222
|
+
view: StackHeaderConfig,
|
|
223
|
+
value: Boolean,
|
|
224
|
+
) {
|
|
225
|
+
view.liftOnScroll = value
|
|
226
|
+
}
|
|
227
|
+
|
|
221
228
|
override fun setToolbarMenuGroupDividerEnabled(
|
|
222
229
|
view: StackHeaderConfig,
|
|
223
230
|
value: Boolean,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.stack.header.config
|
|
2
2
|
|
|
3
|
-
import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuElementUpdate
|
|
3
|
+
import com.swmansion.rnscreens.stack.header.toolbar.update.StackHeaderToolbarMenuElementUpdate
|
|
4
4
|
|
|
5
5
|
internal interface StackHeaderConfigurationObserver {
|
|
6
6
|
fun onConfigChanged(config: StackHeaderConfigurationProviding)
|
|
@@ -2,7 +2,7 @@ package com.swmansion.rnscreens.stack.header.config
|
|
|
2
2
|
|
|
3
3
|
import android.graphics.drawable.Drawable
|
|
4
4
|
import com.swmansion.rnscreens.stack.header.subview.StackHeaderSubviewProviding
|
|
5
|
-
import com.swmansion.rnscreens.stack.header.toolbar.StackHeaderToolbarMenuConfig
|
|
5
|
+
import com.swmansion.rnscreens.stack.header.toolbar.model.StackHeaderToolbarMenuConfig
|
|
6
6
|
|
|
7
7
|
internal interface StackHeaderConfigurationProviding {
|
|
8
8
|
val type: StackHeaderType
|
|
@@ -19,6 +19,7 @@ internal interface StackHeaderConfigurationProviding {
|
|
|
19
19
|
val scrollFlagEnterAlwaysCollapsed: Boolean
|
|
20
20
|
val scrollFlagExitUntilCollapsed: Boolean
|
|
21
21
|
val scrollFlagSnap: Boolean
|
|
22
|
+
val liftOnScroll: Boolean
|
|
22
23
|
val leadingSubview: StackHeaderSubviewProviding?
|
|
23
24
|
val centerSubview: StackHeaderSubviewProviding?
|
|
24
25
|
val trailingSubview: StackHeaderSubviewProviding?
|
|
@@ -12,9 +12,10 @@ internal value class StackHeaderInvalidationFlags(
|
|
|
12
12
|
val BACK_BUTTON = StackHeaderInvalidationFlags(1 shl 3)
|
|
13
13
|
val SCROLL_FLAGS = StackHeaderInvalidationFlags(1 shl 4)
|
|
14
14
|
val TOOLBAR_MENU = StackHeaderInvalidationFlags(1 shl 5)
|
|
15
|
+
val LIFT_ON_SCROLL = StackHeaderInvalidationFlags(1 shl 6)
|
|
15
16
|
|
|
16
17
|
val APPEARANCE = TITLE or BACK_BUTTON
|
|
17
|
-
val ALL = STRUCTURE or SUBVIEWS or APPEARANCE or SCROLL_FLAGS or TOOLBAR_MENU
|
|
18
|
+
val ALL = STRUCTURE or SUBVIEWS or APPEARANCE or SCROLL_FLAGS or TOOLBAR_MENU or LIFT_ON_SCROLL
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
infix fun or(other: StackHeaderInvalidationFlags) = StackHeaderInvalidationFlags(raw or other.raw)
|