react-native-screens 5.0.0-alpha.2 → 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/Package.swift +87 -0
- package/README.md +0 -11
- 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/cpp/NativeProxy.cpp +30 -6
- package/android/src/main/cpp/NativeProxy.h +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/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 +17 -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/{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 +51 -20
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetDimensionsCoordinator.kt +159 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/coordinator/FormSheetKeyboardCoordinator.kt +101 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/coordinator/FormSheetNativeDismissCoordinator.kt +2 -8
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetAvailableHeightProvider.kt +44 -0
- 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 +36 -4
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/dialog/FormSheetDialogManager.kt +107 -0
- 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 +3 -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/core/modals/formsheet/model/FormSheetDetents.kt +152 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetAnimatorFactory.kt +9 -10
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDimmingManager.kt +103 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetDismissalOrigin.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentation.kt +173 -0
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetPresentationManager.kt +290 -0
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/native → core/modals/formsheet}/presentation/FormSheetPresentationState.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/core/modals/formsheet/presentation/FormSheetStackRegistry.kt +28 -0
- 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/PropIconResolver.kt +17 -23
- package/android/src/main/java/com/swmansion/rnscreens/helpers/ViewFinder.kt +0 -17
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +32 -3
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenContainer.kt +35 -3
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStack.kt +15 -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/react/modals/formsheet/event/FormSheetDismissEvent.kt +29 -0
- 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 +17 -10
- package/android/src/main/java/com/swmansion/rnscreens/{modals/formsheet/react → react/modals/formsheet}/host/FormSheetHostViewManager.kt +11 -9
- 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 +360 -101
- 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 +211 -113
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/appbar/StackHeaderAppBarLayout.kt +156 -24
- 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/appbar/StackHeaderToolbar.kt +74 -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 +162 -228
- 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 +5 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +29 -6
- 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 +8 -7
- 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/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 +159 -21
- 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 +27 -5
- package/android/src/main/java/com/swmansion/rnscreens/stack/host/StackHostViewManager.kt +14 -0
- 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/StackScreen.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragment.kt +50 -10
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreenFragmentDelegate.kt +12 -0
- 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 +46 -7
- 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/MenuHelpers.kt +5 -23
- package/android/src/main/java/com/swmansion/rnscreens/tabs/container/TabsContainer.kt +72 -36
- 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 +22 -2
- 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 +58 -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/TabsScreenFragment.kt +3 -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 +20 -6
- package/android/src/main/java/com/swmansion/rnscreens/utils/RNSLog.kt +22 -6
- 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 +16 -1
- package/ios/conversion/RNSConversions.h +7 -108
- 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/RNSFullWindowOverlay.mm +1 -1
- package/ios/legacy/RNSModalScreen.mm +1 -1
- package/ios/legacy/RNSNavigationBar.h +31 -0
- package/ios/legacy/RNSNavigationBar.mm +15 -0
- package/ios/legacy/RNSScreen.mm +130 -31
- 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 +72 -17
- package/ios/legacy/RNSScreenStackHeaderSubview.mm +34 -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 +3 -14
- 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 +62 -0
- package/ios/stack/conversion/RNSConversions-Stack.mm +134 -0
- package/ios/stack/header/RNSHeaderItemVisibilityPriority.h +9 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.h +26 -0
- package/ios/stack/header/RNSStackHeaderAppearanceMapper.mm +88 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +14 -1
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +103 -37
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +11 -0
- package/ios/stack/header/RNSStackHeaderConfigShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderContentFactory.mm +3 -0
- package/ios/stack/header/RNSStackHeaderIconResolver.mm +7 -0
- package/ios/stack/header/RNSStackHeaderItemComponentView.h +12 -3
- package/ios/stack/header/RNSStackHeaderItemComponentView.mm +72 -5
- package/ios/stack/header/RNSStackHeaderItemDataProviding.h +7 -0
- package/ios/stack/header/RNSStackHeaderItemShadowStateProxy.mm +1 -1
- package/ios/stack/header/RNSStackHeaderItemSpacerComponentView.mm +2 -1
- 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/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.h +2 -1
- package/ios/stack/screen/RNSStackScreenComponentView.mm +32 -2
- package/ios/stack/screen/RNSStackScreenController.mm +12 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +8 -0
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +179 -24
- package/ios/tabs/RNSTabBarAppearanceCoordinator.mm +110 -16
- package/ios/tabs/RNSTabBarItemCoordinator.h +16 -0
- package/ios/tabs/RNSTabBarItemCoordinator.mm +143 -0
- 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/bottom-accessory/RNSTabsBottomAccessoryWrapperView.h +24 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryWrapperView.mm +22 -0
- package/ios/tabs/conversion/RNSConversions-Tabs.h +100 -0
- package/ios/{conversion → tabs/conversion}/RNSConversions-Tabs.mm +105 -74
- package/ios/tabs/extensions/RNSTabsHostComponentView+RNSImageLoader.h +1 -1
- package/ios/tabs/host/RNSTabBarController.h +16 -0
- package/ios/tabs/host/RNSTabBarController.mm +516 -107
- package/ios/tabs/host/RNSTabsHostComponentView.h +4 -0
- package/ios/tabs/host/RNSTabsHostComponentView.mm +41 -4
- package/ios/tabs/host/RNSTabsHostEventEmitter.mm +1 -1
- package/ios/tabs/screen/RNSTabsScreenComponentView.h +21 -0
- package/ios/tabs/screen/RNSTabsScreenComponentView.mm +56 -56
- package/ios/tabs/screen/RNSTabsScreenViewController.mm +1 -0
- package/ios/utils/RNSDefines.h +15 -7
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js +37 -21
- package/lib/commonjs/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +41 -4
- 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 +17 -7
- 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 +3 -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/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/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 +39 -23
- package/lib/module/components/stack/header/StackHeaderConfig.android.js.map +1 -1
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js +43 -6
- 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 +18 -8
- 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 +3 -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/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/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/modals/form-sheet/FormSheet.types.d.ts +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 +620 -24
- 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 +361 -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 +4 -2
- 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 +7 -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 +47 -0
- 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 +72 -0
- package/lib/typescript/components/tabs/host/TabsHost.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts +3 -0
- package/lib/typescript/components/tabs/host/TabsHost.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/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/StackHeaderConfigAndroidNativeComponent.d.ts +52 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +29 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +8 -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 +4 -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 +11 -8
- 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 +54 -43
- package/src/components/stack/header/StackHeaderConfig.android.types.ts +641 -24
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +55 -17
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +384 -2
- package/src/components/stack/header/StackHeaderConfig.tsx +12 -0
- package/src/components/stack/header/StackHeaderConfig.types.ts +4 -2
- package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +9 -1
- package/src/components/stack/header/ios/StackHeaderItem.ios.types.ts +7 -0
- package/src/components/stack/host/StackHost.tsx +12 -3
- package/src/components/stack/host/StackHost.types.ts +50 -0
- package/src/components/stack/host/StackHost.web.tsx +1 -4
- package/src/components/stack/index.ts +14 -1
- package/src/components/tabs/host/TabsHost.ios.tsx +3 -0
- package/src/components/tabs/host/TabsHost.ios.types.ts +76 -0
- package/src/components/tabs/host/TabsHost.tsx +7 -0
- package/src/components/tabs/host/TabsHost.types.ts +3 -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/StackHeaderConfigAndroidNativeComponent.ts +78 -0
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +43 -0
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +13 -0
- package/src/fabric/stack/StackHostNativeComponent.ts +11 -2
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +8 -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/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingView.kt +0 -83
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewManager.kt +0 -89
- package/android/src/main/java/com/swmansion/rnscreens/modals/dimmingview/DimmingViewPointerEvents.kt +0 -18
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetDimensionsCoordinator.kt +0 -134
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/core/FormSheetDialogManager.kt +0 -162
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/model/FormSheetDetents.kt +0 -106
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/presentation/FormSheetPresentationManager.kt +0 -198
- 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/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
- /package/ios/{conversion → scroll-view-marker/conversion}/RNSConversions-ScrollViewMarker.h +0 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
#import "RNSStackHeaderConfigComponentView.h"
|
|
2
|
+
#import "RNSConversions-Stack.h"
|
|
2
3
|
#import "RNSConversions.h"
|
|
3
4
|
#import "RNSImageLoadingHelper.h"
|
|
5
|
+
#import "RNSStackHeaderAppearanceMapper.h"
|
|
4
6
|
#import "RNSStackHeaderConfigEventEmitter.h"
|
|
5
7
|
#import "RNSStackHeaderConfigShadowStateProxy.h"
|
|
6
8
|
#import "RNSStackHeaderItemComponentView.h"
|
|
@@ -12,7 +14,6 @@
|
|
|
12
14
|
#import "RNSStackNavigationController.h"
|
|
13
15
|
#import "RNSStackScreenComponentView.h"
|
|
14
16
|
#import "RNSStackScreenController.h"
|
|
15
|
-
#import "RNSStackScreenHeaderCoordinator.h"
|
|
16
17
|
|
|
17
18
|
#import <React/RCTConversions.h>
|
|
18
19
|
#import <React/RCTConvert.h>
|
|
@@ -20,8 +21,8 @@
|
|
|
20
21
|
#import <React/RCTLog.h>
|
|
21
22
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
22
23
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
24
|
+
#import <react/renderer/components/rnscreens/RNSStackHeaderConfigComponentDescriptor.h>
|
|
23
25
|
#import <react/utils/ManagedObjectWrapper.h>
|
|
24
|
-
#import <rnscreens/RNSStackHeaderConfigComponentDescriptor.h>
|
|
25
26
|
|
|
26
27
|
namespace react = facebook::react;
|
|
27
28
|
|
|
@@ -67,7 +68,19 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
67
68
|
_largeTitle = nil;
|
|
68
69
|
_largeSubtitle = nil;
|
|
69
70
|
_largeTitleEnabled = NO;
|
|
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
|
|
78
|
+
_backButtonTitle = nil;
|
|
79
|
+
_backButtonDisplayMode = UINavigationItemBackButtonDisplayModeDefault;
|
|
80
|
+
_backButtonMenuEnabled = YES;
|
|
70
81
|
_titleMenu = nil;
|
|
82
|
+
_standardAppearance = nil;
|
|
83
|
+
_scrollEdgeAppearance = nil;
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
- (NSArray<id> *)children
|
|
@@ -123,18 +136,7 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
123
136
|
{
|
|
124
137
|
if (self.window != nil) {
|
|
125
138
|
[[self requireNavigationController] setNavigationBarFrameChangeDelegate:self];
|
|
126
|
-
|
|
127
|
-
coordinator.configDataProvider = self;
|
|
128
|
-
coordinator.frameChangeDelegate = self;
|
|
129
|
-
coordinator.eventsDelegate = self;
|
|
130
|
-
coordinator.imageLoader = self;
|
|
131
|
-
[coordinator rebuild];
|
|
132
|
-
} else {
|
|
133
|
-
RNSStackScreenHeaderCoordinator *coordinator = [self headerCoordinator];
|
|
134
|
-
coordinator.configDataProvider = nil;
|
|
135
|
-
coordinator.frameChangeDelegate = nil;
|
|
136
|
-
coordinator.eventsDelegate = nil;
|
|
137
|
-
coordinator.imageLoader = nil;
|
|
139
|
+
[self.headerCoordinator rebuild];
|
|
138
140
|
}
|
|
139
141
|
[super didMoveToWindow];
|
|
140
142
|
}
|
|
@@ -155,7 +157,7 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
155
157
|
((RNSStackHeaderItemSpacerComponentView *)childComponentView).invalidationDelegate = self;
|
|
156
158
|
}
|
|
157
159
|
|
|
158
|
-
[
|
|
160
|
+
[self.headerCoordinator rebuild];
|
|
159
161
|
}
|
|
160
162
|
|
|
161
163
|
- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
|
|
@@ -169,7 +171,7 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
169
171
|
}
|
|
170
172
|
|
|
171
173
|
[_children removeObjectAtIndex:index];
|
|
172
|
-
[
|
|
174
|
+
[self.headerCoordinator rebuild];
|
|
173
175
|
}
|
|
174
176
|
|
|
175
177
|
#pragma mark - RNSStackHeaderItemInvalidationDelegate
|
|
@@ -178,22 +180,21 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
178
180
|
{
|
|
179
181
|
if (itemId == nil) {
|
|
180
182
|
RCTLogWarn(@"[RNScreens] headerItemDidInvalidateWithId called with nil id, will run full header rebuild");
|
|
181
|
-
[
|
|
183
|
+
[self.headerCoordinator rebuild];
|
|
182
184
|
return;
|
|
183
185
|
}
|
|
184
|
-
[
|
|
186
|
+
[self.headerCoordinator rebuildItemWithId:itemId];
|
|
185
187
|
}
|
|
186
188
|
|
|
187
189
|
- (void)headerItemMenuDidChangeWithId:(NSString *)itemId
|
|
188
190
|
{
|
|
189
191
|
if (itemId == nil) {
|
|
190
192
|
RCTLogWarn(@"[RNScreens] headerItemMenuDidChangeWithId called with nil id, will run full header rebuild");
|
|
191
|
-
[
|
|
193
|
+
[self.headerCoordinator rebuild];
|
|
192
194
|
return;
|
|
193
195
|
}
|
|
194
|
-
|
|
195
|
-
[
|
|
196
|
-
[coordinator reapplyMenuForItemWithId:itemId];
|
|
196
|
+
[self.headerCoordinator resetTrackerForItemWithId:itemId];
|
|
197
|
+
[self.headerCoordinator reapplyMenuForItemWithId:itemId];
|
|
197
198
|
}
|
|
198
199
|
|
|
199
200
|
/**
|
|
@@ -204,15 +205,15 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
204
205
|
if (itemId == nil) {
|
|
205
206
|
RCTLogWarn(
|
|
206
207
|
@"[RNScreens] headerItemMenuDidUpdateFromCommandWithId called with nil id, will run full header rebuild");
|
|
207
|
-
[
|
|
208
|
+
[self.headerCoordinator rebuild];
|
|
208
209
|
return;
|
|
209
210
|
}
|
|
210
|
-
[
|
|
211
|
+
[self.headerCoordinator reapplyMenuForItemWithId:itemId];
|
|
211
212
|
}
|
|
212
213
|
|
|
213
214
|
- (void)headerItemSpacerDidInvalidate
|
|
214
215
|
{
|
|
215
|
-
[
|
|
216
|
+
[self.headerCoordinator rebuild];
|
|
216
217
|
}
|
|
217
218
|
|
|
218
219
|
#pragma mark - RNSStackHeaderEventsDelegate
|
|
@@ -295,11 +296,11 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
295
296
|
(oldItemData.itemType == RNSMenuItemTypeAutomatic &&
|
|
296
297
|
[RNSStackHeaderMenuFinder singleSelectionRootForElementWithId:menuItemId inMenu:locator.rootMenu] != nil);
|
|
297
298
|
if (isToggle) {
|
|
298
|
-
[
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
299
|
+
[self.headerCoordinator setToggleState:updateOptions.toggleState
|
|
300
|
+
forMenuElementId:menuItemId
|
|
301
|
+
trackerItemId:locator.trackerItemId
|
|
302
|
+
rootMenu:locator.rootMenu
|
|
303
|
+
parentMenu:locator.searchResult.parentMenu];
|
|
303
304
|
}
|
|
304
305
|
}
|
|
305
306
|
|
|
@@ -310,7 +311,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
310
311
|
[static_cast<RNSStackHeaderItemComponentView *>(locator.headerItem)
|
|
311
312
|
updateMenuElementWithId:menuItemId
|
|
312
313
|
withElement:newItemData
|
|
313
|
-
parentMenu:locator.searchResult.parentMenu
|
|
314
|
+
parentMenu:locator.searchResult.parentMenu
|
|
315
|
+
inMenuRepresentation:locator.inMenuRepresentation];
|
|
314
316
|
break;
|
|
315
317
|
case RNSMenuElementPositionTitle:
|
|
316
318
|
if (locator.searchResult.parentMenu != nil) {
|
|
@@ -318,7 +320,7 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
318
320
|
replacingChildWithId:menuItemId
|
|
319
321
|
withElement:newItemData];
|
|
320
322
|
}
|
|
321
|
-
[
|
|
323
|
+
[self.headerCoordinator reapplyTitleMenu];
|
|
322
324
|
break;
|
|
323
325
|
case RNSMenuElementPositionOverflow:
|
|
324
326
|
// TODO: handle overflow menu
|
|
@@ -356,7 +358,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
356
358
|
[static_cast<RNSStackHeaderItemComponentView *>(locator.headerItem)
|
|
357
359
|
updateMenuElementWithId:menuElementId
|
|
358
360
|
withElement:newMenuItem
|
|
359
|
-
parentMenu:locator.searchResult.parentMenu
|
|
361
|
+
parentMenu:locator.searchResult.parentMenu
|
|
362
|
+
inMenuRepresentation:locator.inMenuRepresentation];
|
|
360
363
|
break;
|
|
361
364
|
case RNSMenuElementPositionTitle:
|
|
362
365
|
if (locator.searchResult.parentMenu == nil) {
|
|
@@ -366,7 +369,7 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
366
369
|
replacingChildWithId:menuElementId
|
|
367
370
|
withElement:newMenuItem];
|
|
368
371
|
}
|
|
369
|
-
[
|
|
372
|
+
[self.headerCoordinator reapplyTitleMenu];
|
|
370
373
|
break;
|
|
371
374
|
case RNSMenuElementPositionOverflow:
|
|
372
375
|
// TODO: handle overflow menu
|
|
@@ -444,6 +447,60 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
444
447
|
_largeTitleEnabled = newHeaderProps.largeTitleEnabled;
|
|
445
448
|
}
|
|
446
449
|
|
|
450
|
+
if (oldHeaderProps.prompt != newHeaderProps.prompt) {
|
|
451
|
+
_prompt = RCTNSStringFromStringNilIfEmpty(newHeaderProps.prompt);
|
|
452
|
+
}
|
|
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
|
+
|
|
480
|
+
if (oldHeaderProps.backButtonTitle != newHeaderProps.backButtonTitle) {
|
|
481
|
+
_backButtonTitle = RCTNSStringFromStringNilIfEmpty(newHeaderProps.backButtonTitle);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
if (oldHeaderProps.backButtonDisplayMode != newHeaderProps.backButtonDisplayMode) {
|
|
485
|
+
_backButtonDisplayMode = rnscreens::conversion::
|
|
486
|
+
UINavigationItemBackButtonDisplayModeFromReactRNSStackHeaderConfigIOSBackButtonDisplayMode(
|
|
487
|
+
newHeaderProps.backButtonDisplayMode);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
if (oldHeaderProps.backButtonMenuEnabled != newHeaderProps.backButtonMenuEnabled) {
|
|
491
|
+
_backButtonMenuEnabled = newHeaderProps.backButtonMenuEnabled;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
if (oldHeaderProps.standardAppearance != newHeaderProps.standardAppearance) {
|
|
495
|
+
_standardAppearance = [RNSStackHeaderAppearanceMapper
|
|
496
|
+
appearanceFromDictionary:[self dictionaryFromAppearanceProp:newHeaderProps.standardAppearance]];
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
if (oldHeaderProps.scrollEdgeAppearance != newHeaderProps.scrollEdgeAppearance) {
|
|
500
|
+
_scrollEdgeAppearance = [RNSStackHeaderAppearanceMapper
|
|
501
|
+
scrollEdgeAppearanceFromDictionary:[self dictionaryFromAppearanceProp:newHeaderProps.scrollEdgeAppearance]];
|
|
502
|
+
}
|
|
503
|
+
|
|
447
504
|
if (oldHeaderProps.titleMenu != newHeaderProps.titleMenu) {
|
|
448
505
|
_titleMenu = [RNSStackHeaderMenuMapper
|
|
449
506
|
menuFromDictionary:rnscreens::conversion::RNSConvertFollyDynamicToId(newHeaderProps.titleMenu)];
|
|
@@ -452,14 +509,14 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
452
509
|
|
|
453
510
|
[super updateProps:props oldProps:oldProps];
|
|
454
511
|
|
|
455
|
-
[
|
|
512
|
+
[self.headerCoordinator applyConfigProperties];
|
|
456
513
|
|
|
457
514
|
if (titleMenuDidChange) {
|
|
458
515
|
// title menu is a prop on the navigation item, not on one of the bar button items
|
|
459
516
|
// thus it is not configured with matching RNSStackHeaderItemComponentView
|
|
460
517
|
// but here directly
|
|
461
|
-
[
|
|
462
|
-
[
|
|
518
|
+
[self.headerCoordinator resetTitleMenuTracker];
|
|
519
|
+
[self.headerCoordinator reapplyTitleMenu];
|
|
463
520
|
}
|
|
464
521
|
}
|
|
465
522
|
|
|
@@ -482,6 +539,15 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
482
539
|
|
|
483
540
|
#pragma mark - Private
|
|
484
541
|
|
|
542
|
+
- (nullable NSDictionary *)dictionaryFromAppearanceProp:(const folly::dynamic &)appearanceProp
|
|
543
|
+
{
|
|
544
|
+
if (appearanceProp.type() != folly::dynamic::OBJECT) {
|
|
545
|
+
return nil;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
return rnscreens::conversion::RNSConvertFollyDynamicToId(appearanceProp);
|
|
549
|
+
}
|
|
550
|
+
|
|
485
551
|
- (nullable RNSStackScreenHeaderCoordinator *)headerCoordinator
|
|
486
552
|
{
|
|
487
553
|
if (self.superview == nil) {
|
|
@@ -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
|
|
|
@@ -14,7 +15,17 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
14
15
|
@property (nonatomic, readonly, nullable) NSString *largeTitle;
|
|
15
16
|
@property (nonatomic, readonly, nullable) NSString *largeSubtitle;
|
|
16
17
|
@property (nonatomic, readonly) BOOL largeTitleEnabled;
|
|
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
|
|
23
|
+
@property (nonatomic, readonly, nullable) NSString *backButtonTitle;
|
|
24
|
+
@property (nonatomic, readonly) UINavigationItemBackButtonDisplayMode backButtonDisplayMode;
|
|
25
|
+
@property (nonatomic, readonly) BOOL backButtonMenuEnabled;
|
|
17
26
|
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *titleMenu;
|
|
27
|
+
@property (nonatomic, readonly, nullable) UINavigationBarAppearance *standardAppearance;
|
|
28
|
+
@property (nonatomic, readonly, nullable) UINavigationBarAppearance *scrollEdgeAppearance;
|
|
18
29
|
|
|
19
30
|
/**
|
|
20
31
|
Children are expected to conform to either RNSStackHeaderItemDataProviding
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#import "RNSStackHeaderConfigComponentView.h"
|
|
3
3
|
|
|
4
4
|
#import <React/RCTConversions.h>
|
|
5
|
-
#import <rnscreens/RNSStackHeaderConfigComponentDescriptor.h>
|
|
5
|
+
#import <react/renderer/components/rnscreens/RNSStackHeaderConfigComponentDescriptor.h>
|
|
6
6
|
|
|
7
7
|
namespace react = facebook::react;
|
|
8
8
|
|
|
@@ -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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#import "RNSStackHeaderIconResolver.h"
|
|
2
|
+
#import <React/RCTLog.h>
|
|
2
3
|
|
|
3
4
|
@implementation RNSStackHeaderIconResolver
|
|
4
5
|
|
|
@@ -18,11 +19,17 @@
|
|
|
18
19
|
switch (iconData.iconType) {
|
|
19
20
|
case RNSStackHeaderIconTypeSfSymbol: {
|
|
20
21
|
UIImage *image = [UIImage systemImageNamed:iconData.resourceName];
|
|
22
|
+
if (image == nil && iconData.resourceName != nil) {
|
|
23
|
+
RCTLogWarn(@"[RNScreens] Failed to load SF Symbol \"%@\" for header icon", iconData.resourceName);
|
|
24
|
+
}
|
|
21
25
|
iconData.resolvedImage = image;
|
|
22
26
|
return image;
|
|
23
27
|
}
|
|
24
28
|
case RNSStackHeaderIconTypeXcasset: {
|
|
25
29
|
UIImage *image = [UIImage imageNamed:iconData.resourceName];
|
|
30
|
+
if (image == nil && iconData.resourceName != nil) {
|
|
31
|
+
RCTLogWarn(@"[RNScreens] Failed to load xcasset \"%@\" for header icon", iconData.resourceName);
|
|
32
|
+
}
|
|
26
33
|
iconData.resolvedImage = image;
|
|
27
34
|
return image;
|
|
28
35
|
}
|
|
@@ -12,27 +12,36 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
12
12
|
|
|
13
13
|
@property (nonatomic, readonly) RNSHeaderItemPlacement placement;
|
|
14
14
|
@property (nonatomic, readonly, nullable) NSString *itemId;
|
|
15
|
+
@property (nonatomic, readonly, nullable) NSString *identifier;
|
|
15
16
|
@property (nonatomic, readonly, nullable) NSString *title;
|
|
16
17
|
@property (nonatomic, readonly, nullable) RNSStackHeaderIconData *icon;
|
|
17
18
|
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *menu;
|
|
19
|
+
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *menuRepresentation;
|
|
18
20
|
@property (nonatomic, readonly, nullable) UIView *customView;
|
|
21
|
+
@property (nonatomic, readonly) UIBarButtonItemStyle style;
|
|
22
|
+
@property (nonatomic, readonly) BOOL disabled;
|
|
19
23
|
@property (nonatomic, readonly) BOOL respondsToOnPress;
|
|
24
|
+
@property (nonatomic, readonly) BOOL hidesSharedBackground;
|
|
25
|
+
@property (nonatomic, readonly) RNSHeaderItemVisibilityPriority visibilityPriority;
|
|
20
26
|
|
|
21
27
|
@property (nonatomic, nullable) NSString *titleProp;
|
|
22
28
|
@property (nonatomic, nullable) RNSStackHeaderIconData *iconProp;
|
|
23
29
|
@property (nonatomic, nullable) RNSStackHeaderMenuData *menuProp;
|
|
30
|
+
@property (nonatomic, nullable) RNSStackHeaderMenuData *menuRepresentationProp;
|
|
24
31
|
|
|
25
32
|
@property (nonatomic, weak, nullable) id<RNSStackHeaderItemInvalidationDelegate> invalidationDelegate;
|
|
26
33
|
|
|
27
34
|
- (void)emitOnPress;
|
|
28
35
|
|
|
29
36
|
/**
|
|
30
|
-
* 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.
|
|
31
39
|
* If parentMenu is nil, the element is the root menu and is replaced directly.
|
|
32
40
|
*/
|
|
33
41
|
- (void)updateMenuElementWithId:(NSString *)elementId
|
|
34
42
|
withElement:(id<RNSStackHeaderMenuElement>)newElement
|
|
35
|
-
parentMenu:(nullable RNSStackHeaderMenuData *)parentMenu
|
|
43
|
+
parentMenu:(nullable RNSStackHeaderMenuData *)parentMenu
|
|
44
|
+
inMenuRepresentation:(BOOL)inMenuRepresentation;
|
|
36
45
|
|
|
37
46
|
@end
|
|
38
47
|
|
|
@@ -42,7 +51,7 @@ NS_ASSUME_NONNULL_END
|
|
|
42
51
|
|
|
43
52
|
#if defined(__cplusplus)
|
|
44
53
|
|
|
45
|
-
#import <rnscreens/RNSStackHeaderItemComponentDescriptor.h>
|
|
54
|
+
#import <react/renderer/components/rnscreens/RNSStackHeaderItemComponentDescriptor.h>
|
|
46
55
|
|
|
47
56
|
@interface RNSStackHeaderItemComponentView ()
|
|
48
57
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
#import <React/RCTLog.h>
|
|
14
14
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
15
15
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
16
|
-
#import <rnscreens/RNSStackHeaderItemComponentDescriptor.h>
|
|
16
|
+
#import <react/renderer/components/rnscreens/RNSStackHeaderItemComponentDescriptor.h>
|
|
17
17
|
|
|
18
18
|
namespace react = facebook::react;
|
|
19
19
|
|
|
@@ -45,12 +45,18 @@ namespace react = facebook::react;
|
|
|
45
45
|
- (void)resetProps
|
|
46
46
|
{
|
|
47
47
|
_itemId = nil;
|
|
48
|
+
_identifier = nil;
|
|
48
49
|
[self setTitleProp:nil];
|
|
49
50
|
[self setIconProp:nil];
|
|
50
51
|
[self setMenuProp:nil];
|
|
52
|
+
[self setMenuRepresentationProp:nil];
|
|
51
53
|
_placement = RNSHeaderItemPlacementTrailing;
|
|
52
54
|
_didSetHeaderItemPlacement = NO;
|
|
55
|
+
_style = UIBarButtonItemStylePlain;
|
|
56
|
+
_disabled = NO;
|
|
53
57
|
_respondsToOnPress = NO;
|
|
58
|
+
_hidesSharedBackground = NO;
|
|
59
|
+
_visibilityPriority = RNSHeaderItemVisibilityPriorityStandard;
|
|
54
60
|
}
|
|
55
61
|
|
|
56
62
|
- (void)setTitleProp:(NSString *)titleProp
|
|
@@ -71,6 +77,12 @@ namespace react = facebook::react;
|
|
|
71
77
|
_menu = menuProp;
|
|
72
78
|
}
|
|
73
79
|
|
|
80
|
+
- (void)setMenuRepresentationProp:(RNSStackHeaderMenuData *)menuRepresentationProp
|
|
81
|
+
{
|
|
82
|
+
_menuRepresentationProp = menuRepresentationProp;
|
|
83
|
+
_menuRepresentation = menuRepresentationProp;
|
|
84
|
+
}
|
|
85
|
+
|
|
74
86
|
- (void)emitOnPress
|
|
75
87
|
{
|
|
76
88
|
[_headerItemEventEmitter emitOnPress];
|
|
@@ -79,11 +91,22 @@ namespace react = facebook::react;
|
|
|
79
91
|
- (void)updateMenuElementWithId:(NSString *)elementId
|
|
80
92
|
withElement:(id<RNSStackHeaderMenuElement>)newElement
|
|
81
93
|
parentMenu:(nullable RNSStackHeaderMenuData *)parentMenu
|
|
94
|
+
inMenuRepresentation:(BOOL)inMenuRepresentation
|
|
82
95
|
{
|
|
83
|
-
if (
|
|
84
|
-
|
|
96
|
+
if (inMenuRepresentation) {
|
|
97
|
+
if (parentMenu == nil) {
|
|
98
|
+
_menuRepresentation = (RNSStackHeaderMenuData *)newElement;
|
|
99
|
+
} else {
|
|
100
|
+
_menuRepresentation = [RNSStackHeaderMenuCoordinator menu:_menuRepresentation
|
|
101
|
+
replacingChildWithId:elementId
|
|
102
|
+
withElement:newElement];
|
|
103
|
+
}
|
|
85
104
|
} else {
|
|
86
|
-
|
|
105
|
+
if (parentMenu == nil) {
|
|
106
|
+
_menu = (RNSStackHeaderMenuData *)newElement;
|
|
107
|
+
} else {
|
|
108
|
+
_menu = [RNSStackHeaderMenuCoordinator menu:_menu replacingChildWithId:elementId withElement:newElement];
|
|
109
|
+
}
|
|
87
110
|
}
|
|
88
111
|
[_invalidationDelegate headerItemMenuDidUpdateFromCommandWithId:_itemId];
|
|
89
112
|
}
|
|
@@ -183,11 +206,17 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
183
206
|
_itemId = RCTNSStringFromStringNilIfEmpty(newItemProps.itemId);
|
|
184
207
|
}
|
|
185
208
|
|
|
209
|
+
if (oldItemProps.identifier != newItemProps.identifier) {
|
|
210
|
+
_identifier = RCTNSStringFromStringNilIfEmpty(newItemProps.identifier);
|
|
211
|
+
needsUpdate = YES;
|
|
212
|
+
}
|
|
213
|
+
|
|
186
214
|
if (oldItemProps.placement != newItemProps.placement) {
|
|
187
215
|
if (_didSetHeaderItemPlacement) {
|
|
188
216
|
RCTLogWarn(@"[RNScreens] Changing header item placement at runtime is not supported");
|
|
189
217
|
} else {
|
|
190
|
-
_placement =
|
|
218
|
+
_placement =
|
|
219
|
+
rnscreens::conversion::RNSHeaderItemPlacementFromReactRNSStackHeaderItemIOSPlacement(newItemProps.placement);
|
|
191
220
|
}
|
|
192
221
|
}
|
|
193
222
|
_didSetHeaderItemPlacement = YES;
|
|
@@ -209,11 +238,49 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
209
238
|
menuDidChange = YES;
|
|
210
239
|
}
|
|
211
240
|
|
|
241
|
+
if (oldItemProps.menuRepresentation != newItemProps.menuRepresentation) {
|
|
242
|
+
[self setMenuRepresentationProp:[RNSStackHeaderMenuMapper
|
|
243
|
+
menuFromDictionary:rnscreens::conversion::RNSConvertFollyDynamicToId(
|
|
244
|
+
newItemProps.menuRepresentation)]];
|
|
245
|
+
// menu representation is applied together with the menu & shares its toggle state tracker,
|
|
246
|
+
// so it follows the same invalidation path
|
|
247
|
+
menuDidChange = YES;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (oldItemProps.variant != newItemProps.variant) {
|
|
251
|
+
_style = rnscreens::conversion::UIBarButtonItemStyleFromReactRNSStackHeaderItemIOSVariant(newItemProps.variant);
|
|
252
|
+
needsUpdate = YES;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
if (oldItemProps.disabled != newItemProps.disabled) {
|
|
256
|
+
_disabled = newItemProps.disabled;
|
|
257
|
+
needsUpdate = YES;
|
|
258
|
+
}
|
|
259
|
+
|
|
212
260
|
if (oldItemProps.respondsToOnPress != newItemProps.respondsToOnPress) {
|
|
213
261
|
_respondsToOnPress = newItemProps.respondsToOnPress;
|
|
214
262
|
needsUpdate = YES;
|
|
215
263
|
}
|
|
216
264
|
|
|
265
|
+
if (oldItemProps.hidesSharedBackground != newItemProps.hidesSharedBackground) {
|
|
266
|
+
_hidesSharedBackground = newItemProps.hidesSharedBackground;
|
|
267
|
+
needsUpdate = YES;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if (oldItemProps.visibilityPriority != newItemProps.visibilityPriority) {
|
|
271
|
+
_visibilityPriority =
|
|
272
|
+
rnscreens::conversion::RNSHeaderItemVisibilityPriorityFromReactRNSStackHeaderItemIOSVisibilityPriority(
|
|
273
|
+
newItemProps.visibilityPriority);
|
|
274
|
+
// tvOS and visionOS are excluded on purpose: `visibilityPriority` exists there, but the only
|
|
275
|
+
// supported value is `standard`, which is already the default.
|
|
276
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(27_0) && !TARGET_OS_TV && !TARGET_OS_VISION
|
|
277
|
+
// The item is rebuilt only on iOS 27+, where the priority is actually applied.
|
|
278
|
+
if (@available(iOS 27.0, *)) {
|
|
279
|
+
needsUpdate = YES;
|
|
280
|
+
}
|
|
281
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(27_0) && !TARGET_OS_TV && !TARGET_OS_VISION
|
|
282
|
+
}
|
|
283
|
+
|
|
217
284
|
[super updateProps:props oldProps:oldProps];
|
|
218
285
|
|
|
219
286
|
if (needsUpdate) {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
#import <UIKit/UIKit.h>
|
|
4
4
|
|
|
5
5
|
#import "RNSHeaderItemPlacement.h"
|
|
6
|
+
#import "RNSHeaderItemVisibilityPriority.h"
|
|
6
7
|
#import "RNSStackHeaderIconData.h"
|
|
7
8
|
#import "RNSStackHeaderMenuData.h"
|
|
8
9
|
|
|
@@ -12,11 +13,17 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
12
13
|
|
|
13
14
|
@property (nonatomic, readonly) RNSHeaderItemPlacement placement;
|
|
14
15
|
@property (nonatomic, readonly, nullable) NSString *itemId;
|
|
16
|
+
@property (nonatomic, readonly, nullable) NSString *identifier;
|
|
15
17
|
@property (nonatomic, readonly, nullable) NSString *title;
|
|
16
18
|
@property (nonatomic, readonly, nullable) RNSStackHeaderIconData *icon;
|
|
17
19
|
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *menu;
|
|
20
|
+
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *menuRepresentation;
|
|
18
21
|
@property (nonatomic, readonly, nullable) UIView *customView;
|
|
22
|
+
@property (nonatomic, readonly) UIBarButtonItemStyle style;
|
|
23
|
+
@property (nonatomic, readonly) BOOL disabled;
|
|
19
24
|
@property (nonatomic, readonly) BOOL respondsToOnPress;
|
|
25
|
+
@property (nonatomic, readonly) BOOL hidesSharedBackground;
|
|
26
|
+
@property (nonatomic, readonly) RNSHeaderItemVisibilityPriority visibilityPriority;
|
|
20
27
|
|
|
21
28
|
@end
|
|
22
29
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#import "RNSStackHeaderItemComponentView.h"
|
|
3
3
|
|
|
4
4
|
#import <React/RCTConversions.h>
|
|
5
|
-
#import <rnscreens/RNSStackHeaderItemComponentDescriptor.h>
|
|
5
|
+
#import <react/renderer/components/rnscreens/RNSStackHeaderItemComponentDescriptor.h>
|
|
6
6
|
|
|
7
7
|
namespace react = facebook::react;
|
|
8
8
|
|
|
@@ -43,7 +43,8 @@ namespace react = facebook::react;
|
|
|
43
43
|
if (_didSetHeaderItemSpacerPlacement) {
|
|
44
44
|
RCTLogWarn(@"[RNScreens] Changing header item spacer placement at runtime is not supported");
|
|
45
45
|
} else {
|
|
46
|
-
_placement = rnscreens::conversion::
|
|
46
|
+
_placement = rnscreens::conversion::RNSHeaderItemSpacerPlacementFromReactRNSStackHeaderItemSpacerIOSPlacement(
|
|
47
|
+
newSpacerProps.placement);
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
_didSetHeaderItemSpacerPlacement = YES;
|
|
@@ -25,6 +25,19 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
25
25
|
withImageLoader:(id<RNSImageLoading>)imageLoader
|
|
26
26
|
menuInvalidatedCallback:(nullable void (^)(void))onMenuInvalidated;
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Applies menu representation to the item - a menu element substituting the item
|
|
30
|
+
* when it is displayed in a menu (e.g. the navigation bar overflow menu).
|
|
31
|
+
* Passing nil `data` clears the representation. Works like regular `applyMenu`.
|
|
32
|
+
* No-op below iOS 16 and on tvOS, where `UIBarButtonItem.menuRepresentation` is unavailable.
|
|
33
|
+
*/
|
|
34
|
+
+ (void)applyMenuRepresentation:(nullable RNSStackHeaderMenuData *)data
|
|
35
|
+
toBarButtonItem:(UIBarButtonItem *)item
|
|
36
|
+
withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
|
|
37
|
+
stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
|
|
38
|
+
withImageLoader:(id<RNSImageLoading>)imageLoader
|
|
39
|
+
menuInvalidatedCallback:(nullable void (^)(void))onMenuInvalidated;
|
|
40
|
+
|
|
28
41
|
/**
|
|
29
42
|
* Collects IDs of all toggle items in a single selection hierarchy rooted at the given menu.
|
|
30
43
|
*/
|
|
@@ -26,6 +26,30 @@
|
|
|
26
26
|
#endif // !TARGET_OS_TV || __TV_OS_VERSION_MAX_ALLOWED >= 170000
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
+ (void)applyMenuRepresentation:(nullable RNSStackHeaderMenuData *)data
|
|
30
|
+
toBarButtonItem:(UIBarButtonItem *)item
|
|
31
|
+
withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
|
|
32
|
+
stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
|
|
33
|
+
withImageLoader:(id<RNSImageLoading>)imageLoader
|
|
34
|
+
menuInvalidatedCallback:(nullable void (^)(void))onMenuInvalidated
|
|
35
|
+
{
|
|
36
|
+
#if RNS_IPHONE_OS_VERSION_AVAILABLE(16_0) && !TARGET_OS_TV
|
|
37
|
+
if (@available(iOS 16.0, *)) {
|
|
38
|
+
if (data == nil) {
|
|
39
|
+
item.menuRepresentation = nil;
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
item.menuRepresentation = [self buildMenuFromData:data
|
|
43
|
+
withHeaderEventsDelegate:delegate
|
|
44
|
+
stateTracker:tracker
|
|
45
|
+
singleSelectionRoot:nil
|
|
46
|
+
initialSingleSelectionStateClaimed:NULL
|
|
47
|
+
withImageLoader:imageLoader
|
|
48
|
+
menuInvalidatedCallback:onMenuInvalidated];
|
|
49
|
+
}
|
|
50
|
+
#endif // RNS_IPHONE_OS_VERSION_AVAILABLE(16_0) && !TARGET_OS_TV
|
|
51
|
+
}
|
|
52
|
+
|
|
29
53
|
+ (UIMenu *)buildMenuFromData:(RNSStackHeaderMenuData *)data
|
|
30
54
|
withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
|
|
31
55
|
stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
|
|
@@ -41,11 +41,18 @@ typedef NS_ENUM(NSInteger, RNSMenuElementPosition) {
|
|
|
41
41
|
*/
|
|
42
42
|
@property (nonatomic, copy, readonly, nullable) NSString *trackerItemId;
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Whether the element was found in the header item's menuRepresentation tree
|
|
46
|
+
* rather than its menu tree.
|
|
47
|
+
*/
|
|
48
|
+
@property (nonatomic, readonly) BOOL inMenuRepresentation;
|
|
49
|
+
|
|
44
50
|
- (instancetype)initWithSearchResult:(RNSStackHeaderMenuElementSearchResult *)searchResult
|
|
45
51
|
position:(RNSMenuElementPosition)position
|
|
46
52
|
headerItem:(nullable id<RNSStackHeaderItemDataProviding>)headerItem
|
|
47
53
|
rootMenu:(nullable RNSStackHeaderMenuData *)rootMenu
|
|
48
|
-
trackerItemId:(nullable NSString *)trackerItemId
|
|
54
|
+
trackerItemId:(nullable NSString *)trackerItemId
|
|
55
|
+
inMenuRepresentation:(BOOL)inMenuRepresentation;
|
|
49
56
|
|
|
50
57
|
@end
|
|
51
58
|
|