react-native-screens 5.0.0-alpha.3 → 5.0.0-alpha.4
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 +0 -4
- package/android/build.gradle +1 -0
- package/android/consumer-rules.pro +3 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderConfigViewGroup.kt +2 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledHeaderSubviewViewGroup.kt +2 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/legacy/FabricEnabledViewGroup.kt +18 -3
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +7 -3
- package/android/src/main/java/com/swmansion/rnscreens/common/colorscheme/ColorSchemeCoordinator.kt +11 -1
- package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +9 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetAppearanceCoordinator.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetBehaviorController.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetDimensionsCoordinator.kt +6 -6
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetKeyboardCoordinator.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetNativeDismissCoordinator.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetAvailableHeightProvider.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetContainer.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialog.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native/core → core/modals/formsheet/dialog}/FormSheetDialogManager.kt +26 -8
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeDelegate.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetContentSizeChangeProvider.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/interfaces/FormSheetDialogEventEmitter.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetConfig.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/model/FormSheetDetents.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetAnimatorFactory.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetDimmingManager.kt +6 -18
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetDismissalOrigin.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentation.kt +10 -10
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationManager.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationState.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetStackRegistry.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/ext/FragmentManagerExt.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/helpers/FragmentManagerHelper.kt +0 -3
- package/android/src/main/java/com/swmansion/rnscreens/helpers/NoTintDrawable.kt +31 -0
- package/android/src/main/java/com/swmansion/rnscreens/helpers/ViewFinder.kt +0 -17
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +29 -2
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenContainer.kt +35 -3
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +13 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderConfig.kt +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackHeaderSubviewManager.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackViewManager.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/DimmingView.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/stack/views/ScreensCoordinatorLayout.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapper.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/contentwrapper/FormSheetContentWrapperViewManager.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDetentChangedEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidAppearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDidDisappearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetDismissEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetNativeDismissPreventedEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetSyncFlushEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillAppearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/event/FormSheetWillDisappearEvent.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetContentView.kt +3 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHost.kt +5 -3
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostEventEmitter.kt +11 -11
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostViewManager.kt +10 -10
- package/android/src/main/java/com/swmansion/rnscreens/safearea/OnInterfaceInsetsChangeListener.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaProvider.kt +8 -8
- package/android/src/main/java/com/swmansion/rnscreens/safearea/SafeAreaView.kt +3 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +0 -52
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +112 -59
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderToolbar.kt +74 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +4 -73
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +5 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +0 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +3 -7
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperation.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/FragmentOperationExecutor.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +57 -19
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerDelegate.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainerUpdateCoordinator.kt +5 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +14 -5
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackUpdateBatchStateProviding.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/PreventNativeDismissCallback.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +33 -12
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceApplicator.kt +106 -10
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +44 -3
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceModel.kt +3 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/CustomBottomNavigationView.kt +21 -1
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +28 -13
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainerDelegate.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +12 -2
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +41 -17
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenDelegate.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIcon.kt +82 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenIconTinting.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenViewManager.kt +26 -19
- package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +14 -7
- package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +22 -6
- package/ios/RNSEnums.h +14 -1
- package/ios/helpers/image/RNSImageLoadingHelper.h +7 -0
- package/ios/helpers/image/RNSImageLoadingHelper.mm +9 -0
- package/ios/legacy/RNSBarButtonItem.mm +15 -0
- package/ios/legacy/RNSConvert.h +6 -0
- package/ios/legacy/RNSConvert.mm +17 -0
- package/ios/legacy/RNSNavigationBar.h +31 -0
- package/ios/legacy/RNSNavigationBar.mm +15 -0
- package/ios/legacy/RNSScreen.mm +122 -12
- package/ios/legacy/RNSScreenContentWrapper.mm +4 -1
- package/ios/legacy/RNSScreenStack.mm +202 -15
- package/ios/legacy/RNSScreenStackHeaderConfig.h +30 -0
- package/ios/legacy/RNSScreenStackHeaderConfig.mm +70 -17
- package/ios/legacy/RNSScreenStackHeaderSubview.mm +33 -0
- package/ios/safe-area/RNSSafeAreaViewComponentView.mm +1 -12
- package/ios/stack/conversion/RNSConversions-Stack.h +30 -0
- package/ios/stack/conversion/RNSConversions-Stack.mm +79 -0
- package/ios/stack/header/RNSHeaderItemVisibilityPriority.h +9 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +4 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +40 -6
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +5 -0
- package/ios/stack/header/RNSStackHeaderContentFactory.mm +3 -0
- package/ios/stack/header/RNSStackHeaderItemComponentView.h +9 -2
- package/ios/stack/header/RNSStackHeaderItemComponentView.mm +57 -3
- package/ios/stack/header/RNSStackHeaderItemDataProviding.h +5 -0
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +13 -0
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +24 -0
- package/ios/stack/header/RNSStackHeaderMenuFinder.h +8 -1
- package/ios/stack/header/RNSStackHeaderMenuFinder.mm +26 -9
- package/ios/stack/screen/RNSStackScreenComponentView.h +2 -1
- package/ios/stack/screen/RNSStackScreenComponentView.mm +23 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +81 -8
- package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +79 -16
- package/ios/tabs/RNSTabBarItemCoordinator.h +16 -0
- package/ios/tabs/RNSTabBarItemCoordinator.mm +143 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h +24 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm +22 -0
- package/ios/tabs/conversion/RNSConversions-Tabs.h +22 -0
- package/ios/tabs/conversion/RNSConversions-Tabs.mm +97 -3
- package/ios/tabs/host/RNSTabBarController.h +16 -0
- package/ios/tabs/host/RNSTabBarController.mm +516 -107
- package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
- package/ios/tabs/host/RNSTabsHostComponentView.mm +32 -2
- package/ios/tabs/screen/RNSTabsScreenComponentView.h +21 -0
- package/ios/tabs/screen/RNSTabsScreenComponentView.mm +54 -69
- package/ios/tabs/screen/RNSTabsScreenViewController.mm +1 -0
- package/ios/utils/RNSDefines.h +12 -7
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +3 -2
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +8 -3
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.js +17 -0
- package/lib/commonjs/components/stack/header/StackHeaderConfig.js.map +1 -0
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.js +8 -1
- package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.web.js +0 -2
- package/lib/commonjs/components/stack/host/StackHost.web.js.map +1 -1
- package/lib/commonjs/components/stack/index.js.map +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js +2 -0
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/commonjs/components/tabs/host/{TabsHost.web.js → TabsHost.js} +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.js.map +1 -0
- package/lib/commonjs/components/tabs/index.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.js +3 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.android.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js +10 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.ios.js.map +1 -1
- package/lib/commonjs/components/tabs/screen/{TabsScreen.web.js → TabsScreen.js} +1 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.js.map +1 -0
- package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js → tabs/screen/TabsScreenIcon.types.js} +1 -1
- package/lib/commonjs/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.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/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.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 +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackItem.js +31 -11
- package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.android.js +4 -3
- package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js +9 -4
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.js +10 -0
- package/lib/module/components/stack/header/StackHeaderConfig.js.map +1 -0
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +4 -1
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.js +9 -2
- package/lib/module/components/stack/host/StackHost.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.web.js +0 -3
- package/lib/module/components/stack/host/StackHost.web.js.map +1 -1
- package/lib/module/components/stack/index.js.map +1 -1
- package/lib/module/components/tabs/host/TabsHost.ios.js +2 -0
- package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/{src/components/tabs/host/TabsHost.web.tsx → lib/module/components/tabs/host/TabsHost.js} +1 -2
- package/lib/module/components/tabs/host/TabsHost.js.map +1 -0
- package/lib/module/components/tabs/index.js.map +1 -1
- package/lib/module/components/tabs/screen/TabsScreen.android.js +3 -1
- package/lib/module/components/tabs/screen/TabsScreen.android.js.map +1 -1
- package/lib/module/components/tabs/screen/TabsScreen.ios.js +10 -1
- package/lib/module/components/tabs/screen/TabsScreen.ios.js.map +1 -1
- package/{src/components/tabs/screen/TabsScreen.web.tsx → lib/module/components/tabs/screen/TabsScreen.js} +1 -2
- package/lib/module/components/tabs/screen/TabsScreen.js.map +1 -0
- package/lib/module/components/tabs/screen/TabsScreenIcon.types.js +2 -0
- package/lib/module/components/{stack/header/StackHeaderConfig.d.js.map → tabs/screen/TabsScreenIcon.types.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/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.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 +1 -1
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackItem.js +31 -11
- package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts +6 -3
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +4 -3
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts +8 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.d.ts.map +1 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts +6 -3
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +137 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +2 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +5 -0
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.types.d.ts +24 -1
- package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.web.d.ts +1 -3
- package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
- package/lib/typescript/components/stack/index.d.ts +4 -3
- package/lib/typescript/components/stack/index.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.d.ts +5 -0
- package/lib/typescript/components/tabs/host/TabsHost.d.ts.map +1 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +56 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/index.d.ts +4 -6
- package/lib/typescript/components/tabs/index.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.android.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts +42 -7
- package/lib/typescript/components/tabs/screen/TabsScreen.android.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.d.ts +5 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts +78 -13
- package/lib/typescript/components/tabs/screen/TabsScreen.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts +91 -0
- package/lib/typescript/components/tabs/screen/TabsScreenIcon.types.d.ts.map +1 -0
- package/lib/typescript/components/tabs/screen/index.d.ts +1 -0
- package/lib/typescript/components/tabs/screen/index.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -0
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +4 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +6 -0
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +3 -0
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +6 -0
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +10 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts +25 -0
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +4 -0
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
- package/lib/typescript/legacy/types.d.ts +30 -0
- package/lib/typescript/legacy/types.d.ts.map +1 -1
- package/package.json +4 -2
- package/src/components/stack/header/StackHeaderConfig.android.tsx +6 -20
- package/src/components/stack/header/StackHeaderConfig.android.types.ts +4 -3
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +10 -16
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +148 -2
- package/src/components/stack/header/StackHeaderConfig.tsx +12 -0
- package/src/components/stack/header/StackHeaderConfig.types.ts +2 -0
- package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +9 -1
- package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +5 -0
- package/src/components/stack/host/StackHost.tsx +10 -3
- package/src/components/stack/host/StackHost.types.ts +25 -1
- package/src/components/stack/host/StackHost.web.tsx +1 -4
- package/src/components/stack/index.ts +9 -1
- package/src/components/tabs/host/TabsHost.ios.tsx +2 -0
- package/src/components/tabs/host/TabsHost.ios.types.ts +60 -0
- package/src/components/tabs/host/TabsHost.tsx +7 -0
- package/src/components/tabs/index.ts +9 -0
- package/src/components/tabs/screen/TabsScreen.android.tsx +8 -3
- package/src/components/tabs/screen/TabsScreen.android.types.ts +42 -7
- package/src/components/tabs/screen/TabsScreen.ios.tsx +22 -5
- package/src/components/tabs/screen/TabsScreen.ios.types.ts +79 -17
- package/src/components/tabs/screen/TabsScreen.tsx +7 -0
- package/src/components/tabs/screen/TabsScreenIcon.types.ts +117 -0
- package/src/components/tabs/screen/index.ts +1 -0
- package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -0
- package/src/fabric/legacy/ScreenStackNativeComponent.ts +2 -0
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +11 -0
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +11 -0
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +7 -0
- package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +9 -0
- package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +20 -2
- package/src/legacy/components/ScreenStackItem.tsx +59 -12
- package/src/legacy/types.ts +31 -0
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenModalFragment.kt +0 -281
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogRootView.kt +0 -104
- package/android/src/main/java/com/swmansion/rnscreens/legacy/bottomsheet/BottomSheetDialogScreen.kt +0 -26
- package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js +0 -10
- package/lib/commonjs/components/stack/header/StackHeaderConfig.web.js.map +0 -1
- package/lib/commonjs/components/tabs/host/TabsHost.d.js +0 -2
- package/lib/commonjs/components/tabs/host/TabsHost.d.js.map +0 -1
- package/lib/commonjs/components/tabs/host/TabsHost.web.js.map +0 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.d.js +0 -2
- package/lib/commonjs/components/tabs/screen/TabsScreen.d.js.map +0 -1
- package/lib/commonjs/components/tabs/screen/TabsScreen.web.js.map +0 -1
- package/lib/module/components/stack/header/StackHeaderConfig.d.js +0 -2
- package/lib/module/components/stack/header/StackHeaderConfig.web.js +0 -4
- package/lib/module/components/stack/header/StackHeaderConfig.web.js.map +0 -1
- package/lib/module/components/tabs/host/TabsHost.d.js +0 -2
- package/lib/module/components/tabs/host/TabsHost.d.js.map +0 -1
- package/lib/module/components/tabs/host/TabsHost.web.js +0 -4
- package/lib/module/components/tabs/host/TabsHost.web.js.map +0 -1
- package/lib/module/components/tabs/screen/TabsScreen.d.js +0 -2
- package/lib/module/components/tabs/screen/TabsScreen.d.js.map +0 -1
- package/lib/module/components/tabs/screen/TabsScreen.web.js +0 -4
- package/lib/module/components/tabs/screen/TabsScreen.web.js.map +0 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +0 -7
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +0 -1
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +0 -7
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +0 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +0 -7
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +0 -1
- package/src/components/stack/header/StackHeaderConfig.d.ts +0 -22
- package/src/components/stack/header/StackHeaderConfig.web.tsx +0 -5
- package/src/components/tabs/host/TabsHost.d.ts +0 -12
- package/src/components/tabs/screen/TabsScreen.d.ts +0 -12
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
#if defined(__cplusplus)
|
|
4
4
|
#import <React/RCTConvert.h>
|
|
5
5
|
#endif // __cplusplus
|
|
6
|
+
#import "RNSDefines.h"
|
|
6
7
|
#import "RNSReactBaseView.h"
|
|
7
8
|
#import "RNSScreen.h"
|
|
8
9
|
#import "RNSScreenStackHeaderSubview.h"
|
|
@@ -58,6 +59,17 @@ NS_ASSUME_NONNULL_END
|
|
|
58
59
|
animated:(BOOL)animated
|
|
59
60
|
withConfig:(nonnull RNSScreenStackHeaderConfig *)config;
|
|
60
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Returns `YES` when screens in the legacy stack are always laid out under the navigation bar
|
|
64
|
+
* (`edgesForExtendedLayout = UIRectEdgeAll`), also when the header is opaque. In that case the content is inset below
|
|
65
|
+
* an opaque bar by the `SafeAreaView` rendered by `ScreenStackItem` (JS) and the screen's origin in the navigation
|
|
66
|
+
* controller's view is always 0. Otherwise (iOS < 26, tvOS, visionOS) a screen with a visible, opaque header is laid
|
|
67
|
+
* out below the bar (`UIRectEdgeAll - UIRectEdgeTop`).
|
|
68
|
+
*
|
|
69
|
+
* Keep in sync with `getSafeAreaEdges` in `src/legacy/components/ScreenStackItem.tsx`.
|
|
70
|
+
*/
|
|
71
|
+
+ (BOOL)screensExtendUnderOpaqueNavigationBar;
|
|
72
|
+
|
|
61
73
|
/**
|
|
62
74
|
* Returns true iff subview of given `type` is present.
|
|
63
75
|
*
|
|
@@ -99,6 +111,24 @@ NS_ASSUME_NONNULL_END
|
|
|
99
111
|
*/
|
|
100
112
|
- (void)updateHeaderStateInShadowTreeInContextOfNavigationBar:(nullable UINavigationBar *)navBar;
|
|
101
113
|
|
|
114
|
+
/**
|
|
115
|
+
* Requests `updateViewControllerIfNeeded` to be called once, after the current
|
|
116
|
+
* mounting transaction finishes. Use this instead of calling `updateViewControllerIfNeeded`
|
|
117
|
+
* directly from subviews, so that a single transaction updating several subviews
|
|
118
|
+
* re-applies the config only once, with all subviews already updated.
|
|
119
|
+
*/
|
|
120
|
+
- (void)setNeedsViewControllerUpdate;
|
|
121
|
+
|
|
122
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
123
|
+
/**
|
|
124
|
+
* Requests layout of all header subviews attached to the view hierarchy. Header subview updates its state in shadow
|
|
125
|
+
* tree when it is laid out, therefore this method should be called when `navBar` lays out its subviews - the header
|
|
126
|
+
* subviews are laid out later in the same layout pass, after UIKit has positioned the content of the navigation bar.
|
|
127
|
+
* When the content of `navBar` is moved out of the bar (bar minimization on iOS 27+) this method does nothing.
|
|
128
|
+
*/
|
|
129
|
+
- (void)setNeedsLayoutForHeaderSubviewsInNavigationBar:(nonnull UINavigationBar *)navBar;
|
|
130
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
131
|
+
|
|
102
132
|
@end
|
|
103
133
|
|
|
104
134
|
#pragma mark - Experimental
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
14
14
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
15
15
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
16
|
-
#import <react/utils/ManagedObjectWrapper.h>
|
|
17
16
|
#import <react/renderer/components/rnscreens/legacy/RNSScreenStackHeaderConfigComponentDescriptor.h>
|
|
17
|
+
#import <react/utils/ManagedObjectWrapper.h>
|
|
18
18
|
#import "RCTImageComponentView+RNSScreenStackHeaderConfig.h"
|
|
19
19
|
#import "RNSBackBarButtonItem.h"
|
|
20
20
|
#import "RNSBarButtonItem.h"
|
|
@@ -58,6 +58,9 @@ static const NSNumber *const DEFAULT_TITLE_LARGE_FONT_SIZE = @34;
|
|
|
58
58
|
/// Whether a react subview has been added / removed in current transaction. This flag is reset after each react
|
|
59
59
|
/// transaction via RCTMountingTransactionObserving protocol.
|
|
60
60
|
bool _addedReactSubviewsInCurrentTransaction;
|
|
61
|
+
/// Whether a react subview requested the config to be re-applied in current transaction.
|
|
62
|
+
/// Consumed & reset in `mountingTransactionDidMount:withSurfaceTelemetry:`.
|
|
63
|
+
bool _needsViewControllerUpdateInCurrentTransaction;
|
|
61
64
|
RCTImageLoader *_imageLoader;
|
|
62
65
|
}
|
|
63
66
|
|
|
@@ -69,6 +72,7 @@ static const NSNumber *const DEFAULT_TITLE_LARGE_FONT_SIZE = @34;
|
|
|
69
72
|
_show = YES;
|
|
70
73
|
_translucent = NO;
|
|
71
74
|
_addedReactSubviewsInCurrentTransaction = false;
|
|
75
|
+
_needsViewControllerUpdateInCurrentTransaction = false;
|
|
72
76
|
_lastSendState = react::RNSScreenStackHeaderConfigState(react::Size{}, react::EdgeInsets{}, react::Point{});
|
|
73
77
|
[self initProps];
|
|
74
78
|
}
|
|
@@ -157,11 +161,18 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
157
161
|
}
|
|
158
162
|
}
|
|
159
163
|
|
|
164
|
+
- (void)setNeedsViewControllerUpdate
|
|
165
|
+
{
|
|
166
|
+
_needsViewControllerUpdateInCurrentTransaction = true;
|
|
167
|
+
}
|
|
168
|
+
|
|
160
169
|
- (void)layoutNavigationControllerView
|
|
161
170
|
{
|
|
162
|
-
// We need to layout navigation controller view after translucent prop changes
|
|
163
|
-
//
|
|
164
|
-
//
|
|
171
|
+
// We need to layout navigation controller view after `translucent` / `hidden` prop changes. Below iOS 26 the frame
|
|
172
|
+
// of RNSScreen depends on them (`edgesForExtendedLayout`), so without the layout pass the screen content would
|
|
173
|
+
// remain the same size (https://github.com/software-mansion/react-native-screens/issues/1158). On iOS 26+ the frame
|
|
174
|
+
// does not change, but the layout pass still refreshes the header layout info in the shadow tree and the safe area
|
|
175
|
+
// insets consumed by the `SafeAreaView` rendered by `ScreenStackItem`.
|
|
165
176
|
UIViewController *vc = _screenView.controller;
|
|
166
177
|
UINavigationController *navctr = vc.navigationController;
|
|
167
178
|
[navctr.view setNeedsLayout];
|
|
@@ -194,17 +205,10 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
194
205
|
return;
|
|
195
206
|
}
|
|
196
207
|
|
|
208
|
+
// Screen's content offset in shadow tree matches its actual native origin (see `-[RNSScreenView updateBounds]`),
|
|
209
|
+
// therefore navigation bar's frame in screen's coordinate space can be used directly.
|
|
197
210
|
CGRect navBarFrameInScreenView = [navigationBar convertRect:navigationBar.bounds toView:_screenView];
|
|
198
211
|
|
|
199
|
-
// On iOS 26+ in landscape mode there is a bug with `edgesForExtendedLayout` for non-transparent
|
|
200
|
-
// header. We're applying SAV to fix it but we need to take it into account for HeaderConfig's
|
|
201
|
-
// origin as well.
|
|
202
|
-
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
203
|
-
if (!_translucent && self.shouldHeaderBeVisible) {
|
|
204
|
-
navBarFrameInScreenView.origin.y -= _screenView.safeAreaInsets.top;
|
|
205
|
-
}
|
|
206
|
-
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
207
|
-
|
|
208
212
|
[self updateShadowStateWithSize:navigationBar.frame.size
|
|
209
213
|
edgeInsets:[self computeEdgeInsetsOfNavigationBar:navigationBar]
|
|
210
214
|
frameOrigin:navBarFrameInScreenView.origin];
|
|
@@ -213,6 +217,24 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
213
217
|
}
|
|
214
218
|
}
|
|
215
219
|
|
|
220
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
221
|
+
- (void)setNeedsLayoutForHeaderSubviewsInNavigationBar:(nonnull UINavigationBar *)navigationBar
|
|
222
|
+
{
|
|
223
|
+
// During the bar minimization (iOS 27+) UIKit moves the content view of the navigation bar above the bar, on each
|
|
224
|
+
// frame of the scroll. The header subviews are not visible then, therefore we do not follow their position, to
|
|
225
|
+
// avoid state update on each frame. When the bar is restored, its content view is back at the origin of the bar.
|
|
226
|
+
if (CGRectGetMinY(navigationBar.rnscreens_findContentView.frame) < 0) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
for (RNSScreenStackHeaderSubview *subview in self.reactSubviews) {
|
|
231
|
+
if (subview.window != nil) {
|
|
232
|
+
[subview setNeedsLayout];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
237
|
+
|
|
216
238
|
- (NSDirectionalEdgeInsets)computeEdgeInsetsOfNavigationBar:(nonnull UINavigationBar *)navigationBar
|
|
217
239
|
{
|
|
218
240
|
NSDirectionalEdgeInsets navBarMargins = [navigationBar directionalLayoutMargins];
|
|
@@ -353,6 +375,18 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
353
375
|
return nil;
|
|
354
376
|
}
|
|
355
377
|
|
|
378
|
+
+ (BOOL)screensExtendUnderOpaqueNavigationBar
|
|
379
|
+
{
|
|
380
|
+
#if TARGET_OS_TV || TARGET_OS_VISION
|
|
381
|
+
return NO;
|
|
382
|
+
#else // TARGET_OS_TV || TARGET_OS_VISION
|
|
383
|
+
if (@available(iOS 26.0, *)) {
|
|
384
|
+
return YES;
|
|
385
|
+
}
|
|
386
|
+
return NO;
|
|
387
|
+
#endif // TARGET_OS_TV || TARGET_OS_VISION
|
|
388
|
+
}
|
|
389
|
+
|
|
356
390
|
+ (void)willShowViewController:(UIViewController *)vc
|
|
357
391
|
animated:(BOOL)animated
|
|
358
392
|
withConfig:(RNSScreenStackHeaderConfig *)config
|
|
@@ -494,12 +528,16 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
494
528
|
BOOL wasHidden = navctr.navigationBarHidden;
|
|
495
529
|
BOOL shouldHide = config == nil || !config.shouldHeaderBeVisible;
|
|
496
530
|
|
|
497
|
-
if (!shouldHide && !config.translucent) {
|
|
498
|
-
//
|
|
499
|
-
// the screen underneath navigation controllers
|
|
531
|
+
if (!shouldHide && !config.translucent && ![self screensExtendUnderOpaqueNavigationBar]) {
|
|
532
|
+
// When nav bar is not translucent we change edgesForExtendedLayout to avoid system laying out
|
|
533
|
+
// the screen underneath navigation controllers.
|
|
500
534
|
vc.edgesForExtendedLayout = UIRectEdgeAll - UIRectEdgeTop;
|
|
501
535
|
} else {
|
|
502
|
-
//
|
|
536
|
+
// System default is UIRectEdgeAll - the screen is laid out under the navigation bar.
|
|
537
|
+
// On iOS 26+ this is also the case for an opaque header: UIKit does not reliably lay out the screen right below
|
|
538
|
+
// the bar when the top edge is excluded (it ignores the bar's origin offset, e.g. in landscape or on iPhone Duo),
|
|
539
|
+
// so we let the screen extend under the bar and inset the content with the `SafeAreaView` rendered by
|
|
540
|
+
// `ScreenStackItem`. See https://github.com/software-mansion/react-native-screens-labs/issues/1841
|
|
503
541
|
vc.edgesForExtendedLayout = UIRectEdgeAll;
|
|
504
542
|
}
|
|
505
543
|
|
|
@@ -523,6 +561,16 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
523
561
|
}
|
|
524
562
|
navitem.largeTitleDisplayMode =
|
|
525
563
|
config.largeTitle ? UINavigationItemLargeTitleDisplayModeAlways : UINavigationItemLargeTitleDisplayModeNever;
|
|
564
|
+
|
|
565
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
566
|
+
if (@available(iOS 27.0, *)) {
|
|
567
|
+
// Due to native limitations related to opaque header and minimization behavior, we disable it for opaque headers.
|
|
568
|
+
UIBarMinimization *minimization = [UIBarMinimization new];
|
|
569
|
+
minimization.minimizationBehavior =
|
|
570
|
+
config.translucent ? UIBarMinimizationBehaviorAutomatic : UIBarMinimizationBehaviorNever;
|
|
571
|
+
navitem.navigationBarMinimization = minimization;
|
|
572
|
+
}
|
|
573
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
526
574
|
#endif
|
|
527
575
|
|
|
528
576
|
UINavigationBarAppearance *appearance = [self buildAppearance:vc withConfig:config];
|
|
@@ -905,8 +953,13 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
905
953
|
if (self.shouldHeaderBeVisible) {
|
|
906
954
|
[self layoutNavigationControllerView];
|
|
907
955
|
}
|
|
956
|
+
} else if (_needsViewControllerUpdateInCurrentTransaction) {
|
|
957
|
+
// Subviews (e.g. their `visibilityPriority`) changed in this transaction. Re-apply the config once,
|
|
958
|
+
// now that all of them have already received their new props.
|
|
959
|
+
[self updateViewControllerIfNeeded];
|
|
908
960
|
}
|
|
909
961
|
_addedReactSubviewsInCurrentTransaction = false;
|
|
962
|
+
_needsViewControllerUpdateInCurrentTransaction = false;
|
|
910
963
|
}
|
|
911
964
|
|
|
912
965
|
- (void)replaceNavigationBarViewsWithSnapshotOfSubview:(RNSScreenStackHeaderSubview *)childComponentView
|
|
@@ -21,6 +21,7 @@ namespace react = facebook::react;
|
|
|
21
21
|
// The cycle is cleared via `invalidateUIBarButtonItem` method, called by `invalidate` callback.
|
|
22
22
|
UIBarButtonItem *_barButtonItem;
|
|
23
23
|
BOOL _hidesSharedBackground;
|
|
24
|
+
react::RNSScreenStackHeaderSubviewVisibilityPriority _visibilityPriority;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
#pragma mark - Common
|
|
@@ -112,6 +113,7 @@ namespace react = facebook::react;
|
|
|
112
113
|
_props = defaultProps;
|
|
113
114
|
_lastScheduledFrame = CGRectZero;
|
|
114
115
|
_synchronousShadowStateUpdatesEnabled = YES;
|
|
116
|
+
_visibilityPriority = react::RNSScreenStackHeaderSubviewVisibilityPriority::Standard;
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
return self;
|
|
@@ -125,6 +127,7 @@ namespace react = facebook::react;
|
|
|
125
127
|
|
|
126
128
|
[self setType:[RNSConvert RNSScreenStackHeaderSubviewTypeFromCppEquivalent:newHeaderSubviewProps.type]];
|
|
127
129
|
[self setHidesSharedBackground:newHeaderSubviewProps.hidesSharedBackground];
|
|
130
|
+
[self setVisibilityPriority:newHeaderSubviewProps.visibilityPriority];
|
|
128
131
|
[self setSynchronousShadowStateUpdatesEnabled:newHeaderSubviewProps.synchronousShadowStateUpdatesEnabled];
|
|
129
132
|
[super updateProps:props oldProps:oldProps];
|
|
130
133
|
}
|
|
@@ -280,6 +283,17 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
280
283
|
}
|
|
281
284
|
}
|
|
282
285
|
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
286
|
+
|
|
287
|
+
// tvOS and visionOS are excluded on purpose: `visibilityPriority` exists there, but the only
|
|
288
|
+
// supported value is `standard`, which is already the default.
|
|
289
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0) && !TARGET_OS_TV && !TARGET_OS_VISION
|
|
290
|
+
if (@available(iOS 27.0, *)) {
|
|
291
|
+
if (_barButtonItem != nil) {
|
|
292
|
+
_barButtonItem.visibilityPriority =
|
|
293
|
+
[RNSConvert UIBarButtonItemVisibilityPriorityFromCppEquivalent:_visibilityPriority];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(27_0) && !TARGET_OS_TV && !TARGET_OS_VISION
|
|
283
297
|
}
|
|
284
298
|
|
|
285
299
|
- (void)setHidesSharedBackground:(BOOL)hidesSharedBackground
|
|
@@ -288,6 +302,25 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
288
302
|
[self configureBarButtonItem];
|
|
289
303
|
}
|
|
290
304
|
|
|
305
|
+
- (void)setVisibilityPriority:(react::RNSScreenStackHeaderSubviewVisibilityPriority)visibilityPriority
|
|
306
|
+
{
|
|
307
|
+
if (visibilityPriority == _visibilityPriority) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
_visibilityPriority = visibilityPriority;
|
|
312
|
+
[self configureBarButtonItem];
|
|
313
|
+
|
|
314
|
+
// Changing the priority of an item that is already in the bar is not enough:
|
|
315
|
+
// the bar only re-evaluates which items fit when it is handed its items again,
|
|
316
|
+
// which the header does whenever it re-applies its config. We defer that until
|
|
317
|
+
// the end of the mounting transaction, so that sibling subviews updated in the
|
|
318
|
+
// same transaction are taken into account & the config is re-applied only once.
|
|
319
|
+
if (_barButtonItem != nil) {
|
|
320
|
+
[[self getHeaderConfig] setNeedsViewControllerUpdate];
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
291
324
|
#pragma mark - Dynamic frameworks support
|
|
292
325
|
|
|
293
326
|
// Needed because of this: https://github.com/facebook/react-native/pull/37274
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
#import "RNSSafeAreaViewComponentView.h"
|
|
5
5
|
#import <React/RCTConversions.h>
|
|
6
|
-
#import <React/RCTUtils.h>
|
|
7
6
|
#import "RNSSafeAreaProviding.h"
|
|
8
7
|
#import "RNSSafeAreaViewNotifications.h"
|
|
9
8
|
|
|
@@ -14,8 +13,6 @@
|
|
|
14
13
|
|
|
15
14
|
namespace react = facebook::react;
|
|
16
15
|
|
|
17
|
-
static BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIEdgeInsets insets2, CGFloat threshold);
|
|
18
|
-
|
|
19
16
|
#pragma mark - View implementation
|
|
20
17
|
|
|
21
18
|
@implementation RNSSafeAreaViewComponentView {
|
|
@@ -87,7 +84,7 @@ static BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIE
|
|
|
87
84
|
|
|
88
85
|
UIEdgeInsets safeAreaInsets = _providerView.providerSafeAreaInsets;
|
|
89
86
|
|
|
90
|
-
if (
|
|
87
|
+
if (UIEdgeInsetsEqualToEdgeInsets(safeAreaInsets, _currentSafeAreaInsets)) {
|
|
91
88
|
return;
|
|
92
89
|
}
|
|
93
90
|
|
|
@@ -152,14 +149,6 @@ static BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIE
|
|
|
152
149
|
|
|
153
150
|
@end
|
|
154
151
|
|
|
155
|
-
#pragma mark - Utility functions
|
|
156
|
-
|
|
157
|
-
static BOOL UIEdgeInsetsEqualToEdgeInsetsWithThreshold(UIEdgeInsets insets1, UIEdgeInsets insets2, CGFloat threshold)
|
|
158
|
-
{
|
|
159
|
-
return ABS(insets1.left - insets2.left) <= threshold && ABS(insets1.right - insets2.right) <= threshold &&
|
|
160
|
-
ABS(insets1.top - insets2.top) <= threshold && ABS(insets1.bottom - insets2.bottom) <= threshold;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
152
|
#pragma mark - View class exposure
|
|
164
153
|
|
|
165
154
|
Class<RCTComponentViewProtocol> RNSSafeAreaView(void)
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
#if defined(__cplusplus)
|
|
4
4
|
|
|
5
5
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
6
|
+
#import "RNSDefines.h"
|
|
6
7
|
#import "RNSHeaderItemPlacement.h"
|
|
7
8
|
#import "RNSHeaderItemSpacerPlacement.h"
|
|
9
|
+
#import "RNSHeaderItemVisibilityPriority.h"
|
|
8
10
|
#import "RNSStackScreenComponentView.h"
|
|
9
11
|
|
|
10
12
|
namespace rnscreens::conversion {
|
|
@@ -23,10 +25,38 @@ RNSHeaderItemSpacerPlacement
|
|
|
23
25
|
RNSHeaderItemSpacerPlacementFromReactRNSStackHeaderItemSpacerIOSPlacement(
|
|
24
26
|
react::RNSStackHeaderItemSpacerIOSPlacement placement);
|
|
25
27
|
|
|
28
|
+
UIBarButtonItemStyle UIBarButtonItemStyleFromReactRNSStackHeaderItemIOSVariant(
|
|
29
|
+
react::RNSStackHeaderItemIOSVariant variant);
|
|
30
|
+
|
|
26
31
|
UINavigationItemBackButtonDisplayMode
|
|
27
32
|
UINavigationItemBackButtonDisplayModeFromReactRNSStackHeaderConfigIOSBackButtonDisplayMode(
|
|
28
33
|
react::RNSStackHeaderConfigIOSBackButtonDisplayMode displayMode);
|
|
29
34
|
|
|
35
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
36
|
+
|
|
37
|
+
API_AVAILABLE(ios(27.0))
|
|
38
|
+
UIBarMinimizationBehavior
|
|
39
|
+
UIBarMinimizationBehaviorFromReactRNSStackHeaderConfigIOSMinimizationBehavior(
|
|
40
|
+
react::RNSStackHeaderConfigIOSMinimizationBehavior minimizationBehavior);
|
|
41
|
+
|
|
42
|
+
API_AVAILABLE(ios(27.0))
|
|
43
|
+
UIBarMinimizationRestorationBehavior
|
|
44
|
+
UIBarMinimizationRestorationBehaviorFromReactRNSStackHeaderConfigIOSRestorationBehavior(
|
|
45
|
+
react::RNSStackHeaderConfigIOSRestorationBehavior restorationBehavior);
|
|
46
|
+
|
|
47
|
+
#endif // Check for iOS >= 27
|
|
48
|
+
|
|
49
|
+
RNSHeaderItemVisibilityPriority
|
|
50
|
+
RNSHeaderItemVisibilityPriorityFromReactRNSStackHeaderItemIOSVisibilityPriority(
|
|
51
|
+
react::RNSStackHeaderItemIOSVisibilityPriority visibilityPriority);
|
|
52
|
+
|
|
53
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0) && !TARGET_OS_TV && !TARGET_OS_VISION
|
|
54
|
+
API_AVAILABLE(ios(27.0))
|
|
55
|
+
UIBarButtonItemVisibilityPriority
|
|
56
|
+
UIBarButtonItemVisibilityPriorityFromRNSHeaderItemVisibilityPriority(
|
|
57
|
+
RNSHeaderItemVisibilityPriority visibilityPriority);
|
|
58
|
+
#endif // Check for iOS >= 27 && !TARGET_OS_TV && !TARGET_OS_VISION
|
|
59
|
+
|
|
30
60
|
}; // namespace rnscreens::conversion
|
|
31
61
|
|
|
32
62
|
#endif // defined(__cplusplus)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#import "RNSConversions-Stack.h"
|
|
2
|
+
#import "RNSDefines.h"
|
|
2
3
|
|
|
3
4
|
namespace rnscreens::conversion {
|
|
4
5
|
|
|
@@ -27,6 +28,23 @@ RNSHeaderItemPlacement RNSHeaderItemPlacementFromReactRNSStackHeaderItemIOSPlace
|
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
UIBarButtonItemStyle UIBarButtonItemStyleFromReactRNSStackHeaderItemIOSVariant(
|
|
32
|
+
react::RNSStackHeaderItemIOSVariant variant)
|
|
33
|
+
{
|
|
34
|
+
switch (variant) {
|
|
35
|
+
case react::RNSStackHeaderItemIOSVariant::Plain:
|
|
36
|
+
return UIBarButtonItemStylePlain;
|
|
37
|
+
case react::RNSStackHeaderItemIOSVariant::Prominent:
|
|
38
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
39
|
+
if (@available(iOS 26.0, *)) {
|
|
40
|
+
return UIBarButtonItemStyleProminent;
|
|
41
|
+
}
|
|
42
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
43
|
+
// Bold text look, closest counterpart of prominent style before iOS 26
|
|
44
|
+
return UIBarButtonItemStyleDone;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
30
48
|
RNSHeaderItemSpacerPlacement RNSHeaderItemSpacerPlacementFromReactRNSStackHeaderItemSpacerIOSPlacement(
|
|
31
49
|
react::RNSStackHeaderItemSpacerIOSPlacement placement)
|
|
32
50
|
{
|
|
@@ -52,4 +70,65 @@ UINavigationItemBackButtonDisplayModeFromReactRNSStackHeaderConfigIOSBackButtonD
|
|
|
52
70
|
}
|
|
53
71
|
}
|
|
54
72
|
|
|
73
|
+
|
|
74
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
75
|
+
|
|
76
|
+
UIBarMinimizationBehavior UIBarMinimizationBehaviorFromReactRNSStackHeaderConfigIOSMinimizationBehavior(
|
|
77
|
+
react::RNSStackHeaderConfigIOSMinimizationBehavior minimizationBehavior)
|
|
78
|
+
{
|
|
79
|
+
switch (minimizationBehavior) {
|
|
80
|
+
case react::RNSStackHeaderConfigIOSMinimizationBehavior::Automatic:
|
|
81
|
+
return UIBarMinimizationBehaviorAutomatic;
|
|
82
|
+
case react::RNSStackHeaderConfigIOSMinimizationBehavior::Never:
|
|
83
|
+
return UIBarMinimizationBehaviorNever;
|
|
84
|
+
case react::RNSStackHeaderConfigIOSMinimizationBehavior::OnScrollDown:
|
|
85
|
+
return UIBarMinimizationBehaviorOnScrollDown;
|
|
86
|
+
case react::RNSStackHeaderConfigIOSMinimizationBehavior::OnScrollUp:
|
|
87
|
+
return UIBarMinimizationBehaviorOnScrollUp;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
UIBarMinimizationRestorationBehavior
|
|
92
|
+
UIBarMinimizationRestorationBehaviorFromReactRNSStackHeaderConfigIOSRestorationBehavior(
|
|
93
|
+
react::RNSStackHeaderConfigIOSRestorationBehavior restorationBehavior)
|
|
94
|
+
{
|
|
95
|
+
switch (restorationBehavior) {
|
|
96
|
+
case react::RNSStackHeaderConfigIOSRestorationBehavior::Automatic:
|
|
97
|
+
return UIBarMinimizationRestorationBehaviorAutomatic;
|
|
98
|
+
case react::RNSStackHeaderConfigIOSRestorationBehavior::AtScrollEdge:
|
|
99
|
+
return UIBarMinimizationRestorationBehaviorAtScrollEdge;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
#endif // Check for iOS >= 27
|
|
104
|
+
|
|
105
|
+
RNSHeaderItemVisibilityPriority RNSHeaderItemVisibilityPriorityFromReactRNSStackHeaderItemIOSVisibilityPriority(
|
|
106
|
+
react::RNSStackHeaderItemIOSVisibilityPriority visibilityPriority)
|
|
107
|
+
{
|
|
108
|
+
switch (visibilityPriority) {
|
|
109
|
+
case react::RNSStackHeaderItemIOSVisibilityPriority::Low:
|
|
110
|
+
return RNSHeaderItemVisibilityPriorityLow;
|
|
111
|
+
case react::RNSStackHeaderItemIOSVisibilityPriority::Standard:
|
|
112
|
+
return RNSHeaderItemVisibilityPriorityStandard;
|
|
113
|
+
case react::RNSStackHeaderItemIOSVisibilityPriority::High:
|
|
114
|
+
return RNSHeaderItemVisibilityPriorityHigh;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0) && !TARGET_OS_TV && !TARGET_OS_VISION
|
|
119
|
+
API_AVAILABLE(ios(27.0))
|
|
120
|
+
UIBarButtonItemVisibilityPriority UIBarButtonItemVisibilityPriorityFromRNSHeaderItemVisibilityPriority(
|
|
121
|
+
RNSHeaderItemVisibilityPriority visibilityPriority)
|
|
122
|
+
{
|
|
123
|
+
switch (visibilityPriority) {
|
|
124
|
+
case RNSHeaderItemVisibilityPriorityLow:
|
|
125
|
+
return UIBarButtonItemVisibilityPriorityLow;
|
|
126
|
+
case RNSHeaderItemVisibilityPriorityStandard:
|
|
127
|
+
return UIBarButtonItemVisibilityPriorityStandard;
|
|
128
|
+
case RNSHeaderItemVisibilityPriorityHigh:
|
|
129
|
+
return UIBarButtonItemVisibilityPriorityHigh;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(27_0) && !TARGET_OS_TV && !TARGET_OS_VISION
|
|
133
|
+
|
|
55
134
|
}; // namespace rnscreens::conversion
|
|
@@ -23,6 +23,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
23
23
|
@property (nonatomic, readonly, nullable) NSString *largeSubtitle;
|
|
24
24
|
@property (nonatomic, readonly) BOOL largeTitleEnabled;
|
|
25
25
|
@property (nonatomic, readonly, nullable) NSString *prompt;
|
|
26
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
27
|
+
@property (nonatomic, readonly) UIBarMinimizationBehavior minimizationBehavior API_AVAILABLE(ios(27.0));
|
|
28
|
+
@property (nonatomic, readonly) UIBarMinimizationRestorationBehavior restorationBehavior API_AVAILABLE(ios(27.0));
|
|
29
|
+
#endif // Check for iOS >= 27
|
|
26
30
|
@property (nonatomic, readonly, nullable) NSString *backButtonTitle;
|
|
27
31
|
@property (nonatomic, readonly) UINavigationItemBackButtonDisplayMode backButtonDisplayMode;
|
|
28
32
|
@property (nonatomic, readonly) BOOL backButtonMenuEnabled;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#import "RNSStackHeaderConfigComponentView.h"
|
|
2
|
-
#import "RNSConversions.h"
|
|
3
2
|
#import "RNSConversions-Stack.h"
|
|
3
|
+
#import "RNSConversions.h"
|
|
4
4
|
#import "RNSImageLoadingHelper.h"
|
|
5
5
|
#import "RNSStackHeaderAppearanceMapper.h"
|
|
6
6
|
#import "RNSStackHeaderConfigEventEmitter.h"
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
#import <React/RCTLog.h>
|
|
22
22
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
23
23
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
24
|
-
#import <react/utils/ManagedObjectWrapper.h>
|
|
25
24
|
#import <react/renderer/components/rnscreens/RNSStackHeaderConfigComponentDescriptor.h>
|
|
25
|
+
#import <react/utils/ManagedObjectWrapper.h>
|
|
26
26
|
|
|
27
27
|
namespace react = facebook::react;
|
|
28
28
|
|
|
@@ -69,6 +69,12 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
69
69
|
_largeSubtitle = nil;
|
|
70
70
|
_largeTitleEnabled = NO;
|
|
71
71
|
_prompt = nil;
|
|
72
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
73
|
+
if (@available(iOS 27.0, *)) {
|
|
74
|
+
_minimizationBehavior = UIBarMinimizationBehaviorAutomatic;
|
|
75
|
+
_restorationBehavior = UIBarMinimizationRestorationBehaviorAutomatic;
|
|
76
|
+
}
|
|
77
|
+
#endif // Check for iOS >= 27
|
|
72
78
|
_backButtonTitle = nil;
|
|
73
79
|
_backButtonDisplayMode = UINavigationItemBackButtonDisplayModeDefault;
|
|
74
80
|
_backButtonMenuEnabled = YES;
|
|
@@ -305,7 +311,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
305
311
|
[static_cast<RNSStackHeaderItemComponentView *>(locator.headerItem)
|
|
306
312
|
updateMenuElementWithId:menuItemId
|
|
307
313
|
withElement:newItemData
|
|
308
|
-
parentMenu:locator.searchResult.parentMenu
|
|
314
|
+
parentMenu:locator.searchResult.parentMenu
|
|
315
|
+
inMenuRepresentation:locator.inMenuRepresentation];
|
|
309
316
|
break;
|
|
310
317
|
case RNSMenuElementPositionTitle:
|
|
311
318
|
if (locator.searchResult.parentMenu != nil) {
|
|
@@ -351,7 +358,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
351
358
|
[static_cast<RNSStackHeaderItemComponentView *>(locator.headerItem)
|
|
352
359
|
updateMenuElementWithId:menuElementId
|
|
353
360
|
withElement:newMenuItem
|
|
354
|
-
parentMenu:locator.searchResult.parentMenu
|
|
361
|
+
parentMenu:locator.searchResult.parentMenu
|
|
362
|
+
inMenuRepresentation:locator.inMenuRepresentation];
|
|
355
363
|
break;
|
|
356
364
|
case RNSMenuElementPositionTitle:
|
|
357
365
|
if (locator.searchResult.parentMenu == nil) {
|
|
@@ -443,13 +451,39 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
443
451
|
_prompt = RCTNSStringFromStringNilIfEmpty(newHeaderProps.prompt);
|
|
444
452
|
}
|
|
445
453
|
|
|
454
|
+
if (oldHeaderProps.minimizationBehavior != newHeaderProps.minimizationBehavior) {
|
|
455
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
456
|
+
if (@available(iOS 27.0, *)) {
|
|
457
|
+
_minimizationBehavior =
|
|
458
|
+
rnscreens::conversion::UIBarMinimizationBehaviorFromReactRNSStackHeaderConfigIOSMinimizationBehavior(
|
|
459
|
+
newHeaderProps.minimizationBehavior);
|
|
460
|
+
} else
|
|
461
|
+
#endif // Check for iOS >= 27
|
|
462
|
+
if (newHeaderProps.minimizationBehavior != react::RNSStackHeaderConfigIOSMinimizationBehavior::Automatic) {
|
|
463
|
+
RCTLogWarn(@"[RNScreens] minimizationBehavior is supported for iOS >= 27");
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
if (oldHeaderProps.restorationBehavior != newHeaderProps.restorationBehavior) {
|
|
468
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
469
|
+
if (@available(iOS 27.0, *)) {
|
|
470
|
+
_restorationBehavior = rnscreens::conversion::
|
|
471
|
+
UIBarMinimizationRestorationBehaviorFromReactRNSStackHeaderConfigIOSRestorationBehavior(
|
|
472
|
+
newHeaderProps.restorationBehavior);
|
|
473
|
+
} else
|
|
474
|
+
#endif // Check for iOS >= 27
|
|
475
|
+
if (newHeaderProps.restorationBehavior != react::RNSStackHeaderConfigIOSRestorationBehavior::Automatic) {
|
|
476
|
+
RCTLogWarn(@"[RNScreens] restorationBehavior is supported for iOS >= 27");
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
446
480
|
if (oldHeaderProps.backButtonTitle != newHeaderProps.backButtonTitle) {
|
|
447
481
|
_backButtonTitle = RCTNSStringFromStringNilIfEmpty(newHeaderProps.backButtonTitle);
|
|
448
482
|
}
|
|
449
483
|
|
|
450
484
|
if (oldHeaderProps.backButtonDisplayMode != newHeaderProps.backButtonDisplayMode) {
|
|
451
|
-
_backButtonDisplayMode =
|
|
452
|
-
|
|
485
|
+
_backButtonDisplayMode = rnscreens::conversion::
|
|
486
|
+
UINavigationItemBackButtonDisplayModeFromReactRNSStackHeaderConfigIOSBackButtonDisplayMode(
|
|
453
487
|
newHeaderProps.backButtonDisplayMode);
|
|
454
488
|
}
|
|
455
489
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
3
|
#import <UIKit/UIKit.h>
|
|
4
|
+
#import "RNSDefines.h"
|
|
4
5
|
|
|
5
6
|
@class RNSStackHeaderMenuData;
|
|
6
7
|
|
|
@@ -15,6 +16,10 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
15
16
|
@property (nonatomic, readonly, nullable) NSString *largeSubtitle;
|
|
16
17
|
@property (nonatomic, readonly) BOOL largeTitleEnabled;
|
|
17
18
|
@property (nonatomic, readonly, nullable) NSString *prompt;
|
|
19
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0)
|
|
20
|
+
@property (nonatomic, readonly) UIBarMinimizationBehavior minimizationBehavior API_AVAILABLE(ios(27.0));
|
|
21
|
+
@property (nonatomic, readonly) UIBarMinimizationRestorationBehavior restorationBehavior API_AVAILABLE(ios(27.0));
|
|
22
|
+
#endif // Check for iOS >= 27
|
|
18
23
|
@property (nonatomic, readonly, nullable) NSString *backButtonTitle;
|
|
19
24
|
@property (nonatomic, readonly) UINavigationItemBackButtonDisplayMode backButtonDisplayMode;
|
|
20
25
|
@property (nonatomic, readonly) BOOL backButtonMenuEnabled;
|
|
@@ -51,6 +51,9 @@
|
|
|
51
51
|
action:nil];
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
barButtonItem.style = item.style;
|
|
55
|
+
barButtonItem.enabled = !item.disabled;
|
|
56
|
+
|
|
54
57
|
if (item.icon != nil) {
|
|
55
58
|
__weak UIBarButtonItem *weakBarButtonItem = barButtonItem;
|
|
56
59
|
UIImage *syncImage = [RNSStackHeaderIconResolver resolveIcon:item.icon
|
|
@@ -16,25 +16,32 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
16
16
|
@property (nonatomic, readonly, nullable) NSString *title;
|
|
17
17
|
@property (nonatomic, readonly, nullable) RNSStackHeaderIconData *icon;
|
|
18
18
|
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *menu;
|
|
19
|
+
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *menuRepresentation;
|
|
19
20
|
@property (nonatomic, readonly, nullable) UIView *customView;
|
|
21
|
+
@property (nonatomic, readonly) UIBarButtonItemStyle style;
|
|
22
|
+
@property (nonatomic, readonly) BOOL disabled;
|
|
20
23
|
@property (nonatomic, readonly) BOOL respondsToOnPress;
|
|
21
24
|
@property (nonatomic, readonly) BOOL hidesSharedBackground;
|
|
25
|
+
@property (nonatomic, readonly) RNSHeaderItemVisibilityPriority visibilityPriority;
|
|
22
26
|
|
|
23
27
|
@property (nonatomic, nullable) NSString *titleProp;
|
|
24
28
|
@property (nonatomic, nullable) RNSStackHeaderIconData *iconProp;
|
|
25
29
|
@property (nonatomic, nullable) RNSStackHeaderMenuData *menuProp;
|
|
30
|
+
@property (nonatomic, nullable) RNSStackHeaderMenuData *menuRepresentationProp;
|
|
26
31
|
|
|
27
32
|
@property (nonatomic, weak, nullable) id<RNSStackHeaderItemInvalidationDelegate> invalidationDelegate;
|
|
28
33
|
|
|
29
34
|
- (void)emitOnPress;
|
|
30
35
|
|
|
31
36
|
/**
|
|
32
|
-
* Replaces a menu element in the item's menu tree with a new element
|
|
37
|
+
* Replaces a menu element in the item's menu or menuRepresentation tree with a new element
|
|
38
|
+
* constructed from command options.
|
|
33
39
|
* If parentMenu is nil, the element is the root menu and is replaced directly.
|
|
34
40
|
*/
|
|
35
41
|
- (void)updateMenuElementWithId:(NSString *)elementId
|
|
36
42
|
withElement:(id<RNSStackHeaderMenuElement>)newElement
|
|
37
|
-
parentMenu:(nullable RNSStackHeaderMenuData *)parentMenu
|
|
43
|
+
parentMenu:(nullable RNSStackHeaderMenuData *)parentMenu
|
|
44
|
+
inMenuRepresentation:(BOOL)inMenuRepresentation;
|
|
38
45
|
|
|
39
46
|
@end
|
|
40
47
|
|