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
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.toolbar.update
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A single toolbar menu element update whose icon has already been resolved and merged
|
|
5
|
+
* into [options], ready to be applied to the toolbar.
|
|
6
|
+
*/
|
|
7
|
+
internal data class StackHeaderToolbarMenuElementUpdate(
|
|
8
|
+
val id: String,
|
|
9
|
+
val options: StackHeaderToolbarMenuElementOptions,
|
|
10
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.toolbar.update
|
|
2
|
+
|
|
3
|
+
import android.graphics.drawable.Drawable
|
|
4
|
+
import com.swmansion.rnscreens.stack.header.toolbar.model.StackHeaderToolbarMenuItemIconSource
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Resolves the icon for a single menu element update.
|
|
8
|
+
*
|
|
9
|
+
* [onResolved] must be invoked exactly once — synchronously or asynchronously, always on the
|
|
10
|
+
* main thread — with the resolved icon to merge into the element's options.
|
|
11
|
+
*/
|
|
12
|
+
internal fun interface StackHeaderToolbarMenuIconResolver {
|
|
13
|
+
fun resolve(
|
|
14
|
+
iconSource: StackHeaderToolbarMenuItemIconSource,
|
|
15
|
+
onResolved: (icon: StackHeaderToolbarFieldUpdate<Drawable>) -> Unit,
|
|
16
|
+
)
|
|
17
|
+
}
|
|
@@ -1,46 +1,4 @@
|
|
|
1
|
-
package com.swmansion.rnscreens.stack.header.toolbar
|
|
2
|
-
|
|
3
|
-
import android.graphics.drawable.Drawable
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* A single toolbar menu element update carried by an `updateToolbarMenuElements`
|
|
7
|
-
* view command, before its icon (if any) has been resolved.
|
|
8
|
-
*/
|
|
9
|
-
internal data class StackHeaderToolbarMenuElementRawUpdate(
|
|
10
|
-
val id: String,
|
|
11
|
-
val options: StackHeaderToolbarMenuElementOptions,
|
|
12
|
-
val iconSource: StackHeaderToolbarMenuItemIconSource?,
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A single toolbar menu element update whose icon has already been resolved and merged
|
|
17
|
-
* into [options], ready to be applied to the toolbar.
|
|
18
|
-
*/
|
|
19
|
-
internal data class StackHeaderToolbarMenuElementUpdate(
|
|
20
|
-
val id: String,
|
|
21
|
-
val options: StackHeaderToolbarMenuElementOptions,
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Resolves the icon for a single menu element update.
|
|
26
|
-
*
|
|
27
|
-
* [onResolved] must be invoked exactly once — synchronously or asynchronously, always on the
|
|
28
|
-
* main thread — with the resolved icon to merge into the element's options.
|
|
29
|
-
*/
|
|
30
|
-
internal fun interface StackHeaderToolbarMenuIconResolver {
|
|
31
|
-
fun resolve(
|
|
32
|
-
iconSource: StackHeaderToolbarMenuItemIconSource,
|
|
33
|
-
onResolved: (icon: StackHeaderToolbarFieldUpdate<Drawable>) -> Unit,
|
|
34
|
-
)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Receives a fully-resolved batch of menu element updates, to be applied to the toolbar
|
|
39
|
-
* atomically.
|
|
40
|
-
*/
|
|
41
|
-
internal fun interface StackHeaderToolbarMenuUpdateQueueDelegate {
|
|
42
|
-
fun onUpdatesResolved(updates: List<StackHeaderToolbarMenuElementUpdate>)
|
|
43
|
-
}
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.toolbar.update
|
|
44
2
|
|
|
45
3
|
/**
|
|
46
4
|
* Serial, FIFO queue for `updateToolbarMenuElements` view command batches.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.stack.header.toolbar.update
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Receives a fully-resolved batch of menu element updates, to be applied to the toolbar
|
|
5
|
+
* atomically.
|
|
6
|
+
*/
|
|
7
|
+
internal fun interface StackHeaderToolbarMenuUpdateQueueDelegate {
|
|
8
|
+
fun onUpdatesResolved(updates: List<StackHeaderToolbarMenuElementUpdate>)
|
|
9
|
+
}
|
|
@@ -77,7 +77,11 @@ std::optional<float> findHeaderHeight(
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
jfloat headerHeight = env->CallFloatMethod(
|
|
80
|
-
packageInstance,
|
|
80
|
+
packageInstance,
|
|
81
|
+
computeDummyLayoutID,
|
|
82
|
+
fontSize,
|
|
83
|
+
isTitleEmpty,
|
|
84
|
+
applyTopInset);
|
|
81
85
|
|
|
82
86
|
return {headerHeight};
|
|
83
87
|
}
|
|
@@ -103,10 +107,11 @@ void RNSScreenShadowNode::appendChild(
|
|
|
103
107
|
headerConfigChild->getProps());
|
|
104
108
|
|
|
105
109
|
// The native CustomToolbar only pads itself with the top inset when
|
|
106
|
-
// `legacyTopInsetBehavior || consumeTopInset` holds (see
|
|
107
|
-
// The dummy measurement must mirror that condition,
|
|
108
|
-
// height is over-reported by the top inset whenever
|
|
109
|
-
// `disableTopInsetApplication` (consumeTopInset ==
|
|
110
|
+
// `legacyTopInsetBehavior || consumeTopInset` holds (see
|
|
111
|
+
// CustomToolbar.kt). The dummy measurement must mirror that condition,
|
|
112
|
+
// otherwise the header height is over-reported by the top inset whenever
|
|
113
|
+
// a header opts out via `disableTopInsetApplication` (consumeTopInset ==
|
|
114
|
+
// false).
|
|
110
115
|
const bool applyTopInset =
|
|
111
116
|
headerProps.legacyTopInsetBehavior || headerProps.consumeTopInset;
|
|
112
117
|
|
package/ios/RNSEnums.h
CHANGED
|
@@ -54,8 +54,6 @@ typedef NS_ENUM(NSInteger, RNSTabsIconType) {
|
|
|
54
54
|
RNSTabsIconTypeXcasset,
|
|
55
55
|
};
|
|
56
56
|
|
|
57
|
-
// TODO: investigate objc - swift interop and deduplicate this code
|
|
58
|
-
// This enum needs to be compatible with the RNSOrientationSwift enum.
|
|
59
57
|
typedef NS_ENUM(NSInteger, RNSOrientation) {
|
|
60
58
|
RNSOrientationInherit,
|
|
61
59
|
RNSOrientationAll,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import <Foundation/Foundation.h>
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
@protocol RNSReactMountingTransactionObserving
|
|
8
|
+
|
|
9
|
+
- (void)reactMountingTransactionWillMount;
|
|
10
|
+
|
|
11
|
+
- (void)reactMountingTransactionDidMount;
|
|
12
|
+
|
|
13
|
+
@end
|
|
14
|
+
|
|
15
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -188,11 +188,18 @@ static UIMenuOptions RNSMakeUIMenuOptionsFromConfig(NSDictionary *config);
|
|
|
188
188
|
image = img;
|
|
189
189
|
}];
|
|
190
190
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
191
|
+
UIMenu *menu = [UIMenu menuWithTitle:dict[@"title"]
|
|
192
|
+
image:image
|
|
193
|
+
identifier:nil
|
|
194
|
+
options:RNSMakeUIMenuOptionsFromConfig(dict)
|
|
195
|
+
children:elements];
|
|
196
|
+
|
|
197
|
+
NSString *subtitle = dict[@"subtitle"];
|
|
198
|
+
if (subtitle != nil) {
|
|
199
|
+
menu.subtitle = subtitle;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return menu;
|
|
196
203
|
}
|
|
197
204
|
|
|
198
205
|
+ (UIAction *)createActionItemFromConfig:(NSDictionary *)dict
|
package/ios/legacy/RNSScreen.h
CHANGED
|
@@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
50
50
|
- (void)calculateAndNotifyHeaderHeightChangeIsModal:(BOOL)isModal;
|
|
51
51
|
- (void)notifyFinishTransitioning;
|
|
52
52
|
- (RNSScreenView *)screenView;
|
|
53
|
-
- (void)
|
|
53
|
+
- (void)addSnapshotToView;
|
|
54
54
|
- (CGFloat)calculateHeaderHeightIsModal:(BOOL)isModal;
|
|
55
55
|
- (BOOL)isRemovedFromParent;
|
|
56
56
|
- (void)notifyPresentedControllerDismissed;
|
|
@@ -87,9 +87,16 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
87
87
|
@property (nonatomic) RNSScrollEdgeEffect rightScrollEdgeEffect;
|
|
88
88
|
@property (nonatomic) RNSScrollEdgeEffect topScrollEdgeEffect;
|
|
89
89
|
@property (nonatomic, readwrite) BOOL synchronousShadowStateUpdatesEnabled;
|
|
90
|
+
@property (nonatomic, readwrite) BOOL iosOrientationInheritanceFixEnabled;
|
|
90
91
|
|
|
91
92
|
@property (nonatomic, retain) NSNumber *transitionDuration;
|
|
92
93
|
@property (nonatomic, readonly) BOOL dismissed;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Whether React has already deleted this component. The view may still be part of the view
|
|
97
|
+
* hierarchy at that point, backing the remainder of an ongoing native transition.
|
|
98
|
+
*/
|
|
99
|
+
@property (nonatomic, readonly, getter=isInvalidated) BOOL invalidated;
|
|
93
100
|
@property (nonatomic) BOOL hideKeyboardOnSwipe;
|
|
94
101
|
@property (nonatomic) BOOL customAnimationOnSwipe;
|
|
95
102
|
@property (nonatomic) BOOL preventNativeDismiss;
|
package/ios/legacy/RNSScreen.mm
CHANGED
|
@@ -102,6 +102,7 @@ struct ContentWrapperBox {
|
|
|
102
102
|
_sheetContentHeight = 0.0;
|
|
103
103
|
_markedForUnmountInCurrentTransaction = NO;
|
|
104
104
|
_synchronousShadowStateUpdatesEnabled = YES;
|
|
105
|
+
_iosOrientationInheritanceFixEnabled = YES;
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
- (BOOL)getFullScreenSwipeShadowEnabled
|
|
@@ -769,6 +770,8 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
769
770
|
|
|
770
771
|
- (void)invalidateImpl
|
|
771
772
|
{
|
|
773
|
+
_invalidated = YES;
|
|
774
|
+
|
|
772
775
|
// Since the scroll view might get immediately recycled we remove ourselves
|
|
773
776
|
// immediately.
|
|
774
777
|
if (_sheetsScrollView != nil) {
|
|
@@ -1259,6 +1262,8 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
1259
1262
|
|
|
1260
1263
|
[self setSynchronousShadowStateUpdatesEnabled:newScreenProps.synchronousShadowStateUpdatesEnabled];
|
|
1261
1264
|
|
|
1265
|
+
[self setIosOrientationInheritanceFixEnabled:newScreenProps.iosOrientationInheritanceFixEnabled];
|
|
1266
|
+
|
|
1262
1267
|
#if !TARGET_OS_TV
|
|
1263
1268
|
if (newScreenProps.statusBarHidden != oldScreenProps.statusBarHidden) {
|
|
1264
1269
|
[self setStatusBarHidden:newScreenProps.statusBarHidden];
|
|
@@ -1407,7 +1412,6 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
|
|
|
1407
1412
|
@implementation RNSScreen {
|
|
1408
1413
|
__weak id _previousFirstResponder;
|
|
1409
1414
|
CGRect _lastViewFrame;
|
|
1410
|
-
RNSScreenView *_initialView;
|
|
1411
1415
|
UIView *_fakeView;
|
|
1412
1416
|
CADisplayLink *_animationTimer;
|
|
1413
1417
|
CGFloat _currentAlpha;
|
|
@@ -1428,7 +1432,6 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
|
|
|
1428
1432
|
_fakeView = [UIView new];
|
|
1429
1433
|
_shouldNotify = YES;
|
|
1430
1434
|
_isRemovedFromParent = NO;
|
|
1431
|
-
_initialView = (RNSScreenView *)view;
|
|
1432
1435
|
}
|
|
1433
1436
|
return self;
|
|
1434
1437
|
}
|
|
@@ -1751,9 +1754,13 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
|
|
|
1751
1754
|
|
|
1752
1755
|
- (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingForward:(BOOL)goingForward
|
|
1753
1756
|
{
|
|
1754
|
-
if ([self.view isKindOfClass:[RNSScreenView class]]) {
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
+
if (![self.view isKindOfClass:[RNSScreenView class]]) {
|
|
1758
|
+
return;
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1761
|
+
// if the screen was already deleted by React, there is no sense in sending progress
|
|
1762
|
+
// since on JS side the component is already not present
|
|
1763
|
+
if (!static_cast<RNSScreenView *>(self.view).isInvalidated) {
|
|
1757
1764
|
[(RNSScreenView *)self.view notifyTransitionProgress:progress closing:closing goingForward:goingForward];
|
|
1758
1765
|
}
|
|
1759
1766
|
}
|
|
@@ -1907,11 +1914,9 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
|
|
|
1907
1914
|
return (int)[[self.screenView.reactSuperview reactSubviews] indexOfObject:view];
|
|
1908
1915
|
}
|
|
1909
1916
|
|
|
1910
|
-
// Since the view of the controller can be a snapshot of type `UIView`,
|
|
1911
|
-
// when we want to check props of ScreenView, we need to get them from _initialView
|
|
1912
1917
|
- (RNSScreenView *)screenView
|
|
1913
1918
|
{
|
|
1914
|
-
return
|
|
1919
|
+
return static_cast<RNSScreenView *>(self.view);
|
|
1915
1920
|
}
|
|
1916
1921
|
|
|
1917
1922
|
- (void)hideHeaderIfNecessary
|
|
@@ -1984,6 +1989,19 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
|
|
|
1984
1989
|
}
|
|
1985
1990
|
}
|
|
1986
1991
|
|
|
1992
|
+
// If flag is enabled, we're doing same evaluation as `[self supportedInterfaceOrientations]`
|
|
1993
|
+
// but we fall back to `RNSOrientationInherit` if orientation is not set in order not to
|
|
1994
|
+
// override parent's orientation. For more details see:
|
|
1995
|
+
// https://github.com/software-mansion/react-native-screens/pull/4408
|
|
1996
|
+
if (self.screenView.iosOrientationInheritanceFixEnabled) {
|
|
1997
|
+
UIViewController *orientationVC = [self findChildVCForConfigAndTrait:RNSWindowTraitOrientation includingModals:YES];
|
|
1998
|
+
if ([orientationVC isKindOfClass:[RNSScreen class]]) {
|
|
1999
|
+
return rnscreens::conversion::RNSOrientationFromUIInterfaceOrientationMask(
|
|
2000
|
+
((RNSScreen *)orientationVC).screenView.screenOrientation);
|
|
2001
|
+
}
|
|
2002
|
+
return RNSOrientationInherit;
|
|
2003
|
+
}
|
|
2004
|
+
|
|
1987
2005
|
return rnscreens::conversion::RNSOrientationFromUIInterfaceOrientationMask([self supportedInterfaceOrientations]);
|
|
1988
2006
|
}
|
|
1989
2007
|
|
|
@@ -1991,18 +2009,22 @@ Class<RCTComponentViewProtocol> RNSScreenCls(void)
|
|
|
1991
2009
|
|
|
1992
2010
|
#pragma mark - Fabric specific
|
|
1993
2011
|
|
|
1994
|
-
- (void)
|
|
2012
|
+
- (void)addSnapshotToView
|
|
1995
2013
|
{
|
|
1996
|
-
UIView *superView = self.view.superview;
|
|
1997
2014
|
// if we dismissed the view natively, it will already be detached from view hierarchy
|
|
1998
|
-
if (self.view.window
|
|
1999
|
-
|
|
2000
|
-
UIView *snapshot = [self.view snapshotViewAfterScreenUpdates:afterUpdates];
|
|
2001
|
-
snapshot.frame = self.view.frame;
|
|
2002
|
-
[self.view removeFromSuperview];
|
|
2003
|
-
self.view = snapshot;
|
|
2004
|
-
[superView addSubview:snapshot];
|
|
2015
|
+
if (self.view.window == nil) {
|
|
2016
|
+
return;
|
|
2005
2017
|
}
|
|
2018
|
+
|
|
2019
|
+
// The snapshot is added inside the screen view instead of replacing it, so `self.view` remains
|
|
2020
|
+
// the view UIKit captured for the ongoing transition and is torn down (with the snapshot)
|
|
2021
|
+
// consistently. Replacing the view mid-transition made iOS 26 teardown re-insert the original
|
|
2022
|
+
// view into the hierarchy and remove only the snapshot, leaving a view that blocked all touches.
|
|
2023
|
+
UIView *snapshot = [self.view snapshotViewAfterScreenUpdates:self.screenView.snapshotAfterUpdates];
|
|
2024
|
+
snapshot.frame = self.view.bounds;
|
|
2025
|
+
// fill the whole screen view with the snapshot
|
|
2026
|
+
snapshot.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
2027
|
+
[self.view addSubview:snapshot];
|
|
2006
2028
|
}
|
|
2007
2029
|
|
|
2008
2030
|
@end
|
|
@@ -16,6 +16,15 @@ namespace react = facebook::react;
|
|
|
16
16
|
|
|
17
17
|
@implementation RNSScreenContentWrapper
|
|
18
18
|
|
|
19
|
+
- (instancetype)initWithFrame:(CGRect)frame
|
|
20
|
+
{
|
|
21
|
+
if (self = [super initWithFrame:frame]) {
|
|
22
|
+
static const auto defaultProps = std::make_shared<const react::RNSScreenContentWrapperProps>();
|
|
23
|
+
_props = defaultProps;
|
|
24
|
+
}
|
|
25
|
+
return self;
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
- (void)notifyDelegateWithFrame:(CGRect)frame
|
|
20
29
|
{
|
|
21
30
|
[self.delegate contentWrapper:self receivedReactFrame:frame];
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
- (instancetype)init
|
|
13
13
|
{
|
|
14
14
|
if (self = [super init]) {
|
|
15
|
+
static const auto defaultProps = std::make_shared<const facebook::react::RNSScreenFooterProps>();
|
|
16
|
+
_props = defaultProps;
|
|
15
17
|
self.translatesAutoresizingMaskIntoConstraints = false;
|
|
16
18
|
_parent = nil;
|
|
17
19
|
}
|
|
@@ -244,8 +244,10 @@ namespace react = facebook::react;
|
|
|
244
244
|
willShowViewController:(UIViewController *)viewController
|
|
245
245
|
animated:(BOOL)animated
|
|
246
246
|
{
|
|
247
|
-
if (![viewController.view isKindOfClass:[RNSScreenView class]]
|
|
248
|
-
|
|
247
|
+
if (![viewController.view isKindOfClass:[RNSScreenView class]] ||
|
|
248
|
+
static_cast<RNSScreenView *>(viewController.view).isInvalidated) {
|
|
249
|
+
// if the screen was already deleted by React, its config was already removed
|
|
250
|
+
// so we don't trigger the method
|
|
249
251
|
return;
|
|
250
252
|
}
|
|
251
253
|
auto *screenView = static_cast<RNSScreenView *>(viewController.view);
|
|
@@ -1313,7 +1315,7 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
1313
1315
|
- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
|
|
1314
1316
|
{
|
|
1315
1317
|
RNSScreenView *screenChildComponent = (RNSScreenView *)childComponentView;
|
|
1316
|
-
[screenChildComponent.controller
|
|
1318
|
+
[screenChildComponent.controller addSnapshotToView];
|
|
1317
1319
|
|
|
1318
1320
|
RCTAssert(screenChildComponent.reactSuperview == self,
|
|
1319
1321
|
@"Attempt to unmount a view which is mounted inside different view. (parent: %@, child: %@, index: %@)",
|
|
@@ -1330,7 +1332,10 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
1330
1332
|
@([[_reactSubviews objectAtIndex:index] tag]));
|
|
1331
1333
|
screenChildComponent.reactSuperview = nil;
|
|
1332
1334
|
[_reactSubviews removeObject:screenChildComponent];
|
|
1333
|
-
|
|
1335
|
+
|
|
1336
|
+
if (screenChildComponent.window == nil) {
|
|
1337
|
+
[screenChildComponent removeFromSuperview];
|
|
1338
|
+
}
|
|
1334
1339
|
}
|
|
1335
1340
|
|
|
1336
1341
|
- (void)mountingTransactionWillMount:(const facebook::react::MountingTransaction &)transaction
|
|
@@ -7,6 +7,15 @@ namespace react = facebook::react;
|
|
|
7
7
|
|
|
8
8
|
@implementation RNSFormSheetContentWrapperComponentView
|
|
9
9
|
|
|
10
|
+
- (instancetype)initWithFrame:(CGRect)frame
|
|
11
|
+
{
|
|
12
|
+
if (self = [super initWithFrame:frame]) {
|
|
13
|
+
static const auto defaultProps = std::make_shared<const react::RNSFormSheetContentWrapperProps>();
|
|
14
|
+
_props = defaultProps;
|
|
15
|
+
}
|
|
16
|
+
return self;
|
|
17
|
+
}
|
|
18
|
+
|
|
10
19
|
#pragma mark - RCTComponentViewProtocol
|
|
11
20
|
|
|
12
21
|
+ (react::ComponentDescriptorProvider)componentDescriptorProvider
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import "RNSReactBaseView.h"
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Backing native view for the experimental, iOS-only `ScrollToTopGuard` component. It wraps its
|
|
9
|
+
* children and attaches an `RNSScrollToTopGuardGestureRecognizer` to itself on OS versions where
|
|
10
|
+
* the system "scroll to top" navigation-bar interaction exists (iPadOS 26+, iPhone iOS 27+), so
|
|
11
|
+
* that tapping the wrapped content does not scroll the underlying scroll view to top.
|
|
12
|
+
*/
|
|
13
|
+
@interface RNSScrollToTopGuard : RNSReactBaseView
|
|
14
|
+
|
|
15
|
+
@end
|
|
16
|
+
|
|
17
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#import "RNSScrollToTopGuard.h"
|
|
2
|
+
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
3
|
+
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
4
|
+
#import <react/renderer/components/rnscreens/Props.h>
|
|
5
|
+
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
6
|
+
#import "RNSDefines.h"
|
|
7
|
+
#import "RNSScrollToTopGuardGestureRecognizer.h"
|
|
8
|
+
|
|
9
|
+
namespace react = facebook::react;
|
|
10
|
+
|
|
11
|
+
@implementation RNSScrollToTopGuard
|
|
12
|
+
|
|
13
|
+
- (instancetype)initWithFrame:(CGRect)frame
|
|
14
|
+
{
|
|
15
|
+
if (self = [super initWithFrame:frame]) {
|
|
16
|
+
[self initState];
|
|
17
|
+
}
|
|
18
|
+
return self;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
- (void)initState
|
|
22
|
+
{
|
|
23
|
+
static const auto defaultProps = std::make_shared<const react::RNSScrollToTopGuardProps>();
|
|
24
|
+
_props = defaultProps;
|
|
25
|
+
|
|
26
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
27
|
+
// Attach the guard once on mount, only on OS versions where the system scroll-to-top
|
|
28
|
+
// interaction exists. On other versions this view is a plain passthrough.
|
|
29
|
+
if ([RNSScrollToTopGuardGestureRecognizer shouldGuardScrollToTop]) {
|
|
30
|
+
[RNSScrollToTopGuardGestureRecognizer applyToView:self];
|
|
31
|
+
}
|
|
32
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
+ (react::ComponentDescriptorProvider)componentDescriptorProvider
|
|
36
|
+
{
|
|
37
|
+
return react::concreteComponentDescriptorProvider<react::RNSScrollToTopGuardComponentDescriptor>();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#pragma mark - Dynamic frameworks support
|
|
41
|
+
|
|
42
|
+
// Needed because of this: https://github.com/facebook/react-native/pull/37274
|
|
43
|
+
#ifdef RCT_DYNAMIC_FRAMEWORKS
|
|
44
|
+
+ (void)load
|
|
45
|
+
{
|
|
46
|
+
[super load];
|
|
47
|
+
}
|
|
48
|
+
#endif // RCT_DYNAMIC_FRAMEWORKS
|
|
49
|
+
|
|
50
|
+
@end
|
|
51
|
+
|
|
52
|
+
#pragma mark - View class exposure
|
|
53
|
+
|
|
54
|
+
Class<RCTComponentViewProtocol> RNSScrollToTopGuardCls(void)
|
|
55
|
+
{
|
|
56
|
+
return RNSScrollToTopGuard.class;
|
|
57
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import <UIKit/UIKit.h>
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* This gesture recognizer is necessary to handle views placed in the navigation bar area on OS
|
|
9
|
+
* versions where the system triggers "scroll to top" by tapping that area (iPadOS 26+ and iPhone
|
|
10
|
+
* iOS 27+). Otherwise, tapping such a view results in a scroll to top action even if there is a
|
|
11
|
+
* pressable inside it.
|
|
12
|
+
*/
|
|
13
|
+
@interface RNSScrollToTopGuardGestureRecognizer : UITapGestureRecognizer <UIGestureRecognizerDelegate>
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Returns YES on OS versions / device idioms where the system scroll-to-top-on-header interaction
|
|
17
|
+
* exists (iPad: iOS 26+, iPhone: iOS 27+); NO otherwise.
|
|
18
|
+
*/
|
|
19
|
+
+ (BOOL)shouldGuardScrollToTop;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates the scroll to top guard gesture recognizer and adds it to the given view.
|
|
23
|
+
*/
|
|
24
|
+
+ (void)applyToView:(UIView *)view;
|
|
25
|
+
|
|
26
|
+
@end
|
|
27
|
+
|
|
28
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#import "RNSScrollToTopGuardGestureRecognizer.h"
|
|
2
|
+
#import "RNSDefines.h"
|
|
3
|
+
|
|
4
|
+
@implementation RNSScrollToTopGuardGestureRecognizer
|
|
5
|
+
|
|
6
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
7
|
+
|
|
8
|
+
- (instancetype)init
|
|
9
|
+
{
|
|
10
|
+
if (self = [super initWithTarget:self action:nil]) {
|
|
11
|
+
self.cancelsTouchesInView = NO;
|
|
12
|
+
self.delegate = self;
|
|
13
|
+
}
|
|
14
|
+
return self;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
#pragma mark - UIGestureRecognizerDelegate
|
|
18
|
+
|
|
19
|
+
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
|
|
20
|
+
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
|
21
|
+
{
|
|
22
|
+
return YES;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
|
|
26
|
+
shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
|
27
|
+
{
|
|
28
|
+
// We want to target tap gesture recognizers only (one responsible for scroll to top must be one).
|
|
29
|
+
if (![otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
|
|
30
|
+
return NO;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// We don't know the exact recognizer responsible for scroll to top so we block all
|
|
34
|
+
// gesture recognizers above us.
|
|
35
|
+
return ![otherGestureRecognizer.view isDescendantOfView:gestureRecognizer.view];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#pragma mark - Class methods
|
|
39
|
+
|
|
40
|
+
+ (BOOL)shouldGuardScrollToTop
|
|
41
|
+
{
|
|
42
|
+
// The system scroll-to-top-on-header interaction has been present on iPadOS since iOS 26...
|
|
43
|
+
if (@available(iOS 26.0, *)) {
|
|
44
|
+
if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
|
|
45
|
+
return YES;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// ...and was extended to iPhone in iOS 27.
|
|
49
|
+
if (@available(iOS 27.0, *)) {
|
|
50
|
+
if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
|
|
51
|
+
return YES;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return NO;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
+ (void)applyToView:(nonnull UIView *)view
|
|
58
|
+
{
|
|
59
|
+
[view addGestureRecognizer:[RNSScrollToTopGuardGestureRecognizer new]];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
63
|
+
|
|
64
|
+
@end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import <Foundation/Foundation.h>
|
|
4
|
+
#import "RNSSplitAppearanceCoordinator.h"
|
|
5
|
+
|
|
6
|
+
@class RNSSplitHostComponentView;
|
|
7
|
+
@class RNSSplitHostController;
|
|
8
|
+
|
|
9
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @brief - Class responsible for applying all upcoming updates to SplitView.
|
|
13
|
+
*
|
|
14
|
+
* This class is synchronizing UISplitViewController configuration props which are affecting the SplitView appearance
|
|
15
|
+
* with props passed to RNSSplitHostComponentView from the ElementTree.
|
|
16
|
+
*/
|
|
17
|
+
@interface RNSSplitAppearanceApplicator : NSObject
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @brief Function responsible for applying all updates to SplitView in correct order
|
|
21
|
+
*
|
|
22
|
+
* It requests calling proper callbacks with batched SplitView updates on the AppearanceCoordinator object
|
|
23
|
+
*
|
|
24
|
+
* @param splitHost The view representing JS component which is sending updates.
|
|
25
|
+
* @param splitHostController The controller associated with the SplitView component which receives updates and
|
|
26
|
+
* manages the native layer.
|
|
27
|
+
* @param appearanceCoordinator The coordinator which is checking whether the update needs to be applied and if so, it
|
|
28
|
+
* executes the callback passed by this class.
|
|
29
|
+
*/
|
|
30
|
+
- (void)updateAppearanceIfNeeded:(RNSSplitHostComponentView *)splitHost
|
|
31
|
+
splitHostController:(RNSSplitHostController *)splitHostController
|
|
32
|
+
appearanceCoordinator:(RNSSplitAppearanceCoordinator *)appearanceCoordinator;
|
|
33
|
+
|
|
34
|
+
@end
|
|
35
|
+
|
|
36
|
+
NS_ASSUME_NONNULL_END
|