react-native-screens 5.0.0-alpha.2 → 5.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +87 -0
- package/README.md +0 -7
- package/android/src/main/cpp/NativeProxy.cpp +30 -6
- package/android/src/main/cpp/NativeProxy.h +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/common/container/Container.kt +8 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/container/ContainerItem.kt +13 -1
- package/android/src/main/java/com/swmansion/rnscreens/common/text/ReactTextAppearance.kt +62 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearance.kt +20 -0
- package/android/src/main/java/com/swmansion/rnscreens/common/text/TextAppearanceDefaults.kt +65 -0
- package/android/src/main/java/com/swmansion/rnscreens/helpers/PropIconResolver.kt +17 -23
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetBehaviorController.kt +49 -18
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +65 -40
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +0 -6
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetAvailableHeightProvider.kt +44 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialog.kt +35 -3
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +33 -106
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/interfaces/FormSheetDialogEventEmitter.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +61 -15
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetAnimatorFactory.kt +8 -9
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDimmingManager.kt +115 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetDismissalOrigin.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentation.kt +173 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +141 -49
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationState.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetStackRegistry.kt +28 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetDismissEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/host/FormSheetHostEventEmitter.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/host/FormSheetHostViewManager.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +369 -58
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderBackPressHandler.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +143 -98
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +155 -23
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderContentScrimDrawable.kt +36 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderCollapsedTitleGravityMode.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +170 -167
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +385 -12
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +0 -4
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +32 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderDelegate.kt +0 -7
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +27 -280
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuController.kt +448 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuDelegate.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +28 -20
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuConfig.kt +3 -55
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuGroupMetadata.kt +1 -10
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuItemConfig.kt +1 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/model/StackHeaderToolbarMenuModel.kt +180 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementOptions.kt +57 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +4 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueue.kt +23 -9
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackContainer.kt +103 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHost.kt +13 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +20 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/appearance/TabsAppearanceCoordinator.kt +2 -4
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/MenuHelpers.kt +5 -23
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +46 -25
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHost.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/host/TabsHostA11yCoordinator.kt +23 -2
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreen.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/tabs/screen/TabsScreenFragment.kt +3 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/DimensionUtils.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/StyleUtils.kt +22 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_available_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_large_entire_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_available_space.xml +8 -0
- package/android/src/main/res/base/layout/rns_collapsing_toolbar_medium_entire_space.xml +8 -0
- package/cpp/legacy/RNSScreenRemovalListener.cpp +31 -1
- package/cpp/legacy/RNSScreenRemovalListener.h +18 -3
- package/ios/RNSEnums.h +2 -0
- package/ios/conversion/RNSConversions.h +7 -108
- package/ios/legacy/RNSFullWindowOverlay.mm +1 -1
- package/ios/legacy/RNSModalScreen.mm +1 -1
- package/ios/legacy/RNSScreen.mm +8 -19
- package/ios/legacy/RNSScreenStackHeaderConfig.mm +3 -1
- package/ios/legacy/RNSScreenStackHeaderSubview.mm +1 -1
- package/ios/legacy/RNSScreenWindowTraits.mm +5 -13
- package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.h +1 -3
- package/ios/modals/form-sheet/RNSFormSheetConfigurationApplicator.mm +11 -22
- package/ios/modals/form-sheet/RNSFormSheetContentController.h +1 -1
- package/ios/modals/form-sheet/RNSFormSheetContentController.mm +7 -18
- package/ios/modals/form-sheet/RNSFormSheetHostComponentView.mm +4 -4
- package/ios/modals/form-sheet/RNSFormSheetHostShadowStateProxy.mm +2 -2
- package/ios/modals/form-sheet/RNSFormSheetUpdateFlags.h +3 -0
- package/ios/safe-area/RNSSafeAreaViewComponentView.mm +2 -2
- package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.mm +2 -3
- package/ios/split/RNSSplitAppearanceApplicator.h +4 -4
- package/ios/split/RNSSplitAppearanceApplicator.mm +53 -56
- package/ios/split/RNSSplitHostComponentEventEmitter.h +1 -0
- package/ios/split/RNSSplitHostComponentEventEmitter.mm +1 -1
- package/ios/split/RNSSplitHostComponentView.h +5 -15
- package/ios/split/RNSSplitHostComponentView.mm +55 -6
- package/ios/split/RNSSplitHostController.h +25 -6
- package/ios/split/RNSSplitHostController.mm +24 -92
- package/ios/split/RNSSplitHostProviders.h +67 -0
- package/ios/split/RNSSplitScreenComponentView.h +0 -39
- package/ios/split/RNSSplitScreenComponentView.mm +27 -10
- package/ios/split/RNSSplitScreenController.h +26 -3
- package/ios/split/RNSSplitScreenController.mm +13 -30
- package/ios/split/RNSSplitScreenShadowStateProxy.h +1 -40
- package/ios/split/RNSSplitScreenShadowStateProxy.mm +1 -26
- package/ios/split/conversion/RNSConversions-SplitView.h +56 -0
- package/ios/{conversion → split/conversion}/RNSConversions-SplitView.mm +4 -1
- package/ios/stack/conversion/RNSConversions-Stack.h +32 -0
- package/ios/stack/conversion/RNSConversions-Stack.mm +55 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +10 -1
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +67 -35
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +6 -0
- package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
- package/ios/stack/header/RNSStackHeaderItemComponentView.h +3 -1
- package/ios/stack/header/RNSStackHeaderItemComponentView.mm +15 -2
- package/ios/stack/header/RNSStackHeaderItemDataProviding.h +2 -0
- package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
- package/ios/stack/header/RNSStackHeaderMenuMapper.mm +4 -0
- package/ios/stack/host/RNSStackNavigationBar.h +25 -0
- package/ios/stack/host/RNSStackNavigationBar.mm +80 -0
- package/ios/stack/host/RNSStackNavigationBarCoordinator.h +8 -0
- package/ios/stack/host/RNSStackNavigationBarCoordinator.mm +11 -0
- package/ios/stack/host/RNSStackNavigationController.mm +13 -5
- package/ios/stack/host/RNSStackOperation.h +0 -2
- package/ios/stack/screen/RNSStackScreenComponentView.mm +9 -2
- package/ios/stack/screen/RNSStackScreenController.mm +12 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +8 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +98 -16
- package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +40 -9
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.h +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryEventEmitter.mm +1 -1
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryShadowStateProxy.mm +1 -1
- package/ios/tabs/conversion/RNSConversions-Tabs.h +78 -0
- package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +8 -71
- package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
- package/ios/tabs/host/RNSTabsHostComponentView.h +2 -0
- package/ios/tabs/host/RNSTabsHostComponentView.mm +10 -3
- package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
- package/ios/tabs/screen/RNSTabsScreenComponentView.mm +20 -5
- package/ios/utils/RNSDefines.h +3 -0
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +34 -19
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +33 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/commonjs/components/stack/host/StackHost.js +9 -6
- package/lib/commonjs/components/stack/host/StackHost.js.map +1 -1
- package/lib/commonjs/components/stack/index.js.map +1 -1
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js +1 -0
- package/lib/commonjs/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/commonjs/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/StackHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.android.js +35 -20
- package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js +34 -2
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/module/components/stack/host/StackHost.js +9 -6
- package/lib/module/components/stack/host/StackHost.js.map +1 -1
- package/lib/module/components/stack/index.js.map +1 -1
- package/lib/module/components/tabs/host/TabsHost.ios.js +1 -0
- package/lib/module/components/tabs/host/TabsHost.ios.js.map +1 -1
- package/lib/module/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/StackHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +616 -21
- 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 +226 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.types.d.ts +2 -2
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts +2 -0
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts +1 -1
- package/lib/typescript/components/stack/host/StackHost.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.types.d.ts +24 -0
- package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/index.d.ts +2 -2
- package/lib/typescript/components/stack/index.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts +16 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +52 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +25 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +2 -0
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +3 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
- package/package.json +8 -7
- package/react-native.config.js +3 -0
- package/src/components/modals/form-sheet/FormSheet.types.ts +1 -1
- package/src/components/stack/header/StackHeaderConfig.android.tsx +48 -23
- package/src/components/stack/header/StackHeaderConfig.android.types.ts +637 -21
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +45 -1
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +238 -2
- package/src/components/stack/header/StackHeaderConfig.types.ts +2 -2
- package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +2 -0
- package/src/components/stack/host/StackHost.tsx +4 -2
- package/src/components/stack/host/StackHost.types.ts +26 -0
- package/src/components/stack/index.ts +6 -1
- package/src/components/tabs/host/TabsHost.ios.tsx +1 -0
- package/src/components/tabs/host/TabsHost.ios.types.ts +16 -0
- package/src/components/tabs/host/TabsHost.types.ts +3 -0
- package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +78 -0
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +32 -0
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +2 -0
- package/src/fabric/stack/StackHostNativeComponent.ts +11 -2
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +0 -83
- package/ios/conversion/RNSConversions-Stack.h +0 -32
- package/ios/conversion/RNSConversions-Stack.mm +0 -41
- package/ios/conversion/always_false.h +0 -31
- /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
#import "RNSStackNavigationBarCoordinator.h"
|
|
2
|
+
#import <React/RCTAssert.h>
|
|
3
|
+
#import "RNSStackNavigationBar.h"
|
|
2
4
|
|
|
3
5
|
@implementation RNSStackNavigationBarCoordinator
|
|
4
6
|
|
|
@@ -9,6 +11,15 @@
|
|
|
9
11
|
[navigationController setNavigationBarHidden:hidden animated:animated];
|
|
10
12
|
}
|
|
11
13
|
|
|
14
|
+
#if !TARGET_OS_TV
|
|
15
|
+
- (void)setBackButtonMenuEnabled:(BOOL)enabled forNavigationController:(UINavigationController *)navigationController
|
|
16
|
+
{
|
|
17
|
+
RCTAssert([navigationController.navigationBar isKindOfClass:RNSStackNavigationBar.class],
|
|
18
|
+
@"An instance of RNSStackNavigationBar is expected for navigation bar implementation");
|
|
19
|
+
static_cast<RNSStackNavigationBar *>(navigationController.navigationBar).backButtonMenuEnabled = enabled;
|
|
20
|
+
}
|
|
21
|
+
#endif // !TARGET_OS_TV
|
|
22
|
+
|
|
12
23
|
- (void)initializeNavigationBarOfNavigationController:(UINavigationController *)navigationController
|
|
13
24
|
{
|
|
14
25
|
#if !TARGET_OS_TV
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
#import "RNSContainer.h"
|
|
4
4
|
#import "RNSLog.h"
|
|
5
5
|
#import "RNSParentContainerItemRegistry.h"
|
|
6
|
+
#import "RNSStackNavigationBar.h"
|
|
6
7
|
#import "RNSStackOperation.h"
|
|
7
8
|
#import "RNSStackScreenController.h"
|
|
8
9
|
#import "RNSViewFrameChangeDelegate.h"
|
|
@@ -15,7 +16,12 @@
|
|
|
15
16
|
|
|
16
17
|
- (instancetype)init
|
|
17
18
|
{
|
|
18
|
-
|
|
19
|
+
#if !TARGET_OS_TV
|
|
20
|
+
self = [super initWithNavigationBarClass:RNSStackNavigationBar.class toolbarClass:nil];
|
|
21
|
+
#else // !TARGET_OS_TV
|
|
22
|
+
self = [super init];
|
|
23
|
+
#endif // !TARGET_OS_TV
|
|
24
|
+
if (self != nil) {
|
|
19
25
|
_navigationBarCoordinator = [RNSStackNavigationBarCoordinator new];
|
|
20
26
|
[_navigationBarCoordinator initializeNavigationBarOfNavigationController:self];
|
|
21
27
|
[self initState];
|
|
@@ -102,15 +108,15 @@
|
|
|
102
108
|
return;
|
|
103
109
|
}
|
|
104
110
|
|
|
105
|
-
for (RNSPopOperation *op in _pendingPopOperations) {
|
|
106
|
-
UIViewController *controller = static_cast<UIViewController *>(op.stackScreen.controller);
|
|
111
|
+
for ([[maybe_unused]] RNSPopOperation *op in _pendingPopOperations) {
|
|
107
112
|
RCTAssert([self.viewControllers count] > 1, @"[RNScreens] Attempt to pop last screen from the stack");
|
|
108
|
-
RCTAssert(self.topViewController == controller,
|
|
113
|
+
RCTAssert(self.topViewController == static_cast<UIViewController *>(op.stackScreen.controller),
|
|
114
|
+
@"[RNScreens] Attempt to pop non-top screen");
|
|
109
115
|
[self popViewControllerAnimated:YES];
|
|
110
116
|
}
|
|
111
117
|
|
|
112
118
|
for (RNSPushOperation *op in _pendingPushOperations) {
|
|
113
|
-
|
|
119
|
+
RNSStackScreenController *controller = op.stackScreen.controller;
|
|
114
120
|
[self pushViewController:controller animated:YES];
|
|
115
121
|
}
|
|
116
122
|
|
|
@@ -126,10 +132,12 @@
|
|
|
126
132
|
|
|
127
133
|
- (void)dumpStackModel
|
|
128
134
|
{
|
|
135
|
+
#ifdef RNS_DEBUG_LOGGING
|
|
129
136
|
RNSLog(@"[RNScreens] StackContainer [%ld] MODEL BEGIN", self.view.tag);
|
|
130
137
|
for (UIViewController *viewController in self.viewControllers) {
|
|
131
138
|
RNSLog(@"[RNScreens] %@", static_cast<RNSStackScreenComponentView *>(viewController.view).screenKey);
|
|
132
139
|
}
|
|
140
|
+
#endif // RNS_DEBUG_LOGGING
|
|
133
141
|
}
|
|
134
142
|
|
|
135
143
|
@end
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
6
6
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
7
7
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
8
|
-
#import <rnscreens/RNSStackScreenComponentDescriptor.h>
|
|
8
|
+
#import <react/renderer/components/rnscreens/RNSStackScreenComponentDescriptor.h>
|
|
9
9
|
|
|
10
10
|
#import "RNSConversions-Stack.h"
|
|
11
11
|
#import "RNSScrollViewMarkerComponentView.h"
|
|
@@ -116,7 +116,8 @@ namespace react = facebook::react;
|
|
|
116
116
|
const auto &newComponentProps = *std::static_pointer_cast<const react::RNSStackScreenProps>(props);
|
|
117
117
|
|
|
118
118
|
if (oldComponentProps.activityMode != newComponentProps.activityMode) {
|
|
119
|
-
_activityMode = rnscreens::conversion::
|
|
119
|
+
_activityMode = rnscreens::conversion::RNSStackScreenActivityModeFromReactRNSStackScreenActivityMode(
|
|
120
|
+
newComponentProps.activityMode);
|
|
120
121
|
_hasUpdatedActivityMode = YES;
|
|
121
122
|
}
|
|
122
123
|
|
|
@@ -132,6 +133,11 @@ namespace react = facebook::react;
|
|
|
132
133
|
{
|
|
133
134
|
if ([childComponentView isKindOfClass:RNSStackHeaderConfigComponentView.class]) {
|
|
134
135
|
_headerConfig = (RNSStackHeaderConfigComponentView *)childComponentView;
|
|
136
|
+
_headerConfig.headerCoordinator = _controller.headerCoordinator;
|
|
137
|
+
_controller.headerCoordinator.configDataProvider = _headerConfig;
|
|
138
|
+
_controller.headerCoordinator.frameChangeDelegate = _headerConfig;
|
|
139
|
+
_controller.headerCoordinator.eventsDelegate = _headerConfig;
|
|
140
|
+
_controller.headerCoordinator.imageLoader = _headerConfig;
|
|
135
141
|
}
|
|
136
142
|
[super mountChildComponentView:childComponentView index:index];
|
|
137
143
|
}
|
|
@@ -140,6 +146,7 @@ namespace react = facebook::react;
|
|
|
140
146
|
{
|
|
141
147
|
if ([childComponentView isKindOfClass:RNSStackHeaderConfigComponentView.class]) {
|
|
142
148
|
[_controller.headerCoordinator clearHeaderConfiguration];
|
|
149
|
+
_headerConfig.headerCoordinator = nil;
|
|
143
150
|
_headerConfig = nil;
|
|
144
151
|
}
|
|
145
152
|
[super unmountChildComponentView:childComponentView index:index];
|
|
@@ -56,6 +56,10 @@
|
|
|
56
56
|
- (void)viewWillAppear:(BOOL)animated
|
|
57
57
|
{
|
|
58
58
|
[super viewWillAppear:animated];
|
|
59
|
+
[self.headerCoordinator updateNavigationBarVisibilityAnimated:animated];
|
|
60
|
+
#if !TARGET_OS_TV
|
|
61
|
+
[self.headerCoordinator updateBackButtonMenuEnabled];
|
|
62
|
+
#endif // !TARGET_OS_TV
|
|
59
63
|
[[self reactEventEmitter] emitOnWillAppear];
|
|
60
64
|
}
|
|
61
65
|
|
|
@@ -83,6 +87,14 @@
|
|
|
83
87
|
[super didMoveToParentViewController:parent];
|
|
84
88
|
|
|
85
89
|
if (parent == nil) {
|
|
90
|
+
#if !TARGET_OS_TV
|
|
91
|
+
// The pop transition has completed. Clear the back button config this
|
|
92
|
+
// screen has applied onto the screen below. UIKit seems to serialize
|
|
93
|
+
// navigation transitions (undocumented, internal, but seems to work on 18 and 26),
|
|
94
|
+
// so this runs before a queued push applies its own config.
|
|
95
|
+
[_headerCoordinator clearAppliedBackButtonConfig];
|
|
96
|
+
#endif // !TARGET_OS_TV
|
|
97
|
+
|
|
86
98
|
if (_screenView.activityMode == RNSStackScreenActivityModeDetached) {
|
|
87
99
|
[[self reactEventEmitter] emitOnDismiss];
|
|
88
100
|
} else {
|
|
@@ -42,6 +42,14 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
42
42
|
|
|
43
43
|
- (void)clearHeaderConfiguration;
|
|
44
44
|
|
|
45
|
+
- (void)updateNavigationBarVisibilityAnimated:(BOOL)animated;
|
|
46
|
+
|
|
47
|
+
#if !TARGET_OS_TV
|
|
48
|
+
- (void)updateBackButtonMenuEnabled;
|
|
49
|
+
|
|
50
|
+
- (void)clearAppliedBackButtonConfig;
|
|
51
|
+
#endif // !TARGET_OS_TV
|
|
52
|
+
|
|
45
53
|
@end
|
|
46
54
|
|
|
47
55
|
NS_ASSUME_NONNULL_END
|
|
@@ -15,6 +15,13 @@
|
|
|
15
15
|
@implementation RNSStackScreenHeaderCoordinator {
|
|
16
16
|
__weak RNSStackScreenController *_Nullable _screenController;
|
|
17
17
|
|
|
18
|
+
#if !TARGET_OS_TV
|
|
19
|
+
// Navigation item of the screen below, onto which the back button
|
|
20
|
+
// configuration has been applied. Kept so that the configuration can be
|
|
21
|
+
// cleared when the owning screen is popped from the stack.
|
|
22
|
+
__weak UINavigationItem *_Nullable _backButtonConfigTargetItem;
|
|
23
|
+
#endif // !TARGET_OS_TV
|
|
24
|
+
|
|
18
25
|
RNSStackHeaderMenuTrackerRegistry *_Nonnull _trackerRegistry;
|
|
19
26
|
|
|
20
27
|
NSMutableArray<UIBarButtonItem *> *_Nonnull _leadingBarButtonItems;
|
|
@@ -36,6 +43,17 @@
|
|
|
36
43
|
|
|
37
44
|
#pragma mark - Public
|
|
38
45
|
|
|
46
|
+
- (void)updateNavigationBarVisibilityAnimated:(BOOL)animated
|
|
47
|
+
{
|
|
48
|
+
RNSStackNavigationController *navController = [self getNavigationController];
|
|
49
|
+
if (navController == nil || navController.topViewController != _screenController) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
BOOL hidden = _configDataProvider == nil || _configDataProvider.hidden;
|
|
54
|
+
[navController.navigationBarCoordinator setHidden:hidden forNavigationController:navController animated:animated];
|
|
55
|
+
}
|
|
56
|
+
|
|
39
57
|
- (void)rebuild
|
|
40
58
|
{
|
|
41
59
|
if (_configDataProvider == nil) {
|
|
@@ -104,7 +122,10 @@
|
|
|
104
122
|
forController:controller];
|
|
105
123
|
|
|
106
124
|
[self applyTitleMenuForController:controller];
|
|
107
|
-
[self
|
|
125
|
+
[self updateNavigationBarVisibilityAnimated:YES];
|
|
126
|
+
#if !TARGET_OS_TV
|
|
127
|
+
[self updateBackButtonMenuEnabled];
|
|
128
|
+
#endif // !TARGET_OS_TV
|
|
108
129
|
}
|
|
109
130
|
|
|
110
131
|
- (void)applyConfigProperties
|
|
@@ -114,9 +135,25 @@
|
|
|
114
135
|
}
|
|
115
136
|
|
|
116
137
|
[self applyConfigPropertiesForController:[self requireScreenController]];
|
|
117
|
-
[self
|
|
138
|
+
[self updateNavigationBarVisibilityAnimated:YES];
|
|
139
|
+
#if !TARGET_OS_TV
|
|
140
|
+
[self updateBackButtonMenuEnabled];
|
|
141
|
+
#endif // !TARGET_OS_TV
|
|
118
142
|
}
|
|
119
143
|
|
|
144
|
+
#if !TARGET_OS_TV
|
|
145
|
+
- (void)updateBackButtonMenuEnabled
|
|
146
|
+
{
|
|
147
|
+
RNSStackNavigationController *navController = [self getNavigationController];
|
|
148
|
+
if (navController == nil || navController.topViewController != _screenController) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
BOOL enabled = _configDataProvider == nil || _configDataProvider.backButtonMenuEnabled;
|
|
153
|
+
[navController.navigationBarCoordinator setBackButtonMenuEnabled:enabled forNavigationController:navController];
|
|
154
|
+
}
|
|
155
|
+
#endif // !TARGET_OS_TV
|
|
156
|
+
|
|
120
157
|
/**
|
|
121
158
|
Rebuilds an existing item: sets all props and applies the menu config.
|
|
122
159
|
*/
|
|
@@ -266,6 +303,7 @@
|
|
|
266
303
|
_configDataProvider = nil;
|
|
267
304
|
_frameChangeDelegate = nil;
|
|
268
305
|
_eventsDelegate = nil;
|
|
306
|
+
_imageLoader = nil;
|
|
269
307
|
|
|
270
308
|
[_leadingBarButtonItems removeAllObjects];
|
|
271
309
|
[_trailingBarButtonItems removeAllObjects];
|
|
@@ -277,6 +315,8 @@
|
|
|
277
315
|
|
|
278
316
|
navItem.title = nil;
|
|
279
317
|
navItem.titleView = nil;
|
|
318
|
+
navItem.standardAppearance = nil;
|
|
319
|
+
navItem.scrollEdgeAppearance = nil;
|
|
280
320
|
[navItem setLeftBarButtonItems:@[] animated:YES];
|
|
281
321
|
[navItem setRightBarButtonItems:@[] animated:YES];
|
|
282
322
|
|
|
@@ -297,13 +337,16 @@
|
|
|
297
337
|
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
298
338
|
|
|
299
339
|
#if !TARGET_OS_TV
|
|
340
|
+
navItem.prompt = nil;
|
|
300
341
|
navItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;
|
|
342
|
+
|
|
343
|
+
[self clearAppliedBackButtonConfig];
|
|
301
344
|
#endif // !TARGET_OS_TV
|
|
302
345
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
346
|
+
[self updateNavigationBarVisibilityAnimated:YES];
|
|
347
|
+
#if !TARGET_OS_TV
|
|
348
|
+
[self updateBackButtonMenuEnabled];
|
|
349
|
+
#endif // !TARGET_OS_TV
|
|
307
350
|
}
|
|
308
351
|
|
|
309
352
|
/**
|
|
@@ -377,21 +420,25 @@
|
|
|
377
420
|
return (RNSStackNavigationController *)navController;
|
|
378
421
|
}
|
|
379
422
|
|
|
380
|
-
- (void)applyNavigationBarProperties
|
|
381
|
-
{
|
|
382
|
-
RNSStackNavigationController *navController = [self getNavigationController];
|
|
383
|
-
if (navController != nil) {
|
|
384
|
-
[navController.navigationBarCoordinator setHidden:_configDataProvider.hidden
|
|
385
|
-
forNavigationController:navController
|
|
386
|
-
animated:YES];
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
423
|
- (void)applyConfigPropertiesForController:(RNSStackScreenController *)controller
|
|
391
424
|
{
|
|
392
425
|
UINavigationItem *navItem = controller.navigationItem;
|
|
393
426
|
|
|
394
427
|
navItem.title = _configDataProvider.title;
|
|
428
|
+
navItem.standardAppearance = _configDataProvider.standardAppearance;
|
|
429
|
+
navItem.scrollEdgeAppearance = _configDataProvider.scrollEdgeAppearance;
|
|
430
|
+
|
|
431
|
+
#if !TARGET_OS_TV
|
|
432
|
+
NSString *prompt = _configDataProvider.prompt;
|
|
433
|
+
if (navItem.prompt != prompt && ![navItem.prompt isEqualToString:prompt]) {
|
|
434
|
+
navItem.prompt = prompt;
|
|
435
|
+
// UIKit does not resize an already visible navigation bar when the prompt
|
|
436
|
+
// of its navigation item changes - request layout explicitly.
|
|
437
|
+
[controller.navigationController.view setNeedsLayout];
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
[self applyBackButtonConfigForController:controller];
|
|
441
|
+
#endif // !TARGET_OS_TV
|
|
395
442
|
|
|
396
443
|
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
397
444
|
if (@available(iOS 26.0, *)) {
|
|
@@ -407,6 +454,32 @@
|
|
|
407
454
|
#endif // !TARGET_OS_TV
|
|
408
455
|
}
|
|
409
456
|
|
|
457
|
+
#if !TARGET_OS_TV
|
|
458
|
+
- (void)applyBackButtonConfigForController:(RNSStackScreenController *)controller
|
|
459
|
+
{
|
|
460
|
+
NSArray<UIViewController *> *viewControllers = controller.navigationController.viewControllers;
|
|
461
|
+
NSUInteger index = [viewControllers indexOfObject:controller];
|
|
462
|
+
if (index == NSNotFound || index == 0) {
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
UINavigationItem *prevItem = viewControllers[index - 1].navigationItem;
|
|
467
|
+
_backButtonConfigTargetItem = prevItem;
|
|
468
|
+
prevItem.backButtonTitle = _configDataProvider.backButtonTitle;
|
|
469
|
+
prevItem.backButtonDisplayMode = _configDataProvider.backButtonDisplayMode;
|
|
470
|
+
}
|
|
471
|
+
#endif // !TARGET_OS_TV
|
|
472
|
+
|
|
473
|
+
#if !TARGET_OS_TV
|
|
474
|
+
- (void)clearAppliedBackButtonConfig
|
|
475
|
+
{
|
|
476
|
+
UINavigationItem *targetItem = _backButtonConfigTargetItem;
|
|
477
|
+
_backButtonConfigTargetItem = nil;
|
|
478
|
+
targetItem.backButtonTitle = nil;
|
|
479
|
+
targetItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeDefault;
|
|
480
|
+
}
|
|
481
|
+
#endif // !TARGET_OS_TV
|
|
482
|
+
|
|
410
483
|
- (void)applyItemsWithTitleView:(nullable UIView *)titleView
|
|
411
484
|
subtitleView:(nullable UIView *)subtitleView
|
|
412
485
|
largeSubtitleView:(nullable UIView *)largeSubtitleView
|
|
@@ -471,6 +544,15 @@
|
|
|
471
544
|
withHeaderEventsDelegate:_eventsDelegate
|
|
472
545
|
withImageLoader:_imageLoader];
|
|
473
546
|
|
|
547
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
548
|
+
if (@available(iOS 26.0, *)) {
|
|
549
|
+
if (item.identifier != nil) {
|
|
550
|
+
barButtonItem.identifier = item.identifier;
|
|
551
|
+
}
|
|
552
|
+
barButtonItem.hidesSharedBackground = item.hidesSharedBackground;
|
|
553
|
+
}
|
|
554
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
555
|
+
|
|
474
556
|
if (item.menu != nil && item.itemId != nil) {
|
|
475
557
|
RNSStackHeaderMenuToggleStateTracker *tracker = [_trackerRegistry trackerForItemId:item.itemId];
|
|
476
558
|
__weak auto weakSelf = self;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#import "RNSTabBarAppearanceCoordinator.h"
|
|
2
2
|
#import <React/RCTFont.h>
|
|
3
3
|
#import <React/RCTImageLoader.h>
|
|
4
|
+
#import <React/RCTLog.h>
|
|
4
5
|
#import "RCTConvert+RNSTabs.h"
|
|
5
|
-
#import "RNSConversions.h"
|
|
6
|
+
#import "RNSConversions-Tabs.h"
|
|
6
7
|
#import "RNSImageLoadingHelper.h"
|
|
7
8
|
#import "RNSTabBarController.h"
|
|
8
9
|
#import "RNSTabsHostComponentView.h"
|
|
@@ -62,30 +63,60 @@
|
|
|
62
63
|
if (screenView.iconType == RNSTabsIconTypeSfSymbol || screenView.iconType == RNSTabsIconTypeXcasset) {
|
|
63
64
|
if (screenView.iconResourceName != nil) {
|
|
64
65
|
if (screenView.iconType == RNSTabsIconTypeSfSymbol) {
|
|
65
|
-
|
|
66
|
+
UIImage *image = [UIImage systemImageNamed:screenView.iconResourceName];
|
|
67
|
+
if (image == nil) {
|
|
68
|
+
RCTLogWarn(@"[RNScreens] Failed to load SF Symbol \"%@\" for tab bar item", screenView.iconResourceName);
|
|
69
|
+
}
|
|
70
|
+
tabBarItem.image = image;
|
|
66
71
|
} else {
|
|
67
|
-
|
|
72
|
+
UIImage *image = [UIImage imageNamed:screenView.iconResourceName];
|
|
73
|
+
if (image == nil) {
|
|
74
|
+
RCTLogWarn(@"[RNScreens] Failed to load xcasset \"%@\" for tab bar item", screenView.iconResourceName);
|
|
75
|
+
}
|
|
76
|
+
tabBarItem.image = image;
|
|
68
77
|
}
|
|
69
78
|
} else if (screenView.systemItem != RNSTabsScreenSystemItemNone) {
|
|
70
79
|
// Restore default system item icon
|
|
71
|
-
UITabBarSystemItem systemItem =
|
|
80
|
+
std::optional<UITabBarSystemItem> systemItem =
|
|
72
81
|
rnscreens::conversion::RNSTabsScreenSystemItemToUITabBarSystemItem(screenView.systemItem);
|
|
73
|
-
|
|
82
|
+
if (!systemItem) {
|
|
83
|
+
RCTLogError(
|
|
84
|
+
@"[RNScreens] Conversion from tabs screen systemItem to UITabBarSystemItem failed for systemItem [%ld]",
|
|
85
|
+
(long)screenView.systemItem);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
tabBarItem.image = [[UITabBarItem alloc] initWithTabBarSystemItem:systemItem.value() tag:0].image;
|
|
74
89
|
} else {
|
|
75
90
|
tabBarItem.image = nil;
|
|
76
91
|
}
|
|
77
92
|
|
|
78
93
|
if (screenView.selectedIconResourceName != nil) {
|
|
79
94
|
if (screenView.iconType == RNSTabsIconTypeSfSymbol) {
|
|
80
|
-
|
|
95
|
+
UIImage *selectedImage = [UIImage systemImageNamed:screenView.selectedIconResourceName];
|
|
96
|
+
if (selectedImage == nil) {
|
|
97
|
+
RCTLogWarn(@"[RNScreens] Failed to load SF Symbol \"%@\" for selected tab bar item",
|
|
98
|
+
screenView.selectedIconResourceName);
|
|
99
|
+
}
|
|
100
|
+
tabBarItem.selectedImage = selectedImage;
|
|
81
101
|
} else {
|
|
82
|
-
|
|
102
|
+
UIImage *selectedImage = [UIImage imageNamed:screenView.selectedIconResourceName];
|
|
103
|
+
if (selectedImage == nil) {
|
|
104
|
+
RCTLogWarn(@"[RNScreens] Failed to load xcasset \"%@\" for selected tab bar item",
|
|
105
|
+
screenView.selectedIconResourceName);
|
|
106
|
+
}
|
|
107
|
+
tabBarItem.selectedImage = selectedImage;
|
|
83
108
|
}
|
|
84
109
|
} else if (screenView.systemItem != RNSTabsScreenSystemItemNone) {
|
|
85
110
|
// Restore default system item icon
|
|
86
|
-
UITabBarSystemItem systemItem =
|
|
111
|
+
std::optional<UITabBarSystemItem> systemItem =
|
|
87
112
|
rnscreens::conversion::RNSTabsScreenSystemItemToUITabBarSystemItem(screenView.systemItem);
|
|
88
|
-
|
|
113
|
+
if (!systemItem) {
|
|
114
|
+
RCTLogError(
|
|
115
|
+
@"[RNScreens] Conversion from tabs screen systemItem to UITabBarSystemItem failed for systemItem [%ld]",
|
|
116
|
+
(long)screenView.systemItem);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
tabBarItem.selectedImage = [[UITabBarItem alloc] initWithTabBarSystemItem:systemItem.value() tag:0].selectedImage;
|
|
89
120
|
} else {
|
|
90
121
|
tabBarItem.selectedImage = nil;
|
|
91
122
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#import "RNSTabsHostComponentView.h"
|
|
6
6
|
|
|
7
7
|
#if defined(__cplusplus)
|
|
8
|
-
#import <rnscreens/RNSTabsBottomAccessoryComponentDescriptor.h>
|
|
8
|
+
#import <react/renderer/components/rnscreens/RNSTabsBottomAccessoryComponentDescriptor.h>
|
|
9
9
|
#endif // defined(__cplusplus)
|
|
10
10
|
|
|
11
11
|
NS_ASSUME_NONNULL_BEGIN
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#if RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
|
|
4
4
|
|
|
5
5
|
#import <React/RCTConversions.h>
|
|
6
|
-
#import <rnscreens/RNSTabsBottomAccessoryShadowNode.h>
|
|
6
|
+
#import <react/renderer/components/rnscreens/RNSTabsBottomAccessoryShadowNode.h>
|
|
7
7
|
|
|
8
8
|
@implementation RNSTabsBottomAccessoryShadowStateProxy {
|
|
9
9
|
RNSTabsBottomAccessoryComponentView *__weak _bottomAccessoryView;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#if defined(__cplusplus)
|
|
4
|
+
|
|
5
|
+
#import <React/RCTImageSource.h>
|
|
6
|
+
#import <UIKit/UIKit.h>
|
|
7
|
+
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
8
|
+
#import <react/renderer/components/rnscreens/Props.h>
|
|
9
|
+
#import <optional>
|
|
10
|
+
#import "RNSDefines.h"
|
|
11
|
+
#import "RNSEnums.h"
|
|
12
|
+
#import "RNSTabsNavigationState.h"
|
|
13
|
+
|
|
14
|
+
namespace rnscreens::conversion {
|
|
15
|
+
|
|
16
|
+
namespace react = facebook::react;
|
|
17
|
+
|
|
18
|
+
std::optional<UIBlurEffectStyle> RNSMaybeUIBlurEffectStyleFromString(NSString *blurEffectString);
|
|
19
|
+
|
|
20
|
+
UIBlurEffect *RNSUIBlurEffectFromString(NSString *blurEffectString);
|
|
21
|
+
|
|
22
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
23
|
+
|
|
24
|
+
API_AVAILABLE(ios(26.0))
|
|
25
|
+
UITabBarMinimizeBehavior UITabBarMinimizeBehaviorFromRNSTabsHostTabBarMinimizeBehavior(
|
|
26
|
+
react::RNSTabsHostIOSTabBarMinimizeBehavior tabBarMinimizeBehavior);
|
|
27
|
+
|
|
28
|
+
#endif // Check for iOS >= 26
|
|
29
|
+
|
|
30
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(18_0)
|
|
31
|
+
|
|
32
|
+
API_AVAILABLE(ios(18.0))
|
|
33
|
+
UITabBarControllerMode UITabBarControllerModeFromRNSTabsHostTabBarControllerMode(
|
|
34
|
+
react::RNSTabsHostIOSTabBarControllerMode tabBarControllerMode);
|
|
35
|
+
|
|
36
|
+
#endif // Check for iOS >= 18
|
|
37
|
+
|
|
38
|
+
react::RNSTabsHostIOSEventEmitter::OnTabSelectionRejectedRejectionReason
|
|
39
|
+
RNSOnTabSelectionRejectedRejectionReasonFromRNSTabsNavigationStateRejectionReason(
|
|
40
|
+
RNSTabsNavigationStateRejectionReason reason);
|
|
41
|
+
|
|
42
|
+
react::RNSTabsHostIOSEventEmitter::OnTabSelectedActionOrigin RNSOnTabSelectedActionOriginFromRNSTabsActionOrigin(
|
|
43
|
+
RNSTabsActionOrigin actionOrigin);
|
|
44
|
+
|
|
45
|
+
RNSTabsIconType RNSTabsIconTypeFromIcon(react::RNSTabsScreenIOSIconType iconType);
|
|
46
|
+
|
|
47
|
+
RNSTabsScreenSystemItem RNSTabsScreenSystemItemFromReactRNSTabsScreenSystemItem(
|
|
48
|
+
react::RNSTabsScreenIOSSystemItem systemItem);
|
|
49
|
+
|
|
50
|
+
std::optional<UITabBarSystemItem> RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSystemItem systemItem);
|
|
51
|
+
|
|
52
|
+
#if RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
|
|
53
|
+
|
|
54
|
+
API_AVAILABLE(ios(26.0))
|
|
55
|
+
std::optional<react::RNSTabsBottomAccessoryEventEmitter::OnEnvironmentChangeEnvironment>
|
|
56
|
+
RNSTabsBottomAccessoryOnEnvironmentChangePayloadFromUITabAccessoryEnvironment(UITabAccessoryEnvironment environment);
|
|
57
|
+
|
|
58
|
+
RNSTabsBottomAccessoryEnvironment RNSTabsBottomAccessoryEnvironmentFromCppEquivalent(
|
|
59
|
+
react::RNSTabsBottomAccessoryContentEnvironment environment);
|
|
60
|
+
|
|
61
|
+
#endif // RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
|
|
62
|
+
|
|
63
|
+
UIUserInterfaceStyle UIUserInterfaceStyleFromTabsScreenCppEquivalent(
|
|
64
|
+
react::RNSTabsScreenIOSUserInterfaceStyle userInterfaceStyle);
|
|
65
|
+
|
|
66
|
+
RCTImageSource *RCTImageSourceFromImageSourceAndIconType(const facebook::react::ImageSource *imageSource,
|
|
67
|
+
RNSTabsIconType iconType);
|
|
68
|
+
|
|
69
|
+
RNSOrientation RNSOrientationFromRNSTabsScreenOrientation(react::RNSTabsScreenIOSOrientation orientation);
|
|
70
|
+
|
|
71
|
+
UITraitEnvironmentLayoutDirection UITraitEnvironmentLayoutDirectionFromTabsHostCppEquivalent(
|
|
72
|
+
react::RNSTabsHostIOSLayoutDirection layoutDirection);
|
|
73
|
+
|
|
74
|
+
UIUserInterfaceStyle UIUserInterfaceStyleFromHostProp(react::RNSTabsHostIOSColorScheme colorScheme);
|
|
75
|
+
|
|
76
|
+
}; // namespace rnscreens::conversion
|
|
77
|
+
|
|
78
|
+
#endif // defined(__cplusplus)
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
#import
|
|
1
|
+
#import "RNSConversions-Tabs.h"
|
|
2
|
+
#import <React/RCTLog.h>
|
|
2
3
|
#import <react/renderer/imagemanager/RCTImagePrimitivesConversions.h>
|
|
3
|
-
#import "RNSConversions.h"
|
|
4
|
-
#import "RNSDefines.h"
|
|
5
4
|
|
|
6
5
|
namespace rnscreens::conversion {
|
|
7
6
|
|
|
7
|
+
namespace react = facebook::react;
|
|
8
|
+
|
|
8
9
|
UIBlurEffect *RNSUIBlurEffectFromOptionalUIBlurEffectStyle(std::optional<UIBlurEffectStyle> &maybeStyle)
|
|
9
10
|
{
|
|
10
11
|
if (maybeStyle) {
|
|
@@ -75,69 +76,6 @@ UIBlurEffect *RNSUIBlurEffectFromString(NSString *blurEffectString)
|
|
|
75
76
|
return RNSUIBlurEffectFromOptionalUIBlurEffectStyle(maybeStyle);
|
|
76
77
|
}
|
|
77
78
|
|
|
78
|
-
std::optional<UIBlurEffectStyle> RNSMaybeUIBlurEffectStyleFromRNSBlurEffectStyle(RNSBlurEffectStyle blurEffect)
|
|
79
|
-
{
|
|
80
|
-
switch (blurEffect) {
|
|
81
|
-
case RNSBlurEffectStyleNone:
|
|
82
|
-
case RNSBlurEffectStyleSystemDefault:
|
|
83
|
-
return std::nullopt;
|
|
84
|
-
case RNSBlurEffectStyleExtraLight:
|
|
85
|
-
return {UIBlurEffectStyleExtraLight};
|
|
86
|
-
case RNSBlurEffectStyleLight:
|
|
87
|
-
return {UIBlurEffectStyleLight};
|
|
88
|
-
case RNSBlurEffectStyleDark:
|
|
89
|
-
return {UIBlurEffectStyleDark};
|
|
90
|
-
case RNSBlurEffectStyleRegular:
|
|
91
|
-
return {UIBlurEffectStyleRegular};
|
|
92
|
-
case RNSBlurEffectStyleProminent:
|
|
93
|
-
return {UIBlurEffectStyleProminent};
|
|
94
|
-
#if !TARGET_OS_TV
|
|
95
|
-
case RNSBlurEffectStyleSystemUltraThinMaterial:
|
|
96
|
-
return {UIBlurEffectStyleSystemUltraThinMaterial};
|
|
97
|
-
case RNSBlurEffectStyleSystemThinMaterial:
|
|
98
|
-
return {UIBlurEffectStyleSystemThinMaterial};
|
|
99
|
-
case RNSBlurEffectStyleSystemMaterial:
|
|
100
|
-
return {UIBlurEffectStyleSystemMaterial};
|
|
101
|
-
case RNSBlurEffectStyleSystemThickMaterial:
|
|
102
|
-
return {UIBlurEffectStyleSystemThickMaterial};
|
|
103
|
-
case RNSBlurEffectStyleSystemChromeMaterial:
|
|
104
|
-
return {UIBlurEffectStyleSystemChromeMaterial};
|
|
105
|
-
case RNSBlurEffectStyleSystemUltraThinMaterialLight:
|
|
106
|
-
return {UIBlurEffectStyleSystemUltraThinMaterialLight};
|
|
107
|
-
case RNSBlurEffectStyleSystemThinMaterialLight:
|
|
108
|
-
return {UIBlurEffectStyleSystemThinMaterialLight};
|
|
109
|
-
case RNSBlurEffectStyleSystemMaterialLight:
|
|
110
|
-
return {UIBlurEffectStyleSystemMaterialLight};
|
|
111
|
-
case RNSBlurEffectStyleSystemThickMaterialLight:
|
|
112
|
-
return {UIBlurEffectStyleSystemThickMaterialLight};
|
|
113
|
-
case RNSBlurEffectStyleSystemChromeMaterialLight:
|
|
114
|
-
return {UIBlurEffectStyleSystemChromeMaterialLight};
|
|
115
|
-
case RNSBlurEffectStyleSystemUltraThinMaterialDark:
|
|
116
|
-
return {UIBlurEffectStyleSystemUltraThinMaterialDark};
|
|
117
|
-
case RNSBlurEffectStyleSystemThinMaterialDark:
|
|
118
|
-
return {UIBlurEffectStyleSystemThinMaterialDark};
|
|
119
|
-
case RNSBlurEffectStyleSystemMaterialDark:
|
|
120
|
-
return {UIBlurEffectStyleSystemMaterialDark};
|
|
121
|
-
case RNSBlurEffectStyleSystemThickMaterialDark:
|
|
122
|
-
return {UIBlurEffectStyleSystemThickMaterialDark};
|
|
123
|
-
case RNSBlurEffectStyleSystemChromeMaterialDark:
|
|
124
|
-
return {UIBlurEffectStyleSystemChromeMaterialDark};
|
|
125
|
-
default:
|
|
126
|
-
RCTLogError(@"[RNScreens] unsupported blur effect style");
|
|
127
|
-
return std::nullopt;
|
|
128
|
-
#else // !TARGET_OS_TV
|
|
129
|
-
default:
|
|
130
|
-
return std::nullopt;
|
|
131
|
-
#endif // !TARGET_OS_TV
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
UIBlurEffect *RNSUIBlurEffectFromRNSBlurEffectStyle(RNSBlurEffectStyle blurEffect)
|
|
136
|
-
{
|
|
137
|
-
std::optional<UIBlurEffectStyle> maybeStyle = RNSMaybeUIBlurEffectStyleFromRNSBlurEffectStyle(blurEffect);
|
|
138
|
-
return RNSUIBlurEffectFromOptionalUIBlurEffectStyle(maybeStyle);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
79
|
#if RNS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
142
80
|
|
|
143
81
|
API_AVAILABLE(ios(26.0))
|
|
@@ -323,11 +261,11 @@ RNSTabsScreenSystemItem RNSTabsScreenSystemItemFromReactRNSTabsScreenSystemItem(
|
|
|
323
261
|
}
|
|
324
262
|
}
|
|
325
263
|
|
|
326
|
-
UITabBarSystemItem RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSystemItem systemItem)
|
|
264
|
+
std::optional<UITabBarSystemItem> RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSystemItem systemItem)
|
|
327
265
|
{
|
|
328
|
-
RCTAssert(systemItem != RNSTabsScreenSystemItemNone,
|
|
329
|
-
@"Attempt to convert tabs systemItem none to UITabBarSystemItem");
|
|
330
266
|
switch (systemItem) {
|
|
267
|
+
case RNSTabsScreenSystemItemNone:
|
|
268
|
+
return std::nullopt;
|
|
331
269
|
case RNSTabsScreenSystemItemBookmarks:
|
|
332
270
|
return UITabBarSystemItemBookmarks;
|
|
333
271
|
case RNSTabsScreenSystemItemContacts:
|
|
@@ -353,8 +291,7 @@ UITabBarSystemItem RNSTabsScreenSystemItemToUITabBarSystemItem(RNSTabsScreenSyst
|
|
|
353
291
|
case RNSTabsScreenSystemItemTopRated:
|
|
354
292
|
return UITabBarSystemItemTopRated;
|
|
355
293
|
}
|
|
356
|
-
|
|
357
|
-
return UITabBarSystemItemSearch;
|
|
294
|
+
return std::nullopt;
|
|
358
295
|
}
|
|
359
296
|
|
|
360
297
|
#if RNS_TABS_BOTTOM_ACCESSORY_AVAILABLE
|